Implement new API to get le oob data 49/213849/1
authorinjun.yang <injun.yang@samsung.com>
Tue, 22 Jan 2019 08:51:23 +0000 (17:51 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Mon, 16 Sep 2019 00:58:54 +0000 (09:58 +0900)
[Model] All
[BinType] AP
[Customer] OPEN

[Issue#] N/A
[Request] Internal
[Occurrence Version] N/A

[Problem] n/a
[Cause & Measure] Implement new API to get le oob data
[Checking Method] n/a

[Team] IoT Hub
[Developer] Injun Yang
[Solution company] Samsung
[Change Type] Specification change

Change-Id: I5ab78624ed2fbac7fc6d6d36bf394776d721b7f7
Signed-off-by: injun.yang <injun.yang@samsung.com>
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
bt-api/bt-common.c
bt-api/bt-oob.c [changed mode: 0755->0644]
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/obex/bt-service-oob.c
bt-service-adaptation/services/obex/include/bt-service-oob.h
bt-service/bt-request-handler.c
bt-service/bt-service-common.c
bt-service/bt-service-oob.c
bt-service/include/bt-service-oob.h [changed mode: 0755->0644]
include/bluetooth-api.h
include/bt-internal-types.h

index bfeb4dd..e64a804 100644 (file)
@@ -548,6 +548,8 @@ const char *_bt_convert_service_function_to_string(int function)
                {BT_OOB_READ_LOCAL_DATA, "BT_OOB_READ_LOCAL_DATA"},
                {BT_OOB_ADD_REMOTE_DATA, "BT_OOB_ADD_REMOTE_DATA"},
                {BT_OOB_REMOVE_REMOTE_DATA, "BT_OOB_REMOVE_REMOTE_DATA"},
+               {BT_LE_OOB_READ_LOCAL_DATA, "BT_LE_OOB_READ_LOCAL_DATA"},
+               {BT_LE_OOB_ADD_REMOTE_DATA, "BT_LE_OOB_ADD_REMOTE_DATA"},
                {BT_AVRCP_SET_TRACK_INFO, "BT_AVRCP_SET_TRACK_INFO"},
                {BT_AVRCP_SET_PROPERTY, "BT_AVRCP_SET_PROPERTY"},
                {BT_AVRCP_SET_PROPERTIES, "BT_AVRCP_SET_PROPERTIES"},
old mode 100755 (executable)
new mode 100644 (file)
index 3a8788f..462bfc2
@@ -94,3 +94,53 @@ BT_EXPORT_API int bluetooth_oob_remove_remote_data(
        return result;
 }
 
+BT_EXPORT_API int bluetooth_le_oob_read_local_data(bt_oob_data_t *local_oob_data)
+{
+       int result;
+
+       BT_CHECK_PARAMETER(local_oob_data, return);
+       BT_CHECK_ENABLED(return);
+
+       BT_INIT_PARAMS();
+       BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+       result = _bt_send_request(BT_BLUEZ_SERVICE, BT_LE_OOB_READ_LOCAL_DATA,
+               in_param1, in_param2, in_param3, in_param4, &out_param);
+
+       if (result == BLUETOOTH_ERROR_NONE)
+               *local_oob_data = g_array_index(out_param, bt_oob_data_t, 0);
+
+       BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+       return result;
+}
+
+BT_EXPORT_API int bluetooth_le_oob_add_remote_data(
+                       const bluetooth_device_address_t *remote_device_address,
+                       bluetooth_bdaddr_type_e address_type,
+                       bt_oob_data_t *remote_oob_data)
+{
+       int result;
+
+       BT_CHECK_PARAMETER(remote_device_address, return);
+       BT_CHECK_PARAMETER(remote_oob_data, return);
+       BT_CHECK_ENABLED(return);
+
+       BT_INIT_PARAMS();
+       BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+       g_array_append_vals(in_param1, remote_device_address,
+                               sizeof(bluetooth_device_address_t));
+
+       g_array_append_vals(in_param2, &address_type, sizeof(unsigned short));
+
+       g_array_append_vals(in_param3, remote_oob_data, sizeof(bt_oob_data_t));
+
+       result = _bt_send_request(BT_BLUEZ_SERVICE, BT_LE_OOB_ADD_REMOTE_DATA,
+               in_param1, in_param2, in_param3, in_param4, &out_param);
+
+       BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+       return result;
+}
+
index a557ecb..b4520dc 100644 (file)
@@ -1849,6 +1849,33 @@ int __bt_bluez_request(int function_name,
 
                break;
        }
+       case BT_LE_OOB_READ_LOCAL_DATA: {
+               bt_oob_data_t local_oob_data;
+
+               memset(&local_oob_data, 0x00, sizeof(bt_oob_data_t));
+               result = _bt_le_oob_read_local_data(&local_oob_data);
+
+               g_array_append_vals(*out_param1, &local_oob_data,
+                               sizeof(bt_oob_data_t));
+
+               break;
+       }
+       case BT_LE_OOB_ADD_REMOTE_DATA: {
+               bluetooth_device_address_t address = { {0} };
+               unsigned short address_type;
+               bt_oob_data_t remote_oob_data;
+
+               __bt_service_get_parameters(in_param1,
+                               &address, sizeof(bluetooth_device_address_t));
+               __bt_service_get_parameters(in_param2,
+                               &address_type, sizeof(unsigned short));
+               __bt_service_get_parameters(in_param3,
+                               &remote_oob_data, sizeof(bt_oob_data_t));
+
+               result = _bt_oob_add_remote_data(&address, address_type, &remote_oob_data);
+
+               break;
+       }
        case BT_AVRCP_SET_TRACK_INFO: {
                media_metadata_t data;
                media_metadata_attributes_t meta_data;
@@ -3825,6 +3852,8 @@ gboolean __bt_service_check_privilege(int function_name,
        case BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH:
        case BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH:
        case BT_LE_SET_DATA_LENGTH:
+       case BT_LE_OOB_READ_LOCAL_DATA:
+       case BT_LE_OOB_ADD_REMOTE_DATA:
 
        case BT_LE_IPSP_INIT:
        case BT_LE_IPSP_DEINIT:
index 09cf034..ca09467 100644 (file)
@@ -310,3 +310,64 @@ int _bt_oob_remove_remote_data(
        g_variant_unref(reply);
        return BLUETOOTH_ERROR_NONE;
 }
+
+int _bt_le_oob_read_local_data(bt_oob_data_t *local_oob_data)
+{
+       GDBusProxy *proxy;
+       GVariant *reply;
+       GError *err = NULL;
+       char *adapter_path;
+       GDBusConnection *conn;
+       GVariant *eir = NULL;
+
+       BT_CHECK_PARAMETER(local_oob_data, return);
+
+       conn = _bt_gdbus_get_system_gconn();
+       retv_if(conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       adapter_path = _bt_get_adapter_path();
+       retv_if(adapter_path == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       proxy =  g_dbus_proxy_new_sync(conn,
+                       G_DBUS_PROXY_FLAGS_NONE, NULL,
+                       BT_BLUEZ_NAME, adapter_path,
+                       BT_OOB_INTERFACE, NULL, &err);
+       g_free(adapter_path);
+       if (!proxy) {
+               BT_ERR("Unable to create proxy");
+               if (err) {
+                       BT_ERR("Error: %s", err->message);
+                       g_clear_error(&err);
+               }
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       reply = g_dbus_proxy_call_sync(proxy, "LEReadLocalData",
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE, -1,
+                       NULL, &err);
+       g_object_unref(proxy);
+
+       if (reply == NULL) {
+               BT_ERR("LEReadLocalData dBUS-RPC is failed");
+               if (err != NULL) {
+                       BT_ERR("D-Bus API failure: errCode[%x], message[%s]",
+                                       err->code, err->message);
+                       g_clear_error(&err);
+               }
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       g_variant_get(reply, "(@ay)", &eir);
+       g_variant_unref(reply);
+
+       if (eir) {
+               local_oob_data->eir_len = __get_oob_data_from_variant(eir,
+                               local_oob_data->eir,
+                               sizeof(local_oob_data->eir));
+               g_variant_unref(eir);
+       }
+
+       return BLUETOOTH_ERROR_NONE;
+}
+
index 239ade9..18c9c01 100644 (file)
@@ -37,6 +37,8 @@ int _bt_oob_add_remote_data(
 int _bt_oob_remove_remote_data(
                        bluetooth_device_address_t *remote_device_address);
 
+int _bt_le_oob_read_local_data(bt_oob_data_t *local_oob_data);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index d684c48..a1bb5fc 100644 (file)
@@ -1326,6 +1326,33 @@ int __bt_bluez_request(int function_name,
 
                break;
        }
+       case BT_LE_OOB_READ_LOCAL_DATA: {
+               bt_oob_data_t local_oob_data;
+
+               memset(&local_oob_data, 0x00, sizeof(bt_oob_data_t));
+               result = _bt_le_oob_read_local_data(&local_oob_data);
+
+               g_array_append_vals(*out_param1, &local_oob_data,
+                               sizeof(bt_oob_data_t));
+
+               break;
+       }
+       case BT_LE_OOB_ADD_REMOTE_DATA: {
+               bluetooth_device_address_t address = { {0} };
+               unsigned short address_type;
+               bt_oob_data_t remote_oob_data;
+
+               __bt_service_get_parameters(in_param1,
+                               &address, sizeof(bluetooth_device_address_t));
+               __bt_service_get_parameters(in_param2,
+                               &address_type, sizeof(unsigned short));
+               __bt_service_get_parameters(in_param3,
+                               &remote_oob_data, sizeof(bt_oob_data_t));
+
+               result = _bt_oob_add_remote_data(&address, address_type, &remote_oob_data);
+
+               break;
+       }
        case BT_AVRCP_SET_TRACK_INFO: {
                media_metadata_t data;
                media_metadata_attributes_t meta_data;
@@ -2907,6 +2934,8 @@ gboolean __bt_service_check_privilege(int function_name,
        case BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH:
        case BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH:
        case BT_LE_SET_DATA_LENGTH:
+       case BT_LE_OOB_READ_LOCAL_DATA:
+       case BT_LE_OOB_ADD_REMOTE_DATA:
 
        case BT_LE_IPSP_INIT:
        case BT_LE_IPSP_DEINIT:
index 10a335d..daed285 100644 (file)
@@ -1231,6 +1231,8 @@ const char *_bt_convert_service_function_to_string(int function)
                {BT_OOB_READ_LOCAL_DATA, "BT_OOB_READ_LOCAL_DATA"},
                {BT_OOB_ADD_REMOTE_DATA, "BT_OOB_ADD_REMOTE_DATA"},
                {BT_OOB_REMOVE_REMOTE_DATA, "BT_OOB_REMOVE_REMOTE_DATA"},
+               {BT_LE_OOB_READ_LOCAL_DATA, "BT_LE_OOB_READ_LOCAL_DATA"},
+               {BT_LE_OOB_ADD_REMOTE_DATA, "BT_LE_OOB_ADD_REMOTE_DATA"},
                {BT_AVRCP_SET_TRACK_INFO, "BT_AVRCP_SET_TRACK_INFO"},
                {BT_AVRCP_SET_PROPERTY, "BT_AVRCP_SET_PROPERTY"},
                {BT_AVRCP_SET_PROPERTIES, "BT_AVRCP_SET_PROPERTIES"},
index c5dcc71..77ca5ca 100644 (file)
@@ -303,3 +303,69 @@ int _bt_oob_remove_remote_data(
        g_variant_unref(reply);
        return BLUETOOTH_ERROR_NONE;
 }
+
+int _bt_le_oob_read_local_data(bt_oob_data_t *local_oob_data)
+{
+       GDBusProxy *proxy;
+       GVariant *reply;
+       GError *err = NULL;
+       char *adapter_path;
+       GDBusConnection *conn;
+       GVariant *eir = NULL;
+
+       BT_CHECK_PARAMETER(local_oob_data, return);
+
+       conn = _bt_gdbus_get_system_gconn();
+       retv_if(conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       adapter_path = _bt_get_adapter_path();
+       retv_if(adapter_path == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+       proxy =  g_dbus_proxy_new_sync(conn,
+                       G_DBUS_PROXY_FLAGS_NONE, NULL,
+                       BT_BLUEZ_NAME, adapter_path,
+                       BT_OOB_INTERFACE, NULL, &err);
+       g_free(adapter_path);
+       if (!proxy) {
+               BT_ERR("Unable to create proxy");
+               if (err) {
+                       BT_ERR("Error: %s", err->message);
+                       g_clear_error(&err);
+               }
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       if (device_power_request_lock(POWER_LOCK_CPU, 2000) != DEVICE_ERROR_NONE)
+               BT_ERR("device_power_request_lock() failed");
+       else
+               BT_ERR("device_power_request_lock() succeed");
+
+       reply = g_dbus_proxy_call_sync(proxy, "LEReadLocalData",
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE, -1,
+                       NULL, &err);
+       g_object_unref(proxy);
+
+       if (reply == NULL) {
+               BT_ERR("LEReadLocalData dBUS-RPC is failed");
+               if (err != NULL) {
+                       BT_ERR("D-Bus API failure: errCode[%x], message[%s]",
+                                       err->code, err->message);
+                       g_clear_error(&err);
+               }
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       g_variant_get(reply, "(@ay)", &eir);
+       g_variant_unref(reply);
+
+       if (eir) {
+               local_oob_data->eir_len = __get_oob_data_from_variant(eir,
+                               local_oob_data->eir,
+                               sizeof(local_oob_data->eir));
+               g_variant_unref(eir);
+       }
+
+       return BLUETOOTH_ERROR_NONE;
+}
+
old mode 100755 (executable)
new mode 100644 (file)
index 4d3b971..0de69a8
@@ -36,6 +36,8 @@ int _bt_oob_add_remote_data(
 int _bt_oob_remove_remote_data(
                        bluetooth_device_address_t *remote_device_address);
 
+int _bt_le_oob_read_local_data(bt_oob_data_t *local_oob_data);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 31acaa9..8403665 100644 (file)
@@ -56,6 +56,8 @@ extern "C" {
 
 #define BLUETOOTH_OOB_DATA_LENGTH 16
 
+#define BLUETOOTH_LE_OOB_DATA_LENGTH 100
+
 #define BLUETOOTH_PIN_CODE_MAX_LENGTH 16
 
 #ifdef TIZEN_GATT_CLIENT
@@ -1536,6 +1538,9 @@ typedef struct {
        unsigned char randomizer256[BLUETOOTH_OOB_DATA_LENGTH];
        unsigned int hash256_len;
        unsigned int randomizer256_len;
+
+       unsigned char eir[BLUETOOTH_LE_OOB_DATA_LENGTH];
+       unsigned int eir_len;
 } bt_oob_data_t;
 
 /**
@@ -5233,6 +5238,51 @@ int bluetooth_oob_add_remote_data(
 int bluetooth_oob_remove_remote_data(
                        const bluetooth_device_address_t *remote_device_address);
 
+
+/**
+ * @fn int bluetooth_le_oob_read_local_data(bt_oob_data_t *local_oob_data)
+ * @brief Read the local Hash and Randmizer.
+ *
+ * This function is a synchronous call.
+ *
+ * @return   BLUETOOTH_ERROR_NONE  - Success \n
+ *           BLUETOOTH_ERROR_INTERNAL - Internal Error \n
+ *
+ * @exception  None
+ * @param[in]  None.
+ * @param[out] local_oob_data - Pointer to the local OOB data
+ *
+ * @remark       None
+ * @see        None
+ */
+int bluetooth_le_oob_read_local_data(bt_oob_data_t *local_oob_data);
+
+/**
+ * @fn int bluetooth_le_oob_add_remote_data(
+ *                     const bluetooth_device_address_t *remote_device_address,
+ *                     bluetooth_bdaddr_type_e address_type,
+ *                     bt_oob_data_t *oob_data)
+ * @brief Add/updated the remote device  Hash and Randmizer.
+ *
+ * This function is a synchronous call.
+ * No event for this api..
+ *
+ * @return   BLUETOOTH_ERROR_NONE  - Success \n
+ *           BLUETOOTH_ERROR_INTERNAL - Internal Error \n
+ *
+ * @exception  None
+ * @param[in] remote_device_address - Remote device address
+  *          address_type - bdaddr type
+ *           remote_oob_data - Ponter to Hash and Randomizer oob data structure
+ *
+ * @remark     None
+ * @see                None
+ */
+int bluetooth_le_oob_add_remote_data(
+                       const bluetooth_device_address_t *remote_device_address,
+                       bluetooth_bdaddr_type_e address_type,
+                       bt_oob_data_t *remote_oob_data);
+
 /**
  * @fn int bluetooth_gatt_get_primary_services(const bluetooth_device_address_t *address,
  *                                             bt_gatt_handle_info_t *prim_svc);
index f55bca9..6e73e1e 100644 (file)
@@ -258,6 +258,8 @@ typedef enum {
        BT_OOB_READ_LOCAL_DATA = BT_FUNC_OOB_BASE,
        BT_OOB_ADD_REMOTE_DATA,
        BT_OOB_REMOVE_REMOTE_DATA,
+       BT_LE_OOB_READ_LOCAL_DATA,
+       BT_LE_OOB_ADD_REMOTE_DATA,
        BT_AVRCP_SET_TRACK_INFO = BT_FUNC_AVRCP_BASE,
        BT_AVRCP_SET_PROPERTY,
        BT_AVRCP_SET_PROPERTIES,