diff options
author | Dante Russo <drusso@codeaurora.org> | 2012-07-12 18:31:41 -0700 |
---|---|---|
committer | Dante Russo <drusso@codeaurora.org> | 2012-07-12 21:58:21 -0700 |
commit | 3c2630ef2aa770721337a7471fcd4f4ab759cbcb (patch) | |
tree | 262c5ac7ae63394c19654c2b807d10c4cec01c76 /utils/loc_cfg.cpp | |
parent | a2fc84b21943cff412bf7faf42ec99571b9ce895 (diff) | |
download | gps-3c2630ef2aa770721337a7471fcd4f4ab759cbcb.tar.gz |
gps: initial merge to jb
based from AU_LINUX_ANDROID_ICS.04.00.01.00.007
with qcom enhanced features flagged out
Change-Id: I2bc03fe4447047fd7c9a7d000040dadb8bb34647
Diffstat (limited to 'utils/loc_cfg.cpp')
-rwxr-xr-x | utils/loc_cfg.cpp | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/utils/loc_cfg.cpp b/utils/loc_cfg.cpp new file mode 100755 index 0000000..de96078 --- /dev/null +++ b/utils/loc_cfg.cpp @@ -0,0 +1,272 @@ +/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Code Aurora Forum, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#define LOG_NDDEBUG 0 +#define LOG_TAG "LocSvc_utils_cfg" + +#include <stdio.h> +#include <stdlib.h> +#include <pthread.h> +#include <string.h> +#include <ctype.h> +#include <unistd.h> +#include <time.h> +#include <loc_cfg.h> +#include <log_util.h> + +/*============================================================================= + * + * GLOBAL DATA DECLARATION + * + *============================================================================*/ + +/* Parameter data */ +loc_gps_cfg_s_type gps_conf; + +/* Parameter spec table */ + +loc_param_s_type loc_parameter_table[] = +{ + {"INTERMEDIATE_POS", &gps_conf.INTERMEDIATE_POS, 'n'}, + {"ACCURACY_THRES", &gps_conf.ACCURACY_THRES, 'n'}, + {"ENABLE_WIPER", &gps_conf.ENABLE_WIPER, 'n'}, + /* DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info + 4 - Debug, 5 - Verbose */ + {"DEBUG_LEVEL", &gps_conf.DEBUG_LEVEL, 'n'}, + {"SUPL_VER", &gps_conf.SUPL_VER, 'n'}, + {"CAPABILITIES", &gps_conf.CAPABILITIES, 'n'}, + {"TIMESTAMP", &gps_conf.TIMESTAMP, 'n'}, + {"GYRO_BIAS_RANDOM_WALK", &gps_conf.GYRO_BIAS_RANDOM_WALK, 'f'}, + {"SENSOR_ACCEL_BATCHES_PER_SEC", &gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC, 'n'}, + {"SENSOR_ACCEL_SAMPLES_PER_BATCH", &gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, 'n'}, + {"SENSOR_GYRO_BATCHES_PER_SEC", &gps_conf.SENSOR_GYRO_BATCHES_PER_SEC, 'n'}, + {"SENSOR_GYRO_SAMPLES_PER_BATCH", &gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, 'n'}, + {"SENSOR_CONTROL_MODE", &gps_conf.SENSOR_CONTROL_MODE, 'n'}, + {"SENSOR_USAGE", &gps_conf.SENSOR_USAGE, 'n'}, +}; + +int loc_param_num = sizeof(loc_parameter_table) / sizeof(loc_param_s_type); + +/*=========================================================================== +FUNCTION loc_default_parameters + +DESCRIPTION + Resets the parameters to default + +DEPENDENCIES + N/A + +RETURN VALUE + None + +SIDE EFFECTS + N/A +===========================================================================*/ + +static void loc_default_parameters() +{ + /* defaults */ + gps_conf.INTERMEDIATE_POS = 0; + gps_conf.ACCURACY_THRES = 0; + gps_conf.ENABLE_WIPER = 0; + gps_conf.DEBUG_LEVEL = 3; /* debug level */ + gps_conf.SUPL_VER = 0x10000; + gps_conf.CAPABILITIES = 0x7; + gps_conf.TIMESTAMP = 0; + + gps_conf.GYRO_BIAS_RANDOM_WALK = 0; + + gps_conf.SENSOR_ACCEL_BATCHES_PER_SEC = 2; + gps_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH = 5; + gps_conf.SENSOR_GYRO_BATCHES_PER_SEC = 2; + gps_conf.SENSOR_GYRO_SAMPLES_PER_BATCH = 5; + gps_conf.SENSOR_CONTROL_MODE = 0; /* AUTO */ + gps_conf.SENSOR_USAGE = 0; /* Enabled */ + + /* Value MUST be set by OEMs in configuration for sensor-assisted + navigation to work. There is NO default value */ + gps_conf.GYRO_BIAS_RANDOM_WALK_VALID = 0; + + /* reset logging mechanism */ + loc_logger_init(gps_conf.DEBUG_LEVEL, 0); +} + +/*=========================================================================== +FUNCTION trim_space + +DESCRIPTION + Removes leading and trailing spaces of the string + +DEPENDENCIES + N/A + +RETURN VALUE + None + +SIDE EFFECTS + N/A +===========================================================================*/ +void trim_space(char *org_string) +{ + char *scan_ptr, *write_ptr; + char *first_nonspace = NULL, *last_nonspace = NULL; + + scan_ptr = write_ptr = org_string; + + while (*scan_ptr) + { + if ( !isspace(*scan_ptr) && first_nonspace == NULL) + { + first_nonspace = scan_ptr; + } + + if (first_nonspace != NULL) + { + *(write_ptr++) = *scan_ptr; + if ( !isspace(*scan_ptr)) + { + last_nonspace = write_ptr; + } + } + + scan_ptr++; + } + + if (last_nonspace) { *last_nonspace = '\0'; } +} + +/*=========================================================================== +FUNCTION loc_read_gps_conf + +DESCRIPTION + Reads the gps.conf file and sets global parameter data + +DEPENDENCIES + N/A + +RETURN VALUE + None + +SIDE EFFECTS + N/A +===========================================================================*/ +void loc_read_gps_conf(void) +{ + FILE *gps_conf_fp = NULL; + char input_buf[LOC_MAX_PARAM_LINE]; /* declare a char array */ + char *lasts; + char *param_name, *param_str_value; + int param_int_value = 0; + double param_double_value = 0; + int i; + + loc_default_parameters(); + + if((gps_conf_fp = fopen(GPS_CONF_FILE, "r")) != NULL) + { + LOC_LOGD("%s: using %s", __FUNCTION__, GPS_CONF_FILE); + } + else + { + LOC_LOGW("%s: no %s file, using defaults", __FUNCTION__, GPS_CONF_FILE); + return; /* no parameter file */ + } + + while(fgets(input_buf, LOC_MAX_PARAM_LINE, gps_conf_fp) != NULL) + { + /* Separate variable and value */ + param_name = strtok_r(input_buf, "=", &lasts); + if (param_name == NULL) continue; /* skip lines that do not contain "=" */ + param_str_value = strtok_r(NULL, "=", &lasts); + if (param_str_value == NULL) continue; /* skip lines that do not contain two operands */ + + /* Trim leading and trailing spaces */ + trim_space(param_name); + trim_space(param_str_value); + + // printf("*(%s) = (%s)\n", param_name, param_str_value); + + /* Parse numerical value */ + if (param_str_value[0] == '0' && tolower(param_str_value[1]) == 'x') + { + /* hex */ + param_int_value = (int) strtol(¶m_str_value[2], (char**) NULL, 16); + } + else { + param_double_value = (double) atof(param_str_value); /* float */ + param_int_value = atoi(param_str_value); /* dec */ + } + + if (strcmp("GYRO_BIAS_RANDOM_WALK", param_name) == 0) + { + gps_conf.GYRO_BIAS_RANDOM_WALK_VALID = 1; + } + + for(i = 0; i < loc_param_num; i++) + { + if (strcmp(loc_parameter_table[i].param_name, param_name) == 0 && + loc_parameter_table[i].param_ptr) + { + switch (loc_parameter_table[i].param_type) + { + case 's': + if (strcmp(param_str_value, "NULL") == 0) + { + *((char*)loc_parameter_table[i].param_ptr) = '\0'; + } + else { + strlcpy((char*) loc_parameter_table[i].param_ptr, + param_str_value, + LOC_MAX_PARAM_STRING + 1); + } + /* Log INI values */ + LOC_LOGD("%s: PARAM %s = %s", __FUNCTION__, param_name, (char*)loc_parameter_table[i].param_ptr); + break; + case 'n': + *((int *)loc_parameter_table[i].param_ptr) = param_int_value; + /* Log INI values */ + LOC_LOGD("%s: PARAM %s = %d", __FUNCTION__, param_name, param_int_value); + break; + case 'f': + *((double *)loc_parameter_table[i].param_ptr) = param_double_value; + /* Log INI values */ + LOC_LOGD("%s: PARAM %s = %f", __FUNCTION__, param_name, param_double_value); + break; + default: + LOC_LOGE("%s: PARAM %s parameter type must be n or n", __FUNCTION__, param_name); + } + } + } + } + + fclose(gps_conf_fp); + + /* Initialize logging mechanism with parsed data */ + loc_logger_init(gps_conf.DEBUG_LEVEL, gps_conf.TIMESTAMP); +} |