update handle device detected for payload handling
authorAbhay agarwal <ay.agarwal@samsung.com>
Tue, 24 Dec 2019 09:39:00 +0000 (15:09 +0530)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Mon, 30 Dec 2019 07:29:56 +0000 (16:29 +0900)
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
ua-daemon/include/ua-manager-core.h
ua-daemon/src/pm/ua-ble-plugin-handler.c
ua-daemon/src/pm/ua-light-plugin-handler.c
ua-daemon/src/pm/ua-motion-plugin-handler.c
ua-daemon/src/pm/ua-pm-util.c
ua-daemon/src/pm/ua-pm-util.h
ua-daemon/src/pm/ua-wifi-plugin-handler.c
ua-daemon/src/ua-manager-core.c

index a26762f..7e881f5 100644 (file)
@@ -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);
index da39bbe..c4d62e2 100644 (file)
@@ -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 {
index ee5032d..0dcdb9a 100644 (file)
@@ -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 {
index 8dac1cf..195d5e1 100644 (file)
@@ -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 {
index 964b247..82c749a 100644 (file)
@@ -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;
index 3be4a94..e45d73f 100644 (file)
@@ -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
index 297075d..53f5df2 100644 (file)
@@ -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 {
index e96df7b..5f8c69d 100644 (file)
@@ -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;