ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Luat模块应用手册-示例-Luat 示例-ril(虚拟AT)

2021-06-28 18:33:24  阅读:301  来源: 互联网

标签:end Luat 示例 -- require flag ril str recv


如何用开发板实现 低功耗长连接 功能

目录名称

简介

VAT 是LUAT 二次开发过程中常用的功能,本文介绍如何用Air724开发板,和PC端搭建一个VAT的测试示例。

材料准备

  1. EVB_Air724UG_A13开发板一套,包括天线SIM卡,USB线。
  2. PC电脑,以及官方TCP测试web页面:http://tcplab.openluat.com/
  3. luat开发环境:环境搭建方法
    图片.png

步骤

实现代码

--- 模块功能:MYVAT
-- @author JWL
-- @license MIT
-- @copyright HEZHOU
-- @release 2020.04.02

require"ril"
require "utils"
require "sys"
require "pm"
require "net"
require "record"
require "audio"
require "rtos"
require "misc"
require "common"

module(..., package.seeall)

--开机就关掉RNDIS 否则物联网卡流量会被网卡给消耗掉。
ril.request("AT+RNDISCALL=0,1")

--VAT是否打开 "1" 开 ,"0" 关
local flag_enatc = "1" 
-- 串口ID,串口读缓冲区
local  recvQueue =  {}
-- 串口超时,串口准备好后发布的消息
local uartimeout, recvReady,RECV_MAXCNT = 100, "UART_RECV_ID",1024

--向PC 写入数据,目的是将AT指令的返回数据呈现给电脑一方
local function usb_write(data)
    uart.write(uart.USB, data) 
end

--配置USB 的虚拟串口
uart.setup(uart.USB, 0, 0, uart.PAR_NONE, uart.STOP_1)
uart.on(uart.USB, "receive", function()
    table.insert(recvQueue, uart.read(uart.USB, RECV_MAXCNT))
    sys.timerStart(sys.publish, uartimeout, recvReady)
end)

--处理PC 发过来的AT 指令
function app_procmd(str_recv)
    log.info("str_recv------------",str_recv)

    local flag_handled=true    --用来判断AT指令是否已经被应用层处理,如果已经被处理的就不需要发到底层去了。
    local str_rsp =""          --临时存放应用层已经处理的AT指令返回字符串

    local prefix = string.match(str_recv, "[aA][tT](%+%u+)")
    if prefix ~=nil then
        
        if prefix == "+RIL?" then     --读取VAT标志开关标志
            str_rsp = "+RIL:"..flag_enatc
        elseif prefix == "+RIL" then  --设置VAT 开或者关     
            local temp_enatc = string.match( str_recv, "+RIL=(%d+)")
            if temp_enatc ~= nil then
                flag_enatc = temp_enatc
            end
            if flag_enatc == "0" then  ril.setrilcb(nil) end
            str_rsp = "+RIL:"..flag_enatc
        else
            flag_handled=false
        end
    else
        if  string.upper(str_recv) =="AT\r\n" then
            str_rsp ="OK\r\n"
        else
            flag_handled=false
        end
    end

    if str_rsp ~="" then
        usb_write(str_rsp)
    end

    if (not flag_handled) and (flag_enatc == "1") then
        log.info("send at cmd ==>" ,str_recv)
         ril.setrilcb(usb_write)
         ril.request(str_recv)
    end
end

--将从VAT 串口收到的内容进行拼接
sys.subscribe(recvReady, function()
    local str_recv = table.concat(recvQueue)
    recvQueue = {}
    app_procmd(str_recv)
end)


常见问题

1,VAT 的指令和标准AT 指令,大部分都相同,由于标准AT 指令里面的CIP 开头的网络通信指令在LUAT 中通过 socket 接口实现,所以LUAT 不支持CIP 的AT 指令。
2,PC 端输入的AT 指令需要大写,比如 AT+CSQ 不要携程 At+CsQ

相关资料以及购买链接

测试源码

myvat.lua

标签:end,Luat,示例,--,require,flag,ril,str,recv
来源: https://blog.csdn.net/zhouweihuaxf/article/details/118309409

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有