1. 导言
全球移动通讯体系GSM是我国规模最广、通讯才能最强的移动通讯事务,而其间的短消息功用因为其运用方便、价格低廉、可靠性高而得到广泛运用。嵌入式Linux也是现在得到广泛运用的技能,功用强大和资源丰富是其最大的优势。本文在嵌入式Linux体系中运用GSM模块完结短信的收发,对不方便架起通讯线的偏远地区,供给了数据收集的新手法。一起嵌入式体系体积细巧,Linux操作体系资源敞开,所以本体系经过二次开发,可方便地构成移动数据收集体系,用于长途数据收集、监控。
2. 短信收发原理
短信服务事务SMS(Short Message Service)是GSM体系供给给用户的一种数字事务。它与话音传输及传真相同同为GSM数字蜂窝移动通讯网络供给的首要电信事务。触及SMS办理的协议如图1所示。
图1 SMS办理的协议
图中SME为短信实体, SMSC为短信服务中心,SMCGWMS为SMS网关,HLR是归属方位寄存器,用于永久贮存办理用户和服务记载的数据库,MSC为移动交流中心,VLR为拜访方位寄存器,含有用户暂时信息的数据库,交流中心服务拜访用户时需求这些信息。
短消息模块的接入办法支撑两种形式:依据AT指令的TEXT形式和依据AT指令的PDU形式,它指的是短信息数据的编码格局,文本形式只支撑7-bit编码,只能发送纯英文和数字信息,而PDU形式支撑7-bit编码、8-bit编码和UCS-2编码,其间后者可进行Unicode编码,如中文,所以本体系选用PDU形式。
GSM模块选用规范AT指令集通讯,其间本体系用到的AT指令如表1所示。
3. GSM短信数据格局剖析
3.1 发送短信PDU字符串
因为短信形式挑选的是PDU格局,因此对PDU的编码和转码就变得很重要。中文短信息的完结需求将GB2312的中文编码转换为代码页为CP936的Unicode编码,PDU发送字符串数据格局中首要由短信中心地址、文件头字节、信息类型、意图地址、协议标识、数据编码方案、有效期、用户数据长度和用户数据组成。例如:设置PDU格局的编码为08 91 68 31 08 20 01 05 F0 11 00 0D 91 68 31 21 43 65 87 F9 00 08 00 04 4F 60 59 7DH,这组代码的意义如下所示:
08H:短信服务中心地址信息的长度,共8个八位字节(包含91) ;
91H:短信服务中心地址格局,用世界格局号码,在前面加‘+’ ;
68 31 08 20 01 05 F0H:短信服务中心地址,8613800210500,补‘F’凑成偶数个;
11H:基本参数,协议数据单元类型,表明发送,TP-VP用相对格局;
00H :信息参阅,00H表明参阅自身号码;
0DH :对方手机号数字个数,共13个十进制数 ;
91H :对方手机号,用世界格局号码,在前面加‘+’ ;
68 31 21 43 65 87 F9H:对方手机号(TP-DA),8613123456789,补‘F’凑成偶数个;
00H:协议标识(TP-PID), 是一般GSM类型,点到点办法;
08H:用户信息编码办法(TP-DCS),首要用其1个字节的第2和第3位表明编码办法,08H表明为UCS-2编码,最多发140个字符;04H为8-bit编码,最多发140个字符;00H为7-bit编码,最多发160个字符;
00H:有效期(TP-VP),5分钟;
04H:短信长度(TP-UDL),实践长度4个字节;
4F 60 59 7DH:用户信息(TP-UD),“你好”的Unicode编码 。
3.2 短信接纳PDU字符串
接纳方PDU字符串的意义和发送方不同,相同以“你好”为例,接纳方的PDU字符串为:08 91 68 31 08 20 01 05 F0 24 0D 91 68 31 67 24 47 63 F0 00 08 70 50 91 31 21 25 23 04 4F 60 59 7DH,其意义如下:
08 91 68 31 08 20 01 05 F0H:短信服务中心,剖析同发送相同;
24H:协议数据单元类型基本参数(TP-MTI/VFP) ,发送,TP-VP用相对格局;
0DH:对方手机号数字个数;
91H:对方手机号(TON/NPI),用世界格局号码(在前面加‘+’);
68 31 67 24 47 63 F0H :对方手机号(TP-DA),8613764274360,补‘F’凑成偶数个;
00H:协议标识(TP-PID) ,是一般GSM类型,点到点办法;
08H:用户信息编码办法(TP-DCS) ,剖析同发送方;
70 50 91 31 21 25H:短信息发送时刻(SCTS),07年05月19日13时12分52秒;
23H:发送时刻对应的时区;
04H:短信长度(TP-UDL),实践长度4个字节;
4F 60 59 7DH:用户信息(TP-UD) ,“你好”的Unicode编码。
4. 体系组成
4.1 硬件组成
体系由嵌入式Linux体系和西门子MC35模块经过串行接口三线制衔接而构成, MC35模块经过串口1与嵌入式体系相连,嵌入式体系配置包含50MHz 主频的MPC860 32位处理器,16M SDRAM内存,2个RS232,操作体系选用嵌入式Linux for PowerPC。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功用,完结高速的数据收集。