Files
chrg/apps/chrg/applications/utils/chrg_def.h
T
wrh 7eb30c1ab2 feat: 更新南向升级协议,修改升级流程逻辑
改为南向主动发送C,不再向南向发送进入和退出

1 升级进入/退出命令不再向南向发送控制帧,本地会话建立后立即响应成功
2 功率板Boot主动每500ms发送'C',协议板收到后转发给上位机
3 更新协议板版本寄存器为0x0143,版本号升级至V1.1.51
4 调整升级状态机,删除等待南向ACK的相关逻辑
5 更新相关文档,同步升级协议和状态机的修改内容
2026-09-29 16:54:28 +08:00

122 lines
3.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/****************************************************************************
文件名称 : chrg_def.h
完成日期 :
主要功能 : 全局宏定义,常量,及结构体。
版本历史 : 创建原始版本
说明 :
******************************************************************************/
#ifndef __CHRG_DEF_H__
#define __CHRG_DEF_H__
#include <rtthread.h>
/* CHRG application version. Keep this value synchronized with the changelog. */
#define CHRG_VERSION_MAJOR 1U
#define CHRG_VERSION_MINOR 1U
#define CHRG_VERSION_PATCH 51U
#define CHRG_VERSION_STRING "V1.1.51"
/*
* Channel polling mode:
* 1 - multi-channel hardware, advance the polling channel index;
* 0 - single-channel hardware, keep polling channel 0.
*/
#define CHRG_MULTI_CHANNEL 1
#if CHRG_MULTI_CHANNEL
#define CHRG_CHANNEL_NEXT(index) do { (index)++; } while (0)
#else
#define CHRG_CHANNEL_NEXT(index) do { } while (0)
#endif
// 4路选通
typedef enum {
IDX_CH1 = 0, // 通路1
IDX_CH2, // 通路2
IDX_CH3, // 通路3
IDX_CH4, // 通路4
TOTAL_CHS
} eIDX_CH;
typedef enum {
ID_SINK = 0x01, // SINK 的 ID 为 1, 波特率 200K //sink协议板
ID_SOURCE = 0x02, // SOURCE 的 ID 为 2, 波特率 200K //source协议板
ID_ELOAD = 0x03, // LOAD ID 3, 波特率 115200 //功率板
} eIDX_ID;
enum {
RUN_NONE = 0,
RUN_AUTO, // 执行轮巡
RUN_LCD, // 执行LCD触发
RUN_CONSOLE, // 执行控制台触发
RUN_UPDATA,
RUN_COM, //执行com触发
};
/* ======================== Ymodem 协议常量 (CRC-16/XMODEM) ======================== */
/* Ymodem 协议控制字符 */
#define SOH 0x01 // 128字节数据包帧头
#define STX 0x02 // 1024字节数据包帧头
#define EOT 0x04 // 传输结束
#define ACK 0x06 // 正确应答
#define ACK_C 0x43 // 'C',CRC模式请求
#define NAK 0x15 // 错误应答
#define YM_CAN 0x18 // 取消传输
/* Ymodem 数据包大小常量 */
#define YMODEM_SOH_SIZE 133 // SOH包总长: 1+1+1+128+2
#define YMODEM_STX_SIZE 1029 // STX包总长: 1+1+1+1024+2
#define YMODEM_DATA_OFFSET 3 // 有效数据在包内偏移(跳帧头+块号+反码)
// 电压电流极值
struct vc_mm_t {
rt_uint16_t max_vol; // 最大电压 mV
rt_uint16_t min_vol; // 最小电压 mV
rt_uint16_t max_cur; // 最大电流 mA / 功率 W
};
// 源类型
enum {
TYPE_SRC_PDO = 0x00,
TYPE_SRC_APDO = 0x03,
};
// PPS类型
enum {
TYPE_PPS_SPRPPS = 0x00,
TYPE_PPS_EPR = 0x01,
TYPE_PPS_SPRAVS = 0x02,
};
// PD协议数据
struct vc_pd_t {
rt_uint8_t group_num; // 挡位数量
rt_uint8_t src_type; // 源类型
rt_uint8_t pps_type; // PPS类型
struct vc_mm_t mm; // 电压电流极值
};
/* 邮件内容 */
struct mb_msg_t {
rt_uint16_t length; // 数据长度
rt_uint8_t *payload; // 数据区
rt_uint8_t channel; // 接收物理通道(北向消息使用),用于匹配当前轮询通道
rt_uint32_t transaction_id; // 北向请求内部事务号,不进入通信协议帧,仅用于丢弃旧回码
};
struct pickup_info_t {
rt_tick_t last_tick; // 前次收数据时刻
rt_uint16_t length; // 已提取数据字节数
rt_uint8_t findhead; // 找到帧头
rt_uint8_t head[8]; // 帧头填充区
int len_msg; // 数据长度
struct mb_msg_t *pMB; // 邮件
};
#endif