diff options
author | Abhay Agarwal <ay.agarwal@samsung.com> | 2019-09-30 20:11:07 +0900 |
---|---|---|
committer | saerome.kim <saerome.kim@samsung.com> | 2019-09-30 21:38:03 +0900 |
commit | 2c1ce84dc57579d98be803be3431783357f07210 (patch) | |
tree | 0a587f083d3f46e3ec5f37dcea64be85898cd8f9 | |
parent | b035ab86291dfe57cc407341409fbbeafc111202 (diff) | |
download | user-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.h | 4 | ||||
-rw-r--r-- | src/user-awareness-monitors.c | 90 | ||||
-rw-r--r-- | test/uat-detections.c | 14 |
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)) { |