From: Sangki Park Date: Fri, 6 Jul 2018 08:30:13 +0000 (+0900) Subject: Set a default LE(LL) TX packet length to maximum X-Git-Tag: submit/tizen/20180710.070923~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b0261c1b0dbb79e63dcfd22477f7e219fe5daf57;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git Set a default LE(LL) TX packet length to maximum [Problem] N/A [Cause & Measure] To support LE packet length extension [Checking Method] Make a LE connection and check TX/RX size (AS IS) > LL_LENGTH_REQ (DEV -> Gear) RX Max : Octets: 251 , Time: 2120 ms TX Max : Octets: 251 , Time: 2120 ms < LL_LENGTH_RSP (Gear -> DEV) RX Max : Octets: 251 , Time: 2120 ms TX Max : Octets: 27 , Time: 328 ms (TO BE) > LL_LENGTH_REQ (DEV -> Gear) RX Max : Octets: 251 , Time: 2120 ms TX Max : Octets: 251 , Time: 2120 ms < LL_LENGTH_RSP (Gear -> DEV) RX Max : Octets: 251 , Time: 2120 ms TX Max : Octets: 251 , Time: 2120 ms Change-Id: Ic193a6f07b75596c1279803cecb63711e53b0c47 --- diff --git a/bt-service/bt-service-adapter-le.c b/bt-service/bt-service-adapter-le.c index aeb8cb87..a82e8ce7 100644 --- a/bt-service/bt-service-adapter-le.c +++ b/bt-service/bt-service-adapter-le.c @@ -189,6 +189,29 @@ void _bt_service_adapter_le_deinit(void) __bt_free_le_adv_slot(); } +int _bt_le_set_max_packet_len(void) +{ + int result = BLUETOOTH_ERROR_NONE; + int tx_octets, tx_time; + bluetooth_le_read_maximum_data_length_t max_len = {0}; + + if (BLUETOOTH_ERROR_NONE != _bt_le_read_maximum_data_length(&max_len)) + return BLUETOOTH_ERROR_INTERNAL; + + if (max_len.max_tx_octets > BT_LE_TX_LEN_DEFAULT) { + tx_octets = max_len.max_tx_octets > BT_LE_TX_LEN_MAX ? + BT_LE_TX_LEN_MAX : max_len.max_tx_octets; + tx_time = BT_LE_TX_TIME_MAX; + + result = _bt_le_write_host_suggested_default_data_length(tx_octets, tx_time); + + BT_DBG("Wrote max packet size : result[%d], MAX[%d], set[%d]", + result, max_len.max_tx_octets, tx_octets); + } + + return result; +} + gboolean _bt_update_le_feature_support(const char *item, const char *value) { if (item == NULL || value == NULL) @@ -2160,8 +2183,6 @@ int _bt_le_read_maximum_data_length( reply = g_dbus_proxy_call_sync(proxy, "LEReadMaximumDataLength", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); - g_object_unref(proxy); - if (reply == NULL) { BT_ERR("LEReadMaximumDataLength dBUS-RPC failed"); if (error != NULL) { @@ -2202,8 +2223,6 @@ int _bt_le_write_host_suggested_default_data_length( NULL, &error); - g_object_unref(proxy); - if (reply == NULL) { BT_ERR("_bt_le_write_host_suggested_default_data_length dBUS-RPC failed"); if (error != NULL) { diff --git a/bt-service/bt-service-adapter.c b/bt-service/bt-service-adapter.c index 1ce4ca32..16af447f 100644 --- a/bt-service/bt-service-adapter.c +++ b/bt-service/bt-service-adapter.c @@ -43,6 +43,8 @@ #include "bt-service-main.h" #include "bt-service-avrcp.h" #include "bt-service-device.h" +#include "bt-service-adapter-le.h" + #ifdef TIZEN_DPM_ENABLE #include "bt-service-dpm.h" #endif @@ -615,7 +617,11 @@ static int __bt_set_le_enabled(void) /* Update Bluetooth Status to notify other modules */ if (vconf_set_int(VCONFKEY_BT_LE_STATUS, VCONFKEY_BT_LE_STATUS_ON) != 0) - BT_ERR("Set vconf failed\n"); + BT_ERR("Set vconf failed"); + + /* set packet length to max size to enable packet length extension */ + if (BLUETOOTH_ERROR_NONE != _bt_le_set_max_packet_len()) + BT_ERR("Fail to set max packet length"); if (_bt_eventsystem_set_value(SYS_EVENT_BT_STATE, EVT_KEY_BT_LE_STATE, EVT_VAL_BT_LE_ON) != ES_R_OK) diff --git a/bt-service/include/bt-service-adapter-le.h b/bt-service/include/bt-service-adapter-le.h index 6c79a6e4..3260303f 100644 --- a/bt-service/include/bt-service-adapter-le.h +++ b/bt-service/include/bt-service-adapter-le.h @@ -32,6 +32,11 @@ extern "C" { #define BT_LE_SCAN_WINDOW_MIN 2.5 #define BT_LE_SCAN_WINDOW_MAX 10240 +#define BT_LE_TX_LEN_DEFAULT 0x001b +#define BT_LE_TX_TIME_DEFAULT 0x0148 +#define BT_LE_TX_LEN_MAX 0x00fb +#define BT_LE_TX_TIME_MAX 0x0848 + typedef enum { BT_LE_AD_TYPE_INCOMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x02, BT_LE_AD_TYPE_COMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x03, @@ -131,6 +136,8 @@ int _bt_le_read_host_suggested_default_data_length(bluetooth_le_read_host_sugges int _bt_le_set_data_length(bluetooth_device_address_t *device_address, const unsigned int max_tx_Octets, const unsigned int max_tx_Time); +int _bt_le_set_max_packet_len(void); + int _bt_initialize_ipsp(void); int _bt_deinitialize_ipsp(void);