Я пытаюсь записать> 20 байтов данных по заданной (настраиваемой) характеристике. В следующем журнале я попытался записать 85 байт:
код:
connectionObservable
.flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(
wChar.uuid(),
wChar.bytes()))
.observeOn(mainThread())
.subscribe(
bytes -> wChar.success(),
this::onWriteFailure
);
результат: на стороне сервера (nrf52) я вижу EXEC_WRITE, но отправляются только первые 20 байт.
это логарифм:
D / RxBle # ClientOperationQueue: QUEUED ConnectOperation (17461182) D / RxBle # ClientOperationQueue: STARTED ConnectOperation (17461182) D / RxBle # ClientOperationQueue: QUEUED ConnectOperation (218660306) D / RxBle # ClientOperation ConnectOperation (218660306) D / RxBle # ClientOperation ConnectOperation onConnectionStateChange newState = 2 status = 0 D / RxBle # BluetoothGatt: onConnectionStateChange newState = 2 status = 0 D / RxBle # ClientOperationQueue: FINISHED ConnectOperation (218660306) D / RxBle # ClientOperationQueue: FINISHEDConnectOperationDecovery: D / RxBlee # ClientOperationQueue: # RINISHEDConnectOperationService (17) (125599796) D / RxBle # ConnectionOperationQueue: STARTED ServiceDiscoveryOperation (125599796) D / RxBle # BluetoothGatt: onServicesDiscovered status = 0 D / RxBle # ConnectionOperationQueue: QUEUED CharacteristicReadOperation (2626026) D / RxBueEDOperation ConnectionOperationQueue: STARTED CharacteristicReadOpera tion (2626026) D / RxBle # BluetoothGatt: onCharacteristicRead характеристика = 0000fa03-0278-03be-4447-091eba91df8e status = 0 D / RxBle # ConnectionOperationQueue: FINISHED CharacteristicReadOperation (2626026) D / RxBle # ClientOperation8UEDQueue25 #ClientOperationQueue: STARTED ConnectOperation (158692575) D / RxBle # BluetoothGatt: onConnectionStateChange newState = 2 status = 0 D / RxBle # ClientOperationQueue: FINISHED ConnectOperation (158692575) D / RxBle # ConnectionOperationOperation ServiceDiscoveryOperation (20778996)> D / RxBle # BluetoothGatt: onServicesDiscovered status = 0
D / RxBle # ConnectionOperationQueue: QUEUED CharacteristicWriteOperation (51009974) D / RxBle # ConnectionOperationOperationQueue: FINISHED ServiceDiscoveryOperation74 )
> D / RxBle # BluetoothGatt: onCharacteristic Записать характеристику = 0000fa04-0278-03be-4447-091eba91df8e status = 0D / RxBle # ConnectionOperationQueue: FINISHED CharacteristicWriteOperation (51009974)
Еще я пробовал использовать длинную процедуру rxAndroidBlewrite:
connectionObservable
.flatMap(rxBleConnection -> {
rxBleConnection.setupNotification(wChar.uuid());
return rxBleConnection.createNewLongWriteBuilder()
.setCharacteristicUuid(wChar.uuid())
.setBytes(array)
.build();
}
)
.subscribe(
bytes -> wChar.success(),
this::onWriteFailure
);
и он отправляет несколько последовательных команд записи, но это не длинная процедура записи (с n ATT_prepare и 1 ATT_exec), она независимо пишет:
D / RxBle # ConnectionOperationQueue: QUEUED CharacteristicLongWriteOperation (74131396) D / RxBle # ConnectionOperationQueue: FINISHED ServiceDiscoveryOperation (250008320) D / RxBle # ConnectionOperationQueue: STARTED CharacteristicLongWriteOperation (74131396)
D / RxBle # BluetoothGatt: onCharacteristicWrite характеристика = 0000fa04-0278-03be-4447-091eba91df8e status = 0
D / RxBle # BluetoothGatt: onCharacteristicWrite характеристика = 0000fa04-0278-03be-4447-091eba91df8e status = 0
D / RxBle # BluetoothGatt: onCharacteristicWrite характеристика = 0000fa04-0278-03be-4447-091eba91df8e status = 0
D / RxBle # BluetoothGatt: onCharacteristicWrite характеристика = 0000fa04-0278-03be-4447-091eba91df8e status = 0
D / RxBle # BluetoothGatt: onCharacteristicWrite характеристика = 0000fa04-0278-03be-4447-091eba91df8e status = 0
D / RxBle # ConnectionOperationQueue: FINISHED CharacteristicLongWriteOperation (74131396)
конечно, мне удалось бы восстановить на сервере или изменить MTU, но я хочу использовать запись в очереди BLE, которая обычно поддерживается моим центральным (rxandroidble) и моим периферийным устройством (nrf52)