X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=gyro-calibration.c;h=6a2170f9ae50cce3ecf42c25fa0beca880588ca7;hb=refs%2Ftags%2Fandroid-x86-8.1-r1;hp=179a6a129974a1a05b7e1908b2eeea118f4e5c07;hpb=8c426f37d87c2049951809e67e51f424690a3c91;p=android-x86%2Fhardware-intel-libsensors.git diff --git a/gyro-calibration.c b/gyro-calibration.c index 179a6a1..6a2170f 100644 --- a/gyro-calibration.c +++ b/gyro-calibration.c @@ -1,6 +1,18 @@ /* - * Copyright (C) 2014-2015 Intel Corporation. - */ +// Copyright (c) 2015 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +*/ #include #include @@ -15,6 +27,7 @@ #define GYRO_MAX_ERR 0.05 #define GYRO_DS_SIZE 100 #define GYRO_CALIBRATION_PATH "/data/gyro.conf" +#define GYRO_CAL_VERSION 1.0 static void reset (gyro_cal_t* cal_data) @@ -28,13 +41,14 @@ static void reset (gyro_cal_t* cal_data) } -void gyro_cal_init (sensor_info_t* info) +void gyro_cal_init (int s) { int ret; - gyro_cal_t* cal_data = (gyro_cal_t*) info->cal_data; + gyro_cal_t* cal_data = (gyro_cal_t*) sensor[s].cal_data; FILE* data_file; + float version; - info->cal_level = 0; + sensor[s].cal_level = 0; if (cal_data == NULL) return; @@ -45,19 +59,22 @@ void gyro_cal_init (sensor_info_t* info) if (data_file == NULL) return; - ret = fscanf(data_file, "%f %f %f", + ret = fscanf(data_file, "%f %f %f %f", &version, &cal_data->bias_x, &cal_data->bias_y, &cal_data->bias_z); - if (ret != 3) + + if (ret != 4 || version != GYRO_CAL_VERSION) { + reset(cal_data); ALOGE("Gyro calibration - init failed!\n"); + } fclose(data_file); } -void gyro_store_data (sensor_info_t* info) +void gyro_store_data (int s) { int ret; - gyro_cal_t* cal_data = (gyro_cal_t*) info->cal_data; + gyro_cal_t* cal_data = (gyro_cal_t*) sensor[s].cal_data; FILE* data_file; if (cal_data == NULL) @@ -68,7 +85,7 @@ void gyro_store_data (sensor_info_t* info) if (data_file == NULL) return; - ret = fprintf(data_file, "%f %f %f", + ret = fprintf(data_file, "%f %f %f %f", GYRO_CAL_VERSION, cal_data->bias_x, cal_data->bias_y, cal_data->bias_z); if (ret < 0) @@ -129,16 +146,16 @@ static int gyro_collect (float x, float y, float z, gyro_cal_t* cal_data) } -void calibrate_gyro (sensors_event_t* event, sensor_info_t* info) +void calibrate_gyro (int s, sensors_event_t* event) { - gyro_cal_t* cal_data = (gyro_cal_t*) info->cal_data; + gyro_cal_t* cal_data = (gyro_cal_t*) sensor[s].cal_data; if (cal_data == NULL) return; /* Attempt gyroscope calibration if we have not reached this state */ - if (info->cal_level == 0) - info->cal_level = gyro_collect(event->data[0], event->data[1], + if (sensor[s].cal_level == 0) + sensor[s].cal_level = gyro_collect(event->data[0], event->data[1], event->data[2], cal_data); @@ -146,6 +163,6 @@ void calibrate_gyro (sensors_event_t* event, sensor_info_t* info) event->data[1] = event->data[1] - cal_data->bias_y; event->data[2] = event->data[2] - cal_data->bias_z; - if (info->cal_level) + if (sensor[s].cal_level) event->gyro.status = SENSOR_STATUS_ACCURACY_HIGH; }