Skip to content

Commit 9b7a93a

Browse files
committed
Update readRegisterRegion.
Returns a proper error code now. ReadBytes returns number of bytes read.
1 parent cf48269 commit 9b7a93a

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

src/sfeTk/sfeTkIBus.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class sfeTkIBus
121121
@retval int returns kSTkErrOk on success, or kSTkErrFail code
122122
123123
*/
124-
virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes) = 0;
124+
virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes, size_t *readBytes) = 0;
125125
};
126126

127127
//};

src/sfeTkArdI2C.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/sfeTkArdI2C.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,13 @@ class sfeTkArdI2C : public sfeTkII2C
168168
@note This method is virtual to allow it to be overridden to support a device that requires a unique impl
169169
170170
@param devReg The device's register's address.
171-
@param data Data to write.
171+
@param data Data being read.
172+
@param numBytes Number of bytes to read.
173+
@param readBytes Number of bytes read.
172174
173-
@retval kStkErrOk on success
175+
@retval kSTkErrOk on success
174176
*/
175-
sfeTkError_t readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes);
177+
sfeTkError_t readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t *readBytes);
176178

177179
// Buffer size chunk getter/setter
178180
/*--------------------------------------------------------------------------

0 commit comments

Comments
 (0)