From 8a86881a3a80af09de5d56a0b696cc5eaa603703 Mon Sep 17 00:00:00 2001 From: Abhay agarwal Date: Tue, 24 Dec 2019 15:09:00 +0530 Subject: [PATCH] update handle device detected for payload handling Signed-off-by: Abhay agarwal --- ua-daemon/include/ua-manager-core.h | 2 +- ua-daemon/src/pm/ua-ble-plugin-handler.c | 14 +++++++++++--- ua-daemon/src/pm/ua-light-plugin-handler.c | 3 ++- ua-daemon/src/pm/ua-motion-plugin-handler.c | 3 ++- ua-daemon/src/pm/ua-pm-util.c | 17 +++++++++++++++++ ua-daemon/src/pm/ua-pm-util.h | 8 ++++++++ ua-daemon/src/pm/ua-wifi-plugin-handler.c | 6 ++++-- ua-daemon/src/ua-manager-core.c | 23 +++++++++++++++++------ 8 files changed, 62 insertions(+), 14 deletions(-) diff --git a/ua-daemon/include/ua-manager-core.h b/ua-daemon/include/ua-manager-core.h index a26762f..7e881f5 100644 --- a/ua-daemon/include/ua-manager-core.h +++ b/ua-daemon/include/ua-manager-core.h @@ -187,7 +187,7 @@ int _uam_core_handle_device_added(int status, int user_id, const uam_device_info_s *dev_info); int _uam_core_handle_presence_detected(unsigned int sensor, - int user_id, void *sensor_info); + int user_id, void *sensor_info, uam_ble_payload_s *payload); void _uam_core_handle_absence_detected(unsigned int sensor, int user_id, void *sensor_info); diff --git a/ua-daemon/src/pm/ua-ble-plugin-handler.c b/ua-daemon/src/pm/ua-ble-plugin-handler.c index da39bbe..c4d62e2 100644 --- a/ua-daemon/src/pm/ua-ble-plugin-handler.c +++ b/ua-daemon/src/pm/ua-ble-plugin-handler.c @@ -46,7 +46,8 @@ static void ble_lpm_detection_callback(uas_detection_type_e type, void *sensor_i /* Currently, in lpm mode only Presence is detected */ if (UAS_PRESENCE == type) { UAM_DBG("Presence detected"); - ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, -1, NULL); + ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, + -1, NULL, NULL); if (UAM_ERROR_NONE != ret) UAM_WARN("_uam_core_handle_presence_detected failed"); } else { @@ -72,6 +73,7 @@ static void ble_device_detection_callback(uas_detection_type_e type, uas_device_ { FUNC_ENTRY; uam_device_info_s *dev_info; + uam_ble_payload_s *payload = NULL; int ret = UAM_ERROR_NONE; ret_if(NULL == device); @@ -79,9 +81,15 @@ static void ble_device_detection_callback(uas_detection_type_e type, uas_device_ dev_info = _pm_util_uas_dev_info_to_uam_dev_info(device); ret_if(NULL == dev_info); + if (device->payload) { + payload = g_new0(uam_ble_payload_s, 1); + _pm_util_uas_payload_to_uam_payload(payload, device->payload); + } + if (UAS_PRESENCE == type) { - UAM_DBG("Presence detected for %s", dev_info->device_id); - ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, device->user_id, dev_info); + UAM_DBG("BLE Presence detected for %s", dev_info->device_id); + ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, + device->user_id, dev_info, payload); if (UAM_ERROR_NONE != ret) UAM_WARN("_uam_core_handle_presence_detected failed"); } else { diff --git a/ua-daemon/src/pm/ua-light-plugin-handler.c b/ua-daemon/src/pm/ua-light-plugin-handler.c index ee5032d..0dcdb9a 100644 --- a/ua-daemon/src/pm/ua-light-plugin-handler.c +++ b/ua-daemon/src/pm/ua-light-plugin-handler.c @@ -57,7 +57,8 @@ void light_detection_callback(uas_detection_type_e type, void *sensor_info) if (UAS_PRESENCE == type) { UAM_DBG("Presence detected by light sensor"); - ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_LIGHT, 0, light_info); + ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_LIGHT, + 0, light_info, NULL); if (UAM_ERROR_NONE != ret) UAM_WARN("_uam_core_handle_presence_detected failed"); } else { diff --git a/ua-daemon/src/pm/ua-motion-plugin-handler.c b/ua-daemon/src/pm/ua-motion-plugin-handler.c index 8dac1cf..195d5e1 100644 --- a/ua-daemon/src/pm/ua-motion-plugin-handler.c +++ b/ua-daemon/src/pm/ua-motion-plugin-handler.c @@ -80,7 +80,8 @@ void motion_detection_callback(uas_detection_type_e type, void *sensor_info) if (UAS_PRESENCE == type) { UAM_DBG("Presence detected by motion sensor"); - ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_MOTION, 0, motion_info); + ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_MOTION, + 0, motion_info, NULL); if (UAM_ERROR_NONE != ret) UAM_WARN("_uam_core_handle_presence_detected failed"); } else { diff --git a/ua-daemon/src/pm/ua-pm-util.c b/ua-daemon/src/pm/ua-pm-util.c index 964b247..82c749a 100644 --- a/ua-daemon/src/pm/ua-pm-util.c +++ b/ua-daemon/src/pm/ua-pm-util.c @@ -146,6 +146,23 @@ void _pm_util_uam_db_payload_to_uas_payload( UAM_DBG("payload primary key: [%d]", dst_payload->primary_key); } +void _pm_util_uas_payload_to_uam_payload( + uam_ble_payload_s *dst_payload, uas_payload_info_t *src_payload) +{ + if (src_payload) { + dst_payload->primary_key = src_payload->primary_key; + dst_payload->device_icon = src_payload->device_icon; + dst_payload->secondary_key = src_payload->secondary_key; + if (src_payload->device_uid) + memcpy(dst_payload->device_uid, + src_payload->device_uid, UAM_BLE_PAYLOAD_DEVICE_UID_LEN); + if (src_payload->bt_mac) + memcpy(dst_payload->bt_mac, + src_payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN); + } + UAM_DBG("payload primary key: [%d]", dst_payload->primary_key); +} + void _pm_util_uas_device_info_free(uas_device_info_t *device) { FUNC_ENTRY; diff --git a/ua-daemon/src/pm/ua-pm-util.h b/ua-daemon/src/pm/ua-pm-util.h index 3be4a94..e45d73f 100644 --- a/ua-daemon/src/pm/ua-pm-util.h +++ b/ua-daemon/src/pm/ua-pm-util.h @@ -53,6 +53,14 @@ uam_active_scan_event_e _pm_util_uas_scan_event_to_uam_scan_event(uas_active_sca uam_sensor_info_s *_pm_util_uas_sensor_info_to_uam_sensor_info(const uas_sensor_info_t *info); +void _pm_util_uam_db_payload_to_uas_payload( + uas_payload_info_t *dst_payload, + uam_db_payload_info_t *src_payload); + +void _pm_util_uas_payload_to_uam_payload( + uam_ble_payload_s *dst_payload, + uas_payload_info_t *src_payload); + #ifdef __cplusplus } #endif diff --git a/ua-daemon/src/pm/ua-wifi-plugin-handler.c b/ua-daemon/src/pm/ua-wifi-plugin-handler.c index 297075d..53f5df2 100644 --- a/ua-daemon/src/pm/ua-wifi-plugin-handler.c +++ b/ua-daemon/src/pm/ua-wifi-plugin-handler.c @@ -45,7 +45,8 @@ static void wifi_lpm_detection_callback(uas_detection_type_e type, void *sensor_ /* Currently, in lpm mode only Presence is detected */ if (UAS_PRESENCE == type) { UAM_DBG("Presence detected"); - ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, -1, NULL); + ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, + -1, NULL, NULL); if (UAM_ERROR_NONE != ret) UAM_WARN("_uam_core_handle_presence_detected failed"); } else { @@ -82,7 +83,8 @@ static void wifi_device_detection_callback(uas_detection_type_e type, uas_device if (UAS_PRESENCE == type) { UAM_DBG("Presence detected for %s", dev_info->device_id); - ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, device->user_id, dev_info); + ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, + device->user_id, dev_info, NULL); if (UAM_ERROR_NONE != ret) UAM_WARN("_uam_core_handle_presence_detected failed"); } else { diff --git a/ua-daemon/src/ua-manager-core.c b/ua-daemon/src/ua-manager-core.c index e96df7b..5f8c69d 100644 --- a/ua-daemon/src/ua-manager-core.c +++ b/ua-daemon/src/ua-manager-core.c @@ -114,10 +114,11 @@ static gint __compare_payload(gconstpointer data, gconstpointer user_data) return -1; } +#if 0 static gint __compare_db_payload(gconstpointer data, gconstpointer user_data) { const uam_db_payload_info_t *db_payload = data; - const uam_ble_payload_s *payload = user_data; + const uam_db_payload_info_t *payload = user_data; retv_if(NULL == db_payload, -1); retv_if(NULL == payload, -1); @@ -127,6 +128,7 @@ static gint __compare_db_payload(gconstpointer data, gconstpointer user_data) return 0; return -1; } +#endif static void __free_address_info(gpointer data) { @@ -2449,7 +2451,8 @@ int _uam_core_init(void) if (!db_payload) continue; - l1 = g_slist_find_custom(payloads, db_payload, __compare_db_payload); + l1 = g_slist_find_custom(payloads, &(db_payload->payload_info), + __compare_payload); if (!l1) { payload = g_new0(uam_db_payload_info_t, 1); __uam_copy_uam_payload_info(payload, &(db_payload->payload_info)); @@ -2917,7 +2920,7 @@ static void __send_sensor_absence_event(uam_sensor_info_s *sensor_info, } void __send_user_presence_event(uam_db_tech_info_t *tech, unsigned int sensor, - uam_device_info_s *dev_info) + uam_device_info_s *dev_info, uam_ble_payload_s *payload) { FUNC_ENTRY; @@ -2955,6 +2958,14 @@ void __send_user_presence_event(uam_db_tech_info_t *tech, unsigned int sensor, if (!svc_dev || !svc_dev->discriminant) continue; + /** Compare device payload*/ + /** If payload is NULL, send event to all services */ + UAM_DBG("Compare payload - primary_key detected: [%d], svc_dev: [%d] ", + payload->primary_key, svc_dev->payload->primary_key); + + if (payload && !__compare_payload(svc_dev->payload, payload)) + continue; + UAM_DBG("Send event"); for (l1 = svc->monitors; NULL != l1; l1 = g_slist_next(l1)) { uam_monitor_info_t *mon = l1->data; @@ -3003,7 +3014,7 @@ void __send_user_presence_event(uam_db_tech_info_t *tech, unsigned int sensor, } int _uam_core_handle_presence_detected(unsigned int sensor, - int user_id, void *info) + int user_id, void *info, uam_ble_payload_s *payload) { FUNC_ENTRY; int ret = UAM_ERROR_NONE; @@ -3136,9 +3147,9 @@ int _uam_core_handle_presence_detected(unsigned int sensor, return ret; } - /* Send user presence event and update service_device timestamp */ - __send_user_presence_event(tech, sensor, dev_info); __uam_db_end_transaction(1); + /* Send user presence event and update service_device timestamp */ + __send_user_presence_event(tech, sensor, dev_info, payload); FUNC_EXIT; return ret; -- 2.7.4