@@ -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
99100bool 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)
113113bool 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)
128128bool 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;
0 commit comments