diff options
-rw-r--r-- | include/user-awareness-private.h | 1 | ||||
-rw-r--r-- | include/user-awareness-util.h | 24 | ||||
-rw-r--r-- | packaging/capi-network-ua.spec | 2 | ||||
-rw-r--r-- | src/user-awareness-monitors.c | 30 | ||||
-rw-r--r-- | src/user-awareness-util.c | 18 |
5 files changed, 73 insertions, 2 deletions
diff --git a/include/user-awareness-private.h b/include/user-awareness-private.h index 7ac8781..2476480 100644 --- a/include/user-awareness-private.h +++ b/include/user-awareness-private.h @@ -199,6 +199,7 @@ typedef struct { gboolean cb_sent; /** User presence callback sent or not flag */ } ua_user_state_info_s; +//TODO Unused struct. /** * @brief Sensor state data structure. * @since_tizen 5.5 diff --git a/include/user-awareness-util.h b/include/user-awareness-util.h index 94e2336..de20517 100644 --- a/include/user-awareness-util.h +++ b/include/user-awareness-util.h @@ -146,6 +146,30 @@ const char* _ua_get_error_string(ua_error_code_e err); */ uam_tech_type_e _ua_to_uam_tech_type(ua_mac_type_e type); +/** + * @ingroup CAPI_NETWORK_UA_MODULE + * @internal + * @brief Converts device's tech. type enum to sensor bitmask enum. + * @since_tizen 5.5 + * + * @remarks The returned value can be used until return call function is valid. + * + * @param[in] type Tech code to be converted. + * + * @return Sensor bitmask + * + * @retval #UA_SENSOR_BT Bluetooth + * @retval #UA_SENSOR_BLE Bluetooth Low Energy + * @retval #UA_SENSOR_WIFI Wi-Fi + * @retval #UA_SENSOR_MAX Invalid + * + * @exception + * @pre + * @post + * + */ +ua_sensor_e _ua_dev_type_to_sensor(ua_mac_type_e type); + #ifdef __cplusplus } #endif diff --git a/packaging/capi-network-ua.spec b/packaging/capi-network-ua.spec index 9c8f852..d863326 100644 --- a/packaging/capi-network-ua.spec +++ b/packaging/capi-network-ua.spec @@ -1,6 +1,6 @@ Name: capi-network-ua Summary: User Awareness Framework CAPI -Version: 0.8.7 +Version: 0.8.8 Release: 1 License: Apache-2.0 Source0: %{name}-%{version}.tar.gz diff --git a/src/user-awareness-monitors.c b/src/user-awareness-monitors.c index 4f9f7fc..1408294 100644 --- a/src/user-awareness-monitors.c +++ b/src/user-awareness-monitors.c @@ -160,6 +160,7 @@ static ua_sensor_e __ua_sensor_bitmask_to_type(unsigned int bitmask) UA_WARN("Unknown sensor bitmask [0x%8.8X]", bitmask); return UA_SENSOR_MAX; } + FUNC_EXIT; } /* LCOV_EXCL_STOP */ @@ -267,15 +268,23 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor, FUNC_ENTRY; unsigned int env_presence_bitmask = 0; unsigned int user_sensor_bitmask = user_state->sensor_bitmask; + unsigned int filter_bitmask = 0; + unsigned int dev_bitmask = 0; + GSList *l = 0; + GSList *devices = 0; gboolean and_condition = 0; gboolean or_condition = 0; gboolean condition_result = 0; + ua_dev_info_s *dev = 0; + ret_if(NULL == user_state); ua_user_h user_handle = _ua_get_user_handle_by_account( user_state->account); env_presence_bitmask = monitor->presence_detected_bitmask & (UA_SENSOR_MOTION | UA_SENSOR_LIGHT); + filter_bitmask = + monitor->presence_bitmask_and | monitor->presence_bitmask_or; /** * Check whether user_handle present or not and also check @@ -317,12 +326,31 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor, return; } + /** + * Filter the list of found_devices according to sensors mentioned in + * AND/OR conditions. + */ + for (l = user_state->found_devices; l; l = g_slist_next(l)) { + dev = (ua_dev_info_s *)l->data; + if(!dev) + continue; + + 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 & filter_bitmask) + devices = g_slist_prepend(devices, dev); + } + ((ua_presence_user_detected_cb)monitor->presence_user_cb.callback)( UA_ERROR_NONE, monitor, user_handle, - user_state->found_devices, + devices, monitor->presence_user_cb.user_data); user_state->cb_sent = TRUE; + + g_slist_free(devices); + FUNC_EXIT; return; } diff --git a/src/user-awareness-util.c b/src/user-awareness-util.c index d07ab50..3500a37 100644 --- a/src/user-awareness-util.c +++ b/src/user-awareness-util.c @@ -171,3 +171,21 @@ uam_tech_type_e _ua_to_uam_tech_type(ua_mac_type_e type) return UA_MAC_TYPE_INVALID; } } + +ua_sensor_e _ua_dev_type_to_sensor(ua_mac_type_e type) +{ + FUNC_ENTRY; + + switch (type) { + case UA_MAC_TYPE_BT: + return UA_SENSOR_BT; + case UA_MAC_TYPE_BLE: + return UA_SENSOR_BLE; + case UA_MAC_TYPE_WIFI: + return UA_SENSOR_WIFI; + default: + UA_WARN("Uncompatible to convert. Mac type [%u]", type); + return UA_SENSOR_MAX; + } + FUNC_EXIT; +} |