sensord: send accuracy changed event to listeners 63/134063/3
authorkibak.yoon <kibak.yoon@samsung.com>
Wed, 14 Jun 2017 10:13:14 +0000 (19:13 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Wed, 14 Jun 2017 10:30:58 +0000 (19:30 +0900)
Change-Id: Idfcf4217ef2694578857c032e60ad55950198452
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/server/sensor_listener_proxy.cpp
src/server/sensor_listener_proxy.h

index 7c20c90..51b38a9 100644 (file)
@@ -38,6 +38,7 @@ sensor_listener_proxy::sensor_listener_proxy(uint32_t id,
 , m_passive(false)
 , m_pause_policy(SENSORD_PAUSE_ALL)
 , m_axis_orientation(SENSORD_AXIS_DISPLAY_ORIENTED)
+, m_last_accuracy(SENSOR_ACCURACY_UNDEFINED)
 {
 }
 
@@ -55,13 +56,41 @@ int sensor_listener_proxy::update(const char *uri, ipc::message *msg)
 {
        retv_if(!m_ch || !m_ch->is_connected(), OP_CONTINUE);
 
+       update_event(msg);
+       update_accuracy(msg);
+
+       return OP_CONTINUE;
+}
+
+void sensor_listener_proxy::update_event(ipc::message *msg)
+{
        /* TODO: check axis orientation */
        msg->header()->type = CMD_LISTENER_EVENT;
        msg->header()->err = OP_SUCCESS;
 
        m_ch->send(msg);
+}
 
-       return OP_CONTINUE;
+void sensor_listener_proxy::update_accuracy(ipc::message *msg)
+{
+       sensor_data_t *data = reinterpret_cast<sensor_data_t *>(msg->body());
+
+       if (data->accuracy == m_last_accuracy)
+               return;
+
+       m_last_accuracy = data->accuracy;
+
+       sensor_data_t acc_data;
+       acc_data.accuracy = m_last_accuracy;
+
+       ipc::message *acc_msg = new(std::nothrow) ipc::message();
+       retm_if(!acc_msg, "Failed to allocate memory");
+
+       acc_msg->header()->type = CMD_LISTENER_ACC_EVENT;
+       acc_msg->header()->err = OP_SUCCESS;
+       acc_msg->enclose(&acc_data, sizeof(acc_data));
+
+       m_ch->send(acc_msg);
 }
 
 int sensor_listener_proxy::start(void)
index 05bc453..30e3976 100644 (file)
@@ -52,6 +52,9 @@ public:
        std::string get_required_privileges(void);
 
 private:
+       void update_event(ipc::message *msg);
+       void update_accuracy(ipc::message *msg);
+
        uint32_t m_id;
        std::string m_uri;
 
@@ -61,6 +64,7 @@ private:
        bool m_passive;
        int m_pause_policy;
        int m_axis_orientation;
+       int m_last_accuracy;
 };
 
 }