summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packaging/capi-network-ua.spec2
-rw-r--r--src/user-awareness-monitors.c25
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,