近期学习LuatOS,发现官方昆仑镜给出的源码main.lua例程有sys.waitUntil("IP_READY_IND")语句,Luat社区的这里例程也有,我很想知道这个消息到底从哪里发出来!
sys.subscribe("IP_READY_IND", function()
...
)
LuatOS-Air script lib内部消息 有对此的简单描述,如图
很明显,实在link.lua文件中。经查找,在 pdpCmdCnf()函数中发出了IP_READY_IND消息。
用实例验证一下
从官方demo文件夹下随便找一个main.lua文件,稍加修改如下:
main.lua
PROJECT = "KEYPAD_TEST"
VERSION = "0.0.0"
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
require "sys"
require "net"
net.startQueryAll(60000, 60000)
ril.request("AT+RNDISCALL=0,1")
require "netLed"
pmd.ldoset(2,pmd.LDO_VLCD)
netLed.setup(true,pio.P0_1,pio.P0_4)
--加载错误日志管理功能模块【强烈建议打开此功能】
--如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api
require "errDump"
errDump.request("udp://dev_msg1.openluat.com:12425", nil, true)
require "test"
--启动系统框架
sys.init(0, 0)
sys.run()
上面的代码没有导入link库,看 test.lua能否获取到IP_READY_IND消息。
test.lua的代码如下
test.lua
local function subCallBack()
log.info("IP_READY_IND", "IP获取成功")
end
sys.subscribe("IP_READY_IND",subCallBack)
local function ss( )
print("ss function test")
end
sys.timerLoopStart (ss,3000)
下载运行,在VScode 的调试控制台能发现 test.lua获取到了IP_READY_IND消息。那究竟是哪个库导入了link库?
采用最笨的 多次进行注释/取消注释办法,最终发现注释掉require "errDump"后就无法获取IP_READY_IND消息了。然后查看errDump.lua源码,发现并没有导入link库,而是导入了socket库
继续查看socket库,发现了link线索。
好了,到这里终于验证了是link发出的IP_READY_IND消息。如果你的程序想获取IP_READY_IND消息而不想使用errDump功能,必需require "link"。
回想整个的需找过程,下面2行代码中网址的信息,简单猜想下肯定涉及到网络与连接问题,想比引入了link库。
require "errDump"
errDump.request("udp://dev_msg1.openluat.com:12425", nil, true)
再回过头看LuatOS-Air script lib内部消息