{
int i = sensor_info[s].catalog_index;
int sensor_type = sensor_catalog[i].type;
+ float x, y, z;
switch (sensor_type) {
case SENSOR_TYPE_ACCELEROMETER:
* /hardware/libhardware/include/hardware/sensors.h
* for a discussion of what Android expects
*/
- data->data[0] = -data->data[0];
- data->data[2] = -data->data[2];
+ x = -data->data[0];
+ y = data->data[1];
+ z = -data->data[2];
+
+ data->data[0] = x;
+ data->data[1] = y;
+ data->data[2] = z;
+ break;
+
+ case SENSOR_TYPE_MAGNETIC_FIELD:
+ x = -data->data[0];
+ y = data->data[1];
+ z = -data->data[2];
+
+ data->data[0] = x;
+ data->data[1] = y;
+ data->data[2] = z;
break;
case SENSOR_TYPE_GYROSCOPE:
+ x = -data->data[0];
+ y = data->data[1];
+ z = -data->data[2];
+
/* Limit drift */
- if ( fabs(data->data[0]) < 0.1 &&
- fabs(data->data[1]) < 0.1 &&
- fabs(data->data[2]) < 0.1) {
- data->data[0] = 0;
- data->data[1] = 0;
- data->data[2] = 0;
- }
+ if (fabs(x) < 0.1 && fabs(y) < 0.1 && fabs(z) < 0.1)
+ x = y = z = 0;
+
+ data->data[0] = x;
+ data->data[1] = y;
+ data->data[2] = z;
break;
case SENSOR_TYPE_AMBIENT_TEMPERATURE: