generated from hulk/gd32e23x_template_cmake_vscode
- 生产仓库(GitLab ceramixnano_eddy_cmake_vscode dev@151828f,已在机器上实装)原样复制 8 文件:Src/command.c、i2c.c、ldc1612.c、tmp112.c;Inc/command.h、i2c.h、ldc1612.h;CommunicationProtocol.md(copy 后 fc 逐字节核验一致) - 保留 B 槽专属构建(LD 0x0800B000/0x4BF8、VTOR 0xB000、gap-fill 0xFF、BUILD_VARIANT=golden),仅 VERSION_PATCH 2→3 对齐生产 - 与 dev 线从此的功能差异属预期(勿"修复"):LDC1612 驱动电流 GEN(8)(生产 2026-03-23 调参,dev 线仍 GEN(18))、命令集 M1~M4+M999/M9999(无 M5/M6)、M4 无符号温度算法、旧 8 位寄存器地址 i2c 驱动(配套 tmp112/ldc1612 整组生效);IIC 新驱动留待后续 A 线版本 - 保底判定值 v26.1.0.2 → v26.1.0.3;两个版本号均永不再用于 OTA 升级包;dev 线后续 A 版本必须 > V1.0.3(当前 dev 同为 V1.0.3,正式发布前须升版) - 重编译:text+data = 12,036B;向量表校验通过(复位向量 0x0800CC2C 落 B 槽) - FACTORY 工厂镜像(BL EDDY V0.1.0 + B 满槽 + flag,A 擦除态)已打包:Build\golden\CeramixNano-EDDY_FACTORY_B-V1.0.3_2026-10-25.bin,12 项字节校验全过
109 lines
3.2 KiB
C
109 lines
3.2 KiB
C
/**
|
|
* @file command.h
|
|
* @brief 串口命令解析与处理模块接口声明。
|
|
* @details 提供基于环形缓冲区的串口协议解析、命令处理及状态管理功能,
|
|
* 支持格式为 D5 03 LEN [cmd] CRC 的命令帧解析与响应。
|
|
*/
|
|
#ifndef COMMAND_H
|
|
#define COMMAND_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
/**
|
|
* @defgroup Command 命令处理模块
|
|
* @brief 串口命令解析与处理
|
|
* @{
|
|
*/
|
|
|
|
/** @brief 传感器周期上报使能标志 */
|
|
extern volatile bool g_eddy_current_sensor_report_enabled;
|
|
|
|
/**
|
|
* @section Command_Protocol 协议格式
|
|
* 接收命令帧格式:
|
|
* @code
|
|
* [0] HEADER = 0xD5 // 包头标识
|
|
* [1] BOARD_TYPE = 0x03 // 板卡类型标识
|
|
* [2] LEN = 数据区字节数 // 有效载荷长度
|
|
* [3..(3+LEN-1)] 数据 // 命令数据
|
|
* [last] CRC // 校验码(从索引1累加到len-2的低8位)
|
|
* @endcode
|
|
*
|
|
* 响应帧格式:
|
|
* @code
|
|
* [0] HEADER = 0xB5 // 响应包头
|
|
* [1] TYPE // 响应类型(0xF0=成功,0xF1..=错误类型)
|
|
* [2] LEN // 响应数据长度
|
|
* [3..(3+LEN-1)] 数据 // 响应数据
|
|
* [last] CRC // 校验码
|
|
* @endcode
|
|
*
|
|
* @section Command_Usage 使用说明
|
|
* 1) 初始化环形缓冲区:
|
|
* @code{.c}
|
|
* uart_ring_buffer_init();
|
|
* @endcode
|
|
*
|
|
* 2) 在主循环中调用命令处理:
|
|
* @code{.c}
|
|
* while(1) {
|
|
* command_process(); // 处理接收到的命令
|
|
* // 其他业务逻辑
|
|
* }
|
|
* @endcode
|
|
*
|
|
* 3) 查询传感器上报状态:
|
|
* @code{.c}
|
|
* if(get_sensor_report_enabled()) {
|
|
* // 执行传感器数据上报
|
|
* }
|
|
* @endcode
|
|
*/
|
|
|
|
/**
|
|
* @brief 获取电涡流传感器周期上报使能状态。
|
|
* @return bool 上报状态。
|
|
* @retval true 传感器周期上报已启用。
|
|
* @retval false 传感器周期上报已禁用。
|
|
* @ingroup Command
|
|
*/
|
|
bool get_eddy_sensor_report_enabled(void);
|
|
|
|
/**
|
|
* @brief 设置电涡流传感器周期上报使能状态。
|
|
* @param enabled 上报使能标志。
|
|
* @arg true 启用传感器周期上报。
|
|
* @arg false 禁用传感器周期上报。
|
|
* @note 推荐通过此函数修改状态,便于后续功能扩展。
|
|
* @ingroup Command
|
|
*/
|
|
void set_eddy_sensor_report_status(bool enabled);
|
|
|
|
/**
|
|
* @brief 处理串口环形缓冲区中的命令数据。
|
|
* @details 基于状态机的非阻塞协议解析器,处理完整的命令帧并自动响应。
|
|
* 每次调用处理缓冲区中所有可用数据,遇到错误时自动重置状态机。
|
|
* @note 使用静态变量维护解析状态,函数不可重入。
|
|
* @warning 依赖环形缓冲区正确实现,建议在主循环中周期调用。
|
|
* @ingroup Command
|
|
*/
|
|
void command_process(void);
|
|
|
|
/**
|
|
* @brief 解析并处理完整的命令帧。
|
|
* @param cmd 指向完整命令帧的缓冲区(从包头0xD5开始)。
|
|
* @param len 命令帧总长度(字节)。
|
|
* @note 内部函数,由 command_process() 调用,一般不直接使用。
|
|
* @ingroup Command
|
|
*/
|
|
void handle_command(const uint8_t *cmd, uint8_t len);
|
|
|
|
/** @} */ // end of Command group
|
|
|
|
void eddy_current_report(void);
|
|
|
|
void temperature_raw_value_report(void);
|
|
|
|
#endif // COMMAND_H
|