LUAAPP编程框架

  • 格式:pdf
  • 大小:123.31 KB
  • 文档页数:3

LuaApp编程框架1.0
1.程序整体架构
Lua程序代替单片机角色,通过AT指令与单片机交互,并且具备GPIO控制,GPIO 输入中断,定时器,消息队列,按键,点阵LCD显示,中文字库,I2C,电源管理,ADC,UART等应用。

同时,为了方便编程,还增加了bit操作,协议编程所需的PACK操作库。

Lua程序只能支持单线程,通过消息阻塞和while循环实现任务的轮询执行,中断的处理也放在消息队列里面执行。

比较完善的例子参见LuaApp\Trunk\5303\5303.lua,这个脚本对应的需求文档为同目录下的目前需要实现的功能总结-0613.doc和智能校园卡终端接口规范v1.03b.doc。

除此之外,程序的运行都通过三个有限状态机来调度。

在5303.lua中,这三个状态机分别为:a[“reg”],a[“gprs”],a[“term”]。

通过不同的状态和事件的切换,来实现不同的业务逻辑。

2.状态机详解
三个状态机具体负责的职责分别为:
网络交户状态机
a[“reg”]:负责记录终端跟网络交互的状态,有如下几个状态:
INIT:上电后初始状态为INIT
IDLE:注册网络成功后为IDLE,目前的程序是通过AT+CREG的返回来判断是否注册成功,如果注册成功就把状态置为IDLE,IDLE状态才可以进行发短信,打电话等业务。

SMS_PREPARE:发送了AT+CMGF等待返回>
SMGS_SENDING:发送了短信PDU,等待返回CMGS OK的提示。

REC_CALL:收到来电,等待接通或者拒绝;
DIALING:呼叫中,等待接通或者被拒绝;
TALKING:电话接通,通话中。

BEGINSEND:进入准备发送数据状态,等待发送AT+CIPSEND;
SENDING:发送了AT+CIPSEND,等待返回>;
SENT:发送了数据包,等待返回SEND OK
所有的业务进行完之后,都要回到IDLE状态。

GPRS状态机
A[“gprs”]:负责记录gprs连接的状态,具体如下:
INIT:上电后初始状态为INIT,休眠后的状态的也是INIT;
CIPHEAD:发送了AT+CIPHEAD指令,等待返回oK
CIPSHUT:发送了AT+CPSHUT,等待释放链路;
IPSTART:发送了AT+CSTT,等待建立APN实例;
CIICR:发送了AT+CIICR,等待PDP上下文激活;
CIFSR:发送了AT+CIFSR,等待获取本地IP地址和端口;
CONNECTING:获取了本地的ip和端口,发送AT+CIPSTART,等待socket建立;
CONNECTED:收到了CONNECT OK,socket建立成功。

所有的gprs数传,都必须是c[“gprs”]为CONNECTED状态方可进行。

终端业务状态机
a[“term”]终端业务状态机,记录上层业务的逻辑状态。

针对不同的应用,网络交互和gprs状态机一般不需要修改,主要修改终端业务状态机即可。

针对5303项目的需求,终端业务状态机的状态如下:
(1)初始化期间的状态:
INIT,上电初始化状态;
SIMOK收到ATC的”CPIN READY”提示就转换为SIMOK;
SMSOK:收到ATC的SMS READY就转换为SMSOK
IDLE:取到IMEI和IMSI就转换为IDLE,
LOGING:如果网络交互状态机和终端业务状态机都是IDLE状态,就发送登陆请求消息包,等待登陆响应,此时状态转换为LOGING;
LOGIN:收到登陆响应后,转换为LOGIN状态。

只有到了LOGIN状态,才可以继续其他的业务逻辑。

休眠后,终端业务状态机状态变为idle,
(2)DW短信收到之后的流程
DW短信收到后,
如果gprs不是“CONNECTED”状态,切换为DWLOGIN,重新进行登陆。

如果当前状态不是LOGIN,流程终止;
如果状态是LOGIN,状态切换为WAIT_CHNREQ;
如果状态是WAIT_CHNREQ,发送chnreq消息包,等待chnrsp消息,切换为WAIT_CHNRSP;
收到chnrsp消息后,发送短信,短信发送成功后,切换为LOGIN状态。

(3)SOS按下之后的流程
sos按下后,
如果gprs非连接状态,切换为DWLOGIN
如果状态不是LOGIN,切换为SMSLOGIN
如果当前状态是LOGIN,切换为SOSREQ状态;
如果当前状态是SOSREQ,发送sosrpt消息,等待sosrpt响应,切换为SOS_CHNREQ状态;
收到sosrpt响应后,发送chnreq消息,等待chnrsp,并切换为SOS_CHNRSP状态;
收到chnrsp后,发送短信,发送短信成功后,切换为SOSCALL状态;
如果当前状态为SOSCALL,依次呼叫电话号码列表,呼叫出去后,切换为SOSDIALING,如果呼通或者按下挂机键,切换为LOGIN
(4)点名业务状态
收到点名消息,切换为WAIT_RPT,发送locrpt后,无需等待响应,依次呼叫电话,呼叫完成或者接通后,切换为LOGIN
3.基本业务的实现函数
5303.lua实现了一些基本业务的函数,目前还没有逐个的解释,后续逐步补充。

4.参考资料
LuaApp\trunk\doc\
Lua程序设计:Lua的基本语法教程;
Lua中文手册:Lua手册,其实是英文手册;
Lua扩展库:我们的AirM2M基于Lua做的扩展接口。

LuaApp\tags\demo
针对扩展库的一些示例脚本。