feat(bridge): build 7 OTA 分阶段事件+写超时(定位首块前卡点)
This commit is contained in:
1 parent
96b1976da0
commit
1887570d7a
1 file changed
+15
-9
+15
-9
@@ -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)
|
||||||
|
|||||||
Reference in new issue
Block a user