Skip to content

Commit bf890f6

Browse files
committed
rework on reg region and stop
1 parent 702fec6 commit bf890f6

File tree

6 files changed

+42
-23
lines changed

6 files changed

+42
-23
lines changed

src/sfeTk/sfeTkIBus.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,13 @@ 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
123125
*/
124-
virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes) = 0;
126+
virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes, size_t &readBytes) = 0;
125127
};
126128

127129
//};

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: 14 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,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
}

src/sfeTkArdI2C.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,12 @@ class sfeTkArdI2C : public sfeTkII2C
169169
170170
@param devReg The device's register's address.
171171
@param data Data to write.
172+
@param numBytes - length of data
173+
@param[out] readBytes - Number of bytes read
172174
173175
@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
/*--------------------------------------------------------------------------

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)