led_ftu.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: led.c
  4. 文件版本: 01.01
  5. 创建作者: xxxxxx
  6. 创建日期: 2013-05-29
  7. 功能说明: LED处理程序
  8. 其它说明:
  9. 修改记录:
  10. */
  11. /*------------------------------- 头文件 --------------------------------------
  12. */
  13. #include "head.h"
  14. /*------------------------------- 宏定义 --------------------------------------
  15. */
  16. #define LED_NULL (-1)
  17. #define EWEN_TEST //临时测试用
  18. #ifndef EWEN_TEST
  19. #define QUICK_FLASH 20 // 5Hz, 亮100ms,灭100ms。5ms一次,20次为100ms
  20. #define SLOW_FLASH 100 // 1Hz, 亮0.5s,灭0.5s
  21. #else
  22. #define QUICK_FLASH 100 // 5Hz, 亮100ms,灭100ms。5ms一次,20次为100ms
  23. #define SLOW_FLASH 500 // 1Hz, 亮0.5s,灭0.5s
  24. #endif
  25. /*------------------------------ 类型结构 -------------------------------------
  26. */
  27. // 开出类型灯控制结构体
  28. struct kc_led_st
  29. {
  30. u8 slow_flag; // 慢闪总标志
  31. u8 quick_flag; // 快闪总标志
  32. u32 slow_t; // 慢闪计数
  33. u32 quick_t; // 快闪计数
  34. };
  35. /*------------------------------ 全局变量 -------------------------------------
  36. */
  37. struct kc_led_st g_kc_led;
  38. /*------------------------------ 函数声明 -------------------------------------
  39. */
  40. static int _led_kc_op(int i);
  41. /*------------------------------ 外部函数 -------------------------------------
  42. 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性.
  43. */
  44. // 通讯灯
  45. static int _led_comm(void)
  46. {
  47. #ifdef CN_AREA_GUANGXI
  48. if(FUN_YX_SEND_YB) //检修压板投入,通信灯常亮
  49. led_set_pub(PUB_LED_COMM, LED_ON);
  50. #else
  51. if(g_run_stu.bjx) //检修压板投入,通信灯常亮
  52. led_set_pub(PUB_LED_COMM, LED_ON);
  53. #endif
  54. switch(g_led_stu[0][PUB_LED_COMM])
  55. {
  56. case LED_ON:
  57. GPIO_LED_COMM_ON();
  58. break;
  59. case LED_OFF:
  60. GPIO_LED_COMM_OFF();;
  61. break;
  62. }
  63. return 0;
  64. }
  65. //动作灯
  66. static int _led_act(void)
  67. {
  68. switch(g_led_stu[0][PUB_LED_DZ])
  69. {
  70. case LED_ON:
  71. GPIO_LED_ACT_ON();
  72. break;
  73. case LED_OFF:
  74. GPIO_LED_ACT_OFF();;
  75. break;
  76. case LED_SLOW:
  77. if (g_kc_led.slow_t == 0)
  78. {
  79. if(GPIO_LED_ACT_STATUS())
  80. {
  81. GPIO_LED_ACT_OFF();;
  82. }
  83. else
  84. {
  85. GPIO_LED_ACT_ON();
  86. }
  87. }
  88. break;
  89. case LED_QUICK:
  90. if (g_kc_led.quick_t == 0)
  91. {
  92. if(GPIO_LED_ACT_STATUS())
  93. {
  94. GPIO_LED_ACT_OFF();;
  95. }
  96. else
  97. {
  98. GPIO_LED_ACT_ON();
  99. }
  100. }
  101. break;
  102. }
  103. return 0;
  104. }
  105. static int _led_kc_op(int i)
  106. {
  107. int channel;
  108. // 先将板卡的索引转换为开出函数的索引
  109. channel = equ_get_do_channel(i);
  110. switch(g_led_stu[g_led_slot[EQU_SLOT_KZ].sn[i].sw][g_led_slot[EQU_SLOT_KZ].sn[i].no])
  111. {
  112. case LED_ON:
  113. dido_do_kz(1, channel);
  114. break;
  115. case LED_OFF:
  116. dido_do_kz(0, channel);
  117. break;
  118. case LED_SLOW:
  119. if (g_kc_led.slow_t == SLOW_FLASH)
  120. {
  121. dido_do_kz(!g_kc_led.slow_flag, channel);
  122. }
  123. break;
  124. case LED_QUICK:
  125. if (g_kc_led.quick_t == QUICK_FLASH)
  126. {
  127. dido_do_kz(!g_kc_led.quick_flag, channel);
  128. }
  129. break;
  130. }
  131. return 0;
  132. }
  133. /******************************************************************************
  134. 函数名称: led_polling_5ms
  135. 函数版本: 01.01
  136. 创建作者: xxxxxx
  137. 创建日期: 2014-12-16
  138. 函数说明: 设置开出类型LED灯的状态
  139. 参数说明: led: 灯的序号
  140. status: 灯的状态 LED_ON, LED_SLOW, LED_QUICK, LED_OFF
  141. 返回值: 无
  142. 修改记录:
  143. */
  144. int led_polling_5ms(void)
  145. {
  146. int i;
  147. // 遍历所有灯
  148. for (i=0; i<g_led_slot[EQU_SLOT_KZ].num; i++)
  149. {
  150. // 如果没有配置,跳过
  151. if(g_led_slot[EQU_SLOT_KZ].sn[i].no == LED_NULL)
  152. {
  153. continue;
  154. }
  155. if (!bMaintain_test)
  156. {
  157. _led_kc_op(i);
  158. }
  159. }
  160. // 计数到清零,并切换状态
  161. if (g_kc_led.slow_t == SLOW_FLASH)
  162. {
  163. //慢闪切换
  164. g_kc_led.slow_flag = !g_kc_led.slow_flag;
  165. g_kc_led.slow_t = 0;
  166. // 主板运行错误灯
  167. _led_run_err();
  168. }
  169. if (g_kc_led.quick_t == QUICK_FLASH)
  170. {
  171. //快闪切换
  172. g_kc_led.quick_flag = !g_kc_led.quick_flag;
  173. g_kc_led.quick_t = 0;
  174. //通讯灯闪烁控制
  175. #if 0
  176. if(g_kc_led.quick_flag)
  177. {
  178. if(g_bCommLed)
  179. {
  180. if(g_comm_link_status)
  181. {
  182. led_set_pub( PUB_LED_COMM, LED_OFF);
  183. }
  184. else
  185. {
  186. led_set_pub( PUB_LED_COMM, LED_ON);
  187. }
  188. g_bCommLed = 0;
  189. }
  190. }
  191. else
  192. {
  193. if(g_comm_link_status)
  194. {
  195. led_set_pub( PUB_LED_COMM, LED_ON);
  196. }
  197. else
  198. {
  199. led_set_pub( PUB_LED_COMM, LED_OFF);
  200. }
  201. }
  202. #endif
  203. }
  204. // 通讯灯、动作灯输出
  205. // _led_comm(); //临时屏蔽
  206. // _led_act();
  207. // 计数自加,加1为5ms
  208. g_kc_led.slow_t++;
  209. g_kc_led.quick_t++;
  210. return 0;
  211. }
  212. /*------------------------------ 测试函数 -------------------------------------
  213. 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
  214. 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
  215. */
  216. /*------------------------------ 文件结束 -------------------------------------
  217. */