@@ -200,9 +200,11 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead)
200200 if (!_i2cPort)
201201 return kSTkErrBusNotInit ;
202202
203- uint32_t nRead = readRegisterRegion (devReg, ( uint8_t *)&dataToRead, sizeof ( uint16_t )) ;
203+ uint16_t nRead = 0 ;
204204
205- return (nRead == 2 ? kSTkErrOk : kSTkErrFail );
205+ sfeTkError_t result = readRegisterRegion (devReg, (uint8_t *)&dataToRead, sizeof (uint16_t ), &nRead);
206+
207+ return nRead == 2 ? kSTkErrOk : result;
206208}
207209
208210// ---------------------------------------------------------------------------------
@@ -212,12 +214,16 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead)
212214//
213215// Returns the number of bytes read, < 0 is an error
214216//
215- int32_t sfeTkArdI2C::readRegisterRegion (uint8_t devReg, uint8_t *data, size_t numBytes)
217+ int32_t sfeTkArdI2C::readRegisterRegion (uint8_t devReg, uint8_t *data, size_t numBytes, size_t *readBytes )
216218{
217219 // got port
218220 if (!_i2cPort)
219221 return kSTkErrBusNotInit ;
220222
223+ // Are buffers valid?
224+ if (!data || !readBytes)
225+ return kSTkErrBusNullBuffer ;
226+
221227 uint16_t nOrig = numBytes; // original number of bytes.
222228 uint8_t nChunk;
223229 uint16_t nReturned;
@@ -257,5 +263,7 @@ int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t nu
257263
258264 } // end while
259265
260- return nOrig - numBytes; // Success
266+ *readBytes = nOrig - numBytes; // Bytes read.
267+
268+ return (*readBytes == nOrig) ? kSTkErrOk : kSTkErrBusUnderRead ; // Success
261269}
0 commit comments