feat(core): 升级固件至v0.4.1并增加GD32初始化状态监控功能
- 修复GD32 OTA中继全程ring抑制问题:handleIdle起点reset()曾立即解除 taskEntry设置的suppressRingService(true),导致中继全程worker偷读OTA ACK/WAIT - 增加reset(bool release_ring_suppress)参数控制ring抑制释放时机 - 新增GD32 APP初始化状态可视化功能(配套GD32 1.5.34+): * 通过SPI 0xA3查询模块位图/关键失败位图/复位源 * /system/status接口新增gd32_init字段提供状态详情 * 支持故障码数组显示,前端可直接显示中文失败原因 - 添加GD32模块级故障码支持(配套GD32 1.5.36): * 解析INIT_STATUS响应中的fault_codes数组 * 每模块1B故障码,支持CANFD通道号显示 - 电机状态协议升级:STATUS DLC从32字节扩展到48字节, 二进制协议版本升级到v2,entry大小从76字节变为92字节 - 修复SPI响应类型表,将0xA3加入短响应和APP ISR快速响应类型
This commit is contained in:
@@ -226,7 +226,11 @@ ota_result_t OtaRelay::handleIdle(relay_event_t event, const uint8_t *payload, s
|
||||
|
||||
if (event == RELAY_EVT_START) {
|
||||
DEBUG_INFO("OTA", "=== 中继状态机启动: IDLE → HANDSHAKING ===");
|
||||
reset();
|
||||
/* 只清状态不清 ring 抑制:taskEntry 收到调度时已 setSuppressRingService(true),
|
||||
* 此处若解除,中继全程(握手/协商/传包)worker 都会偷读 OTA ACK/WAIT
|
||||
* (serviceRing 读到 RESPONSE 告警、poll 空等→重发→失败)。
|
||||
* 抑制由中继结束时的 reset()/abortRemoteAndReset() 统一释放。 */
|
||||
reset(false);
|
||||
setState(RELAY_HANDSHAKING);
|
||||
return OTA_RESULT_OK;
|
||||
}
|
||||
@@ -532,7 +536,7 @@ void OtaRelay::clearSessionCryptoState()
|
||||
// ============================================================
|
||||
// 状态机复位
|
||||
// ============================================================
|
||||
void OtaRelay::reset()
|
||||
void OtaRelay::reset(bool release_ring_suppress)
|
||||
{
|
||||
StateLockGuard lock;
|
||||
relayState = RELAY_IDLE;
|
||||
@@ -543,7 +547,9 @@ void OtaRelay::reset()
|
||||
m_transferFlashOffset = 0;
|
||||
m_transferDeadline = 0;
|
||||
clearSessionCryptoState();
|
||||
SpiMaster::instance().setSuppressRingService(false);
|
||||
if (release_ring_suppress) {
|
||||
SpiMaster::instance().setSuppressRingService(false);
|
||||
}
|
||||
DEBUG_INFO("OTA", "状态机已复位 → IDLE");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user