diff options
author | Lokesh <l.kasana@samsung.com> | 2019-09-02 14:03:18 +0530 |
---|---|---|
committer | saerome.kim <saerome.kim@samsung.com> | 2019-09-16 21:03:55 +0900 |
commit | ce1adce64364402f886c69f9ee6f819b78d85d64 (patch) | |
tree | 1d4525069022751d8c8c4102bbac7f5222395a16 | |
parent | 2f6d5f9faefc80157f8092fe2595b8662264837f (diff) | |
download | user-awareness-ce1adce64364402f886c69f9ee6f819b78d85d64.tar.gz user-awareness-ce1adce64364402f886c69f9ee6f819b78d85d64.tar.bz2 user-awareness-ce1adce64364402f886c69f9ee6f819b78d85d64.zip |
Fix absence_user_cb AND/OR conditions
Incorporate environmental sensors
Change-Id: Ia3835de7b8f2442e1c94594904b812fc2a1ac915
Signed-off-by: Lokesh <l.kasana@samsung.com>
-rw-r--r-- | packaging/capi-network-ua.spec | 2 | ||||
-rw-r--r-- | src/user-awareness-monitors.c | 34 |
2 files changed, 24 insertions, 12 deletions
diff --git a/packaging/capi-network-ua.spec b/packaging/capi-network-ua.spec index fd65670..521398d 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.0 +Version: 0.8.1 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 1c387d4..e508387 100644 --- a/src/user-awareness-monitors.c +++ b/src/user-awareness-monitors.c @@ -268,6 +268,8 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor, unsigned int env_presence_bm = 0; unsigned int user_sensor_bitmask = user_state->sensor_bitmask; + ret_if(NULL == user_state); + ua_user_h user_handle = _ua_get_user_handle_by_account( user_state->account); env_presence_bm = monitor->presence_detected_bitmask & UA_SENSOR_MOTION @@ -331,6 +333,7 @@ static void __ua_sensor_presence_detected(ua_monitor_s *monitor, int ret = UA_ERROR_NONE; ua_user_state_info_s *user_state; ua_device_h device_handle = NULL; +//TODO convert bitmask from uam to ua type ret_if(NULL == monitor); @@ -425,32 +428,34 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor, ua_user_h user_handle, unsigned int user_sensor_bitmask) { FUNC_ENTRY; + unsigned int env_absence_bm = 0; /** * Check whether user_handle present or not and also check * whether presence has been started or not. */ - if (!user_handle) { + if (!user_handle || !monitor->absence_detection_started) { FUNC_EXIT; return; } UA_DBG("User's sensor bitmask [0x%u], monior presence bitmask AND [0x%u], OR [0x%u]", - user_sensor_bitmask, - monitor->presence_bitmask_and, monitor->presence_bitmask_or); + user_sensor_bitmask, + monitor->presence_bitmask_and, monitor->presence_bitmask_or); /** * user_sensor_bitmask provides number of detected sensors, * so we need to invert the user_sensor_bitmask to calculate absence. */ user_sensor_bitmask = ~user_sensor_bitmask; - + env_absence_bm = monitor->absence_detected_bitmask & UA_SENSOR_MOTION & UA_SENSOR_LIGHT; /** * Check AND conditions for sensors. */ if (monitor->absence_bitmask_and != - (user_sensor_bitmask & monitor->absence_bitmask_and)) { + (monitor->absence_bitmask_and + & (user_sensor_bitmask | env_absence_bm))) { FUNC_EXIT; return; } @@ -461,7 +466,8 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor, * Check OR conditions for sensors. */ if (monitor->absence_bitmask_or && - !(user_sensor_bitmask & monitor->absence_bitmask_or)) { + !(monitor->absence_bitmask_or + & (user_sensor_bitmask | env_absence_bm))) { FUNC_EXIT; return; } @@ -469,8 +475,8 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor, UA_DBG("OR condition matched"); ((ua_absence_user_detected_cb)monitor->absence_user_cb.callback)( - UA_ERROR_NONE, monitor, user_handle, - monitor->absence_user_cb.user_data); + UA_ERROR_NONE, monitor, user_handle, + monitor->absence_user_cb.user_data); } static void __ua_send_absence_detection() @@ -921,7 +927,7 @@ int ua_monitor_create(ua_monitor_h *handle) FUNC_ENTRY; ua_monitor_s *monitor = NULL; - unsigned int available_sensors; + unsigned int available_sensors = 0; UA_VALIDATE_INPUT_PARAMETER(handle); @@ -1088,7 +1094,7 @@ int ua_monitor_set_user_presence_condition(ua_monitor_h handle, { FUNC_ENTRY; ua_monitor_s *monitor = (ua_monitor_s *)handle; - unsigned int available_sensors; + unsigned int available_sensors = 0; UA_VALIDATE_INPUT_PARAMETER(handle); UA_VALIDATE_HANDLE(handle, ua_monitor_list); @@ -1132,7 +1138,7 @@ int ua_monitor_set_user_absence_condition(ua_monitor_h handle, { FUNC_ENTRY; ua_monitor_s *monitor = (ua_monitor_s *)handle; - unsigned int available_sensors; + unsigned int available_sensors = 0; UA_VALIDATE_INPUT_PARAMETER(handle); UA_VALIDATE_HANDLE(handle, ua_monitor_list); @@ -1143,6 +1149,12 @@ int ua_monitor_set_user_absence_condition(ua_monitor_h handle, return UA_ERROR_INVALID_PARAMETER; } + if (!(bitmask_and | bitmask_or)) { + UA_ERR("Both of AND/OR bitmask are zero"); + FUNC_EXIT; + return UA_ERROR_INVALID_PARAMETER; + } + _uam_get_available_sensors(&available_sensors); if (bitmask_and != (available_sensors & bitmask_and)) { |