From 183d0ca1b17327f3f3c93de8869dce84a3d1e57b Mon Sep 17 00:00:00 2001 From: "taemin.yeom" Date: Thu, 11 Nov 2021 18:33:23 +0900 Subject: [PATCH] Add sensor-tool prototype Change-Id: I4eaa52048aeab578a56744f783e8cc97d802907b Signed-off-by: taemin.yeom --- CMakeLists.txt | 3 +- packaging/capi-system-sensor.spec | 10 ++++ tools/CMakeLists.txt | 22 ++++++++ tools/sensor-tool.c | 109 ++++++++++++++++++++++++++++++++++++++ tools/sensor-tool.h | 97 +++++++++++++++++++++++++++++++++ 5 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 tools/CMakeLists.txt create mode 100644 tools/sensor-tool.c create mode 100644 tools/sensor-tool.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e9338fc..e1c6c3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/packaging/capi-system-sensor.spec b/packaging/capi-system-sensor.spec index 0b49033..71782ab 100644 --- a/packaging/capi-system-sensor.spec +++ b/packaging/capi-system-sensor.spec @@ -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 index 0000000..ca83ea9 --- /dev/null +++ b/tools/CMakeLists.txt @@ -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 index 0000000..8d97d8b --- /dev/null +++ b/tools/sensor-tool.c @@ -0,0 +1,109 @@ +#include +#include + +#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 index 0000000..0d21bba --- /dev/null +++ b/tools/sensor-tool.h @@ -0,0 +1,97 @@ +#define SENSOR_NUM 27 + +#include + +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}; -- 2.7.4