feat: 完善Mesh继电器OTA升级闭环
This commit is contained in:
@@ -16,9 +16,6 @@ void BluetoothManager_Task(void);
|
||||
/** 返回蓝牙初始化是否成功。 */
|
||||
uint8_t BluetoothManager_IsReady(void);
|
||||
|
||||
/** 返回蓝牙初始化故障状态。 */
|
||||
uint8_t BluetoothManager_IsFault(void);
|
||||
|
||||
/** 返回最近一次查询到的短地址。 */
|
||||
uint16_t BluetoothManager_GetShortAddress(void);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
/** 初始化系统节拍定时器。 */
|
||||
void SystemTick_Init(void);
|
||||
|
||||
/** 返回系统启动后经过的毫秒数。 */
|
||||
/** 返回系统启动后经过的毫秒数;约49.7天回绕一次。 */
|
||||
uint32_t SystemTick_NowMs(void);
|
||||
|
||||
/** 在定时器中断服务程序中递增系统节拍。 */
|
||||
|
||||
+2
-2
@@ -7,10 +7,10 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/** 初始化 UART1。具体波特率和寄存器配置在底层阶段接入。 */
|
||||
/** 初始化 UART1,并开启接收中断和环形缓冲区。 */
|
||||
void Uart1_Init(void);
|
||||
|
||||
/** 轮询 UART1 硬件状态并把收到的字节放入环形缓冲区。 */
|
||||
/** UART任务入口;接收硬件由中断处理,此接口保留为空操作。 */
|
||||
void Uart1_Task(void);
|
||||
|
||||
/** 向 UART1 发送一个字节。 */
|
||||
|
||||
@@ -8,4 +8,12 @@ void Watchdog_Init(void);
|
||||
/** 在主循环中刷新看门狗计数器。 */
|
||||
void Watchdog_Refresh(void);
|
||||
|
||||
/**
|
||||
* 立即触发一次 MCU 看门狗复位。
|
||||
*
|
||||
* 该接口用于 OTA 校验成功后的受控重启:调用方必须先完成升级结果应答,
|
||||
* 然后本函数把看门狗重装值缩短并停止喂狗,交由硬件自动复位进入Bootloader。
|
||||
*/
|
||||
void Watchdog_ResetNow(void);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user