Add support for the uncalibrated accelerometer sensor type.
Adding support for the uncalibrated sensor type.
Test: Use a sensor client app to stream uncalibrated accel.
Use a sensor client app to stream calibrated accel.
Change-Id: I76acaeb476cebe1ae06ff750b5249a2627b724be
diff --git a/firmware/os/inc/sensType.h b/firmware/os/inc/sensType.h
index 92053b0..6320781 100644
--- a/firmware/os/inc/sensType.h
+++ b/firmware/os/inc/sensType.h
@@ -74,6 +74,7 @@
#define SENS_TYPE_DOUBLE_TOUCH 52
#define SENS_TYPE_GAZE 53
#define SENS_TYPE_UNGAZE 54
+#define SENS_TYPE_ACCEL_UNCAL 55
#define SENS_TYPE_FIRST_USER 64 // event type necessarily begins with UserSensorEventHdr
#define SENS_TYPE_LAST_USER 128
diff --git a/sensorhal/hubconnection.cpp b/sensorhal/hubconnection.cpp
index 199bae5..8b8f489 100644
--- a/sensorhal/hubconnection.cpp
+++ b/sensorhal/hubconnection.cpp
@@ -153,6 +153,9 @@
#endif // DOUBLE_TOUCH_ENABLED
mSensorState[COMMS_SENSOR_ACCEL].sensorType = SENS_TYPE_ACCEL;
+ mSensorState[COMMS_SENSOR_ACCEL].alt = COMMS_SENSOR_ACCEL_UNCALIBRATED;
+ mSensorState[COMMS_SENSOR_ACCEL_UNCALIBRATED].sensorType = SENS_TYPE_ACCEL;
+ mSensorState[COMMS_SENSOR_ACCEL_UNCALIBRATED].alt = COMMS_SENSOR_ACCEL;
mSensorState[COMMS_SENSOR_GYRO].sensorType = SENS_TYPE_GYRO;
mSensorState[COMMS_SENSOR_GYRO].alt = COMMS_SENSOR_GYRO_UNCALIBRATED;
mSensorState[COMMS_SENSOR_GYRO_UNCALIBRATED].sensorType = SENS_TYPE_GYRO;
@@ -548,16 +551,31 @@
void HubConnection::processSample(uint64_t timestamp, uint32_t type, uint32_t sensor, struct RawThreeAxisSample *sample, __attribute__((unused)) bool highAccuracy)
{
sensors_vec_t *sv;
+ uncalibrated_event_t *ue;
sensors_event_t nev[2];
int cnt = 0;
switch (sensor) {
case COMMS_SENSOR_ACCEL:
- sv = &initEv(&nev[cnt++], timestamp, type, sensor)->acceleration;
- sv->x = sample->ix * ACCEL_RAW_KSCALE;
- sv->y = sample->iy * ACCEL_RAW_KSCALE;
- sv->z = sample->iz * ACCEL_RAW_KSCALE;
- sv->status = SENSOR_STATUS_ACCURACY_HIGH;
+ if (mSensorState[COMMS_SENSOR_ACCEL].enable) {
+ sv = &initEv(&nev[cnt++], timestamp, type, sensor)->acceleration;
+ sv->x = sample->ix * ACCEL_RAW_KSCALE;
+ sv->y = sample->iy * ACCEL_RAW_KSCALE;
+ sv->z = sample->iz * ACCEL_RAW_KSCALE;
+ sv->status = SENSOR_STATUS_ACCURACY_HIGH;
+ }
+
+ if (mSensorState[COMMS_SENSOR_ACCEL_UNCALIBRATED].enable) {
+ ue = &initEv(&nev[cnt++], timestamp,
+ SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED,
+ COMMS_SENSOR_ACCEL_UNCALIBRATED)->uncalibrated_accelerometer;
+ ue->x_uncalib = sample->ix * ACCEL_RAW_KSCALE + mAccelBias[0];
+ ue->y_uncalib = sample->iy * ACCEL_RAW_KSCALE + mAccelBias[1];
+ ue->z_uncalib = sample->iz * ACCEL_RAW_KSCALE + mAccelBias[2];
+ ue->x_bias = mAccelBias[0];
+ ue->y_bias = mAccelBias[1];
+ ue->z_bias = mAccelBias[2];
+ }
break;
default:
break;
@@ -582,11 +600,25 @@
switch (sensor) {
case COMMS_SENSOR_ACCEL:
- sv = &initEv(&nev[cnt++], timestamp, type, sensor)->acceleration;
- sv->x = sample->x;
- sv->y = sample->y;
- sv->z = sample->z;
- sv->status = SENSOR_STATUS_ACCURACY_HIGH;
+ if (mSensorState[sensor].enable) {
+ sv = &initEv(&nev[cnt++], timestamp, type, sensor)->acceleration;
+ sv->x = sample->x;
+ sv->y = sample->y;
+ sv->z = sample->z;
+ sv->status = SENSOR_STATUS_ACCURACY_HIGH;
+ }
+
+ if (mSensorState[COMMS_SENSOR_ACCEL_UNCALIBRATED].enable) {
+ ue = &initEv(&nev[cnt++], timestamp,
+ SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED,
+ COMMS_SENSOR_ACCEL_UNCALIBRATED)->uncalibrated_accelerometer;
+ ue->x_uncalib = sample->x + mAccelBias[0];
+ ue->y_uncalib = sample->y + mAccelBias[1];
+ ue->z_uncalib = sample->z + mAccelBias[2];
+ ue->x_bias = mAccelBias[0];
+ ue->y_bias = mAccelBias[1];
+ ue->z_bias = mAccelBias[2];
+ }
break;
case COMMS_SENSOR_GYRO:
if (mSensorState[sensor].enable) {
diff --git a/sensorhal/hubdefs.h b/sensorhal/hubdefs.h
index 4aac677..4af7a90 100644
--- a/sensorhal/hubdefs.h
+++ b/sensorhal/hubdefs.h
@@ -82,6 +82,7 @@
COMMS_SENSOR_DOUBLE_TOUCH = 44,
COMMS_SENSOR_GAZE = 45,
COMMS_SENSOR_UNGAZE = 46,
+ COMMS_SENSOR_ACCEL_UNCALIBRATED = 47,
NUM_COMMS_SENSORS_PLUS_1,