Skip to content

Commit a3fd5c2

Browse files
authored
Merge branch 'readregion_api_change' into adderr
2 parents aba6692 + bf890f6 commit a3fd5c2

File tree

6 files changed

+36
-22
lines changed

6 files changed

+36
-22
lines changed

src/sfeTk/sfeTkIBus.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ class sfeTkIBus
117117
@param devAddr The device's I2C address.
118118
@param devReg The device's register's address.
119119
@param data Data to write.
120+
@param numBytes - length of data
121+
@param[out] readBytes - number of bytes read
120122
121123
@retval int returns kSTkErrOk on success, or kSTkErrFail code
122124

src/sfeTk/sfeTkII2C.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3131
class sfeTkII2C : public sfeTkIBus
3232
{
3333
public:
34-
// set the address to No address and stop bit to the default value of 1
35-
sfeTkII2C() : _address{kNoAddress}, _stop{kDefaultStopBit}
34+
// set the address to No address and stop flag to true
35+
sfeTkII2C() : _address{kNoAddress}, _stop{true}
3636
{
3737
}
3838
sfeTkII2C(uint8_t addr) : _address{addr}
@@ -70,31 +70,30 @@ class sfeTkII2C : public sfeTkIBus
7070
}
7171

7272
/*--------------------------------------------------------------------------
73-
@brief setter for I2C stops (vs restarts)
73+
@brief setter for I2C stop message (vs restarts)
7474
7575
*/
76-
virtual void setStop(uint8_t stop)
76+
virtual void setStop(bool stop)
7777
{
7878
_stop = stop;
7979
}
8080

8181
/*--------------------------------------------------------------------------
82-
@brief getter for I2C stops (vs restarts)
82+
@brief getter for I2C stops message (vs restarts)
8383
84-
@retval uint8_t returns the value of "send stop"
84+
@retval bool returns the value of "send stop"
8585
8686
*/
87-
virtual uint8_t getStop(void)
87+
virtual bool stop(void)
8888
{
8989
return _stop;
9090
}
9191

9292
static constexpr uint8_t kNoAddress = 0;
93-
static constexpr uint8_t kDefaultStopBit = 1;
9493

9594
private:
9695
uint8_t _address;
97-
uint8_t _stop;
96+
bool _stop;
9897
};
9998

10099
//};

src/sfeTkArdI2C.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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,11 +200,10 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead)
200200
if (!_i2cPort)
201201
return kSTkErrBusNotInit;
202202

203-
uint16_t nRead = 0;
203+
size_t nRead;
204+
sfeTkError_t retval = readRegisterRegion(devReg, (uint8_t *)&dataToRead, sizeof(uint16_t), nRead);
204205

205-
sfeTkError_t result = readRegisterRegion(devReg, (uint8_t *)&dataToRead, sizeof(uint16_t), &nRead);
206-
207-
return nRead == 2 ? kSTkErrOk : result;
206+
return (retval == kSTkErrOk && nRead == 2 ? kSTkErrOk : retval);
208207
}
209208

210209
//---------------------------------------------------------------------------------
@@ -216,13 +215,16 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead)
216215
//
217216
sfeTkError_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes)
218217
{
218+
219219
// got port
220220
if (!_i2cPort)
221221
return kSTkErrBusNotInit;
222222

223223
// Buffer valid?
224224
if (!data)
225225
return kSTkErrBusNullBuffer;
226+
227+
readBytes = 0;
226228

227229
uint16_t nOrig = numBytes; // original number of bytes.
228230
uint8_t nChunk;
@@ -238,7 +240,7 @@ sfeTkError_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size
238240

239241
_i2cPort->write(devReg);
240242

241-
if (_i2cPort->endTransmission(getStop()) != 0)
243+
if (_i2cPort->endTransmission(stop()))
242244
return kSTkErrFail; // error with the end transmission
243245

244246
bFirstInter = false;
@@ -248,11 +250,11 @@ sfeTkError_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size
248250
nChunk = numBytes > _bufferChunkSize ? _bufferChunkSize : numBytes;
249251

250252
// Request the bytes. If this is the last chunk, always send a stop
251-
nReturned = _i2cPort->requestFrom((int)address(), (int)nChunk, (int)(nChunk == numBytes ? true : getStop()));
253+
nReturned = _i2cPort->requestFrom((int)address(), (int)nChunk, (int)(nChunk == numBytes ? true : stop()));
252254

253255
// No data returned, no dice
254256
if (nReturned == 0)
255-
return -1; // error
257+
return kSTkErrBusUnderRead; // error
256258

257259
// Copy the retrieved data chunk to the current index in the data segment
258260
for (i = 0; i < nReturned; i++)

src/sfeTkArdI2C.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ class sfeTkArdI2C : public sfeTkII2C
170170
@param devReg The device's register's address.
171171
@param data Data being read.
172172
@param numBytes Number of bytes to read.
173-
@param readBytes Number of bytes read.
173+
@param[out] readBytes - Number of bytes read
174+
174175
175176
@retval kSTkErrOk on success
176177
*/

src/sfeTkArdSPI.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,18 @@ sfeTkError_t sfeTkArdSPI::writeRegisterRegion(uint8_t devReg, const uint8_t *dat
178178

179179
sfeTkError_t sfeTkArdSPI::readRegisterByte(uint8_t devReg, uint8_t &data)
180180
{
181-
return readRegisterRegion(devReg, &data, sizeof(data)) == 1;
181+
size_t nRead;
182+
sfeTkError_t retval = readRegisterRegion(devReg, (uint8_t *)&data, sizeof(data), nRead);
183+
184+
return (retval == kSTkErrOk && nRead == sizeof(data) ? kSTkErrOk : retval);
182185
}
183186

184187
sfeTkError_t sfeTkArdSPI::readRegisterWord(uint8_t devReg, uint16_t &data)
185188
{
186-
return readRegisterRegion(devReg, (uint8_t *)&data, sizeof(data)) == 2;
189+
size_t nRead;
190+
sfeTkError_t retval = readRegisterRegion(devReg, (uint8_t *)&data, sizeof(data), nRead);
191+
192+
return (retval == kSTkErrOk && nRead == sizeof(data) ? kSTkErrOk : retval);
187193
}
188194
//---------------------------------------------------------------------------------
189195
// readRegisterRegion()
@@ -192,7 +198,7 @@ sfeTkError_t sfeTkArdSPI::readRegisterWord(uint8_t devReg, uint16_t &data)
192198
//
193199
// Returns kSTkErrOk on success
194200
//
195-
sfeTkError_t sfeTkArdSPI::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes)
201+
sfeTkError_t sfeTkArdSPI::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes)
196202
{
197203
if (!_spiPort)
198204
return kSTkErrBusNotInit;
@@ -213,5 +219,7 @@ sfeTkError_t sfeTkArdSPI::readRegisterRegion(uint8_t devReg, uint8_t *data, size
213219
digitalWrite(cs(), HIGH);
214220
_spiPort->endTransaction();
215221

222+
readBytes = numBytes;
223+
216224
return kSTkErrOk;
217225
}

src/sfeTkArdSPI.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,12 @@ class sfeTkArdSPI : public sfeTkISPI
148148
149149
@param devReg The device's register's address.
150150
@param data Data to write.
151+
@param numBytes - length of data
152+
@param[out] readBytes - Number of bytes read
151153
152154
@retval sfeTkError_t - true on success
153155
*/
154-
virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes);
156+
virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes, size_t &readBytes);
155157

156158
protected:
157159
// note: The instance data is protected, allowing access if a sub-class is

0 commit comments

Comments
 (0)