@@ -87,13 +87,11 @@ int BoschSensorClass::begin(CfgBoshSensor_t cfg) {
8787
8888
8989void BoschSensorClass::setContinuousMode () {
90- bmi2_set_fifo_config (BMI2_FIFO_GYR_EN | BMI2_FIFO_ACC_EN, 1 , &bmi2);
91- continuousMode = true ;
90+ continuousMode.begin ();
9291}
9392
9493void BoschSensorClass::oneShotMode () {
95- bmi2_set_fifo_config (BMI2_FIFO_GYR_EN | BMI2_FIFO_ACC_EN, 0 , &bmi2);
96- continuousMode = false ;
94+ continuousMode.end ();
9795}
9896
9997// default range is +-4G, so conversion factor is (((1 << 15)/4.0f))
@@ -102,7 +100,14 @@ void BoschSensorClass::oneShotMode() {
102100// Accelerometer
103101int BoschSensorClass::readAcceleration (float & x, float & y, float & z) {
104102 struct bmi2_sens_data sensor_data;
105- auto ret = bmi2_get_sensor_data (&sensor_data, &bmi2);
103+ int ret = 0 ;
104+
105+ if (continuousMode.hasData (BMI270_ACCELEROMETER)) {
106+ continuousMode.getAccelerometerData (&sensor_data.acc );
107+ } else {
108+ ret = bmi2_get_sensor_data (&sensor_data, &bmi2);
109+ }
110+
106111 #ifdef TARGET_ARDUINO_NANO33BLE
107112 x = -sensor_data.acc .y / INT16_to_G;
108113 y = -sensor_data.acc .x / INT16_to_G;
@@ -116,11 +121,14 @@ int BoschSensorClass::readAcceleration(float& x, float& y, float& z) {
116121
117122int BoschSensorClass::accelerationAvailable () {
118123 uint16_t status;
124+ if (continuousMode) {
125+ return continuousMode.available (BMI270_ACCELEROMETER);
126+ }
119127 bmi2_get_int_status (&status, &bmi2);
120128 int ret = ((status | _int_status) & BMI2_ACC_DRDY_INT_MASK);
121129 _int_status = status;
122130 _int_status &= ~BMI2_ACC_DRDY_INT_MASK;
123- return ret;
131+ return ret > 0 ;
124132}
125133
126134float BoschSensorClass::accelerationSampleRate () {
@@ -136,7 +144,13 @@ float BoschSensorClass::accelerationSampleRate() {
136144// Gyroscope
137145int BoschSensorClass::readGyroscope (float & x, float & y, float & z) {
138146 struct bmi2_sens_data sensor_data;
139- auto ret = bmi2_get_sensor_data (&sensor_data, &bmi2);
147+ int ret = 0 ;
148+
149+ if (continuousMode.hasData (BMI270_GYROSCOPE)) {
150+ continuousMode.getGyroscopeData (&sensor_data.gyr );
151+ } else {
152+ ret = bmi2_get_sensor_data (&sensor_data, &bmi2);
153+ }
140154 #ifdef TARGET_ARDUINO_NANO33BLE
141155 x = -sensor_data.gyr .y / INT16_to_DPS;
142156 y = -sensor_data.gyr .x / INT16_to_DPS;
@@ -150,11 +164,14 @@ int BoschSensorClass::readGyroscope(float& x, float& y, float& z) {
150164
151165int BoschSensorClass::gyroscopeAvailable () {
152166 uint16_t status;
167+ if (continuousMode) {
168+ return continuousMode.available (BMI270_GYROSCOPE);
169+ }
153170 bmi2_get_int_status (&status, &bmi2);
154171 int ret = ((status | _int_status) & BMI2_GYR_DRDY_INT_MASK);
155172 _int_status = status;
156173 _int_status &= ~BMI2_GYR_DRDY_INT_MASK;
157- return ret;
174+ return ret > 0 ;
158175}
159176
160177float BoschSensorClass::gyroscopeSampleRate () {
@@ -282,7 +299,7 @@ int8_t BoschSensorClass::configure_sensor(struct bmm150_dev *dev)
282299
283300int8_t BoschSensorClass::bmi2_i2c_read (uint8_t reg_addr, uint8_t *reg_data, uint32_t len, void *intf_ptr)
284301{
285- if ((reg_data == NULL ) || (len == 0 ) || (len > 32 )) {
302+ if ((reg_data == NULL ) || (len == 0 ) || (len > 250 )) {
286303 return -1 ;
287304 }
288305 uint8_t bytes_received;
@@ -308,18 +325,15 @@ int8_t BoschSensorClass::bmi2_i2c_read(uint8_t reg_addr, uint8_t *reg_data, uint
308325
309326int8_t BoschSensorClass::bmi2_i2c_write (uint8_t reg_addr, const uint8_t *reg_data, uint32_t len, void *intf_ptr)
310327{
311- if ((reg_data == NULL ) || (len == 0 ) || (len > 32 )) {
328+ if ((reg_data == NULL ) || (len == 0 ) || (len > 250 )) {
312329 return -1 ;
313330 }
314331
315332 struct dev_info * dev_info = (struct dev_info *)intf_ptr;
316333 uint8_t dev_id = dev_info->dev_addr ;
317334 dev_info->_wire ->beginTransmission (dev_id);
318335 dev_info->_wire ->write (reg_addr);
319- for (uint16_t i = 0 ; i < len; i++)
320- {
321- dev_info->_wire ->write (reg_data[i]);
322- }
336+ dev_info->_wire ->write (reg_data, (size_t )len);
323337 if (dev_info->_wire ->endTransmission () != 0 ) {
324338 return -1 ;
325339 }
0 commit comments