52 #define I2CDEV_IMPLEMENTATION I2CDEV_ARDUINO_WIRE 62 #define I2CDEV_ARDUINO_WIRE 1 // Wire object from Arduino 63 #define I2CDEV_BUILTIN_NBWIRE 2 // Tweaked Wire object from Gene Knight's NBWire project 65 #define I2CDEV_BUILTIN_FASTWIRE 3 // FastWire object from Francesco Ferrara's project 66 #define I2CDEV_I2CMASTER_LIBRARY 4 // I2C object from DSSCircuits I2C-Master Library at https://github.com/DSSCircuits/I2C-Master-Library 79 #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE 82 #if I2CDEV_IMPLEMENTATION == I2CDEV_I2CMASTER_LIBRARY 88 #define I2CDEV_DEFAULT_READ_TIMEOUT 1000 94 static int8_t readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
95 static int8_t readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
96 static int8_t readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
97 static int8_t readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
98 static int8_t readByte(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
99 static int8_t readWord(uint8_t devAddr, uint8_t regAddr, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
100 static int8_t readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data, uint16_t timeout=I2Cdev::readTimeout);
101 static int8_t readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data, uint16_t timeout=I2Cdev::readTimeout);
103 static bool writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data);
104 static bool writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data);
105 static bool writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data);
106 static bool writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data);
107 static bool writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data);
108 static bool writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data);
109 static bool writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
110 static bool writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data);
112 static uint16_t readTimeout;
115 #if I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE 124 #define TW_START 0x08 125 #define TW_REP_START 0x10 128 #define TW_MT_SLA_ACK 0x18 129 #define TW_MT_SLA_NACK 0x20 130 #define TW_MT_DATA_ACK 0x28 131 #define TW_MT_DATA_NACK 0x30 132 #define TW_MT_ARB_LOST 0x38 135 #define TW_MR_ARB_LOST 0x38 136 #define TW_MR_SLA_ACK 0x40 137 #define TW_MR_SLA_NACK 0x48 138 #define TW_MR_DATA_ACK 0x50 139 #define TW_MR_DATA_NACK 0x58 146 static boolean waitInt();
149 static void setup(
int khz,
boolean pullup);
150 static byte beginTransmission(byte device);
151 static byte write(byte value);
152 static byte writeBuf(byte device, byte address, byte *data, byte num);
153 static byte readBuf(byte device, byte address, byte *data, byte num);
159 #if I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE 164 #define NBWIRE_BUFFER_LENGTH 32 168 static uint8_t rxBuffer[];
169 static uint8_t rxBufferIndex;
170 static uint8_t rxBufferLength;
172 static uint8_t txAddress;
173 static uint8_t txBuffer[];
174 static uint8_t txBufferIndex;
175 static uint8_t txBufferLength;
178 static void (*user_onRequest)(void);
179 static void (*user_onReceive)(int);
180 static void onRequestService(
void);
181 static void onReceiveService(uint8_t*,
int);
188 void beginTransmission(uint8_t);
190 uint8_t endTransmission(uint16_t timeout=0);
191 void nbendTransmission(
void (*
function)(
int)) ;
192 uint8_t requestFrom(uint8_t,
int, uint16_t timeout=0);
194 void nbrequestFrom(uint8_t,
int,
void (*
function)(
int));
196 void send(uint8_t*, uint8_t);
199 uint8_t available(
void);
200 uint8_t receive(
void);
201 void onReceive(
void (*)(
int));
202 void onRequest(
void (*)(
void));
214 #define TW_MT_SLA_NACK 0x20 215 #define TW_MT_DATA_NACK 0x30 217 #define CPU_FREQ 16000000L 218 #define TWI_FREQ 100000L 219 #define TWI_BUFFER_LENGTH 32 223 #define TW_STATUS_MASK (_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3)) 224 #define TW_STATUS (TWSR & TW_STATUS_MASK) 225 #define TW_START 0x08 226 #define TW_REP_START 0x10 227 #define TW_MT_SLA_ACK 0x18 228 #define TW_MT_SLA_NACK 0x20 229 #define TW_MT_DATA_ACK 0x28 230 #define TW_MT_DATA_NACK 0x30 231 #define TW_MT_ARB_LOST 0x38 232 #define TW_MR_ARB_LOST 0x38 233 #define TW_MR_SLA_ACK 0x40 234 #define TW_MR_SLA_NACK 0x48 235 #define TW_MR_DATA_ACK 0x50 236 #define TW_MR_DATA_NACK 0x58 237 #define TW_ST_SLA_ACK 0xA8 238 #define TW_ST_ARB_LOST_SLA_ACK 0xB0 239 #define TW_ST_DATA_ACK 0xB8 240 #define TW_ST_DATA_NACK 0xC0 241 #define TW_ST_LAST_DATA 0xC8 242 #define TW_SR_SLA_ACK 0x60 243 #define TW_SR_ARB_LOST_SLA_ACK 0x68 244 #define TW_SR_GCALL_ACK 0x70 245 #define TW_SR_ARB_LOST_GCALL_ACK 0x78 246 #define TW_SR_DATA_ACK 0x80 247 #define TW_SR_DATA_NACK 0x88 248 #define TW_SR_GCALL_DATA_ACK 0x90 249 #define TW_SR_GCALL_DATA_NACK 0x98 250 #define TW_SR_STOP 0xA0 251 #define TW_NO_INFO 0xF8 252 #define TW_BUS_ERROR 0x00 257 #ifndef sbi // set bit 258 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) 261 #ifndef cbi // clear bit 262 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) 267 #endif // I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE
void IRAM_ATTR pullup(uint16_t pin)
Enable pull-up on digital input.