3
3
// 2013-06-05 by Jeff Rowberg <jeff@rowberg.net>
4
4
//
5
5
// Changelog:
6
+ // 2021-09-28 - allow custom Wire object as transaction function argument
6
7
// 2020-01-20 - hardija : complete support for Teensy 3.x
7
8
// 2015-10-30 - simondlevy : support i2c_t3 for Teensy3.1
8
9
// 2013-05-06 - add Francesco Ferrara's Fastwire v0.24 implementation with small modifications
@@ -48,6 +49,11 @@ THE SOFTWARE.
48
49
#ifndef _I2CDEV_H_
49
50
#define _I2CDEV_H_
50
51
52
+ // -----------------------------------------------------------------------------
53
+ // Enable deprecated pgmspace typedefs in avr-libc
54
+ // -----------------------------------------------------------------------------
55
+ #define __PROG_TYPES_COMPAT__
56
+
51
57
// -----------------------------------------------------------------------------
52
58
// I2C interface implementation setting
53
59
// -----------------------------------------------------------------------------
@@ -73,13 +79,6 @@ THE SOFTWARE.
73
79
#define I2CDEV_BUILTIN_SBWIRE 5 // I2C object from Shuning (Steve) Bian's SBWire Library at https://github.com/freespace/SBWire
74
80
#define I2CDEV_TEENSY_3X_WIRE 6 // Teensy 3.x support using i2c_t3 library
75
81
76
-
77
-
78
- #ifndef BUFFER_LENGTH
79
- // band-aid fix for platforms without Wire-defined BUFFER_LENGTH (removed from some official implementations)
80
- #define BUFFER_LENGTH 32
81
- #endif
82
-
83
82
// -----------------------------------------------------------------------------
84
83
// Arduino-style "Serial.print" debug constant (uncomment to enable)
85
84
// -----------------------------------------------------------------------------
@@ -106,10 +105,26 @@ THE SOFTWARE.
106
105
#endif
107
106
108
107
#ifdef SPARK
109
- #include < spark_wiring_i2c.h >
108
+ #include " application.h "
110
109
#define ARDUINO 101
110
+ #define BUFFER_LENGTH 32
111
111
#endif
112
112
113
+ #ifndef I2CDEVLIB_WIRE_BUFFER_LENGTH
114
+ #if defined(I2C_BUFFER_LENGTH)
115
+ // Arduino ESP32 core Wire uses this
116
+ #define I2CDEVLIB_WIRE_BUFFER_LENGTH I2C_BUFFER_LENGTH
117
+ #elif defined(BUFFER_LENGTH)
118
+ // Arduino AVR core Wire and many others use this
119
+ #define I2CDEVLIB_WIRE_BUFFER_LENGTH BUFFER_LENGTH
120
+ #elif defined(SERIAL_BUFFER_SIZE)
121
+ // Arduino SAMD core Wire uses this
122
+ #define I2CDEVLIB_WIRE_BUFFER_LENGTH SERIAL_BUFFER_SIZE
123
+ #else
124
+ // should be a safe fallback, though possibly inefficient
125
+ #define I2CDEVLIB_WIRE_BUFFER_LENGTH 32
126
+ #endif
127
+ #endif
113
128
114
129
// 1000ms default read timeout (modify with "I2Cdev::readTimeout = [ms];")
115
130
#define I2CDEV_DEFAULT_READ_TIMEOUT 1000
@@ -118,23 +133,23 @@ class I2Cdev {
118
133
public:
119
134
I2Cdev ();
120
135
121
- static int8_t readBit (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
122
- static int8_t readBitW (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
123
- static int8_t readBits (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
124
- static int8_t readBitsW (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
125
- static int8_t readByte (uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
126
- static int8_t readWord (uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
127
- static int8_t readBytes (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
128
- static int8_t readWords (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
129
-
130
- static bool writeBit (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data);
131
- static bool writeBitW (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data);
132
- static bool writeBits (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data);
133
- static bool writeBitsW (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data);
134
- static bool writeByte (uint8_t devAddr, uint8_t regAddr, uint8_t data);
135
- static bool writeWord (uint8_t devAddr, uint8_t regAddr, uint16_t data);
136
- static bool writeBytes (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
137
- static bool writeWords (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data);
136
+ static int8_t readBit (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
137
+ static int8_t readBitW (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
138
+ static int8_t readBits (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
139
+ static int8_t readBitsW (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
140
+ static int8_t readByte (uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
141
+ static int8_t readWord (uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
142
+ static int8_t readBytes (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
143
+ static int8_t readWords (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout, void *wireObj= 0 );
144
+
145
+ static bool writeBit (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data, void *wireObj= 0 );
146
+ static bool writeBitW (uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data, void *wireObj= 0 );
147
+ static bool writeBits (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data, void *wireObj= 0 );
148
+ static bool writeBitsW (uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data, void *wireObj= 0 );
149
+ static bool writeByte (uint8_t devAddr, uint8_t regAddr, uint8_t data, void *wireObj= 0 );
150
+ static bool writeWord (uint8_t devAddr, uint8_t regAddr, uint16_t data, void *wireObj= 0 );
151
+ static bool writeBytes (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, void *wireObj= 0 );
152
+ static bool writeWords (uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data, void *wireObj= 0 );
138
153
139
154
static uint16_t readTimeout;
140
155
};
@@ -247,7 +262,7 @@ class I2Cdev {
247
262
248
263
/* TWI Status is in TWSR, in the top 5 bits: TWS7 - TWS3 */
249
264
250
- #define TW_STATUS_MASK (_BV( TWS7)|_BV( TWS6)|_BV( TWS5)|_BV( TWS4)|_BV( TWS3))
265
+ #define TW_STATUS_MASK (( 1 << TWS7)|( 1 << TWS6)|( 1 << TWS5)|( 1 << TWS4)|( 1 << TWS3))
251
266
#define TW_STATUS (TWSR & TW_STATUS_MASK)
252
267
#define TW_START 0x08
253
268
#define TW_REP_START 0x10
@@ -282,11 +297,11 @@ class I2Cdev {
282
297
// #define _SFR_BYTE(sfr) _MMIO_BYTE(_SFR_ADDR(sfr))
283
298
284
299
#ifndef sbi // set bit
285
- #define sbi (sfr, bit ) (_SFR_BYTE(sfr) |= _BV( bit))
300
+ #define sbi (sfr, bit ) (_SFR_BYTE(sfr) |= ( 1 << bit))
286
301
#endif // sbi
287
302
288
303
#ifndef cbi // clear bit
289
- #define cbi (sfr, bit ) (_SFR_BYTE(sfr) &= ~_BV ( bit))
304
+ #define cbi (sfr, bit ) (_SFR_BYTE(sfr) &= ~( 1 << bit))
290
305
#endif // cbi
291
306
292
307
extern TwoWire Wire;
0 commit comments