From: Deokhyun Kim Date: Mon, 19 Aug 2019 09:33:53 +0000 (+0900) Subject: Add BT_SET_LE_STATIC_RANDOM_ADDRESS function X-Git-Tag: accepted/tizen/unified/20190822.105958^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git;a=commitdiff_plain;h=4e23d1def37f740e04106ab33a837026b367df96 Add BT_SET_LE_STATIC_RANDOM_ADDRESS function Change-Id: Ic9d832ccfedaf40846d7b06e9c4bea4b08e9717b Signed-off-by: Deokhyun Kim --- diff --git a/bt-oal/bluez_hal/src/bt-hal-adapter-le.c b/bt-oal/bluez_hal/src/bt-hal-adapter-le.c index 86b7bbf..1384adf 100644 --- a/bt-oal/bluez_hal/src/bt-hal-adapter-le.c +++ b/bt-oal/bluez_hal/src/bt-hal-adapter-le.c @@ -118,6 +118,37 @@ int _bt_hal_le_disable(void) { return _bt_hal_dbus_disable_le(); } + +int _bt_hal_set_le_static_random_address(uint8_t enable) +{ + DBG("+"); + GError *error = NULL; + GVariant *ret; + GDBusProxy *proxy; + + proxy = _bt_hal_get_adapter_proxy(); + if (proxy == NULL) + return BT_STATUS_FAIL; + + ret = g_dbus_proxy_call_sync(proxy, "SetLeStaticRandomAddress", + g_variant_new("(b)", (enable ? TRUE : FALSE)), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + + if (error) { + ERR("Set static address Fail: %s", error->message); + g_clear_error(&error); + return BT_STATUS_FAIL; + } + + INFO("Set le static address [%d]", enable); + if (ret) + g_variant_unref(ret); + + return BT_STATUS_SUCCESS; +} #endif static void __bt_hal_free_le_adv_slot(void) diff --git a/bt-oal/bluez_hal/src/bt-hal-adapter-le.h b/bt-oal/bluez_hal/src/bt-hal-adapter-le.h index a26c393..d8123cc 100644 --- a/bt-oal/bluez_hal/src/bt-hal-adapter-le.h +++ b/bt-oal/bluez_hal/src/bt-hal-adapter-le.h @@ -37,6 +37,8 @@ extern "C" { int _bt_hal_le_enable(void); int _bt_hal_le_disable(void); + +int _bt_hal_set_le_static_random_address(uint8_t enable); #endif void _bt_hal_register_gatt_le_dbus_handler_cb(handle_stack_msg cb); diff --git a/bt-oal/bluez_hal/src/bt-hal-bluetooth.c b/bt-oal/bluez_hal/src/bt-hal-bluetooth.c index 3944d14..a3348b9 100644 --- a/bt-oal/bluez_hal/src/bt-hal-bluetooth.c +++ b/bt-oal/bluez_hal/src/bt-hal-bluetooth.c @@ -458,6 +458,7 @@ static const bt_interface_t bluetooth_if = { .enable_rssi_monitoring = enable_rssi_monitoring, .get_connected_link_rssi_strength = get_connected_link_rssi_strength, .enable_gap_auth_notifications = enable_gap_auth_notifications, + .set_le_static_random_address = _bt_hal_set_le_static_random_address, .set_hal_adapter_request_state = set_hal_adapter_request_state, .set_hal_le_request_state = set_hal_le_request_state, #endif diff --git a/bt-oal/hardware/bluetooth.h b/bt-oal/hardware/bluetooth.h index ce0f49d..603c61e 100644 --- a/bt-oal/hardware/bluetooth.h +++ b/bt-oal/hardware/bluetooth.h @@ -843,6 +843,9 @@ typedef struct { * type == value from bt_gap_auth_variant_t */ int (*enable_gap_auth_notifications)(uint32_t type, uint8_t enable); + + int (*set_le_static_random_address)(uint8_t enable); + /* * Sets is_activating variable in HAL to TRUE. It is required for the * adapter switched on event to propagate to upper layers from HAL. diff --git a/bt-oal/include/oal-adapter-mgr.h b/bt-oal/include/oal-adapter-mgr.h index 0dfacf0..23b98c4 100644 --- a/bt-oal/include/oal-adapter-mgr.h +++ b/bt-oal/include/oal-adapter-mgr.h @@ -429,6 +429,8 @@ oal_status_t adapter_ble_multi_adv_enable(int instance_id); */ oal_status_t adapter_ble_multi_adv_disable(int instance_id); +oal_status_t adapter_set_le_static_random_address(int enable); + /** * @brief Check if the advertising is enable * diff --git a/bt-oal/oal-adapter-mgr.c b/bt-oal/oal-adapter-mgr.c index f96c650..04b48a9 100644 --- a/bt-oal/oal-adapter-mgr.c +++ b/bt-oal/oal-adapter-mgr.c @@ -716,6 +716,26 @@ oal_status_t adapter_ble_multi_adv_disable(int instance_id) return OAL_STATUS_SUCCESS; } +oal_status_t adapter_set_le_static_random_address(int enable) +{ + int ret; + + CHECK_OAL_INITIALIZED(); + API_TRACE("%d", enable); + +#ifdef TIZEN_BT_HAL + ret = blued_api->set_le_static_random_address((enable ? 1 : 0)); + if (ret != BT_STATUS_SUCCESS) + BT_ERR("Static address set failed: [%s]", status2string(ret)); + ret = convert_to_oal_status(ret); +#else + BT_INFO("Not Supported"); + ret = OAL_STATUS_NOT_SUPPORT; +#endif + + return ret; +} + static void cb_adapter_properties(bt_status_t status, int num_properties, bt_property_t *properties) diff --git a/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c b/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c index 2e47f46..a0c503a 100644 --- a/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c +++ b/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c @@ -1658,3 +1658,30 @@ gboolean _bt_is_le_coded_phy_supported(void) /*************************************** LE Scan APIs *********************************************/ + +int _bt_set_le_static_random_address(gboolean is_enable) +{ + int result = BLUETOOTH_ERROR_NONE; + + if (__bt_is_factory_test_mode()) { + BT_ERR("Unable to set le random address in factory binary !!"); + return BLUETOOTH_ERROR_NOT_SUPPORT; + } + + if (_bt_adapter_get_status() != BT_ACTIVATED && + _bt_adapter_get_le_status() != BT_LE_ACTIVATED) { + return BLUETOOTH_ERROR_DEVICE_NOT_ENABLED; + } + + result = adapter_set_le_static_random_address(is_enable); + if (result != OAL_STATUS_SUCCESS) { + BT_ERR("adapter_set_connectable failed: %d", result); + result = BLUETOOTH_ERROR_INTERNAL; + } else { + BT_INFO("SetLeStaticRandomAddress as %d", is_enable); + result = BLUETOOTH_ERROR_NONE; + } + + return result; +} + diff --git a/bt-service-adaptation/services/bt-request-handler.c b/bt-service-adaptation/services/bt-request-handler.c index 358bb26..b9c11bd 100644 --- a/bt-service-adaptation/services/bt-request-handler.c +++ b/bt-service-adaptation/services/bt-request-handler.c @@ -2408,6 +2408,16 @@ int __bt_bluez_request(int function_name, } break; } + case BT_SET_LE_STATIC_RANDOM_ADDRESS: { + gboolean is_enable; + + __bt_service_get_parameters(in_param1, &is_enable, + sizeof(gboolean)); + + result = _bt_set_le_static_random_address(is_enable); + + break; + } #ifdef TIZEN_GATT_CLIENT /* Local Async */ case BT_GATT_CLIENT_REGISTER: { diff --git a/bt-service-adaptation/services/include/bt-service-core-adapter-le.h b/bt-service-adaptation/services/include/bt-service-core-adapter-le.h index 965c9b5..8b03a07 100644 --- a/bt-service-adaptation/services/include/bt-service-core-adapter-le.h +++ b/bt-service-adaptation/services/include/bt-service-core-adapter-le.h @@ -86,6 +86,8 @@ gboolean _bt_is_le_2m_phy_supported(void); gboolean _bt_is_le_coded_phy_supported(void); +int _bt_set_le_static_random_address(gboolean is_enable); + #ifdef __cplusplus } #endif /* __cplusplus */