ril控制¶
作者:朱天华 ## 常见问题 ### 1、脚本中如何新增core支持的AT命令处理逻辑? lib脚本中有一个ril.lua,是虚拟串口AT命令处理逻辑功能模块
此模块中有ril.request、ril.regUrc、ril.regRsp三个接口,参考https://luatdoc.papapoi.com/wiki/pages/574.html了解这三个接口说明
lib脚本中已经实现了常见的AT指令处理逻辑,下面以AT+CESQ为例说明ril的接口如何使用:
首先看下AT+CESQ命令的完整数据交互 AT+CESQ
+CESQ: 99,99,255,255,32,59
OK
再来看下脚本中是如何编码实现这条命令的发送和接收解析:
(1)设置AT命令应答的数据格式¶
ril.lua中:
local RILCMD = {
["+CESQ"] = 2,
此处定义了AT+CESQ命令的应答数据的格式,2表示:有前缀的单行字符串类型; 更多格式说明参考:
--AT命令的应答类型
--NORESULT:收到的应答数据当做urc通知处理,如果发送的AT命令不处理应答或者没有设置类型,默认为此类型
--NUMBERIC:纯数字类型;例如发送AT+CGSN命令,应答的内容为:862991527986589\r\nOK,此类型指的是862991527986589这一部分为纯数字类型
--SLINE:有前缀的单行字符串类型;例如发送AT+CSQ命令,应答的内容为:+CSQ: 23,99\r\nOK,此类型指的是+CSQ: 23,99这一部分为单行字符串类型
--MLINE:有前缀的多行字符串类型;例如发送AT+CMGR=5命令,应答的内容为:+CMGR: 0,,84\r\n0891683108200105F76409A001560889F800087120315123842342050003590404590D003A59\r\nOK,此类型指的是OK之前为多行字符串类型
--STRING:无前缀的字符串类型,例如发送AT+ATWMFT=99命令,应答的内容为:SUCC\r\nOK,此类型指的是SUCC
--SPECIAL:特殊类型,需要针对AT命令做特殊处理,例如CIPSEND、CIPCLOSE、CIFSR
local NORESULT, NUMBERIC, SLINE, MLINE, STRING, SPECIAL = 0, 1, 2, 3, 4, 10
目前仅支持直接在ril.lua中设置AT+CESQ命令的应答数据格式
(2)注册并实现AT命令应答数据的处理函数¶
net.lua
--[[
函数名:rsp
功能 :本功能模块内“通过虚拟串口发送到底层core软件的AT命令”的应答处理
参数 :
cmd:此应答对应的AT命令
success:AT命令执行结果,true或者false
response:AT命令的应答中的执行结果字符串
intermediate:AT命令的应答中的中间信息
返回值:无
]]
local function rsp(cmd, success, response, intermediate)
local prefix = string.match(cmd, "AT(%+%u+)")
if intermediate ~= nil then
if prefix == "+CESQ" then
local s = string.match(intermediate, "+CESQ: %d+,%d+,%d+,%d+,%d+,(%d+)")
if s ~= nil then
rsrp = tonumber(s)
end
end
end
end
ril.regRsp("+CESQ",rsp)