@@ -174,7 +174,7 @@ sfeTkError_t sfeTkArdI2C::readRegisterByte(uint8_t devReg, uint8_t &dataToRead)
174174
175175 _i2cPort->beginTransmission (address ());
176176 _i2cPort->write (devReg);
177- _i2cPort->endTransmission (( int ) getStop ());
177+ _i2cPort->endTransmission (stop ());
178178 _i2cPort->requestFrom (address (), (uint8_t )1 );
179179
180180 while (_i2cPort->available ()) // slave may send less than requested
@@ -200,9 +200,10 @@ 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+ size_t nRead;
204+ sfeTkError_t retval = readRegisterRegion (devReg, (uint8_t *)&dataToRead, sizeof (uint16_t ), nRead);
204205
205- return (nRead == 2 ? kSTkErrOk : kSTkErrFail );
206+ return (retval == kSTkErrOk && nRead == 2 ? kSTkErrOk : retval );
206207}
207208
208209// ---------------------------------------------------------------------------------
@@ -212,12 +213,15 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead)
212213//
213214// Returns the number of bytes read, < 0 is an error
214215//
215- int32_t sfeTkArdI2C::readRegisterRegion (uint8_t devReg, uint8_t *data, size_t numBytes)
216+ sfeTkError_t sfeTkArdI2C::readRegisterRegion (uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes )
216217{
218+
217219 // got port
218220 if (!_i2cPort)
219221 return kSTkErrBusNotInit ;
220222
223+ readBytes = 0 ;
224+
221225 uint16_t nOrig = numBytes; // original number of bytes.
222226 uint8_t nChunk;
223227 uint16_t nReturned;
@@ -232,7 +236,7 @@ int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t nu
232236
233237 _i2cPort->write (devReg);
234238
235- if (_i2cPort->endTransmission (getStop ()) != 0 )
239+ if (_i2cPort->endTransmission (stop ()))
236240 return kSTkErrFail ; // error with the end transmission
237241
238242 bFirstInter = false ;
@@ -242,11 +246,11 @@ int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t nu
242246 nChunk = numBytes > _bufferChunkSize ? _bufferChunkSize : numBytes;
243247
244248 // Request the bytes. If this is the last chunk, always send a stop
245- nReturned = _i2cPort->requestFrom ((int )address (), (int )nChunk, (int )(nChunk == numBytes ? true : getStop ()));
249+ nReturned = _i2cPort->requestFrom ((int )address (), (int )nChunk, (int )(nChunk == numBytes ? true : stop ()));
246250
247251 // No data returned, no dice
248252 if (nReturned == 0 )
249- return - 1 ; // error
253+ return kSTkErrBusUnderRead ; // error
250254
251255 // Copy the retrieved data chunk to the current index in the data segment
252256 for (i = 0 ; i < nReturned; i++)
@@ -257,5 +261,7 @@ int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t nu
257261
258262 } // end while
259263
260- return nOrig - numBytes; // Success
264+ readBytes = nOrig - numBytes;
265+
266+ return kSTkErrOk ;
261267}
0 commit comments