1. 更新所有文件的版本号注释从V1.1.9到V1.1.10 2. 修改chrg_comm.c中的固件版本宏定义为0x011A 3. 新增短路保活命令优先调度逻辑,避免挤占保活窗口 4. 优化批量通信的通道轮转和重试机制 5. 改为按通道维护重试计数,避免全局计数异常 6. 新增批量通信突发计数和通道状态管理
125 lines
4.3 KiB
C
125 lines
4.3 KiB
C
/****************************************************************************
|
|
文件名称 : chrg_roll_nor.h
|
|
完成日期 :
|
|
当前版本号 : V1.1.10
|
|
主要功能 : 实现北向通信轮巡请求命令。以独立线程处理。
|
|
版本历史 : 创建原始版本
|
|
说明 :
|
|
******************************************************************************/
|
|
|
|
#ifndef __CHRG_ROLL_NOR_H__
|
|
#define __CHRG_ROLL_NOR_H__
|
|
|
|
#include <rtthread.h>
|
|
|
|
#define THR_NAME_ROLL_NOR "thr.rollnor"
|
|
#define STATE_WORKING 0x03//运行标志位
|
|
enum {
|
|
IDX_GET_SOURCE_VC = 0,
|
|
IDX_GET_SOURCE_PD,
|
|
IDX_SET_SOURCE_PD,
|
|
IDX_SET_SOURCE_ID,
|
|
IDX_SET_SOURCE_CC_SET,
|
|
IDX_SER_SOURCE_VOLT,
|
|
IDX_SER_SOURCE_CURR,
|
|
IDX_SET_SOURCE_WORK,
|
|
IDX_SET_SOURCE_CCLVL,
|
|
IDX_SET_SOURCE_CV,
|
|
IDX_SET_SOURCE_STOP_STATE,
|
|
|
|
IDX_GET_SINK_VC,
|
|
IDX_GET_SINK_PD,
|
|
IDX_SET_SINK_VOLT,
|
|
IDX_SET_SINK_CURR,
|
|
IDX_SET_SINK_PD,
|
|
IDX_SET_SINK_CCLINE,
|
|
IDX_SET_SINK_CCLVL,
|
|
IDX_SET_SINK_ID,
|
|
IDX_SET_SINK_VOLT_ON,
|
|
IDX_SET_SINK_WORK,
|
|
IDX_SET_SINK_CV,
|
|
IDX_SET_SINK_WORK_STATE,
|
|
IDX_SET_SINK_STOP_TEST,//停止负载测试
|
|
IDX_SET_SINK_STORP_WAIT,
|
|
|
|
/* Source北向事务状态,追加在末尾以保持原有sub数值不变。 */
|
|
IDX_SET_SOURCE_RESET, // PD与非PD协议跨类切换前发送Source复位
|
|
IDX_WAIT_SOURCE_PROTOCOL, // 0xD0应答后的协议生效等待
|
|
|
|
/* Sink北向事务状态追加在末尾,避免改变已有sub数值。 */
|
|
IDX_SET_SINK_PD_ONLY, // 仅重发协议,协议应答后直接查询协商电压
|
|
IDX_WAIT_SINK_CC, // CC设置应答后的非阻塞稳定等待
|
|
IDX_SET_SINK_CC_BEFORE_PD, // 先设置CC,稳定后再设置协议
|
|
IDX_WAIT_SINK_CC_BEFORE_PD, // 等待CC稳定后进入协议设置
|
|
IDX_WAIT_SINK_PD_ACK, // 协议回码确认后的非发送过渡状态
|
|
IDX_SET_SINK_PD_WITH_MODE,
|
|
IDX_SET_SINK_CC_BEFORE_PD_WITH_MODE,
|
|
IDX_WAIT_SINK_CC_BEFORE_PD_WITH_MODE,
|
|
IDX_SET_SINK_MODE_AFTER_PD,
|
|
IDX_WAIT_SINK_MODE_AFTER_PD,
|
|
#if 0
|
|
IDX_SET_SINK_PD_BEFORE_CC, // 先设置协议,协议回码后再设置CC
|
|
#endif
|
|
};
|
|
|
|
struct chrg_rollnor_t {
|
|
rt_uint8_t run; // 下一轮运行方式 1:自动轮巡 2:LCD触发插入 3:控制台触发插入
|
|
rt_uint8_t part; // 自动轮巡时,多条命令序号(若存在多条命令时)
|
|
|
|
rt_uint8_t idx; // 自动轮巡时,通道序号
|
|
rt_uint8_t ch; // 触发插入时,切换的通道
|
|
rt_uint8_t type; // 1=source/0=sink
|
|
rt_uint8_t sub; // 子类型
|
|
|
|
rt_uint8_t cc_line; // cc 线
|
|
rt_uint8_t cc_level; // cc 电平
|
|
rt_uint8_t pd;
|
|
rt_uint8_t src;
|
|
rt_uint8_t pps;
|
|
rt_uint16_t voltage; // 触发插入时,当前电压 mV
|
|
rt_uint16_t current; // 触发插入时,当前电流 mA
|
|
|
|
rt_uint16_t max_vol; // 触发插入时,最大电压 mV
|
|
rt_uint16_t min_vol; // 触发插入时,最小电压 mV
|
|
rt_uint16_t max_curr; // 触发插入时,最大电流 mA
|
|
|
|
|
|
};
|
|
|
|
extern struct chrg_rollnor_t chrgrollnor;
|
|
|
|
/*****************************************************************
|
|
函数名称: chrg_roll_nor_thread_entry
|
|
函数描述: 北向通道轮巡请求数据线程体
|
|
输入参数: *data: 本线程信息
|
|
输出参数: -
|
|
返回说明: -
|
|
其它说明: -
|
|
*****************************************************************/
|
|
extern void chrg_roll_nor_thread_entry (void *data);
|
|
extern int sink_fill_pd_buf(rt_uint8_t group,rt_uint8_t pd_val, rt_uint16_t pd_volt, rt_uint16_t pd_curr, rt_uint8_t *buf);
|
|
|
|
extern void roll_nor_set(void);
|
|
|
|
/*****************************************************************
|
|
函数名称: chrg_roll_nor_source_cc_close_register
|
|
函数描述: 将Source通道登记到本轮共享CC_CLOSE等待屏障
|
|
输入参数: ch:北向通道编号
|
|
输出参数: -
|
|
返回说明: -
|
|
其它说明: 仅需要在协议切换入口为IDX_SET_SOURCE_CC_CLOSE时调用
|
|
*****************************************************************/
|
|
/*****************************************************************
|
|
函数名称: chrg_roll_nor_source_switch_reset
|
|
函数描述: 清理指定Source通道的CC_CLOSE及协议等待记录
|
|
输入参数: ch:北向通道编号
|
|
输出参数: -
|
|
返回说明: -
|
|
其它说明: 停止、角色切换或新配置覆盖旧切换状态时调用
|
|
*****************************************************************/
|
|
extern void chrg_roll_nor_source_switch_reset(rt_uint8_t ch);
|
|
|
|
#define sink_time 3
|
|
#endif
|
|
|