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:
小龙虾
2026-09-09 03:23:06 +08:00
parent ebb3dcdf38
commit 5315f91475
9 changed files with 252 additions and 85 deletions
+9 -3
View File
@@ -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");
}