feat(vd960DBN): MQTT 协议 V1.10 固件实现 — 网络上报携带地感版本 (2026-08-21)
协议 V1.10 (3be9e50) 三处新增落地:
1. dev_info_query 响应 data 补 loop_ver/loop_hw_ver (0x4A 缓存值, 未完成/失败为空串)
2. initialize 上报同样携带 (尽力, 可为空)
3. 新增 §4.25 loop_version_query: 0x4A 异步实时查询, 响应在 iot_verq_poll() 回包
固件:
- loop_uart_proto.h/c: 新增 LoopVerCache + g_lup_ver_cache (0x4A 缓存);
lup_cache_from_info() 写缓存, lup_refresh_version_cache() 后台刷新 (通道空闲才发)
- iot_mqtt_srv.c: dev_info_query/initialize 加字段; loop_version_query 分支
(暂存 msg_id/deadline 300ms, busy 拒绝重复查询); iot_verq_poll() 异步回包
(RESPONSE_READY -> code=0 + 三字段 + 同步刷缓存; TIMEOUT -> code=5 保缓存值);
后台刷新: 上电 iot_mqtt_init + OTA done (iot_ota_report_result ok=1) 置 dirty
关键设计: 版本来源=0x4A 实时查询 (非 OTA 元数据 version=目标版本);
缓存值语义 dev_info_query/initialize 同步回包不等异步; 与 TCP 共用 g_lup_cmd
单命令通道 (后发覆盖, 先发者超时 — 低频命令, 待板上验证时序)
单测: tests/test_iot_loop_ver.c — gcc 隔离 (extract+embed 6 函数 + mock)
44 断言全过: 版本帧解析(正常+4 错误路径) / 缓存写入+格式化(空串/NULL 防护) /
verq_poll 成功回包(code=0+三字段+topic+缓存刷新+通道释放) / 超时回包(code=5+缓存值) /
后台刷新(发起/忙不消费/响应消费/残留超时清理)
验证: check_c_balance.py 3 文件 OK; 待板上验证 UART2 0x4A 与 loop_data 共用总线时序
This commit is contained in:
@@ -509,6 +509,31 @@ void lup_send_get_version(void)
|
||||
lup_cmd_begin(LUP_CMD_GET_VERSION, 200);
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
* 版本缓存 (V1.10) — 0x4A 查询结果缓存, 供 MQTT dev_info_query/initialize
|
||||
*===========================================================================*/
|
||||
LoopVerCache g_lup_ver_cache; /* BSS 清零: valid=0 */
|
||||
|
||||
void lup_cache_from_info(const LUP_VersionInfo *info)
|
||||
{
|
||||
if (!info) return;
|
||||
g_lup_ver_cache.valid = 1;
|
||||
g_lup_ver_cache.hard_main = info->hard_main;
|
||||
g_lup_ver_cache.hard_sub = info->hard_sub;
|
||||
g_lup_ver_cache.hard_ssub = info->hard_ssub;
|
||||
g_lup_ver_cache.soft_main = info->soft_main;
|
||||
g_lup_ver_cache.soft_sub = info->soft_sub;
|
||||
g_lup_ver_cache.soft_ssub = info->soft_ssub;
|
||||
}
|
||||
|
||||
/* 后台刷新: 仅命令通道空闲时发起 (g_lup_cmd 全局唯一, 与 TCP/MQTT 命令共用
|
||||
单通道; 有命令在途则跳过本轮, 下次空闲再发) */
|
||||
void lup_refresh_version_cache(void)
|
||||
{
|
||||
if (g_lup_cmd.state != LUP_STATE_IDLE) return;
|
||||
lup_send_get_version();
|
||||
}
|
||||
|
||||
void lup_send_reset(void)
|
||||
{
|
||||
uint8_t buf[LUP_MAX_PKG_LEN];
|
||||
|
||||
Reference in New Issue
Block a user