rxAndroidBle получить длинный ответ записи

Я делаю длинную запись в BLE для создания OTA-обновления, но мне нужно дождаться ответа на запись устройства BLE для отправки большего количества данных, но я не знаю, как поймать ответ на запись устройства, я используя вкладку Samsung galaxy s2 с android 7, и 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() }) 

каждый раз, когда я пишу характеристику, подписки отвечают мне сразу на письменные данные, мне нужно захватить ответ характеристики, для отправки большего количества данных

Вы пишете об ответе от характеристики – я предполагаю, что характеристика, которую вы называете, является той, у которой UUID=OTA_DATA . Длинная запись состоит из небольших записей внутри (так называемые партии).

То, что вы, вероятно, хотите достичь, это что-то вроде:

 fun otaDataWrite(data: ByteArray) { manager.connection!!.setupNotification(OTA_DATA) // first we need to get the notification on to get the response .flatMap { responseNotificationObservable -> // when the notification is ready we create the long write connection.createNewLongWriteBuilder() .setCharacteristicUuid(OTA_DATA) .setBytes(data) // .setMaxBatchSize() // -> if omitted will default to the MTU (20 bytes if MTU was not changed). Should be used only if a single write should be less than MTU in size .setWriteOperationAckStrategy { writeCompletedObservable -> // we need to postpone writing of the next batch of data till we get the response notification Observable.zip( // so we zip the response notification responseNotificationObservable, writeCompletedObservable, // with the acknowledgement of the written batch { _, writeCompletedBoolean -> writeCompletedBoolean } // when both are available the next batch will be written ) } .build() } .take(1) // with this line the notification that was set above will be discarded after the long write will finish .subscribe( { byteArray -> Log.i("arrive", "data ${converter.bytesToHex(byteArray)}") manageOtaWrite() }, { it.printStackTrace() } ) }