feat(bridge): build 7 OTA 分阶段事件+写超时(定位首块前卡点)

This commit is contained in:
agent committed 2026-07-29 03:06:12 +00:00
1 parent 96b1976da0
commit 1887570d7a
1 file changed
+15 -9
+15 -9
View File
@@ -27,7 +27,7 @@ import platform
import sys import sys
PROTOCOL_VERSION = 1 PROTOCOL_VERSION = 1
SERVER_BUILD = 6 # 2026-07-29: read 增加 dis_model/dis_fw/spota_mem_info/spota_status_ro(SUOTA 审慎测试基线) SERVER_BUILD = 7 # 2026-07-29: OTA 分阶段事件(mem_dev/gpio_map/block_sent/status)+写超时,定位卡点
EPD_SERVICE_UUID = "13187b10-eba9-a3ba-044e-83d3217d9a38" EPD_SERVICE_UUID = "13187b10-eba9-a3ba-044e-83d3217d9a38"
EPD_CHAR_UUID = "4b646063-6264-f3a7-8941-e65356ea82fe" EPD_CHAR_UUID = "4b646063-6264-f3a7-8941-e65356ea82fe"
@@ -163,23 +163,29 @@ class BleSession:
payload = image + bytes([acc]) payload = image + bytes([acc])
blocks = [payload[i:i + BLOCK_SIZE] for i in range(0, len(payload), BLOCK_SIZE)] blocks = [payload[i:i + BLOCK_SIZE] for i in range(0, len(payload), BLOCK_SIZE)]
async def w(char, data, to=15.0):
await asyncio.wait_for(
self.client.write_gatt_char(char, data, response=True), to)
await self.client.start_notify(SPOTA_SERV_STATUS_UUID, _on_status) await self.client.start_notify(SPOTA_SERV_STATUS_UUID, _on_status)
events = []
try: try:
await self.client.write_gatt_char(SPOTA_MEM_DEV_UUID, MEM_DEV_SPI_FLASH, response=True) await w(SPOTA_MEM_DEV_UUID, MEM_DEV_SPI_FLASH)
await self.client.write_gatt_char(SPOTA_GPIO_MAP_UUID, GPIO_MAP_DEFAULT, response=True) yield {"event": "ota_stage", "stage": "mem_dev_ok"}
await w(SPOTA_GPIO_MAP_UUID, GPIO_MAP_DEFAULT)
yield {"event": "ota_stage", "stage": "gpio_map_ok"}
for idx, block in enumerate(blocks, 1): for idx, block in enumerate(blocks, 1):
await self.client.write_gatt_char(SPOTA_PATCH_LEN_UUID, await w(SPOTA_PATCH_LEN_UUID, len(block).to_bytes(2, "little"))
len(block).to_bytes(2, "little"), response=True)
for i in range(0, len(block), WRITE_CHUNK): for i in range(0, len(block), WRITE_CHUNK):
await self.client.write_gatt_char(SPOTA_PATCH_DATA_UUID, await self.client.write_gatt_char(SPOTA_PATCH_DATA_UUID,
block[i:i + WRITE_CHUNK], response=False) block[i:i + WRITE_CHUNK], response=False)
yield {"event": "ota_block_sent", "block": idx, "total": len(blocks)}
await wait_ok(f"块 {idx}/{len(blocks)}") await wait_ok(f"块 {idx}/{len(blocks)}")
events.append({"block": idx, "total": len(blocks)})
yield {"event": "ota_progress", "block": idx, "total": len(blocks)} yield {"event": "ota_progress", "block": idx, "total": len(blocks)}
await self.client.write_gatt_char(SPOTA_MEM_DEV_UUID, END_SIGNAL, response=True) await w(SPOTA_MEM_DEV_UUID, END_SIGNAL)
yield {"event": "ota_stage", "stage": "end_signal_ok"}
await wait_ok("镜像校验") await wait_ok("镜像校验")
await self.client.write_gatt_char(SPOTA_MEM_DEV_UUID, REBOOT_SIGNAL, response=True) await w(SPOTA_MEM_DEV_UUID, REBOOT_SIGNAL)
yield {"event": "ota_stage", "stage": "reboot_sent"}
finally: finally:
try: try:
await self.client.stop_notify(SPOTA_SERV_STATUS_UUID) await self.client.stop_notify(SPOTA_SERV_STATUS_UUID)