[bmi160] send gyro cal bias to host interface
Bug: 28981599
Bug: 28635583
Change-Id: I43e5620c193410645bac9d6577c930186fe84232
diff --git a/firmware/src/drivers/bosch_bmi160/bosch_bmi160.c b/firmware/src/drivers/bosch_bmi160/bosch_bmi160.c
index 99fe471..5afd391 100644
--- a/firmware/src/drivers/bosch_bmi160/bosch_bmi160.c
+++ b/firmware/src/drivers/bosch_bmi160/bosch_bmi160.c
@@ -614,8 +614,8 @@
{
{ DEC_INFO_RATE_RAW("Accelerometer", AccRates, SENS_TYPE_ACCEL, NUM_AXIS_THREE,
NANOHUB_INT_NONWAKEUP, 3000, SENS_TYPE_ACCEL_RAW, 1.0/kScale_acc) },
- { DEC_INFO_RATE("Gyroscope", GyrRates, SENS_TYPE_GYRO, NUM_AXIS_THREE,
- NANOHUB_INT_NONWAKEUP, 20) },
+ { DEC_INFO_RATE_BIAS("Gyroscope", GyrRates, SENS_TYPE_GYRO, NUM_AXIS_THREE,
+ NANOHUB_INT_NONWAKEUP, 20, SENS_TYPE_GYRO_BIAS) },
#ifdef MAG_SLAVE_PRESENT
{ DEC_INFO_RATE_BIAS("Magnetometer", MagRates, SENS_TYPE_MAG, NUM_AXIS_THREE,
NANOHUB_INT_NONWAKEUP, 600, SENS_TYPE_MAG_BIAS) },
@@ -1828,34 +1828,11 @@
x, y, z, //input values
&x, &y, &z //calibrated output
);
-
- // Gyro Cal -- Notify HAL about new gyro bias calibration.
- if (gyroCalNewBiasAvailable(&mTask.gyro_cal)) {
- // The new calibration value and timestamp:
- // mTask.gyro_cal.bias_x;
- // mTask.gyro_cal.bias_y;
- // mTask.gyro_cal.bias_z;
- // mTask.gyro_cal.calibration_time;
- //
- // Access gyro cal bias corrections using:
- //gyroCalGetBias(&mTask.gyro_cal,
- // &bias_x, bias_y, &bias_z);
- INFO_PRINT("TODO: Send updated gyro bias to HAL.");
- }
#endif
}
}
}
-#ifdef GYRO_CAL_ENABLED
- #ifdef GYRO_CAL_DBG_ENABLED
- // Gyro Cal -- Read out Debug data.
- gyroCalDebugPrint(&mTask.gyro_cal,
- &mTask.gyro_debug_state,
- rtc_time);
- #endif
-#endif
-
if (mSensor->data_evt == NULL) {
if (!allocateDataEvt(mSensor, rtc_time))
return;
@@ -1901,6 +1878,28 @@
return;
}
#endif
+#ifdef GYRO_CAL_ENABLED
+ // Gyro Cal -- Notify HAL about new gyro bias calibration
+ if (mSensor->idx == GYR && gyroCalNewBiasAvailable(&mTask.gyro_cal)) {
+ if (mSensor->data_evt->samples[0].firstSample.numSamples > 0) {
+ // flush existing samples so the bias appears after them
+ flushData(mSensor,
+ EVENT_TYPE_BIT_DISCARDABLE | sensorGetMyEventType(mSensorInfo[GYR].sensorType));
+ if (!allocateDataEvt(mSensor, rtc_time))
+ return;
+ }
+ mSensor->data_evt->samples[0].firstSample.biasCurrent = true;
+ mSensor->data_evt->samples[0].firstSample.biasPresent = 1;
+ mSensor->data_evt->samples[0].firstSample.biasSample =
+ mSensor->data_evt->samples[0].firstSample.numSamples;
+ sample = &mSensor->data_evt->samples[mSensor->data_evt->samples[0].firstSample.numSamples++];
+ gyroCalGetBias(&mTask.gyro_cal, &sample->x, &sample->y, &sample->z);
+ flushData(mSensor, sensorGetMyEventType(mSensorInfo[GYR].biasType));
+
+ if (!allocateDataEvt(mSensor, rtc_time))
+ return;
+ }
+#endif
sample = &mSensor->data_evt->samples[mSensor->data_evt->samples[0].firstSample.numSamples++];