refactor(arch): 精简架构去除样板代码并修复BLE OTA虚假ACK问题
- 移除OtaCoordinator中重复的状态查询锁操作,改为单次取值后比较 - 将GD32存储wrapper函数改为inline实现并移入头文件,删除对应的cpp实现 - HTTP路由注册改为路由表+循环注册,消除复制粘贴的URI注册代码 - OtaRelay事件分发中提取通用拒绝逻辑到commonReject helper函数 - SpiMaster中折叠加锁/无锁镜像函数,通过内部Impl实现统一路径 - HealthMonitor使用RAII LockGuard替代重复的mutex操作代码 - 修复BLE OTA中ESP32路径的虚假ACK问题,窗口边界ACK仅在实际写入时触发 - 修复BLE OTA中GD32路径的重复包ACK问题,重复包静默跳过不发送ACK - 调整发送端首轮ACK超时从3000ms提升至5000ms,适配设备端flash写入速度 - 清理临时文件和无用的配置宏定义 - 在main.cpp中添加GD32版本探测逻辑
This commit is contained in:
@@ -106,12 +106,6 @@ bool SpiMaster::pushEvent(uint8_t type, const uint8_t *payload, size_t len)
|
||||
}
|
||||
m_eventHead = (uint8_t)((m_eventHead + 1U) % kEventSlots);
|
||||
m_eventCount++;
|
||||
/* 兼容单槽 takeRingRx */
|
||||
m_ringRxType = type;
|
||||
m_ringRxLen = slot.len;
|
||||
if (slot.len > 0U) {
|
||||
memcpy(m_ringRxBuf, slot.data, slot.len);
|
||||
}
|
||||
if (m_eventSem) {
|
||||
(void)xSemaphoreGive(m_eventSem);
|
||||
}
|
||||
@@ -574,14 +568,7 @@ esp_err_t SpiMaster::readV2FrameVarlen(uint8_t *out_frame, size_t out_max, size_
|
||||
v2_header_t hdr;
|
||||
const uint8_t *pload = nullptr;
|
||||
if (!v2_parse_frame(out_frame, budget, &hdr, &pload)) {
|
||||
bool all_ff = true;
|
||||
for (size_t i = 0; i < 8U && i < budget; ++i) {
|
||||
if (out_frame[i] != 0xFFU) {
|
||||
all_ff = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return all_ff ? ESP_ERR_INVALID_RESPONSE : ESP_ERR_INVALID_RESPONSE;
|
||||
return ESP_ERR_INVALID_RESPONSE;
|
||||
}
|
||||
|
||||
const size_t total = V2_HEADER_LEN + (size_t)hdr.payload_len + V2_CRC_LEN;
|
||||
@@ -1162,18 +1149,6 @@ bool SpiMaster::takeEvent(uint8_t *type, uint8_t *payload, size_t max_len, size_
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (m_ringRxLen != 0U) {
|
||||
/* 兼容单槽回落 */
|
||||
if (type) { *type = m_ringRxType; }
|
||||
size_t copy_len = (m_ringRxLen <= max_len) ? m_ringRxLen : max_len;
|
||||
if (len) { *len = copy_len; }
|
||||
if (payload && copy_len > 0U) {
|
||||
memcpy(payload, m_ringRxBuf, copy_len);
|
||||
}
|
||||
m_ringRxLen = 0U;
|
||||
m_ringRxType = 0U;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* 队列空:若 timeout_ms==0 直接返回,否则在信号量上等待 */
|
||||
|
||||
@@ -271,11 +271,6 @@ private:
|
||||
/** 事件计数信号量(worker push / takeEvent pop)。 */
|
||||
SemaphoreHandle_t m_eventSem = NULL;
|
||||
|
||||
/** GD32 按铃请求帧缓冲区(兼容 takeRingRx 单槽)。 */
|
||||
uint8_t m_ringRxBuf[SPI_OTA_FRAME_MAX] = {};
|
||||
size_t m_ringRxLen = 0;
|
||||
uint8_t m_ringRxType = 0;
|
||||
|
||||
// ── L4 多槽事件队列(worker 写入,业务 takeEvent 读出)──
|
||||
static constexpr uint8_t kEventSlots = 4U;
|
||||
struct EventSlot {
|
||||
|
||||
Reference in New Issue
Block a user