summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhay Agarwal <ay.agarwal@samsung.com>2019-09-30 20:11:07 +0900
committersaerome.kim <saerome.kim@samsung.com>2019-09-30 21:38:03 +0900
commit2c1ce84dc57579d98be803be3431783357f07210 (patch)
tree0a587f083d3f46e3ec5f37dcea64be85898cd8f9
parentb035ab86291dfe57cc407341409fbbeafc111202 (diff)
downloaduser-awareness-2c1ce84dc57579d98be803be3431783357f07210.tar.gz
user-awareness-2c1ce84dc57579d98be803be3431783357f07210.tar.bz2
user-awareness-2c1ce84dc57579d98be803be3431783357f07210.zip
Send only device handle instead of list during sensor callback
Change-Id: I81cb02c458ffe49da531bb70d336ff3e041e0dfe Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
-rw-r--r--include/user-awareness.h4
-rw-r--r--src/user-awareness-monitors.c90
-rw-r--r--test/uat-detections.c14
3 files changed, 39 insertions, 69 deletions
diff --git a/include/user-awareness.h b/include/user-awareness.h
index 7b98ec3..20abf9f 100644
--- a/include/user-awareness.h
+++ b/include/user-awareness.h
@@ -368,7 +368,7 @@ typedef void (*ua_scan_completed_cb)(
* @param[in] sensor Sensor type, In case monitor has more than one sensor and detection
* mode is not #UA_DETECT_MODE_ANY_SENSOR, sensor will be set to last sensor which
* reported user presence before invoking callback.
- * @param[in] device_handles The list of device handles on which user is detected.
+ * @param[in] device_handle The first device handle on which sensor is detected.
* @param[in] user_data The user data passed in ua_monitor_start_absence_detection()
*
* @exception
@@ -381,7 +381,7 @@ typedef void (*ua_presence_detected_cb)(
int result,
ua_monitor_h handle,
ua_sensor_e sensor,
- GSList *device_handles,
+ ua_device_h device_handle,
void *user_data);
/**
diff --git a/src/user-awareness-monitors.c b/src/user-awareness-monitors.c
index 7a567da..9f1dc24 100644
--- a/src/user-awareness-monitors.c
+++ b/src/user-awareness-monitors.c
@@ -330,36 +330,45 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor,
}
static void __ua_monitor_send_sensor_presence_cb(ua_monitor_s *monitor,
- ua_user_state_info_s *user_state, ua_sensor_e bitmask)
+ ua_device_h device_handle, ua_sensor_e bitmask)
{
FUNC_ENTRY;
- unsigned int dev_bitmask = 0;
- GSList *l = 0;
- GSList *devices = 0;
- ua_dev_info_s *dev = 0;
+ switch (monitor->presence_mode) {
+ case UA_DETECT_MODE_ALL_SENSOR:
+ /*
+ * Sends presence if it is detected by all sensors irrespective of device/user i.e if
+ * presence will be detected by device 1 for sensor 1 and by device 2 for sensor 2 then
+ * send presence detection callback to application. This will make sure that each sensor is
+ * detected at least one device from registered devices list.
+ */
+ if (((bitmask == UA_SENSOR_BLE) && (monitor->sensor_bitmask & UA_SENSOR_WIFI))
+ || ((bitmask == UA_SENSOR_WIFI) && (monitor->sensor_bitmask & UA_SENSOR_BLE)))
+ monitor->presence_detected_bitmask |= (UA_SENSOR_BLE | UA_SENSOR_WIFI);
+ else
+ monitor->presence_detected_bitmask |= bitmask;
- if (!user_state) {
- monitor->presence_cb(UA_ERROR_NONE, monitor,
- bitmask, devices, monitor->user_data);
- FUNC_EXIT;
- return;
- }
+ UA_INFO("UA_DETECT_MODE_ALL_SENSOR [%d][%d]",
+ bitmask, monitor->presence_detected_bitmask);
- for (l = user_state->found_devices; l; l = g_slist_next(l)) {
- dev = (ua_dev_info_s *)l->data;
- if(!dev)
- continue;
+ break;
- UA_DBG("device id [%s], dev type [%u]", dev->device_id, dev->type);
- dev_bitmask = _ua_dev_type_to_sensor(dev->type);
- if (dev_bitmask)
- devices = g_slist_prepend(devices, dev);
- }
+ case UA_DETECT_MODE_ANY_SENSOR:
+ if ((monitor->presence_detected_bitmask & bitmask) == 0)
+ if (monitor->presence_cb)
+ monitor->presence_cb(UA_ERROR_NONE, monitor,
+ bitmask, device_handle, monitor->user_data);
- monitor->presence_cb(UA_ERROR_NONE, monitor,
- bitmask, devices, monitor->user_data);
+ monitor->presence_detected_bitmask |= bitmask;
+
+ UA_INFO("UA_DETECT_MODE_ANY_SENSOR [%d][%d]",
+ bitmask, monitor->presence_detected_bitmask);
+
+ break;
+
+ default:
+ UA_WARN("Unexpected detection mode: %d", monitor->presence_mode);
+ }
- g_slist_free(devices);
FUNC_EXIT;
return;
}
@@ -418,40 +427,7 @@ static void __ua_sensor_presence_detected(ua_monitor_s *monitor,
return;
}
- switch (monitor->presence_mode) {
- case UA_DETECT_MODE_ALL_SENSOR:
- /*
- * Sends presence if it is detected by all sensors irrespective of device/user i.e if
- * presence will be detected by device 1 for sensor 1 and by device 2 for sensor 2 then
- * send presence detection callback to application. This will make sure that each sensor is
- * detected at least one device from registered devices list.
- */
- if (((bitmask == UA_SENSOR_BLE) && (monitor->sensor_bitmask & UA_SENSOR_WIFI))
- || ((bitmask == UA_SENSOR_WIFI) && (monitor->sensor_bitmask & UA_SENSOR_BLE)))
- monitor->presence_detected_bitmask |= (UA_SENSOR_BLE | UA_SENSOR_WIFI);
- else
- monitor->presence_detected_bitmask |= bitmask;
-
- UA_INFO("UA_DETECT_MODE_ALL_SENSOR [%d][%d]",
- bitmask, monitor->presence_detected_bitmask);
-
- break;
-
- case UA_DETECT_MODE_ANY_SENSOR:
- if ((monitor->presence_detected_bitmask & bitmask) == 0)
- if (monitor->presence_cb)
- __ua_monitor_send_sensor_presence_cb(monitor, user_state, bitmask);
-
- monitor->presence_detected_bitmask |= bitmask;
-
- UA_INFO("UA_DETECT_MODE_ANY_SENSOR [%d][%d]",
- bitmask, monitor->presence_detected_bitmask);
-
- break;
-
- default:
- UA_WARN("Unexpected detection mode: %d", monitor->presence_mode);
- }
+ __ua_monitor_send_sensor_presence_cb(monitor, device_handle, bitmask);
if (account && user_state) {
__ua_monitor_send_user_presence_cb(monitor, user_state);
diff --git a/test/uat-detections.c b/test/uat-detections.c
index 389f879..03cf336 100644
--- a/test/uat-detections.c
+++ b/test/uat-detections.c
@@ -48,11 +48,9 @@ static char g_presence_type[MENU_DATA_SIZE + 1] = "2"; /**< Selected PRESENCE ty
static char g_absence_type[MENU_DATA_SIZE + 1] = "2"; /**< Selected ABSENCE type */
static char g_scan_time_multiplier[MENU_DATA_SIZE + 1] = {0,}; /**< 10ms * what number */
-static void __sensor_presence_detected_foreach_devices(gpointer data,
- gpointer user_data)
+static void __sensor_presence_detected_device(ua_device_h device_handle)
{
int ret;
- ua_device_h device_handle = (ua_device_h)data;
ua_mac_type_e mac_type;
char *mac = NULL;
@@ -73,7 +71,7 @@ static void __sensor_presence_detected_foreach_devices(gpointer data,
}
static void __sensor_presence_detected_cb(int result, ua_monitor_h monitor,
- ua_sensor_e sensor, GSList *device_handles, void *user_data)
+ ua_sensor_e sensor, ua_device_h device_handle, void *user_data)
{
char buf[MENU_DATA_SIZE] = {0, };
char final_buf[MENU_DATA_SIZE * 4] = {0, };
@@ -86,16 +84,12 @@ static void __sensor_presence_detected_cb(int result, ua_monitor_h monitor,
if (UA_SENSOR_BLE == (UA_SENSOR_BLE & sensor)) {
msgb("[%s] PRESENCE detected [%s]",
uat_get_sensor_bitmask_str(UA_SENSOR_BLE), uat_get_error_str(result));
- g_slist_foreach(device_handles,
- __sensor_presence_detected_foreach_devices,
- NULL);
+ __sensor_presence_detected_device(device_handle);
}
if (UA_SENSOR_WIFI == (UA_SENSOR_WIFI & sensor)) {
msgb("[%s] PRESENCE detected [%s]",
uat_get_sensor_bitmask_str(UA_SENSOR_WIFI), uat_get_error_str(result));
- g_slist_foreach(device_handles,
- __sensor_presence_detected_foreach_devices,
- NULL);
+ __sensor_presence_detected_device(device_handle);
}
if (UA_SENSOR_LIGHT == (UA_SENSOR_LIGHT & sensor)) {