Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87ace0f3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Bluetooth MIDI: Set MTU after service discovery" into tm-qpr-dev am: 9871f1fe

parents 3269c4dc 9871f1fe
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -100,16 +100,12 @@ public final class BluetoothMidiDevice {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,
                int newState) {
            Log.d(TAG, "onConnectionStateChange() status: " + status + ", newState: " + newState);
            String intentAction;
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                Log.d(TAG, "Connected to GATT server.");
                Log.d(TAG, "Attempting to start service discovery:" +
                        mBluetoothGatt.discoverServices());
                if (!mBluetoothGatt.requestMtu(MAX_PACKET_SIZE)) {
                    Log.e(TAG, "request mtu failed");
                    mPacketEncoder.setMaxPacketSize(DEFAULT_PACKET_SIZE);
                    mPacketDecoder.setMaxPacketSize(DEFAULT_PACKET_SIZE);
                }
            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                Log.i(TAG, "Disconnected from GATT server.");
                close();
@@ -118,6 +114,7 @@ public final class BluetoothMidiDevice {

        @Override
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            Log.d(TAG, "onServicesDiscovered() status: " +  status);
            if (status == BluetoothGatt.GATT_SUCCESS) {
                BluetoothGattService service = gatt.getService(MIDI_SERVICE);
                if (service != null) {
@@ -137,6 +134,13 @@ public final class BluetoothMidiDevice {
                        // Specification says to read the characteristic first and then
                        // switch to receiving notifications
                        mBluetoothGatt.readCharacteristic(characteristic);

                        // Request higher MTU size
                        if (!gatt.requestMtu(MAX_PACKET_SIZE)) {
                            Log.e(TAG, "request mtu failed");
                            mPacketEncoder.setMaxPacketSize(DEFAULT_PACKET_SIZE);
                            mPacketDecoder.setMaxPacketSize(DEFAULT_PACKET_SIZE);
                        }
                    }

                    openBluetoothDevice(mBluetoothDevice);
@@ -235,13 +239,13 @@ public final class BluetoothMidiDevice {
            System.arraycopy(buffer, 0, mCachedBuffer, 0, count);

            if (DEBUG) {
                logByteArray("Sent ", mCharacteristic.getValue(), 0,
                       mCharacteristic.getValue().length);
                logByteArray("Sent ", mCachedBuffer, 0, mCachedBuffer.length);
            }

            if (mBluetoothGatt.writeCharacteristic(mCharacteristic, mCachedBuffer,
                    mCharacteristic.getWriteType()) != BluetoothGatt.GATT_SUCCESS) {
                Log.w(TAG, "could not write characteristic to Bluetooth GATT");
            int result = mBluetoothGatt.writeCharacteristic(mCharacteristic, mCachedBuffer,
                    mCharacteristic.getWriteType());
            if (result != BluetoothGatt.GATT_SUCCESS) {
                Log.w(TAG, "could not write characteristic to Bluetooth GATT. result: " + result);
                return false;
            }

@@ -254,6 +258,10 @@ public final class BluetoothMidiDevice {
        mBluetoothDevice = device;
        mService = service;

        // Set a small default packet size in case there is an issue with configuring MTUs.
        mPacketEncoder.setMaxPacketSize(DEFAULT_PACKET_SIZE);
        mPacketDecoder.setMaxPacketSize(DEFAULT_PACKET_SIZE);

        mBluetoothGatt = mBluetoothDevice.connectGatt(context, false, mGattCallback);

        mContext = context;