Bluetooth MIDI: Set MTU after service discovery
ag/15888883 introduced a change to set MTUs. This change would set MTUs
once the device is connected.
We got reports that packets get dropped after ~20 bytes on some BLE
MIDI connections.
It seems like setting MTU only works after a successful service
discovery, rather simply after calling service discovery. That is,
requestMtu() must wait for the onServicesDiscovered() callback instead
of simply after calling discoverServices().
BluetoothMidiService assumed that requestMtu() would either return false
or have a callback. However, for some BLE MIDI devices, neither would
occur. This results in BluetoothMidiService using a buffer size of 512
bytes when many devices on the market only supports 23 bytes. This
results in only the first ~20 bytes getting sent for a packet.
The fix here is to call requestMtu() after onServicesDiscovered() as
well as to set default encoder and decoder sizes in case requestMtu()
fails.
Bug: 246515282
Test: Connected Yamaha UD-BT01 with Android. Sent 100 bytes of SysEx to
verify data gets sent correctly. Verifed that data gets logged correctly
on MidiScope on the other side.
Merged-In: I8f7e9bc98064b110010a9af7aea56c786ef9e374
Change-Id: I8f7e9bc98064b110010a9af7aea56c786ef9e374
(cherry picked from commit 803d71a21185d58c3be029b45d5505e104be5bc8)
1 file changed