Add option to sensor-tool 27/273527/2
authorTaeminYeom <taemin.yeom@samsung.com>
Thu, 7 Apr 2022 01:59:22 +0000 (10:59 +0900)
committerTaeminYeom <taemin.yeom@samsung.com>
Thu, 7 Apr 2022 04:24:22 +0000 (13:24 +0900)
Change-Id: I5ef54eacb2142afac007ecb2c8d953e5deeb176a
Signed-off-by: TaeminYeom <taemin.yeom@samsung.com>
include/sensor_info.h [new file with mode: 0644]
tests/sensor_info.h [deleted file]
tools/sensor-tool.c
tools/sensor-tool.h [deleted file]

diff --git a/include/sensor_info.h b/include/sensor_info.h
new file mode 100644 (file)
index 0000000..ee13601
--- /dev/null
@@ -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 (file)
index 8662c95..0000000
+++ /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},
-};
index 8d97d8b..f7c4642 100644 (file)
@@ -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 (file)
index d200d0b..0000000
+++ /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};