From 508058e85db8f2032b5f99dfab2ffd60d530b709 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 27 Apr 2017 12:43:37 +0900 Subject: [PATCH 01/16] sensord: version up 4.0.0 for Tizen 4 Change-Id: Ia69940ee6f5a1268372d994ff40381aecdcb7235 Signed-off-by: kibak.yoon --- packaging/sensord.spec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 5cdd8f2..8166693 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -1,6 +1,6 @@ Name: sensord Summary: Sensor daemon -Version: 2.0.11 +Version: 4.0.0 Release: 1 Group: System/Sensor Framework License: Apache-2.0 @@ -84,7 +84,8 @@ install -m 0644 %SOURCE2 %{buildroot}%{_unitdir} %install_service multi-user.target.wants sensord.service %install_service sockets.target.wants sensord.socket -ln -s libsensor.so.2 %{buildroot}%{_libdir}/libsensor.so.1 +ln -s libsensor.so.%{version} %{buildroot}/%{_libdir}/libsensor.so.2 +ln -s libsensor.so.%{version} %{buildroot}/%{_libdir}/libsensor.so.1 %post pushd %{_libdir} -- 2.7.4 From 4a6594a443bbb192a9ad5864d55dabdc843bf0f3 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 27 Apr 2017 15:36:06 +0900 Subject: [PATCH 02/16] sensord: rv: fix invalid name of magnetic sensor type URI Change-Id: Ib52c3dd5bfd8f50f686f40d6e630b1f97de02b3e Signed-off-by: kibak.yoon --- src/sensor/rotation_vector/magnetic_rv_sensor.cpp | 2 +- src/sensor/rotation_vector/rv_sensor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp index 2d480d2..2e4b255 100644 --- a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp +++ b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp @@ -30,7 +30,7 @@ #define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" #define SRC_ID_MAG 0x3 -#define SRC_STR_MAG "http://tizen.org/sensor/geomagnetic" +#define SRC_STR_MAG "http://tizen.org/sensor/magnetic" static sensor_info2_t sensor_info = { id: 0x1, diff --git a/src/sensor/rotation_vector/rv_sensor.cpp b/src/sensor/rotation_vector/rv_sensor.cpp index 116541f..e88a004 100644 --- a/src/sensor/rotation_vector/rv_sensor.cpp +++ b/src/sensor/rotation_vector/rv_sensor.cpp @@ -33,7 +33,7 @@ #define SRC_STR_GYRO "http://tizen.org/sensor/gyroscope" #define SRC_ID_MAG 0x3 -#define SRC_STR_MAG "http://tizen.org/sensor/geomagnetic" +#define SRC_STR_MAG "http://tizen.org/sensor/magnetic" static sensor_info2_t sensor_info = { id: 0x1, -- 2.7.4 From 7dd43df5b7adb9e92db533ec1c03926872b12746 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 27 Apr 2017 17:30:26 +0900 Subject: [PATCH 03/16] sensord: spec: provide libsensor.so.2 for build dependency Change-Id: Id5a50c908c3540900af34932779552c461bf9899 Signed-off-by: kibak.yoon --- packaging/sensord.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 8166693..585cf57 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,6 +33,7 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} +Provides: libsensor.so.2 %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From 7e76859be442a519139eaa4648f38270d423ba53 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Thu, 27 Apr 2017 18:00:20 +0900 Subject: [PATCH 04/16] Provides libsensord.so.2()(64bit) in case of aarch64 This is a temporary walkaround for OBS build failures Change-Id: Iaa1f611333800160921e13c7ed8a25964c8aaab3 Signed-off-by: Mu-Woong Lee --- packaging/sensord.spec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 585cf57..1106875 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,7 +33,12 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} +%ifarch aarch64 +Provides: libsensor.so.2()(64bit) +%else Provides: libsensor.so.2 +%endif + %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From b3eada2b1aa56aa04c0f8cf8c4daf5f1f7e89f15 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 28 Apr 2017 07:00:07 +0000 Subject: [PATCH 05/16] Revert "Provides libsensord.so.2()(64bit) in case of aarch64" This reverts commit 7e76859be442a519139eaa4648f38270d423ba53. Change-Id: Ica1151ce7963371a11103975b47e79e7e6eb48bc --- packaging/sensord.spec | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 1106875..585cf57 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,12 +33,7 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} -%ifarch aarch64 -Provides: libsensor.so.2()(64bit) -%else Provides: libsensor.so.2 -%endif - %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From 94d9748f1415114e91f3d4c11ad51fb66620bfa9 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 28 Apr 2017 07:01:31 +0000 Subject: [PATCH 06/16] Revert "sensord: spec: provide libsensor.so.2 for build dependency" This reverts commit 7dd43df5b7adb9e92db533ec1c03926872b12746. Change-Id: I08ec3e11640066d926b88f34ddb1c08932dbcb8f --- packaging/sensord.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 585cf57..8166693 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,7 +33,6 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} -Provides: libsensor.so.2 %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From 2d42ecb076f9c25010edcce5bda2cef6e5837225 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Fri, 28 Apr 2017 16:05:03 +0900 Subject: [PATCH 07/16] sensord: sleep 10 ms instead of 100 ms if socket is unavailable temporarily Change-Id: I4c2552d18ce45bf16ff88703577279e19376418e Signed-off-by: kibak.yoon --- src/shared/stream_socket.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shared/stream_socket.cpp b/src/shared/stream_socket.cpp index 0191f05..8ec9f7c 100644 --- a/src/shared/stream_socket.cpp +++ b/src/shared/stream_socket.cpp @@ -24,7 +24,7 @@ #include "sensor_log.h" -#define SLEEP_100_MS usleep(100000) +#define SLEEP_10_MS usleep(10000) using namespace ipc; @@ -54,7 +54,7 @@ ssize_t stream_socket::on_send(const void *buffer, size_t size) const if (len < 0) { if ((errno == EINTR) || (errno == EAGAIN) || (errno == EWOULDBLOCK)) { - SLEEP_100_MS; + SLEEP_10_MS; continue; } @@ -88,7 +88,7 @@ ssize_t stream_socket::on_recv(void *buffer, size_t size) const if (len < 0) { if ((errno == EINTR) || (errno == EAGAIN) || (errno == EWOULDBLOCK)) { - SLEEP_100_MS; + SLEEP_10_MS; continue; } -- 2.7.4 From 34cbe0ce45ce05cd3bd4b375445de616341dc5c9 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 2 May 2017 20:34:05 +0900 Subject: [PATCH 08/16] sensord: add lazy binding event handler to event loop - TBD: 1. thread-safe issue 2. sensor event: global main context or thread-default context Change-Id: I1d0f4464e14dc0e6bd0bb529ffe14cf682ef69af Signed-off-by: kibak.yoon --- src/client/sensor_listener.cpp | 4 +++- src/shared/channel.cpp | 9 +++++++++ src/shared/channel.h | 2 ++ src/shared/ipc_client.cpp | 4 ++-- src/shared/ipc_client.h | 3 ++- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/client/sensor_listener.cpp b/src/client/sensor_listener.cpp index 95c411c..0e66ef7 100644 --- a/src/client/sensor_listener.cpp +++ b/src/client/sensor_listener.cpp @@ -152,7 +152,7 @@ bool sensor_listener::connect(void) m_cmd_channel = m_client->connect(NULL); retvm_if(!m_cmd_channel, false, "Failed to connect to server"); - m_evt_channel = m_client->connect(m_handler, &m_loop); + m_evt_channel = m_client->connect(m_handler, &m_loop, false); retvm_if(!m_evt_channel, false, "Failed to connect to server"); ipc::message msg; @@ -170,6 +170,8 @@ bool sensor_listener::connect(void) m_id = buf.listener_id; m_connected.store(true); + m_evt_channel->bind(); + _D("Listener ID[%d]", get_id()); return true; diff --git a/src/shared/channel.cpp b/src/shared/channel.cpp index 8dc25ac..8549f1e 100644 --- a/src/shared/channel.cpp +++ b/src/shared/channel.cpp @@ -24,6 +24,7 @@ #include #include "sensor_log.h" +#include "channel_event_handler.h" #define SYSTEMD_SOCK_BUF_SIZE 40000 @@ -111,6 +112,14 @@ void channel::bind(channel_handler *handler, event_loop *loop) m_handler->connected(this); } +void channel::bind(void) +{ + ret_if(!m_loop); + m_event_id = m_loop->add_event(m_socket->get_fd(), + (EVENT_IN | EVENT_HUP | EVENT_NVAL), + dynamic_cast(m_handler)); +} + bool channel::connect(channel_handler *handler, event_loop *loop) { if (!m_socket->connect()) diff --git a/src/shared/channel.h b/src/shared/channel.h index e37a7a9..db709b6 100644 --- a/src/shared/channel.h +++ b/src/shared/channel.h @@ -38,6 +38,8 @@ public: channel(socket *sock); ~channel(); + /* TODO */ + void bind(void); void bind(channel_handler *handler, event_loop *loop); bool connect(channel_handler *handler, event_loop *loop); diff --git a/src/shared/ipc_client.cpp b/src/shared/ipc_client.cpp index 71fdde4..1376ac7 100644 --- a/src/shared/ipc_client.cpp +++ b/src/shared/ipc_client.cpp @@ -50,7 +50,7 @@ channel *ipc_client::connect(channel_handler *handler) return connect(handler, NULL); } -channel *ipc_client::connect(channel_handler *handler, event_loop *loop) +channel *ipc_client::connect(channel_handler *handler, event_loop *loop, bool bind) { socket *sock; channel *ch; @@ -81,7 +81,7 @@ channel *ipc_client::connect(channel_handler *handler, event_loop *loop) ch->connect(ev_handler, loop); - if (loop) { + if (loop && bind) { uint64_t id = loop->add_event(sock->get_fd(), (EVENT_IN | EVENT_HUP | EVENT_NVAL), ev_handler); ch->set_event_id(id); diff --git a/src/shared/ipc_client.h b/src/shared/ipc_client.h index 8f52678..40d9182 100644 --- a/src/shared/ipc_client.h +++ b/src/shared/ipc_client.h @@ -38,7 +38,8 @@ public: /* call channel->disconnect() after you have used it */ channel *connect(channel_handler *handler); - channel *connect(channel_handler *handler, event_loop *loop); + /* TODO: remove bind parameter */ + channel *connect(channel_handler *handler, event_loop *loop, bool bind = true); private: std::string m_path; -- 2.7.4 From 4e7257b9dc0e5ff7b9ec5d4760749e10d04df6d5 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Mon, 8 May 2017 15:01:32 +0900 Subject: [PATCH 09/16] Fix dependency issues that occur while building sensord on an old snapshot Change-Id: I328dffa4ae1c4c13f82836c68e9218d157b57f1d Signed-off-by: Mu-Woong Lee --- packaging/sensord.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 8166693..45901e6 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,6 +33,8 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} +# To support old-snapshot-based package builds +Provides: libsensor.so.2 %description dummy This package provides the dummy library of the sensor internal API. @@ -43,6 +45,8 @@ Installing %{name} replaces this dummy library with the actually functional libr Summary: Internal Sensor API (Development) Group: System/Development Requires: %{name}-dummy = %{version}-%{release} +# To support old-snapshot-based package builds +Provides: libsensord-devel %description devel Internal Sensor API (Development) -- 2.7.4 From 6d0b1e93be9b26d9949923e16ea40d293a4e8121 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 13:12:48 +0900 Subject: [PATCH 10/16] sensord: seperate socket channel for command and monitor - m_cmd_channel: get sensor information / check privilege - m_mon_channel: monitor sensors dynamically added/removed Change-Id: If746f701ddb32aefe70eafe1f934f8251954efff Signed-off-by: kibak.yoon --- src/client/sensor_manager.cpp | 45 +++++++++++++++++++---------------- src/client/sensor_manager.h | 3 ++- src/server/server_channel_handler.cpp | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index ee783f0..1f66ac4 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -35,7 +35,8 @@ using namespace sensor; sensor_manager::sensor_manager() : m_client(NULL) -, m_channel(NULL) +, m_cmd_channel(NULL) +, m_mon_channel(NULL) , m_connected(false) , m_handler(NULL) { @@ -195,18 +196,16 @@ void sensor_manager::deinit(void) bool sensor_manager::connect_channel(void) { - m_channel = m_client->connect(m_handler, &m_loop); - retvm_if(!m_channel, false, "Failed to connect to server"); - ipc::message msg; - msg.set_type(CMD_MANAGER_CONNECT); - m_channel->send_sync(&msg); - m_channel->read_sync(msg); - if (msg.header()->err < 0) { - /* TODO: if failed, disconnect channel */ - return false; - } + m_cmd_channel = m_client->connect(NULL); + retvm_if(!m_cmd_channel, false, "Failed to connect to server"); + + m_mon_channel = m_client->connect(m_handler, &m_loop); + retvm_if(!m_mon_channel, false, "Failed to connect to server"); + + msg.set_type(CMD_MANAGER_CONNECT); + m_mon_channel->send_sync(&msg); m_connected.store(true); @@ -230,16 +229,20 @@ void sensor_manager::disconnect(void) ipc::message reply; msg.set_type(CMD_MANAGER_DISCONNECT); - m_channel->send_sync(&msg); - m_channel->read_sync(reply); + m_mon_channel->send_sync(&msg); + m_mon_channel->read_sync(reply); retm_if(reply.header()->err < 0, "Failed to disconnect"); - m_connected.store(false); - m_channel->disconnect(); + m_mon_channel->disconnect(); - delete m_channel; - m_channel = NULL; + delete m_mon_channel; + m_mon_channel = NULL; + m_cmd_channel->disconnect(); + delete m_cmd_channel; + m_cmd_channel = NULL; + + m_connected.store(false); _D("Disconnected"); } @@ -294,10 +297,10 @@ bool sensor_manager::get_sensors_internal(void) msg.set_type(CMD_MANAGER_SENSOR_LIST); - ret = m_channel->send_sync(&msg); + ret = m_cmd_channel->send_sync(&msg); retvm_if(!ret, false, "Failed to send message"); - ret = m_channel->read_sync(reply); + ret = m_cmd_channel->read_sync(reply); retvm_if(!ret, false, "Failed to receive message"); reply.disclose(buf); @@ -320,10 +323,10 @@ bool sensor_manager::has_privilege(std::string &uri) memcpy(buf.sensor, uri.c_str(), uri.size()); msg.enclose((const char *)&buf, sizeof(buf)); - ret = m_channel->send_sync(&msg); + ret = m_cmd_channel->send_sync(&msg); retvm_if(!ret, false, "Failed to send message"); - ret = m_channel->read_sync(reply); + ret = m_cmd_channel->read_sync(reply); retvm_if(!ret, false, "Failed to receive message"); if (reply.header()->err == OP_SUCCESS) diff --git a/src/client/sensor_manager.h b/src/client/sensor_manager.h index a2409b4..350bb01 100644 --- a/src/client/sensor_manager.h +++ b/src/client/sensor_manager.h @@ -76,7 +76,8 @@ private: std::vector get_infos(const char *uri); ipc::ipc_client *m_client; - ipc::channel *m_channel; + ipc::channel *m_cmd_channel; /* get sensor information */ + ipc::channel *m_mon_channel; /* monitor sensors dinamically added/removed */ ipc::event_loop m_loop; std::atomic m_connected; channel_handler *m_handler; diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index 429013a..9c908fd 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -120,7 +120,7 @@ void server_channel_handler::read(channel *ch, message &msg) int server_channel_handler::manager_connect(channel *ch, message &msg) { m_manager->register_channel(ch); - return send_reply(ch, OP_SUCCESS); + return OP_SUCCESS; } int server_channel_handler::manager_disconnect(channel *ch, message &msg) -- 2.7.4 From 77cfd1b76f05cd691b15f7cab4c30940be628ff7 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 17:24:12 +0900 Subject: [PATCH 11/16] sensord: remove useless privilege and macros Change-Id: I373f5645cbdf318f397e2e3e47bc0f98b46e94ad Signed-off-by: kibak.yoon --- include/sensor_types.h | 3 --- src/client/sensor_manager.cpp | 8 +++----- src/client/sensor_provider.cpp | 1 - src/server/server_channel_handler.cpp | 3 --- 4 files changed, 3 insertions(+), 12 deletions(-) diff --git a/include/sensor_types.h b/include/sensor_types.h index 5342f23..9c9426c 100644 --- a/include/sensor_types.h +++ b/include/sensor_types.h @@ -60,9 +60,6 @@ extern "C" #define SENSOR_UNKNOWN_TYPE "http://tizen.org/sensor/unknown" #define SENSOR_UNKNOWN_NAME "Unknown" -#define PRIV_APPLICATION_SENSOR "http://tizen.org/privilege/applicationsensor" -#define PRIV_APPLICATION_SENSOR_WRITE "http://tizen.org/privilege/applicationsensor.write" - typedef int64_t sensor_id_t; typedef void *sensor_t; diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index 1f66ac4..43fcb41 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -29,8 +29,6 @@ #include "sensor_manager_channel_handler.h" -#define SIZE_STR_SENSOR_ALL 27 - using namespace sensor; sensor_manager::sensor_manager() @@ -97,7 +95,7 @@ bool sensor_manager::is_supported(sensor_t sensor) bool sensor_manager::is_supported(const char *uri) { - if (strncmp(uri, utils::get_uri(ALL_SENSOR), SIZE_STR_SENSOR_ALL) == 0) + if (strncmp(uri, utils::get_uri(ALL_SENSOR), strlen(utils::get_uri(ALL_SENSOR))) == 0) return true; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { @@ -337,7 +335,7 @@ bool sensor_manager::has_privilege(std::string &uri) sensor_info *sensor_manager::get_info(const char *uri) { - if (strncmp(uri, utils::get_uri(ALL_SENSOR), SIZE_STR_SENSOR_ALL) == 0) + if (strncmp(uri, utils::get_uri(ALL_SENSOR), strlen(utils::get_uri(ALL_SENSOR))) == 0) return &m_sensors[0]; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { @@ -369,7 +367,7 @@ std::vector sensor_manager::get_infos(const char *uri) std::vector infos; bool all = false; - if (strncmp(uri, utils::get_uri(ALL_SENSOR), SIZE_STR_SENSOR_ALL) == 0) + if (strncmp(uri, utils::get_uri(ALL_SENSOR), strlen(utils::get_uri(ALL_SENSOR))) == 0) all = true; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index abfd9e1..5d0b1c9 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -59,7 +59,6 @@ bool sensor_provider::init(const char *uri) m_sensor.set_min_range(0); m_sensor.set_max_range(1); m_sensor.set_resolution(1); - m_sensor.set_privilege(PRIV_APPLICATION_SENSOR); return true; } diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index 9c908fd..88c48e4 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -315,9 +315,6 @@ int server_channel_handler::listener_get_data(channel *ch, message &msg) int server_channel_handler::provider_connect(channel *ch, message &msg) { - retvm_if(!has_privileges(ch->get_fd(), PRIV_APPLICATION_SENSOR_WRITE), - -EACCES, "Permission denied"); - sensor_info info; info.clear(); info.deserialize(msg.body(), msg.size()); -- 2.7.4 From 6ac6dc527a62de3ba458b616f18005d6717066d9 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 17:40:00 +0900 Subject: [PATCH 12/16] sensord: move sensor provider testcases to unit_provider.cpp Change-Id: Iec7bfc6daa6f8a0281be485f854a064e7fac9b69 Signed-off-by: kibak.yoon --- src/sensorctl/testcase/unit_client.cpp | 201 ++----------------------------- src/sensorctl/testcase/unit_provider.cpp | 198 ++++++++++++++++++++++++++++-- 2 files changed, 199 insertions(+), 200 deletions(-) diff --git a/src/sensorctl/testcase/unit_client.cpp b/src/sensorctl/testcase/unit_client.cpp index 28900bb..16c5f1d 100644 --- a/src/sensorctl/testcase/unit_client.cpp +++ b/src/sensorctl/testcase/unit_client.cpp @@ -24,13 +24,18 @@ #include #include -#include -#include #include "log.h" #include "mainloop.h" #include "test_bench.h" +static bool called = false; + +static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data) +{ + _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]); +} + TESTCASE(sensor_api_get_default_sensor, get_sensor_p_1) { int err; @@ -75,16 +80,6 @@ TESTCASE(sensor_api_connect, connect_p_1) return true; } -static bool called = false; - -static void basic_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data) -{ - if (test_option::full_log == false) { - while (true) {} - } - _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]); -} - TESTCASE(sensor_api_all, all_p_1) { int err; @@ -105,7 +100,7 @@ TESTCASE(sensor_api_all, all_p_1) handle = sensord_connect(sensor); ASSERT_EQ(err, 0); - ret = sensord_register_event(handle, 1, 100, 100, basic_cb, NULL); + ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL); ASSERT_TRUE(ret); ret = sensord_start(handle, 0); @@ -132,183 +127,3 @@ TESTCASE(sensor_api_all, all_p_1) return true; } - -static bool m_start = false; - -static void start_cb(sensord_provider_h provider, void *user_data) -{ - m_start = true; - _N("START\n"); -} - -static void stop_cb(sensord_provider_h provider, void *user_data) -{ - m_start = false; - _N("STOP\n"); -} - -static void interval_cb(sensord_provider_h provider, unsigned int interval_ms, void *user_data) -{ - _N("Interval : %d\n", interval_ms); -} - -static gboolean publish(gpointer gdata) -{ - if (!m_start) return TRUE; - - sensord_provider_h *provider = reinterpret_cast(gdata); - - sensor_data_t data; - data.accuracy = 3; - data.timestamp = sensor::utils::get_timestamp(); - data.value_count = 3; - data.values[0] = 1; - data.values[1] = 2; - data.values[2] = 3; - - _N("[%llu] %f %f %f\n", data.timestamp, data.values[0], data.values[1], data.values[2]); - sensord_provider_publish(provider, data); - return TRUE; -} - -/* TODO: change it from manual test to auto-test */ -TESTCASE(sensor_api_mysensor_provider, provider_p_1) -{ - const char *uri = "http://example.org/sensor/mysensor/mysensor"; - const char *name = "mysensor"; - const char *vendor = "tizen"; - - int err = 0; - sensor_t sensor; - sensord_provider_h provider; - - err = sensord_create_provider(uri, &provider); - ASSERT_EQ(err, 0); - - err = sensord_provider_set_name(provider, name); - ASSERT_EQ(err, 0); - err = sensord_provider_set_vendor(provider, vendor); - ASSERT_EQ(err, 0); - err = sensord_provider_set_range(provider, 0.0f, 1.0f); - ASSERT_EQ(err, 0); - err = sensord_provider_set_resolution(provider, 0.01f); - ASSERT_EQ(err, 0); - - err = sensord_add_provider(provider); - ASSERT_EQ(err, 0); - - err = sensord_provider_set_start_cb(provider, start_cb, NULL); - ASSERT_EQ(err, 0); - err = sensord_provider_set_stop_cb(provider, stop_cb, NULL); - ASSERT_EQ(err, 0); - err = sensord_provider_set_set_interval_cb(provider, interval_cb, NULL); - ASSERT_EQ(err, 0); - - err = sensord_get_default_sensor_by_uri(uri, &sensor); - ASSERT_EQ(err, 0); - - g_timeout_add_seconds(1, publish, provider); - mainloop::run(); - - err = sensord_remove_provider(provider); - ASSERT_EQ(err, 0); - err = sensord_destroy_provider(provider); - ASSERT_EQ(err, 0); - - return true; -} - -TESTCASE(sensor_api_mysensor_listener, listener_p_1) -{ - const char *uri = "http://example.org/sensor/mysensor/mysensor"; - int err; - bool ret; - int handle; - sensor_t sensor; - - called = false; - - err = sensord_get_default_sensor_by_uri(uri, &sensor); - ASSERT_EQ(err, 0); - - handle = sensord_connect(sensor); - ASSERT_EQ(err, 0); - - ret = sensord_register_event(handle, 1, 100, 100, basic_cb, NULL); - ASSERT_TRUE(ret); - - ret = sensord_start(handle, 0); - ASSERT_TRUE(ret); - - ret = sensord_change_event_interval(handle, 0, 100); - ASSERT_TRUE(ret); - - mainloop::run(); - - ret = sensord_stop(handle); - ASSERT_TRUE(ret); - - ret = sensord_unregister_event(handle, 1); - ASSERT_TRUE(ret); - - ret = sensord_disconnect(handle); - ASSERT_TRUE(ret); - - return true; -} - -static void add_mysensor(void) -{ - const char *uri = "http://example.org/sensor/mysensor/mysensor"; - const char *name = "mysensor"; - const char *vendor = "tizen"; - - sensord_provider_h provider; - - sensord_create_provider(uri, &provider); - sensord_provider_set_name(provider, name); - sensord_provider_set_vendor(provider, vendor); - sensord_provider_set_range(provider, 0.0f, 1.0f); - sensord_provider_set_resolution(provider, 0.01f); - - sensord_add_provider(provider); - - sensord_remove_provider(provider); - sensord_destroy_provider(provider); -} - -static bool added = false; - -static void added_cb(const char *uri, void *user_data) -{ - _I("ADDED[%s]\n", uri); - added = true; -} - -static void removed_cb(const char *uri, void *user_data) -{ - _I("REMOVED[%s]\n", uri); - if (added) - mainloop::stop(); -} - -TESTCASE(sensor_api_mysensor_cb, mysensor_cb_p_1) -{ - int ret; - - ret = sensord_add_sensor_added_cb(added_cb, NULL); - ASSERT_EQ(ret, 0); - ret = sensord_add_sensor_removed_cb(removed_cb, NULL); - ASSERT_EQ(ret, 0); - - add_mysensor(); - - mainloop::run(); - - ret = sensord_remove_sensor_added_cb(added_cb); - ASSERT_EQ(ret, 0); - ret = sensord_remove_sensor_removed_cb(removed_cb); - ASSERT_EQ(ret, 0); - - return true; -} diff --git a/src/sensorctl/testcase/unit_provider.cpp b/src/sensorctl/testcase/unit_provider.cpp index 1914652..89ae9e3 100644 --- a/src/sensorctl/testcase/unit_provider.cpp +++ b/src/sensorctl/testcase/unit_provider.cpp @@ -20,23 +20,105 @@ #include #include #include +#include #include "log.h" #include "mainloop.h" #include "test_bench.h" +#define MYSENSOR_URI "http://example.org/sensor/general/mysensor/mysensor" +#define MYSENSOR_NAME "mysensor" +#define MYSENSOR_VENDOR "tizen" + +static bool started = false; +static bool added = false; +static bool called = false; + +static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data) +{ + if (test_option::full_log == false) { + while (true) {} + } + _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]); +} + +static void start_cb(sensord_provider_h provider, void *user_data) +{ + started = true; + _N("START\n"); +} + +static void stop_cb(sensord_provider_h provider, void *user_data) +{ + started = false; + _N("STOP\n"); +} + +static void interval_cb(sensord_provider_h provider, unsigned int interval_ms, void *user_data) +{ + _N("Interval : %d\n", interval_ms); +} + +static gboolean publish(gpointer gdata) +{ + if (!started) return TRUE; + + sensord_provider_h *provider = reinterpret_cast(gdata); + + sensor_data_t data; + data.accuracy = 3; + data.timestamp = sensor::utils::get_timestamp(); + data.value_count = 3; + data.values[0] = 1; + data.values[1] = 2; + data.values[2] = 3; + + _N("[%llu] %f %f %f\n", data.timestamp, data.values[0], data.values[1], data.values[2]); + sensord_provider_publish(provider, data); + return TRUE; +} + +static void add_mysensor(void) +{ + sensord_provider_h provider; + + sensord_create_provider(MYSENSOR_URI, &provider); + sensord_provider_set_name(provider, MYSENSOR_NAME); + sensord_provider_set_vendor(provider, MYSENSOR_VENDOR); + sensord_provider_set_range(provider, 0.0f, 1.0f); + sensord_provider_set_resolution(provider, 0.01f); + + sensord_add_provider(provider); + + sensord_remove_provider(provider); + sensord_destroy_provider(provider); +} + +static void added_cb(const char *uri, void *user_data) +{ + _I("[ ADDED ] %s\n", uri); + added = true; +} + +static void removed_cb(const char *uri, void *user_data) +{ + _I("[ REMOVED ] %s\n", uri); + if (added) + mainloop::stop(); +} + TESTCASE(sensor_api_provider_uri, provider_check_uri) { int err; sensord_provider_h provider; - const char *uri_p1 = "http://example.org/sensor/mysensor_type/mysensor"; - const char *uri_p2 = "http://developer.samsung.com/sensor/mysensor_type/mysensor"; - const char *uri_n1 = "http://tizen.org/sensor/accelerometer/mysensor"; - const char *uri_n2 = "http://tizen.org/mysensor/accelerometer/mysensor"; - const char *uri_n3 = "http:/example.org/sensor/mysensor_type/mysensor"; - const char *uri_n5 = "http://example.org/sensor/mysensor_type"; - const char *uri_n4 = "http://example.org/sensor/mysensor_type/mysensor/mysensor"; + const char *uri_p1 = "http://example.org/sensor/general/mysensor_type/mysensor"; + const char *uri_p2 = "http://developer.samsung.com/sensor/general/mysensor_type/mysensor"; + const char *uri_n1 = "http://tizen.org/sensor/general/accelerometer/mysensor"; + const char *uri_n2 = "http://tizen.org/mysensor/general/accelerometer/mysensor"; + const char *uri_n3 = "http:/example.org/sensor/general/mysensor_type/mysensor"; + const char *uri_n5 = "http://example.org/sensor/general/mysensor_type"; + const char *uri_n4 = "http://example.org/sensor/general/mysensor_type/mysensor/mysensor"; err = sensord_create_provider(uri_p1, &provider); EXPECT_EQ(err, 0); @@ -55,3 +137,105 @@ TESTCASE(sensor_api_provider_uri, provider_check_uri) return true; } + +/* TODO: change it from manual test to auto-test */ +TESTCASE(sensor_api_provider_mysensor, provider_p_1) +{ + int err = 0; + sensor_t sensor; + sensord_provider_h provider; + + err = sensord_create_provider(MYSENSOR_URI, &provider); + ASSERT_EQ(err, 0); + + err = sensord_provider_set_name(provider, MYSENSOR_NAME); + ASSERT_EQ(err, 0); + err = sensord_provider_set_vendor(provider, MYSENSOR_VENDOR); + ASSERT_EQ(err, 0); + err = sensord_provider_set_range(provider, 0.0f, 1.0f); + ASSERT_EQ(err, 0); + err = sensord_provider_set_resolution(provider, 0.01f); + ASSERT_EQ(err, 0); + + err = sensord_add_provider(provider); + ASSERT_EQ(err, 0); + + err = sensord_provider_set_start_cb(provider, start_cb, NULL); + ASSERT_EQ(err, 0); + err = sensord_provider_set_stop_cb(provider, stop_cb, NULL); + ASSERT_EQ(err, 0); + err = sensord_provider_set_set_interval_cb(provider, interval_cb, NULL); + ASSERT_EQ(err, 0); + + err = sensord_get_default_sensor_by_uri(MYSENSOR_URI, &sensor); + ASSERT_EQ(err, 0); + + g_timeout_add_seconds(1, publish, provider); + mainloop::run(); + + err = sensord_remove_provider(provider); + ASSERT_EQ(err, 0); + err = sensord_destroy_provider(provider); + ASSERT_EQ(err, 0); + + return true; +} + +TESTCASE(sensor_api_listener_mysensor, listener_p_1) +{ + int err; + bool ret; + int handle; + sensor_t sensor; + + called = false; + + err = sensord_get_default_sensor_by_uri(MYSENSOR_URI, &sensor); + ASSERT_EQ(err, 0); + + handle = sensord_connect(sensor); + ASSERT_EQ(err, 0); + + ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL); + ASSERT_TRUE(ret); + + ret = sensord_start(handle, 0); + ASSERT_TRUE(ret); + + ret = sensord_change_event_interval(handle, 0, 100); + ASSERT_TRUE(ret); + + mainloop::run(); + + ret = sensord_stop(handle); + ASSERT_TRUE(ret); + + ret = sensord_unregister_event(handle, 1); + ASSERT_TRUE(ret); + + ret = sensord_disconnect(handle); + ASSERT_TRUE(ret); + + return true; +} + +TESTCASE(sensor_api_provider_cb, mysensor_cb_p_1) +{ + int ret; + + ret = sensord_add_sensor_added_cb(added_cb, NULL); + ASSERT_EQ(ret, 0); + ret = sensord_add_sensor_removed_cb(removed_cb, NULL); + ASSERT_EQ(ret, 0); + + add_mysensor(); + + mainloop::run(); + + ret = sensord_remove_sensor_added_cb(added_cb); + ASSERT_EQ(ret, 0); + ret = sensord_remove_sensor_removed_cb(removed_cb); + ASSERT_EQ(ret, 0); + + return true; +} -- 2.7.4 From 6eead8b5b595ff6f33685fd713691c2499eed1dc Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 17:43:43 +0900 Subject: [PATCH 13/16] sensord: move common part to base sensor handler - all of sensor handlers has sensor information as common part. Change-Id: I45d14a742e246725cbd97070e80dd568678f6755 Signed-off-by: kibak.yoon --- src/server/application_sensor_handler.cpp | 2 +- src/server/application_sensor_handler.h | 1 - src/server/external_sensor_handler.cpp | 2 +- src/server/external_sensor_handler.h | 1 - src/server/fusion_sensor_handler.cpp | 2 +- src/server/fusion_sensor_handler.h | 1 - src/server/physical_sensor_handler.cpp | 17 +---------------- src/server/physical_sensor_handler.h | 1 - src/server/sensor_handler.cpp | 8 +++++++- src/server/sensor_handler.h | 4 ++++ 10 files changed, 15 insertions(+), 24 deletions(-) diff --git a/src/server/application_sensor_handler.cpp b/src/server/application_sensor_handler.cpp index a6bd0bd..4e4b96b 100644 --- a/src/server/application_sensor_handler.cpp +++ b/src/server/application_sensor_handler.cpp @@ -27,7 +27,7 @@ using namespace sensor; application_sensor_handler::application_sensor_handler(const sensor_info &info, ipc::channel *ch) -: m_info(info) +: sensor_handler(info) , m_ch(ch) , m_started(false) , m_prev_interval(0) diff --git a/src/server/application_sensor_handler.h b/src/server/application_sensor_handler.h index 2d2801e..8560451 100644 --- a/src/server/application_sensor_handler.h +++ b/src/server/application_sensor_handler.h @@ -52,7 +52,6 @@ public: int get_data(sensor_data_t **data, int *len); private: - sensor_info m_info; ipc::channel *m_ch; std::atomic m_started; int32_t m_prev_interval; diff --git a/src/server/external_sensor_handler.cpp b/src/server/external_sensor_handler.cpp index 15b8bae..53381b9 100644 --- a/src/server/external_sensor_handler.cpp +++ b/src/server/external_sensor_handler.cpp @@ -58,7 +58,7 @@ int external_sensor_notifier::notify(void) external_sensor_handler::external_sensor_handler(const sensor_info &info, external_sensor *sensor) -: m_info(info) +: sensor_handler(info) , m_notifier(NULL) , m_policy(OP_DEFAULT) { diff --git a/src/server/external_sensor_handler.h b/src/server/external_sensor_handler.h index 6fe386a..753a80d 100644 --- a/src/server/external_sensor_handler.h +++ b/src/server/external_sensor_handler.h @@ -55,7 +55,6 @@ private: int get_min_interval(void); int get_min_batch_latency(void); - sensor_info m_info; external_sensor *m_sensor; sensor_notifier *m_notifier; int m_policy; diff --git a/src/server/fusion_sensor_handler.cpp b/src/server/fusion_sensor_handler.cpp index 18ecd71..3215051 100644 --- a/src/server/fusion_sensor_handler.cpp +++ b/src/server/fusion_sensor_handler.cpp @@ -27,7 +27,7 @@ using namespace sensor; fusion_sensor_handler::fusion_sensor_handler(const sensor_info &info, fusion_sensor *sensor) -: m_info(info) +: sensor_handler(info) , m_sensor(sensor) { } diff --git a/src/server/fusion_sensor_handler.h b/src/server/fusion_sensor_handler.h index 0bd1fa6..9feb67f 100644 --- a/src/server/fusion_sensor_handler.h +++ b/src/server/fusion_sensor_handler.h @@ -76,7 +76,6 @@ private: int get_min_interval(void); int get_min_batch_latency(void); - sensor_info m_info; fusion_sensor *m_sensor; std::unordered_map m_required_sensors; diff --git a/src/server/physical_sensor_handler.cpp b/src/server/physical_sensor_handler.cpp index 85a5515..bdc53b3 100644 --- a/src/server/physical_sensor_handler.cpp +++ b/src/server/physical_sensor_handler.cpp @@ -29,27 +29,12 @@ using namespace sensor; physical_sensor_handler::physical_sensor_handler(const sensor_info &info, sensor_device *device, int hal_id, physical_sensor *sensor) -: m_info(info) +: sensor_handler(info) , m_device(device) , m_sensor(sensor) , m_hal_id(hal_id) , m_prev_interval(0) { - /* TODO: temporary walkaround */ - switch (m_info.get_type()) { - case HRM_SENSOR: - case HRM_LED_GREEN_SENSOR: - case HRM_LED_IR_SENSOR: - case HRM_LED_RED_SENSOR: - case HUMAN_PEDOMETER_SENSOR: - case HUMAN_SLEEP_MONITOR_SENSOR: - case HUMAN_SLEEP_DETECTOR_SENSOR: - case HUMAN_STRESS_MONITOR_SENSOR: - m_info.set_privilege("http://tizen.org/privilege/healthinfo"); - break; - default: - break; - }; } physical_sensor_handler::~physical_sensor_handler() diff --git a/src/server/physical_sensor_handler.h b/src/server/physical_sensor_handler.h index edb29dd..31ab410 100644 --- a/src/server/physical_sensor_handler.h +++ b/src/server/physical_sensor_handler.h @@ -59,7 +59,6 @@ private: int get_min_interval(void); int get_min_batch_latency(void); - sensor_info m_info; sensor_device *m_device; physical_sensor *m_sensor; uint32_t m_hal_id; diff --git a/src/server/sensor_handler.cpp b/src/server/sensor_handler.cpp index e567c22..95701cc 100644 --- a/src/server/sensor_handler.cpp +++ b/src/server/sensor_handler.cpp @@ -17,12 +17,18 @@ * */ +#include "sensor_handler.h" + #include #include -#include "sensor_handler.h" using namespace sensor; +sensor_handler::sensor_handler(const sensor_info &info) +: m_info(info) +{ +} + bool sensor_handler::has_observer(sensor_observer *ob) { for (auto it = m_observers.begin(); it != m_observers.end(); ++it) { diff --git a/src/server/sensor_handler.h b/src/server/sensor_handler.h index a5e6fd5..37774e9 100644 --- a/src/server/sensor_handler.h +++ b/src/server/sensor_handler.h @@ -30,6 +30,7 @@ namespace sensor { class sensor_handler : public sensor_publisher { public: + sensor_handler(const sensor_info &info); virtual ~sensor_handler() {} /* publisher */ @@ -51,6 +52,9 @@ public: virtual int flush(sensor_observer *ob) = 0; virtual int get_data(sensor_data_t **data, int *len) = 0; +protected: + sensor_info m_info; + private: std::list m_observers; }; -- 2.7.4 From 4279e3e2ae97d7730e4f865d6ec27355571a91e6 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 17:55:21 +0900 Subject: [PATCH 14/16] sensord: add privilege part to URI format - http:///sensor/// Change-Id: I10601f8f95fdb693dd02d047e2228c59e81e5dcd Signed-off-by: kibak.yoon --- src/client/sensor_provider.cpp | 4 + src/sensor/auto_rotation/auto_rotation_sensor.cpp | 4 +- src/sensor/gravity/gravity_comp_sensor.cpp | 6 +- src/sensor/gravity/gravity_lowpass_sensor.cpp | 4 +- src/sensor/linear_accel/linear_accel_sensor.cpp | 6 +- src/sensor/orientation/orientation_sensor.cpp | 4 +- src/sensor/rotation_vector/gyro_rv_sensor.cpp | 6 +- src/sensor/rotation_vector/magnetic_rv_sensor.cpp | 6 +- src/sensor/rotation_vector/rv_sensor.cpp | 8 +- src/server/sensor_handler.cpp | 3 + src/shared/sensor_types_private.h | 9 +- src/shared/sensor_utils.cpp | 193 ++++++++++++---------- src/shared/sensor_utils.h | 1 + 13 files changed, 147 insertions(+), 107 deletions(-) diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index 5d0b1c9..94036e0 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -59,6 +60,9 @@ bool sensor_provider::init(const char *uri) m_sensor.set_min_range(0); m_sensor.set_max_range(1); m_sensor.set_resolution(1); + /* TODO: temporary walkaround */ + const char *priv = sensor::utils::get_privilege(uri); + m_sensor.set_privilege(priv); return true; } diff --git a/src/sensor/auto_rotation/auto_rotation_sensor.cpp b/src/sensor/auto_rotation/auto_rotation_sensor.cpp index 33f1fda..e02cad3 100644 --- a/src/sensor/auto_rotation/auto_rotation_sensor.cpp +++ b/src/sensor/auto_rotation/auto_rotation_sensor.cpp @@ -24,11 +24,11 @@ #include "auto_rotation_alg_emul.h" -#define NAME_SENSOR "http://tizen.org/sensor/auto_rotation/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/general/auto_rotation/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 -#define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" +#define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer" static sensor_info2_t sensor_info = { id: 0x1, diff --git a/src/sensor/gravity/gravity_comp_sensor.cpp b/src/sensor/gravity/gravity_comp_sensor.cpp index 9552e74..36b2171 100644 --- a/src/sensor/gravity/gravity_comp_sensor.cpp +++ b/src/sensor/gravity/gravity_comp_sensor.cpp @@ -24,14 +24,14 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/gravity/tizen_complementary" +#define NAME_SENSOR "http://tizen.org/sensor/general/gravity/tizen_complementary" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 -#define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" +#define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer" #define SRC_ID_GYRO 0x2 -#define SRC_STR_GYRO "http://tizen.org/sensor/gyroscope" +#define SRC_STR_GYRO "http://tizen.org/sensor/general/gyroscope" #define GRAVITY 9.80665 diff --git a/src/sensor/gravity/gravity_lowpass_sensor.cpp b/src/sensor/gravity/gravity_lowpass_sensor.cpp index bc31ce2..5401934 100644 --- a/src/sensor/gravity/gravity_lowpass_sensor.cpp +++ b/src/sensor/gravity/gravity_lowpass_sensor.cpp @@ -24,11 +24,11 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/gravity/tizen_lowpass" +#define NAME_SENSOR "http://tizen.org/sensor/general/gravity/tizen_lowpass" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 -#define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" +#define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer" #define GRAVITY 9.80665 #define US_PER_SEC 1000000 diff --git a/src/sensor/linear_accel/linear_accel_sensor.cpp b/src/sensor/linear_accel/linear_accel_sensor.cpp index 00e0bb7..2dac280 100644 --- a/src/sensor/linear_accel/linear_accel_sensor.cpp +++ b/src/sensor/linear_accel/linear_accel_sensor.cpp @@ -23,14 +23,14 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/linear_acceleration/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/general/linear_acceleration/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 -#define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" +#define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer" #define SRC_ID_GRAVITY 0x2 -#define SRC_STR_GRAVITY "http://tizen.org/sensor/gravity" +#define SRC_STR_GRAVITY "http://tizen.org/sensor/general/gravity" #define GRAVITY 9.80665 diff --git a/src/sensor/orientation/orientation_sensor.cpp b/src/sensor/orientation/orientation_sensor.cpp index 551c73f..acdf12b 100644 --- a/src/sensor/orientation/orientation_sensor.cpp +++ b/src/sensor/orientation/orientation_sensor.cpp @@ -23,11 +23,11 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/orientation/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/general/orientation/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_RV 0x1 -#define SRC_STR_RV "http://tizen.org/sensor/rotation_vector" +#define SRC_STR_RV "http://tizen.org/sensor/general/rotation_vector" static sensor_info2_t sensor_info = { id: 0x1, diff --git a/src/sensor/rotation_vector/gyro_rv_sensor.cpp b/src/sensor/rotation_vector/gyro_rv_sensor.cpp index 74e0e27..478e2ee 100644 --- a/src/sensor/rotation_vector/gyro_rv_sensor.cpp +++ b/src/sensor/rotation_vector/gyro_rv_sensor.cpp @@ -23,14 +23,14 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/gyroscope_rotation_vector/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/general/gyroscope_rotation_vector/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 -#define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" +#define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer" #define SRC_ID_GYRO 0x2 -#define SRC_STR_GYRO "http://tizen.org/sensor/gyroscope" +#define SRC_STR_GYRO "http://tizen.org/sensor/general/gyroscope" static sensor_info2_t sensor_info = { id: 0x1, diff --git a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp index 2e4b255..ef438ad 100644 --- a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp +++ b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp @@ -23,14 +23,14 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/geomagnetic_rotation_vector/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/general/geomagnetic_rotation_vector/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 -#define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" +#define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer" #define SRC_ID_MAG 0x3 -#define SRC_STR_MAG "http://tizen.org/sensor/magnetic" +#define SRC_STR_MAG "http://tizen.org/sensor/general/magnetic" static sensor_info2_t sensor_info = { id: 0x1, diff --git a/src/sensor/rotation_vector/rv_sensor.cpp b/src/sensor/rotation_vector/rv_sensor.cpp index e88a004..cb37f42 100644 --- a/src/sensor/rotation_vector/rv_sensor.cpp +++ b/src/sensor/rotation_vector/rv_sensor.cpp @@ -23,17 +23,17 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/rotation_vector/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/general/rotation_vector/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 -#define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" +#define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer" #define SRC_ID_GYRO 0x2 -#define SRC_STR_GYRO "http://tizen.org/sensor/gyroscope" +#define SRC_STR_GYRO "http://tizen.org/sensor/general/gyroscope" #define SRC_ID_MAG 0x3 -#define SRC_STR_MAG "http://tizen.org/sensor/magnetic" +#define SRC_STR_MAG "http://tizen.org/sensor/general/magnetic" static sensor_info2_t sensor_info = { id: 0x1, diff --git a/src/server/sensor_handler.cpp b/src/server/sensor_handler.cpp index 95701cc..4f16244 100644 --- a/src/server/sensor_handler.cpp +++ b/src/server/sensor_handler.cpp @@ -21,12 +21,15 @@ #include #include +#include using namespace sensor; sensor_handler::sensor_handler(const sensor_info &info) : m_info(info) { + const char *priv = sensor::utils::get_privilege(m_info.get_uri()); + m_info.set_privilege(priv); } bool sensor_handler::has_observer(sensor_observer *ob) diff --git a/src/shared/sensor_types_private.h b/src/shared/sensor_types_private.h index 17fcd02..b1c49f3 100644 --- a/src/shared/sensor_types_private.h +++ b/src/shared/sensor_types_private.h @@ -20,9 +20,16 @@ #ifndef __SENSOR_TYPES_PRIVATE__ #define __SENSOR_TYPES_PRIVATE__ -#define URI_REGEX(CATEGORY) R"~(^http:\/\/[\w-]+(\.[\w-]+)*\/)~" CATEGORY R"~(\/[\w-]+(\.[\w-]+)*(\/[\w-]+(\.[\w-]+)*)$)~" +#define URI_REGEX(CATEGORY) R"~(^http:\/\/[\w-]+(\.[\w-]+)*\/)~" CATEGORY R"~(\/(general|healthinfo)\/[\w-]+(\.[\w-]+)*(\/[\w-]+(\.[\w-]+)*)$)~" #define SENSOR_URI_REGEX URI_REGEX("sensor") #define PREDEFINED_TYPE_URI "http://tizen.org/sensor/" +#define URI_DELIMITER "/" +#define PRIVILEGE_HEALTHINFO_STR "healthinfo" +#define PRIVILEGE_HEALTHINFO_URI "http://tizen.org/privilege/healthinfo" + +#define URI_PRIV_INDEX 4 +#define URI_SENSOR_TYPE_INDEX 5 + #endif /* __SENSOR_TYPES_PRIVATE__ */ diff --git a/src/shared/sensor_utils.cpp b/src/shared/sensor_utils.cpp index 8313c4d..1f09e4b 100644 --- a/src/shared/sensor_utils.cpp +++ b/src/shared/sensor_utils.cpp @@ -28,7 +28,9 @@ #include #include +#include #include +#include #ifndef PATH_MAX #define PATH_MAX 256 @@ -36,90 +38,90 @@ /* TODO: move and define string type to sensor_type.h */ static std::map types = { - {UNKNOWN_SENSOR, "http://tizen.org/sensor/unknown"}, - {ALL_SENSOR, "http://tizen.org/sensor/all"}, - {ACCELEROMETER_SENSOR, "http://tizen.org/sensor/accelerometer"}, - {GRAVITY_SENSOR, "http://tizen.org/sensor/gravity"}, - {LINEAR_ACCEL_SENSOR, "http://tizen.org/sensor/linear_acceleration"}, - {GEOMAGNETIC_SENSOR, "http://tizen.org/sensor/magnetic"}, - {ROTATION_VECTOR_SENSOR, "http://tizen.org/sensor/rotation_vector"}, - {ORIENTATION_SENSOR, "http://tizen.org/sensor/orientation"}, - {GYROSCOPE_SENSOR, "http://tizen.org/sensor/gyroscope"}, - {LIGHT_SENSOR, "http://tizen.org/sensor/light"}, - {PROXIMITY_SENSOR, "http://tizen.org/sensor/proximity"}, - {PRESSURE_SENSOR, "http://tizen.org/sensor/pressure"}, - {ULTRAVIOLET_SENSOR, "http://tizen.org/sensor/ultraviolet"}, - {TEMPERATURE_SENSOR, "http://tizen.org/sensor/temperature"}, - {HUMIDITY_SENSOR, "http://tizen.org/sensor/humidity"}, - {HRM_SENSOR, "http://tizen.org/sensor/heart_rate_monitor"}, - {HRM_LED_GREEN_SENSOR, "http://tizen.org/sensor/heart_rate_monitor.led_green"}, - {HRM_LED_IR_SENSOR, "http://tizen.org/sensor/heart_rate_monitor.led_ir"}, - {HRM_LED_RED_SENSOR, "http://tizen.org/sensor/heart_rate_monitor.led_red"}, - {GYROSCOPE_UNCAL_SENSOR, "http://tizen.org/sensor/gyroscope.uncalibrated"}, - {GEOMAGNETIC_UNCAL_SENSOR, "http://tizen.org/sensor/geomagnetic.uncalibrated"}, - {GYROSCOPE_RV_SENSOR, "http://tizen.org/sensor/gyroscope_rotation_vector"}, - {GEOMAGNETIC_RV_SENSOR, "http://tizen.org/sensor/geomagnetic_rotation_vector"}, - - {HUMAN_PEDOMETER_SENSOR, "http://tizen.org/sensor/human_pedometer"}, - {HUMAN_SLEEP_MONITOR_SENSOR, "http://tizen.org/sensor/human_sleep_monitor"}, - {HUMAN_SLEEP_DETECTOR_SENSOR, "http://tizen.org/sensor/human_sleep_detector"}, - {HUMAN_STRESS_MONITOR_SENSOR, "http://tizen.org/sensor/human_stress_monitor"}, - - {EXERCISE_WALKING_SENSOR, "http://tizen.org/sensor/exercise.walking"}, - {EXERCISE_RUNNING_SENSOR, "http://tizen.org/sensor/exercise.running"}, - {EXERCISE_HIKING_SENSOR, "http://tizen.org/sensor/exercise.hiking"}, - {EXERCISE_CYCLING_SENSOR, "http://tizen.org/sensor/exercise.cycling"}, - {EXERCISE_ELLIPTICAL_SENSOR, "http://tizen.org/sensor/exercise.elliptical"}, - {EXERCISE_INDOOR_CYCLING_SENSOR, "http://tizen.org/sensor/exercise.indoor_cycling"}, - {EXERCISE_ROWING_SENSOR, "http://tizen.org/sensor/exercise.rowing"}, - {EXERCISE_STEPPER_SENSOR, "http://tizen.org/sensor/exercise.stepper"}, - - {EXTERNAL_EXERCISE_SENSOR, "http://tizen.org/sensor/external_exercise"}, - - {FUSION_SENSOR, "http://tizen.org/sensor/fusion"}, - {AUTO_ROTATION_SENSOR, "http://tizen.org/sensor/auto_rotation"}, - {AUTO_BRIGHTNESS_SENSOR, "http://tizen.org/sensor/auto_brightness"}, - - {GESTURE_MOVEMENT_SENSOR, "http://tizen.org/sensor/gesture_movement"}, - {GESTURE_WRIST_UP_SENSOR, "http://tizen.org/sensor/gesture_wrist_up"}, - {GESTURE_WRIST_DOWN_SENSOR, "http://tizen.org/sensor/gesture_wrist_down"}, - {GESTURE_MOVEMENT_STATE_SENSOR, "http://tizen.org/sensor/gesture_movement_state"}, - {GESTURE_FACE_DOWN_SENSOR, "http://tizen.org/sensor/gesture_face_down"}, - - {ACTIVITY_TRACKER_SENSOR, "http://tizen.org/sensor/activity_tracker"}, - {ACTIVITY_LEVEL_MONITOR_SENSOR, "http://tizen.org/sensor/activity_level_monitor"}, - {GPS_BATCH_SENSOR, "http://tizen.org/sensor/gps_batch"}, - - {HRM_CTRL_SENSOR, "http://tizen.org/sensor/hrm_ctrl"}, - - {WEAR_STATUS_SENSOR, "http://tizen.org/sensor/wear_status"}, - {WEAR_ON_MONITOR_SENSOR, "http://tizen.org/sensor/wear_on_monitor"}, - {NO_MOVE_DETECTOR_SENSOR, "http://tizen.org/sensor/no_move_detector"}, - {RESTING_HR_SENSOR, "http://tizen.org/sensor/resting_hr"}, - {STEP_LEVEL_MONITOR_SENSOR, "http://tizen.org/sensor/step_level_monitor"}, - {EXERCISE_STANDALONE_SENSOR, "http://tizen.org/sensor/exercise_standalone"}, - {EXERCISE_HR_SENSOR, "http://tizen.org/sensor/exercise_hr"}, - {WORKOUT_SENSOR, "http://tizen.org/sensor/workout"}, - {CYCLE_MONITOR_SENSOR, "http://tizen.org/sensor/cycle_monitor"}, - {STAIR_TRACKER_SENSOR, "http://tizen.org/sensor/stair_tracker"}, - {PRESSURE_INDICATOR_SENSOR, "http://tizen.org/sensor/pressure_indicator"}, - {PRESSURE_ALERT_SENSOR, "http://tizen.org/sensor/pressure_alert"}, - {HR_CALORIE_SENSOR, "http://tizen.org/sensor/hr_calorie"}, - - {CONTEXT_SENSOR, "http://tizen.org/sensor/context"}, - {MOTION_SENSOR, "http://tizen.org/sensor/motion"}, - {PIR_SENSOR, "http://tizen.org/sensor/pir"}, - {PIR_LONG_SENSOR, "http://tizen.org/sensor/pir_long"}, - {DUST_SENSOR, "http://tizen.org/sensor/dust"}, - {THERMOMETER_SENSOR, "http://tizen.org/sensor/thermometer"}, - {PEDOMETER_SENSOR, "http://tizen.org/sensor/pedometer"}, - {FLAT_SENSOR, "http://tizen.org/sensor/flat"}, - {HRM_RAW_SENSOR, "http://tizen.org/sensor/hrm_raw"}, - {TILT_SENSOR, "http://tizen.org/sensor/tilt"}, - {RV_RAW_SENSOR, "http://tizen.org/sensor/rv_raw"}, - {GSR_SENSOR, "http://tizen.org/sensor/gsr"}, - {SIMSENSE_SENSOR, "http://tizen.org/sensor/simsense"}, - {PPG_SENSOR, "http://tizen.org/sensor/ppg"}, + {UNKNOWN_SENSOR, "http://tizen.org/sensor/general/unknown"}, + {ALL_SENSOR, "http://tizen.org/sensor/general/all"}, + {ACCELEROMETER_SENSOR, "http://tizen.org/sensor/general/accelerometer"}, + {GRAVITY_SENSOR, "http://tizen.org/sensor/general/gravity"}, + {LINEAR_ACCEL_SENSOR, "http://tizen.org/sensor/general/linear_acceleration"}, + {GEOMAGNETIC_SENSOR, "http://tizen.org/sensor/general/magnetic"}, + {ROTATION_VECTOR_SENSOR, "http://tizen.org/sensor/general/rotation_vector"}, + {ORIENTATION_SENSOR, "http://tizen.org/sensor/general/orientation"}, + {GYROSCOPE_SENSOR, "http://tizen.org/sensor/general/gyroscope"}, + {LIGHT_SENSOR, "http://tizen.org/sensor/general/light"}, + {PROXIMITY_SENSOR, "http://tizen.org/sensor/general/proximity"}, + {PRESSURE_SENSOR, "http://tizen.org/sensor/general/pressure"}, + {ULTRAVIOLET_SENSOR, "http://tizen.org/sensor/general/ultraviolet"}, + {TEMPERATURE_SENSOR, "http://tizen.org/sensor/general/temperature"}, + {HUMIDITY_SENSOR, "http://tizen.org/sensor/general/humidity"}, + {HRM_SENSOR, "http://tizen.org/sensor/healthinfo/heart_rate_monitor"}, + {HRM_LED_GREEN_SENSOR, "http://tizen.org/sensor/healthinfo/heart_rate_monitor.led_green"}, + {HRM_LED_IR_SENSOR, "http://tizen.org/sensor/healthinfo/heart_rate_monitor.led_ir"}, + {HRM_LED_RED_SENSOR, "http://tizen.org/sensor/healthinfo/heart_rate_monitor.led_red"}, + {GYROSCOPE_UNCAL_SENSOR, "http://tizen.org/sensor/general/gyroscope.uncalibrated"}, + {GEOMAGNETIC_UNCAL_SENSOR, "http://tizen.org/sensor/general/geomagnetic.uncalibrated"}, + {GYROSCOPE_RV_SENSOR, "http://tizen.org/sensor/general/gyroscope_rotation_vector"}, + {GEOMAGNETIC_RV_SENSOR, "http://tizen.org/sensor/general/geomagnetic_rotation_vector"}, + + {HUMAN_PEDOMETER_SENSOR, "http://tizen.org/sensor/healthinfo/human_pedometer"}, + {HUMAN_SLEEP_MONITOR_SENSOR, "http://tizen.org/sensor/healthinfo/human_sleep_monitor"}, + {HUMAN_SLEEP_DETECTOR_SENSOR, "http://tizen.org/sensor/healthinfo/human_sleep_detector"}, + {HUMAN_STRESS_MONITOR_SENSOR, "http://tizen.org/sensor/healthinfo/human_stress_monitor"}, + + {EXERCISE_WALKING_SENSOR, "http://tizen.org/sensor/general/exercise.walking"}, + {EXERCISE_RUNNING_SENSOR, "http://tizen.org/sensor/general/exercise.running"}, + {EXERCISE_HIKING_SENSOR, "http://tizen.org/sensor/general/exercise.hiking"}, + {EXERCISE_CYCLING_SENSOR, "http://tizen.org/sensor/general/exercise.cycling"}, + {EXERCISE_ELLIPTICAL_SENSOR, "http://tizen.org/sensor/general/exercise.elliptical"}, + {EXERCISE_INDOOR_CYCLING_SENSOR, "http://tizen.org/sensor/general/exercise.indoor_cycling"}, + {EXERCISE_ROWING_SENSOR, "http://tizen.org/sensor/general/exercise.rowing"}, + {EXERCISE_STEPPER_SENSOR, "http://tizen.org/sensor/general/exercise.stepper"}, + + {EXTERNAL_EXERCISE_SENSOR, "http://tizen.org/sensor/general/external_exercise"}, + + {FUSION_SENSOR, "http://tizen.org/sensor/general/fusion"}, + {AUTO_ROTATION_SENSOR, "http://tizen.org/sensor/general/auto_rotation"}, + {AUTO_BRIGHTNESS_SENSOR, "http://tizen.org/sensor/general/auto_brightness"}, + + {GESTURE_MOVEMENT_SENSOR, "http://tizen.org/sensor/general/gesture_movement"}, + {GESTURE_WRIST_UP_SENSOR, "http://tizen.org/sensor/general/gesture_wrist_up"}, + {GESTURE_WRIST_DOWN_SENSOR, "http://tizen.org/sensor/general/gesture_wrist_down"}, + {GESTURE_MOVEMENT_STATE_SENSOR, "http://tizen.org/sensor/general/gesture_movement_state"}, + {GESTURE_FACE_DOWN_SENSOR, "http://tizen.org/sensor/general/gesture_face_down"}, + + {ACTIVITY_TRACKER_SENSOR, "http://tizen.org/sensor/general/activity_tracker"}, + {ACTIVITY_LEVEL_MONITOR_SENSOR, "http://tizen.org/sensor/general/activity_level_monitor"}, + {GPS_BATCH_SENSOR, "http://tizen.org/sensor/general/gps_batch"}, + + {HRM_CTRL_SENSOR, "http://tizen.org/sensor/general/hrm_ctrl"}, + + {WEAR_STATUS_SENSOR, "http://tizen.org/sensor/general/wear_status"}, + {WEAR_ON_MONITOR_SENSOR, "http://tizen.org/sensor/general/wear_on_monitor"}, + {NO_MOVE_DETECTOR_SENSOR, "http://tizen.org/sensor/general/no_move_detector"}, + {RESTING_HR_SENSOR, "http://tizen.org/sensor/general/resting_hr"}, + {STEP_LEVEL_MONITOR_SENSOR, "http://tizen.org/sensor/general/step_level_monitor"}, + {EXERCISE_STANDALONE_SENSOR, "http://tizen.org/sensor/general/exercise_standalone"}, + {EXERCISE_HR_SENSOR, "http://tizen.org/sensor/healthinfo/general/exercise_hr"}, + {WORKOUT_SENSOR, "http://tizen.org/sensor/general/workout"}, + {CYCLE_MONITOR_SENSOR, "http://tizen.org/sensor/general/cycle_monitor"}, + {STAIR_TRACKER_SENSOR, "http://tizen.org/sensor/general/stair_tracker"}, + {PRESSURE_INDICATOR_SENSOR, "http://tizen.org/sensor/general/pressure_indicator"}, + {PRESSURE_ALERT_SENSOR, "http://tizen.org/sensor/general/pressure_alert"}, + {HR_CALORIE_SENSOR, "http://tizen.org/sensor/general/hr_calorie"}, + + {CONTEXT_SENSOR, "http://tizen.org/sensor/general/context"}, + {MOTION_SENSOR, "http://tizen.org/sensor/general/motion"}, + {PIR_SENSOR, "http://tizen.org/sensor/general/pir"}, + {PIR_LONG_SENSOR, "http://tizen.org/sensor/general/pir_long"}, + {DUST_SENSOR, "http://tizen.org/sensor/general/dust"}, + {THERMOMETER_SENSOR, "http://tizen.org/sensor/general/thermometer"}, + {PEDOMETER_SENSOR, "http://tizen.org/sensor/healthinfo/general/pedometer"}, + {FLAT_SENSOR, "http://tizen.org/sensor/general/flat"}, + {HRM_RAW_SENSOR, "http://tizen.org/sensor/healthinfo/general/hrm_raw"}, + {TILT_SENSOR, "http://tizen.org/sensor/general/tilt"}, + {RV_RAW_SENSOR, "http://tizen.org/sensor/general/rv_raw"}, + {GSR_SENSOR, "http://tizen.org/sensor/healthinfo/general/gsr"}, + {SIMSENSE_SENSOR, "http://tizen.org/sensor/general/simsense"}, + {PPG_SENSOR, "http://tizen.org/sensor/healthinfo/general/ppg"}, }; const char *sensor::utils::get_uri(sensor_type_t type) @@ -130,6 +132,29 @@ const char *sensor::utils::get_uri(sensor_type_t type) return it->second; } +const char *sensor::utils::get_privilege(std::string uri) +{ + std::size_t start = 0; + std::size_t end = uri.length(); + std::size_t size = uri.size(); + + for (int i = 0; i < URI_PRIV_INDEX; ++i) { + retv_if(start >= uri.length(), ""); + start = uri.find(URI_DELIMITER, start + 1); + retv_if(start == std::string::npos, ""); + } + + end = uri.find(URI_DELIMITER, start + 1); + retv_if(end == std::string::npos, ""); + + size = end - (start + 1); + + if (uri.substr(start + 1, size) == PRIVILEGE_HEALTHINFO_STR) + return PRIVILEGE_HEALTHINFO_URI; + + return ""; +} + unsigned long long sensor::utils::get_timestamp(void) { struct timespec t; diff --git a/src/shared/sensor_utils.h b/src/shared/sensor_utils.h index 7e31f6d..8e80f27 100644 --- a/src/shared/sensor_utils.h +++ b/src/shared/sensor_utils.h @@ -29,6 +29,7 @@ namespace sensor { namespace utils { const char *get_uri(sensor_type_t type); + const char *get_privilege(std::string uri); unsigned long long get_timestamp(void); unsigned long long get_timestamp(timeval *t); -- 2.7.4 From 76f2b516c0e00d60f6933b1c408c330b1865a65a Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 18:12:40 +0900 Subject: [PATCH 15/16] sensord: specify the appropriate sensor type based on URI Change-Id: I4facc8b3b31ff2f2e19d9ebdefc0bdeea8ae2f8b Signed-off-by: kibak.yoon --- src/server/sensor_handler.cpp | 3 +++ src/shared/sensor_utils.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/shared/sensor_utils.h | 1 + 3 files changed, 43 insertions(+) diff --git a/src/server/sensor_handler.cpp b/src/server/sensor_handler.cpp index 4f16244..d72cfb8 100644 --- a/src/server/sensor_handler.cpp +++ b/src/server/sensor_handler.cpp @@ -30,6 +30,9 @@ sensor_handler::sensor_handler(const sensor_info &info) { const char *priv = sensor::utils::get_privilege(m_info.get_uri()); m_info.set_privilege(priv); + + sensor_type_t type = sensor::utils::get_type(m_info.get_uri()); + m_info.set_type(type); } bool sensor_handler::has_observer(sensor_observer *ob) diff --git a/src/shared/sensor_utils.cpp b/src/shared/sensor_utils.cpp index 1f09e4b..729c53b 100644 --- a/src/shared/sensor_utils.cpp +++ b/src/shared/sensor_utils.cpp @@ -155,6 +155,45 @@ const char *sensor::utils::get_privilege(std::string uri) return ""; } +static void init_types(std::map &sensor_types) +{ + ret_if(!sensor_types.empty()); + + for (auto it = types.begin(); it != types.end(); ++it) { + std::string uri(it->second); + std::size_t found = uri.find_last_of("/"); + std::size_t len = uri.length() - (found + 1); + + sensor_types.emplace(uri.substr(found + 1, len), it->first); + } +} + +sensor_type_t sensor::utils::get_type(std::string uri) +{ + static std::map sensor_types; + init_types(sensor_types); + + std::size_t start = 0; + std::size_t end = uri.length(); + std::size_t size = uri.size(); + + for (int i = 0; i < URI_SENSOR_TYPE_INDEX; ++i) { + retv_if(start >= uri.length(), UNKNOWN_SENSOR); + start = uri.find(URI_DELIMITER, start + 1); + retv_if(start == std::string::npos, UNKNOWN_SENSOR); + } + + end = uri.find(URI_DELIMITER, start + 1); + retv_if(end == std::string::npos, UNKNOWN_SENSOR); + + size = end - (start + 1); + + auto it = sensor_types.find(uri.substr(start + 1, size)); + retv_if(it == sensor_types.end(), UNKNOWN_SENSOR); + + return it->second; +} + unsigned long long sensor::utils::get_timestamp(void) { struct timespec t; diff --git a/src/shared/sensor_utils.h b/src/shared/sensor_utils.h index 8e80f27..3497dc7 100644 --- a/src/shared/sensor_utils.h +++ b/src/shared/sensor_utils.h @@ -30,6 +30,7 @@ namespace sensor { namespace utils { const char *get_uri(sensor_type_t type); const char *get_privilege(std::string uri); + sensor_type_t get_type(std::string uri); unsigned long long get_timestamp(void); unsigned long long get_timestamp(timeval *t); -- 2.7.4 From 786f460a8409ea0fd17d1b8a597c833f57ffcbe4 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 20:51:25 +0900 Subject: [PATCH 16/16] sensord: fix typo errors about sensor URI - fix url of serveral healthinfo sensors Change-Id: I26339da8056abb8526393b9e1dfe31eeea6a8e98 Signed-off-by: kibak.yoon --- src/shared/sensor_utils.cpp | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/shared/sensor_utils.cpp b/src/shared/sensor_utils.cpp index 729c53b..21e13ea 100644 --- a/src/shared/sensor_utils.cpp +++ b/src/shared/sensor_utils.cpp @@ -67,16 +67,16 @@ static std::map types = { {HUMAN_SLEEP_DETECTOR_SENSOR, "http://tizen.org/sensor/healthinfo/human_sleep_detector"}, {HUMAN_STRESS_MONITOR_SENSOR, "http://tizen.org/sensor/healthinfo/human_stress_monitor"}, - {EXERCISE_WALKING_SENSOR, "http://tizen.org/sensor/general/exercise.walking"}, - {EXERCISE_RUNNING_SENSOR, "http://tizen.org/sensor/general/exercise.running"}, - {EXERCISE_HIKING_SENSOR, "http://tizen.org/sensor/general/exercise.hiking"}, - {EXERCISE_CYCLING_SENSOR, "http://tizen.org/sensor/general/exercise.cycling"}, - {EXERCISE_ELLIPTICAL_SENSOR, "http://tizen.org/sensor/general/exercise.elliptical"}, - {EXERCISE_INDOOR_CYCLING_SENSOR, "http://tizen.org/sensor/general/exercise.indoor_cycling"}, - {EXERCISE_ROWING_SENSOR, "http://tizen.org/sensor/general/exercise.rowing"}, - {EXERCISE_STEPPER_SENSOR, "http://tizen.org/sensor/general/exercise.stepper"}, + {EXERCISE_WALKING_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.walking"}, + {EXERCISE_RUNNING_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.running"}, + {EXERCISE_HIKING_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.hiking"}, + {EXERCISE_CYCLING_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.cycling"}, + {EXERCISE_ELLIPTICAL_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.elliptical"}, + {EXERCISE_INDOOR_CYCLING_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.indoor_cycling"}, + {EXERCISE_ROWING_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.rowing"}, + {EXERCISE_STEPPER_SENSOR, "http://tizen.org/sensor/healthinfo/exercise.stepper"}, - {EXTERNAL_EXERCISE_SENSOR, "http://tizen.org/sensor/general/external_exercise"}, + {EXTERNAL_EXERCISE_SENSOR, "http://tizen.org/sensor/healthinfo/external_exercise"}, {FUSION_SENSOR, "http://tizen.org/sensor/general/fusion"}, {AUTO_ROTATION_SENSOR, "http://tizen.org/sensor/general/auto_rotation"}, @@ -97,16 +97,16 @@ static std::map types = { {WEAR_STATUS_SENSOR, "http://tizen.org/sensor/general/wear_status"}, {WEAR_ON_MONITOR_SENSOR, "http://tizen.org/sensor/general/wear_on_monitor"}, {NO_MOVE_DETECTOR_SENSOR, "http://tizen.org/sensor/general/no_move_detector"}, - {RESTING_HR_SENSOR, "http://tizen.org/sensor/general/resting_hr"}, - {STEP_LEVEL_MONITOR_SENSOR, "http://tizen.org/sensor/general/step_level_monitor"}, - {EXERCISE_STANDALONE_SENSOR, "http://tizen.org/sensor/general/exercise_standalone"}, - {EXERCISE_HR_SENSOR, "http://tizen.org/sensor/healthinfo/general/exercise_hr"}, - {WORKOUT_SENSOR, "http://tizen.org/sensor/general/workout"}, - {CYCLE_MONITOR_SENSOR, "http://tizen.org/sensor/general/cycle_monitor"}, - {STAIR_TRACKER_SENSOR, "http://tizen.org/sensor/general/stair_tracker"}, + {RESTING_HR_SENSOR, "http://tizen.org/sensor/healthinfo/resting_hr"}, + {STEP_LEVEL_MONITOR_SENSOR, "http://tizen.org/sensor/healthinfo/step_level_monitor"}, + {EXERCISE_STANDALONE_SENSOR, "http://tizen.org/sensor/healthinfo/exercise_standalone"}, + {EXERCISE_HR_SENSOR, "http://tizen.org/sensor/healthinfo/exercise_hr"}, + {WORKOUT_SENSOR, "http://tizen.org/sensor/healthinfo/workout"}, + {CYCLE_MONITOR_SENSOR, "http://tizen.org/sensor/healthinfo/cycle_monitor"}, + {STAIR_TRACKER_SENSOR, "http://tizen.org/sensor/healthinfo/stair_tracker"}, {PRESSURE_INDICATOR_SENSOR, "http://tizen.org/sensor/general/pressure_indicator"}, {PRESSURE_ALERT_SENSOR, "http://tizen.org/sensor/general/pressure_alert"}, - {HR_CALORIE_SENSOR, "http://tizen.org/sensor/general/hr_calorie"}, + {HR_CALORIE_SENSOR, "http://tizen.org/sensor/healthinfo/hr_calorie"}, {CONTEXT_SENSOR, "http://tizen.org/sensor/general/context"}, {MOTION_SENSOR, "http://tizen.org/sensor/general/motion"}, @@ -114,14 +114,14 @@ static std::map types = { {PIR_LONG_SENSOR, "http://tizen.org/sensor/general/pir_long"}, {DUST_SENSOR, "http://tizen.org/sensor/general/dust"}, {THERMOMETER_SENSOR, "http://tizen.org/sensor/general/thermometer"}, - {PEDOMETER_SENSOR, "http://tizen.org/sensor/healthinfo/general/pedometer"}, + {PEDOMETER_SENSOR, "http://tizen.org/sensor/healthinfo/pedometer"}, {FLAT_SENSOR, "http://tizen.org/sensor/general/flat"}, - {HRM_RAW_SENSOR, "http://tizen.org/sensor/healthinfo/general/hrm_raw"}, + {HRM_RAW_SENSOR, "http://tizen.org/sensor/healthinfo/hrm_raw"}, {TILT_SENSOR, "http://tizen.org/sensor/general/tilt"}, {RV_RAW_SENSOR, "http://tizen.org/sensor/general/rv_raw"}, - {GSR_SENSOR, "http://tizen.org/sensor/healthinfo/general/gsr"}, - {SIMSENSE_SENSOR, "http://tizen.org/sensor/general/simsense"}, - {PPG_SENSOR, "http://tizen.org/sensor/healthinfo/general/ppg"}, + {GSR_SENSOR, "http://tizen.org/sensor/healthinfo/gsr"}, + {SIMSENSE_SENSOR, "http://tizen.org/sensor/healthinfo/simsense"}, + {PPG_SENSOR, "http://tizen.org/sensor/healthinfo/ppg"}, }; const char *sensor::utils::get_uri(sensor_type_t type) -- 2.7.4