改为南向主动发送C,不再向南向发送进入和退出 1 升级进入/退出命令不再向南向发送控制帧,本地会话建立后立即响应成功 2 功率板Boot主动每500ms发送'C',协议板收到后转发给上位机 3 更新协议板版本寄存器为0x0143,版本号升级至V1.1.51 4 调整升级状态机,删除等待南向ACK的相关逻辑 5 更新相关文档,同步升级协议和状态机的修改内容
122 lines
3.4 KiB
C
122 lines
3.4 KiB
C
/****************************************************************************
|
||
文件名称 : 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
|
||
|
||
|