OSDN Git Service

libsensors: Improve accel and gyro
authorPer Persson <per.persson@intel.com>
Fri, 17 Jan 2014 16:13:58 +0000 (15:13 -0100)
committerPer Persson <per.persson@intel.com>
Tue, 21 Jan 2014 10:19:04 +0000 (09:19 -0100)
Add mindelay for accelerator and gyro.
Treat undefined gyro unit value as degrees per second.
Synchronize accelerometer and gyro coordinates system.

Issue: APDEV-999
Issue: APDEV-1000

Change-Id: I48baf70c783b55bc79e19322f02c1cd79a62101a
Signed-off-by: Per Persson <per.persson@intel.com>
HidSensor_Accel3D.cpp
HidSensor_Gyro3D.cpp
bytm/SensorConfig.h

index 69a3aea..01fda5f 100644 (file)
@@ -38,7 +38,7 @@ struct accel_3d_sample{
 
 const struct sensor_t AccelSensor::sSensorInfo_accel3D = {
     "HID_SENSOR Accelerometer 3D", "Intel", 1, SENSORS_ACCELERATION_HANDLE,
-    SENSOR_TYPE_ACCELEROMETER, RANGE_A, RESOLUTION_A, 0.23f, 0, 0, 0, {}
+    SENSOR_TYPE_ACCELEROMETER, RANGE_A, RESOLUTION_A, 0.23f, 100000, 0, 0, {}
 };
 
 const long HID_USAGE_SENSOR_UNITS_G = 0x1A;
index 1c38d2d..4222078 100644 (file)
@@ -38,8 +38,9 @@ struct gyro_3d_sample{
 
 const struct sensor_t GyroSensor::sSensorInfo_gyro3D = {
     "HID_SENSOR Gyro 3D", "Intel", 1, SENSORS_GYROSCOPE_HANDLE,
-    SENSOR_TYPE_GYROSCOPE, RANGE_GYRO, RESOLUTION_GYRO, 6.10f, 0, 0, 0, {}
+    SENSOR_TYPE_GYROSCOPE, RANGE_GYRO, RESOLUTION_GYRO, 6.10f, 100000, 0, 0, {}
 };
+const int HID_USAGE_SENSOR_UNITS_NOT_SPECIFIED      = 0x00;
 const int HID_USAGE_SENSOR_UNITS_DEGREES_PER_SECOND = 0x15;
 const int HID_USAGE_SENSOR_UNITS_RADIANS_PER_SECOND = 0xF012;
 const int retry_cnt = 10;
@@ -68,7 +69,9 @@ int GyroSensor::processEvent(unsigned char *raw_data, size_t raw_data_len){
         return  - 1;
     }
     sample = (struct gyro_3d_sample*)raw_data;
-    if (GetUnitValue() == HID_USAGE_SENSOR_UNITS_DEGREES_PER_SECOND){
+    switch (GetUnitValue()) {
+    case HID_USAGE_SENSOR_UNITS_NOT_SPECIFIED:
+    case HID_USAGE_SENSOR_UNITS_DEGREES_PER_SECOND:
         mPendingEvent.data[0] = mPendingEvent.gyro.x = CONVERT_G_D_VTF16E14_X
             (GetChannelBytesUsedSize(CHANNEL_X), GetExponentValue(), sample->gyro_x)
             ;
@@ -78,8 +81,8 @@ int GyroSensor::processEvent(unsigned char *raw_data, size_t raw_data_len){
         mPendingEvent.data[2] = mPendingEvent.gyro.z = CONVERT_G_D_VTF16E14_Z
             (GetChannelBytesUsedSize(CHANNEL_Z), GetExponentValue(), sample->gyro_z)
             ;
-    }
-    else if (GetUnitValue() == HID_USAGE_SENSOR_UNITS_RADIANS_PER_SECOND){
+        break;
+    case HID_USAGE_SENSOR_UNITS_RADIANS_PER_SECOND:
         mPendingEvent.data[0] = mPendingEvent.gyro.x = CONVERT_FROM_VTF16
             (GetChannelBytesUsedSize(CHANNEL_X), GetExponentValue(), sample->gyro_x)
             ;
@@ -89,9 +92,10 @@ int GyroSensor::processEvent(unsigned char *raw_data, size_t raw_data_len){
         mPendingEvent.data[2] = mPendingEvent.gyro.z = CONVERT_FROM_VTF16
             (GetChannelBytesUsedSize(CHANNEL_Z), GetExponentValue(), sample->gyro_z)
             ;
-    }
-    else{
+        break;
+    default:
         ALOGE("Gyro Unit is not supported");
+        break;
     }
 
     ALOGV("GYRO 3D Sample %fm/s2 %fm/s2 %fm/s2\n", mPendingEvent.gyro.x,
index ebf185a..b3d81ff 100644 (file)
@@ -154,9 +154,9 @@ inline float convert_from_vtf_format(int size, int exponent, unsigned int value)
 #define DEF_ORIENT_ACCEL_Y                   -1
 #define DEF_ORIENT_ACCEL_Z                   -1
 
-#define DEF_ORIENT_GYRO_X                   1
+#define DEF_ORIENT_GYRO_X                   -1
 #define DEF_ORIENT_GYRO_Y                   1
-#define DEF_ORIENT_GYRO_Z                   1
+#define DEF_ORIENT_GYRO_Z                   -1
 
 // G to m/s2
 #define CONVERT_FROM_VTF16(s,d,x)      (convert_from_vtf_format(s,d,x))