基于uBASE-Ⅲ系统的短信通信程序开发
短信通信是这样定义的:uBASE-III提供了一套短消息编程接口"SMS_API",它是通过向连接在主机串行端口上的GSMModem(或笼统地称为"移动设备(ME)")发出AT命令来完成短消息的发送、接收,以及对移动设备的其他相关操作的。该编程接口内部使用PDU(Protocol DescriptionUnit)格式与ME交换短消息的内容,也就是说,在AT命令的接口层来看,短消息是使用PDU报文来表示的,PDU报文是由许多字段组成的,不同的字段描述了短消息的不同属性。该编程接口使用SSmInfo结构体来描述PDU的各个字段,用户通过设定SSmInfo的不同成员来指定所要发送短消息的各种"属性",同样,用户也是通过SSmInfo的各个成员来获取编程接口所读取到的短消息的详细信息的[3]。SMS_API提供了如下几大类操作:◆GSMOpen():打开GSM设备;◆InitSms():根据相应参数初始化设备;◆SendOrWriteSm_1Sm():发送短信,支持中文和英文。 这些接口函数是在该系统上编写应用程序的基础,尤其是该系统中,GSM短信模块和文件相关操作是主要内容。 3系统软件开发 可以将主程序中的短信分为两部分,前台为操作员提供短信编辑命令,发送短信主要函数如下:intSendSms(char*strPhoneAddr,unsignedchar*pMessage,int msgBytes){SSmInfosmi={0},*pSmi=&smi;strcpy((char*)smi.Addr_MS,(char*)strPhoneAddr);inti,errcode;for(i=0;i<5;i++){//这里需要端口号、发送方式、SSmInfo对象、短信内容、//有效字节数和编码方式errcode=SendOrWriteSm_1Sm(g_ComPort,CMD_CMGS,pSmi,(Uint8*)pMessage,msgBytes,BITS_DCS_DEF_ALPHABET);if(errcode==0){return0;}return1;}图3短信通信系统主程序流程后台用于接收短信,进行处理后通常会对文件继续操作。这部分的难点在于如何设置短信通知格式,如何在后台运行处理短信和写回文件部分程序,并且要对前台的用户作出提示。因此这里用到了uBASE-III提供的多线程技术,让处理短信的主要函数工作在后台线程,有短信到来自动会处理"_thread_checkUnreadSm()"函数,列出"未读短信",转到处理部分。这样就避免了在主程序中对"未读短信"的轮询,避免了处理器处于一种资源浪费且效率并不高的模式。函数代码如下:staticint_thread_checkUnreadSm(void*param){RE_CODEerrcode=0;errcode=ListSm(g_ComPort,MSGSTAT_RECUNREAD,s_SmNotify,NULL,NULL,NULL);returnerrcode;}其中"ListSm()"函数是短信模块提供的API,供程序员直接调用,可以列出各种格式的短信,具体方式和其他函数可以参考相关文档。 3.2文件操作示例 拿"通信命令帧核销数据"举例,它里面包括了流水号、设备号、操作码、帧顺序号、核销状态和命令帧,后面的操作要依赖于其中的所有项,因此采用了定义结构体的方式,将上面的基本项封装起来,以结构体为基本单位去实现文件的操作。文件采用TXT格式,便于创建和导出。文件操作代码如下:intDeleteFrameVerifyInfo(intindex){UEnterMutex(g_mtxFrameVerifyOP,TIMEOUT_INFINITE);……//相关处理函数ULeaveMutex(g_mtxFrameVerifyOP);return0;}其中有一点要注意,多线程持有同一文件句柄进行读写操作是允许的,文件系统内部代码会将不同线程的读写操作串行化。因此,在对文件进行读写操作时,要注意互斥问题。 结语
3.1短信通信程序开发示例
图3为短信通信系统主程序流程,系统在登录后就处于收发短信的状态中。
在操作员对表具进行测试的时候,需要先上传"操作员数据"(用于存放操作员的用户名和密码)、"移动设备参数",同时在程序运行过程中还会产生"通信命令帧核销数据"等文件,如何合理组织这些文件的结构和访问方式是本系统中又一重点内容,因为这些文件中的某些项是互相有关联的,并不完全独立。因此最核心的问题就是如何定义文件的结构,结构确定了,程序的操作方式也就确定了。
嵌入式操作系统在如今很多工业领域都有广泛的应用,它的优势往往在于内核可裁剪,体积小,应用在嵌入式设备上功耗低。本文就从移动手持设备通信引申,以uBASE-III系统和NLS-PT850设备为实例,着重从短信通信方式和文件操作两个方面来讲解短信通信的嵌入式软件开发的流程和方法。该示例程序在目标设备上可稳定运行,通信状况良好,可以作为移动手持设备短信通信的一个解决方案。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)