summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaeminYeom <taemin.yeom@samsung.com>2022-04-07 10:59:22 +0900
committerTaeminYeom <taemin.yeom@samsung.com>2022-04-07 13:24:22 +0900
commit5a3b6f1b3aebeed5e9b3f45b94b0a39b36c1daa6 (patch)
tree18e6ba13d0d3f839e24eb2dca9eb08da1a4bff60
parentf0e7fce546340bb5745651fd7373f9025f341ac3 (diff)
downloadsensor-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.h41
-rw-r--r--tests/sensor_info.h38
-rw-r--r--tools/sensor-tool.c130
-rw-r--r--tools/sensor-tool.h97
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};