123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- module(...,package.seeall)
- require "net"
- --require "netLed"
- require "sim"
- require "pins"
- require"errDump"
- --三色灯pin
- --pio.P0_15:red
- --pio.P0_25:blue
- --pio.P0_26:green
- local redLedPin = pio.P0_15
- local blueLedPin = pio.P0_25
- local greenLedPin = pio.P0_26
- --SIM卡状态:true为异常,false或者nil为正常
- local simError
- --是否处于飞行模式:true为是,false或者nil为否
- local flyMode
- --是否注册上GSM网络,true为是,false或者nil为否
- local gsmRegistered
- --是否附着上GPRS网络,true为是,false或者nil为否
- local gprsAttached
- --socket是否可用,true为是,false为否
- local socketReady = false
- local socketChanged = false
- --网络指示灯表示的工作状态
- --NULL:功能关闭状态
- --FLYMODE:飞行模式
- --SIMERR:未检测到SIM卡或者SIM卡锁pin码等SIM卡异常
- --IDLE:未注册GSM网络
- --GSM:已注册GSM网络
- --GPRS:已附着GPRS数据网络
- --SCK:socket已连接上后台
- local ledState = "NULL"
- --指示灯开关,true为打开,false或者nil为关闭
- local ledSwitch = true
- local ledPin = false
- local ON,OFF = 1,2
- --各种工作状态下配置的点亮、熄灭时长(单位毫秒)
- local ledBlinkTime =
- {
- NULL = {0,0xFFFF}, --常灭
- FLYMODE = {0,0xFFFF}, --飞行模式时:常灭
- SIMERR = {4000,1000}, --SIM出错时:红灯,亮4000毫秒,灭1000毫秒
- IDLE = {1000,1000}, --其他状态:红灯,亮1000毫秒,灭1000毫秒
- GSM = {300,1700}, --GSM未注册上网络时:红灯,亮300毫秒,灭1700毫秒
- GPRS = {300,700}, --GPRS附着上网络时:绿灯,亮300毫秒,灭700毫秒
- SCKREADY = {1000,4000}, --SOCKET可用时:蓝灯,亮1000毫秒,灭4000毫秒
- --SCKERR = {4000,1000}, --蓝灯,亮4000毫秒,灭1000毫秒
- }
- local function updateState()
- --log.info("netLed.updateState",ledSwitch,ledState,flyMode,simError,gsmRegistered,gprsAttached,socketConnected)
- if ledSwitch then
- local newState = "IDLE"
- ledPin = redLedPin
- if flyMode then
- newState = "FLYMODE"
- ledPin = redLedPin
- elseif simError then
- newState = "SIMERR"
- ledPin = redLedPin
- elseif gprsAttached then
- if socketReady then
- newState = "SCKREADY"
- ledPin = blueLedPin
- else
- newState = "GPRS"
- ledPin = greenLedPin
- end
- elseif not gsmRegistered then
- newState = "GSM"
- ledPin = redLedPin
- end
- --指示灯状态发生变化
- if newState~=ledState then
- ledState = newState
- log.info("ledTask.updateState","newState~=ledState",newState,ledState)
- sys.publish("RGB_LED_UPDATE")
- end
- end
- end
- local function taskLed()
- pmd.ldoset(2,pmd.LDO_VMMC)
- while true do
- log.info("netLed.taskLed",ledSwitch,ledState)
- if ledSwitch then
- if ledPin then
- --初始化三色灯状态
- pins.setup(redLedPin, 1)
- pins.setup(blueLedPin, 1)
- pins.setup(greenLedPin, 1)
- --状态指示灯闪烁
- local onTime,offTime = ledBlinkTime[ledState][ON],ledBlinkTime[ledState][OFF]
- log.info("netLed.taskLed",onTime,offTime,ledState,ledPin)
- if onTime>0 then
- pins.setup(ledPin, 0)
- if not sys.waitUntil("RGB_LED_UPDATE", onTime) then
- if offTime>0 then
- pins.setup(ledPin, 1)
- sys.waitUntil("RGB_LED_UPDATE", offTime)
- end
- end
- elseif offTime>0 then
- pins.setup(ledPin, 1)
- sys.waitUntil("RGB_LED_UPDATE", offTime)
- end
-
- else
- log.error("ledTask.taskLed", "ledPin not existed!!")
- sys.wait(1000)
- end
- else
- sys.wait(1000)
- end
- end
- end
- sys.taskInit(taskLed)
- sys.subscribe("FLYMODE", function(mode)
- if flyMode~=mode then
- log.info("ledTask.FLYMODE","FLYMODE")
- flyMode=mode
- updateState()
- end
- end)
- sys.subscribe("SIM_IND", function(para)
- if simError~=(para~="RDY") then
- simError=(para~="RDY")
- errDump.appendErr("[ledTask.SIM_IND sim error!!]"..os.time())
- log.info("ledTask.SIM_IND","sim error!!")
- updateState()
- end
- end)
- sys.subscribe("NET_STATE_UNREGISTER", function()
- if gsmRegistered then
- gsmRegistered=false
- log.info("ledTask.NET_STATE_REGISTERED","gsm unregistered!!")
- errDump.appendErr("[ledTask.NET_STATE_REGISTERED gsm unregistered!!]"..os.time())
- updateState()
- end
- end)
- sys.subscribe("NET_STATE_REGISTERED", function()
- if not gsmRegistered then
- gsmRegistered=true
- log.info("ledTask.NET_STATE_REGISTERED","gsm registered")
- updateState()
- end
- end)
- sys.subscribe("GPRS_ATTACH", function(attach)
- if gprsAttached~=attach then
- log.info("ledTask.GPRS_ATTACH","gprsAttached:",gprsAttached,"attach:",attach,"netMode:",net.getNetMode())
- if not attach then
- errDump.appendErr("[ledTask.GPRS_ATTACH gprs attach failed!!]"..os.time())
- end
- gprsAttached=attach
- updateState()
- end
- end)
- --有socket连接断开时触发SOCKET_ACTIVE
- --sys.subscribe("SOCKET_ACTIVE", function(active) if socketConnected~=active then socketConnected=active socketChanged=true updateState() end end)
- sys.subscribe("IP_READY_IND", function()
- log.info("ledTask.IP_READY_IND","IP_READY_IND")
- socketReady=true
- updateState()
- end)
- sys.subscribe("IP_ERROR_IND", function()
- errDump.appendErr("[ledTask.IP_ERROR_IND socket error!!]"..os.time())
- log.info("ledTask.IP_ERROR_IND","socket error!!")
- socketReady=false
- updateState()
- end)
- --sys.subscribe("NET_UPD_NET_MODE", function() if lteSwitch then sys.publish("LTE_LED_UPDATE",net.getNetMode()==net.NetMode_LTE) end end)
|