From: kibak.yoon Date: Fri, 19 May 2017 12:55:34 +0000 (+0900) Subject: sensor: add internal callback function for sensor recorder X-Git-Tag: submit/tizen/20170521.102545^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a7e91ed1c5c1cd686be56109988c4f29f043e643;p=platform%2Fcore%2Fapi%2Fsensor.git sensor: add internal callback function for sensor recorder Change-Id: I5322833c481184097c6b24a03b03fb4cb040f688 Signed-off-by: kibak.yoon --- diff --git a/src/sensor_recorder.cpp b/src/sensor_recorder.cpp index 9eeaf77..c8cf0a1 100644 --- a/src/sensor_recorder.cpp +++ b/src/sensor_recorder.cpp @@ -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(query), (ctx_sensor_rec_data_cb)cb, user_data); + reinterpret_cast(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(query), (ctx_sensor_rec_data_cb)cb, user_data); + reinterpret_cast(query), sensor_rec_data_callback, info); return convert_error(ret); }