@@ -87,18 +87,11 @@ int BoschSensorClass::begin(CfgBoshSensor_t cfg) {
8787
8888
8989void BoschSensorClass::setContinuousMode () {
90- continuousModeFifoFrame.data = continuousModeFifoData;
91- continuousModeFifoFrame.length = sizeof (continuousModeFifoData);
92- bmi2_set_fifo_config (BMI2_FIFO_GYR_EN | BMI2_FIFO_ACC_EN, 1 , &bmi2);
93- bmi2_set_fifo_config (BMI2_FIFO_HEADER_EN, BMI2_DISABLE, &bmi2);
94- bmi2_map_data_int (BMI2_FWM_INT, BMI2_INT1, &bmi2);
95- bmi2_set_fifo_wm ((sizeof (continuousModeFifoData)), &bmi2); // 32 samples of accel+gyro, match LSM9DS1
96- continuousMode = true ;
90+ continuousMode.begin ();
9791}
9892
9993void BoschSensorClass::oneShotMode () {
100- bmi2_set_fifo_config (BMI2_FIFO_GYR_EN | BMI2_FIFO_ACC_EN, 0 , &bmi2);
101- continuousMode = false ;
94+ continuousMode.end ();
10295}
10396
10497// default range is +-4G, so conversion factor is (((1 << 15)/4.0f))
@@ -109,11 +102,8 @@ int BoschSensorClass::readAcceleration(float& x, float& y, float& z) {
109102 struct bmi2_sens_data sensor_data;
110103 int ret = 0 ;
111104
112- if (continuousModeAvailableA > 0 ) {
113- sensor_data.acc .x = fifo_accel_data[8 - continuousModeAvailableA].x ;
114- sensor_data.acc .y = fifo_accel_data[8 - continuousModeAvailableA].y ;
115- sensor_data.acc .z = fifo_accel_data[8 - continuousModeAvailableA].z ;
116- continuousModeAvailableA--;
105+ if (continuousMode.hasData (BMI270_ACCELEROMETER)) {
106+ continuousMode.getAccelerometerData (&sensor_data.acc );
117107 } else {
118108 ret = bmi2_get_sensor_data (&sensor_data, &bmi2);
119109 }
@@ -131,25 +121,8 @@ int BoschSensorClass::readAcceleration(float& x, float& y, float& z) {
131121
132122int BoschSensorClass::accelerationAvailable () {
133123 uint16_t status;
134- if (continuousModeAvailableA > 0 ) {
135- return continuousModeAvailableA;
136- }
137124 if (continuousMode) {
138- bmi2_get_int_status (&status, &bmi2);
139- if ((status & BMI2_FWM_INT_STATUS_MASK) == 0 ) {
140- return 0 ;
141- }
142- bmi2_get_fifo_length (&status, &bmi2);
143- auto ret = bmi2_read_fifo_data (&continuousModeFifoFrame, &bmi2);
144- if (ret != 0 ) {
145- return 0 ;
146- }
147- continuousModeAvailable = min (status, sizeof (continuousModeFifoData)) / (6 + 6 ); // 6 bytes per accel sample
148- continuousModeAvailableG = continuousModeAvailable;
149- continuousModeAvailableA = continuousModeAvailable;
150- ret = bmi2_extract_accel (fifo_accel_data, &continuousModeAvailable, &continuousModeFifoFrame, &bmi2);
151- ret = bmi2_extract_gyro (fifo_gyro_data, &continuousModeAvailable, &continuousModeFifoFrame, &bmi2);
152- return continuousModeAvailable;
125+ return continuousMode.available (BMI270_ACCELEROMETER);
153126 }
154127 bmi2_get_int_status (&status, &bmi2);
155128 int ret = ((status | _int_status) & BMI2_ACC_DRDY_INT_MASK);
@@ -173,11 +146,8 @@ int BoschSensorClass::readGyroscope(float& x, float& y, float& z) {
173146 struct bmi2_sens_data sensor_data;
174147 int ret = 0 ;
175148
176- if (continuousModeAvailableG > 0 ) {
177- sensor_data.gyr .x = fifo_gyro_data[8 - continuousModeAvailableG].x ;
178- sensor_data.gyr .y = fifo_gyro_data[8 - continuousModeAvailableG].y ;
179- sensor_data.gyr .z = fifo_gyro_data[8 - continuousModeAvailableG].z ;
180- continuousModeAvailableG--;
149+ if (continuousMode.hasData (BMI270_GYROSCOPE)) {
150+ continuousMode.getGyroscopeData (&sensor_data.gyr );
181151 } else {
182152 ret = bmi2_get_sensor_data (&sensor_data, &bmi2);
183153 }
@@ -194,26 +164,8 @@ int BoschSensorClass::readGyroscope(float& x, float& y, float& z) {
194164
195165int BoschSensorClass::gyroscopeAvailable () {
196166 uint16_t status;
197- if (continuousModeAvailableG > 0 ) {
198- return continuousModeAvailableG;
199- }
200167 if (continuousMode) {
201- bmi2_get_int_status (&status, &bmi2);
202- if ((status & BMI2_FWM_INT_STATUS_MASK) == 0 ) {
203- return 0 ;
204- }
205- bmi2_get_fifo_length (&status, &bmi2);
206- auto ret = bmi2_read_fifo_data (&continuousModeFifoFrame, &bmi2);
207- if (ret != 0 ) {
208- return 0 ;
209- }
210- continuousModeAvailable = min (status, sizeof (continuousModeFifoData)) / (6 + 6 ); // 6 bytes per accel sample
211- continuousModeAvailableG = continuousModeAvailable;
212- continuousModeAvailableA = continuousModeAvailable;
213- ret = bmi2_extract_accel (fifo_accel_data, &continuousModeAvailable, &continuousModeFifoFrame, &bmi2);
214- ret = bmi2_extract_gyro (fifo_gyro_data, &continuousModeAvailable, &continuousModeFifoFrame, &bmi2);
215-
216- return continuousModeAvailable;
168+ return continuousMode.available (BMI270_GYROSCOPE);
217169 }
218170 bmi2_get_int_status (&status, &bmi2);
219171 int ret = ((status | _int_status) & BMI2_GYR_DRDY_INT_MASK);
@@ -347,7 +299,7 @@ int8_t BoschSensorClass::configure_sensor(struct bmm150_dev *dev)
347299
348300int8_t BoschSensorClass::bmi2_i2c_read (uint8_t reg_addr, uint8_t *reg_data, uint32_t len, void *intf_ptr)
349301{
350- if ((reg_data == NULL ) || (len == 0 ) || (len > 128 )) {
302+ if ((reg_data == NULL ) || (len == 0 ) || (len > 250 )) {
351303 return -1 ;
352304 }
353305 uint8_t bytes_received;
@@ -373,7 +325,7 @@ int8_t BoschSensorClass::bmi2_i2c_read(uint8_t reg_addr, uint8_t *reg_data, uint
373325
374326int8_t BoschSensorClass::bmi2_i2c_write (uint8_t reg_addr, const uint8_t *reg_data, uint32_t len, void *intf_ptr)
375327{
376- if ((reg_data == NULL ) || (len == 0 ) || (len > 128 )) {
328+ if ((reg_data == NULL ) || (len == 0 ) || (len > 250 )) {
377329 return -1 ;
378330 }
379331
0 commit comments