【发布时间】:2022-01-01 10:43:20
【问题描述】:
我正在尝试使用 RxAndroidBle 库将块的 128 字节发送到 BLE 控制器。从手机向BLE控制器发送数据的流程如下
- 与 BLE 控制器连接
- 启动OTA(发送1)
- 发送 CRC(数据块)
- 发送数据块
- 等待 2 秒
- 重复步骤 3
- 结束 OTA(发送 2)
这是代码的快照
.flatMap(rxBleConnection -> prepareWriting())
.flatMapIterable(otaMetaData -> otaMetaData)
.zipWith(Observable.interval(2, TimeUnit.SECONDS), (item, interval) -> item)
.doOnNext(metaData -> {
otaMetaData = metaData;
})
.map(otaMetaData -> {
return mRxBleConnection.writeCharacteristic(OTA_CHECKSUM, otaMetaData.getCrcBlock()).toObservable();
})
.doOnNext(otaMetaData -> {
Log.e(TAG, "Writing CRC " + Arrays.toString(BLEUtils.toHex(otaMetaData.getCrcBlock())));
})
.map(bytes -> {
return mRxBleConnection.writeCharacteristic(OTA_DATA, otaMetaData.getDataBlock()).toObservable();
})
.doOnNext(otaMetaData -> {
Log.e(TAG, "Writing Data " + Arrays.toString(BLEUtils.toHex(otaMetaData.getDataBlock())));
})
.flatMap(bytes -> mRxBleConnection.writeCharacteristic(OTA_CONTROL,OTA_DATA_END).toObservable())
问题出在发送END OTA 时,因为flatMapIterable 返回20 个项目,.flatMap(bytes -> mRxBleConnection.writeCharacteristic(OTA_CONTROL,OTA_DATA_END) 被调用了20 次。
所以,我不确定在处理完所有 20 个项目后如何发送OTA_DATA_END 命令。此外,欢迎任何改进现有代码的建议。
【问题讨论】:
标签: android rx-java rx-java2 rx-android rxandroidble