Skip to content

Commit 98a3b4e

Browse files
committed
Remove extra begin/endTransmission calls during reads
Fixes #670 and #672
1 parent 3b5e731 commit 98a3b4e

File tree

2 files changed

+0
-40
lines changed

2 files changed

+0
-40
lines changed

Arduino/I2Cdev/I2Cdev.cpp

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -234,18 +234,14 @@ int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8
234234
useWire->beginTransmission(devAddr);
235235
useWire->send(regAddr);
236236
useWire->endTransmission();
237-
useWire->beginTransmission(devAddr);
238237
useWire->requestFrom((uint8_t)devAddr, (uint8_t)min((int)length - k, I2CDEVLIB_WIRE_BUFFER_LENGTH));
239-
240238
for (; useWire->available() && (timeout == 0 || millis() - t1 < timeout); count++) {
241239
data[count] = useWire->receive();
242240
#ifdef I2CDEV_SERIAL_DEBUG
243241
Serial.print(data[count], HEX);
244242
if (count + 1 < length) Serial.print(" ");
245243
#endif
246244
}
247-
248-
useWire->endTransmission();
249245
}
250246
#elif (ARDUINO == 100)
251247
// Arduino v1.0.0, Wire library
@@ -258,18 +254,14 @@ int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8
258254
useWire->beginTransmission(devAddr);
259255
useWire->write(regAddr);
260256
useWire->endTransmission();
261-
useWire->beginTransmission(devAddr);
262257
useWire->requestFrom((uint8_t)devAddr, (uint8_t)min((int)length - k, I2CDEVLIB_WIRE_BUFFER_LENGTH));
263-
264258
for (; useWire->available() && (timeout == 0 || millis() - t1 < timeout); count++) {
265259
data[count] = useWire->read();
266260
#ifdef I2CDEV_SERIAL_DEBUG
267261
Serial.print(data[count], HEX);
268262
if (count + 1 < length) Serial.print(" ");
269263
#endif
270264
}
271-
272-
useWire->endTransmission();
273265
}
274266
#elif (ARDUINO > 100)
275267
// Arduino v1.0.1+, Wire library
@@ -282,9 +274,7 @@ int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8
282274
useWire->beginTransmission(devAddr);
283275
useWire->write(regAddr);
284276
useWire->endTransmission();
285-
useWire->beginTransmission(devAddr);
286277
useWire->requestFrom((uint8_t)devAddr, (uint8_t)min((int)length - k, I2CDEVLIB_WIRE_BUFFER_LENGTH));
287-
288278
for (; useWire->available() && (timeout == 0 || millis() - t1 < timeout); count++) {
289279
data[count] = useWire->read();
290280
#ifdef I2CDEV_SERIAL_DEBUG
@@ -356,7 +346,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
356346
useWire->beginTransmission(devAddr);
357347
useWire->send(regAddr);
358348
useWire->endTransmission();
359-
useWire->beginTransmission(devAddr);
360349
useWire->requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes
361350

362351
bool msb = true; // starts with MSB, then LSB
@@ -375,8 +364,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
375364
}
376365
msb = !msb;
377366
}
378-
379-
useWire->endTransmission();
380367
}
381368
#elif (ARDUINO == 100)
382369
// Arduino v1.0.0, Wire library
@@ -389,7 +376,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
389376
useWire->beginTransmission(devAddr);
390377
useWire->write(regAddr);
391378
useWire->endTransmission();
392-
useWire->beginTransmission(devAddr);
393379
useWire->requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes
394380

395381
bool msb = true; // starts with MSB, then LSB
@@ -408,8 +394,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
408394
}
409395
msb = !msb;
410396
}
411-
412-
useWire->endTransmission();
413397
}
414398
#elif (ARDUINO > 100)
415399
// Arduino v1.0.1+, Wire library
@@ -422,7 +406,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
422406
useWire->beginTransmission(devAddr);
423407
useWire->write(regAddr);
424408
useWire->endTransmission();
425-
useWire->beginTransmission(devAddr);
426409
useWire->requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes
427410

428411
bool msb = true; // starts with MSB, then LSB
@@ -441,8 +424,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
441424
}
442425
msb = !msb;
443426
}
444-
445-
useWire->endTransmission();
446427
}
447428
#endif
448429

MSP430/I2Cdev/I2Cdev.cpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -230,18 +230,14 @@ int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8
230230
Wire.beginTransmission(devAddr);
231231
Wire.send(regAddr);
232232
Wire.endTransmission();
233-
Wire.beginTransmission(devAddr);
234233
Wire.requestFrom(devAddr, (uint8_t)min(length - k, I2CDEVLIB_WIRE_BUFFER_LENGTH));
235-
236234
for (; Wire.available() && (timeout == 0 || millis() - t1 < timeout); count++) {
237235
data[count] = Wire.receive();
238236
#ifdef I2CDEV_SERIAL_DEBUG
239237
Serial.print(data[count], HEX);
240238
if (count + 1 < length) Serial.print(" ");
241239
#endif
242240
}
243-
244-
Wire.endTransmission();
245241
}
246242
#elif (ARDUINO == 100)
247243
// Arduino v1.0.0, Wire library
@@ -254,18 +250,14 @@ int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8
254250
Wire.beginTransmission(devAddr);
255251
Wire.write(regAddr);
256252
Wire.endTransmission();
257-
Wire.beginTransmission(devAddr);
258253
Wire.requestFrom(devAddr, (uint8_t)min(length - k, I2CDEVLIB_WIRE_BUFFER_LENGTH));
259-
260254
for (; Wire.available() && (timeout == 0 || millis() - t1 < timeout); count++) {
261255
data[count] = Wire.read();
262256
#ifdef I2CDEV_SERIAL_DEBUG
263257
Serial.print(data[count], HEX);
264258
if (count + 1 < length) Serial.print(" ");
265259
#endif
266260
}
267-
268-
Wire.endTransmission();
269261
}
270262
#elif (ARDUINO > 100)
271263
// Arduino v1.0.1+, Wire library
@@ -278,18 +270,14 @@ int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8
278270
Wire.beginTransmission(devAddr);
279271
Wire.write(regAddr);
280272
Wire.endTransmission();
281-
Wire.beginTransmission(devAddr);
282273
Wire.requestFrom(devAddr, (uint8_t)min(length - k, I2CDEVLIB_WIRE_BUFFER_LENGTH));
283-
284274
for (; Wire.available() && (timeout == 0 || millis() - t1 < timeout); count++) {
285275
data[count] = Wire.read();
286276
#ifdef I2CDEV_SERIAL_DEBUG
287277
Serial.print(data[count], HEX);
288278
if (count + 1 < length) Serial.print(" ");
289279
#endif
290280
}
291-
292-
Wire.endTransmission();
293281
}
294282
#endif
295283

@@ -357,7 +345,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
357345
Wire.beginTransmission(devAddr);
358346
Wire.send(regAddr);
359347
Wire.endTransmission();
360-
Wire.beginTransmission(devAddr);
361348
Wire.requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes
362349

363350
bool msb = true; // starts with MSB, then LSB
@@ -376,8 +363,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
376363
}
377364
msb = !msb;
378365
}
379-
380-
Wire.endTransmission();
381366
}
382367
#elif (ARDUINO == 100)
383368
// Arduino v1.0.0, Wire library
@@ -390,7 +375,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
390375
Wire.beginTransmission(devAddr);
391376
Wire.write(regAddr);
392377
Wire.endTransmission();
393-
Wire.beginTransmission(devAddr);
394378
Wire.requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes
395379

396380
bool msb = true; // starts with MSB, then LSB
@@ -409,8 +393,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
409393
}
410394
msb = !msb;
411395
}
412-
413-
Wire.endTransmission();
414396
}
415397
#elif (ARDUINO > 100)
416398
// Arduino v1.0.1+, Wire library
@@ -423,7 +405,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
423405
Wire.beginTransmission(devAddr);
424406
Wire.write(regAddr);
425407
Wire.endTransmission();
426-
Wire.beginTransmission(devAddr);
427408
Wire.requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes
428409

429410
bool msb = true; // starts with MSB, then LSB
@@ -442,8 +423,6 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
442423
}
443424
msb = !msb;
444425
}
445-
446-
Wire.endTransmission();
447426
}
448427
#endif
449428

0 commit comments

Comments
 (0)