From: Boram Bae Date: Tue, 21 Jan 2020 05:32:25 +0000 (+0900) Subject: Add new APIs related to attribute of sensor listener X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bb9ee69dc29911bb95b8b5dfad5aa3ea4d2c0854;p=platform%2Fcore%2Fapi%2Fsensor.git Add new APIs related to attribute of sensor listener Change-Id: I52fe476b33e31d2d9d2e368613e6b8ecc220a2cf Signed-off-by: Boram Bae --- diff --git a/include/sensor.h b/include/sensor.h index 563fe13..3a6f07e 100644 --- a/include/sensor.h +++ b/include/sensor.h @@ -678,6 +678,8 @@ typedef enum See #sensor_axis_e for available attribute values. */ SENSOR_ATTRIBUTE_PAUSE_POLICY, /**< Pause-and-resume policy of sensors.@n See #sensor_pause_e for available attribute values. */ + SENSOR_ATTRIBUTE_INTERVAL = 0x10, + SENSOR_ATTRIBUTE_MAX_BATCH_LATENCY, } sensor_attribute_e; @@ -781,6 +783,7 @@ typedef void (*sensor_events_cb)(sensor_h sensor, sensor_event_s events[], int e */ typedef void (*sensor_accuracy_changed_cb)(sensor_h sensor, unsigned long long timestamp, sensor_data_accuracy_e accuracy, void *data); +typedef void (*sensor_attribute_int_changed_cb)(sensor_h sensor, sensor_attribute_e attribute, int value, void *user_data); /** * @brief Creates a sensor listener. @@ -974,6 +977,9 @@ int sensor_listener_set_accuracy_cb(sensor_listener_h listener, sensor_accuracy_ */ int sensor_listener_unset_accuracy_cb(sensor_listener_h listener); +int sensor_listener_set_attribute_int_cb(sensor_listener_h listener, sensor_attribute_int_changed_cb callback, void *user_data); + +int sensor_listener_unset_attribute_int_cb(sensor_listener_h listener); /** * @brief Reads the current sensor data via a given sensor listener. @@ -1074,6 +1080,7 @@ int sensor_listener_set_max_batch_latency(sensor_listener_h listener, unsigned i */ int sensor_listener_set_attribute_int(sensor_listener_h listener, sensor_attribute_e attribute, int value); +int sensor_listener_get_attribute_int(sensor_listener_h listener, sensor_attribute_e attribute, int *value); /** * @brief Changes the power-saving behavior of a sensor listener. diff --git a/include/sensor_private.h b/include/sensor_private.h index 7d99272..2412a8e 100644 --- a/include/sensor_private.h +++ b/include/sensor_private.h @@ -28,6 +28,8 @@ struct sensor_listener_s { void *user_data; void *accu_callback; void *accu_user_data; + void *attr_int_callback; + void *attr_int_user_data; }; #ifdef __cplusplus diff --git a/src/sensor.cpp b/src/sensor.cpp index 2be62af..c725464 100644 --- a/src/sensor.cpp +++ b/src/sensor.cpp @@ -49,7 +49,7 @@ #define CONVERT_AXIS_ENUM(X) ((X) < 3 ? (X) + 0x81 : (X) - 2) -#define CONVERT_OPTION_PAUSE_POLICY(option) ((option) ^ 0b11) +#define CONVERT_OPTION_TO_PAUSE_POLICY(option) ((option) ^ 0b11) #define WARN_DEPRECATED_SENSOR(X) \ do { \ @@ -608,6 +608,71 @@ int sensor_listener_unset_accuracy_cb(sensor_listener_h listener) return SENSOR_ERROR_NONE; } +static void attribute_int_changed_callback(sensor_t sensor, int attribute, int value, void *data) +{ + sensor_listener_h listener = (sensor_listener_h)data; + + if (!sensor || !listener->attr_int_callback) + return; + + ((sensor_attribute_int_changed_cb)listener->attr_int_callback)(sensor, (sensor_attribute_e)attribute, value, listener->attr_int_user_data); + + return; +} + +int sensor_listener_set_attribute_int_cb(sensor_listener_h listener, sensor_attribute_int_changed_cb callback, void *user_data) +{ + _D("called sensor_register_attribute_int_cb : listener[%p], callback[%p], user_data[%p]", listener, callback, user_data); + + int id; + + if (!listener || !callback) + return SENSOR_ERROR_INVALID_PARAMETER; + + if (listener->magic != SENSOR_LISTENER_MAGIC) + return SENSOR_ERROR_INVALID_PARAMETER; + + id = listener->id; + listener->attr_int_callback = (void *)callback; + listener->attr_int_user_data = user_data; + + if (!sensord_register_attribute_int_changed_cb(id, attribute_int_changed_callback, listener)) { + listener->attr_int_callback = NULL; + listener->attr_int_user_data = NULL; + + return SENSOR_ERROR_OPERATION_FAILED; + } + + _D("success sensor_register_attribute_int_cb"); + + return SENSOR_ERROR_NONE; +} + +int sensor_listener_unset_attribute_int_cb(sensor_listener_h listener) +{ + int id; + + _D("called sensor_unregister_attribute_int_cb : listener[%p]", listener); + + if (!listener) + return SENSOR_ERROR_INVALID_PARAMETER; + + if (listener->magic != SENSOR_LISTENER_MAGIC) + return SENSOR_ERROR_INVALID_PARAMETER; + + id = listener->id; + + if (!sensord_unregister_attribute_int_changed_cb(id)) + return SENSOR_ERROR_OPERATION_FAILED; + + listener->attr_int_callback = NULL; + listener->attr_int_user_data = NULL; + + _D("success sensor_unregister_attribute_int_cb"); + + return SENSOR_ERROR_NONE; +} + int sensor_listener_set_interval(sensor_listener_h listener, unsigned int interval) { int id; @@ -699,6 +764,33 @@ int sensor_listener_set_attribute_int(sensor_listener_h listener, sensor_attribu return SENSOR_ERROR_NONE; } +int sensor_listener_get_attribute_int(sensor_listener_h listener, sensor_attribute_e attribute, int *value) +{ + int id; + int error; + + _D("called sensor_get_attribute_int : listener[%p], attribute[%d]", listener, attribute); + + if (!listener || !value) + return SENSOR_ERROR_INVALID_PARAMETER; + + if (listener->magic != SENSOR_LISTENER_MAGIC) + return SENSOR_ERROR_INVALID_PARAMETER; + + id = listener->id; + + error = sensord_get_attribute_int(id, (int)attribute, value); + + if (error == -EINVAL) + return SENSOR_ERROR_INVALID_PARAMETER; + else if (error != SENSOR_ERROR_NONE) + return SENSOR_ERROR_OPERATION_FAILED; + + _D("success sensor_get_attribute_int"); + + return SENSOR_ERROR_NONE; +} + int sensor_listener_set_option(sensor_listener_h listener, sensor_option_e option) { int id; @@ -713,10 +805,10 @@ int sensor_listener_set_option(sensor_listener_h listener, sensor_option_e optio id = listener->id; - if (sensord_set_attribute_int(id, SENSOR_ATTRIBUTE_PAUSE_POLICY, CONVERT_OPTION_PAUSE_POLICY(option)) < 0) + if (sensord_set_attribute_int(id, SENSOR_ATTRIBUTE_PAUSE_POLICY, CONVERT_OPTION_TO_PAUSE_POLICY(option)) < 0) return SENSOR_ERROR_OPERATION_FAILED; - listener->pause = CONVERT_OPTION_PAUSE_POLICY(option); + listener->pause = CONVERT_OPTION_TO_PAUSE_POLICY(option); _D("success sensor_set_option");