ledTask.lua 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. module(...,package.seeall)
  2. require "net"
  3. --require "netLed"
  4. require "sim"
  5. require "pins"
  6. require"errDump"
  7. --三色灯pin
  8. --pio.P0_15:red
  9. --pio.P0_25:blue
  10. --pio.P0_26:green
  11. local redLedPin = pio.P0_15
  12. local blueLedPin = pio.P0_25
  13. local greenLedPin = pio.P0_26
  14. --SIM卡状态:true为异常,false或者nil为正常
  15. local simError
  16. --是否处于飞行模式:true为是,false或者nil为否
  17. local flyMode
  18. --是否注册上GSM网络,true为是,false或者nil为否
  19. local gsmRegistered
  20. --是否附着上GPRS网络,true为是,false或者nil为否
  21. local gprsAttached
  22. --socket是否可用,true为是,false为否
  23. local socketReady = false
  24. local socketChanged = false
  25. --网络指示灯表示的工作状态
  26. --NULL:功能关闭状态
  27. --FLYMODE:飞行模式
  28. --SIMERR:未检测到SIM卡或者SIM卡锁pin码等SIM卡异常
  29. --IDLE:未注册GSM网络
  30. --GSM:已注册GSM网络
  31. --GPRS:已附着GPRS数据网络
  32. --SCK:socket已连接上后台
  33. local ledState = "NULL"
  34. --指示灯开关,true为打开,false或者nil为关闭
  35. local ledSwitch = true
  36. local ledPin = false
  37. local ON,OFF = 1,2
  38. --各种工作状态下配置的点亮、熄灭时长(单位毫秒)
  39. local ledBlinkTime =
  40. {
  41. NULL = {0,0xFFFF}, --常灭
  42. FLYMODE = {0,0xFFFF}, --飞行模式时:常灭
  43. SIMERR = {4000,1000}, --SIM出错时:红灯,亮4000毫秒,灭1000毫秒
  44. IDLE = {1000,1000}, --其他状态:红灯,亮1000毫秒,灭1000毫秒
  45. GSM = {300,1700}, --GSM未注册上网络时:红灯,亮300毫秒,灭1700毫秒
  46. GPRS = {300,700}, --GPRS附着上网络时:绿灯,亮300毫秒,灭700毫秒
  47. SCKREADY = {1000,4000}, --SOCKET可用时:蓝灯,亮1000毫秒,灭4000毫秒
  48. --SCKERR = {4000,1000}, --蓝灯,亮4000毫秒,灭1000毫秒
  49. }
  50. local function updateState()
  51. --log.info("netLed.updateState",ledSwitch,ledState,flyMode,simError,gsmRegistered,gprsAttached,socketConnected)
  52. if ledSwitch then
  53. local newState = "IDLE"
  54. ledPin = redLedPin
  55. if flyMode then
  56. newState = "FLYMODE"
  57. ledPin = redLedPin
  58. elseif simError then
  59. newState = "SIMERR"
  60. ledPin = redLedPin
  61. elseif gprsAttached then
  62. if socketReady then
  63. newState = "SCKREADY"
  64. ledPin = blueLedPin
  65. else
  66. newState = "GPRS"
  67. ledPin = greenLedPin
  68. end
  69. elseif not gsmRegistered then
  70. newState = "GSM"
  71. ledPin = redLedPin
  72. end
  73. --指示灯状态发生变化
  74. if newState~=ledState then
  75. ledState = newState
  76. log.info("ledTask.updateState","newState~=ledState",newState,ledState)
  77. sys.publish("RGB_LED_UPDATE")
  78. end
  79. end
  80. end
  81. local function taskLed()
  82. pmd.ldoset(2,pmd.LDO_VMMC)
  83. while true do
  84. log.info("netLed.taskLed",ledSwitch,ledState)
  85. if ledSwitch then
  86. if ledPin then
  87. --初始化三色灯状态
  88. pins.setup(redLedPin, 1)
  89. pins.setup(blueLedPin, 1)
  90. pins.setup(greenLedPin, 1)
  91. --状态指示灯闪烁
  92. local onTime,offTime = ledBlinkTime[ledState][ON],ledBlinkTime[ledState][OFF]
  93. log.info("netLed.taskLed",onTime,offTime,ledState,ledPin)
  94. if onTime>0 then
  95. pins.setup(ledPin, 0)
  96. if not sys.waitUntil("RGB_LED_UPDATE", onTime) then
  97. if offTime>0 then
  98. pins.setup(ledPin, 1)
  99. sys.waitUntil("RGB_LED_UPDATE", offTime)
  100. end
  101. end
  102. elseif offTime>0 then
  103. pins.setup(ledPin, 1)
  104. sys.waitUntil("RGB_LED_UPDATE", offTime)
  105. end
  106. else
  107. log.error("ledTask.taskLed", "ledPin not existed!!")
  108. sys.wait(1000)
  109. end
  110. else
  111. sys.wait(1000)
  112. end
  113. end
  114. end
  115. sys.taskInit(taskLed)
  116. sys.subscribe("FLYMODE", function(mode)
  117. if flyMode~=mode then
  118. log.info("ledTask.FLYMODE","FLYMODE")
  119. flyMode=mode
  120. updateState()
  121. end
  122. end)
  123. sys.subscribe("SIM_IND", function(para)
  124. if simError~=(para~="RDY") then
  125. simError=(para~="RDY")
  126. errDump.appendErr("[ledTask.SIM_IND sim error!!]"..os.time())
  127. log.info("ledTask.SIM_IND","sim error!!")
  128. updateState()
  129. end
  130. end)
  131. sys.subscribe("NET_STATE_UNREGISTER", function()
  132. if gsmRegistered then
  133. gsmRegistered=false
  134. log.info("ledTask.NET_STATE_REGISTERED","gsm unregistered!!")
  135. errDump.appendErr("[ledTask.NET_STATE_REGISTERED gsm unregistered!!]"..os.time())
  136. updateState()
  137. end
  138. end)
  139. sys.subscribe("NET_STATE_REGISTERED", function()
  140. if not gsmRegistered then
  141. gsmRegistered=true
  142. log.info("ledTask.NET_STATE_REGISTERED","gsm registered")
  143. updateState()
  144. end
  145. end)
  146. sys.subscribe("GPRS_ATTACH", function(attach)
  147. if gprsAttached~=attach then
  148. log.info("ledTask.GPRS_ATTACH","gprsAttached:",gprsAttached,"attach:",attach,"netMode:",net.getNetMode())
  149. if not attach then
  150. errDump.appendErr("[ledTask.GPRS_ATTACH gprs attach failed!!]"..os.time())
  151. end
  152. gprsAttached=attach
  153. updateState()
  154. end
  155. end)
  156. --有socket连接断开时触发SOCKET_ACTIVE
  157. --sys.subscribe("SOCKET_ACTIVE", function(active) if socketConnected~=active then socketConnected=active socketChanged=true updateState() end end)
  158. sys.subscribe("IP_READY_IND", function()
  159. log.info("ledTask.IP_READY_IND","IP_READY_IND")
  160. socketReady=true
  161. updateState()
  162. end)
  163. sys.subscribe("IP_ERROR_IND", function()
  164. errDump.appendErr("[ledTask.IP_ERROR_IND socket error!!]"..os.time())
  165. log.info("ledTask.IP_ERROR_IND","socket error!!")
  166. socketReady=false
  167. updateState()
  168. end)
  169. --sys.subscribe("NET_UPD_NET_MODE", function() if lteSwitch then sys.publish("LTE_LED_UPDATE",net.getNetMode()==net.NetMode_LTE) end end)