summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLokesh <l.kasana@samsung.com>2019-09-02 14:03:18 +0530
committersaerome.kim <saerome.kim@samsung.com>2019-09-16 21:03:55 +0900
commitce1adce64364402f886c69f9ee6f819b78d85d64 (patch)
tree1d4525069022751d8c8c4102bbac7f5222395a16
parent2f6d5f9faefc80157f8092fe2595b8662264837f (diff)
downloaduser-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.spec2
-rw-r--r--src/user-awareness-monitors.c34
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)) {