+ data->data[0] *= 0.000001;
+ data->data[1] *= 0.000001;
+ data->data[2] *= 0.000001;
+ }
+}
+
+
+static void process_event_gyro_uncal (int s, int i, sensors_event_t* data)
+{
+ gyro_cal_t* gyro_data;
+
+ if (sensor[s].type == SENSOR_TYPE_GYROSCOPE) {
+ gyro_data = (gyro_cal_t*) sensor[s].cal_data;
+
+ memcpy(&sensor[i].sample, data, sizeof(sensors_event_t));
+
+ sensor[i].sample.type = SENSOR_TYPE_GYROSCOPE_UNCALIBRATED;
+ sensor[i].sample.sensor = s;
+
+ sensor[i].sample.data[0] = data->data[0] + gyro_data->bias_x;
+ sensor[i].sample.data[1] = data->data[1] + gyro_data->bias_y;
+ sensor[i].sample.data[2] = data->data[2] + gyro_data->bias_z;
+
+ sensor[i].sample.uncalibrated_gyro.bias[0] = gyro_data->bias_x;
+ sensor[i].sample.uncalibrated_gyro.bias[1] = gyro_data->bias_y;
+ sensor[i].sample.uncalibrated_gyro.bias[2] = gyro_data->bias_z;
+
+ sensor[i].report_pending = 1;
+ }
+}
+
+static void process_event_magn_uncal (int s, int i, sensors_event_t* data)
+{
+ compass_cal_t* magn_data;
+
+ if (sensor[s].type == SENSOR_TYPE_MAGNETIC_FIELD) {
+ magn_data = (compass_cal_t*) sensor[s].cal_data;
+
+ memcpy(&sensor[i].sample, data, sizeof(sensors_event_t));
+
+ sensor[i].sample.type = SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED;
+ sensor[i].sample.sensor = s;
+
+ sensor[i].sample.data[0] = data->data[0] + magn_data->offset[0][0];
+ sensor[i].sample.data[1] = data->data[1] + magn_data->offset[1][0];
+ sensor[i].sample.data[2] = data->data[2] + magn_data->offset[2][0];
+
+ sensor[i].sample.uncalibrated_magnetic.bias[0] = magn_data->offset[0][0];
+ sensor[i].sample.uncalibrated_magnetic.bias[1] = magn_data->offset[1][0];
+ sensor[i].sample.uncalibrated_magnetic.bias[2] = magn_data->offset[2][0];
+
+ sensor[i].report_pending = 1;
+ }
+}
+
+static void process_event (int s, sensors_event_t* data)
+{
+ /*
+ * This gets the real event (post process - calibration, filtering & co.) and makes it into a virtual one.
+ * The specific processing function for each sensor will populate the necessary fields and set up the report pending flag.
+ */
+
+ int i;
+
+ /* Go through out virtual sensors and check if we can use this event */
+ for (i = 0; i < sensor_count; i++)
+ switch (sensor[i].type) {