transferFirmware

open suspend override fun transferFirmware(firmware: ByteArray, onProgress: suspend (Float) -> Unit): Result<Unit>(source)

Drives the full upload sequence (START, init-packet brackets, PRN setup, firmware stream, validate, activate).

Sequence details:

  1. START_DFU [0x04] (APP image only).

  2. Image sizes payload on Packet char: [0u32, 0u32, firmware.size_u32].

  3. Await START response.

  4. INIT_PARAMS_START, init bytes on Packet, INIT_PARAMS_COMPLETE. Await init response.

  5. PRN_REQ [PRN_LE16]. (No response.)

  6. RECEIVE_FIRMWARE_IMAGE. (No response.)

  7. Stream firmware in MTU-sized chunks. Every PRN packets, await PacketReceipt(bytesReceived) and verify count.

  8. After last byte, await final response for RECEIVE_FIRMWARE_IMAGE.

  9. VALIDATE, await response.

  10. ACTIVATE_AND_RESET — device reboots; write may fail with disconnect, treat as success.