Skip to content

Commit ed8313f

Browse files
committed
updated I2Cdev library version + fix for ESP32
1 parent 55fb234 commit ed8313f

23 files changed

+5170
-3146
lines changed

Arduino/simplefoc_balancer/imu_helpers.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "imu_helpers.h"
22
#include "./src/I2Cdev/I2Cdev.h"
3-
#include "./src/MPU6050/MPU6050_6Axis_MotionApps_V6_12.h"
3+
#include "./src/MPU6050/MPU6050_6Axis_MotionApps612.h"
44
#include "Wire.h"
55

66
// IMU instance

Arduino/simplefoc_balancer/src/I2Cdev/I2Cdev.cpp

Lines changed: 153 additions & 123 deletions
Large diffs are not rendered by default.

Arduino/simplefoc_balancer/src/I2Cdev/I2Cdev.h

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// 2013-06-05 by Jeff Rowberg <jeff@rowberg.net>
44
//
55
// Changelog:
6+
// 2021-09-28 - allow custom Wire object as transaction function argument
67
// 2020-01-20 - hardija : complete support for Teensy 3.x
78
// 2015-10-30 - simondlevy : support i2c_t3 for Teensy3.1
89
// 2013-05-06 - add Francesco Ferrara's Fastwire v0.24 implementation with small modifications
@@ -48,6 +49,11 @@ THE SOFTWARE.
4849
#ifndef _I2CDEV_H_
4950
#define _I2CDEV_H_
5051

52+
// -----------------------------------------------------------------------------
53+
// Enable deprecated pgmspace typedefs in avr-libc
54+
// -----------------------------------------------------------------------------
55+
#define __PROG_TYPES_COMPAT__
56+
5157
// -----------------------------------------------------------------------------
5258
// I2C interface implementation setting
5359
// -----------------------------------------------------------------------------
@@ -73,13 +79,6 @@ THE SOFTWARE.
7379
#define I2CDEV_BUILTIN_SBWIRE 5 // I2C object from Shuning (Steve) Bian's SBWire Library at https://github.com/freespace/SBWire
7480
#define I2CDEV_TEENSY_3X_WIRE 6 // Teensy 3.x support using i2c_t3 library
7581

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-
8382
// -----------------------------------------------------------------------------
8483
// Arduino-style "Serial.print" debug constant (uncomment to enable)
8584
// -----------------------------------------------------------------------------
@@ -106,10 +105,26 @@ THE SOFTWARE.
106105
#endif
107106

108107
#ifdef SPARK
109-
#include <spark_wiring_i2c.h>
108+
#include "application.h"
110109
#define ARDUINO 101
110+
#define BUFFER_LENGTH 32
111111
#endif
112112

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
113128

114129
// 1000ms default read timeout (modify with "I2Cdev::readTimeout = [ms];")
115130
#define I2CDEV_DEFAULT_READ_TIMEOUT 1000
@@ -118,23 +133,23 @@ class I2Cdev {
118133
public:
119134
I2Cdev();
120135

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);
138153

139154
static uint16_t readTimeout;
140155
};
@@ -247,7 +262,7 @@ class I2Cdev {
247262

248263
/* TWI Status is in TWSR, in the top 5 bits: TWS7 - TWS3 */
249264

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))
251266
#define TW_STATUS (TWSR & TW_STATUS_MASK)
252267
#define TW_START 0x08
253268
#define TW_REP_START 0x10
@@ -282,11 +297,11 @@ class I2Cdev {
282297
//#define _SFR_BYTE(sfr) _MMIO_BYTE(_SFR_ADDR(sfr))
283298

284299
#ifndef sbi // set bit
285-
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
300+
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= (1 << bit))
286301
#endif // sbi
287302

288303
#ifndef cbi // clear bit
289-
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
304+
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~(1 << bit))
290305
#endif // cbi
291306

292307
extern TwoWire Wire;
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"name": "I2Cdevlib-Core",
3+
"version": "1.0.0",
34
"keywords": "i2cdevlib, i2c",
45
"description": "The I2C Device Library (I2Cdevlib) is a collection of uniform and well-documented classes to provide simple and intuitive interfaces to I2C devices.",
56
"include": "Arduino/I2Cdev",
@@ -10,9 +11,7 @@
1011
},
1112
"frameworks": "arduino",
1213
"platforms": "*",
13-
"dependencies": [
14-
{
15-
"name": "Wire"
16-
}
17-
]
14+
"dependencies": {
15+
"Wire": "*"
16+
}
1817
}

Arduino/simplefoc_balancer/src/MPU6050/Examples/IMU_Zero/IMU_Zero.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ and so on.
7878

7979
// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
8080
// for both classes must be in the include path of your project
81-
#include "../I2Cdev/I2Cdev.h"
81+
#include "I2Cdev.h"
8282
#include "MPU6050.h"
8383

8484
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation

Arduino/simplefoc_balancer/src/MPU6050/Examples/MPU6050_DMP6/MPU6050_DMP6.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ THE SOFTWARE.
4646

4747
// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
4848
// for both classes must be in the include path of your project
49-
#include "../I2Cdev/I2Cdev.h"
49+
#include "I2Cdev.h"
5050

5151
#include "MPU6050_6Axis_MotionApps20.h"
5252
//#include "MPU6050.h" // not necessary if using MotionApps include file

Arduino/simplefoc_balancer/src/MPU6050/Examples/MPU6050_DMP6_ESPWiFi/MPU6050_DMP6_ESPWiFi.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ THE SOFTWARE.
5353

5454
// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
5555
// for both classes must be in the include path of your project
56-
#include "../I2Cdev/I2Cdev.h"
56+
#include "I2Cdev.h"
5757

5858
#include "MPU6050_6Axis_MotionApps20.h"
5959
//#include "MPU6050.h" // not necessary if using MotionApps include file
@@ -149,7 +149,7 @@ const unsigned int outPort = 9999; // remote port to receive OSC
149149
// ================================================================
150150

151151
volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
152-
void dmpDataReady() {
152+
void ICACHE_RAM_ATTR dmpDataReady() {
153153
mpuInterrupt = true;
154154
}
155155

Arduino/simplefoc_balancer/src/MPU6050/Examples/MPU6050_DMP6_Ethernet/MPU6050_DMP6_Ethernet.ino

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ THE SOFTWARE.
3737
#include <Ethernet.h>
3838
// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
3939
// for both classes must be in the include path of your project
40-
#include "../I2Cdev/I2Cdev.h"
40+
#include "I2Cdev.h"
4141

4242
#include "MPU6050_6Axis_MotionApps20.h"
4343
//#include "MPU6050.h" // not necessary if using MotionApps include file
@@ -281,14 +281,14 @@ void loop() {
281281
fifoCount = mpu.getFIFOCount();
282282

283283
// check for overflow (this should never happen unless our code is too inefficient)
284-
if ((mpuIntStatus & _BV(MPU6050_INTERRUPT_FIFO_OFLOW_BIT)) || fifoCount >= 1024) {
284+
if ((mpuIntStatus & (1 << MPU6050_INTERRUPT_FIFO_OFLOW_BIT)) || fifoCount >= 1024) {
285285
// reset so we can continue cleanly
286286
mpu.resetFIFO();
287287
fifoCount = mpu.getFIFOCount();
288288
Serial.println(F("FIFO overflow!"));
289289

290290
// otherwise, check for DMP data ready interrupt (this should happen frequently)
291-
} else if (mpuIntStatus & _BV(MPU6050_INTERRUPT_DMP_INT_BIT)) {
291+
} else if (mpuIntStatus & (1 << MPU6050_INTERRUPT_DMP_INT_BIT)) {
292292
// wait for correct available data length, should be a VERY short wait
293293
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
294294

Arduino/simplefoc_balancer/src/MPU6050/Examples/MPU6050_DMP6_using_DMP_V6.12/MPU6050_DMP6_using_DMP_V6.12.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@
4747

4848
// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
4949
// for both classes must be in the include path of your project
50-
#include "../I2Cdev/I2Cdev.h"
50+
#include "I2Cdev.h"
5151

52-
#include "MPU6050_6Axis_MotionApps_V6_12.h"
52+
#include "MPU6050_6Axis_MotionApps612.h"
5353
//#include "MPU6050.h" // not necessary if using MotionApps include file
5454

5555
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation

0 commit comments

Comments
 (0)