feat: 完善Mesh继电器OTA升级闭环

This commit is contained in:
十七
2026-11-04 15:41:29 +08:00
parent be8bd7eaec
commit df1aad3d16
27 changed files with 1372 additions and 243 deletions
-3
View File
@@ -16,9 +16,6 @@ void BluetoothManager_Task(void);
/** 返回蓝牙初始化是否成功。 */
uint8_t BluetoothManager_IsReady(void);
/** 返回蓝牙初始化故障状态。 */
uint8_t BluetoothManager_IsFault(void);
/** 返回最近一次查询到的短地址。 */
uint16_t BluetoothManager_GetShortAddress(void);
+18 -5
View File
@@ -2,9 +2,9 @@
* @file business_protocol.h
* @brief STM8 业务帧协议接口。
*
* 业务帧格式:SRC_H SRC_L | CMD | LEN | DATA | CRC16_L CRC16_H。
* 业务帧格式:SRC_H SRC_L | CMD | LEN | DATA | CRC16_H CRC16_L。
* SRC 为发送方的 Mesh 短地址;CRC 使用 CRC-16/MODBUS,计算范围为
* SRC、CMD、LEN 和 DATA,线上低字节在前。
* SRC、CMD、LEN 和 DATA,线上高字节在前。
*/
#ifndef BUSINESS_PROTOCOL_H
#define BUSINESS_PROTOCOL_H
@@ -35,6 +35,16 @@
/** 业务命令:电流阈值配置。 */
#define CMD_THRESHOLD_CONFIG 0x06u
/** 设备上线广播通知;DATA长度为0,不需要应答。 */
#define CMD_DEVICE_ONLINE 0x07u
/** 主机广播可用固件版本和长度;DATA长度为4,不直接启动OTA。 */
#define CMD_FIRMWARE_ANNOUNCE 0x10u
/** 设备发现自己需要升级后的响应命令;DATA返回当前版本和目标版本。 */
#define CMD_FIRMWARE_ANNOUNCE_RESPONSE \
(CMD_FIRMWARE_ANNOUNCE | CMD_RESPONSE_FLAG)
/** 查询当前主程序固件版本。 */
#define CMD_FIRMWARE_VERSION_QUERY 0x0Eu
@@ -69,6 +79,12 @@ void BusinessProtocol_Init(void);
/** 处理 UART 输入和待发送业务帧。 */
void BusinessProtocol_Task(void);
/** 强制将业务应答放入随机延时队列,供异步广播应答使用。 */
void BusinessProtocol_QueueDelayedResponse(uint16_t address,
uint8_t command,
const uint8_t *data,
uint8_t length);
/**
* 向解析器输入一个字节。
*
@@ -87,9 +103,6 @@ uint8_t BusinessProtocol_GetCommand(void);
/** 读取最近一帧合法业务帧的数据长度。 */
uint8_t BusinessProtocol_GetDataLength(void);
/** 读取最近一帧合法业务帧的数据区;返回 0 表示下标越界。 */
uint8_t BusinessProtocol_GetDataByte(uint8_t index, uint8_t *value);
/** 读取最近一帧合法业务帧携带的发送方 Mesh 短地址。 */
uint16_t BusinessProtocol_GetSourceAddress(void);
+2 -1
View File
@@ -18,7 +18,8 @@ void OtaManager_Task(void);
/** 处理一条已经通过 Mesh 外层解析的 OTA 业务命令。 */
uint8_t OtaManager_HandleCommand(uint8_t command,
const uint8_t *data,
uint8_t length);
uint8_t length,
uint16_t response_target);
/** 返回当前是否处于 OTA 下载模式。 */
uint8_t OtaManager_IsActive(void);
uint8_t OtaManager_GetExpectedOffset(uint16_t *offset);
+1 -1
View File
@@ -10,7 +10,7 @@
/** 初始化系统节拍定时器。 */
void SystemTick_Init(void);
/** 返回系统启动后经过的毫秒数。 */
/** 返回系统启动后经过的毫秒数;约49.7天回绕一次。 */
uint32_t SystemTick_NowMs(void);
/** 在定时器中断服务程序中递增系统节拍。 */
+2 -2
View File
@@ -7,10 +7,10 @@
#include <stdint.h>
/** 初始化 UART1。具体波特率和寄存器配置在底层阶段接入。 */
/** 初始化 UART1,并开启接收中断和环形缓冲区。 */
void Uart1_Init(void);
/** 轮询 UART1 硬件状态并把收到的字节放入环形缓冲区。 */
/** UART任务入口;接收硬件由中断处理,此接口保留为空操作。 */
void Uart1_Task(void);
/** 向 UART1 发送一个字节。 */
+8
View File
@@ -8,4 +8,12 @@ void Watchdog_Init(void);
/** 在主循环中刷新看门狗计数器。 */
void Watchdog_Refresh(void);
/**
* 立即触发一次 MCU 看门狗复位。
*
* 该接口用于 OTA 校验成功后的受控重启:调用方必须先完成升级结果应答,
* 然后本函数把看门狗重装值缩短并停止喂狗,交由硬件自动复位进入Bootloader。
*/
void Watchdog_ResetNow(void);
#endif