diff --git a/system/binder/android/bluetooth/IBluetoothGatt.aidl b/system/binder/android/bluetooth/IBluetoothGatt.aidl index 72b0b2899323929d0da6d28cbacd053bb9559503..c9e1c4bc8904fa4880182a36e0e99a03aca8f6f0 100644 --- a/system/binder/android/bluetooth/IBluetoothGatt.aidl +++ b/system/binder/android/bluetooth/IBluetoothGatt.aidl @@ -96,7 +96,8 @@ interface IBluetoothGatt { void configureMTU(in int clientIf, in String address, in int mtu); void connectionParameterUpdate(in int clientIf, in String address, in int connectionPriority); void leConnectionUpdate(int clientIf, String address, int minInterval, - int maxInterval, int slaveLatency, int supervisionTimeout); + int maxInterval, int slaveLatency, int supervisionTimeout, + int minConnectionEventLen, int maxConnectionEventLen); void registerServer(in ParcelUuid appId, in IBluetoothGattServerCallback callback); void unregisterServer(in int serverIf); diff --git a/system/bta/dm/bta_dm_act.cc b/system/bta/dm/bta_dm_act.cc index 9ec15ac98cd9e4bc9b7552080a5bf35cde61508c..b7a26bd947fdedd2132ee5c28dda55d613300591 100644 --- a/system/bta/dm/bta_dm_act.cc +++ b/system/bta/dm/bta_dm_act.cc @@ -3971,8 +3971,10 @@ void bta_dm_ble_set_conn_scan_params(uint32_t scan_interval, /** This function update LE connection parameters */ void bta_dm_ble_update_conn_params(const RawAddress& bd_addr, uint16_t min_int, uint16_t max_int, uint16_t latency, - uint16_t timeout) { - if (!L2CA_UpdateBleConnParams(bd_addr, min_int, max_int, latency, timeout)) { + uint16_t timeout, uint16_t min_ce_len, + uint16_t max_ce_len) { + if (!L2CA_UpdateBleConnParams(bd_addr, min_int, max_int, latency, timeout, + min_ce_len, max_ce_len)) { APPL_TRACE_ERROR("Update connection parameters failed!"); } } diff --git a/system/bta/dm/bta_dm_api.cc b/system/bta/dm/bta_dm_api.cc index e1c0266230707884a303eb29ba7f35cb309692bf..e968bd1fc5ee6a0135ebb1fe4df8e7f3e78fcf73 100644 --- a/system/bta/dm/bta_dm_api.cc +++ b/system/bta/dm/bta_dm_api.cc @@ -727,9 +727,11 @@ void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, ******************************************************************************/ void BTA_DmBleUpdateConnectionParams(const RawAddress& bd_addr, uint16_t min_int, uint16_t max_int, - uint16_t latency, uint16_t timeout) { - do_in_bta_thread(FROM_HERE, base::Bind(bta_dm_ble_update_conn_params, bd_addr, - min_int, max_int, latency, timeout)); + uint16_t latency, uint16_t timeout, + uint16_t min_ce_len, uint16_t max_ce_len) { + do_in_bta_thread( + FROM_HERE, base::Bind(bta_dm_ble_update_conn_params, bd_addr, min_int, + max_int, latency, timeout, min_ce_len, max_ce_len)); } /******************************************************************************* diff --git a/system/bta/dm/bta_dm_int.h b/system/bta/dm/bta_dm_int.h index b0ec483abcdb2cdcff5884f59a33cdf8c47c3d2c..6aafd7d4704f3fe2e1d8a82fc73af114d3abefba 100644 --- a/system/bta/dm/bta_dm_int.h +++ b/system/bta/dm/bta_dm_int.h @@ -507,7 +507,8 @@ extern void bta_dm_ble_set_conn_scan_params(uint32_t, uint32_t); extern void bta_dm_close_gatt_conn(tBTA_DM_MSG* p_data); extern void bta_dm_ble_observe(bool, uint8_t, tBTA_DM_SEARCH_CBACK*); extern void bta_dm_ble_update_conn_params(const RawAddress&, uint16_t, uint16_t, - uint16_t, uint16_t); + uint16_t, uint16_t, uint16_t, + uint16_t); extern void bta_dm_ble_config_local_privacy(bool); extern void bta_dm_ble_set_adv_params(uint16_t adv_int_min, uint16_t adv_int_max, diff --git a/system/bta/include/bta_api.h b/system/bta/include/bta_api.h index e8f46aff75beb3806b13cad5b2bfd41132ef4906..9d4693e0b76f5956ba3ee5b1faab5541103ef4be 100644 --- a/system/bta/include/bta_api.h +++ b/system/bta/include/bta_api.h @@ -1648,7 +1648,9 @@ extern void BTA_DmBleEnableRemotePrivacy(const RawAddress& bd_addr, ******************************************************************************/ extern void BTA_DmBleUpdateConnectionParams(const RawAddress& bd_addr, uint16_t min_int, uint16_t max_int, - uint16_t latency, uint16_t timeout); + uint16_t latency, uint16_t timeout, + uint16_t min_ce_len, + uint16_t max_ce_len); /******************************************************************************* * diff --git a/system/btif/src/btif_gatt_client.cc b/system/btif/src/btif_gatt_client.cc index e49fee87e4b4c2268166c2122ee2c827c889abc0..0e06bbb908323f8bfdebf90cf0a2aa260b0cef0e 100644 --- a/system/btif/src/btif_gatt_client.cc +++ b/system/btif/src/btif_gatt_client.cc @@ -537,10 +537,11 @@ bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu) { void btif_gattc_conn_parameter_update_impl(RawAddress addr, int min_interval, int max_interval, int latency, - int timeout) { + int timeout, uint16_t min_ce_len, + uint16_t max_ce_len) { if (BTA_DmGetConnectionState(addr)) BTA_DmBleUpdateConnectionParams(addr, min_interval, max_interval, latency, - timeout); + timeout, min_ce_len, max_ce_len); else BTA_DmSetBlePrefConnParams(addr, min_interval, max_interval, latency, timeout); @@ -548,11 +549,13 @@ void btif_gattc_conn_parameter_update_impl(RawAddress addr, int min_interval, bt_status_t btif_gattc_conn_parameter_update(const RawAddress& bd_addr, int min_interval, int max_interval, - int latency, int timeout) { + int latency, int timeout, + uint16_t min_ce_len, + uint16_t max_ce_len) { CHECK_BTGATT_INIT(); - return do_in_jni_thread( - Bind(base::IgnoreResult(&btif_gattc_conn_parameter_update_impl), bd_addr, - min_interval, max_interval, latency, timeout)); + return do_in_jni_thread(Bind( + base::IgnoreResult(&btif_gattc_conn_parameter_update_impl), bd_addr, + min_interval, max_interval, latency, timeout, min_ce_len, max_ce_len)); } bt_status_t btif_gattc_set_preferred_phy(const RawAddress& bd_addr, diff --git a/system/include/hardware/bt_gatt_client.h b/system/include/hardware/bt_gatt_client.h index 4c9d464eaa67f7321246c2ef12c41aeb0a6b6bf3..6ea1c89c635c0804059c0637ebd746ea9de7e4f0 100644 --- a/system/include/hardware/bt_gatt_client.h +++ b/system/include/hardware/bt_gatt_client.h @@ -288,7 +288,9 @@ typedef struct { /** Request a connection parameter update */ bt_status_t (*conn_parameter_update)(const RawAddress& bd_addr, int min_interval, int max_interval, - int latency, int timeout); + int latency, int timeout, + uint16_t min_ce_len, + uint16_t max_ce_len); bt_status_t (*set_preferred_phy)(const RawAddress& bd_addr, uint8_t tx_phy, uint8_t rx_phy, uint16_t phy_options); diff --git a/system/stack/l2cap/l2c_ble.cc b/system/stack/l2cap/l2c_ble.cc index 51f81cfb23959dfe40066c4c32407a06bb521c29..839e5f01cc7b981d05d28387f6eff5193557d612 100644 --- a/system/stack/l2cap/l2c_ble.cc +++ b/system/stack/l2cap/l2c_ble.cc @@ -117,6 +117,10 @@ bool L2CA_UpdateBleConnParams(const RawAddress& rem_bda, uint16_t min_int, return (false); } + VLOG(2) << __func__ << ": BD_ADDR=" << rem_bda << ", min_int=" << min_int + << ", max_int=" << max_int << ", min_ce_len=" << min_ce_len + << ", max_ce_len=" << max_ce_len; + p_lcb->min_interval = min_int; p_lcb->max_interval = max_int; p_lcb->latency = latency;