┌───┐ ┌───────────┐ ┌───────┐ ┌─────────────┐ ┌─────────┐ │App│ │MqttService│ │service│ │OtaDownloader│ │OtaTraget│ └─┬─┘ └─────┬─────┘ └───┬───┘ └──────┬──────┘ └────┬────┘ ┌┴┐ BLE updata │ │ │ │ │ │ <───────────────│ │ │ │ │ │ │ │ │ │ ┌────────────────┐ │ │ │ │ │判断是否要升级 │ │ │ │ │ └────────────────┘ │ │ │ │ │ │ │ │ │ │ ╔══════╤═══╪═╪═════════════════╪════════════════════╪═════════════╗ │ │ ║ ALT │ successful case │ │ ║ │ │ ╟──────┘ │ │ │ │ ║ │ │ ║ │ │ download bin │ ║ │ │ ║ │ │ ────────────────────────────────────>│ ║ │ │ ║ │ │ │ │ ║ │ │ ║ │ │ bin │ ║ │ │ ║ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ ║ │ │ ╚══════════╪═╪═════════════════╪════════════════════╪═════════════╝ │ │ └┬┘ │ │ │ │ │ │ │ │ │ │ │ │ │ ╔════════════════╗ │ ══════════════════════╪══════════════════╪════════════════════╪═════════════════════╪════════╣ Initialization ╠════════════════════════════════╪═════════════════════════════════════════════════════════════ │ │ │ │ ╚════════════════╝ │ │ │ │ │ │ │ │ 准备oda │ │ │ │────────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ ╔══════╤══╪═════════╗ │ │ │ │ ║ REF │ │ ║ │ │ │ │ ╟──────┘ │ ║ │ │ │ │ ║ 存在服务FFD0 ║ │ │ │ │ ║ │ ║ │ │ │ │ ╚═════════╪═════════╝ │ │ │ │ 往FFD1 写入重启命令进入OTA模式 │ │ │ │ │─────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╔══════╤═══════╪═══════════════════╗ │ │ │ │ ║ ALT │ successful case ║ │ │ │ │ ╟──────┘ │ ║ │ │ │ │ ║ ────┐ ║ │ │ │ │ ║ │ disconnect ║ │ │ │ │ ║ <───┘ ║ │ │ │ │ ╚══════════════╪═══════════════════╝ │ │ │ │ │ │ │ │ │ 超时后打开FFC0服务下的通知 │ │ │ │ │─────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ true │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ FFC5 Get OAD Block Size Command CMD 0x01 │ │ │ │ │─────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ Block Size Response CMD 0x01 │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ FFC1 OAD Image Header │ │ │ │ │─────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ ╔════╪═╤═══════════════════╪══════════════════════════════════════════════════════════╪════════════════════════╗ ╔═════════════════════╗ │ │ ║ ALT │ Header image failure successful │ ║ ║当OtaTraget接受 ░║ │ │ ╟──────┘ │ │ ║ ║完block会返回 ║ │ │ ║ │ │ FFC1 Response success │ ║ ║OAD_ALREADY_STARTED ║ │ │ ║ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ ║ ║如果不是则需要 ║ │ │ ║ │ │ │ ║ ║重新发送block。 ║ │ │ ║ │ │ FFC5 Start OAD Process Command │ ║ ╚═════════════════════╝ │ │ ║ │ │─────────────────────────────────────────────────────────>│ ║ │ │ ║ │ │ │ ║ │ │ ║ │ │ Image Block Write Char Response │ ║ │ │ ║ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ ║ │ │ ║ │ │ │ ║ │ │ ║ │ │ │ ║ │ │ ║ │ ╔══════╤═════════╪══════════════════════════════════════════════════════════╪══════════════╗ ║ │ │ ║ │ ║ ALT │ block successful │ ║ ║ │ │ ║ │ ╟──────┘ │ │ ║ ║ │ │ ║ │ ║ │ FFC2 OAD image offset by the block number │ ║ ║ │ │ ║ │ ║ │─────────────────────────────────────────────────────────>│ ║ ║ │ │ ║ │ ╠════════════════╪══════════════════════════════════════════════════════════╪══════════════╣ ║ │ │ ║ │ ║ [block failure]│ │ ║ ║ │ │ ║ │ ║ │FFC2 OAD image offset by the block (offset Initializat 0) │ ║ ║ │ │ ║ │ ║ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ ║ ║ │ │ ║ │ ╚════════════════╪══════════════════════════════════════════════════════════╪══════════════╝ ║ │ │ ╠════╪═════════════════════╪══════════════════════════════════════════════════════════╪════════════════════════╣ │ │ ║ [Header image failure] │ │ ║ │ │ ║ │ │ FFC1 OAD Image Header │ ║ │ │ ║ │ │─────────────────────────────────────────────────────────>│ ║ │ │ ╚════╪═════════════════════╪══════════════════════════════════════════════════════════╪════════════════════════╝ │ │ │ │ │ │ │ │ │ FFC5 Response OAD_ALREADY_STARTED │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ │ │ │ │ ╔══════╤═════════╪══════════════════════════════════════════════════════════╪═══════════════════╗ │ │ │ ║ ALT │ OAD_ALREADY_STARTED │ ║ │ │ │ ╟──────┘ │ │ ║ │ │ │ ║ │ Enable OAD Image Commandr │ ║ │ │ │ ║ │─────────────────────────────────────────────────────────>│ ║ │ │ │ ║ │ │ ║ │ │ │ ║ │ ────┐ ║ │ │ │ ║ │ │ end ║ │ │ │ ║ │ <───┘ ║ │ │ │ ║ │ │ ║ │ │ │ ║ │ ────┐ ║ │ │ │ ║ │ │ disconnect ║ │ │ │ ║ │ <───┘ ║ │ │ │ ╠════════════════╪══════════════════════════════════════════════════════════╪═══════════════════╣ │ │ │ ║ [other] │ │ ║ │ │ │ ║ │ FFC2 OAD image offset by the block │ ║ │ │ │ ║ │─────────────────────────────────────────────────────────>│ ║ │ │ │ ╚════════════════╪══════════════════════════════════════════════════════════╪═══════════════════╝ ┌─┴─┐ ┌─────┴─────┐ ┌───┴───┐ ┌──────┴──────┐ ┌────┴────┐ │App│ │MqttService│ │service│ │OtaDownloader│ │OtaTraget│ └───┘ └───────────┘ └───────┘ └─────────────┘ └─────────┘