我正在转换一个写在本机BLE堆栈上的非常复杂的写/读/写周期,并且想知道以下模式在RxAndroidBLE(代码为Kotlin)中是否可行
fun sendCommandList(connection: RxBleConnection, commands: Array<String>) {
Observable.fromArray(commands)
.flatMapIterable { it.asIterable() } // convert to individual commands
.map { it.toByteArray() }
.map {
connection.writeCharacteristic(TX_CHAR_UUID, it)
.flatMap { bytes -> connection.readCharacteristic((RX_CHAR_UUID)) }
.flatMap { bytes -> val ackNackBytes = processResponse(bytes); connection.writeCharacteristic(TX_CHAR_UUID, ackNackBytes) }
}
.subscribeBy( onError = { }, onComplete = { }, onNext = { })
}
我只是在尝试访问硬件之前尝试编写代码,因此目前无法进行测试,并且想知道它是否可行。如果完整的响应可能不在一个readCharacteristic()之内,我会更担心读取部分。如果不是这样,那么需要长时间运行的读取操作将被抽入一个缓冲区,一次只能处理一个字节,然后仅删除构成有效响应的那些字节并从中读取内容。
有什么想法吗?这似乎是一种常见的用法模式,但就样本而言,我一直找不到类似的东西。