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;
*/
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.
*/
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.
*/
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.
#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 { \
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;
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;
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");