X-Git-Url: http://git.osdn.net/view?p=android-x86%2Fhardware-intel-libsensors.git;a=blobdiff_plain;f=gyro-calibration.c;h=6a2170f9ae50cce3ecf42c25fa0beca880588ca7;hp=48518c3f6d91ff9fa07279806a79f5c016577b5c;hb=refs%2Fheads%2Fq-x86;hpb=0bb03ae169f994cce127061b0dc7b43621e43e7b diff --git a/gyro-calibration.c b/gyro-calibration.c index 48518c3..6a2170f 100644 --- a/gyro-calibration.c +++ b/gyro-calibration.c @@ -1,6 +1,18 @@ /* - * Copyright (C) 2014 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,9 +27,10 @@ #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 (struct gyro_cal_t* cal_data) +static void reset (gyro_cal_t* cal_data) { cal_data->count = 0; @@ -28,13 +41,14 @@ static void reset (struct gyro_cal_t* cal_data) } -void gyro_cal_init (struct sensor_info_t* info) +void gyro_cal_init (int s) { int ret; - struct gyro_cal_t* cal_data = (struct 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,16 +59,22 @@ void gyro_cal_init (struct 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 != 4 || version != GYRO_CAL_VERSION) { + reset(cal_data); + ALOGE("Gyro calibration - init failed!\n"); + } + fclose(data_file); } -void gyro_store_data (struct sensor_info_t* info) +void gyro_store_data (int s) { int ret; - struct gyro_cal_t* cal_data = (struct 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) @@ -65,7 +85,7 @@ void gyro_store_data (struct 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) @@ -75,7 +95,7 @@ void gyro_store_data (struct sensor_info_t* info) } -static int gyro_collect (float x, float y, float z, struct gyro_cal_t* cal_data) +static int gyro_collect (float x, float y, float z, gyro_cal_t* cal_data) { /* Analyze gyroscope data */ @@ -126,16 +146,16 @@ static int gyro_collect (float x, float y, float z, struct gyro_cal_t* cal_data) } -void calibrate_gyro (struct sensors_event_t* event, struct sensor_info_t* info) +void calibrate_gyro (int s, sensors_event_t* event) { - struct gyro_cal_t* cal_data = (struct 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); @@ -143,6 +163,6 @@ void calibrate_gyro (struct sensors_event_t* event, struct 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; }