8000 Merge pull request #392 from paynterf/master · ArduinoWorks/i2cdevlib@6dd5e46 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6dd5e46

Browse files
authored
Merge pull request jrowberg#392 from paynterf/master
Added Shuning (Steve) Bian's SBWire no lockup library as an option in I2Cdev.h/cpp
2 parents c20f68e + 7bdd885 commit 6dd5e46

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

Arduino/I2Cdev/I2Cdev.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ THE SOFTWARE.
4545

4646
#include "I2Cdev.h"
4747

48-
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
48+
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE
4949

5050
#ifdef I2CDEV_IMPLEMENTATION_WARNINGS
5151
#if ARDUINO < 100
@@ -217,7 +217,7 @@ int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8
217217
int8_t count = 0;
218218
uint32_t t1 = millis();
219219

220-
#if (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE)
220+
#if (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE)
221221

222222
#if (ARDUINO < 100)
223223
// Arduino v00xx (before v1.0), Wire library
@@ -337,7 +337,7 @@ int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint1
337337
int8_t count = 0;
338338
uint32_t t1 = millis();
339339

340-
#if (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE)
340+
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE
341341

342342
#if (ARDUINO < 100)
343343
// Arduino v00xx (before v1.0), Wire library
@@ -594,7 +594,8 @@ bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_
594594
#if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE)
595595
Wire.beginTransmission(devAddr);
596596
Wire.send((uint8_t) regAddr); // send address
597-
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100)
597+
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100 \
598+
|| I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100)
598599
Wire.beginTransmission(devAddr);
599600
Wire.write((uint8_t) regAddr); // send address
600601
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE)
@@ -608,16 +609,18 @@ bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_
608609
#endif
609610
#if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE)
610611
Wire.send((uint8_t) data[i]);
611-
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100)
612-
Wire.write((uint8_t) data[i]);
612+
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100 \
613+
|| I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100)
614+
Wire.write((uint8_t) data[i]);
613615
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE)
614616
Fastwire::write((uint8_t) data[i]);
615617
#endif
616618
}
617619
#if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE)
618620
Wire.endTransmission();
619-
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100)
620-
status = Wire.endTransmission();
621+
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100 \
622+
|| I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100)
623+
status = Wire.endTransmission();
621624
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE)
622625
Fastwire::stop();
623626
//status = Fastwire::endTransmission();
@@ -649,8 +652,9 @@ bool I2Cdev::writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16
649652
#if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE)
650653
Wire.beginTransmission(devAddr);
651654
Wire.send(regAddr); // send address
652-
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100)
653-
Wire.beginTransmission(devAddr);
655+
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100 \
656+
|| I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100)
657+
Wire.beginTransmission(devAddr);
654658
Wire.write(regAddr); // send address
655659
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE)
656660
Fastwire::beginTransmission(devAddr);
@@ -664,8 +668,9 @@ bool I2Cdev::writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16
664668
#if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE)
665669
Wire.send((uint8_t)(data[i] >> 8)); // send MSB
666670
Wire.send((uint8_t)data[i++]); // send LSB
667-
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100)
668-
Wire.write((uint8_t)(data[i] >> 8)); // send MSB
671+
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100 \
672+
|| I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100)
673+
Wire.write((uint8_t)(data[i] >> 8)); // send MSB
669674
Wire.write((uint8_t)data[i++]); // send LSB
670675
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE)
671676
Fastwire::write((uint8_t)(data[i] >> 8)); // send MSB
@@ -675,8 +680,9 @@ bool I2Cdev::writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16
675680
}
676681
#if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE)
677682
Wire.endTransmission();
678-
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100)
679-
status = Wire.endTransmission();
683+
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100 \
684+
|| I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE && ARDUINO >= 100)
685+
status = Wire.endTransmission();
680686
#elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE)
681687
Fastwire::stop();
682688
//status = Fastwire::endTransmission();

Arduino/I2Cdev/I2Cdev.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ THE SOFTWARE.
5252
// -----------------------------------------------------------------------------
5353
#ifndef I2CDEV_IMPLEMENTATION
5454
#define I2CDEV_IMPLEMENTATION I2CDEV_ARDUINO_WIRE
55+
//#define I2CDEV_IMPLEMENTATION I2CDEV_BUILTIN_SBWIRE
5556
//#define I2CDEV_IMPLEMENTATION I2CDEV_BUILTIN_FASTWIRE
5657
#endif // I2CDEV_IMPLEMENTATION
5758

@@ -67,6 +68,7 @@ THE SOFTWARE.
6768
// ^^^ NBWire implementation is still buggy w/some interrupts!
6869
#define I2CDEV_BUILTIN_FASTWIRE 3 // FastWire object from Francesco Ferrara's project
6970
#define I2CDEV_I2CMASTER_LIBRARY 4 // I2C object from DSSCircuits I2C-Master Library at https://github.com/DSSCircuits/I2C-Master-Library
71+
#define I2CDEV_BUILTIN_SBWIRE 5 // I2C object from Shuning (Steve) Bian's SBWire Library at https://github.com/freespace/SBWire
7072

7173
// -----------------------------------------------------------------------------
7274
// Arduino-style "Serial.print" debug constant (uncomment to enable)
@@ -85,6 +87,9 @@ THE SOFTWARE.
8587
#if I2CDEV_IMPLEMENTATION == I2CDEV_I2CMASTER_LIBRARY
8688
#include <I2C.h>
8789
#endif
90+
#if I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_SBWIRE
91+
#include "SBWire.h"
92+
#endif
8893
#endif
8994

9095
#ifdef SPARK

0 commit comments

Comments
 (0)
0