Add new APIs related to attribute of sensor listener 80/222880/3 devel/next_tizen
authorBoram Bae <boram21.bae@samsung.com>
Tue, 21 Jan 2020 05:32:25 +0000 (14:32 +0900)
committerBoram Bae <boram21.bae@samsung.com>
Wed, 22 Jan 2020 10:25:01 +0000 (19:25 +0900)
Change-Id: I52fe476b33e31d2d9d2e368613e6b8ecc220a2cf
Signed-off-by: Boram Bae <boram21.bae@samsung.com>
include/sensor.h
include/sensor_private.h
src/sensor.cpp

index 563fe1335fd0d857691a59a515692913e28ea12f..3a6f07eab8c65e6116c00e73ea2f812ab7982d3e 100644 (file)
@@ -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.
index 7d99272bba5eb94298040c4ef5cdb29046495e77..2412a8e96af0703f774d8606b3048e3a559ade20 100644 (file)
@@ -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
index 2be62afe722d007c8f42fa5b378b0ff93cff858e..c7254643719e23315312afb60101fe1f9215fda7 100644 (file)
@@ -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");