@@ -176,6 +176,29 @@ sfeTkError_t sfeTkArdSPI::writeRegisterRegion(uint8_t devReg, const uint8_t *dat
176
176
return kSTkErrOk ;
177
177
}
178
178
179
+ // 16 bit address version ...
180
+ sfeTkError_t sfeTkArdSPI::writeRegister16Region (uint16_t devReg, const uint8_t *data, size_t length)
181
+ {
182
+ if (!_spiPort)
183
+ return kSTkErrBusNotInit ;
184
+
185
+ // Apply settings before work
186
+ _spiPort->beginTransaction (_sfeSPISettings);
187
+
188
+ // Signal communication start
189
+ digitalWrite (cs (), LOW);
190
+ _spiPort->transfer16 (devReg);
191
+
192
+ for (size_t i = 0 ; i < length; i++)
193
+ _spiPort->transfer (*data++);
194
+
195
+ // End communication
196
+ digitalWrite (cs (), HIGH);
197
+ _spiPort->endTransaction ();
198
+
199
+ return kSTkErrOk ;
200
+ }
201
+
179
202
sfeTkError_t sfeTkArdSPI::readRegisterByte (uint8_t devReg, uint8_t &data)
180
203
{
181
204
size_t nRead;
@@ -223,3 +246,36 @@ sfeTkError_t sfeTkArdSPI::readRegisterRegion(uint8_t devReg, uint8_t *data, size
223
246
224
247
return kSTkErrOk ;
225
248
}
249
+
250
+ // ---------------------------------------------------------------------------------
251
+ // readRegister16Region()
252
+ //
253
+ // Reads an array of bytes to a given a 16 bit register on the target address
254
+ //
255
+ // Returns kSTkErrOk on success
256
+ //
257
+ sfeTkError_t sfeTkArdSPI::readRegister16Region (uint16_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes)
258
+ {
259
+ if (!_spiPort)
260
+ return kSTkErrBusNotInit ;
261
+
262
+ // Apply settings
263
+ _spiPort->beginTransaction (_sfeSPISettings);
264
+
265
+ // Signal communication start
266
+ digitalWrite (cs (), LOW);
267
+
268
+ // A leading "1" must be added to transfer with devRegister to indicate a "read"
269
+ _spiPort->transfer16 (devReg | kSPIReadBit );
270
+
271
+ for (size_t i = 0 ; i < numBytes; i++)
272
+ *data++ = _spiPort->transfer (0x00 );
273
+
274
+ // End transaction
275
+ digitalWrite (cs (), HIGH);
276
+ _spiPort->endTransaction ();
277
+
278
+ readBytes = numBytes;
279
+
280
+ return kSTkErrOk ;
281
+ }
0 commit comments