diff options
-rw-r--r-- | packaging/capi-network-ua.spec | 2 | ||||
-rw-r--r-- | src/user-awareness-monitors.c | 25 |
2 files changed, 18 insertions, 9 deletions
diff --git a/packaging/capi-network-ua.spec b/packaging/capi-network-ua.spec index 5325c95..b3f6185 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.11.5 +Version: 0.11.6 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 2453054..2e9cd3a 100644 --- a/src/user-awareness-monitors.c +++ b/src/user-awareness-monitors.c @@ -238,7 +238,7 @@ static gboolean __ua_monitor_check_presence_and_or_condition(ua_monitor_s *monit or_condition ? "true" : "false"); if (monitor->presence_bitmask_and == 0 || monitor->presence_bitmask_or == 0) - condition_result = monitor->presence_bitmask_and ? or_condition : and_condition; + condition_result = monitor->presence_bitmask_and ? and_condition : or_condition; else if (monitor->presence_conjunction == UA_OR_OPERATION) condition_result = and_condition || or_condition; else @@ -293,10 +293,6 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor, env_bitmask = monitor->presence_detected_bitmask & (UA_SENSOR_MOTION | UA_SENSOR_LIGHT); - /** Get sensor list*/ - sensors = ua_sensor_get_sensor_handle_list( - monitor->presence_detected_bitmask & (user_state->sensor_bitmask | env_bitmask)); - /** * Filter the list of found_devices according to sensors mentioned in * AND/OR conditions. @@ -316,6 +312,11 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor, devices = g_slist_prepend(devices, dev); } + /** Get sensor list*/ + sensors = ua_sensor_get_sensor_handle_list( + monitor->presence_detected_bitmask & (user_state->sensor_bitmask | env_bitmask) + & filter_bitmask); + ((ua_presence_user_detected_cb)monitor->presence_user_cb.callback)( UA_ERROR_NONE, monitor, user_handle, devices, sensors, @@ -336,6 +337,7 @@ static void __ua_monitor_send_env_user_presence_cb(ua_monitor_s *monitor) FUNC_ENTRY; GSList *sensors = 0; gboolean condition_result = 0; + unsigned int filter_bitmask = 0; if (monitor->env_user_cb_sent) { UA_DBG("Environmental User presence cb already sent"); @@ -352,7 +354,10 @@ static void __ua_monitor_send_env_user_presence_cb(ua_monitor_s *monitor) } /** Get sensor list*/ - sensors = ua_sensor_get_sensor_handle_list(monitor->presence_detected_bitmask); + filter_bitmask = + monitor->presence_bitmask_and | monitor->presence_bitmask_or; + sensors = ua_sensor_get_sensor_handle_list(monitor->presence_detected_bitmask + & filter_bitmask); ((ua_presence_user_detected_cb)monitor->presence_user_cb.callback)( UA_ERROR_NONE, monitor, NULL, @@ -525,6 +530,7 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor, { FUNC_ENTRY; unsigned int env_absence_bitmask = 0; + unsigned int filter_bitmask = 0; unsigned int user_sensor_bitmask = user_state->sensor_bitmask; gboolean and_condition = 0; gboolean or_condition = 0; @@ -571,7 +577,7 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor, or_condition ? "true" : "false"); if (monitor->absence_bitmask_and == 0 || monitor->absence_bitmask_or == 0) - condition_result = monitor->absence_bitmask_and ? or_condition : and_condition; + condition_result = monitor->absence_bitmask_and ? and_condition : or_condition; else if (monitor->absence_conjunction == UA_OR_OPERATION) condition_result = and_condition || or_condition; else @@ -584,8 +590,11 @@ static void __ua_monitor_send_user_absence_cb(ua_monitor_s *monitor, } /** Get sensor list*/ + filter_bitmask = + monitor->absence_bitmask_and | monitor->absence_bitmask_or; sensors = ua_sensor_get_sensor_handle_list( - monitor->absence_detected_bitmask & (user_sensor_bitmask | env_absence_bitmask)); + monitor->absence_detected_bitmask & (user_sensor_bitmask | env_absence_bitmask) + & filter_bitmask); ((ua_absence_user_detected_cb)monitor->absence_user_cb.callback)( UA_ERROR_NONE, monitor, user_handle, sensors, |