Add sensor-tool prototype 89/266389/3
authortaemin.yeom <taemin.yeom@samsung.com>
Thu, 11 Nov 2021 09:33:23 +0000 (18:33 +0900)
committertaemin.yeom <taemin.yeom@samsung.com>
Thu, 11 Nov 2021 09:46:34 +0000 (18:46 +0900)
Change-Id: I4eaa52048aeab578a56744f783e8cc97d802907b
Signed-off-by: taemin.yeom <taemin.yeom@samsung.com>
CMakeLists.txt
packaging/capi-system-sensor.spec
tools/CMakeLists.txt [new file with mode: 0644]
tools/sensor-tool.c [new file with mode: 0644]
tools/sensor-tool.h [new file with mode: 0644]

index e9338fc..e1c6c3e 100644 (file)
@@ -58,4 +58,5 @@ INSTALL(FILES include/sensor.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor)
 INSTALL(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
 ADD_SUBDIRECTORY(test/stress_test)
-ADD_SUBDIRECTORY(test/orientation_test)
\ No newline at end of file
+ADD_SUBDIRECTORY(test/orientation_test)
+ADD_SUBDIRECTORY(tools)
index 0b49033..71782ab 100644 (file)
@@ -48,6 +48,14 @@ Requires:   %{name} = %{version}-%{release}
 %description test
 Tizen Sensor Test Programs (test)
 
+%package tools
+Summary:  Sensor command line tool package
+Group:    System & System Tools
+Requires: %{name} = %{version}-%{release}
+
+%description tools
+Sensor command line tools
+
 %if 0%{?gcov:1}
 %package gcov
 Summary:    Tizen Sensor Library API (gcov)
@@ -106,6 +114,8 @@ install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
 %{_bindir}/sensor-stress_test
 %{_bindir}/sensor-orientation_test
 
+%files tools
+%{_bindir}/sensor-tool
 
 %if 0%{?gcov:1}
 %files gcov
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ca83ea9
--- /dev/null
@@ -0,0 +1,22 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(sensor-tool C)
+
+SET(PKG_MODULES
+    glib-2.0)
+
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PKGS REQUIRED ${PKG_MODULES})
+
+INCLUDE_DIRECTORIES(${PKGS_INCLUDE_DIRS})
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+FOREACH(flag ${PKGS_CFLAGS})
+       SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
+ENDFOREACH(flag)
+
+# Installing files
+FILE(GLOB_RECURSE SRCS sensor-tool.c)
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} capi-system-sensor)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/tools/sensor-tool.c b/tools/sensor-tool.c
new file mode 100644 (file)
index 0000000..8d97d8b
--- /dev/null
@@ -0,0 +1,109 @@
+#include <glib.h>
+#include <sensor.h>
+
+#include "sensor-tool.h"
+
+static GMainLoop *loop;
+static bool turned_on[SENSOR_NUM];
+
+static void sensor_callback(sensor_h sensor, sensor_event_s events[], int events_count, void *user_data)
+{
+       sensor_type_e type;
+       sensor_get_type(sensor, &type);
+       int num = 0;
+
+       for (int i = 0; i < SENSOR_NUM; ++i){
+               if (sensor_type[i] == type){
+                       num = i;
+                       break;
+               }
+       }
+
+       g_print("[%s] : ", sensor_alias[num]);
+       for (int i = 0; i < events_count; ++i) {
+               int value_count;
+               if (events[i].value_count < value_num[num])
+                       value_count = events[i].value_count;
+               else
+                       value_count = value_num[num];
+
+               for (int j = 0; j < value_count; ++j) {
+                       g_print("%f ", events[i].values[j]);
+               }
+       }
+       g_print("\n");
+}
+
+static int create_sensor_listener(int num, 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];
+
+       sensor_is_supported(type, &supported);
+       if (!supported) {
+               return -1;
+       }
+
+       sensor_get_default_sensor(type, sensor);
+
+       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_get_min_range(*sensor, &min);
+       sensor_get_max_range(*sensor, &max);
+
+       ret = sensor_listener_start(*listener);
+       if (ret < 0) {
+               g_print("%s error in listnener_start : %d\n", name, ret);
+               return ret;
+       }
+
+       return 0;
+}
+
+int main()
+{
+       sensor_h sensor[29];
+       sensor_listener_h listener[29];
+       int usable = 0;
+
+       for (int i = 0; i < SENSOR_NUM; ++i) {
+               if (create_sensor_listener(i, &sensor[i], &listener[i])) {
+                       turned_on[i] = false;
+               }
+               else {
+                       turned_on[i] = true;
+                       ++usable;
+               }
+       }
+
+       if (usable == 0) {
+               g_print("There is no supported sensor.\n");
+               return -1;
+       }
+
+       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]);
+       }
+
+       return 0;
+}
+
diff --git a/tools/sensor-tool.h b/tools/sensor-tool.h
new file mode 100644 (file)
index 0000000..0d21bba
--- /dev/null
@@ -0,0 +1,97 @@
+#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};