Я хочу передать данные на устройство через BLE. Количество байтов составляет 64 на передачу.
Теперь проблема в том, что, когда я изменяю MTU через setMaxBatchSize (ex 64), mRxBleConnection.getMtu () возвращает MTU по умолчанию (23).
private void connect(RxBleDevice rxBleDevice){
connectionObservable = rxBleDevice.establishConnection(false)
.subscribe(rxBleConnection -> {
mRxBleConnection = rxBleConnection;
rxBleConnection.setupNotification(MainActivity.MY_UUID);
longWrite();
});
}
private void longWrite(){
mRxBleConnection.setupNotification(MainActivity.MY_UUID)
.flatMap(ob -> ob.merge(
mRxBleConnection.createNewLongWriteBuilder()
.setCharacteristicUuid(MainActivity.MY_UUID)
.setBytes(HexString.hexToBytes(writeData))
.setMaxBatchSize(64)
.build(),ob)
)
.subscribe(bytes -> {
Log.i(TAG,mRxBleConnection.getMtu());
doResponse(HexString.bytesToHex(bytes));
},throwable -> {
});
}
- Попробуйте другой способ RxBleConnection.requestMtu (int)
Disposable writeSubscription = mRxBleConnection.requestMtu(176)
.subscribe(
integer -> {
Log.i(TAG, "longWrite: "+integer);
},
throwable ->{
}
);
Бревно
04-22 16:30:58.895 9435-9494/com.example.write D/BluetoothGatt: onClientRegistered() - status=0 clientIf=7
04-22 16:30:59.642 9435-9494/com.example.write D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=7 device=50:8C:B1:6A:F9:34
04-22 16:30:59.671 9435-9532/com.example.write D/BluetoothGatt: configureMTU() - device: 50:8C:B1:6A:F9:34 mtu: 176
04-22 16:31:00.035 9435-9494/com.example.write D/BluetoothGatt: onConnectionUpdated() - Device=50:8C:B1:6A:F9:34 interval=6 latency=0 timeout=500 status=0
04-22 16:31:00.347 9435-9494/com.example.write D/BluetoothGatt: onConfigureMTU() - Device=50:8C:B1:6A:F9:34 mtu=23 status=0
МТУ всегда будет 23.