基于嵌入式Linux的短信收发系统设计方案
werPC。MC35模块由GSM基带处理器、电源专用集成电路、射频电路和闪速存储器等部分组成,负责处理GSM蜂窝设备中的音频、数据信号,内嵌的软件部分执行应用接口和所有GSM协议栈的功能。MC35模块支持中文短信,支持GPRS功能,便于将来功能的扩展。
4.2 libcssl函数库
为了实现短信收发,需要在嵌入式Linux下通过串口发送一系列的AT指令。串行通信是计算机与其它设备通信的常用方法,在本系统中采用一个基于Linux的串行通信函数库libcssl,可实现串行接口的异步事件驱动并发。采用该方法,用户只要在服务器和数据源之间建立异步连接,编写数据处理函数,而对数据源事件的监测、数据读取、多事件的处理等操作是由操作系统内部完成的,因而,很大程度上简化了编程者的工作,同时保证了较高的资源利用率。
libcssl函数库提供给用户多种基于事件驱动方式的串行接口函数。其主要的函数有4类,分别进行串口初始化、收发数据、错误信息和结束串口操作。在使用某个串口之前,应调用初始化函数,为其设定相应的参数,使得收发双方遵循相同的通信协议和数据格式,同时通过初始化操作,为串口数据源和采集服务器之间建立异步连接,分配采集句柄。当数据源通过串口向嵌入式系统发送数据时,该数据会被送入数据缓冲区,并通过该数据源的采集句柄访问该串口的事件回调函数,在该函数中完成数据的处理。这样,当用户使用多个串口时,不需要用多个线程,只需为每个串口设置独立的回调函数,各回调函数之间可方便地实现数据交换共享。程序中可通过获取错误信息得知系统出现的错误状态,而采集程序结束,应关闭串口,释放系统资源。相关的函数如表2所示。
4.3 软件设计
使用了异步事件驱动函数库,程序设计简单而容易实现,程序主要由2部分组成,即主程序设计和回调函数程序设计,主程序只需做初始化和发送短信,其余功能都放在回调函数中完成。
在主程序中,各变量赋初值,调用cssl_open函数打开串口,设定的参数为采用串口1,即嵌入式Linux的ttyS0设备,波特率9600bps,8位数据位,1位停止位,无奇偶校验,无数据流控制,定义串口接收数据缓冲区有数据输入时,回调函数为callback函数,该函数对数据缓冲区中的数据进行分析处理。通过发送AT+CMGF=0指令定义短信模式为PDU模式,并判断是否有短信需要发送。对待发送的短信按照PDU发送字符串格式进行编码。
回调函数中首先读取输入缓冲区内容,根据对标志和缓冲区内容的判断,可以得知回调事件是由哪个事件引起,分别加以处理,由于每次向GSM模块发送AT指令后,模块会发送OK或ERROR等响应表示操作成功或失败,所以在回调函数中一个很重要的功能就是判断AT指令是否发送成功,为了区分不同AT指令的响应,程序中采用状态标志,表征系统发送AT指令的类型。在收到新短信后,需要提取短信发送方电话号码、短信发送时间和短信内容等相关信息,并加以存储,提取的依据就是短信接收PDU字符串的编码格式。为了避免由于短信满而无法接收新短信,需要将处理过的短信删除。相关的流程图如图2和图3所示。
图2 主程序流程图
图3 回调函数程序流程图
5. 结论
本文的创新之处在于提供了嵌入式Linux下GSM模块的短信收发系统设计方法,程序设计中利用串行接口驱动函数库libcssl,以串口I/O事件驱动设备的数据采集。短信收发采用PDU模式,能够处理中文、英文和中英文短信。异步事件驱动的架构可以提高系统并发处理性能,程序能够执行多个异步操作而不调用阻塞线程,降低系统开销。嵌入式系统加GSM模块的系统组成体积小巧,非常适合于偏远地区或移动的数据采集系统。根据系统的需要,还可以充分利用MC35模块的GPRS功能,实现高速的数据采集。
- LonWorks现场总线设备驱动设计与实现(08-21)
- 嵌入式向产业上游迈进(01-06)
- 基于ARM的嵌入式网络收音机的设计(01-15)
- 基于多媒体处理器VG2的智能家居控制器设计(02-21)
- 诺基亚将在更多产品采用Linux操作系统(04-21)
- 手机的操作系统(05-12)