@@ -176,6 +176,29 @@ sfeTkError_t sfeTkArdSPI::writeRegisterRegion(uint8_t devReg, const uint8_t *dat
176176 return kSTkErrOk ;
177177}
178178
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+
179202sfeTkError_t sfeTkArdSPI::readRegisterByte (uint8_t devReg, uint8_t &data)
180203{
181204 size_t nRead;
@@ -223,3 +246,36 @@ sfeTkError_t sfeTkArdSPI::readRegisterRegion(uint8_t devReg, uint8_t *data, size
223246
224247 return kSTkErrOk ;
225248}
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