9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
245 lines
8.4 KiB
C
245 lines
8.4 KiB
C
#include "collect_ctrl/led_ctrl.h"
|
|
#include "collect_ctrl/collect_task.h"
|
|
#include "flowctrl/flow_interface.h"
|
|
|
|
|
|
#define LED_TYPE (1)
|
|
|
|
|
|
static U8_T g_u8_led_state_cache[GUN_MAX_CNT]; //两把枪指示灯状态缓存(供sub_comm读取)
|
|
|
|
#if 1 //接口函数
|
|
|
|
/**
|
|
* ************************************************************************
|
|
* @brief - 获取枪状态 返回led状态值
|
|
*
|
|
* @param[in] u8_gunNo - 抢号 0-N
|
|
*
|
|
* @return E_LED_STATE_TYPE - LED 显示状态
|
|
*
|
|
* E_LED_TYPE_GREEN_STEADY = 0, //绿灯常亮
|
|
* E_LED_TYPE_GREEN_BLINK , //绿灯闪烁
|
|
* E_LED_TYPE_RED_STEADY , //红灯常亮
|
|
* E_LED_TYPE_RED_BLINK , //红灯闪烁
|
|
* E_LED_TYPE_YELLOW_BLINK , //黄灯闪烁
|
|
*
|
|
* @author jiankalka
|
|
* @date 2025-09-05
|
|
* ************************************************************************
|
|
*/
|
|
static E_LED_STATE_TYPE e_led_get_gun_state(U8_T u8_gunNo)
|
|
{
|
|
E_LED_STATE_TYPE e_ret = E_LED_TYPE_GREEN_STEADY;
|
|
E_PILE_STATE_TYPE e_pile_state;
|
|
|
|
U8_T u8_gunLink = u8_get_gun_yx_data(YX_GUN_LINK,u8_gunNo); //枪连接状态
|
|
E_FLOW_REAL_STATE flow_state = (E_FLOW_REAL_STATE)u16_flow_put_data(u8_gunNo , E_FLOW_PUT_DATA_GUN_REAL_STATE,0); //0空闲 1充电启动 2绝缘启动 3绝缘计算完成 4绝缘检测模块停止 5开始预充 6预充完成 7充电中 8BMS通讯超时 9充电停止 10充电停止完成
|
|
|
|
U8_T u8_fault_num = u8_get_fault_sum(0,0); //整桩故障信息数量
|
|
U8_T u8_alarm_num = u8_get_fault_sum(0,1); //整桩告警信息数量
|
|
U8_T u8_gun_fault_num = u8_get_fault_sum(u8_gunNo+1,0); //该枪 故障信息数量
|
|
U8_T u8_gun_alarm_num = u8_get_fault_sum(u8_gunNo+1,1); //该枪 故障信息数量
|
|
|
|
if(u8_fault_num != 0 || u8_alarm_num != 0 || //整桩故障 则整桩报告警
|
|
u8_gun_fault_num != 0 || u8_gun_alarm_num != 0)
|
|
{
|
|
e_pile_state = E_PILE_STATE_TYPE_FAULT;//存在故障
|
|
}
|
|
else if(u8_gunLink == 0)
|
|
{
|
|
e_pile_state = E_PILE_STATE_TYPE_IDLE; //空闲未插枪
|
|
}
|
|
else if(flow_state > E_FLOW_REAL_FREE && flow_state < E_FLOW_REAL_CHARGEING) //
|
|
{
|
|
e_pile_state = E_PILE_STATE_TYPE_STARTING; //启动中
|
|
}
|
|
else if(flow_state >= E_FLOW_REAL_CHARGEING && flow_state < E_FLOW_REAL_STOP_OK) //
|
|
{
|
|
e_pile_state = E_PILE_STATE_TYPE_CHARGING; //充电中
|
|
}
|
|
else //
|
|
{
|
|
e_pile_state = E_PILE_STATE_TYPE_PLUGGED_NOT_START; //插枪未启动
|
|
}
|
|
|
|
if(g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_ledGbEn == 0)
|
|
{
|
|
/*
|
|
"黄灯常亮,表示 枪处于空闲状况
|
|
红灯常亮,表示 出现故障
|
|
绿灯常亮,表示 插枪、充电完成
|
|
绿色呼吸灯,表示 准备充电阶段、绝缘检测阶段、充电阶段
|
|
若是流水类型,充电中 绿灯流水显示"
|
|
*/
|
|
switch (e_pile_state)
|
|
{
|
|
case E_PILE_STATE_TYPE_FAULT : //存在故障
|
|
{
|
|
e_ret = E_LED_TYPE_RED_STEADY; //存在故障 红灯常亮
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_IDLE: //空闲未插枪
|
|
{
|
|
e_ret = E_LED_TYPE_YELLOW_STEADY; //未插枪 黄灯常亮
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_STARTING: //启动中
|
|
{
|
|
e_ret = E_LED_TYPE_GREEN_BLINK; //启动中 绿灯闪烁
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_CHARGING: //充电中
|
|
{
|
|
if(g_t_share_data.t_sys_fix_cfg.e_ledType == E_LED_TYPE_3)
|
|
{
|
|
e_ret = E_LED_TYPE_GREEN_RUNNING; //充电中 绿灯流水显示
|
|
}
|
|
else
|
|
{
|
|
e_ret = E_LED_TYPE_GREEN_BLINK; //充电中 绿灯闪烁
|
|
}
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_PLUGGED_NOT_START: //插枪未启动
|
|
{
|
|
e_ret = E_LED_TYPE_GREEN_STEADY ; //插枪未启动 绿灯常量
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/*
|
|
故障 黄灯闪烁
|
|
空闲未插枪 绿灯常量
|
|
启动中 红灯闪烁
|
|
充电中 红灯常量,若是流水类型,充电中红灯流水显示
|
|
插枪未启动 绿灯闪烁
|
|
*/
|
|
switch (e_pile_state)
|
|
{
|
|
case E_PILE_STATE_TYPE_FAULT : //存在故障
|
|
{
|
|
e_ret = E_LED_TYPE_YELLOW_BLINK; //存在故障 黄灯闪烁
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_IDLE: //空闲未插枪
|
|
{
|
|
e_ret = E_LED_TYPE_GREEN_STEADY; //未插枪 绿灯常亮
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_STARTING: //启动中
|
|
{
|
|
e_ret = E_LED_TYPE_RED_BLINK; //启动中 红灯闪烁
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_CHARGING: //充电中
|
|
{
|
|
if(g_t_share_data.t_sys_fix_cfg.e_ledType == E_LED_TYPE_3)
|
|
{
|
|
e_ret = E_LED_TYPE_RED_RUNNING; //充电中 红灯流水显示
|
|
}
|
|
else
|
|
{
|
|
e_ret = E_LED_TYPE_RED_STEADY; //充电中 红灯常亮
|
|
}
|
|
break;
|
|
}
|
|
case E_PILE_STATE_TYPE_PLUGGED_NOT_START: //插枪未启动
|
|
{
|
|
e_ret = E_LED_TYPE_GREEN_BLINK ; //插枪未启动 绿灯闪烁
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
return e_ret;
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
* ************************************************************************
|
|
* @brief - LED 控制函数
|
|
*
|
|
* @param[in] u16_sleepTime - 函数执行周期
|
|
*
|
|
*
|
|
* @author jiankalka
|
|
* @date 2025-08-05
|
|
* ************************************************************************
|
|
*/
|
|
void v_led_ctrl(U16_T u16_sleepTime)
|
|
{
|
|
/*
|
|
E_LED_TYPE_GREEN_STEADY = 0, //绿灯常亮
|
|
E_LED_TYPE_GREEN_BLINK , //绿灯闪烁
|
|
E_LED_TYPE_RED_STEADY , //红灯常亮
|
|
E_LED_TYPE_RED_BLINK , //红灯闪烁
|
|
E_LED_TYPE_YELLOW_BLINK , //黄灯闪烁
|
|
E_LED_TYPE_YELLOW_STEADY , //黄灯常亮
|
|
E_LED_TYPE_GREEN_RUNNING , //绿灯流水显示
|
|
E_LED_TYPE_RED_RUNNING , //红灯流水显示
|
|
E_LED_TYPE_YELLOW_RUNNING , //黄灯流水显示
|
|
*/
|
|
/* 本项目当前不执行 v_led_do_ctrl() 硬件动作,仅刷新全局状态缓存 */
|
|
v_led_state_refresh();
|
|
|
|
}
|
|
|
|
/**
|
|
* ************************************************************************
|
|
* @brief - LED 灯初始化
|
|
*
|
|
*
|
|
*
|
|
* @author jiankalka
|
|
* @date 2025-08-05
|
|
* ************************************************************************
|
|
*/
|
|
void v_led_init(void)
|
|
{
|
|
memset(g_u8_led_state_cache, 0, sizeof(g_u8_led_state_cache));
|
|
v_led_state_refresh(); /* 上电默认灯态,后续由 SubComm 发 0x04 前周期刷新 */
|
|
}
|
|
|
|
/**
|
|
* ************************************************************************
|
|
* @brief - 刷新两把枪 LED 状态缓存
|
|
*
|
|
* @author jiankalka
|
|
* @date 2026-04-29
|
|
* ************************************************************************
|
|
*/
|
|
void v_led_state_refresh(void)
|
|
{
|
|
g_u8_led_state_cache[GUN_A] = (U8_T)e_led_get_gun_state(GUN_A);
|
|
g_u8_led_state_cache[GUN_B] = (U8_T)e_led_get_gun_state(GUN_B);
|
|
}
|
|
|
|
/**
|
|
* ************************************************************************
|
|
* @brief - 获取指定枪 LED 状态缓存
|
|
*
|
|
* @param[in] u8_gunNo - 枪号 0-N
|
|
*
|
|
* @return U8_T - LED 状态(E_LED_STATE_TYPE 编码)
|
|
*
|
|
* @author jiankalka
|
|
* @date 2026-04-29
|
|
* ************************************************************************
|
|
*/
|
|
U8_T u8_led_state_get(U8_T u8_gunNo)
|
|
{
|
|
if (u8_gunNo >= (U8_T)GUN_MAX_CNT)
|
|
{
|
|
return 0U;
|
|
}
|
|
return g_u8_led_state_cache[u8_gunNo];
|
|
}
|
|
|