From 3a53d78d7d4d509d85e415de42f697eb7f14193b Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Mon, 24 Apr 2017 19:27:19 +0900 Subject: [PATCH 01/16] sensord: initialize class members of sensor_provider_handler Change-Id: I39bd1d2f4b73cfcca23132fb65aa3f95b0872d59 Signed-off-by: kibak.yoon --- src/client/sensor_provider_handler.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/client/sensor_provider_handler.cpp b/src/client/sensor_provider_handler.cpp index 7f3f366..14fa3a1 100644 --- a/src/client/sensor_provider_handler.cpp +++ b/src/client/sensor_provider_handler.cpp @@ -27,6 +27,12 @@ using namespace sensor; sensor_provider_handler::sensor_provider_handler(sensor_provider *provider) : m_provider(provider) +, m_start_cb(NULL) +, m_stop_cb(NULL) +, m_set_interval_cb(NULL) +, m_start_user_data(NULL) +, m_stop_user_data(NULL) +, m_set_interval_user_data(NULL) { } -- 2.7.4 From 6972932bf043cc56a041a90c07048c77b58cc8c2 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Mon, 24 Apr 2017 21:48:55 +0900 Subject: [PATCH 02/16] sensord: rename URIs of sensor type and support get_sensor(uri) properly - compare string before last slash Change-Id: I2e5f6a317298b96db8d712d5545e17f89f8408e5 Signed-off-by: kibak.yoon --- src/client/sensor_manager.cpp | 45 ++++++++++++++++------- src/sensor/linear_accel/linear_accel_sensor.cpp | 2 +- src/sensor/rotation_vector/gyro_rv_sensor.cpp | 2 +- src/sensor/rotation_vector/magnetic_rv_sensor.cpp | 2 +- src/server/sensor_manager.cpp | 13 +++++-- src/shared/sensor_utils.cpp | 18 ++++----- 6 files changed, 53 insertions(+), 29 deletions(-) diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index 11c61d9..b2917b2 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -98,9 +98,14 @@ bool sensor_manager::is_supported(const char *uri) return true; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { - std::size_t found = (*it).get_uri().rfind(uri); + if ((*it).get_uri() == uri) + return true; + + std::size_t found = (*it).get_uri().find_last_of("/"); + if (found == std::string::npos) + continue; - if (found != std::string::npos) + if ((*it).get_uri().substr(0, found) == uri) return true; } @@ -331,15 +336,23 @@ sensor_info *sensor_manager::get_info(const char *uri) return &m_sensors[0]; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { - std::size_t found = (*it).get_uri().rfind(uri); - - if (found == std::string::npos) + if ((*it).get_uri() != uri) continue; - if ((*it).get_privilege().empty()) + if ((*it).get_privilege().empty() || has_privilege((*it).get_uri())) return &*it; - if (has_privilege((*it).get_uri())) + return NULL; + } + + for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { + std::size_t found = (*it).get_uri().find_last_of("/"); + if (found == std::string::npos) + continue; + if ((*it).get_uri().substr(0, found) != uri) + continue; + + if ((*it).get_privilege().empty() || has_privilege((*it).get_uri())) return &*it; } @@ -355,17 +368,23 @@ std::vector sensor_manager::get_infos(const char *uri) all = true; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { - std::size_t found = (*it).get_uri().rfind(uri); - - if (!all && found == std::string::npos) + if ((*it).get_uri() != uri) continue; - if ((*it).get_privilege().empty()) { + if ((*it).get_privilege().empty() || has_privilege((*it).get_uri())) infos.push_back(&*it); + + return infos; + } + + for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { + std::size_t found = (*it).get_uri().find_last_of("/"); + if (!all && found == std::string::npos) + continue; + if (!all && (*it).get_uri().substr(0, found) != uri) continue; - } - if (has_privilege((*it).get_uri())) + if ((*it).get_privilege().empty() || has_privilege((*it).get_uri())) infos.push_back(&*it); } diff --git a/src/sensor/linear_accel/linear_accel_sensor.cpp b/src/sensor/linear_accel/linear_accel_sensor.cpp index 27cce33..00e0bb7 100644 --- a/src/sensor/linear_accel/linear_accel_sensor.cpp +++ b/src/sensor/linear_accel/linear_accel_sensor.cpp @@ -23,7 +23,7 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/linear_accel/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/linear_acceleration/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 diff --git a/src/sensor/rotation_vector/gyro_rv_sensor.cpp b/src/sensor/rotation_vector/gyro_rv_sensor.cpp index ccafce8..74e0e27 100644 --- a/src/sensor/rotation_vector/gyro_rv_sensor.cpp +++ b/src/sensor/rotation_vector/gyro_rv_sensor.cpp @@ -23,7 +23,7 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/gyro_rotation_vector/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/gyroscope_rotation_vector/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 diff --git a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp index fd9ad36..2d480d2 100644 --- a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp +++ b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp @@ -23,7 +23,7 @@ #include #include -#define NAME_SENSOR "http://tizen.org/sensor/mag_rotation_vector/tizen_default" +#define NAME_SENSOR "http://tizen.org/sensor/geomagnetic_rotation_vector/tizen_default" #define NAME_VENDOR "tizen.org" #define SRC_ID_ACC 0x1 diff --git a/src/server/sensor_manager.cpp b/src/server/sensor_manager.cpp index 8d79ed0..601c5ef 100644 --- a/src/server/sensor_manager.cpp +++ b/src/server/sensor_manager.cpp @@ -205,10 +205,15 @@ void sensor_manager::deregister_channel(ipc::channel *ch) sensor_handler *sensor_manager::get_sensor_by_type(const std::string uri) { - auto it = m_sensors.begin(); - for (; it != m_sensors.end(); ++it) { - std::size_t found = it->first.rfind(uri); - if (found != std::string::npos) + for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { + if (it->first == uri) + return it->second; + + std::size_t found = it->first.find_last_of("/"); + if (found == std::string::npos) + continue; + + if (it->first.substr(0, found) == uri) return it->second; } diff --git a/src/shared/sensor_utils.cpp b/src/shared/sensor_utils.cpp index 817eb31..8313c4d 100644 --- a/src/shared/sensor_utils.cpp +++ b/src/shared/sensor_utils.cpp @@ -40,8 +40,8 @@ static std::map types = { {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_accel"}, - {GEOMAGNETIC_SENSOR, "http://tizen.org/sensor/geomagnetic"}, + {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"}, @@ -52,13 +52,13 @@ static std::map types = { {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/hrm_led_green"}, - {HRM_LED_IR_SENSOR, "http://tizen.org/sensor/hrm_led_ir"}, - {HRM_LED_RED_SENSOR, "http://tizen.org/sensor/hrm_led_red"}, - {GYROSCOPE_UNCAL_SENSOR, "http://tizen.org/sensor/gyro_uncalibrated"}, - {GEOMAGNETIC_UNCAL_SENSOR, "http://tizen.org/sensor/mag_uncalibrated"}, - {GYROSCOPE_RV_SENSOR, "http://tizen.org/sensor/gyro_rotation_vector"}, - {GEOMAGNETIC_RV_SENSOR, "http://tizen.org/sensor/mag_rotation_vector"}, + {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"}, -- 2.7.4 From cf0b43f2c0e1e5c3c706acf01141efc6a093781c Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 25 Apr 2017 13:53:18 +0900 Subject: [PATCH 03/16] sensord: assign a category number to enum of commands manager : 0x100 listener : 0x200 provider : 0x300 etc : 0x1000 Change-Id: I137dd95bc523ac591775b743f9cc6e16234a78c6 Signed-off-by: kibak.yoon --- src/shared/command_types.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/shared/command_types.h b/src/shared/command_types.h index 0ada031..6ea1523 100644 --- a/src/shared/command_types.h +++ b/src/shared/command_types.h @@ -32,14 +32,14 @@ enum cmd_type_e { CMD_NONE = 0, /* Manager */ - CMD_MANAGER_CONNECT, + CMD_MANAGER_CONNECT = 0x100, CMD_MANAGER_DISCONNECT, CMD_MANAGER_SENSOR_LIST, CMD_MANAGER_SENSOR_ADDED, CMD_MANAGER_SENSOR_REMOVED, /* Listener */ - CMD_LISTENER_EVENT, + CMD_LISTENER_EVENT = 0x200, CMD_LISTENER_ACC_EVENT, CMD_LISTENER_CONNECT, CMD_LISTENER_DISCONNECT, @@ -50,14 +50,15 @@ enum cmd_type_e { CMD_LISTENER_GET_DATA, /* Provider */ - CMD_PROVIDER_CONNECT, + CMD_PROVIDER_CONNECT = 0x300, CMD_PROVIDER_DISCONNECT, CMD_PROVIDER_START, CMD_PROVIDER_STOP, CMD_PROVIDER_ATTR_INT, CMD_PROVIDER_PUBLISH, - CMD_HAS_PRIVILEGE, + /* Etc */ + CMD_HAS_PRIVILEGE = 0x1000, CMD_CNT, }; -- 2.7.4 From 0caaba1caf776b90daf11be00d874ac7180f930a Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 25 Apr 2017 18:10:59 +0900 Subject: [PATCH 04/16] sensord: change unclear classes to inner class - sensor_manager_handler -> sensor_manager::channel_handler - sensor_provider_handler -> sensor_provider::channel_handler Change-Id: I07637cd51e8075ca7ba7271e4b8fb4a6b2c02230 Signed-off-by: kibak.yoon --- src/client/sensor_manager.cpp | 4 +++- src/client/sensor_manager.h | 7 +++--- ...dler.cpp => sensor_manager_channel_handler.cpp} | 26 +++++++++++----------- ..._handler.h => sensor_manager_channel_handler.h} | 14 ++++++------ src/client/sensor_provider.cpp | 4 ++-- src/client/sensor_provider.h | 6 ++--- ...ler.cpp => sensor_provider_channel_handler.cpp} | 20 ++++++++--------- ...handler.h => sensor_provider_channel_handler.h} | 15 ++++++------- 8 files changed, 48 insertions(+), 48 deletions(-) rename src/client/{sensor_manager_handler.cpp => sensor_manager_channel_handler.cpp} (63%) rename src/client/{sensor_manager_handler.h => sensor_manager_channel_handler.h} (85%) rename src/client/{sensor_provider_handler.cpp => sensor_provider_channel_handler.cpp} (66%) rename src/client/{sensor_provider_handler.h => sensor_provider_channel_handler.h} (83%) diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index b2917b2..ee783f0 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -27,6 +27,8 @@ #include #include +#include "sensor_manager_channel_handler.h" + #define SIZE_STR_SENSOR_ALL 27 using namespace sensor; @@ -170,7 +172,7 @@ bool sensor_manager::init(void) m_client = new(std::nothrow) ipc::ipc_client(SENSOR_CHANNEL_PATH); retvm_if(!m_client, false, "Failed to allocate memory"); - m_handler = new(std::nothrow) sensor_manager_handler(this); + m_handler = new(std::nothrow) channel_handler(this); if (!m_handler) { delete m_client; m_client = NULL; diff --git a/src/client/sensor_manager.h b/src/client/sensor_manager.h index d0fabf8..a2409b4 100644 --- a/src/client/sensor_manager.h +++ b/src/client/sensor_manager.h @@ -29,7 +29,6 @@ #include "sensor_internal.h" #include "sensor_provider.h" -#include "sensor_manager_handler.h" namespace sensor { @@ -61,7 +60,7 @@ public: void remove_sensor_removed_cb(sensord_removed_cb cb); private: - typedef std::vector sensor_list_t; + class channel_handler; bool init(void); void deinit(void); @@ -80,9 +79,9 @@ private: ipc::channel *m_channel; ipc::event_loop m_loop; std::atomic m_connected; - sensor_manager_handler *m_handler; + channel_handler *m_handler; - sensor_list_t m_sensors; + std::vector m_sensors; }; } diff --git a/src/client/sensor_manager_handler.cpp b/src/client/sensor_manager_channel_handler.cpp similarity index 63% rename from src/client/sensor_manager_handler.cpp rename to src/client/sensor_manager_channel_handler.cpp index 5ba2acb..97ffd7b 100644 --- a/src/client/sensor_manager_handler.cpp +++ b/src/client/sensor_manager_channel_handler.cpp @@ -17,7 +17,7 @@ * */ -#include "sensor_manager_handler.h" +#include "sensor_manager_channel_handler.h" #include #include @@ -25,22 +25,22 @@ using namespace sensor; -sensor_manager_handler::sensor_manager_handler(sensor_manager *manager) +sensor_manager::channel_handler::channel_handler(sensor_manager *manager) : m_manager(manager) { } -void sensor_manager_handler::connected(ipc::channel *ch) +void sensor_manager::channel_handler::connected(ipc::channel *ch) { } -void sensor_manager_handler::disconnected(ipc::channel *ch) +void sensor_manager::channel_handler::disconnected(ipc::channel *ch) { /* If channel->disconnect() is not explicitly called, it will be restored */ m_manager->restore(); } -void sensor_manager_handler::read(ipc::channel *ch, ipc::message &msg) +void sensor_manager::channel_handler::read(ipc::channel *ch, ipc::message &msg) { switch (msg.header()->type) { case CMD_MANAGER_SENSOR_ADDED: @@ -52,15 +52,15 @@ void sensor_manager_handler::read(ipc::channel *ch, ipc::message &msg) } } -void sensor_manager_handler::read_complete(ipc::channel *ch) +void sensor_manager::channel_handler::read_complete(ipc::channel *ch) { } -void sensor_manager_handler::error_caught(ipc::channel *ch, int error) +void sensor_manager::channel_handler::error_caught(ipc::channel *ch, int error) { } -void sensor_manager_handler::on_sensor_added(ipc::channel *ch, ipc::message &msg) +void sensor_manager::channel_handler::on_sensor_added(ipc::channel *ch, ipc::message &msg) { ret_if(msg.header()->err < OP_SUCCESS); @@ -77,7 +77,7 @@ void sensor_manager_handler::on_sensor_added(ipc::channel *ch, ipc::message &msg } } -void sensor_manager_handler::on_sensor_removed(ipc::channel *ch, ipc::message &msg) +void sensor_manager::channel_handler::on_sensor_removed(ipc::channel *ch, ipc::message &msg) { ret_if(msg.header()->err < 0); char uri[NAME_MAX] = {0, }; @@ -92,22 +92,22 @@ void sensor_manager_handler::on_sensor_removed(ipc::channel *ch, ipc::message &m } } -void sensor_manager_handler::add_sensor_added_cb(sensord_added_cb cb, void *user_data) +void sensor_manager::channel_handler::add_sensor_added_cb(sensord_added_cb cb, void *user_data) { m_sensor_added_callbacks.emplace(cb, user_data); } -void sensor_manager_handler::remove_sensor_added_cb(sensord_added_cb cb) +void sensor_manager::channel_handler::remove_sensor_added_cb(sensord_added_cb cb) { m_sensor_added_callbacks.erase(cb); } -void sensor_manager_handler::add_sensor_removed_cb(sensord_removed_cb cb, void *user_data) +void sensor_manager::channel_handler::add_sensor_removed_cb(sensord_removed_cb cb, void *user_data) { m_sensor_removed_callbacks.emplace(cb, user_data); } -void sensor_manager_handler::remove_sensor_removed_cb(sensord_removed_cb cb) +void sensor_manager::channel_handler::remove_sensor_removed_cb(sensord_removed_cb cb) { m_sensor_removed_callbacks.erase(cb); } diff --git a/src/client/sensor_manager_handler.h b/src/client/sensor_manager_channel_handler.h similarity index 85% rename from src/client/sensor_manager_handler.h rename to src/client/sensor_manager_channel_handler.h index 4f1ac73..2bbc4c2 100644 --- a/src/client/sensor_manager_handler.h +++ b/src/client/sensor_manager_channel_handler.h @@ -17,21 +17,21 @@ * */ -#ifndef __SENSOR_MANAGER_HANDLER__ -#define __SENSOR_MANAGER_HANDLER__ +#ifndef __SENSOR_MANAGER_CHANNEL_HANDLER__ +#define __SENSOR_MANAGER_CHANNEL_HANDLER__ #include +#include #include #include namespace sensor { -class sensor_manager; - -class sensor_manager_handler : public ipc::channel_handler +class sensor_manager::channel_handler : public ipc::channel_handler { public: - sensor_manager_handler(sensor_manager *manager); + channel_handler(sensor_manager *manager); + void connected(ipc::channel *ch); void disconnected(ipc::channel *ch); void read(ipc::channel *ch, ipc::message &msg); @@ -58,4 +58,4 @@ private: } -#endif /* __SENSOR_MANAGER_HANDLER__ */ +#endif /* __SENSOR_MANAGER_CHANNEL_HANDLER__ */ diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index b07fec5..d38049a 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -26,7 +26,7 @@ #include #include -#include "sensor_provider_handler.h" +#include "sensor_provider_channel_handler.h" using namespace sensor; @@ -49,7 +49,7 @@ bool sensor_provider::init(const char *uri) m_client = new(std::nothrow) ipc::ipc_client(SENSOR_CHANNEL_PATH); retvm_if(!m_client, false, "Failed to allocate memory"); - m_handler = new(std::nothrow) sensor_provider_handler(this); + m_handler = new(std::nothrow) channel_handler(this); if (!m_handler) { delete m_client; return false; diff --git a/src/client/sensor_provider.h b/src/client/sensor_provider.h index 7fc4429..e30e617 100644 --- a/src/client/sensor_provider.h +++ b/src/client/sensor_provider.h @@ -30,8 +30,6 @@ #include #include -#include "sensor_provider_handler.h" - namespace sensor { class sensor_provider { @@ -53,6 +51,8 @@ public: int publish(sensor_data_t *data, int len); private: + class channel_handler; + bool init(const char *uri); void deinit(void); @@ -66,7 +66,7 @@ private: ipc::ipc_client *m_client; ipc::channel *m_channel; ipc::event_loop m_loop; - sensor_provider_handler *m_handler; + channel_handler *m_handler; std::atomic m_connected; }; diff --git a/src/client/sensor_provider_handler.cpp b/src/client/sensor_provider_channel_handler.cpp similarity index 66% rename from src/client/sensor_provider_handler.cpp rename to src/client/sensor_provider_channel_handler.cpp index 14fa3a1..a537546 100644 --- a/src/client/sensor_provider_handler.cpp +++ b/src/client/sensor_provider_channel_handler.cpp @@ -17,7 +17,7 @@ * */ -#include "sensor_provider_handler.h" +#include "sensor_provider_channel_handler.h" #include #include @@ -25,7 +25,7 @@ using namespace sensor; -sensor_provider_handler::sensor_provider_handler(sensor_provider *provider) +sensor_provider::channel_handler::channel_handler(sensor_provider *provider) : m_provider(provider) , m_start_cb(NULL) , m_stop_cb(NULL) @@ -36,18 +36,18 @@ sensor_provider_handler::sensor_provider_handler(sensor_provider *provider) { } -void sensor_provider_handler::connected(ipc::channel *ch) +void sensor_provider::channel_handler::connected(ipc::channel *ch) { _I("Connected"); } -void sensor_provider_handler::disconnected(ipc::channel *ch) +void sensor_provider::channel_handler::disconnected(ipc::channel *ch) { /* TODO */ /* m_provider->restore(); */ } -void sensor_provider_handler::read(ipc::channel *ch, ipc::message &msg) +void sensor_provider::channel_handler::read(ipc::channel *ch, ipc::message &msg) { switch (msg.type()) { case CMD_PROVIDER_START: @@ -66,27 +66,27 @@ void sensor_provider_handler::read(ipc::channel *ch, ipc::message &msg) } } -void sensor_provider_handler::read_complete(ipc::channel *ch) +void sensor_provider::channel_handler::read_complete(ipc::channel *ch) { } -void sensor_provider_handler::error_caught(ipc::channel *ch, int error) +void sensor_provider::channel_handler::error_caught(ipc::channel *ch, int error) { } -void sensor_provider_handler::set_start_cb(sensord_provider_start_cb cb, void *user_data) +void sensor_provider::channel_handler::set_start_cb(sensord_provider_start_cb cb, void *user_data) { m_start_cb = cb; m_start_user_data = user_data; } -void sensor_provider_handler::set_stop_cb(sensord_provider_stop_cb cb, void *user_data) +void sensor_provider::channel_handler::set_stop_cb(sensord_provider_stop_cb cb, void *user_data) { m_stop_cb = cb; m_stop_user_data = user_data; } -void sensor_provider_handler::set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data) +void sensor_provider::channel_handler::set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data) { m_set_interval_cb = cb; m_set_interval_user_data = user_data; diff --git a/src/client/sensor_provider_handler.h b/src/client/sensor_provider_channel_handler.h similarity index 83% rename from src/client/sensor_provider_handler.h rename to src/client/sensor_provider_channel_handler.h index 16bf479..efe5ce5 100644 --- a/src/client/sensor_provider_handler.h +++ b/src/client/sensor_provider_channel_handler.h @@ -17,20 +17,19 @@ * */ -#ifndef __SENSOR_PROVIDER_HANDLER__ -#define __SENSOR_PROVIDER_HANDLER__ +#ifndef __SENSOR_PROVIDER_CHANNEL_HANDLER__ +#define __SENSOR_PROVIDER_CHANNEL_HANDLER__ -#include #include +#include +#include "sensor_provider.h" namespace sensor { -class sensor_provider; - -class sensor_provider_handler : public ipc::channel_handler +class sensor_provider::channel_handler : public ipc::channel_handler { public: - sensor_provider_handler(sensor_provider *provider); + channel_handler(sensor_provider *provider); void connected(ipc::channel *ch); void disconnected(ipc::channel *ch); @@ -57,4 +56,4 @@ private: } -#endif /* __SENSOR_PROVIDER_HANDLER__ */ +#endif /* __SENSOR_PROVIDER_CHANNEL_HANDLER__ */ -- 2.7.4 From 6a16921a7f899af99fb8034e8e4373cc0e69437f Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 26 Apr 2017 16:21:57 +0900 Subject: [PATCH 05/16] sensord: change return type from bool to int for checking errors Change-Id: I0b232061df9ed8dd0a4297713e887c7f345a7de4 Signed-off-by: kibak.yoon --- src/client/sensor_internal.cpp | 6 +++--- src/client/sensor_provider.cpp | 6 +++--- src/client/sensor_provider.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/client/sensor_internal.cpp b/src/client/sensor_internal.cpp index 1a5b0b7..31af7d6 100644 --- a/src/client/sensor_internal.cpp +++ b/src/client/sensor_internal.cpp @@ -617,13 +617,13 @@ API int sensord_add_provider(sensord_provider_h provider) int ret; sensor_provider *p = static_cast(provider); - if (!p->connect()) - return OP_ERROR; + ret = p->connect(); + retv_if(ret < 0, ret); ret = manager.add_sensor(p); if (ret < 0) { p->disconnect(); - return OP_ERROR; + return ret; } return OP_SUCCESS; diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index d38049a..abfd9e1 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -119,10 +119,10 @@ int sensor_provider::send_sensor_info(sensor_info *info) return OP_SUCCESS; } -bool sensor_provider::connect(void) +int sensor_provider::connect(void) { m_channel = m_client->connect(m_handler, &m_loop); - retvm_if(!m_channel, false, "Failed to connect to server"); + retvm_if(!m_channel, -EIO, "Failed to connect to server"); /* serialize and send sensor info */ send_sensor_info(get_sensor_info()); @@ -136,7 +136,7 @@ bool sensor_provider::connect(void) _I("Provider URI[%s]", get_uri()); - return true; + return OP_SUCCESS; } bool sensor_provider::disconnect(void) diff --git a/src/client/sensor_provider.h b/src/client/sensor_provider.h index e30e617..b499995 100644 --- a/src/client/sensor_provider.h +++ b/src/client/sensor_provider.h @@ -40,7 +40,7 @@ public: const char *get_uri(void); sensor_info *get_sensor_info(void); - bool connect(void); + int connect(void); bool disconnect(void); void restore(void); -- 2.7.4 From 572ea8b3b6cf756c22a980e297c8412ae62385dd Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 26 Apr 2017 19:54:08 +0900 Subject: [PATCH 06/16] sensord: add NULL check when callbacks is called Change-Id: Ib2937c0e7ba4656c246b29a3addb1163d4494ef5 Signed-off-by: kibak.yoon --- src/client/sensor_provider_channel_handler.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/client/sensor_provider_channel_handler.cpp b/src/client/sensor_provider_channel_handler.cpp index a537546..52cc6bf 100644 --- a/src/client/sensor_provider_channel_handler.cpp +++ b/src/client/sensor_provider_channel_handler.cpp @@ -51,16 +51,18 @@ void sensor_provider::channel_handler::read(ipc::channel *ch, ipc::message &msg) { switch (msg.type()) { case CMD_PROVIDER_START: - m_start_cb(m_provider, m_start_user_data); + if (m_start_cb) + m_start_cb(m_provider, m_start_user_data); break; case CMD_PROVIDER_STOP: - m_stop_cb(m_provider, m_stop_user_data); + if (m_stop_cb) + m_stop_cb(m_provider, m_stop_user_data); break; case CMD_PROVIDER_ATTR_INT: cmd_provider_attr_int_t buf; msg.disclose((char *)&buf); - if (buf.attribute == SENSORD_ATTRIBUTE_INTERVAL) + if (buf.attribute == SENSORD_ATTRIBUTE_INTERVAL && m_set_interval_cb) m_set_interval_cb(m_provider, buf.value, m_set_interval_user_data); break; } -- 2.7.4 From d624758ea385f8f8a255687aa2e44340a1f79e79 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 26 Apr 2017 22:01:39 +0900 Subject: [PATCH 07/16] sensord: check validation of sensor URI to create a sensor provider - URI format : http:///sensor// - Apps are not allowed to create a sensor of the type in sensor_type_e. - Allowed: - "http://example.org/sensor/mysensor_type/mysensor" - "http://developer.samsung.com/sensor/mysensor_type/mysensor" - Disallowed: - "http://tizen.org/sensor/accelerometer/mysensor" (predefined type) - "http://tizen.org/mysensor/accelerometer/mysensor" (syntax error) - "http:/tizen.org/accelerometer/mysensor" (syntax error) - "http:/example.org/sensor/mysensor/mysensor/mysensor" (syntax error) - test command $ sensorctl test auto provider_uri Change-Id: I0ce36a9c2a5a7953b975917962d50cf39c863bb3 Signed-off-by: kibak.yoon --- src/client/sensor_internal.cpp | 10 ++++++ src/sensorctl/testcase/unit_client.cpp | 6 ++-- src/sensorctl/testcase/unit_provider.cpp | 57 ++++++++++++++++++++++++++++++++ src/shared/sensor_types_private.h | 28 ++++++++++++++++ 4 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/sensorctl/testcase/unit_provider.cpp create mode 100644 src/shared/sensor_types_private.h diff --git a/src/client/sensor_internal.cpp b/src/client/sensor_internal.cpp index 31af7d6..dcd497a 100644 --- a/src/client/sensor_internal.cpp +++ b/src/client/sensor_internal.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -28,6 +29,7 @@ #include #include #include +#include #define CONVERT_OPTION_PAUSE_POLICY(option) ((option) ^ 0b11) @@ -592,6 +594,14 @@ API int sensord_create_provider(const char *uri, sensord_provider_h *provider) { retvm_if(!provider, -EINVAL, "Invalid paramter"); + std::string str_uri(uri); + retvm_if(str_uri.find(PREDEFINED_TYPE_URI) != std::string::npos, + -EINVAL, "Invalid URI format[%s]", uri); + + static std::regex uri_regex(SENSOR_URI_REGEX, std::regex::optimize); + retvm_if(!std::regex_match(uri, uri_regex), + -EINVAL, "Invalid URI format[%s]", uri); + sensor_provider *p; p = new(std::nothrow) sensor_provider(uri); diff --git a/src/sensorctl/testcase/unit_client.cpp b/src/sensorctl/testcase/unit_client.cpp index 661e4a0..28900bb 100644 --- a/src/sensorctl/testcase/unit_client.cpp +++ b/src/sensorctl/testcase/unit_client.cpp @@ -174,7 +174,7 @@ static gboolean publish(gpointer gdata) /* TODO: change it from manual test to auto-test */ TESTCASE(sensor_api_mysensor_provider, provider_p_1) { - const char *uri = "http://example.org/mysensor/mysensor"; + const char *uri = "http://example.org/sensor/mysensor/mysensor"; const char *name = "mysensor"; const char *vendor = "tizen"; @@ -220,7 +220,7 @@ TESTCASE(sensor_api_mysensor_provider, provider_p_1) TESTCASE(sensor_api_mysensor_listener, listener_p_1) { - const char *uri = "http://example.org/mysensor/mysensor"; + const char *uri = "http://example.org/sensor/mysensor/mysensor"; int err; bool ret; int handle; @@ -259,7 +259,7 @@ TESTCASE(sensor_api_mysensor_listener, listener_p_1) static void add_mysensor(void) { - const char *uri = "http://example.org/mysensor/mysensor"; + const char *uri = "http://example.org/sensor/mysensor/mysensor"; const char *name = "mysensor"; const char *vendor = "tizen"; diff --git a/src/sensorctl/testcase/unit_provider.cpp b/src/sensorctl/testcase/unit_provider.cpp new file mode 100644 index 0000000..1914652 --- /dev/null +++ b/src/sensorctl/testcase/unit_provider.cpp @@ -0,0 +1,57 @@ +/* + * sensorctl + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "log.h" +#include "mainloop.h" +#include "test_bench.h" + +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"; + + err = sensord_create_provider(uri_p1, &provider); + EXPECT_EQ(err, 0); + err = sensord_create_provider(uri_p2, &provider); + EXPECT_EQ(err, 0); + err = sensord_create_provider(uri_n1, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n2, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n3, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n4, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n5, &provider); + EXPECT_EQ(err, -EINVAL); + + return true; +} diff --git a/src/shared/sensor_types_private.h b/src/shared/sensor_types_private.h new file mode 100644 index 0000000..17fcd02 --- /dev/null +++ b/src/shared/sensor_types_private.h @@ -0,0 +1,28 @@ +/* + * sensord + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef __SENSOR_TYPES_PRIVATE__ +#define __SENSOR_TYPES_PRIVATE__ + +#define URI_REGEX(CATEGORY) R"~(^http:\/\/[\w-]+(\.[\w-]+)*\/)~" CATEGORY R"~(\/[\w-]+(\.[\w-]+)*(\/[\w-]+(\.[\w-]+)*)$)~" +#define SENSOR_URI_REGEX URI_REGEX("sensor") + +#define PREDEFINED_TYPE_URI "http://tizen.org/sensor/" + +#endif /* __SENSOR_TYPES_PRIVATE__ */ -- 2.7.4 From 508058e85db8f2032b5f99dfab2ffd60d530b709 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 27 Apr 2017 12:43:37 +0900 Subject: [PATCH 08/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 09/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 10/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 11/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 12/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 13/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 14/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 15/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 16/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