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");
|
||||
}
|
||||
|
||||
|
||||
@@ -144,8 +144,11 @@ public:
|
||||
/**
|
||||
* @brief 重置本端中继状态机到 IDLE(不主动通知 GD32)。
|
||||
* 中继失败/中止时请优先用 abortRemoteAndReset()。
|
||||
* @param release_ring_suppress true(默认)解除 SPI ring 抑制引用;
|
||||
* 状态机起点(IDLE→HANDSHAKING)必须传 false——taskEntry 在调度时
|
||||
* 取的抑制引用要覆盖整个中继,否则中继全程 worker 会偷读 OTA ACK/WAIT。
|
||||
*/
|
||||
void reset();
|
||||
void reset(bool release_ring_suppress = true);
|
||||
|
||||
/**
|
||||
* @brief 通知 GD32 取消 OTA 会话(SPI CANCEL),再复位本端到 IDLE。
|
||||
|
||||
Reference in New Issue
Block a user