BLE UART命令/响应/ ACK周期

时间:2019-02-25 20:25:08

标签: android bluetooth rxandroidble

我正在转换一个写在本机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()之内,我会更担心读取部分。如果不是这样,那么需要长时间运行的读取操作将被抽入一个缓冲区,一次只能处理一个字节,然后仅删除构成有效响应的那些字节并从中读取内容。

有什么想法吗?这似乎是一种常见的用法模式,但就样本而言,我一直找不到类似的东西。

0 个答案:

没有答案