| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /******************************************************************************
- 版权所有:
- 文件名称: led.c
- 文件版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2013-05-29
- 功能说明: LED处理程序
- 其它说明:
- 修改记录:
- */
- /*------------------------------- 头文件 --------------------------------------
- */
- #include "head.h"
-
- /*------------------------------- 宏定义 --------------------------------------
- */
- #define LED_NULL (-1)
- #define EWEN_TEST //临时测试用
- #ifndef EWEN_TEST
- #define QUICK_FLASH 20 // 5Hz, 亮100ms,灭100ms。5ms一次,20次为100ms
- #define SLOW_FLASH 100 // 1Hz, 亮0.5s,灭0.5s
- #else
- #define QUICK_FLASH 100 // 5Hz, 亮100ms,灭100ms。5ms一次,20次为100ms
- #define SLOW_FLASH 500 // 1Hz, 亮0.5s,灭0.5s
- #endif
- /*------------------------------ 类型结构 -------------------------------------
- */
- // 开出类型灯控制结构体
- struct kc_led_st
- {
- u8 slow_flag; // 慢闪总标志
- u8 quick_flag; // 快闪总标志
- u32 slow_t; // 慢闪计数
- u32 quick_t; // 快闪计数
- };
- /*------------------------------ 全局变量 -------------------------------------
- */
- struct kc_led_st g_kc_led;
- /*------------------------------ 函数声明 -------------------------------------
- */
- static int _led_kc_op(int i);
- /*------------------------------ 外部函数 -------------------------------------
- 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性.
- */
- // 通讯灯
- static int _led_comm(void)
- {
- #ifdef CN_AREA_GUANGXI
- if(FUN_YX_SEND_YB) //检修压板投入,通信灯常亮
- led_set_pub(PUB_LED_COMM, LED_ON);
- #else
- if(g_run_stu.bjx) //检修压板投入,通信灯常亮
- led_set_pub(PUB_LED_COMM, LED_ON);
- #endif
-
-
- switch(g_led_stu[0][PUB_LED_COMM])
- {
- case LED_ON:
- GPIO_LED_COMM_ON();
- break;
- case LED_OFF:
- GPIO_LED_COMM_OFF();;
- break;
- }
- return 0;
- }
- //动作灯
- static int _led_act(void)
- {
- switch(g_led_stu[0][PUB_LED_DZ])
- {
- case LED_ON:
- GPIO_LED_ACT_ON();
- break;
- case LED_OFF:
- GPIO_LED_ACT_OFF();;
- break;
- case LED_SLOW:
- if (g_kc_led.slow_t == 0)
- {
- if(GPIO_LED_ACT_STATUS())
- {
- GPIO_LED_ACT_OFF();;
- }
- else
- {
- GPIO_LED_ACT_ON();
- }
- }
- break;
- case LED_QUICK:
- if (g_kc_led.quick_t == 0)
- {
- if(GPIO_LED_ACT_STATUS())
- {
- GPIO_LED_ACT_OFF();;
- }
- else
- {
- GPIO_LED_ACT_ON();
- }
- }
- break;
- }
- return 0;
- }
- static int _led_kc_op(int i)
- {
- int channel;
-
- // 先将板卡的索引转换为开出函数的索引
- channel = equ_get_do_channel(i);
- switch(g_led_stu[g_led_slot[EQU_SLOT_KZ].sn[i].sw][g_led_slot[EQU_SLOT_KZ].sn[i].no])
- {
- case LED_ON:
- dido_do_kz(1, channel);
- break;
- case LED_OFF:
- dido_do_kz(0, channel);
- break;
- case LED_SLOW:
- if (g_kc_led.slow_t == SLOW_FLASH)
- {
- dido_do_kz(!g_kc_led.slow_flag, channel);
- }
- break;
- case LED_QUICK:
- if (g_kc_led.quick_t == QUICK_FLASH)
- {
- dido_do_kz(!g_kc_led.quick_flag, channel);
- }
- break;
- }
- return 0;
- }
- /******************************************************************************
- 函数名称: led_polling_5ms
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 设置开出类型LED灯的状态
- 参数说明: led: 灯的序号
- status: 灯的状态 LED_ON, LED_SLOW, LED_QUICK, LED_OFF
- 返回值: 无
- 修改记录:
- */
- int led_polling_5ms(void)
- {
- int i;
- // 遍历所有灯
- for (i=0; i<g_led_slot[EQU_SLOT_KZ].num; i++)
- {
- // 如果没有配置,跳过
- if(g_led_slot[EQU_SLOT_KZ].sn[i].no == LED_NULL)
- {
- continue;
- }
- if (!bMaintain_test)
- {
- _led_kc_op(i);
- }
- }
- // 计数到清零,并切换状态
- if (g_kc_led.slow_t == SLOW_FLASH)
- {
- //慢闪切换
- g_kc_led.slow_flag = !g_kc_led.slow_flag;
- g_kc_led.slow_t = 0;
-
- // 主板运行错误灯
- _led_run_err();
- }
-
- if (g_kc_led.quick_t == QUICK_FLASH)
- {
- //快闪切换
- g_kc_led.quick_flag = !g_kc_led.quick_flag;
- g_kc_led.quick_t = 0;
- //通讯灯闪烁控制
- #if 0
- if(g_kc_led.quick_flag)
- {
- if(g_bCommLed)
- {
- if(g_comm_link_status)
- {
- led_set_pub( PUB_LED_COMM, LED_OFF);
- }
- else
- {
- led_set_pub( PUB_LED_COMM, LED_ON);
- }
- g_bCommLed = 0;
- }
- }
- else
- {
- if(g_comm_link_status)
- {
- led_set_pub( PUB_LED_COMM, LED_ON);
- }
- else
- {
- led_set_pub( PUB_LED_COMM, LED_OFF);
- }
- }
- #endif
- }
-
- // 通讯灯、动作灯输出
- // _led_comm(); //临时屏蔽
- // _led_act();
-
- // 计数自加,加1为5ms
- g_kc_led.slow_t++;
- g_kc_led.quick_t++;
- return 0;
- }
- /*------------------------------ 测试函数 -------------------------------------
- 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
- 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
- */
- /*------------------------------ 文件结束 -------------------------------------
- */
|