求助,如下图,信号已经正常了,但是net.getState()得到的值,还是init,这个什么原因?


attachments-2018-08-AdMlZDZg5b880359c1faa.png

请先 登录 后评论

1 个回答

技术销售Delectate
擅长:IT


--- 获取GSM网络注册状态
-- @return string state,GSM网络注册状态,
-- "INIT"表示正在初始化
-- "REGISTERED"表示已注册
-- "UNREGISTER"表示未注册
-- @usage net.getState()
function getState()
    return state
end

那么state这个变量哪来的呢?继续看代码:


--GSM网络状态:
--INIT:开机初始化中的状态
--REGISTERED:注册上GSM网络
--UNREGISTER:未注册上GSM网络
local state = "INIT"

可以看出,初始化的时候state就是INIT;那么是谁让state改变了值呢?继续看代码:


-- 处理SIM卡状态消息,SIM卡工作不正常时更新网络状态为未注册
sys.subscribe("SIM_IND", function(para)
    log.info("SIM.subscribe", simerrsta, para)
    if simerrsta ~= (para ~= "RDY") then
        simerrsta = (para ~= "RDY")
    end
    --sim卡工作不正常
    if para ~= "RDY" then
        --更新GSM网络状态
        state = "UNREGISTER"
        --产生内部消息NET_STATE_CHANGED,表示网络状态发生变化
        publish("NET_STATE_UNREGISTER")
    else
        state = "INIT"
    end
end)

&&

--[[
函数名:creg
功能  :解析CREG信息
参数  :data:CREG信息字符串,例如+CREG: 2、+CREG: 1,"18be","93e1"、+CREG: 5,"18a7","cb51"
返回值:无
]]    --已注册
    if p1 == "1" or p1 == "5" then
        s = "REGISTERED"
    --未注册
    else
        --[[
        if p1 == "3" then
            creg3 = true
            checkCRSM()
        end
        ]]
        s = "UNREGISTER"
    end
    --注册状态发生了改变
    if s ~= state then
        --临近小区查询处理
        if s == "REGISTERED" then
            --产生一个内部消息NET_STATE_CHANGED,表示GSM网络注册状态发生变化
            publish("NET_STATE_REGISTERED")
            cengQueryPoll(60 * 1000)
        else
            cengQueryPoll()
        end
        state = s


通过阅读代码,可以了解,即使有小区信息,如果SIM卡状态不正常,也是不会变为 REGISTERED 的。通常情况下,上电后需要等几十秒,SIM卡的状态和网络状态才会正常。net.getState()的返回值也正确;

但是有一种情况例外:没有检测到卡,或者卡错误(不识别,电信卡等等),也会有小区信息,也会有信号,但是net.getState()不会改变。

所以应该配合 sim.getStatus() 一起判断。





请先 登录 后评论
  • 0 关注
  • 0 收藏,2203 浏览
  • jkhu 提出于 2018-08-30 22:47

相似问题