From 8e3535dfb975b97d586d3bcd1bdc8186da6d1dfe Mon Sep 17 00:00:00 2001 From: Abhay agarwal Date: Mon, 2 Dec 2019 15:36:53 +0530 Subject: [PATCH] Add ua-manager core API to insert payload information to a service Signed-off-by: Abhay agarwal --- include/ua-api.h | 19 +++++++++++++++ include/ua-internal.h | 1 + ua-api/src/ua-api.c | 28 ++++++++++++++++++++++ ua-daemon/include/ua-manager-core.h | 3 +++ ua-daemon/src/ua-manager-common.c | 2 +- ua-daemon/src/ua-manager-core.c | 35 ++++++++++++++++++++++++---- ua-daemon/src/ua-manager-device-service-db.c | 8 +++---- ua-daemon/src/ua-manager-request-handler.c | 13 +++++++++++ 8 files changed, 99 insertions(+), 10 deletions(-) diff --git a/include/ua-api.h b/include/ua-api.h index 808a36c..7d68602 100644 --- a/include/ua-api.h +++ b/include/ua-api.h @@ -1414,6 +1414,25 @@ int _uam_add_ibeacon_adv_data(unsigned int adv_len, const char *ibeacon_adv); int _uam_request_add_payload(uam_ble_payload_s *payload, char *device_id, uam_tech_type_e tech_type); +/** + * @brief Adds a payload for a device to a service. + * @since_tizen 5.5 + * + * @param[in] service Service name. + * @param[in] payload Payload information. + * + * @return 0 on success, otherwise a negative error value + * @retval #UAM_ERROR_NONE Successful + * @retval #UAM_ERROR_INVALID_PARAMETER Invalid parameters + * @retval #UAM_ERROR_INTERNAL Internal error + * + * @exception + * @pre + * @post + */ +int _uam_service_add_payload(const char *service, + uam_ble_payload_s *payload); + #ifdef __cplusplus } #endif diff --git a/include/ua-internal.h b/include/ua-internal.h index 672401c..71afe94 100644 --- a/include/ua-internal.h +++ b/include/ua-internal.h @@ -84,6 +84,7 @@ extern "C" { REQUEST(UAM_REQUEST_GET_SERVICES) \ REQUEST(UAM_REQUEST_ADD_IBEACON_ADV) \ REQUEST(UAM_REQUEST_ADD_PAYLOAD) \ + REQUEST(UAM_REQUEST_ADD_PAYLOAD_TO_SERVICE) \ REQUEST(UAM_REQUEST_MAX) #define GENERATE_REQUEST_ENUM(ENUM) ENUM, diff --git a/ua-api/src/ua-api.c b/ua-api/src/ua-api.c index 2cf3f1d..4ca2a7d 100644 --- a/ua-api/src/ua-api.c +++ b/ua-api/src/ua-api.c @@ -1464,3 +1464,31 @@ UAM_EXPORT_API int _uam_request_add_payload(uam_ble_payload_s *payload, FUNC_EXIT; return ret; } + +UAM_EXPORT_API int _uam_service_add_payload(const char *service, + uam_ble_payload_s *payload) +{ + FUNC_ENTRY; + int ret; + char svc_str[UAM_SERVICE_MAX_STRING_LEN]; + + UAM_VALIDATE_INPUT_PARAMETER(service); + UAM_VALIDATE_INPUT_PARAMETER(payload); + + UAM_INIT_PARAMS(); + UAM_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_strlcpy(svc_str, service, UAM_SERVICE_MAX_STRING_LEN); + g_array_append_vals(in_param1, svc_str, sizeof(svc_str)); + + g_array_append_vals(in_param2, payload, sizeof(uam_ble_payload_s)); + + ret = _uam_async_request(UAM_REQUEST_ADD_PAYLOAD_TO_SERVICE, + in_param1, in_param2, in_param3, in_param4, + cb_info.callback, cb_info.user_data); + + UAM_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + FUNC_EXIT; + return ret; +} diff --git a/ua-daemon/include/ua-manager-core.h b/ua-daemon/include/ua-manager-core.h index 434fa57..1a2f15f 100644 --- a/ua-daemon/include/ua-manager-core.h +++ b/ua-daemon/include/ua-manager-core.h @@ -256,6 +256,9 @@ void _uam_core_handle_status_changed(unsigned int sensor, void *info); int _uam_core_add_payload(uam_ble_payload_s *payload, const char *device_id, int tech_type); +int _uam_core_service_add_payload(uam_ble_payload_s *payload, + const char *svc_name); + #ifdef __cplusplus } #endif diff --git a/ua-daemon/src/ua-manager-common.c b/ua-daemon/src/ua-manager-common.c index 14db69a..7acab7b 100644 --- a/ua-daemon/src/ua-manager-common.c +++ b/ua-daemon/src/ua-manager-common.c @@ -237,4 +237,4 @@ unsigned long long _uam_get_timestamp(void) return 0; } return ((unsigned long long)(t.tv_sec) * 1000000000LL + t.tv_nsec) / 1000000; -} \ No newline at end of file +} diff --git a/ua-daemon/src/ua-manager-core.c b/ua-daemon/src/ua-manager-core.c index 1cc2eae..c25cc79 100644 --- a/ua-daemon/src/ua-manager-core.c +++ b/ua-daemon/src/ua-manager-core.c @@ -827,9 +827,8 @@ int _uam_core_remove_user(const char *account) UAM_ERR("Failed to send UAM_EVENT_USER_REMOVED"); ret = __free_uam_db_user_info((gpointer)user); - if (UAM_ERROR_NONE != ret) { + if (UAM_ERROR_NONE != ret) UAM_WARN("_free_uam_db_user_info failed"); - } FUNC_EXIT; return UAM_ERROR_NONE; @@ -997,9 +996,8 @@ static int __uam_remove_device(int user_id, uam_db_device_info_t *device, continue; ret = _uam_core_service_remove_device(svc->name, dev_info->device_id, dev_info->type); - if (UAM_ERROR_NONE != ret) { + if (UAM_ERROR_NONE != ret) UAM_ERR("_uam_device_db_delete_device_info failed"); - } } __uam_db_end_transaction(1); @@ -3896,7 +3894,34 @@ int _uam_core_add_payload(uam_ble_payload_s *payload, /*** Add payload to database ***/ ret = _uam_db_insert_payload_info(device_id, tech_type, mac, payload); if (UAM_ERROR_NONE != ret) { - UAM_ERR("_uam_db_insert_adv_info failed"); + UAM_ERR("_uam_db_insert_payload_info failed"); + return ret; + } + + FUNC_EXIT; + return UAM_ERROR_NONE; +} + +int _uam_core_service_add_payload(uam_ble_payload_s *payload, + const char *svc_name) +{ + FUNC_ENTRY; + int ret = UAM_ERROR_NONE; +// uam_db_service_info_t *service; +// GSList *l; + + retv_if(NULL == payload, UAM_ERROR_INVALID_PARAMETER); + retv_if(NULL == svc_name, UAM_ERROR_INVALID_PARAMETER); + + /* Retrieve service from list */ +// l = g_slist_find_custom(services, svc_name, __compare_svc_name); +// retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER); +// service = l->data; + + /*** Add payload to database ***/ +// ret = _uam_db_insert_payload_service_info(payload, service); + if (UAM_ERROR_NONE != ret) { + UAM_ERR("_uam_db_insert_payload_service_info failed"); return ret; } diff --git a/ua-daemon/src/ua-manager-device-service-db.c b/ua-daemon/src/ua-manager-device-service-db.c index 0d9684e..37bff4a 100644 --- a/ua-daemon/src/ua-manager-device-service-db.c +++ b/ua-daemon/src/ua-manager-device-service-db.c @@ -418,9 +418,9 @@ int _uam_db_update_device_service_discriminant(const char *device_id, goto handle_error; ret = _uam_db_get_service_info(service_name, &info); - if (UAM_ERROR_NONE == ret) { + if (UAM_ERROR_NONE == ret) service_number = info.service_number; - } else + else goto handle_error; ret = __uam_db_update_discriminant(device_number, service_number, discriminant); @@ -453,9 +453,9 @@ int _uam_db_update_device_service_last_seen(const char *device_id, goto handle_error; ret = _uam_db_get_service_info(service_name, &info); - if (UAM_ERROR_NONE == ret) { + if (UAM_ERROR_NONE == ret) service_number = info.service_number; - } else + else goto handle_error; ret = __uam_db_update_last_seen(device_number, service_number, last_seen); diff --git a/ua-daemon/src/ua-manager-request-handler.c b/ua-daemon/src/ua-manager-request-handler.c index 635c5ee..5c1001f 100644 --- a/ua-daemon/src/ua-manager-request-handler.c +++ b/ua-daemon/src/ua-manager-request-handler.c @@ -705,6 +705,18 @@ static int __uam_manager_sync_request_handler( break; } + case UAM_REQUEST_ADD_PAYLOAD_TO_SERVICE: { + uam_ble_payload_s *payload; + const char *svc_name; + + svc_name = (char *)g_variant_get_data(in_param1); + __uam_manager_copy_params(in_param2, &payload, sizeof(uam_ble_payload_s)); + UAM_DBG("Payload primary key: [%d], Service [%s]", + payload->primary_key, svc_name); + + result = _uam_core_service_add_payload(payload, svc_name); + break; + } default: UAM_WARN("UnSupported function [%s(0x%4.4X)]", _uam_manager_request_to_str(function), function); @@ -903,6 +915,7 @@ static gboolean __uam_manager_is_sync_function(int function) case UAM_REQUEST_GET_SERVICES: case UAM_REQUEST_ADD_IBEACON_ADV: case UAM_REQUEST_ADD_PAYLOAD: + case UAM_REQUEST_ADD_PAYLOAD_TO_SERVICE: return TRUE; default: return FALSE; -- 2.7.4