rxAndroidBle obtiene una larga respuesta de escritura

Estoy haciendo una larga escritura en una BLE para hacer una actualización de OTA, pero tengo que esperar la respuesta de escritura del dispositivo BLE para enviar más datos, pero no sé cómo captar la respuesta de escritura del dispositivo, estoy usando una Samsung galaxy tab s2 con android 7, y Kotlin para mi código

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() }) 

cada vez que escribo la característica de que las suscripciones me responden de inmediato con los datos escritos, necesito capturar la respuesta de la característica, para enviar más datos

Está escribiendo sobre la respuesta de la característica; supongo que la característica que refiere es la que tiene UUID=OTA_DATA . Long Write consiste en pequeñas escrituras internas (llamadas lotes).

Lo que probablemente quieras lograr es algo así como:

 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() } ) }