Led.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /************************************************************************
  2. * ---- 居加居 ----
  3. * 文件名: Led.c
  4. * 编写人员: Kinve JQ
  5. * 说明:
  6. * 版本: V0.1
  7. * 编写日期: 2018-09-30
  8. * 程序维护:
  9. * 维护记录:
  10. * 2018-09-30.Kinve:1.创建文件
  11. * 免责声明:
  12. * (c) Author Kinve JQ. All rights reserved.
  13. **************************************************************************/
  14. #include "multi_led.h"
  15. #include "led.h"
  16. #include "N76E003.h"
  17. struct Led lRun, lAla, lErr;
  18. void ScanLed ( void ) //100ms
  19. {
  20. led_ticks();
  21. }
  22. void Set_RUN_GPIO ( bool state )
  23. {
  24. P12 = state;
  25. }
  26. void Leds_Init ( void )
  27. {
  28. led_init_Head();
  29. led_init ( &lRun, Set_RUN_GPIO );
  30. led_set_state ( &lRun, LED_WORK, 0, LED_STATE2_FLASH, 1000, 0, 0 );
  31. led_start ( &lRun );
  32. //make the timer invoking the button_ticks() interval 5ms.
  33. //This function is implemented by yourself.
  34. //__timer_start(button_ticks, 0, 100);
  35. }
  36. /*
  37. 通用:WorkLed闪动
  38. 通信正常: TxLed 亮 (其他功能可共用), GZLed 灭; 传输TxLed 闪
  39. 通信故障: TxLed 灭, GZLed 亮:电源故障
  40. 通信故障,100s声光提示,声可消除;光保持到,无线模块复位,或故障消除
  41. */
  42. #if 0
  43. pFault FAULT_State = {.State = Bin ( 00 ) };
  44. pFault FAULT_StateOld = {.State = Bin ( 00 ) };
  45. bool FAULT_State_NoChange = true;
  46. u8 sysLed_Pretreat ( u8 State ) //预处理一下:故障和恢复
  47. {
  48. u8 Res = State;
  49. //3G/电源 故障与恢复
  50. switch ( State )
  51. {
  52. case LED_MODE_WORK_3G_OK:
  53. FAULT_State.Flag._3g = 0;
  54. break;
  55. case LED_MODE_WORK_3G_FAIL:
  56. FAULT_State.Flag._3g = 1;
  57. break;
  58. case LED_MODE_WORK_DC_BAT_OK:
  59. FAULT_State.Flag._dc_bat = 0;
  60. break;
  61. case LED_MODE_WORK_DC_BAT_FAIL:
  62. FAULT_State.Flag._dc_bat = 1;
  63. break;
  64. default:
  65. return State;
  66. }
  67. if ( FAULT_State.Flag._3g ) Res = LED_MODE_WORK_3G_FAIL; //最优先3G
  68. else if ( FAULT_State.Flag._dc_bat ) Res = LED_MODE_WORK_DC_BAT_FAIL;
  69. FAULT_State_NoChange = false;
  70. return Res;
  71. }
  72. //灯的控制和蜂鸣器的控制
  73. void sysLed_Set ( u8 State )
  74. {
  75. State = sysLed_Pretreat ( State );
  76. switch ( SysRunType )
  77. {
  78. case SysRun_Norm:
  79. switch ( State )
  80. {
  81. case LED_MODE_WORK_RUN:
  82. LedDoing ( LED_WORK, 0, LED_STATE2_FLASH, 1000, 0, 0 ); //单位100ms: 500ms开,500ms关
  83. if ( FAULT_State_NoChange ) //初始化状态
  84. {
  85. LedDoing ( LED_TX, 0, LED_STATE0_OFF, 0, 0, 0 );
  86. LedDoing ( LED_GZ, 0, LED_STATE0_OFF, 0, 0, 0 );
  87. }
  88. else if ( FAULT_State.Flag._3g ) //1.3g故障, 2.3g+电源故障
  89. {
  90. LedDoing ( LED_TX, 0, LED_STATE0_OFF, 0, 0, 0 );
  91. LedDoing ( LED_GZ, 0, LED_STATE1_ON, 0, 0, 0 );
  92. }
  93. else if ( FAULT_State.Flag._dc_bat ) //3g正常, 电源故障
  94. {
  95. LedDoing ( LED_TX, 0, LED_STATE1_ON, 0, 0, 0 );
  96. LedDoing ( LED_GZ, 0, LED_STATE2_FLASH, 500, 0, 0 );
  97. }
  98. else //3g正常, 电源正常
  99. {
  100. LedDoing ( LED_TX, 0, LED_STATE1_ON, 0, 0, 0 );
  101. LedDoing ( LED_GZ, 0, LED_STATE0_OFF, 0, 0, 0 );
  102. }
  103. break;
  104. case LED_MODE_WORK_3G_OK:
  105. LedDoing ( LED_TX, 0, LED_STATE1_ON, 0, 0, 0 );
  106. LedDoing ( LED_GZ, 0, LED_STATE0_OFF, 0, 0, 0 );
  107. break;
  108. case LED_MODE_WORK_3G_FAIL:
  109. LedDoing ( LED_TX, 0, LED_STATE0_OFF, 0, 0, 0 );
  110. LedDoing ( LED_GZ, 0, LED_STATE1_ON, 0, 0, 0 );
  111. break;
  112. case LED_MODE_WORK_DC_BAT_OK:
  113. LedDoing ( LED_GZ, 0, LED_STATE0_OFF, 0, 0, 0 );
  114. break;
  115. case LED_MODE_WORK_DC_BAT_FAIL:
  116. LedDoing ( LED_GZ, 0, LED_STATE2_FLASH, 500, 0, 0 );
  117. break;
  118. case LED_MODE_WORK_3G_TX:
  119. LedDoing ( LED_TX, 0, LED_STATE5_FLASH_DELAY, 100, 200, 1 ); //100ms开,开关1次
  120. break;
  121. case LED_MODE_WORK_3G_RX:
  122. LedDoing ( LED_TX, 0, LED_STATE5_FLASH_DELAY, 100, 400, 1 ); //100ms开,开关2次
  123. break;
  124. case LED_MODE_TEST_RUN:
  125. case LED_MODE_TEST_KGL_IN:
  126. break;
  127. }
  128. break;
  129. case SysRun_Test:
  130. switch ( State )
  131. {
  132. case LED_MODE_WORK_RUN:
  133. break;
  134. case LED_MODE_WORK_3G_OK:
  135. LedDoing ( LED_TX, 0, LED_STATE1_ON, 0, 0, 0 );
  136. break;
  137. case LED_MODE_WORK_3G_FAIL:
  138. LedDoing ( LED_TX, 0, LED_STATE0_OFF, 0, 0, 0 );
  139. break;
  140. case LED_MODE_WORK_DC_BAT_OK:
  141. case LED_MODE_WORK_DC_BAT_FAIL:
  142. case LED_MODE_WORK_3G_TX:
  143. case LED_MODE_WORK_3G_RX:
  144. break;
  145. case LED_MODE_TEST_RUN:
  146. LedDoing ( LED_WORK, 0, LED_STATE2_FLASH, 200, 0, 0 );
  147. LedDoing ( LED_GZ, 0, LED_STATE2_FLASH, 200, 0, 0 );
  148. LedDoing ( LED_TX, 0, LED_STATE2_FLASH, 200, 0, 0 );
  149. break;
  150. case LED_MODE_TEST_KGL_IN:
  151. LedDoing ( LED_GZ, 0, LED_STATE4_NOT, 0, 0, 0 );
  152. break;
  153. }
  154. break;
  155. }
  156. if ( SysRunType == SysRun_Norm )
  157. {
  158. if ( FAULT_StateOld.State != FAULT_State.State )
  159. {
  160. FAULT_StateOld.State = FAULT_State.State;
  161. ( FAULT_State.State == 0 ) ? StopBeep() : StartBeep ( WARMING_BEEP ); //判断是否是正常状态,是正常则停,告警则响
  162. }
  163. }
  164. }
  165. #endif
  166. /*************** (C) COPYRIGHT Kinve JQ *******END OF FILE **************/