diff options
author | TaeminYeom <taemin.yeom@samsung.com> | 2022-04-07 10:59:22 +0900 |
---|---|---|
committer | TaeminYeom <taemin.yeom@samsung.com> | 2022-04-07 13:24:22 +0900 |
commit | 5a3b6f1b3aebeed5e9b3f45b94b0a39b36c1daa6 (patch) | |
tree | 18e6ba13d0d3f839e24eb2dca9eb08da1a4bff60 | |
parent | f0e7fce546340bb5745651fd7373f9025f341ac3 (diff) | |
download | sensor-5a3b6f1b3aebeed5e9b3f45b94b0a39b36c1daa6.tar.gz sensor-5a3b6f1b3aebeed5e9b3f45b94b0a39b36c1daa6.tar.bz2 sensor-5a3b6f1b3aebeed5e9b3f45b94b0a39b36c1daa6.zip |
Add option to sensor-tool
Change-Id: I5ef54eacb2142afac007ecb2c8d953e5deeb176a
Signed-off-by: TaeminYeom <taemin.yeom@samsung.com>
-rw-r--r-- | include/sensor_info.h | 41 | ||||
-rw-r--r-- | tests/sensor_info.h | 38 | ||||
-rw-r--r-- | tools/sensor-tool.c | 130 | ||||
-rw-r--r-- | tools/sensor-tool.h | 97 |
4 files changed, 139 insertions, 167 deletions
diff --git a/include/sensor_info.h b/include/sensor_info.h new file mode 100644 index 0000000..ee13601 --- /dev/null +++ b/include/sensor_info.h @@ -0,0 +1,41 @@ +#define SENSOR_NUM (sizeof(sensor_infos) / sizeof(sensor_infos[0])) + +struct sensor_info { + sensor_type_e type; + const char* name; + const char* alias; + int value_num; +}; + +static const struct sensor_info sensor_infos[] = { + {SENSOR_ALL, "All", "ALL", 0}, + {SENSOR_ACCELEROMETER, "Accelerometer", "ACCEL", 3}, + {SENSOR_GRAVITY, "Gravity sensor", "GRAVITY", 3}, + {SENSOR_LINEAR_ACCELERATION, "Linear acceleration sensor", "LINEAR_ACCEL", 3}, + {SENSOR_MAGNETIC, "Magnetic sensor", "MAGNET", 3}, + {SENSOR_ROTATION_VECTOR, "Rotation vector sensor", "ROTATION", 4}, + {SENSOR_ORIENTATION, "Orientation sensor", "ORIENTATION", 3}, + {SENSOR_GYROSCOPE, "Gyroscope", "GYRO", 3}, + {SENSOR_LIGHT, "Light sensor", "LIGHT", 1}, + {SENSOR_PROXIMITY, "Proximity sensor", "PROXIMITY", 1}, + {SENSOR_PRESSURE, "Pressure sensor", "PRESSURE", 1}, + {SENSOR_ULTRAVIOLET, "Ultraviolet sensor", "UV", 1}, + {SENSOR_TEMPERATURE, "Temperature sensor", "TEMP", 1}, + {SENSOR_HUMIDITY, "Humidity sensor", "HUMIDITY", 1}, + {SENSOR_HRM, "Heart-rate monitor", "HRM", 1}, + {SENSOR_HRM_LED_GREEN, "Green LED sensor of HRM", "GREEN_HRM", 1}, + {SENSOR_HRM_LED_IR, "Infra-Red LED sensor of HRM", "IR_HRM", 1}, + {SENSOR_HRM_LED_RED, "Red LED sensor of HRM", "RED_HRM", 1}, + {SENSOR_GYROSCOPE_UNCALIBRATED, "Uncalibrated Gyroscope sensor", "UNCAL_GYRO", 6}, + {SENSOR_GEOMAGNETIC_UNCALIBRATED, "Uncalibrated Geomagnetic sensor", "UNCAL_MAGNET", 6}, + {SENSOR_GYROSCOPE_ROTATION_VECTOR, "Gyroscope-based rotation vector sensor", "GYRO_ROTATION", 4}, + {SENSOR_GEOMAGNETIC_ROTATION_VECTOR, "Geomagnetic-based rotation vector sensor", "MAGNET_ROTATION", 4}, + {SENSOR_GYROSCOPE_ORIENTATION, "Gyroscope-based orientation sensor", "GYRO_ORIENTATION", 3}, + {SENSOR_GEOMAGNETIC_ORIENTATION, "Geomagnetic-based orientation sensor", "MAGNET_ORIENTATION", 3}, + {SENSOR_SIGNIFICANT_MOTION, "Significant motion sensor", "MOTION", 1}, + {SENSOR_HRM_BATCH, "Heart-rate monitor batch sensor", "HRM_BATCH", 1}, + {SENSOR_HRM_LED_GREEN_BATCH, "Green LED of HRM batch sensor", "GREEN_HRM_BATCH", 1}, + {SENSOR_HUMAN_PEDOMETER, "Pedometer", "PEDOMETER", 3}, + {SENSOR_HUMAN_SLEEP_MONITOR, "Sleep monitor", "SLEEP_MONITOR", 1}, + {SENSOR_HUMAN_SLEEP_DETECTOR, "Sleep detector", "SLEEP_DETECTOR", 1}, +}; diff --git a/tests/sensor_info.h b/tests/sensor_info.h deleted file mode 100644 index 8662c95..0000000 --- a/tests/sensor_info.h +++ /dev/null @@ -1,38 +0,0 @@ -#define SENSOR_NUM 28 - -struct sensor_info { - sensor_type_e type; - const char* name; - int value_num; -}; - -static const struct sensor_info sensor_infos[] = { - {SENSOR_ALL, "All", 0}, - {SENSOR_ACCELEROMETER, "Accelerometer", 3}, - {SENSOR_GRAVITY, "Gravity sensor", 3}, - {SENSOR_LINEAR_ACCELERATION, "Linear acceleration sensor", 3}, - {SENSOR_MAGNETIC, "Magnetic sensor", 3}, - {SENSOR_ROTATION_VECTOR, "Rotation vector sensor", 4}, - {SENSOR_ORIENTATION, "Orientation sensor", 3}, - {SENSOR_GYROSCOPE, "Gyroscope", 3}, - {SENSOR_LIGHT, "Light sensor", 1}, - {SENSOR_PROXIMITY, "Proximity sensor", 1}, - {SENSOR_PRESSURE, "Pressure sensor", 1}, - {SENSOR_ULTRAVIOLET, "Ultraviolet sensor", 1}, - {SENSOR_TEMPERATURE, "Temperature sensor", 1}, - {SENSOR_HUMIDITY, "Humidity sensor", 1}, - {SENSOR_HRM, "Heart-rate monitor", 1}, - {SENSOR_HRM_LED_GREEN, "Green LED sensor of HRM", 1}, - {SENSOR_HRM_LED_IR, "Infra-Red LED sensor of HRM", 1}, - {SENSOR_HRM_LED_RED, "Red LED sensor of HRM", 1}, - {SENSOR_GYROSCOPE_UNCALIBRATED, "Uncalibrated Gyroscope sensor", 6}, - {SENSOR_GEOMAGNETIC_UNCALIBRATED, "Uncalibrated Geomagnetic sensor", 6}, - {SENSOR_GYROSCOPE_ROTATION_VECTOR, "Gyroscope-based rotation vector sensor", 4}, - {SENSOR_GEOMAGNETIC_ROTATION_VECTOR, "Geomagnetic-based rotation vector sensor", 4}, - {SENSOR_SIGNIFICANT_MOTION, "Significant motion sensor", 1}, - {SENSOR_HRM_BATCH, "Heart-rate monitor batch sensor", 1}, - {SENSOR_HRM_LED_GREEN_BATCH, "Green LED of HRM batch sensor", 1}, - {SENSOR_HUMAN_PEDOMETER, "Pedometer", 3}, - {SENSOR_HUMAN_SLEEP_MONITOR, "Sleep monitor", 1}, - {SENSOR_HUMAN_SLEEP_DETECTOR, "Sleep detector", 1}, -}; diff --git a/tools/sensor-tool.c b/tools/sensor-tool.c index 8d97d8b..f7c4642 100644 --- a/tools/sensor-tool.c +++ b/tools/sensor-tool.c @@ -1,10 +1,13 @@ +#include <stdio.h> +#include <getopt.h> + #include <glib.h> #include <sensor.h> -#include "sensor-tool.h" +#include "sensor_info.h" static GMainLoop *loop; -static bool turned_on[SENSOR_NUM]; +static bool turned_on[40]; static void sensor_callback(sensor_h sensor, sensor_event_s events[], int events_count, void *user_data) { @@ -12,20 +15,20 @@ static void sensor_callback(sensor_h sensor, sensor_event_s events[], int events sensor_get_type(sensor, &type); int num = 0; - for (int i = 0; i < SENSOR_NUM; ++i){ - if (sensor_type[i] == type){ + for (int i = 1; i < SENSOR_NUM; ++i){ + if (sensor_infos[i].type == type){ num = i; break; } } - g_print("[%s] : ", sensor_alias[num]); + g_print("[%s] : ", sensor_infos[num].alias); for (int i = 0; i < events_count; ++i) { int value_count; - if (events[i].value_count < value_num[num]) + if (events[i].value_count < sensor_infos[num].value_num) value_count = events[i].value_count; else - value_count = value_num[num]; + value_count = sensor_infos[num].value_num; for (int j = 0; j < value_count; ++j) { g_print("%f ", events[i].values[j]); @@ -34,13 +37,13 @@ static void sensor_callback(sensor_h sensor, sensor_event_s events[], int events g_print("\n"); } -static int create_sensor_listener(int num, sensor_h *sensor, sensor_listener_h *listener) +static int create_sensor_listener(int num, int interval, sensor_h *sensor, sensor_listener_h *listener) { bool supported; int ret; float min, max; - const char *name = sensor_name[num]; - sensor_type_e type = sensor_type[num]; + const char *name = sensor_infos[num].name; + sensor_type_e type = sensor_infos[num].type; sensor_is_supported(type, &supported); if (!supported) { @@ -52,7 +55,7 @@ static int create_sensor_listener(int num, sensor_h *sensor, sensor_listener_h * sensor_create_listener(*sensor, listener); sensor_listener_set_events_cb(*listener, sensor_callback, NULL); sensor_listener_set_option(*listener, SENSOR_OPTION_ALWAYS_ON); - sensor_listener_set_interval(*listener, 100); + sensor_listener_set_interval(*listener, interval); sensor_get_min_range(*sensor, &min); sensor_get_max_range(*sensor, &max); @@ -66,42 +69,105 @@ static int create_sensor_listener(int num, sensor_h *sensor, sensor_listener_h * return 0; } -int main() +static void usage(void) +{ + static bool printed = false; + + if (!printed) { + printf("Usage : sensor-tool [OPTION]\n"); + printf("Example : sensor-tool -s 1 -i 100\n"); + printf("[-h|--help] : Show this help\n"); + printf("[-i|--interval] : The default is 10ms. range : 10 ~ 1000ms\n"); + printf("[-s|--sensor_type] : The default is all\n"); + for (int i = 0; i < SENSOR_NUM; ++i) { + printf("\t%d : %s\n", i, sensor_infos[i].name); + } + printed = true; + } +} + +int main(int argc, char *argv[]) { - sensor_h sensor[29]; - sensor_listener_h listener[29]; + static const struct option long_options[] = { + {"sensor_type", required_argument, NULL, 's'}, + {"interval", required_argument, NULL, 'i'}, + {"help", no_argument, NULL, 'h'}, + {0, 0, 0, 0}, + }; + + int sensor_type = 0; + int interval = 10; + for (;;) { + int opt = getopt_long(argc, argv, "s:i:h", long_options, NULL); + if (opt == -1) + break; + + switch (opt) { + case 's': + sensor_type = atoi(optarg); + if (sensor_type < 0 || sensor_type >= SENSOR_NUM) { + printf("Wrong sensor number. Sensor number range is 0 ~ %d.\n", SENSOR_NUM - 1); + return 0; + } + break; + case 'i': + interval = atoi(optarg); + if (interval < 10) + interval = 10; + break; + default: + usage(); + return 0; + break; + } + } + int usable = 0; + sensor_h sensor[40]; + sensor_listener_h listener[40]; + if (sensor_type == 0) { + for (int i = 1; i < SENSOR_NUM; ++i) { + if (create_sensor_listener(i, interval, &sensor[i], &listener[i])) { + turned_on[i] = false; + } + else { + turned_on[i] = true; + ++usable; + } + } - for (int i = 0; i < SENSOR_NUM; ++i) { - if (create_sensor_listener(i, &sensor[i], &listener[i])) { - turned_on[i] = false; + if (usable) { + printf("Supported sensors list : \n"); + for (int i = 1; i < SENSOR_NUM; ++i) { + if (!turned_on[i]) + continue; + printf("%s : [%s]\n", sensor_infos[i].name, sensor_infos[i].alias); + } + printf("\n"); + } + } + + else { + if (create_sensor_listener(sensor_type, interval, &sensor[sensor_type], &listener[sensor_type])) { + turned_on[sensor_type] = false; } else { - turned_on[i] = true; + turned_on[sensor_type] = true; ++usable; } } if (usable == 0) { - g_print("There is no supported sensor.\n"); - return -1; + printf("There is no supported sensor.\n"); + return 0; } - g_print("Supported sensors list : \n"); - for (int i = 0; i < SENSOR_NUM; ++i) { - if (!turned_on[i]) - continue; - g_print("%s : [%s]\n", sensor_name[i], sensor_alias[i]); - } - g_print("\n"); - loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(loop); - for (int i = 0; i < SENSOR_NUM; ++i) { - if (!turned_on[i]) - continue; - sensor_destroy_listener(listener[i]); + for (int i = 1; i < SENSOR_NUM; ++i) { + if (turned_on[i]) + sensor_destroy_listener(listener[i]); } return 0; diff --git a/tools/sensor-tool.h b/tools/sensor-tool.h deleted file mode 100644 index d200d0b..0000000 --- a/tools/sensor-tool.h +++ /dev/null @@ -1,97 +0,0 @@ -#define SENSOR_NUM 27 - -#include <sensor.h> - -const sensor_type_e sensor_type[] = -{ - SENSOR_ACCELEROMETER, - SENSOR_GRAVITY, - SENSOR_LINEAR_ACCELERATION, - SENSOR_MAGNETIC, - SENSOR_ROTATION_VECTOR, - SENSOR_ORIENTATION, - SENSOR_GYROSCOPE, - SENSOR_LIGHT, - SENSOR_PROXIMITY, - SENSOR_PRESSURE, - SENSOR_ULTRAVIOLET, - SENSOR_TEMPERATURE, - SENSOR_HUMIDITY, - SENSOR_HRM, - SENSOR_HRM_LED_GREEN, - SENSOR_HRM_LED_IR, - SENSOR_HRM_LED_RED, - SENSOR_GYROSCOPE_UNCALIBRATED, - SENSOR_GEOMAGNETIC_UNCALIBRATED, - SENSOR_GYROSCOPE_ROTATION_VECTOR, - SENSOR_GEOMAGNETIC_ROTATION_VECTOR, - SENSOR_SIGNIFICANT_MOTION, - SENSOR_HRM_BATCH, - SENSOR_HRM_LED_GREEN_BATCH, - SENSOR_HUMAN_PEDOMETER, - SENSOR_HUMAN_SLEEP_MONITOR, - SENSOR_HUMAN_SLEEP_DETECTOR -}; - -const char *sensor_name[] = { - "Accelerometer", - "Gravity sensor", - "Linear acceleration sensor", - "Magnetic sensor", - "Rotation vector sensor", - "Orientation sensor", - "Gyroscope", - "Light sensor", - "Proximity sensor", - "Pressure sensor", - "Ultraviolet sensor", - "Temperature sensor", - "Humidity sensor", - "Heart-rate monitor", - "Green LED sensor of HRM", - "Infra-Red LED sensor of HRM", - "Red LED sensor of HRM", - "Uncalibrated Gyroscope sensor", - "Uncalibrated Geomagnetic sensor", - "Gyroscope-based rotation vector sensor", - "Geomagnetic-based rotation vector sensor", - "Significant motion sensor", - "Heart-rate monitor batch sensor", - "Green LED of HRM batch sensor", - "Pedometer", - "Sleep monitor", - "Sleep detector" -}; - -const char *sensor_alias[] = { - "ACCEL", - "GRAVITY", - "LINEAR_ACCEL", - "MAGNET", - "ROTATION", - "ORIENTATION", - "GYRO", - "LIGHT", - "PROXIMITY", - "PRESSURE", - "UV", - "TEMP", - "HUMIDITY", - "HRM", - "GREEN_HRM", - "IR_HRM", - "RED_HRM", - "UNCAL_GYRO", - "UNCAL_MAGNET", - "GYRO_ROTATION", - "MAGNET_ROTATION", - "MOTION", - "HRM_BATCH", - "GREEN_HRM_BATCH", - "PEDOMETER", - "SLEEP_MONITOR", - "SLEEP_DETECTOR" -}; - -// the number of value to be verified of the sensor -const int value_num[] = {3, 3, 3, 3, 4, 3, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 6, 6, 4, 4, 1, 1, 1, 3, 1, 1}; |