diff options
| author | Dan Harms <danharms@google.com> | 2020-06-11 21:41:56 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-06-11 21:41:56 +0000 |
| commit | d8a3ba9e5800f64f296ba5343a2ff09af4a84aa2 (patch) | |
| tree | 36425510ee1a2d3492244a4ce0fc389e488397c0 /connected-device-lib/src | |
| parent | dcca69a81fd6ccf52f95fdc884b88a7b067d79dc (diff) | |
| parent | 8f8736738fea07cc33662406f7eea1fdac6c1008 (diff) | |
| download | platform_packages_apps_Car_libs-d8a3ba9e5800f64f296ba5343a2ff09af4a84aa2.tar.gz platform_packages_apps_Car_libs-d8a3ba9e5800f64f296ba5343a2ff09af4a84aa2.tar.bz2 platform_packages_apps_Car_libs-d8a3ba9e5800f64f296ba5343a2ff09af4a84aa2.zip | |
Merge "Make default MTU size configurable" into rvc-dev
Diffstat (limited to 'connected-device-lib/src')
3 files changed, 23 insertions, 17 deletions
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java b/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java index c673ac4d..b207ee01 100644 --- a/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java +++ b/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java @@ -155,7 +155,8 @@ public class ConnectedDeviceManager { UUID.fromString(context.getString(R.string.car_reconnect_service_uuid)), context.getString(R.string.car_bg_mask), UUID.fromString(context.getString(R.string.car_secure_write_uuid)), - UUID.fromString(context.getString(R.string.car_secure_read_uuid))); + UUID.fromString(context.getString(R.string.car_secure_read_uuid)), + context.getResources().getInteger(R.integer.car_default_mtu_size)); } private ConnectedDeviceManager( @@ -168,13 +169,14 @@ public class ConnectedDeviceManager { @NonNull UUID reconnectServiceUuid, @NonNull String bgMask, @NonNull UUID writeCharacteristicUuid, - @NonNull UUID readCharacteristicUuid) { + @NonNull UUID readCharacteristicUuid, + int defaultMtuSize) { this(storage, new CarBleCentralManager(context, bleCentralManager, storage, serviceUuid, bgMask, writeCharacteristicUuid, readCharacteristicUuid), new CarBlePeripheralManager(blePeripheralManager, storage, associationServiceUuid, reconnectServiceUuid, writeCharacteristicUuid, readCharacteristicUuid, - MAX_ADVERTISEMENT_DURATION)); + MAX_ADVERTISEMENT_DURATION, defaultMtuSize)); } @VisibleForTesting diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java b/connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java index 9fc589e6..7ff39599 100644 --- a/connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java +++ b/connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java @@ -94,22 +94,20 @@ class BleDeviceMessageStream { private MessageReceivedErrorListener mMessageReceivedErrorListener; - /* - * This initial value is 20 because BLE has a default write of 23 bytes. However, 3 bytes are - * subtracted due to bytes being reserved for the command type and attribute ID. - */ - private int mMaxWriteSize = 20; + private int mMaxWriteSize; BleDeviceMessageStream(@NonNull BlePeripheralManager blePeripheralManager, @NonNull BluetoothDevice device, @NonNull BluetoothGattCharacteristic writeCharacteristic, - @NonNull BluetoothGattCharacteristic readCharacteristic) { + @NonNull BluetoothGattCharacteristic readCharacteristic, + int defaultMaxWriteSize) { mBlePeripheralManager = blePeripheralManager; mDevice = device; mWriteCharacteristic = writeCharacteristic; mReadCharacteristic = readCharacteristic; mBlePeripheralManager.addOnCharacteristicWriteListener(this::onCharacteristicWrite); mBlePeripheralManager.addOnCharacteristicReadListener(this::onCharacteristicRead); + mMaxWriteSize = defaultMaxWriteSize; } /** @@ -135,7 +133,8 @@ class BleDeviceMessageStream { * @param operationType The {@link OperationType} of this message. */ void writeMessage(@NonNull DeviceMessage deviceMessage, OperationType operationType) { - logd(TAG, "Writing message to device: " + mDevice.getAddress() + "."); + logd(TAG, "Writing message with " + deviceMessage.getMessage().length + " bytes to device: " + + mDevice.getAddress() + "."); BleDeviceMessage.Builder builder = BleDeviceMessage.newBuilder() .setOperation(operationType) .setIsPayloadEncrypted(deviceMessage.isMessageEncrypted()) @@ -346,6 +345,9 @@ class BleDeviceMessageStream { /** The maximum amount of bytes that can be written over BLE. */ void setMaxWriteSize(int maxWriteSize) { + if (maxWriteSize <= 0) { + return; + } mMaxWriteSize = maxWriteSize; } diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java b/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java index fe36fb29..ebe05dcc 100644 --- a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java +++ b/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java @@ -109,8 +109,7 @@ public class CarBlePeripheralManager extends CarBleManager { private final Duration mMaxReconnectAdvertisementDuration; - // BLE default is 23, minus 3 bytes for ATT_PROTOCOL. - private int mWriteSize = 20; + private final int mDefaultMtuSize; private String mOriginalBluetoothName; @@ -137,6 +136,7 @@ public class CarBlePeripheralManager extends CarBleManager { * @param readCharacteristicUuid {@link UUID} of characteristic the device will write to. * @param maxReconnectAdvertisementDuration Maximum duration to advertise for reconnect before * restarting. + * @param defaultMtuSize Default MTU size for new channels. */ public CarBlePeripheralManager(@NonNull BlePeripheralManager blePeripheralManager, @NonNull ConnectedDeviceStorage connectedDeviceStorage, @@ -144,7 +144,8 @@ public class CarBlePeripheralManager extends CarBleManager { @NonNull UUID reconnectServiceUuid, @NonNull UUID writeCharacteristicUuid, @NonNull UUID readCharacteristicUuid, - @NonNull Duration maxReconnectAdvertisementDuration) { + @NonNull Duration maxReconnectAdvertisementDuration, + int defaultMtuSize) { super(connectedDeviceStorage); mBlePeripheralManager = blePeripheralManager; mAssociationServiceUuid = associationServiceUuid; @@ -160,6 +161,7 @@ public class CarBlePeripheralManager extends CarBleManager { mReadCharacteristic.addDescriptor(mDescriptor); mTimeoutHandler = new Handler(Looper.getMainLooper()); mMaxReconnectAdvertisementDuration = maxReconnectAdvertisementDuration; + mDefaultMtuSize = defaultMtuSize; } @Override @@ -545,12 +547,12 @@ public class CarBlePeripheralManager extends CarBleManager { } BleDeviceMessageStream secureStream = new BleDeviceMessageStream(mBlePeripheralManager, - device, mWriteCharacteristic, mReadCharacteristic); + device, mWriteCharacteristic, mReadCharacteristic, + mDefaultMtuSize - ATT_PROTOCOL_BYTES); secureStream.setMessageReceivedErrorListener( exception -> { disconnectWithError("Error occurred in stream: " + exception.getMessage()); }); - secureStream.setMaxWriteSize(mWriteSize); SecureBleChannel secureChannel; // TODO(b/157492943): Define an out of band version of ReconnectSecureChannel if (isReconnect) { @@ -574,12 +576,12 @@ public class CarBlePeripheralManager extends CarBleManager { } private void setMtuSize(int mtuSize) { - mWriteSize = mtuSize - ATT_PROTOCOL_BYTES; BleDevice connectedDevice = getConnectedDevice(); if (connectedDevice != null && connectedDevice.mSecureChannel != null && connectedDevice.mSecureChannel.getStream() != null) { - connectedDevice.mSecureChannel.getStream().setMaxWriteSize(mWriteSize); + connectedDevice.mSecureChannel.getStream() + .setMaxWriteSize(mtuSize - ATT_PROTOCOL_BYTES); } } |
