summaryrefslogtreecommitdiffstats
path: root/connected-device-lib/src
diff options
context:
space:
mode:
authorDan Harms <danharms@google.com>2020-06-11 21:41:56 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-06-11 21:41:56 +0000
commitd8a3ba9e5800f64f296ba5343a2ff09af4a84aa2 (patch)
tree36425510ee1a2d3492244a4ce0fc389e488397c0 /connected-device-lib/src
parentdcca69a81fd6ccf52f95fdc884b88a7b067d79dc (diff)
parent8f8736738fea07cc33662406f7eea1fdac6c1008 (diff)
downloadplatform_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')
-rw-r--r--connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java8
-rw-r--r--connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java16
-rw-r--r--connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java16
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);
}
}