Skip to content

Commit a8d2ec7

Browse files
committed
cleanup, add comments, better logic on wire begin call, better init checking of system
1 parent cbb04a9 commit a8d2ec7

File tree

7 files changed

+323
-108
lines changed

7 files changed

+323
-108
lines changed

src/SparkFun_TMF882X_Library.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class SparkFun_TMF882X : public QwDevTMF882X {
8282
{
8383
// Setup I2C object and pass into the superclass
8484
_i2cBus.init(wirePort);
85-
setCommBus(_i2cBus, deviceAddress);
85+
setCommunicationBus(_i2cBus, deviceAddress);
8686

8787
// Initialize the system - return results
8888
return this->QwDevTMF882X::init();

src/qwiic_i2c.cpp

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ const static uint16_t kChunkSize = kMaxTransferBuffer - 2;
7171
//////////////////////////////////////////////////////////////////////////////////////////////////
7272
// Constructor
7373

74-
QwI2C::QwI2C(void)
75-
: m_i2cPort { nullptr }
74+
QwI2C::QwI2C(void) : _i2cPort{nullptr}
7675
{
7776
}
7877
//////////////////////////////////////////////////////////////////////////////////////////////////
@@ -81,14 +80,16 @@ QwI2C::QwI2C(void)
8180
// Methods to init/setup this device. The caller can provide a Wire Port, or this class
8281
// will use the default
8382

84-
bool QwI2C::init(TwoWire& wirePort)
83+
bool QwI2C::init(TwoWire &wirePort, bool bInit)
8584
{
8685

8786
// if we don't have a wire port already
88-
if (!m_i2cPort) {
89-
m_i2cPort = &wirePort;
87+
if (!_i2cPort)
88+
{
89+
_i2cPort = &wirePort;
9090

91-
m_i2cPort->begin();
91+
if (bInit)
92+
_i2cPort->begin();
9293
}
9394

9495
return true;
@@ -98,10 +99,9 @@ bool QwI2C::init(TwoWire& wirePort)
9899

99100
bool QwI2C::init(void)
100101
{
101-
102102
// do we already have a wire port?
103-
if (!m_i2cPort)
104-
return init(Wire); // no wire, send in Wire
103+
if (!_i2cPort)
104+
return init(Wire, true); // no wire, send in Wire and init it
105105

106106
return true;
107107
}
@@ -113,11 +113,11 @@ bool QwI2C::init(void)
113113
bool QwI2C::ping(uint8_t i2c_address)
114114
{
115115

116-
if (!m_i2cPort)
116+
if (!_i2cPort)
117117
return false;
118118

119-
m_i2cPort->beginTransmission(i2c_address);
120-
return m_i2cPort->endTransmission() == 0;
119+
_i2cPort->beginTransmission(i2c_address);
120+
return _i2cPort->endTransmission() == 0;
121121
}
122122

123123
//////////////////////////////////////////////////////////////////////////////////////////////////
@@ -128,20 +128,20 @@ bool QwI2C::ping(uint8_t i2c_address)
128128
bool QwI2C::writeRegisterByte(uint8_t i2c_address, uint8_t offset, uint8_t dataToWrite)
129129
{
130130

131-
if (!m_i2cPort)
131+
if (!_i2cPort)
132132
return false;
133133

134-
m_i2cPort->beginTransmission(i2c_address);
135-
m_i2cPort->write(offset);
136-
m_i2cPort->write(dataToWrite);
137-
return m_i2cPort->endTransmission() == 0;
134+
_i2cPort->beginTransmission(i2c_address);
135+
_i2cPort->write(offset);
136+
_i2cPort->write(dataToWrite);
137+
return _i2cPort->endTransmission() == 0;
138138
}
139139
//////////////////////////////////////////////////////////////////////////////////////////////////
140140
// writeRegisterRegion()
141141
//
142142
// Write a block of data to a device.
143143

144-
int QwI2C::writeRegisterRegion(uint8_t i2c_address, uint8_t offset, uint8_t* data, uint16_t length)
144+
int QwI2C::writeRegisterRegion(uint8_t i2c_address, uint8_t offset, uint8_t *data, uint16_t length)
145145
{
146146

147147
// Note:
@@ -163,11 +163,11 @@ int QwI2C::writeRegisterRegion(uint8_t i2c_address, uint8_t offset, uint8_t* dat
163163

164164
// Just do a simple write transaction.
165165

166-
m_i2cPort->beginTransmission(i2c_address);
167-
m_i2cPort->write(offset);
168-
m_i2cPort->write(data, (int)length);
166+
_i2cPort->beginTransmission(i2c_address);
167+
_i2cPort->write(offset);
168+
_i2cPort->write(data, (int)length);
169169

170-
return m_i2cPort->endTransmission() ? -1 : 0; // -1 = error, 0 = success
170+
return _i2cPort->endTransmission() ? -1 : 0; // -1 = error, 0 = success
171171
}
172172

173173
////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -178,12 +178,12 @@ int QwI2C::writeRegisterRegion(uint8_t i2c_address, uint8_t offset, uint8_t* dat
178178
// For large buffers, the data is chuncked over KMaxI2CBufferLength at a time
179179
//
180180
//
181-
int QwI2C::readRegisterRegion(uint8_t addr, uint8_t reg, uint8_t* data, uint16_t numBytes)
181+
int QwI2C::readRegisterRegion(uint8_t addr, uint8_t reg, uint8_t *data, uint16_t numBytes)
182182
{
183183
uint8_t nChunk;
184184
uint8_t nReturned;
185185

186-
if (!m_i2cPort)
186+
if (!_i2cPort)
187187
return -1;
188188

189189
// Chunk in the data from the bus. This allows efficient data transfer if
@@ -194,34 +194,35 @@ int QwI2C::readRegisterRegion(uint8_t addr, uint8_t reg, uint8_t* data, uint16_t
194194
// the next chunk is a standard I2C transaction, but you don't send the register
195195
// address
196196

197-
int i; // counter in loop
197+
int i; // counter in loop
198198
bool bFirstInter = true; // Flag for first iteration - used to send register
199199

200-
while (numBytes > 0) {
201-
202-
m_i2cPort->beginTransmission(addr);
200+
while (numBytes > 0)
201+
{
202+
_i2cPort->beginTransmission(addr);
203203

204-
if (bFirstInter) {
205-
m_i2cPort->write(reg);
204+
if (bFirstInter)
205+
{
206+
_i2cPort->write(reg);
206207
bFirstInter = false;
207208
}
208209

209-
if (m_i2cPort->endTransmission(false) != 0)
210+
if (_i2cPort->endTransmission(false) != 0)
210211
return -1; // error with the end transmission
211212

212213
// We're chunking in data - keeping the max chunk to kMaxI2CBufferLength
213214
nChunk = numBytes > kChunkSize ? kChunkSize : numBytes;
214215

215216
// For this device, we always send the stop condition - or it won't chunk data.
216-
nReturned = m_i2cPort->requestFrom((int)addr, (int)nChunk, (int)true);
217+
nReturned = _i2cPort->requestFrom((int)addr, (int)nChunk, (int)true);
217218

218219
// No data returned, no dice
219220
if (nReturned == 0)
220221
return -1; // error
221222

222223
// Copy the retrieved data chunk to the current index in the data segment
223224
for (i = 0; i < nReturned; i++)
224-
*data++ = m_i2cPort->read();
225+
*data++ = _i2cPort->read();
225226

226227
// Decrement the amount of data recieved from the overall data request amount
227228
numBytes = numBytes - nReturned;

src/qwiic_i2c.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class QwI2C {
6161
QwI2C(void);
6262

6363
bool init(void);
64-
bool init(TwoWire& wirePort);
64+
bool init(TwoWire& wirePort, bool bInit=false);
6565

6666
// see if a device exists
6767
bool ping(uint8_t address);
@@ -74,5 +74,5 @@ class QwI2C {
7474
int readRegisterRegion(uint8_t addr, uint8_t reg, uint8_t* data, uint16_t numBytes);
7575

7676
private:
77-
TwoWire* m_i2cPort;
77+
TwoWire* _i2cPort;
7878
};

0 commit comments

Comments
 (0)