Led.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. #include "multi_led.h"
  2. #include "include.h"
  3. struct Led lRun,lAla,lErr;
  4. void ScanLed ( void ) //100ms
  5. {
  6. led_ticks();
  7. }
  8. void Set_RUN_GPIO(bool state)
  9. {
  10. SET_RUN_LED(state);
  11. }
  12. void Set_ALA_GPIO(bool state)
  13. {
  14. SET_ALA_LED(state);
  15. }
  16. void Set_ERR_GPIO(bool state)
  17. {
  18. SET_ERR_LED(state);
  19. }
  20. void Leds_Init(void)
  21. {
  22. led_init_Head();
  23. led_init(&lRun, Set_RUN_GPIO);
  24. led_init(&lAla, Set_ALA_GPIO);
  25. led_init(&lErr, Set_ERR_GPIO);
  26. led_set_state(&lRun, LED_WORK, 0, LED_STATE2_FLASH, 1000, 0, 0 );
  27. led_set_state(&lAla, LED_TX, 0, LED_STATE0_OFF, 0, 0, 0 );
  28. led_set_state(&lErr, LED_GZ, 0, LED_STATE0_OFF, 0, 0, 0 );
  29. led_start(&lRun);
  30. led_start(&lAla);
  31. led_start(&lErr);
  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. pFault FAULT_State = {.State = Bin ( 00 ) };
  43. pFault FAULT_StateOld = {.State = Bin ( 00 ) };
  44. bool FAULT_State_NoChange = true;
  45. u8 sysLed_Pretreat ( u8 State ) //预处理一下:故障和恢复
  46. {
  47. u8 Res = State;
  48. //3G/电源 故障与恢复
  49. switch ( State )
  50. {
  51. case LED_MODE_WORK_3G_OK:
  52. FAULT_State.Flag._3g = 0;
  53. break;
  54. case LED_MODE_WORK_3G_FAIL:
  55. FAULT_State.Flag._3g = 1;
  56. break;
  57. case LED_MODE_WORK_DC_BAT_OK:
  58. FAULT_State.Flag._dc_bat = 0;
  59. break;
  60. case LED_MODE_WORK_DC_BAT_FAIL:
  61. FAULT_State.Flag._dc_bat = 1;
  62. break;
  63. default:
  64. return State;
  65. }
  66. if ( FAULT_State.Flag._3g ) Res = LED_MODE_WORK_3G_FAIL; //最优先3G
  67. else if ( FAULT_State.Flag._dc_bat ) Res = LED_MODE_WORK_DC_BAT_FAIL;
  68. FAULT_State_NoChange = false;
  69. return Res;
  70. }
  71. #if 0
  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