Loading system/binder/android/bluetooth/IBluetoothSocketManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -29,4 +29,5 @@ interface IBluetoothSocketManager { @nullable ParcelFileDescriptor connectSocket(in BluetoothDevice device, int type, in @nullable ParcelUuid uuid, int port, int flag); @nullable ParcelFileDescriptor createSocketChannel(int type, in @nullable String serviceName, in @nullable ParcelUuid uuid, int port, int flag); void requestMaximumTxDataLength(in BluetoothDevice device); } system/btif/src/btif_sock.cc +17 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #include "btif_sock_thread.h" #include "btif_uid.h" #include "btif_util.h" #include "device/include/controller.h" #include "osi/include/thread.h" using bluetooth::Uuid; Loading @@ -45,14 +46,19 @@ static bt_status_t btsock_connect(const RawAddress* bd_addr, btsock_type_t type, const Uuid* uuid, int channel, int* sock_fd, int flags, int app_uid); static void btsock_request_max_tx_data_length(const RawAddress& bd_addr); static void btsock_signaled(int fd, int type, int flags, uint32_t user_id); static std::atomic_int thread_handle{-1}; static thread_t* thread; const btsock_interface_t* btif_sock_get_interface(void) { static btsock_interface_t interface = {sizeof(interface), btsock_listen, btsock_connect}; static btsock_interface_t interface = { sizeof(interface), btsock_listen, /* listen */ btsock_connect, /* connect */ btsock_request_max_tx_data_length /* request_max_tx_data_length */ }; return &interface; } Loading Loading @@ -210,6 +216,15 @@ static bt_status_t btsock_connect(const RawAddress* bd_addr, btsock_type_t type, return status; } static void btsock_request_max_tx_data_length(const RawAddress& remote_device) { const controller_t* controller = controller_get_interface(); uint16_t max_len = controller->get_ble_maximum_tx_data_length(); DVLOG(2) << __func__ << ": max_len=" << max_len; BTA_DmBleSetDataLength(remote_device, max_len); } static void btsock_signaled(int fd, int type, int flags, uint32_t user_id) { switch (type) { case BTSOCK_RFCOMM: Loading system/device/include/controller.h +1 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ typedef struct controller_t { uint16_t (*get_acl_packet_size_ble)(void); uint16_t (*get_ble_default_data_packet_length)(void); uint16_t (*get_ble_maximum_tx_data_length)(void); uint16_t (*get_ble_maxium_advertising_data_length)(void); uint8_t (*get_ble_number_of_supported_advertising_sets)(void); Loading system/device/src/controller.cc +18 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,11 @@ static uint8_t ble_resolving_list_max_size; static uint8_t ble_supported_states[BLE_SUPPORTED_STATES_SIZE]; static bt_device_features_t features_ble; static uint16_t ble_suggested_default_data_length; static uint16_t ble_supported_max_tx_octets; static uint16_t ble_supported_max_tx_time; static uint16_t ble_supported_max_rx_octets; static uint16_t ble_supported_max_rx_time; static uint16_t ble_maxium_advertising_data_length; static uint8_t ble_number_of_supported_advertising_sets; static uint8_t local_supported_codecs[MAX_LOCAL_SUPPORTED_CODECS_SIZE]; Loading Loading @@ -212,6 +217,12 @@ static future_t* start_up(void) { } if (HCI_LE_DATA_LEN_EXT_SUPPORTED(features_ble.as_array)) { response = AWAIT_COMMAND(packet_factory->make_ble_read_maximum_data_length()); packet_parser->parse_ble_read_maximum_data_length_response( response, &ble_supported_max_tx_octets, &ble_supported_max_tx_time, &ble_supported_max_rx_octets, &ble_supported_max_rx_time); response = AWAIT_COMMAND( packet_factory->make_ble_read_suggested_default_data_length()); packet_parser->parse_ble_read_suggested_default_data_length_response( Loading Loading @@ -448,6 +459,12 @@ static uint16_t get_ble_suggested_default_data_length(void) { return ble_suggested_default_data_length; } static uint16_t get_ble_maximum_tx_data_length(void) { CHECK(readable); CHECK(ble_supported); return ble_supported_max_tx_octets; } static uint16_t get_ble_maxium_advertising_data_length(void) { CHECK(readable); CHECK(ble_supported); Loading Loading @@ -540,6 +557,7 @@ static const controller_t interface = { get_acl_packet_size_classic, get_acl_packet_size_ble, get_ble_suggested_default_data_length, get_ble_maximum_tx_data_length, get_ble_maxium_advertising_data_length, get_ble_number_of_supported_advertising_sets, Loading system/hci/include/hci_packet_factory.h +1 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ typedef struct { BT_HDR* (*make_ble_read_local_supported_features)(void); BT_HDR* (*make_ble_read_resolving_list_size)(void); BT_HDR* (*make_ble_read_suggested_default_data_length)(void); BT_HDR* (*make_ble_read_maximum_data_length)(void); BT_HDR* (*make_ble_read_maximum_advertising_data_length)(void); BT_HDR* (*make_ble_read_number_of_supported_advertising_sets)(void); BT_HDR* (*make_ble_set_event_mask)(const bt_event_mask_t* event_mask); Loading Loading
system/binder/android/bluetooth/IBluetoothSocketManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -29,4 +29,5 @@ interface IBluetoothSocketManager { @nullable ParcelFileDescriptor connectSocket(in BluetoothDevice device, int type, in @nullable ParcelUuid uuid, int port, int flag); @nullable ParcelFileDescriptor createSocketChannel(int type, in @nullable String serviceName, in @nullable ParcelUuid uuid, int port, int flag); void requestMaximumTxDataLength(in BluetoothDevice device); }
system/btif/src/btif_sock.cc +17 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #include "btif_sock_thread.h" #include "btif_uid.h" #include "btif_util.h" #include "device/include/controller.h" #include "osi/include/thread.h" using bluetooth::Uuid; Loading @@ -45,14 +46,19 @@ static bt_status_t btsock_connect(const RawAddress* bd_addr, btsock_type_t type, const Uuid* uuid, int channel, int* sock_fd, int flags, int app_uid); static void btsock_request_max_tx_data_length(const RawAddress& bd_addr); static void btsock_signaled(int fd, int type, int flags, uint32_t user_id); static std::atomic_int thread_handle{-1}; static thread_t* thread; const btsock_interface_t* btif_sock_get_interface(void) { static btsock_interface_t interface = {sizeof(interface), btsock_listen, btsock_connect}; static btsock_interface_t interface = { sizeof(interface), btsock_listen, /* listen */ btsock_connect, /* connect */ btsock_request_max_tx_data_length /* request_max_tx_data_length */ }; return &interface; } Loading Loading @@ -210,6 +216,15 @@ static bt_status_t btsock_connect(const RawAddress* bd_addr, btsock_type_t type, return status; } static void btsock_request_max_tx_data_length(const RawAddress& remote_device) { const controller_t* controller = controller_get_interface(); uint16_t max_len = controller->get_ble_maximum_tx_data_length(); DVLOG(2) << __func__ << ": max_len=" << max_len; BTA_DmBleSetDataLength(remote_device, max_len); } static void btsock_signaled(int fd, int type, int flags, uint32_t user_id) { switch (type) { case BTSOCK_RFCOMM: Loading
system/device/include/controller.h +1 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,7 @@ typedef struct controller_t { uint16_t (*get_acl_packet_size_ble)(void); uint16_t (*get_ble_default_data_packet_length)(void); uint16_t (*get_ble_maximum_tx_data_length)(void); uint16_t (*get_ble_maxium_advertising_data_length)(void); uint8_t (*get_ble_number_of_supported_advertising_sets)(void); Loading
system/device/src/controller.cc +18 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,11 @@ static uint8_t ble_resolving_list_max_size; static uint8_t ble_supported_states[BLE_SUPPORTED_STATES_SIZE]; static bt_device_features_t features_ble; static uint16_t ble_suggested_default_data_length; static uint16_t ble_supported_max_tx_octets; static uint16_t ble_supported_max_tx_time; static uint16_t ble_supported_max_rx_octets; static uint16_t ble_supported_max_rx_time; static uint16_t ble_maxium_advertising_data_length; static uint8_t ble_number_of_supported_advertising_sets; static uint8_t local_supported_codecs[MAX_LOCAL_SUPPORTED_CODECS_SIZE]; Loading Loading @@ -212,6 +217,12 @@ static future_t* start_up(void) { } if (HCI_LE_DATA_LEN_EXT_SUPPORTED(features_ble.as_array)) { response = AWAIT_COMMAND(packet_factory->make_ble_read_maximum_data_length()); packet_parser->parse_ble_read_maximum_data_length_response( response, &ble_supported_max_tx_octets, &ble_supported_max_tx_time, &ble_supported_max_rx_octets, &ble_supported_max_rx_time); response = AWAIT_COMMAND( packet_factory->make_ble_read_suggested_default_data_length()); packet_parser->parse_ble_read_suggested_default_data_length_response( Loading Loading @@ -448,6 +459,12 @@ static uint16_t get_ble_suggested_default_data_length(void) { return ble_suggested_default_data_length; } static uint16_t get_ble_maximum_tx_data_length(void) { CHECK(readable); CHECK(ble_supported); return ble_supported_max_tx_octets; } static uint16_t get_ble_maxium_advertising_data_length(void) { CHECK(readable); CHECK(ble_supported); Loading Loading @@ -540,6 +557,7 @@ static const controller_t interface = { get_acl_packet_size_classic, get_acl_packet_size_ble, get_ble_suggested_default_data_length, get_ble_maximum_tx_data_length, get_ble_maxium_advertising_data_length, get_ble_number_of_supported_advertising_sets, Loading
system/hci/include/hci_packet_factory.h +1 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ typedef struct { BT_HDR* (*make_ble_read_local_supported_features)(void); BT_HDR* (*make_ble_read_resolving_list_size)(void); BT_HDR* (*make_ble_read_suggested_default_data_length)(void); BT_HDR* (*make_ble_read_maximum_data_length)(void); BT_HDR* (*make_ble_read_maximum_advertising_data_length)(void); BT_HDR* (*make_ble_read_number_of_supported_advertising_sets)(void); BT_HDR* (*make_ble_set_event_mask)(const bt_event_mask_t* event_mask); Loading