Send only device handle instead of list during sensor callback
authorAbhay Agarwal <ay.agarwal@samsung.com>
Mon, 30 Sep 2019 11:11:07 +0000 (20:11 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 30 Sep 2019 12:38:03 +0000 (21:38 +0900)
Change-Id: I81cb02c458ffe49da531bb70d336ff3e041e0dfe
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
include/user-awareness.h
src/user-awareness-monitors.c
test/uat-detections.c

index 7b98ec377d1e3aca455c43897b19aa286881681b..20abf9fde4a432ba72759e9d86ddbebc7cb5f02f 100644 (file)
@@ -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);
 
 /**
index 7a567da4df833dcb799987d410e03c990f740fcd..9f1dc24a12db8cc95155c2227e4de4bee6d447e9 100644 (file)
@@ -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);
index 389f879b0769f5b3db591686f60cc39b4127c1fb..03cf336aa444148de3062c34a16880267ada564f 100644 (file)
@@ -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)) {