summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLokesh <l.kasana@samsung.com>2019-09-09 11:09:14 +0530
committersaerome.kim <saerome.kim@samsung.com>2019-09-16 21:05:14 +0900
commit71c456cc58bcad772850e04d78033e3ead80422f (patch)
tree3d77dcc980a6ece97357c3f2920c471e34dfd53d /src
parentb4a233ad62168ed0cafd0144b09cb2201cbfb9c7 (diff)
downloaduser-awareness-71c456cc58bcad772850e04d78033e3ead80422f.tar.gz
user-awareness-71c456cc58bcad772850e04d78033e3ead80422f.tar.bz2
user-awareness-71c456cc58bcad772850e04d78033e3ead80422f.zip
filter list of found_devices of a user based on sensors mentioned in AND/OR conditions
Change-Id: I49c00ab54aa734506e4403b08f58fc04b2a4e9d7 Signed-off-by: Lokesh <l.kasana@samsung.com>
Diffstat (limited to 'src')
-rw-r--r--src/user-awareness-monitors.c30
-rw-r--r--src/user-awareness-util.c18
2 files changed, 47 insertions, 1 deletions
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;
+}