【发布时间】:2018-01-10 07:06:47
【问题描述】:
我正在对 BLE 进行长时间写入以进行 OTA 更新,但我需要等待 BLE 设备的写入响应以发送更多数据,但我不知道如何捕获设备写入响应,我正在使用带有 android 7 的三星 Galaxy Tab s2 和 Kotlin 作为我的代码
override fun otaDataWrite(data:ByteArray) {
manager.connection?.flatMap { rxBleConnection: RxBleConnection? -> rxBleConnection?.createNewLongWriteBuilder()
?.setCharacteristicUuid(OTACharacteristics.OTA_DATA.uuid)
?.setBytes(data)
?.setMaxBatchSize(totalPackages)
?.build()
}?.subscribe({ t: ByteArray? ->
Log.i("arrive", "data ${converter.bytesToHex(t)}")
manageOtaWrite()
}, { t: Throwable? -> t?.printStackTrace() })
每次我编写特征时,订阅都会立即用写入的数据响应我,我需要捕获特征的响应,以发送更多数据
【问题讨论】:
-
不是你问题的真正答案,但如果你需要快速写入大量数据,你真的不应该使用长写。而是使用无响应写入,因为这样的吞吐量要大得多。
-
Leonardo — 1.
.setMaxBatchSize()用于设置一个包中可以发送的最大字节数,totalPackages似乎是要发送的包数 2. @ 到底是什么987654324@? 3. 通过device write response,您会想到来自特定特征的通知,还是只是来自外围设备的确认它已收到单个包? @Emil — 可以以任何方式与您联系吗? -
当然.. 有什么特别想谈的吗?我认为最简单的方法就是开始一个堆栈溢出聊天。
-
@DariuszSeweryn 是的,我注意到我在
setMaxBatchSize()方法中的错误现在我将 data.size 传递给该方法,2 totalPackages 是我需要发送的包的总数(我正在发送一个文件通过 BLE 进行 OTA 更新),3 是的,我需要外围设备确认它已收到包,在此基础上我将发送另一个包 -
@Emil 我知道,但它是 OTA 更新的 DFU 特性,我这样做 IOS 和每次写入的特性响应
标签: android bluetooth-lowenergy kotlin ota rxandroidble