| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270 |
- /******************************************************************************
- 版权所有:
- 文件名称: led.c
- 文件版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2013-05-29
- 功能说明: LED处理程序
- 其它说明:
- 修改记录:
- */
- /*------------------------------- 头文件 --------------------------------------
- */
- #include "head.h"
-
- /*------------------------------- 宏定义 --------------------------------------
- */
- /*------------------------------ 类型结构 -------------------------------------
- */
- /*------------------------------ 全局变量 -------------------------------------
- */
- struct led_config g_led_hmi_default[HMI_TYPE_NUM]=
- {
- // 罩式FTU
- {13,
- {{0,PUB_LED_ERR}, {0,PUB_LED_RUN}, {1,SW_LED_DZ}, {0,PUB_LED_POWER},
- {0,PUB_LED_COMM}, {0,PUB_LED_BAT}, {1,SW_LED_ZHHW}, {1,SW_LED_GL},
- {1,SW_LED_JD}, {1,SW_LED_CHZ}, {1,SW_LED_LOCK}, {1,SW_LED_XT},
- {1,SW_LED_YT}, {0,LED_NULL}, {0,LED_NULL}, {0,LED_NULL}}},
-
- // 电缆看门狗
- {12,
- {{0,PUB_LED_POWER}, {0,PUB_LED_RUN}, {0,PUB_LED_COMM}, {0,PUB_LED_BAT},
- {0,PUB_LED_ERR}, {1,SW_LED_ZHHW}, {1,SW_LED_GL}, {1,SW_LED_JD},
- {1,SW_LED_CHZ}, {1,SW_LED_LOCK}, {1,SW_LED_XT}, {1,SW_LED_YT},
- {0,LED_NULL}, {0,LED_NULL}, {0,LED_NULL}, {0,LED_NULL}}},
- // 箱式FTU
- {12,
- {{0,PUB_LED_POWER}, {0,PUB_LED_RUN}, {0,PUB_LED_COMM}, {0,PUB_LED_BAT},
- {0,PUB_LED_ERR}, {1,SW_LED_ZHHW}, {1,SW_LED_GL}, {1,SW_LED_JD},
- {1,SW_LED_CHZ}, {1,SW_LED_LOCK}, {1,SW_LED_XT}, {1,SW_LED_YT},
- {0,LED_NULL}, {0,LED_NULL}, {0,LED_NULL}, {0,LED_NULL}}},
- };
- // 基于公共、开关的灯状态,
- // 数组第一维为公共、开关,0为公共,1~SWITCH_NUM_MAX为开关
- // 数组第二维取公共、开关中灯个数的大值
- //noted by sunxi: 20220701 加入(u16),以去除335x的编译告警
- u8 g_led_stu[SWITCH_NUM_MAX+1][(((u16)SW_LED_NUM>(u16)PUB_LED_NUM)?SW_LED_NUM:PUB_LED_NUM)];
- u8 g_led_save[SWITCH_NUM_MAX+1][(((u16)SW_LED_NUM>(u16)PUB_LED_NUM)?SW_LED_NUM:PUB_LED_NUM)];
- // 当前面板的LED配置
- struct led_config *g_led_hmi;
- // 辅助板LED测试状态
- u32 g_led_aux_test_st;
- u32 g_led_kz_test_st;
- int led_save_flag=0;
- extern int _led_status_save(void);
- /*------------------------------ 函数声明 -------------------------------------
- */
- /*------------------------------ 外部函数 -------------------------------------
- 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性.
- */
- /******************************************************************************
- 函数名称: led_init
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-04-16
- 函数说明: 开出类型LED初始化,找到对应的灯配置索引的GPIO
- 参数说明: 无
- 返回值: 成功返回0.
- 修改记录:
- */
- extern int _led_readfile(void);
- int led_init(void)
- {
- memset(g_led_stu,0,sizeof(g_led_stu));
- memset(g_led_save,0,sizeof(g_led_stu));
- #ifdef STORE_PILOTELAMP
- _led_readfile();
- #endif
- return 0;
- }
- /******************************************************************************
- 函数名称: led_init_hmi
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-04-16
- 函数说明: LED配置初始化
- 参数说明: 无
- 返回值: 成功返回0.
- 修改记录:
- */
- int led_init_hmi(void)
- {
- u32 slot;
- g_led_hmi=0;
- // 检查状态板是否配置
- slot = equ_get_slot_by_type(BOARD_TYPE_LCD_16LED);
- if(slot ==0)
- {
- slot = equ_get_slot_by_type(BOARD_TYPE_LCD_24LED);
- if(slot==0) //jack.liu 2020 增加26个灯灯板定义
- slot = equ_get_slot_by_type(BOARD_TYPE_LCD_26LED);
- }
- // 检查状态板是否配置
- if(slot >0)
- {
- g_led_hmi = &g_led_slot[slot];
- }
- strcpy(m_Ledgoose,"退出");
- strcpy(m_Ledbh,"退出");
- strcpy(m_Ledfa,"退出");
- strcpy(m_Ledjzs,"退出");
- strcpy(m_Bh_chr,"---- ");
- strcpy(m_Fa_sl,"----");
- strcpy(m_Fa_chr,"---- ");
- strcpy(m_Goose_chr,"---- ");
- #ifdef GD_AREA_ECZD_2020
- strcpy(m_Mode_chr,"----");
- strcpy(m_Tqhz_chr,"退出");
- strcpy(m_Zdjl_chr,"退出");
- strcpy(m_StopFun_chr,"停用所有功能");
- strcpy(m_Zdjl_chr,"退出");
- #endif
- return 0;
- }
- /******************************************************************************
- 函数名称: led_polling_app
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-04-16
- 函数说明: LED应用功能
- 参数说明: 无
- 返回值: 成功返回0.
- 修改记录:
- */
- void _led_update_status(void)
- {
- int i,exerr;
-
- // 电源灯
- if(!g_run_stu.dcjlsd)
- {
- led_set_pub(PUB_LED_POWER, LED_ON);
- }
- #if defined GD_AREA_GUANGZHOU_FTU
- else
- {
- led_set_pub(PUB_LED_POWER, LED_OFF);//FTU外置电源灯一般用继电器开出,灯闪烁容易损坏继电器
- }
- #else
- else if (g_run_stu.dcjlsd && (!g_run_stu.dcqy))
- {
- led_set_pub(PUB_LED_POWER, LED_SLOW);
- }
- else if (g_run_stu.dcjlsd && g_run_stu.dcqy)
- {
- led_set_pub(PUB_LED_POWER, LED_QUICK);
- }
- #endif
- // 运行灯
- if(rt_err_count())
- {
- led_set_pub(PUB_LED_RUN, LED_ON);
- }
- else
- {
- led_set_pub(PUB_LED_RUN, LED_SLOW);
- }
- //异常灯,以内部异常优先级高
- exerr=0;
- for(i=0;i<g_sw_num;i++)
- {
- RUN_STU_SW *prun=&g_tRelay[i].run_stu;
-
- if (prun->exerr)
- {
- exerr =1;
- break;
- }
- }
- if (rt_err_count())
- {
- led_set_pub(PUB_LED_ERR, LED_ON);
- #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
- gb_drive.b_err = true;
- #endif
- }
- #ifdef defined GD_AREA_ZHONGSHAN_2020
- else if (exerr||soe_check(EV_GOOSE_CONFIG_ERR)==true)//中山2020要求通信异常不允许亮异常灯
- {
- led_set_pub(PUB_LED_ERR, LED_ON);
- }
- #else
- else if (exerr||(tFAg.commerr>0)) //中山要求,只有本机通信异常点告警灯,系统异常不点灯
- {
- led_set_pub(PUB_LED_ERR, LED_ON);
- #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
- gb_drive.b_err = true;
- #endif
- }
- #endif
- else if (soe_check(EV_61850_ERR)==true)
- {
- led_set_pub(PUB_LED_ERR, LED_ON);
- #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
- gb_drive.b_err = true;
- #endif
- }
- else
- {
- led_set_pub(PUB_LED_ERR, LED_OFF);
- #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
- gb_drive.b_err = false;
- #endif
- }
- #if defined GD_AREA_ECZD_2020 || defined GD_AREA_MAIN_2020
- for(i=0; i<g_sw_num; i++)
- {
- RUN_STU_SW *prun=&g_tRelay[i].run_stu;
- if (prun->exerr||prun->qyd_bs||prun->qyd_bs||tPT.uPT1DX.bFlag.bPTYC||tPT.uPT2DX.bFlag.bPTYC)
- {
- exerr =1;
- break;
- }
- }
- if(exerr||(tFAg.commerr>0))
- {
- led_set_pub(PUB_LED_RUN_GJ, LED_ON);
- #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
- gb_drive.b_warning = true;
- #endif
- }
- else
- {
- led_set_pub(PUB_LED_RUN_GJ, LED_OFF);
- #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
- gb_drive.b_warning = false;
- #endif
- }
- #endif
- if(g_run_stu.pubdz==2) // ==2故障动作
- {
- led_set_pub(PUB_LED_DZ,LED_QUICK);
- }
- else
- {
- led_set_pub(PUB_LED_DZ,LED_OFF);
- }
- if(g_run_stu.yf)
- {
- led_set_pub(PUB_LED_YF,LED_ON);
- }
- else
- {
- led_set_pub(PUB_LED_YF,LED_OFF);
- }
- #ifdef KZ_OUT_TT
- if(!g_run_stu.kz_out_tt)
- {
- led_set_pub(PUB_LED_KZ_OUT,LED_ON);
- }
- else
- {
- led_set_pub(PUB_LED_KZ_OUT,LED_OFF);
- }
- #endif
- if(getIecLink101Status()||getCommStatus())
- {
- led_set_pub(PUB_LED_IEC_ERR,LED_ON);
- }
- else
- {
- led_set_pub(PUB_LED_IEC_ERR,LED_OFF);
- }
- if(g_bCommStatus)
- led_set_pub(PUB_LED_COMM_STATUS, LED_ON);
- else
- led_set_pub(PUB_LED_COMM_STATUS, LED_OFF);
- if(g_run_stu.jd)
- {
- led_set_pub(PUB_LED_JD,LED_ON);
- }
- else
- {
- led_set_pub(PUB_LED_JD,LED_OFF);
- }
- for(i=0;i<g_sw_num;i++)
- {
- RUN_STU_SW *prun=&g_tRelay[i].run_stu;
- // 综合合位灯
- if (prun->sw == 0x2)
- {
- led_set_sw(i,SW_LED_ZHHW, LED_ON);
- }
- else if (prun->sw == 0x3)
- {
- led_set_sw(i,SW_LED_ZHHW, LED_SLOW);
- }
- else
- {
- led_set_sw(i,SW_LED_ZHHW, LED_OFF);
- }
- if (prun->sw == 0x1)
- {
- led_set_sw(i,SW_LED_ZHTW, LED_ON);
- }
- else if (prun->sw == 0x3)
- {
- led_set_sw(i,SW_LED_ZHTW, LED_SLOW);
- }
- else
- {
- led_set_sw(i,SW_LED_ZHTW, LED_OFF);
- }
- // 合位灯、跳位灯
- if (prun->hw)
- {
- sw_do(i,SW_DO_BHDZ,SW_DO_TYPE_OFF);
- led_set_sw(i,SW_LED_HW, LED_ON);
- }
- else
- {
- led_set_sw(i,SW_LED_HW, LED_OFF);
- }
- if (prun->tw)
- {
- led_set_sw(i,SW_LED_TW, LED_ON);
- }
- else
- {
- led_set_sw(i,SW_LED_TW, LED_OFF);
- }
-
- // 过流灯
- if (prun->gl == 1)
- {
- led_set_sw(i,SW_LED_GL, LED_ON);
- }
- else if (prun->gl == 2)
- {
- led_set_sw(i,SW_LED_GL, LED_QUICK);
- }
- // 接地灯
- if (prun->jd == 1)
- {
- led_set_sw(i,SW_LED_JD, LED_ON);
- }
- else if (prun->jd == 2)
- {
- led_set_sw(i,SW_LED_JD, LED_QUICK);
- }
- //隔离刀闸灯
- if(prun->gldz)
- {
- led_set_sw(i,SW_LED_GLDZ, LED_ON);
- }
- else
- {
- led_set_sw(i,SW_LED_GLDZ, LED_OFF);
- }
- //接地刀闸灯
- if(prun->jddz)
- {
- led_set_sw(i,SW_LED_JDDZ, LED_ON);
- }
- else
- {
- led_set_sw(i,SW_LED_JDDZ, LED_OFF);
- }
- #if defined GD_AREA_GUANGZHOU_FTU
- if (prun->gj_led)
- led_set_sw(i,SW_LED_FAULT_GJ, LED_ON);
- #endif
- // 重合闸灯
- if (prun->chzdz)
- {
- led_set_sw(i,SW_LED_CHZ, LED_ON);
- }
- // 重合闸充电灯
- if (prun->chzcd||prun->fa_ll_cd||prun->goose_qccd||prun->goose_glcd||prun->goose_ll_cd)
- {
- led_set_sw(i,SW_LED_CD, LED_ON);
- //led_set_sw(i,SW_LED_CHZBS, LED_OFF);//重合闸闭锁灯与充电灯功能相反
- }
- else
- {
- led_set_sw(i,SW_LED_CD, LED_OFF);
- //led_set_sw(i,SW_LED_CHZBS, LED_ON);//重合闸闭锁灯与充电灯功能相反
- }
- if (prun->chzcd)
- led_set_sw(i,SW_LED_CHZ_CD, LED_ON);
- else
- led_set_sw(i,SW_LED_CHZ_CD, LED_OFF);
- //重合闸闭锁灯跟FA闭锁灯合并
- #if 0
- if(g_tRelay[i].run_stu.bhtt && !prun->chzcd)//保护与FA区分闭锁灯处理
- led_set_sw(i,SW_LED_CHZBS_LOCK, LED_ON);
- else if(g_tRelay[i].run_stu.fatt && prun->bs)
- led_set_sw(i,SW_LED_CHZBS_LOCK, LED_ON);
- else
- led_set_sw(i,SW_LED_CHZBS_LOCK, LED_OFF);
- #endif
- #ifdef GD_AREA_ZHONGSHAN_FTU //中山FTU要求手柄手分的时候退出自动化功能,亮闭锁灯
- if(prun->bs || prun->bs_bhz||prun->chzbs)
- #else
- if (prun->bs||prun->chzbs)
- #endif
- {
- led_set_sw(i,SW_LED_CHZBS_LOCK, LED_ON);
- }
- else
- {
- led_set_sw(i,SW_LED_CHZBS_LOCK, LED_OFF);
- }
- // 动作灯
- if (prun->dz == RY_DZ_XYBS) //xj 闭锁合闸长亮
- {
- led_set_sw(i,SW_LED_DZ, LED_ON);
- led_set_sw(i,SW_LED_TZ, LED_ON);
- }
- else if (prun->dz == RY_DZ_BHT) //xj 故障状态闪烁
- {
- led_set_sw(i,SW_LED_DZ, LED_QUICK);
- led_set_sw(i,SW_LED_TZ, LED_ON);
- }
- else
- {
- led_set_sw(i,SW_LED_DZ, LED_OFF);
- }
- if(BH_GOOSE_EN(i)) //智能FA逻辑,联络开关自动查找
- {
- if(g_tRelay[i].tgoc.tllcd.sta.bFlag.bCD) //本开关为联络开关
- {
- led_set_sw(i,SW_LED_LL, LED_ON);
- led_set_sw(i,SW_LED_FD, LED_OFF);
- }
- else
- {
- led_set_sw(i,SW_LED_LL, LED_OFF);
- led_set_sw(i,SW_LED_FD, LED_ON);
- }
- }
- else if (FA_ALL_EN(i))
- {
- if (prun->fa_ls) // 联络
- {
- led_set_sw(i,SW_LED_LL, LED_ON);
- led_set_sw(i,SW_LED_FD, LED_OFF);
- }
- else
- {
- led_set_sw(i,SW_LED_LL, LED_OFF);
- led_set_sw(i,SW_LED_FD, LED_ON);
- }
- }
- else
- {
- led_set_sw(i,SW_LED_FD, LED_OFF);
- led_set_sw(i,SW_LED_LL, LED_OFF);
- }
- //运行模式压板灯
- if(BH_GOOSE_EN(i))
- {
- #ifdef GD_AREA_ZHONGSHAN_2020 // 中山要求智能分布式充电完成,亮模式灯,分支亮保护灯
- if((prun->goose_qccd||prun->goose_glcd||prun->goose_ll_cd)&&!pRunSet->tSwSet[i].tGocSet.bsw_fz)
- {
- led_set_sw(i,SW_LED_MODE_GOOSE, LED_ON);
- led_set_sw(i,SW_LED_MODE_BH, LED_OFF);
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- }
- else if(pRunSet->tSwSet[i].tGocSet.bsw_fz)
- {
- led_set_sw(i,SW_LED_MODE_GOOSE, LED_OFF);
- led_set_sw(i,SW_LED_MODE_BH, LED_ON);
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- }
- else
- {
- led_set_sw(i,SW_LED_MODE_GOOSE, LED_OFF);
- led_set_sw(i,SW_LED_MODE_BH, LED_OFF);
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- }
- #else
- led_set_sw(i,SW_LED_MODE_GOOSE, LED_ON);
- led_set_sw(i,SW_LED_MODE_BH, LED_OFF);
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- #endif
- strcpy(m_Ledgoose,"投入");
- strcpy(m_Ledbh,"退出");
- strcpy(m_Ledfa,"退出");
- #ifdef GD_AREA_ECZD_2020
- #ifdef GD_AREA_ZHONGSHAN_2020
- strcpy(m_Mode_chr,"智能分布式");
- #else
- strcpy(m_Mode_chr,"智能FA");
- #endif
- #endif
- if(prun->goose_qccd||prun->goose_glcd||prun->goose_ll_cd)
- {
- strcpy(m_Goose_chr,"已充电");
- }
- else
- {
- strcpy(m_Goose_chr,"未充电");
- }
- strcpy(m_Bh_chr,"---- ");
- strcpy(m_Fa_sl,"----");
- strcpy(m_Fa_chr,"---- ");
- }
- else if(BH_GOOSE_COMMERR(i))
- {
- led_set_sw(i,SW_LED_MODE_GOOSE, LED_OFF);
- strcpy(m_Ledgoose,"退出");
- if(pRunSet->tSwSet[i].tGocSet.bsw_fz)
- {
- led_set_sw(i,SW_LED_MODE_BH, LED_ON);
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- strcpy(m_Ledbh,"投入");
- strcpy(m_Ledfa,"退出");
- #ifdef GD_AREA_ECZD_2020
- #ifdef GD_AREA_ZHONGSHAN_2020
- strcpy(m_Mode_chr,"电流型");
- #else
- strcpy(m_Mode_chr,"常规保护");
- #endif
- #endif
- if(prun->chzcd)
- {
- strcpy(m_Bh_chr,"已充电");
- }
- else
- {
- strcpy(m_Bh_chr,"未充电");
- }
- strcpy(m_Fa_sl,"----");
- strcpy(m_Fa_chr,"---- ");
- strcpy(m_Goose_chr,"---- ");
- }
- else
- {
- #ifdef GD_AREA_ZHONGSHAN_2020//中山2020要求联络自转电功能未投入不亮FA灯
- if(prun->fa_ls)
- {
- if(soe_check(EV_FA_LL_EN+i*EV_SW_NUM)==true)
- led_set_sw(i,SW_LED_MODE_FA, LED_ON);
- else
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- }
- else
- {
- led_set_sw(i,SW_LED_MODE_FA, LED_ON);
- }
- //闭锁时灭fa模式灯
- if(prun->bs)
- {
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- }
- #else
- led_set_sw(i,SW_LED_MODE_FA, LED_ON);
- #endif
-
- led_set_sw(i,SW_LED_MODE_BH, LED_OFF);
-
- strcpy(m_Ledfa,"投入");
- strcpy(m_Ledbh,"退出");
- #ifdef GD_AREA_ECZD_2020
- #ifdef GD_AREA_ZHONGSHAN_2020
- strcpy(m_Mode_chr,"电压电流型");
- #else
- strcpy(m_Mode_chr,"常规FA");
- #endif
- #endif
- if(prun->fa_ls)
- {
- strcpy(m_Fa_sl,"联络");
- if(prun->fa_ll_cd)
- {
- strcpy(m_Fa_chr,"已充电");
- }
- else
- {
- strcpy(m_Fa_chr,"未充电");
- }
- }
- else
- {
- strcpy(m_Fa_sl,"分段");
- strcpy(m_Fa_chr,"---- ");
- }
- strcpy(m_Bh_chr,"---- ");
- strcpy(m_Goose_chr,"---- ");
- }
- }
- else
- {
-
- //BH
- strcpy(m_Ledjzs,"退出");
- if (BH_ALL_EN(i))
- {
- led_set_sw(i,SW_LED_MODE_BH, LED_ON);
- if(JZS_ALL_EN(i))
- {
- strcpy(m_Ledjzs,"投入");
- strcpy(m_Ledbh,"退出");
- }
- else
- {
- strcpy(m_Ledbh,"投入");
- }
- }
- else
- {
- led_set_sw(i,SW_LED_MODE_BH, LED_OFF);
- strcpy(m_Ledbh,"退出");
- }
- if(!CHZ_ALL_EN(i))
- {
- strcpy(m_Bh_chr,"---- ");
- }
- else
- {
- if(prun->chzcd)
- {
- strcpy(m_Bh_chr,"已充电");
- }
- else
- {
- strcpy(m_Bh_chr,"未充电");
- }
- }
- //FA
- if (FA_ALL_EN(i))
- {
- #ifdef GD_AREA_ZHONGSHAN_2020//中山2020要求联络自转电功能未投入不亮FA灯
- if(prun->fa_ls)
- {
- if(soe_check(EV_FA_LL_EN+i*EV_SW_NUM)==true)
- led_set_sw(i,SW_LED_MODE_FA, LED_ON);
- else
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- }
- else
- {
- led_set_sw(i,SW_LED_MODE_FA, LED_ON);
- }
- //闭锁时灭fa模式灯
- if(prun->bs)
- {
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- }
- #else
- led_set_sw(i,SW_LED_MODE_FA, LED_ON);
- #endif
- strcpy(m_Ledfa,"投入");
-
- #ifdef GD_AREA_ECZD_2020
- #ifdef GD_AREA_ZHONGSHAN_2020
- strcpy(m_Mode_chr,"电压电流型");
- #else
- strcpy(m_Mode_chr,"常规FA");
- #endif
- #endif
- }
- else
- {
- led_set_sw(i,SW_LED_MODE_FA, LED_OFF);
- strcpy(m_Ledfa,"退出");
- }
- if(!FA_ALL_EN(i))
- {
- strcpy(m_Fa_sl,"----");
- strcpy(m_Fa_chr,"---- ");
- }
- else
- {
- if(prun->fa_ls)
- {
- strcpy(m_Fa_sl,"联络");
-
- if(prun->fa_ll_cd)
- {
- strcpy(m_Fa_chr,"已充电");
- }
- else
- {
- strcpy(m_Fa_chr,"未充电");
- }
- }
- else
- {
- strcpy(m_Fa_sl,"分段");
- strcpy(m_Fa_chr,"---- ");
- }
- }
- //Goose
- led_set_sw(i,SW_LED_MODE_GOOSE, LED_OFF);
- strcpy(m_Ledgoose,"退出");
- strcpy(m_Goose_chr,"---- ");
- //no mode
- if((!FA_ALL_EN(i))&&(!BH_ALL_EN(i)))
- {
- strcpy(m_Mode_chr,"----");
- }
- }
- #ifdef GD_AREA_ZHONGSHAN_2020
- if(soe_check(EV_GOOSE_QC_OK+i*EV_SW_NUM)==true //切除OK
- ||soe_check(EV_GOOSE_GL_OK+i*EV_SW_NUM)==true //隔离OK
- ||soe_check(EV_GOOSE_EXT_TZ+i*EV_SW_NUM)==true //装置越级跳闸
- ||soe_check(EV_GOOSE_SDLOST_TZ+i*EV_SW_NUM)==true //首端失压分闸
- ) // 故障动作后亮闭锁灯
- {
- g_tRelay[i].run_stu.fgbs=1;
- }
- #endif
- #ifdef GD_AREA_ZHONGSHAN_FTU //中山FTU要求手柄手分的时候退出自动化功能,亮闭锁灯
- if(prun->bs || prun->bs_bhz)
- #else
- if (prun->bs||prun->fgbs)
- #endif
- {
- led_set_sw(i,SW_LED_LOCK, LED_ON);
- #ifdef GD_AREA_ZHONGSHAN_2020//中山2020要求分段的时候,双电源不亮闭锁灯
- if(!prun->fa_ls)//分段
- {
- if(g_tRelay[i].tSDHZ.S_Status == S_BSDOUBLE)
- {
- led_set_sw(i,SW_LED_LOCK, LED_OFF);
- //led_set_sw(i,SW_LED_MODE_FA, LED_OFF);//关闭就地FA灯
- }
- }
- #endif
- }
- else
- {
- led_set_sw(i,SW_LED_LOCK, LED_OFF);
- #ifdef GD_AREA_ZHONGSHAN_2020
- if(!prun->fa_ls)//分段
- {
- //if(g_tRelay[i].tSDHZ.S_Status == S_BSDOUBLE)
- //led_set_sw(i,SW_LED_MODE_FA, LED_OFF);//关闭就地FA灯
- }
- #endif
- }
- //储能/未储能灯需分合位合法(有对应遥信点)时才允许点亮
- if(prun->wcn && (prun->sw != 0) && (prun->sw != 3))
- {
- led_set_sw(i,SW_LED_WCN, LED_ON);
- }
- else if(!prun->wcn && (prun->sw != 0) && (prun->sw != 3))
- {
- led_set_sw(i,SW_LED_WCN, LED_OFF);
- }
- #if defined GD_AREA_ECZD_2020 || defined GD_AREA_MAIN_2020
- if(JL_ALL_EN(i))
- {
- led_set_sw(i,SW_LED_ZDJL, LED_ON);
- led_set_sw(i,SW_LED_TYZDJL, LED_OFF);
- strcpy(m_Zdjl_chr,"投入");
- }
- else
- {
- led_set_sw(i,SW_LED_ZDJL, LED_OFF);
- led_set_sw(i,SW_LED_TYZDJL, LED_ON);
- strcpy(m_Zdjl_chr,"退出");
- }
-
- if(!FUN_ALL_EN(i))//停用保护功能总
- {
- led_set_sw(i,SW_LED_TYBHTT, LED_ON);
- strcpy(m_StopFun_chr,"停用所有功能");
- }
- else
- {
- led_set_sw(i,SW_LED_TYBHTT, LED_OFF);
- strcpy(m_StopFun_chr,"退出停用功能");
- }
- if(pRunSet->bTT_EDIT_YB)
- {
- strcpy(m_Yftr_chr,"投入");
- }
- else
- {
- strcpy(m_Yftr_chr,"退出");
- }
- #endif
- #ifdef FUNC_DRIVE
- if(pRunSet->bTT_DRIVE)
- {
- led_set_sw(i,SW_LED_DRIVE, LED_ON);
- }
- else
- {
- led_set_sw(i,SW_LED_DRIVE, LED_OFF);
- }
- #endif
- }
- }
- void led_polling_app(void)
- {
- static uint32_t us0=0;
- uint32_t us;
-
- // 平时1秒处理一次,AUX板测试时0.5S一次
- us =(g_led_aux_test_st ||g_led_kz_test_st)? (USTIMER_SEC/4) : USTIMER_SEC;
- if(ustimer_delay_origin2(&us0,us) != 1)
- {
- return;
- }
-
- // 更新灯状态
- _led_update_status();
- #ifdef STORE_PILOTELAMP
- _led_status_save();
- #endif
- // 输出灯状态到can接口的子板(人机板、状态板在各自通讯接口的处理)
- // led_to_sub_board();
- }
- /******************************************************************************
- 函数名称: led_set_sw
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 设置开出类LED灯的状态
- 参数说明: led: 灯的序号 LED_RUN,...,KC_LED_NUM
- status: 灯的状态 LED_ON, LED_SLOW, LED_QUICK, LED_OFF
- 返回值: 无
- 修改记录:
- */
- void led_set_pub(u8 no, u8 st)
- {
- g_led_stu[0][no] = st;
- }
- void led_set_sw(u8 sw,u8 no, u8 st)
- {
- g_led_stu[sw+1][no] = st;
- }
- /******************************************************************************
- 函数名称: led_to_hmi
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 获取面板LED灯的状态
- 参数说明:
- 返回值: 无
- 修改记录:
- */
- int led_to_hmi(void)
- {
- int i;
- u8 led_tmp=0, stu=0;
- u32 dw[2];
- int ret=0;
- u32 *pdw;
- // 如果没有HMI配置,不执行
- if(g_led_hmi == 0)
- {
- return ret;
- }
- dw[0] = 0;
- dw[1] = 0;
- pdw=&dw[0];
- for (i=0; i<g_led_hmi->num; i++)
- {
- // 未配置灯继续循环
- if (g_led_hmi->sn[i].no == LED_NULL)
- {
- continue;
- }
- // 取出灯状态
- stu = g_led_stu[g_led_hmi->sn[i].sw][g_led_hmi->sn[i].no];
- // 取出灯对应位置
- if(i<16)
- {
- led_tmp = i;
- pdw=&dw[0];
- }
- else
- {
- led_tmp = i-16;
- pdw=&dw[1];
- }
- led_tmp *= 2;
- // 按位置将灯状态置入dwled
- switch(stu)
- {
- case LED_ON:
- *pdw |= (0x3<<led_tmp);
- break;
- case LED_SLOW:
- *pdw |= (0x2<<led_tmp);
- break;
- case LED_QUICK:
- *pdw |= (0x1<<led_tmp);
- break;
- case LED_OFF:
- *pdw |= (0x0<<led_tmp);
- break;
- }
-
- }
- // 更新面板全局LED状态
- g_dw_led[0] = dw[0];
- g_dw_led[1] = dw[1];
- return ret;
- }
- /*------------------------------ 内部函数 -------------------------------------
- 内部函数以下划线‘_’开头,不需要检查参数的合法性.
- */
- /*------------------------------ 测试函数 -------------------------------------
- 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
- 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
- */
- int led_info_printf(void)
- {
- int slot,i;
- const char *name;
- struct equ_config_do *cdo;
- cdo = g_equ_config_do;
- rt_printf("\r\nslot\tindex\towner\tno\tvalue\tname\r\n");
- for(slot=0; slot<EQU_SLOT_NUM_MAX; slot++)
- {
- rt_printf("slot%02d:num=%d.\r\n",slot,g_led_slot[slot].num);
- for(i=0; i<g_led_slot[slot].num; i++)
- {
- if(g_led_slot[slot].sn[i].no == LED_NULL)
- {
- continue;
- }
- if(g_led_slot[slot].sn[i].sw == 0)
- {
- name = g_pub_led_name[g_led_slot[slot].sn[i].no];
- }
- else
- {
- name = g_sw_led_name[g_led_slot[slot].sn[i].no];
- }
- rt_printf("%02d\t%02d\t%02d\t%d\t%d\t%s\r\n",
- slot,\
- i,\
- g_led_slot[slot].sn[i].sw,
- g_led_slot[slot].sn[i].no,
- g_led_stu[g_led_slot[slot].sn[i].sw][g_led_slot[slot].sn[i].no],
- name);
- }
- }
- return 0;
- }
- #define LED_FILE_VERSION 0X01010101 //文件版本
- struct file * pf_ledsave=NULL;
- static int _led_savefile(void)
- {
- unsigned int addr,file_length;
- u16 crc;
- char *p;
- loff_t pos;
- struct file * pfile;
- struct cfg_file_head fileled_file;
-
- // 写文件头
- memset(&fileled_file,0,sizeof(fileled_file));
- fileled_file.signature = SIG_LED_SAVE_FILE;
- fileled_file.version = LED_FILE_VERSION;
- addr = FILE_ADDR_ALGIN(sizeof(fileled_file));
-
- // 得到文件长度
- file_length = addr + sizeof(g_led_save);
- file_length = FILE_ADDR_ALGIN(file_length);
- // 分配并初始化空间
- p = rt_malloc(file_length + 2);
- if(!p)
- {
- return -1;
- }
- memset(p, 0, file_length + 2);
-
- // 写入文件头
- memcpy(p, (char *)&fileled_file, sizeof(fileled_file));
-
- // 写文件列表
- memcpy(p+addr, g_led_save,sizeof(g_led_save));
- // 计算CRC
- crc = CrcStr(p, file_length);
- memcpy(p+file_length, &crc, 2);
- // 创建数据文件
- if(pf_ledsave==NULL)
- {
- pfile = rt_file_open("/app/data/file_led.bin",O_CREAT|O_RDWR,0);
- if(IS_ERR(pfile))
- {
- rt_free(p);
- rt_printf("\r\n create led save file fail");
- return -2;
- }
- pf_ledsave=pfile;
- }
-
- pos = 0;
- rt_file_write(pf_ledsave, p, file_length+2, &pos);
- rt_free(p);
- return 0;
- }
- int _led_readfile(void)
- {
- u32 len;
- u16 crc;
- u8 *buf;
- loff_t pos;
- struct file * pfile;
- struct cfg_file_head *brh;
- // 创建并打开文件
- pfile = rt_file_open("/app/data/file_led.bin",O_RDONLY,0);
- if(IS_ERR(pfile))
- {
- return -1;
- }
- // 得到文件长度
- len = rt_file_getfile_size(pfile);
- if(len <= 0)
- {
- rt_file_close(pfile,0);
- return -11;
- }
- // 分配内存
- buf = rt_malloc(len);
- if((buf) == NULL)
- {
- rt_file_close(pfile,0);
- return -2;
- }
- // 读出内容
- pos = 0;
- if(rt_file_read(pfile,buf,len,&pos) != len)
- {
- rt_file_close(pfile,0);
- rt_free(buf);
- return -3;
- }
- // 关闭文件
- rt_file_close(pfile,0);
- // 检查CRC
- crc = CrcStr(buf,len-2);
- if(crc != *(u16*)(buf+len-2))
- {
- rt_free(buf);
- return -4;
- }
- // 检查文件签名
- brh = (struct cfg_file_head*)buf;
- if(brh->signature != SIG_LED_SAVE_FILE)
- {
- rt_free(buf);
- return -5;
- }
- // 校验一下文件长度,防止灯配置变化,文件读取正确,导致的灯状态异常
- {
- int filelenth;
- filelenth = FILE_ADDR_ALGIN(sizeof(struct cfg_file_head))+sizeof(g_led_save);
- filelenth = FILE_ADDR_ALGIN(filelenth)+2;
- if(filelenth!=len)
- {
- rt_free(buf);
- return -6;
- }
- }
- memcpy(g_led_stu,buf+FILE_ADDR_ALGIN(sizeof(struct cfg_file_head)),sizeof(g_led_stu));
- //根据保存的灯状态,预置动作标志
- {
- int sw,led;
- for(sw=0;sw<SWITCH_NUM_MAX+1;sw++)
- {
- if(sw==0)
- {
- if(g_led_stu[sw][PUB_LED_DZ]==LED_ON)
- {
- g_run_stu.pubdz=1;
- }
- else if(g_led_stu[sw][PUB_LED_DZ]==LED_QUICK)
- {
- g_run_stu.pubdz=2;
- }
- }
- else
- {
- RUN_STU_SW *prun=&g_tRelay[sw-1].run_stu;
- u8 *pstatus;
- u8 val=0;
- for(led=0;led<SW_LED_NUM;led++)
- {
- pstatus=NULL;
- val=0;
- if(led==SW_LED_GL)pstatus=&prun->gl;
- if(led==SW_LED_JD)pstatus=&prun->jd;
- if(led==SW_LED_CHZ)pstatus=&prun->chzdz;
- if(led==SW_LED_DZ)pstatus=&prun->dz;
- if(g_led_stu[sw][led]==LED_ON)
- {
- val=1;
- }
- else if(g_led_stu[sw][led]==LED_QUICK)
- {
- val=2;
- }
- if(pstatus!=NULL) *pstatus=val;
- }
- }
- }
- }
- _led_update_status();
- memcpy(g_led_save,g_led_stu,sizeof(g_led_stu));
- rt_free(buf);
- return 0;
- }
- int _led_status_save(void)
- {
- int sw,led;
- static uint32_t led_save_us0;
- if(led_save_flag==0)
- {
- for(sw=0;sw<SWITCH_NUM_MAX+1;sw++)
- {
- if(sw==0)
- {
- for(led=0;led<PUB_LED_NUM;led++)
- {
- if(led==PUB_LED_DZ)
- {
- if(g_led_stu[sw][led]!=g_led_save[sw][led])
- {
- led_save_flag=1;
- led_save_us0 = ustimer_get_origin();
- break;
- }
- }
-
- }
- }
- else
- {
- for(led=0;led<SW_LED_NUM;led++)
- {
- if(led==SW_LED_GL||led==SW_LED_JD||led==SW_LED_CHZ||led==SW_LED_DZ)
- {
- if(g_led_stu[sw][led]!=g_led_save[sw][led])
- {
- led_save_flag=1;
- led_save_us0 = ustimer_get_origin();
- break;
- }
- }
- }
- }
- }
- }
- if(led_save_flag)
- {
- if(ustimer_get_duration(led_save_us0) > USTIMER_SEC*5) // led灯变化10秒后保存灯状态
- {
- memcpy(g_led_save,g_led_stu,sizeof(g_led_stu));
- rt_printf("\r\n led save len=%d",sizeof(g_led_stu));
- _led_savefile();
- led_save_flag=0;
- }
- }
- return 0;
- }
- int led_exit(void)
- {
- if(pf_ledsave != 0)
- {
- rt_file_close(pf_ledsave,0);
- }
- return 0;
- }
- /*------------------------------ 文件结束 -------------------------------------
- */
|