From 18273fd39573e25cd08ef6b29de7ab4ed0036b24 Mon Sep 17 00:00:00 2001 From: Patrick Porlan Date: Wed, 9 Apr 2014 14:03:42 +0200 Subject: [PATCH] STPK-1429 Use properties values for user-visible sensor description This expects properties named after sensor types, such as: ro.iio.accel.name = "Invensense Accelerometer" Issue: STPK-1429 Change-Id: Ia714fb55017f61e41828286e9d44c916318a2382 Signed-off-by: Patrick Porlan --- common.h | 2 ++ description.c | 80 +++++++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 64 insertions(+), 18 deletions(-) diff --git a/common.h b/common.h index 5b3a6f7..7a09fd9 100644 --- a/common.h +++ b/common.h @@ -21,6 +21,8 @@ #define COMMON_SCALE_PATH BASE_PATH "in_%s_scale" #define COMMON_SAMPLING_PATH BASE_PATH "in_%s_sampling_frequency" +#define PROP_BASE "ro.iio.%s.%s" /* Note: PROPERTY_KEY_MAX is small */ + #define MAX_TYPE_SPEC_LEN 32 /* Channel type spec len; ex: "le:u10/16>>0" */ #define MAX_SENSOR_REPORT_SIZE 32 /* Sensor report buffer size */ diff --git a/description.c b/description.c index 9d675cb..a957ffe 100644 --- a/description.c +++ b/description.c @@ -2,7 +2,9 @@ * Copyright (C) 2014 Intel Corporation. */ +#include #include +#include #include #include "enumeration.h" @@ -14,18 +16,50 @@ #define IIO_SENSOR_HAL_VERSION 1 +static int sensor_get_st_prop (int s, const char* sel, char val[MAX_NAME_SIZE]) +{ + char prop_name[PROP_NAME_MAX]; + char prop_val[PROP_VALUE_MAX]; + int i = sensor_info[s].catalog_index; + const char *prefix = sensor_catalog[i].tag; + + sprintf(prop_name, PROP_BASE, prefix, sel); + + if (property_get(prop_name, prop_val, "")) { + strncpy(val, prop_val, MAX_NAME_SIZE-1); + val[MAX_NAME_SIZE-1] = '\0'; + return 0; + } + + return -1; +} + + +static int sensor_get_fl_prop (int s, const char* sel, float* val) +{ + char buf[MAX_NAME_SIZE]; + + if (sensor_get_st_prop(s, sel, buf)) + return -1; + + *val = (float) strtod(buf, NULL); + return 0; +} + + char* sensor_get_name (int s) { - if (sensor_info[s].friendly_name[0] == '\0') { - - /* If we got a iio device name from sysfs, use it */ - if (sensor_info[s].internal_name[0]) { - snprintf(sensor_info[s].friendly_name, - MAX_NAME_SIZE, "S%d-%s", s, - sensor_info[s].internal_name); - sensor_info[s].friendly_name[MAX_NAME_SIZE-1] = '\0'; - } else - sprintf(sensor_info[s].friendly_name, "S%d", s); + if (sensor_info[s].friendly_name[0] != '\0' || + !sensor_get_st_prop(s, "name", sensor_info[s].friendly_name)) + return sensor_info[s].friendly_name; + + /* If we got a iio device name from sysfs, use it */ + if (sensor_info[s].internal_name[0]) { + snprintf(sensor_info[s].friendly_name, MAX_NAME_SIZE, "S%d-%s", + s, sensor_info[s].internal_name); + sensor_info[s].friendly_name[MAX_NAME_SIZE-1] = '\0'; + } else { + sprintf(sensor_info[s].friendly_name, "S%d", s); } return sensor_info[s].friendly_name; @@ -34,14 +68,15 @@ char* sensor_get_name (int s) char* sensor_get_vendor (int s) { - if (sensor_info[s].vendor_name[0]) - return sensor_info[s].vendor_name; + if (sensor_info[s].vendor_name[0] || + !sensor_get_st_prop(s, "vendor", sensor_info[s].vendor_name)) + return sensor_info[s].vendor_name; - return ""; + return ""; } -int sensor_get_version (int handle) +int sensor_get_version (int s) { return IIO_SENSOR_HAL_VERSION; } @@ -52,8 +87,9 @@ float sensor_get_max_range (int s) int catalog_index; int sensor_type; - if (sensor_info[s].max_range != 0.0) - return sensor_info[s].max_range; + if (sensor_info[s].max_range != 0.0 || + !sensor_get_fl_prop(s, "max_range", &sensor_info[s].max_range)) + return sensor_info[s].max_range; /* Try returning a sensible value given the sensor type */ @@ -93,12 +129,20 @@ float sensor_get_max_range (int s) float sensor_get_resolution (int s) { - return sensor_info[s].resolution; + if (sensor_info[s].resolution != 0.0 || + !sensor_get_fl_prop(s, "resolution", &sensor_info[s].resolution)) + return sensor_info[s].resolution; + + return 0; } float sensor_get_power (int s) { /* mA used while sensor is in use ; not sure about volts :) */ - return sensor_info[s].power; + if (sensor_info[s].power != 0.0 || + !sensor_get_fl_prop(s, "power", &sensor_info[s].power)) + return sensor_info[s].power; + + return 0; } -- 2.11.0