From 94d9748f1415114e91f3d4c11ad51fb66620bfa9 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 28 Apr 2017 07:01:31 +0000 Subject: [PATCH 01/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 02/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 03/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 04/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 05/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 06/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 07/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 08/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 09/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 10/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 11/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 From 22bab7c34dded30f03f921c22b62a7215f85d912 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 22:20:27 +0900 Subject: [PATCH 12/16] sensord: add location privilege to location-related sensors Change-Id: Ib931902c518fd67e62fb7e7dc2d8cd6340d792b3 Signed-off-by: kibak.yoon --- src/server/sensor_handler.cpp | 11 +++++++++++ src/server/server_channel_handler.cpp | 5 ++--- src/shared/sensor_info.cpp | 8 ++++++++ src/shared/sensor_info.h | 1 + src/shared/sensor_types_private.h | 5 +++++ src/shared/sensor_utils.cpp | 4 +++- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/server/sensor_handler.cpp b/src/server/sensor_handler.cpp index d72cfb8..2a2eb6a 100644 --- a/src/server/sensor_handler.cpp +++ b/src/server/sensor_handler.cpp @@ -22,6 +22,7 @@ #include #include #include +#include using namespace sensor; @@ -33,6 +34,16 @@ sensor_handler::sensor_handler(const sensor_info &info) sensor_type_t type = sensor::utils::get_type(m_info.get_uri()); m_info.set_type(type); + + /* TODO: temporary walkaround for sensors that require multiple privileges */ + switch (m_info.get_type()) { + case EXTERNAL_EXERCISE_SENSOR: + case EXERCISE_STANDALONE_SENSOR: + m_info.add_privilege(PRIVILEGE_LOCATION_URI); + break; + default: + break; + } } bool sensor_handler::has_observer(sensor_observer *ob) diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index 88c48e4..f20008c 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -23,13 +23,12 @@ #include #include #include +#include #include #include "permission_checker.h" #include "application_sensor_handler.h" -#define PRIV_DELIMINATOR ";" - using namespace sensor; using namespace ipc; @@ -397,7 +396,7 @@ bool server_channel_handler::has_privilege(int fd, std::string &priv) bool server_channel_handler::has_privileges(int fd, std::string priv) { std::vector privileges; - privileges = utils::tokenize(priv, PRIV_DELIMINATOR); + privileges = utils::tokenize(priv, PRIV_DELIMITER); for (auto it = privileges.begin(); it != privileges.end(); ++it) { if (!has_privilege(fd, *it)) diff --git a/src/shared/sensor_info.cpp b/src/shared/sensor_info.cpp index c2d95c3..e56be7e 100644 --- a/src/shared/sensor_info.cpp +++ b/src/shared/sensor_info.cpp @@ -20,6 +20,7 @@ #include "sensor_info.h" #include +#include #include #include #include @@ -207,6 +208,13 @@ void sensor_info::set_privilege(const char *privilege) m_privilege = privilege; } +void sensor_info::add_privilege(const char *privilege) +{ + if (!m_privilege.empty()) + m_privilege.append(PRIV_DELIMITER); + m_privilege.append(privilege); +} + void sensor_info::serialize(raw_data_t &data) { put(data, m_type); diff --git a/src/shared/sensor_info.h b/src/shared/sensor_info.h index 91b6ba8..d07b5b8 100644 --- a/src/shared/sensor_info.h +++ b/src/shared/sensor_info.h @@ -63,6 +63,7 @@ public: void set_max_batch_count(int max_batch_count); void set_wakeup_supported(bool supported); void set_privilege(const char *privilege); + void add_privilege(const char *privilege); void clear(void); diff --git a/src/shared/sensor_types_private.h b/src/shared/sensor_types_private.h index b1c49f3..d0ed9e2 100644 --- a/src/shared/sensor_types_private.h +++ b/src/shared/sensor_types_private.h @@ -25,10 +25,15 @@ #define PREDEFINED_TYPE_URI "http://tizen.org/sensor/" +#define PRIV_DELIMITER ";" #define URI_DELIMITER "/" + #define PRIVILEGE_HEALTHINFO_STR "healthinfo" #define PRIVILEGE_HEALTHINFO_URI "http://tizen.org/privilege/healthinfo" +#define PRIVILEGE_LOCATION_STR "location" +#define PRIVILEGE_LOCATION_URI "http://tizen.org/privilege/location" + #define URI_PRIV_INDEX 4 #define URI_SENSOR_TYPE_INDEX 5 diff --git a/src/shared/sensor_utils.cpp b/src/shared/sensor_utils.cpp index 21e13ea..16341cc 100644 --- a/src/shared/sensor_utils.cpp +++ b/src/shared/sensor_utils.cpp @@ -90,7 +90,7 @@ static std::map types = { {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"}, + {GPS_BATCH_SENSOR, "http://tizen.org/sensor/location/gps_batch"}, {HRM_CTRL_SENSOR, "http://tizen.org/sensor/general/hrm_ctrl"}, @@ -151,6 +151,8 @@ const char *sensor::utils::get_privilege(std::string uri) if (uri.substr(start + 1, size) == PRIVILEGE_HEALTHINFO_STR) return PRIVILEGE_HEALTHINFO_URI; + else if (uri.substr(start + 1, size) == PRIVILEGE_LOCATION_STR) + return PRIVILEGE_LOCATION_URI; return ""; } -- 2.7.4 From aa59628dbd970bf16627146de04e1eb82d3d2505 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 16 May 2017 14:16:09 +0900 Subject: [PATCH 13/16] sensord: rename set_interval_cb to interval_changed_cb Change-Id: I9f7dd165b8b4a2aa3f244c4f5061f1b96d0cec84 Signed-off-by: kibak.yoon --- include/sensor_internal.h | 4 ++-- src/client-dummy/client_dummy.cpp | 2 +- src/client/sensor_internal.cpp | 2 +- src/client/sensor_provider.cpp | 2 +- src/client/sensor_provider.h | 2 +- src/client/sensor_provider_channel_handler.cpp | 14 +++++++------- src/client/sensor_provider_channel_handler.h | 6 +++--- src/sensorctl/testcase/unit_provider.cpp | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/include/sensor_internal.h b/include/sensor_internal.h index 49609b6..ee3b375 100644 --- a/include/sensor_internal.h +++ b/include/sensor_internal.h @@ -420,8 +420,8 @@ int sensord_provider_set_start_cb(sensord_provider_h provider, sensord_provider_ typedef void (*sensord_provider_stop_cb)(sensord_provider_h provider, void *user_data); int sensord_provider_set_stop_cb(sensord_provider_h provider, sensord_provider_stop_cb callback, void *user_data); -typedef void (*sensord_provider_set_interval_cb)(sensord_provider_h provider, unsigned int interval_ms, void *user_data); -int sensord_provider_set_set_interval_cb(sensord_provider_h provider, sensord_provider_set_interval_cb callback, void *user_data); +typedef void (*sensord_provider_interval_changed_cb)(sensord_provider_h provider, unsigned int interval_ms, void *user_data); +int sensord_provider_set_interval_changed_cb(sensord_provider_h provider, sensord_provider_interval_changed_cb callback, void *user_data); int sensord_provider_publish(sensord_provider_h provider, sensor_data_t data); diff --git a/src/client-dummy/client_dummy.cpp b/src/client-dummy/client_dummy.cpp index 63ae2ea..ee8cde3 100644 --- a/src/client-dummy/client_dummy.cpp +++ b/src/client-dummy/client_dummy.cpp @@ -290,7 +290,7 @@ API int sensord_provider_set_stop_cb(sensord_provider_h provider, sensord_provid return OP_ERROR; } -API int sensord_provider_set_set_interval_cb(sensord_provider_h provider, sensord_provider_set_interval_cb callback, void *user_data) +API int sensord_provider_set_interval_changed_cb(sensord_provider_h provider, sensord_provider_interval_changed_cb callback, void *user_data) { return OP_ERROR; } diff --git a/src/client/sensor_internal.cpp b/src/client/sensor_internal.cpp index dcd497a..fe3e554 100644 --- a/src/client/sensor_internal.cpp +++ b/src/client/sensor_internal.cpp @@ -732,7 +732,7 @@ API int sensord_provider_set_stop_cb(sensord_provider_h provider, sensord_provid return OP_SUCCESS; } -API int sensord_provider_set_set_interval_cb(sensord_provider_h provider, sensord_provider_set_interval_cb callback, void *user_data) +API int sensord_provider_set_interval_changed_cb(sensord_provider_h provider, sensord_provider_interval_changed_cb callback, void *user_data) { retvm_if(!provider, -EINVAL, "Invalid paramter"); retvm_if(!callback, -EINVAL, "Invalid paramter"); diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index 94036e0..f2eae8b 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -199,7 +199,7 @@ void sensor_provider::set_stop_cb(sensord_provider_stop_cb cb, void *user_data) m_handler->set_stop_cb(cb, user_data); } -void sensor_provider::set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data) +void sensor_provider::set_interval_cb(sensord_provider_interval_changed_cb cb, void *user_data) { m_handler->set_interval_cb(cb, user_data); } diff --git a/src/client/sensor_provider.h b/src/client/sensor_provider.h index b499995..2191b60 100644 --- a/src/client/sensor_provider.h +++ b/src/client/sensor_provider.h @@ -46,7 +46,7 @@ public: void set_start_cb(sensord_provider_start_cb cb, void *user_data); void set_stop_cb(sensord_provider_stop_cb cb, void *user_data); - void set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data); + void set_interval_cb(sensord_provider_interval_changed_cb cb, void *user_data); int publish(sensor_data_t *data, int len); diff --git a/src/client/sensor_provider_channel_handler.cpp b/src/client/sensor_provider_channel_handler.cpp index 52cc6bf..ed3fd01 100644 --- a/src/client/sensor_provider_channel_handler.cpp +++ b/src/client/sensor_provider_channel_handler.cpp @@ -29,10 +29,10 @@ sensor_provider::channel_handler::channel_handler(sensor_provider *provider) : m_provider(provider) , m_start_cb(NULL) , m_stop_cb(NULL) -, m_set_interval_cb(NULL) +, m_interval_changed_cb(NULL) , m_start_user_data(NULL) , m_stop_user_data(NULL) -, m_set_interval_user_data(NULL) +, m_interval_changed_user_data(NULL) { } @@ -62,8 +62,8 @@ void sensor_provider::channel_handler::read(ipc::channel *ch, ipc::message &msg) cmd_provider_attr_int_t buf; msg.disclose((char *)&buf); - if (buf.attribute == SENSORD_ATTRIBUTE_INTERVAL && m_set_interval_cb) - m_set_interval_cb(m_provider, buf.value, m_set_interval_user_data); + if (buf.attribute == SENSORD_ATTRIBUTE_INTERVAL && m_interval_changed_cb) + m_interval_changed_cb(m_provider, buf.value, m_interval_changed_user_data); break; } } @@ -88,8 +88,8 @@ void sensor_provider::channel_handler::set_stop_cb(sensord_provider_stop_cb cb, m_stop_user_data = user_data; } -void sensor_provider::channel_handler::set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data) +void sensor_provider::channel_handler::set_interval_cb(sensord_provider_interval_changed_cb cb, void *user_data) { - m_set_interval_cb = cb; - m_set_interval_user_data = user_data; + m_interval_changed_cb = cb; + m_interval_changed_user_data = user_data; } diff --git a/src/client/sensor_provider_channel_handler.h b/src/client/sensor_provider_channel_handler.h index efe5ce5..877f9db 100644 --- a/src/client/sensor_provider_channel_handler.h +++ b/src/client/sensor_provider_channel_handler.h @@ -40,18 +40,18 @@ public: void set_start_cb(sensord_provider_start_cb cb, void *user_data); void set_stop_cb(sensord_provider_stop_cb cb, void *user_data); - void set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data); + void set_interval_cb(sensord_provider_interval_changed_cb cb, void *user_data); private: sensor_provider *m_provider; sensord_provider_start_cb m_start_cb; sensord_provider_stop_cb m_stop_cb; - sensord_provider_set_interval_cb m_set_interval_cb; + sensord_provider_interval_changed_cb m_interval_changed_cb; void *m_start_user_data; void *m_stop_user_data; - void *m_set_interval_user_data; + void *m_interval_changed_user_data; }; } diff --git a/src/sensorctl/testcase/unit_provider.cpp b/src/sensorctl/testcase/unit_provider.cpp index 89ae9e3..0c61862 100644 --- a/src/sensorctl/testcase/unit_provider.cpp +++ b/src/sensorctl/testcase/unit_provider.cpp @@ -164,7 +164,7 @@ TESTCASE(sensor_api_provider_mysensor, provider_p_1) 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); + err = sensord_provider_set_interval_changed_cb(provider, interval_cb, NULL); ASSERT_EQ(err, 0); err = sensord_get_default_sensor_by_uri(MYSENSOR_URI, &sensor); -- 2.7.4 From 17d34a8dfba5522383ecfa0f21c2190750b75d76 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Mon, 15 May 2017 18:45:39 +0900 Subject: [PATCH 14/16] Temporary fix for build errors from Tizen 3.0 snapshots This patch enables to build other packages requiring pkgconfig(sensor), when you need to build & install the latest sensord for Tizen 3.0 devices. Change-Id: Ib70d2236d8b1beaf8d0a7040af5540df502de547 Signed-off-by: Mu-Woong Lee --- packaging/sensord.spec | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 45901e6..cd7496c 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -46,7 +46,7 @@ Summary: Internal Sensor API (Development) Group: System/Development Requires: %{name}-dummy = %{version}-%{release} # To support old-snapshot-based package builds -Provides: libsensord-devel +#Provides: libsensord-devel %description devel Internal Sensor API (Development) @@ -138,3 +138,28 @@ echo "You need to reinstall %{name}-dummy to keep using the APIs after uninstall %files -n sensor-test %{_bindir}/sensorctl + + +# Dummy packages for Tizen 3.0. +# When building other packages on Tizen 3.0, after building sensord first, +# some dependency conflicts may occur. These dummy packages may fix such +# dependency issues. +%package -n libsensord +Summary: Dummy libsensord +Requires: sensord-dummy +Group: System/Sensor Framework + +%description -n libsensord +Dummy libsensord + +%files -n libsensord + +%package -n libsensord-devel +Summary: Dummy libsensord-devel +Requires: sensord-devel +Group: System/Sensor Framework + +%description -n libsensord-devel +Dummy libsensord-devel + +%files -n libsensord-devel -- 2.7.4 From 74e889e2b43586b60dce12fbd6ceba49df219a04 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 18 May 2017 15:37:34 +0900 Subject: [PATCH 15/16] sensord: remove command when manager/listener/provider are disconnected - if channel is disconnected(), server releases their resources automatically. - so it is not neccessary to release resource by sending command. Change-Id: Ifd4ed14b20429def377f10d5a6d5dd3da18efc86 Signed-off-by: kibak.yoon --- src/client/sensor_listener.cpp | 8 ------- src/client/sensor_manager.cpp | 11 +-------- src/client/sensor_provider.cpp | 9 ------- src/server/server_channel_handler.cpp | 44 ----------------------------------- src/shared/command_types.h | 10 -------- 5 files changed, 1 insertion(+), 81 deletions(-) diff --git a/src/client/sensor_listener.cpp b/src/client/sensor_listener.cpp index 0e66ef7..9eedd6d 100644 --- a/src/client/sensor_listener.cpp +++ b/src/client/sensor_listener.cpp @@ -182,15 +182,7 @@ void sensor_listener::disconnect(void) ret_if(!is_connected()); m_connected.store(false); - ipc::message msg; - ipc::message reply; - - msg.set_type(CMD_LISTENER_DISCONNECT); - m_evt_channel->send_sync(&msg); - - m_evt_channel->read_sync(reply); m_evt_channel->disconnect(); - delete m_evt_channel; m_evt_channel = NULL; diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index 43fcb41..760a90b 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -222,17 +222,9 @@ bool sensor_manager::connect(void) void sensor_manager::disconnect(void) { ret_if(!is_connected()); - - ipc::message msg; - ipc::message reply; - msg.set_type(CMD_MANAGER_DISCONNECT); - - 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_mon_channel->disconnect(); - delete m_mon_channel; m_mon_channel = NULL; @@ -240,7 +232,6 @@ void sensor_manager::disconnect(void) delete m_cmd_channel; m_cmd_channel = NULL; - m_connected.store(false); _D("Disconnected"); } diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index f2eae8b..50772d5 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -147,16 +147,7 @@ bool sensor_provider::disconnect(void) retv_if(!is_connected(), false); m_connected.store(false); - ipc::message msg(OP_SUCCESS); - ipc::message reply; - - msg.set_type(CMD_PROVIDER_DISCONNECT); - - m_channel->send_sync(&msg); - m_channel->read_sync(reply); - m_channel->disconnect(); - delete m_channel; m_channel = NULL; diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index f20008c..fbcb6cb 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -81,14 +81,10 @@ void server_channel_handler::read(channel *ch, message &msg) switch (msg.type()) { case CMD_MANAGER_CONNECT: err = manager_connect(ch, msg); break; - case CMD_MANAGER_DISCONNECT: - err = manager_disconnect(ch, msg); break; case CMD_MANAGER_SENSOR_LIST: err = manager_get_sensor_list(ch, msg); break; case CMD_LISTENER_CONNECT: err = listener_connect(ch, msg); break; - case CMD_LISTENER_DISCONNECT: - err = listener_disconnect(ch, msg); break; case CMD_LISTENER_START: err = listener_start(ch, msg); break; case CMD_LISTENER_STOP: @@ -101,8 +97,6 @@ void server_channel_handler::read(channel *ch, message &msg) err = listener_get_data(ch, msg); break; case CMD_PROVIDER_CONNECT: err = provider_connect(ch, msg); break; - case CMD_PROVIDER_DISCONNECT: - err = provider_disconnect(ch, msg); break; case CMD_PROVIDER_PUBLISH: err = provider_publish(ch, msg); break; case CMD_HAS_PRIVILEGE: @@ -122,12 +116,6 @@ int server_channel_handler::manager_connect(channel *ch, message &msg) return OP_SUCCESS; } -int server_channel_handler::manager_disconnect(channel *ch, message &msg) -{ - m_manager->deregister_channel(ch); - return send_reply(ch, OP_SUCCESS); -} - int server_channel_handler::manager_get_sensor_list(channel *ch, message &msg) { ipc::message reply; @@ -177,25 +165,6 @@ int server_channel_handler::listener_connect(channel *ch, message &msg) return OP_SUCCESS; } -int server_channel_handler::listener_disconnect(channel *ch, message &msg) -{ - auto it = m_listener_ids.find(ch); - retv_if(it == m_listener_ids.end(), -EINVAL); - - uint32_t id = it->second; - - retvm_if(!has_privileges(ch->get_fd(), m_listeners[id]->get_required_privileges()), - -EACCES, "Permission denied"); - - delete m_listeners[id]; - m_listeners.erase(id); - m_listener_ids.erase(ch); - - _D("Disconnected sensor_listener[%u]", id); - - return send_reply(ch, OP_SUCCESS); -} - int server_channel_handler::listener_start(channel *ch, message &msg) { cmd_listener_start_t buf; @@ -335,19 +304,6 @@ int server_channel_handler::provider_connect(channel *ch, message &msg) return send_reply(ch, OP_SUCCESS); } -int server_channel_handler::provider_disconnect(channel *ch, message &msg) -{ - auto it = m_app_sensors.find(ch); - retv_if(it == m_app_sensors.end(), -EINVAL); - - sensor_info info = it->second->get_sensor_info(); - - m_manager->deregister_sensor(info.get_uri()); - m_app_sensors.erase(ch); - - return send_reply(ch, OP_SUCCESS); -} - int server_channel_handler::provider_publish(channel *ch, message &msg) { auto it = m_app_sensors.find(ch); diff --git a/src/shared/command_types.h b/src/shared/command_types.h index 6ea1523..a994f29 100644 --- a/src/shared/command_types.h +++ b/src/shared/command_types.h @@ -33,7 +33,6 @@ enum cmd_type_e { /* Manager */ CMD_MANAGER_CONNECT = 0x100, - CMD_MANAGER_DISCONNECT, CMD_MANAGER_SENSOR_LIST, CMD_MANAGER_SENSOR_ADDED, CMD_MANAGER_SENSOR_REMOVED, @@ -42,7 +41,6 @@ enum cmd_type_e { CMD_LISTENER_EVENT = 0x200, CMD_LISTENER_ACC_EVENT, CMD_LISTENER_CONNECT, - CMD_LISTENER_DISCONNECT, CMD_LISTENER_START, CMD_LISTENER_STOP, CMD_LISTENER_ATTR_INT, @@ -51,7 +49,6 @@ enum cmd_type_e { /* Provider */ CMD_PROVIDER_CONNECT = 0x300, - CMD_PROVIDER_DISCONNECT, CMD_PROVIDER_START, CMD_PROVIDER_STOP, CMD_PROVIDER_ATTR_INT, @@ -75,10 +72,6 @@ typedef struct { typedef struct { int listener_id; -} cmd_listener_disconnect_t; - -typedef struct { - int listener_id; } cmd_listener_start_t; typedef struct { @@ -109,9 +102,6 @@ typedef struct { } cmd_provider_connect_t; typedef struct { -} cmd_provider_disconnect_t; - -typedef struct { sensor_data_t data; } cmd_provider_publish_t; -- 2.7.4 From f550470b75ef2a7d34ce5ca5e797c0902dd9aea3 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Mon, 5 Jun 2017 10:57:30 +0900 Subject: [PATCH 16/16] sensord: fix bug to enable external sensor on rpi3 Change-Id: I9013a23afefc2e8fbcbb861a6afa74b499641884 Signed-off-by: kibak.yoon --- src/server/external_sensor_handler.cpp | 3 +++ src/server/sensor_manager.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/external_sensor_handler.cpp b/src/server/external_sensor_handler.cpp index 53381b9..7b3e7da 100644 --- a/src/server/external_sensor_handler.cpp +++ b/src/server/external_sensor_handler.cpp @@ -59,6 +59,7 @@ int external_sensor_notifier::notify(void) external_sensor_handler::external_sensor_handler(const sensor_info &info, external_sensor *sensor) : sensor_handler(info) +, m_sensor(sensor) , m_notifier(NULL) , m_policy(OP_DEFAULT) { @@ -97,6 +98,8 @@ int external_sensor_handler::start(sensor_observer *ob) int policy = m_sensor->start(ob); retv_if(policy <= OP_ERROR, policy); + add_observer(ob); + return OP_SUCCESS; } diff --git a/src/server/sensor_manager.cpp b/src/server/sensor_manager.cpp index 601c5ef..dc602ff 100644 --- a/src/server/sensor_manager.cpp +++ b/src/server/sensor_manager.cpp @@ -65,7 +65,7 @@ bool sensor_manager::init(void) m_loader.load_fusion_sensor(VIRTUAL_SENSOR_DIR_PATH, fusion_sensors); m_loader.load_external_sensor(EXTERNAL_SENSOR_DIR_PATH, external_sensors); - retvm_if(devices.empty(), false, "There is no sensors"); + retvm_if(devices.empty() && external_sensors.empty(), false, "There is no sensors"); /* TODO: support dynamic sensor */ create_physical_sensors(devices, physical_sensors); -- 2.7.4