sensor: add internal callback function for sensor recorder 36/130236/2
authorkibak.yoon <kibak.yoon@samsung.com>
Fri, 19 May 2017 12:55:34 +0000 (21:55 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Fri, 19 May 2017 13:53:00 +0000 (22:53 +0900)
Change-Id: I5322833c481184097c6b24a03b03fb4cb040f688
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/sensor_recorder.cpp

index 9eeaf77..c8cf0a1 100644 (file)
@@ -182,6 +182,25 @@ int sensor_recorder_query_set_time(sensor_recorder_query_h query, sensor_recorde
        return convert_error(ret);
 }
 
+struct _sensor_rec_info {
+       sensor_type_e type;
+       sensor_recorder_data_cb cb;
+       void *user_data;
+};
+
+static bool sensor_rec_data_callback(const char* subject, ctx_sensor_rec_data_h data,
+               int remains, ctx_sensor_rec_error_e error, void *user_data)
+{
+       _sensor_rec_info *info = (_sensor_rec_info *)user_data;
+
+       bool ret = info->cb(info->type, data, remains, convert_error(error), info->user_data);
+
+       if (remains == 0 || ret == false)
+               delete info;
+
+       return ret;
+}
+
 int sensor_recorder_read(sensor_type_e type, sensor_recorder_query_h query, sensor_recorder_data_cb cb, void *user_data)
 {
        int ret = SENSOR_ERROR_NONE;
@@ -189,8 +208,16 @@ int sensor_recorder_read(sensor_type_e type, sensor_recorder_query_h query, sens
        if (sensor_keys.find(type) == sensor_keys.end())
                return SENSOR_ERROR_INVALID_PARAMETER;
 
+       _sensor_rec_info *info = new(std::nothrow) _sensor_rec_info;
+       if (!info)
+               return SENSOR_ERROR_OUT_OF_MEMORY;
+
+       info->type = type;
+       info->cb = cb;
+       info->user_data = user_data;
+
        ret = ctx_sensor_rec_read(sensor_keys[type].c_str(),
-                       reinterpret_cast<ctx_sensor_rec_query_h>(query), (ctx_sensor_rec_data_cb)cb, user_data);
+                       reinterpret_cast<ctx_sensor_rec_query_h>(query), sensor_rec_data_callback, info);
 
        return convert_error(ret);
 }
@@ -202,8 +229,16 @@ int sensor_recorder_read_sync(sensor_type_e type, sensor_recorder_query_h query,
        if (sensor_keys.find(type) == sensor_keys.end())
                return SENSOR_ERROR_INVALID_PARAMETER;
 
+       _sensor_rec_info *info = new(std::nothrow) _sensor_rec_info;
+       if (!info)
+               return SENSOR_ERROR_OUT_OF_MEMORY;
+
+       info->type = type;
+       info->cb = cb;
+       info->user_data = user_data;
+
        ret = ctx_sensor_rec_read_sync(sensor_keys[type].c_str(),
-                       reinterpret_cast<ctx_sensor_rec_query_h>(query), (ctx_sensor_rec_data_cb)cb, user_data);
+                       reinterpret_cast<ctx_sensor_rec_query_h>(query), sensor_rec_data_callback, info);
 
        return convert_error(ret);
 }