hubconnection: add support for parsing accel bias
Bug: 29324422
Change-Id: I13b5e46487b37cbf18a9245eba9ecb5ff295fbf7
diff --git a/sensorhal/hubconnection.cpp b/sensorhal/hubconnection.cpp
index 649bade..8ef142a 100644
--- a/sensorhal/hubconnection.cpp
+++ b/sensorhal/hubconnection.cpp
@@ -99,6 +99,7 @@
mMagAccuracy = SENSOR_STATUS_UNRELIABLE;
mMagAccuracyRestore = SENSOR_STATUS_UNRELIABLE;
mGyroBias[0] = mGyroBias[1] = mGyroBias[2] = 0.0f;
+ mAccelBias[0] = mAccelBias[1] = mAccelBias[2] = 0.0f;
memset(&mSensorState, 0x00, sizeof(mSensorState));
mFd = open(NANOHUB_FILE_PATH, O_RDWR);
@@ -358,6 +359,13 @@
gyroArray->addFloat(mGyroBias[2]);
settingsObject->setArray("gyro_sw", gyroArray);
+ // Add accel settings
+ sp<JSONArray> accelArray = new JSONArray;
+ accelArray->addFloat(mAccelBias[0]);
+ accelArray->addFloat(mAccelBias[1]);
+ accelArray->addFloat(mAccelBias[2]);
+ settingsObject->setArray("accel_sw", accelArray);
+
// Write the JSON string to disk.
AString serializedSettings = settingsObject->toString();
size_t size = serializedSettings.size();
@@ -512,6 +520,12 @@
ue->z_bias = mGyroBias[2];
}
break;
+ case COMMS_SENSOR_ACCEL_BIAS:
+ mAccelBias[0] = sample->x;
+ mAccelBias[1] = sample->y;
+ mAccelBias[2] = sample->z;
+ saveSensorSettings();
+ break;
case COMMS_SENSOR_GYRO_BIAS:
mGyroBias[0] = sample->x;
mGyroBias[1] = sample->y;
@@ -705,6 +719,7 @@
case SENS_TYPE_TO_EVENT(SENS_TYPE_ACCEL):
type = SENSOR_TYPE_ACCELEROMETER;
sensor = COMMS_SENSOR_ACCEL;
+ bias = COMMS_SENSOR_ACCEL_BIAS;
three = true;
break;
case SENS_TYPE_TO_EVENT(SENS_TYPE_ACCEL_RAW):
@@ -967,15 +982,24 @@
struct {
int32_t hw[3];
float sw[3];
- } gyro;
- int32_t accel[3], proximity, proximity_array[4];
+ } gyro, accel;
+ int32_t proximity, proximity_array[4];
float barometer, mag[3], light;
bool gyro_hw_cal_exists, gyro_sw_cal_exists;
+ bool accel_hw_cal_exists, accel_sw_cal_exists;
loadSensorSettings(&settings, &saved_settings);
- if (getCalibrationInt32(settings, "accel", accel, 3))
- queueDataInternal(COMMS_SENSOR_ACCEL, accel, sizeof(accel));
+ accel_hw_cal_exists = getCalibrationInt32(settings, "accel", accel.hw, 3);
+ accel_sw_cal_exists = getCalibrationFloat(saved_settings, "accel_sw", accel.sw);
+ if (accel_hw_cal_exists || accel_sw_cal_exists) {
+ // Store SW bias so we can remove bias for uncal data
+ mAccelBias[0] = accel.sw[0];
+ mAccelBias[1] = accel.sw[1];
+ mAccelBias[2] = accel.sw[2];
+
+ queueDataInternal(COMMS_SENSOR_ACCEL, &accel, sizeof(accel));
+ }
gyro_hw_cal_exists = getCalibrationInt32(settings, "gyro", gyro.hw, 3);
gyro_sw_cal_exists = getCalibrationFloat(saved_settings, "gyro_sw", gyro.sw);
diff --git a/sensorhal/hubconnection.h b/sensorhal/hubconnection.h
index 2467c29..413e2b4 100644
--- a/sensorhal/hubconnection.h
+++ b/sensorhal/hubconnection.h
@@ -187,7 +187,7 @@
uint8_t mMagAccuracy;
uint8_t mMagAccuracyRestore;
- float mGyroBias[3];
+ float mGyroBias[3], mAccelBias[3];
SensorState mSensorState[NUM_COMMS_SENSORS_PLUS_1];
diff --git a/sensorhal/hubdefs.h b/sensorhal/hubdefs.h
index 0e2e8f0..3758fd8 100644
--- a/sensorhal/hubdefs.h
+++ b/sensorhal/hubdefs.h
@@ -75,6 +75,7 @@
COMMS_SENSOR_ACTIVITY_STILL_START = 41,
COMMS_SENSOR_ACTIVITY_STILL_STOP = 42,
COMMS_SENSOR_ACTIVITY_TILTING = 43,
+ COMMS_SENSOR_ACCEL_BIAS = 44,
NUM_COMMS_SENSORS_PLUS_1,