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);
/* 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 {
{
FUNC_ENTRY;
uam_device_info_s *dev_info;
+ uam_ble_payload_s *payload = NULL;
int ret = UAM_ERROR_NONE;
ret_if(NULL == 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 {
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 {
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 {
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;
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
/* 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 {
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 {
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);
return 0;
return -1;
}
+#endif
static void __free_address_info(gpointer data)
{
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));
}
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;
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;
}
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;
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;