sensord: support get_data() API simply 89/125089/1
authorkibak.yoon <seseki17@gmail.com>
Thu, 13 Apr 2017 16:07:36 +0000 (01:07 +0900)
committerkibak.yoon <seseki17@gmail.com>
Thu, 13 Apr 2017 16:07:36 +0000 (01:07 +0900)
- [TBD] it doesn't consider whether the value is normal or not.

Change-Id: I5b5517c82d8282cf433fe6b7eb4b9a2956346d0b
Signed-off-by: kibak.yoon <seseki17@gmail.com>
src/server/fusion_sensor_handler.cpp
src/server/server_channel_handler.cpp
src/shared/command_types.h

index 05ab314..18ecd71 100644 (file)
@@ -214,8 +214,9 @@ int fusion_sensor_handler::set_attribute(sensor_observer *ob, int32_t attr, cons
 
 int fusion_sensor_handler::get_data(sensor_data_t **data, int *len)
 {
-       /* TODO */
-       return OP_SUCCESS;
+       retv_if(!m_sensor, -EINVAL);
+
+       return m_sensor->get_data(data, len);
 }
 
 int fusion_sensor_handler::flush(sensor_observer *ob)
index 86abf93..6fad489 100644 (file)
@@ -251,12 +251,35 @@ int server_channel_handler::listener_attr_str(channel *ch, message &msg)
 
 int server_channel_handler::listener_get_data(channel *ch, message &msg)
 {
-       auto it = m_listeners.find(ch);
+       ipc::message reply;
+       cmd_listener_get_data_t buf;
+       sensor_data_t *data;
+       int len;
+       uint32_t id;
+
+       msg.disclose((char *)&buf);
+       id = buf.listener_id;
+
+       auto it = m_listeners.find(id);
        retv_if(it == m_listeners.end(), -EINVAL);
-       retvm_if(!has_privileges(ch->get_fd(), m_listeners[ch]->get_required_privileges()),
+       retvm_if(!has_privileges(ch->get_fd(), m_listeners[id]->get_required_privileges()),
                        -EACCES, "Permission denied");
 
-       return send_reply(ch, OP_ERROR);
+       int ret = m_listeners[id]->get_data(&data, &len);
+       retv_if(ret < 0, ret);
+
+       memcpy(&buf.data, data, sizeof(sensor_data_t));
+       buf.len = sizeof(sensor_data_t);
+
+       reply.enclose((const char *)&buf, sizeof(cmd_listener_get_data_t));
+       reply.header()->err = OP_SUCCESS;
+       reply.header()->type = CMD_LISTENER_GET_DATA;
+
+       ch->send_sync(&reply);
+
+       free(data);
+
+       return OP_SUCCESS;
 }
 
 int server_channel_handler::provider_connect(channel *ch, message &msg)
index 6b5e0c6..a75ef6e 100644 (file)
@@ -94,7 +94,7 @@ typedef struct  {
 typedef struct {
        int listener_id;
        int len;
-       char data[0];
+       sensor_data_t data;
 } cmd_listener_get_data_t;
 
 typedef struct {