From c60965155478599b2f74b9874d48a295a4284db8 Mon Sep 17 00:00:00 2001 From: Adriana Reus Date: Thu, 31 Jul 2014 16:18:20 +0300 Subject: [PATCH] Populate L specific sensor_t fields Add stringType, flags, and requiredPermission fields. Change-Id: I1df67776e55fe85dfc06984459e6a1a795489ded Signed-off-by: Adriana Reus --- common.h | 6 +++++ description.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ description.h | 3 +++ enumeration.c | 7 +++++ 4 files changed, 101 insertions(+) diff --git a/common.h b/common.h index 4778e4f..b89199f 100644 --- a/common.h +++ b/common.h @@ -36,6 +36,12 @@ #define FLAG_FIELD_ORDERING 0x01 +#ifdef __LP64__ + typedef uint64_t flag_t; +#else + typedef uint32_t flag_t; +#endif + struct channel_descriptor_t { const char *name; /* channel name ; ex: x */ diff --git a/description.c b/description.c index ccc3870..b9d5e9f 100644 --- a/description.c +++ b/description.c @@ -260,3 +260,88 @@ int sensor_get_order (int s, unsigned char map[MAX_CHANNELS]) return 1; /* OK to use modified ordering map */ } + +char* sensor_get_string_type(int s) +{ + int catalog_index; + int sensor_type; + + catalog_index = sensor_info[s].catalog_index; + sensor_type = sensor_catalog[catalog_index].type; + + switch (sensor_type) { + case SENSOR_TYPE_ACCELEROMETER: + return SENSOR_STRING_TYPE_ACCELEROMETER; + + case SENSOR_TYPE_MAGNETIC_FIELD: + return SENSOR_STRING_TYPE_MAGNETIC_FIELD; + + case SENSOR_TYPE_ORIENTATION: + return SENSOR_STRING_TYPE_ORIENTATION; + + case SENSOR_TYPE_GYROSCOPE: + return SENSOR_STRING_TYPE_GYROSCOPE; + + case SENSOR_TYPE_GYROSCOPE_UNCALIBRATED: + return SENSOR_STRING_TYPE_GYROSCOPE_UNCALIBRATED; + + case SENSOR_TYPE_LIGHT: + return SENSOR_STRING_TYPE_LIGHT; + + case SENSOR_TYPE_AMBIENT_TEMPERATURE: + return SENSOR_STRING_TYPE_AMBIENT_TEMPERATURE; + + case SENSOR_TYPE_TEMPERATURE: + return SENSOR_STRING_TYPE_TEMPERATURE; + + case SENSOR_TYPE_PROXIMITY: + return SENSOR_STRING_TYPE_PROXIMITY; + + case SENSOR_TYPE_PRESSURE: + return SENSOR_STRING_TYPE_PRESSURE; + + case SENSOR_TYPE_RELATIVE_HUMIDITY: + return SENSOR_STRING_TYPE_RELATIVE_HUMIDITY; + + default: + return ""; + } +} + +flag_t sensor_get_flags (int s) +{ + int catalog_index; + int sensor_type; + + flag_t flags = 0x0; + catalog_index = sensor_info[s].catalog_index; + sensor_type = sensor_catalog[catalog_index].type; + + switch (sensor_type) { + case SENSOR_TYPE_ACCELEROMETER: + case SENSOR_TYPE_MAGNETIC_FIELD: + case SENSOR_TYPE_ORIENTATION: + case SENSOR_TYPE_GYROSCOPE: + case SENSOR_TYPE_GYROSCOPE_UNCALIBRATED: + case SENSOR_TYPE_PRESSURE: + flags |= SENSOR_FLAG_CONTINUOUS_MODE; + break; + + case SENSOR_TYPE_LIGHT: + case SENSOR_TYPE_AMBIENT_TEMPERATURE: + case SENSOR_TYPE_TEMPERATURE: + case SENSOR_TYPE_RELATIVE_HUMIDITY: + flags |= SENSOR_FLAG_ON_CHANGE_MODE; + break; + + + case SENSOR_TYPE_PROXIMITY: + flags |= SENSOR_FLAG_WAKE_UP; + flags |= SENSOR_FLAG_ON_CHANGE_MODE; + break; + + default: + ALOGI("Unknown sensor"); + } + return flags; +} diff --git a/description.h b/description.h index f2ba07c..40619c1 100644 --- a/description.h +++ b/description.h @@ -24,4 +24,7 @@ int sensor_get_fl_prop (int s, const char* sel, float* val); int sensor_get_order (int s, unsigned char map[MAX_CHANNELS]); +char* sensor_get_string_type(int s); +flag_t sensor_get_flags (int s); + #endif diff --git a/enumeration.c b/enumeration.c index d202637..f60d126 100644 --- a/enumeration.c +++ b/enumeration.c @@ -173,6 +173,13 @@ static void add_sensor (int dev_num, int catalog_index, int use_polling) sensor_desc[s].maxRange = sensor_get_max_range(s); sensor_desc[s].resolution = sensor_get_resolution(s); sensor_desc[s].power = sensor_get_power(s); + sensor_desc[s].stringType = sensor_get_string_type(s); + + /* None of our supported sensors requires a special permission. + * If this will be the case we should implement a sensor_get_perm + */ + sensor_desc[s].requiredPermission = ""; + sensor_desc[s].flags = sensor_get_flags(s); if (sensor_info[s].internal_name[0] == '\0') { /* -- 2.11.0