当前位置:文档之家› 基于Android的手机通讯协议应用研究与实现

基于Android的手机通讯协议应用研究与实现

本文由gidi521贡献

pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。

兰州大学硕士学位论文基于Android的手机通讯协议应用研究与实现姓名:黄星文申请学位级别:硕士专业:计算机软件与理论指导教师:周庆国 20100501 兰州人学硕士学位论文

摘要

Android平台是当前智能手机领域的研究热点。本论文以Android平台为研究基础,讨论如何在实际硬件中实现Android的通讯功能,包括通话、短信息服务、GPRS数据业务等。通讯功能的实现与手机通讯协议以及各种通讯标准密切相关。文章就是对运用在手机终端上的各种手机通讯协议进行应用研究,并结合Android的通讯应用程序框架,应用这些协议或标准,实现手机的通讯功能。在实验环境中,只有一个串口资源作为通讯设备部件基带与手机操作系统进行对话的通道。基于Android通讯架构的特点,GPRS数据业务在此硬件环境中不能获取硬件资源,造成资源冲突问题。文章通过应用多路复用协议,虚拟出多个数据链路通道,来解决硬件资源冲突的问题,并以此为基础,构建了一个新的多路复用无线接口层。多路复用无线接口层的职责在于完成应用程序与硬件之间的通讯。它实际上就是一个硬件抽象层。而在通讯功能的实现中,文章结合基带的特点,根据AT命令集,短信息服务规范,点对点协议等标准和协议,修改Android的通讯应用程序架构,完善多路复用无线接口层,从而完成基带与系统的通讯。经系统验证,运用文章中的方案构建出来的手机能够正常运行,能够拨打电话,接听电话,发送短信,接收短信以及处理GPRS数据业务等。

关键字:Android,手机,通讯协议,无线接口层,多路复用,通讯功能

兰州火学硕士学位论文

ABSTRACT

Currently,Androidplatformisthehotpointinthefieldofsmartphone.BasedAndroidon

platform,thisthesis

discussestheimplementationof

Androidcommunication

functionswithrealhardware,includingdialing,shortmessageservice,GPRSdataservices,etc.Theimplementationofcommunicationfunctionsiscloselyrelatedwithmobilephone

communicationprotocolsand

various

communication

standards.Inthis

thesis,communicationprotocols,used

willimplementthe

inmobile

terminal,will

bcresearched.Andit

or

communicationfunctions,by

usingtheprotocols

standards

and

takingtheadvantageof

Androidtelephonyapplicationframework.asa

Intheexperimentalenvironment,onlyoneserialportisused

channelforthecommunicationbetweenbasebandprocessor

communication

mobilephone

and

operatingsystem.ForthefeatureofAndroidtelephonyframework,GPRSdata

serviceswould

notgetthehardwareresourcetowork.Soitwouldcauseresources

conflict.To

solvethatproblem,ittakestheadvantageofmultiplexingprotocol

and

producessomevirtualdatalink

channels.And

newmultiplexingradiointerface

layerisconstructedusingthosevirtualdatalink

channels.The

multiplexingradio

interfacelayeristocompletethecommunicationbetweenhardwareandItisactuallya

applications.and

hardwareabstractionlayer.Intheimplementation,manyprotocols

as

standardswillbeused,such

ATcommandset,shortmessageservicespecification,

andpointtopointprotoc01.Accordingtotheabovebaseband

protocolsand

thefeatureoftheapplication

processor,the

implementation

will

modify

thetelephony

framework,andimprovethemultiplexingradiointerfacelayer'SOastocompletethecommunicationbetweenthebaseband

processor

and

the

system.The

system

validationshowsthatthephone,madebythewayinthisthesis,workscorrectly,andcan

makecalls,receivecalls,sendSMS,receiveSMSandhandleGPRSdataservices.Keywords:Android,MobilePhone,CommunicationProtocols,RadioInterface

Layer,Multiplexing,Communication

Function

兰州人学硕士学位论文

原创性声明

本人郑重声明:本人所呈交的学位论文,是在导师的指导下独立

进行研究所取得的成果。学位论文中凡引用他人已经发表或未发表的成果、数据、观点等,均已明确注明出处。除文中已经注明

引用的内容外,不包含任何其他个人或集体己经发表或撰写过的科研成果。对本文的研究成果做出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律责任由本人承担。

论文作者签名:彩之

期:

缈.歹.纱

兰州人学硕士学位论文

关于学位论文使用授权的声明

本人在导师指导下所完成的论文及相关的职务作品,知识产权归属兰州大学。本人完全了解兰州大学有关保存、使用学位论文的规定,同意学校保存或向国家有关部门或机构送交论文的纸质版和电子版,允许论文被查阅和借阅;本人授权兰州大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存和汇编本学位论文。本人离校后发表、使用学位论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为兰州大学。保密论文在解密后应遵守此规定。

论文作者签名:篚蔓聊签名:嗍日期:丝竺

兰州入学硕士学位论文

第1章绪论

1.1研究背景

纵观手机的发展历史,智能手机必将成为手机市场的主导,引领潮流。在国内曾经出现了GSM数字通讯网络与模拟网共存的阶段。随后由于模拟手机天生的局限性,以及其明显的使用缺点,它越来越不受欢迎。而且,数字移动电话的出现,为移动通讯领域带来了崭新的理念和更友好的功能。通过对比,生产厂商看到了行业的发展方向,用户趋于性能更好、功能更多的产品。这样导致模拟手机停产而用户选择数字移动电话的趋势。最终,模拟网和模拟手机退出了历史的舞台。新的技术成为市场的导向。数字移动电话发展到今天,不管是手机功能,还是手机外观,都得到广泛的关注和重视。除了手机的通话,短信息服务功能外,普通手机还支持GPRS上网业务,FM调频广播,彩信,以及一些Java程序。这些都可以满足人们日常生活的基本需求。而智能手机[1]与普通手机的区别在于,智能手机拥有自己的开放式操作系统,允许任何人根据操作系统属性来开发应用程序,随意装卸应用程序;具备友好易用的人机交互界面,丰富的通讯功能、完善的个人信息管理、特色的多媒体服务、电子邮件、电子书阅读、网页浏览、扩展USB、GPS等先进功能。另外,在运行Java程序方面,智能手机比普通手机效率更高,操控性更好。随着技术的改进与创新,智能手机的生产成本逐渐下降,其低端产品凭借合适的价格,更出众的功能,逐步挤压普通手机在市场中的生存空间;其高端产品会慢慢渗透到笔记本领域中。普通手机将步模拟手机的后尘,将逐渐退出中国市场,智能手机成为市场主导。目前,在智能手机上运行的操作系统主要有:微软的Windows

WindowsMobile、

CE,诺基亚的SymbianOS,RIM的黑莓,苹果的iPhone以及Google

的Android。市场研究公司Canalys2010年2月8日发表的研究报告,描述了在全球范围内各种智能手机操作系统所占有的市场份额[2]。2009年SymbianOS拥有市场份额的47.2%,黑莓占了20.8个百分点,Apple占有15.1%,微软拥有8.8%,

兰州大学硕十学位论文

Android拥有4.7%。相比来说,2008年Android占全球市场份额很少,只有0.5%。数据显示,短短的一年间,Android的市场占有率就增长了4.2个百分点。由此可见,Android在最近几年内的发展势头将会很火爆,更多的手机厂家会加入Android的开发中。Android[3][4]是一款智能手机操作系统,同时,它也是基于Linux内核变种的软件平台[5]。Android现在是由Google公司牵头的开放手机联盟(Open

Handset

Alliance)[6]来开发和维护的。Android的官方版本就是以开放手机联盟的名义发布的。与市场中的其他智能手机操作系统比较,Android的核心竞争力在于它公开了源代码,而且允许第三方软件自由加入。任何手机开发商都可以下载到Android平台的源代码以及支持Android系统的Linux内核变种,然后根据手机设计方案的具体配置,修改驱动,修改与硬件紧密关联的代码,就可以生产出原始版本的产品。由于Android公开源代码,并允许自由修改,开发商可以定制自己的功能,增强产品的竞争力。另一方面,Android提供了一套免费的软件开发工具(Soft

ware

development

kit),而且与Android的源代码同步更新。任何

第三方开发者都可以随时随地下载该软件开发工具,利用该工具开发出具有个性化的第三方软件,例如手机游戏,即时通讯软件,股票等满足手机用户需求,丰富用户体验的软件。对于手机用户,功能强大、时尚的基于Android平台的智能手机以及丰富的第三方软件支持,都很有吸引力。无论是手机开发商,第三方软件开发者还是普通手机用户,都可以从Android的开发性获得好处。Android的前景很美好。2009年lO月,市场研究公司Gartner[7]预测,到2012年,Android将会成为全球智能手机平台中的二号人物。智能手机的核心在于操作系统。在Android问世之前,市面上智能手机的操作系统,诸如微软的Windows

Mobile,Windows

CE,苹果的iPhone,诺基亚的

Symbian等都是有专利的。国内的手机开发商开发智能手机时,需要交付版权费以及培训费用。可以说,智能手机的核心技术一直掌握在外国大厂商上,国内仅仅处于从属地位。基于上述情况,Android无疑是国产手机在智能手机领域内的一个重要的突6

兰州大学硕士学位论文

破口。Android的开放性将推动智能手机在中国的快速发展。通过对Android源代码的分析和研究,在智能手机领域将会涌现一批又一批的高素质人才。而且,知识的积累,有助于创新。为此文章选择Android智能手机操作系统作为研究平台,很有意义。现阶段,国内有很多手机方案设计公司、手机生产厂商都在研究Android系统,争取尽早做出具有竞争力的产品。在我们的研究开题时,市面上还没有国内厂家生产的基于Android平台的手机出售。通讯功能作为手机的基本功能,必须是首要的实现目标。不能通话,不能发短信,不能上网的手机,完全不能满足手机用户的要求。基于整机的开发,是与硬件直接相关的。不同的设计方案,通讯功能实现的方式有差异。而通讯功能的实现,在于手机通讯协议的应用和实现。手机通讯协议在这里起到了关键的作用。

1.2研究内容

通话和短信是手机的两个基本功能。在手机业务高速发展的阶段,这两种通讯方式为手机积累了大量的用户,是手机市场茁壮成长的基石。然而,在社会高速发展的今天,人们的生活越来越多元化,需求也就越来越多,永无止境,仅仅是通话和短信两种功能是不能满足要求的。对于手机制造商来说,只有紧跟市场的脉搏,迎合用户的口味,增强手机功能,才能获得商机。因此,拍照手机,隐形手机,音乐手机,商务手机等应运而生。手机功能多样化、应用软件智能化,多媒体技术的应用,都需要高效率的处理器以及智能操作系统的支持。智能手机是现今手机发展的趋势。随着互联网技术的发展,人们的工作和生活越来越离不开网络。人们的通讯

方式也发生了巨大的改变——传统的书信被E-mail取代,利用即时聊天工具来联系业务,网上购物,电子支付,网上交友等等。因此,在通讯方面,仅仅具有通话和短信功能的手机不能满足需求,手机必须要接入互联网络。文章就是研究Android智能手机平台上通讯协议的应用,并实现相关功能,包括通话,短信息服务,以及手机接入互联网络。这罩涉及到的内容很多,包括数据是如何组织的,手机和手机之问是怎么通讯的,手机是如何实现上网的等等。文章中,我们不仅要解析通讯的过程,还要根据特定硬件的属性,构建Android

兰州大学硕七学位论文

智能手机平台,并实现相关通讯功能。

1.3文章结构

Android作为智能操作系统的新贵,其发展历史很短暂。从2007年11月首个官方版本发布到日前,仅有2年半左右的时间。但在这期间,Android迅猛发展,国内外众多公司都在研究和开发Android产品。而本文主要是对Android

系统的通讯功能进行研究,了解和运用相关的通讯协议,其中会涉及到一些概念。为了让读者更好的了解文章论述的内容,在第2章中,我将通过介绍目前市面上的一些Android产品以及它们的通讯功能,从而引出论文相关的概念和协议,并较粗略地描述协议的应用过程。Android的系统平台源代码,勾勒了一个手机原型的大体框架,以及提供了一些相关的应用程序。然而在通讯方面,Android的架构并不完善,要根据特定的硬件进行修改或者重建。这主要是因为Android开发的时候,就是以高通的芯片作为基准的。由HTC制造的,首款Android智能手机,T-mobileG1[8]就是采用高通的芯片。而Google发布的自主品牌NexusOne采用的中央处理器也同样是高通的芯片[9]。在第3章中,我将分析Android原有的通讯框架以及讨论可能存在的问题,并根据实验中用到的芯片设计出新的结构。在第4章中,我将以第3章设计的架构作为蓝图,一步一步地在实验平台中构建一个结合我们通讯架构的Android系统。另外,还要根据各种协议和规范,实现通话、短信息服务、手机连接互联网络的功能。同时,在第5章,我将对系统进行验证,包括系统启动后的运行情况,通话、短信息服务、GPRS上网通讯功能实现情况以及实现效果等。在第6章中,我们将会对文章做一个总结,并根据官方Android系统更新的特点,明确对当前的工作进行更新和维护的方向。而且,我们将根据智能手机发展的趋势以及当前出现的研究观点,简单阐述在手机通讯方面,Android未来可能的研究方向。

兰州大学硕七学位论文

第2章论文相关

2.1

Android平台介绍

在全球范围内,截止2009年底,Android手机开发平台至少被装备到18款手机中[10]。Google新研发出来的NexusOne手机比T-mobileG1手机强大很多。NexusOne装备了更快的ARM处理器,更清晰的摄像头,蓝牙和Wi—Fi[11]的功能有很大的改进,且具有GPS[12]功能。我们可以看到,Android智能手机的性能在不断的改进,更多的新技术,新功能会被不断地添加到Android平台中。但从两者的共性来看,他们都运行在GSM网络中,支持GPRS和EDGE[13],具有通话、短信息服务等基本通讯功能。总的来说,基本的功能在保留和改进,新的技术被应用。

2.1.1

Android平台的特征

Android系统是智能手机的平台,功能强大,其主要特征[3]如下:1.组件的重用和替代。在Android系统中组件的重用和替代是利用应用程序框架来实现。任何一个运行在Android系统中的应用程序,在遵循Android应用程序框架安全性限制的前提下,都可以发布它特有的功能模块,使得别的Android应用程序可以调用该功能模块。2.Android系统专有的Java虚拟机Dalvik[14]。D

alvik虚拟机是Android平台中的核心部件之一。它与通用的Java虚拟机有所不同。Dalvik虚拟机使用自己特有的字节码文件,以满足内存大小有限,处理器速度受限的手机终端设备的需求。为此,在Android中运行的应用程序,必须编译成Android的字节码文件,由Dalvik解释执行。3.集成的浏览器。

Android系统中的浏览器运用到了一款丌源的浏览器引擎一Webkit[15]。

Webkit的代码简洁,结构合理,有利于开发。另外Webkit浏览器引擎优点明显,

消耗很少的内存资源,运行效率高。Webkit已经普遍应用在手机的浏览器中。

兰州大学硕士学位论文

4.2D、3D图形库。Android系统中提供了2D和3D的图形库,开发者可以利用这些图形库开发各种图形效果。除了手机的造型外,手机的图形界面也是用户关注的重点。图形界面是体现手机个性化的一个载体。优美,华丽,宁静,平和,时尚,热情等不同元素可以满足不同的手机用户。5.利用SQLite数据库存储数据。SQLite[16][17]是一种关系型数据库管理系统,主要应用在嵌入式领域中。在实际的应用中,SQLite数据库提供了一个独立的程序sqlite来管理数据库中的文件,进行各种操作,例如查询,添加和删除等。SQLite数据库允许多个进程以读的方式并行地访问同一个数据。而对于写操作,只有当数据空闲的时候才能进行操作,否则就会出错。对于写错误,SQLite提供重试功能。在Android系统中,每个应用程序在运行的过程中都可以创建和访问SQLite数据库。其所需要的系统资源很少,而且运行效率高。在手机终端设备硬件能力较低的情况下,SQLite是优良的选择。6.支持多媒体技术。Android提供了多媒体相关的系统函数库,支持查看多种格式的静态图像文件,如JPG、GIF、PNG等;提供了应用程序接口,处理各种常用格式的音频和视频,如播放音视频,录制音视频,视频会议以及播放流媒体等。多媒体技术在Android系统中的应用,为Android平台提供更多丰富多彩的功能,吸引了用户眼球,满足用户越来越多的需求。7.无线电话技术。Android系统支持GSM[18]网络。无线电话技术中的GSM标准,是当前最成熟,应用最广泛的标准。世界上绝大多数的手机都是使用GSM网络。从用户的角度来说,GSM网络能提供较好的语音质量以及各种不同的通讯方式,例如短信息,从而满足用户的需求。从设备生产商来说,GSM标准是开放的,这有利于他们在自己的无线设备中实现相关功能,而且能和其他设备无缝连接。从运营商来说,利用GSM网络,可以节省成本。文章将在下文继续深入探讨GSM网络以及在GSM标准中的通讯协议。8.支持蓝牙、W卜Fi、摄像头、GPS等多种时尚应用。

10

兰州人学硕士学位论文

Android针对GPS、摄像头、Wi-Fi、蓝牙等多种手机功能提供了支持,但要实现这些功能,手机设计方案中必须要有相对的硬件模块。例如,硬件中要有摄像头,然后我们在实现中需要利用驱动程序来控制这个摄像头,并且利用Android提供的应用程序接口实现与上层应用程序的交互。

9.Google提供了充足简便的开发工具。

在开发Java应用时,Eclipse集成开发环境是最常用的。Android平台上的应用程序都是用Java来开发的。由于Android需要编译出自己的字节码文件,所以利用标准的Ecl,ipse开发的Java应用程序不能运行在Android系统中。为了解决这个问题,Android开发工具插件被开发出来,且被集成到Ecl

ipse环境中。每个新建的应用程序都是一个Android项目。另外,还可以通过Android虚拟设备以及调试工具来辅助开发应用程序。利用集成环境开发的Android应用程序,能够部署到Android手机开发平台上。

2.2手机通讯

2.2.1

GSM网络

从G1和NexusOne的功能中可以发现,两者都用到了GSM网络。也正是通过GSM网络,手机设备间才能进行通讯。GSM[19]是Global

SystemforMobile

Communications的简称,我们称他为全球移动通讯系统。利用全球移动通讯系统,用户使用一台手机就可以在全球范围内活动。只要有信号覆盖,用户就能随时随地与世界各地的人们进行通讯。这主要是因为GSM提供了一系列的开放标准和协议,并且能够被更好的部署在各种设备中。只要用户开通漫游服务,就能穿梭在全球的各个GSM子网中。GSM概要网络结构如图2.1所示。GSM系统分成三部分,分别为基站子系统,网络和交换子系统也称核心网,GPRS核心网。这三个部分具体涉及到的内容很多,很复杂,而且其设备都是由运营商投资建设的。为此我们只需要了解它们的作用,不妨把它们抽象成三朵云,或者说看成3个黑盒。

基站子系统中,每个基站都有特定的信号覆盖范围。用户活动时,会在不同

的基站中穿梭。而基站子系统的作用就是切换手机终端与基站间的连接,维持无

————』燮塑燮

线信号传输的连续性。另一方面,基站子系统分析数据内容后,把数据路由到下

图2.1GSM概要网络结构

一级目的地,如核心网、GPRS

心网、其他基站。核心网和GPRs核心网是为了

对数据进行路由建立起来的。核心网管理移动电话和固定电话网络的通讯;GPRs核心网管理移动电话和互联网络的通讯。

2.2.2通讯协议

通讯时,数据从手机终端传输到基站,最后到达目标设备,其过程是由GsM标准中的一系列通讯协议所控制的。这些协议规定了数据的组织方式,包括数据

内容的格式,封装字段的长度,字段中每一个数据位所代表的含义等等。随着数

据的流动,这些通讯协议层层叠加,形成了庞大而复杂的堆栈结构,我们称之为

通讯协议栈[20]。通讯协议栈遍布整个GsM网络,它好比交通规则,指引着数据在网络中传递。而文章的着重点在于智能操作系统平台上的通讯协议的应用。为此,我们侧重研究手机终端a

在手机终端方面,通讯协议栈、数字信号和语音信号的处理都是由智能手机的基带来实现。手机上的应用程序按照相关的协议和规范,处理用户提供的数据,然后把满足要求的数据发送给基带。基带获取数据后,分析数据,并按照相关的

协议栈处理数据,最后发送给基站。下文将描述与上层应用相关的协议’以及探讨这牲协议在实现相关功能时的应用过程。

12

兰州大学硕士学位论文

2.2.3

AT命令规范

AT命令集[21]是通讯协议实现的一种形式,每条命令都由“AT"开头。在

实际的通讯中,应用程序和基带的对话,就是通过AT命令来完成的。例如,拨

打电话的时候,应用程序用AT命令来控制基带建立通话链路。当有来电时,基带会用AT命令主动通知应用程序。3GPP(第三代合作伙伴计划标准化机构)公布了用于控制GSM手机的AT命令标准文档3GPP

TS

27.007[223。然而在实际

的应用中,由于基带提供商的不同,AT命令的实现形式可能有所不同。具体体现在AT命令的参数设置不同;针对自有产品的特性,提供扩展的AT命令,完成特定功能等等。为此,在应用AT命令的时候,必须参考提供商的AT命令文档。AT指令就是通讯协议的载体和应用。我们讨论的内容就是如何把数据封装在AT指令中,以及对AT指令的操控,最后使得应用程序可以通过AT指令进行通话,发送接收短信息,手机上网等。

2.2.4通话

语音信号的编码和解码在基带中已经实现。从软件的角度来说,应用程序只需要根据当前通话所处于的状态,向基带发送不同的AT命令,控制通讯流程。而查询当前通话状态需要用到AT命令AT+CLCC。基带返回一组数据作为回应,其中就有一个数据字段的值表示了通话状态,如通话中、通话保留、正在拨号、来电、振铃、等待接听等。不管是拨号还是来电,在整个通话的过程中,应用程序都应该周期性查询呼叫状态,根据状态的切换,改变应用程序的流程。

2.2.5短信息服务

短信息服务[23]是GSM系统中提供的一种便捷的通讯服务,用来传输文本信息。手机终端间发送的短信息必须遵循标准的通讯协议,如3GPP

TS

27.005[24],

才能够实现信息的互通。而短信息的互通还依赖于短信息服务中心。短信息服务过程如图2.2所示。短信发送后,先被保存在短信服务中心,然后服务中心发送给目标终端。如果目标终端暂时不能接收,服务中心会按设定重发短信息。短信息的常用编码模式有Text模式和PDU模式[25]。而在Android系统中

兰州大学硕士学位论文

手机终端

短信服务中心

手机终端

图2.2短信服务过程

用的是PDU模式。为此文章中仅讨论PDU模式。PDU是指协议通讯单元,它规定了数据中除了用户发送的信息外,应该包含的字段,而且规定字段中每个数据位为0或为l所代表的意义。PDU编码是十六进制的。从终端设备发送出去的PDU

编码包含了大量的信息,系统通过这些信息来完成短信息服务的全过程。

在通讯协议的实际应用中,短信息应用程序必须把用户输入的短信息进行PDU编码,补全其他字段的内容,利用AT命令把数据发送给基带,然后基带与短信服务中心进行交互。当获得短信息时,应用程序对数据进行解码,获取信息,并显示给用户。

2.2.6手机连接互联网络

GPRS(通用分组无线服务)技术是一种分组交换数据处理技术[26]。使用GPRS,GSM系统能够提供高效、稳定的连接,并且这种连接是端到端的、广域的无线IP连接。GPRS通过分组的方式,让多个用户使用同一条信道。当用户需要传输数据时,将会在时间片内占据整个信道。那么,用户就可以利用信道中所有可用的带宽,获得高效、稳

定的数据传输。实现手机上网,比较常用的方法有两种。第一种是使用AT命令来接入GPRS网。基带的供应商会提供实现TCP/IP协议的AT命令集,方便开发人员处理数据流程。相关的AT命令的组合,可以实现各种功能,如设置工作环境,建立和关闭TCP连接,建立和关闭UDP连接,设置工作端口,获取IP地址,传输数据,检查连接状态等等。这种方法把工作过程分为命令模式和数据模式。当处理上网业务时,要切换到数据模式,通话的时候要切换到命令模式。模式的不断切换,要注意的情况很多很复杂,不利于实现应用程序与硬件的交互,而且还会影响效率。第二种方法是利用基带提供的多路复用功能[27],虚拟出多个通道。例如命

14

兰州大学硕士学位论文

令通道和数据通道。那么,通话和短信业务可以在命令通道中实现,数据通道处理GPRS上网的业务。两者互相独立,互不影响。上层应用不需要知道通道中的数据如何被传输到基带,而响应的消息又是怎样分发到合适通道的。上层应用只需要在对应的通道中进行读写就可以了。然而,在底层实现中,我们要根据相关的协议,实现数据的传输和分发。另外,获得数据通道后,系统需要利用PPP协议[28]和IP协议来连接访问网络。在实际的应用中,我们用到开源的点对点协议服务程序pppd与网络服务器进行PPP协商。协商成功后,可以获取IP地址、域名服务器地址和网关地址等信息。

15

兰州人学硕士学位论文

第3章Android平台通讯架构

通过前面的介绍,读者应该对于手机GSM网络有了一定的认识,了解了相关的通讯协议,以及了解应用协议实现通讯功能的相关过程与方法。而我们最终的目的是在Android平台中运用这些通讯协议,实现通话,短信服务,GPRS上网等功能。本章中,我们将会简单的阐述Android系统的架构,了解Android系统的一些概念,然后详细的介绍Android开放的代码中勾勒出来的通讯架构。因为Android中与通信相关的开放代码是针对模拟器来实现的,所以直接运用开源的代码是不能在硬件平台上实现通讯功能。另一方面,由于Android没有考虑各种硬件平台的接口资源,在实际应用中,可能会造成资源冲突。为此,我们将结合硬件的特性,对架构进行适当的修改,提出新的通讯架构。

3.1

Android架构简述

Android架构包括应用程序,中间件、Linux内核。Android架构如图3.1

所示。应用程序的实现是基于Java语言,但与标准的JavaME[29]语言有不同。这是因为Android有自己专用的Java虚拟机,而且开发应用程序时必须用到Android系统自带的Java类库。在JavaME环境中生成的字节码是不能被Android系统的Java虚拟机所解析。应用程序层包括两个部分,一是应用程序包,主要负责与用户之间的交互,是程序的主体界面;另一个是应用程序框架,提供系统中可用的所有应用程序接口。运用这些接口,应用程序可以访问硬件资源。

虽囹

图3.1Pmdmid架构

中间件运行在应用程序和内核之间,是两者沟通的桥梁,支持各种标准协议和接口,满足各种应用的需求。它主要包括各种系统函数库、Android的Java16

兰州人学硕士学位论文

虚拟机以及硬件抽象层。硬件抽象层与应用程序框架以及设备驱动相关联,实现

应用程序框架与设备驱动之间应用程序接口的转换。硬件抽象层以.SO动态库文件的形式存在。Android的Linux内核掌管着存储器,进程管理,文件系统管理,系统安全,网络堆栈等资源。然而,Android的Linux内核是标准Linux内核的变种。它为了适应商业应用要求,把设备驱动从内核空间移动到用户空间,而且重写了内核中的一些功能。

3.2

Android通讯架构分析

3.2.1架构描述

Android通讯架构是Android平台架构的子集,符合系统的设计思路。Android通讯架构如图3.2所示。在Android的通讯中,主要用到的应用程序就是通话、短信息服务和数据业务(GPRS上网)。通话应用程序提供拨号界面,通讯记录,电话本等。短信息服务界面中显示了手机上存储的所有短信息,以及提供消息编写和发送操作的图形界面。在应用程序框架层,由通讯资源管理器(TelephonyManager)管理所有的通讯功能。GSM通讯资源管理器是通讯资源管理器的子集,用来管理与GSM网络相关的电话功能。在这一层中,我们还需要应用各种通讯协议的规范,对数据进行编码和解码。以短信息服务为例,用户在应用主界面中输入数据,发送短信息。GSM通讯资源管理器获取数据后,把目的地址、用户数据等信息按PDU模式构造数据包,然后发送给下一层。当GSM通讯资源管理器从下层获取到消息时,它将按照协议对消息进行解包,提取有用的信息,传输给应用程序,展示给用户。另外,数据业务在应用程序层是以浏览器作为与用户交互的界面。当用户设定启动GPRS上网业务时,系统就会进行拨号,然后利用点到点协议服务程序与网络服务器连接,获取IP地址。最后浏览器就可以通过函数调用,访问内核,利用TCP/IP网络协议栈,通过网络设备节点访问网络资源。在硬件层,基带提供了一个通讯接口(一般是串口)作为与上层联系的通道。

17

兰州大学硕士学位论文

应用程序

通话

短信息服务

数据业务

…..j口[

应用程序框架通用通讯管理器GSM网络通讯管理器

‘丫

弋,

Il

Socket

中间件(无线接口

;)

无线接口监控程序(did)硬件抽象层fil.so

n’

Linux内核

1CP衄

PPP

硬件

1|晰te

基带图3.2Android通讯架构

Read上层应用通过调用Linux内核的系统函数read0和write0对串口读写,完成与基带的通讯过程。然而,在数据业务的实现中,Android不是采用AT命令规范对数据进行封装,而是采用读写基带的通讯接口的方法。但是,在通话和短信息服务的实现过程中,系统已经把基带的通讯接口分配出去了,这样造成数据业务启动时,又需要请求使用同一个串口,资源发生冲突。这个问题将在下文给出解决方案。

3.2.2无线接口层

在Android的通信中,中间件部分又称为无线接口层。它是Android通讯架构中的关键。这是因为无线接口层实现了对硬件基带的抽象,向上提供各种功能的操作接口。无线接口层中各种功能的实现,实际上就是利用不同的AT命令的组合,对基带进行初始化配置,让它按照相关协议进行工作;另一方面,就是迸

18

兰州人学硕士学位论文

行数据的传输以及应用程序接口的转换。

无线接口层这一层是和硬件密切相关的,不同供应商提供的基带AT指令的

规范存在差异,而且附带一些属于自有功能的AT命令集合。为此,Android平台仅仅针对标准AT指令规范,构建了一个无线接口层。在实际的开发中,必须要根据硬件平台重新改写。Android中的无线接口层结构如图3.3所示。

GSM网络通讯管理器RIL.java

/\

socket

rild

上觚tionca¨T

硬件抽象层ril.SO

JL

res印n∞

solicitedfequest..respnnRe

1r

unsolicited

.JPSpon殴

串口

基带

图3.3无线接口层的结构图

图3.3中虚线部分为Android的无线接口层,它包括无线接口层监控程序rild以及通讯功能的硬件抽象层ril.SO(以下简称ril)。无线接口层监控程序是GSM网络通讯管理器和ril沟通的桥梁。无线接口层监控程序通过Socket[30]通讯方法与GSM网络通讯管理器进行消息的发送和接收,巧妙地解决了进程间的通讯的问

题。Socket的服务器端在无线接口层监控程序中构建,客户端在GSM网络通讯管理器中的RIL.java文件中建立。当应用程序调用RIL.java中提供的应用程序接口时,进程会把数据从Socket通道中发送给rild。rild根据传输过来的数据,调用匹配的函数接口functioncall,让硬件抽象层ril来进行对应的处理。从硬件抽象层返回消息,称作response,即响应。rild会把返回的数据通过Socket通道传送给通讯管理器。在Android中,我们把主动向基带发送请求的操作称之为request,例如拨

19

兰州大学硕士学位论文

号,呼叫转移、发送短消息等。响应request的消息称为sol

icitedresponse,

表示主动请求的响应消息。另外,在Android中,我们把基带主动上报的消息称为unsolicitedresponse,表示非请求的响应。例如来电,接收到短信息,短信消息报告等等。在这里,主动请求,主动请求的响应消息以及非请求的响应,都是AT命令的集合。在硬件抽象层,数据的处理需要按照AT命令的规范进行,做到把数据封装到AT命令中,再传输给与基带通信的串口。串口回来的数据,需要从AT指令中解包,最后传输给上层。因为AT指令就是大部分通信协议的载体,所以这样操作才能做到真正应用通讯协议,才能与基带无缝连接,无缝通信。通过对Android无线接口层代码的研究,我们可以发现Android提供了一个虚拟的ril。它模拟了实际硬件的功能,针对应用程序的函数调用,进行合适的操作。在Android的模拟器中,用到的就是这种功能。为此,在开发过程中,要注意两者之间的区别,把虚拟ril去除。

3.3新的架构的设计

上文提到Android在处理通话和GPRS上网时,会产生资源的冲突。解决冲突的办法有三个,一是增加一个基带,二是修改Android中关于GPRS的实现方法,使用AT命令规范进行封装,三是运用多路复用协议,虚拟出多个串口资源。基带作为手机设计方案中必备的关键部件,成本相对其他部件来}兑,比较高昂。增加一个基带,必然会大大提高手机产品的出厂价,造成产品竞争力低下,而且利润空间少。这个方法是一定不会使用的。另外,修改Android平台中关于GPRS的实现方法,这个途径虽然可行,但是工作量很庞大且复杂。在Android平台上运行的应用程序,都可以利用现有的应用程序框架访问网络资源。为此,应用程序的用户必然会特别关注数据的传输效率。我们已经知道,使用AT命令实现GPRS,需要不断的切换数据模式和命令模式,这样会造成数据传输的低效。有时候,用户很难接受这种情况。运用多路复用协议,虚拟出多个串口资源提供系统使用,这个方法比较符合Android系统的需要。串口多路复用方法的实现有两个关键点,一是串口的虚拟化的实现;二是多路复用协议的实现。这两个关键点的实现我们将在下一章节相关的部分进行具体分析。

兰州大学硕士学位论文

文章中选择多路复用技术来解决资源冲突的问题。在接下来的部分,我将具体分析串口多路复用协议在系统中的应用。

3.3.1串口多路复用协议

多路复用[31]是指在一条通讯信道中,实现多路信号或者多种数据流并行传输的技术。运用多路复用技术,多条低速的数据流可以合并到同一条高速的通讯信道中,以此来避免产生高额的器件成本。在手机平台中,主要的通信部件是基带。而基带仅仅提供了一个串口让系统使用。为了使得在一条串行接口中同时存在多个会话,如语音信号、短信息服务、GPRS数据业务等,供应商在基带中实现了串口多路复用协议。在开发中,用户需要在一

条物理串口接口上实现多个数据链路连接,也就是说,在系统中以此串口为主,虚拟出多个虚拟串口,供上层应用读写。串口多路复用模型如图3.4所示。

曰曰日

嚣眨

目一日一

曰=日一燃

日一日、\

、————————————————、-,————————————————/多路复用监控程序

图3.4串口多路复川模型

1,2,3分别表示3种不同信道中的数据流,ttySO是与基带通讯的串口,ptsl,pts2,pts3是ttySO的虚拟串口。当Android系统初始化时,多路复用监控程序就虚拟出多个串口给系统使用。若数据流进入多路复用监控程序时,程序会依据多路复用协议,根据数据流本身所处的信道、数据长度等信息,进行数据包封装,然后通过ttySO发送给基带,最后通过处理器中的多路复用协议栈,传输到GSM网络中。相反,当多路复用监控程序从ttySO中获得数据时,程序对

21

兰州大学硕士学位论文

数据进行解包,找出数据所属的虚拟信道,然后完成数据的传送。在这个过程中,

可以发现,多路复用的协议必须在硬件和系统中都得实现。只有这样,才能满足

在系统和硬件两端的协议编码、解码的匹配。也就是说,如果基带不提供多路复用的功能,在系统端,就算实现了多路复用协议,还是不能成功传输数据。软件的实现要和硬件功能相匹配。

3.3.2多路复用无线接口层架构设计

多路复用协议为我们提供解决GPRS数据通道和通话命令通道间冲突的方

案。我们实验用到的基带实现了多路复用协议栈。根据多路复用协议以及实际硬

件基带的特性,我们设计了新的无线接口层,称为多路复用无线接口层。多路复用无线接口层结构如图3.5所示。在图3.5中,虚线部分代表多路复用无线接口层。在无线接口层中,除了无线接口层监控程序rild以及硬件抽象层ril之外,还增加了一个多路复用监控程序。多路复用监控程序实现了对基带通讯接口的虚拟化,产生了3个虚拟串口,即AT、URC、DATA。AT虚拟串口是作为主动请求和主动请求响应消息的数据链路的接口;URC是unsolicited

response

channel的简写,URC虚拟串口作为主动

上报消息的数据链路的接口;DATA表示数据业务,DATA虚拟串口作为进行互联网络数据传输的数据链路的接口。所有在多路复用监控程序中进行传输的数据,都会按照多路复用协议进行处理,以此来管理数据的分发。通过这种机制,接收短信,通话和上网能够同时进行,满足用户的使用习惯。例如,拨打电话,发短信息等操作通过AT数据链路来进行,返回信息也从AT数据链路获得。来电,接收到短信息等,从URC数据链路上传到多路复用监控程序,然后传递给ril处理。在图3.5中,我们可以看到DATA虚拟串口上有三种数据流,其中主动请求和主动请求响应消息与AT虚拟串口中的一样。他们在DATA数据链路中的作用是响应上层的拨号上网请求。在系统网络环境搭建好后,第三个数据流data就是网络数据包的数据通路。

兰州大学硕十学位论文

图3.5多路复用无线接口层结构

兰州大学硕士学位论文

第4章实例分析与实现

在第三章中,我们详细分析了Android开放代码中勾勒出来的通讯架构,并针对运用串口进行通讯的基带的特性,讨论了该架构在实际运用中存在的资源冲突问题以及可能的解决方案。在三种方案中,我们择优选择了串口多路复用技术,并对无线接口层架构进行适当的修改,提出新的多路复用无线接口层架构。而本章中,我们将在硬件平台上构建一个Android系统,并实现通话、短信息服务、手机无线上网等通讯功能。

4.1

Android相关开发准备

4.1.1开发环境搭建

1.我们用到的手机设计方案中,硬件部分的关键部件是联发科基带MT6223[32]。联发科在大陆基带市场拥有最多的份额。MT6223是他们生产的最成熟的基带产品,支持GSM和GPRS,拥有优秀的GPRS吞吐量,优异的功耗,成熟和稳健的基带系统软件,实现了各种网络通讯协议栈。在AT指令的使用中,都是按照标准的AT命令规范来设计的。综合来说,MT6223是最佳成本效益的一款基带产品,能够满足我们实现计划功能的需要。2.实验用到的主机平台是x86ubuntu9.04,目的平台是arm

Linux。

Android系统平台是基于arm处理器的系统。在实验中,我们用到的就是arm9的处理器。与x86对比,arm更省电,待机时间更长。基于手机硬件本身的局限性,Android和arm能够完美地配合在一起。因为目的平台不能够让我们安装arm的编译器,并在其中进行编译,所以我们用到交叉编译。X86Ubuntu是Android指定的交叉编译的主机平台。Google提供的Android源码丌发工具中就有在X86平台中交叉编译的工具链。在编译Android源代码时,主机会自动调用该交叉编译工具链进行编译。3.系统引导程序Blob[33]。系统启动引导程序是系统启动的关键部分,它把软件和硬件紧密地联系在一

兰州人学硕士学位论文

起。Blob是一款开放源代码的、强大的启动引导程序。它可以引导存储在闪存

或内存中的Linux内核。在实际开发中,通过超级终端控制串口,利用USB把系统引导程序下载到目的平台。

4.1.2

Android源码和内核

Android源码

Android系统的源码是丌放的,我们可以从其官方网站中下载。具体的下载方法和Linux系统工作环境的设置可以参考官方网站的说明[34]。Android系统一直都在开发中,其源代码中的分支比较多。我们选择了Android1.5,代号cupcake的Android源码分支作为研究对象。这是因为cupcake是官方发布的最

早的版本,比较稳定,就算是更新,修改的影响不会很重大。获取cupcake分支的方法是在下载的命令中,增加命令参数一b

2Androidcupcake。

Linux内核

Android系统的源码以及Android内骸的代码都是通过Git版本管理器进行

管理的。Android系统的源码中每个小项目就是一个git库,下载时比较麻烦,需要按照官方网站中的说明进行操作。而Android的Linux内核就是一个git库,下载起来很方便,可以直接运用Git的管理工具下载[35]。当然,我们需要根据手机设计方案中的设备的特性,修改Linux内核中的各种驱动程序等。但这不是文章的讨论内容,为此在此忽略,仅做提醒。资源到位后,编译Android源码和AndroidLinux内核,分别产生系统镜像system.img文件和内核镜像zImage文件。然后,通过超级终端控制串口,利用

USB把系统镜像文件和内核镜像文件烧写到目的平台中。开机运行时,系统加电

后引导程序Blob会引导系统内核启动,然后内核会加载文件系统。当系统起来后,就可以通过日志查看系统的运行情况,调试系统的通讯功能。虽然这样调试比较繁琐,但是通讯功能是与硬件密切相关的,虚拟机是无法模拟的。

4.2多路复用监控程序

串口多路复用是整个通讯系统正常运行的关键,主要是它掌管着各种数据的传输通道以及数据的接收与分发。在系统启动的初始阶段,串口多路复用监控程

兰州人学硕士学位论文

序就必须启动。MT6223基带实现了多路复用的协议栈,运用AT+CMUX=O命令就可以启动基带的多路复用功能的基本模式。联发科实现该功能时,是完全按照3GPP

27.010multiplexerTS

protocol(多路复用协议)[36]来操作的。为此,我们在

实现串口多路复用监控程序时,也要参照该协议。串口多路复用方法的实现有两个关键点,一是多路复用协议的实现,二是实现虚拟多串口。

4.2.1多路复用协议

在多路复用监控程序中,所有的数据都以数据帧的形式来传输,而多路复用协议规定了数据帧中的每个字段的含义,以及不同取值所代表的内容。多路复用数据帧格式如表4.1所示。

表4.1多路复用数据帧格式

‘l我

{据笏I

数值

8765432l(16

{应

缉l

进制)

标志域地址域控制域

UIHSABM

1D

1C

OI

1EA

F9

C/R

P/F

P/F

数据长度数据长度扩展字:I了(可选)数据域I/0

I/0

I/0

I/0

I/0

I/0

I/0

EA

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

校验域标忠域

I/0

I/0

I/0

I/0

I/0

I/0

I/0

I/0

lF9

兰州大学硕士学位论文

从表4.1可以发现,最基本的数据帧有7个帧域,分别是标志域、地址域、控制域、数据长度、数据域、校验域和标志域。而在两个标志域中间的字段才是有效的数据。这样就可以区分不同的数据帧。在地址域中,DLCI代表第1个数据链路通道。I值乘以4,得到的乘积再与EA、C/R相加的和就是地址域的值。EA是扩展标志位,如果EA置l,则表示该地址域中只有这一字段。若EA置0,则表示有扩展字段。C/R(命令/响应)是用来识别数据帧是命令还是响应,或者说是区分数据的流向。控制域是指数据帧的类型。在表4.1中列举了两种数据帧,分别是UIH和SABM。SABM是setasynchronousbalanced

mode的简写,称作设置异步平衡模

式。SABM数据帧主要是用来设置数据链路通道的工作方式,这在建立数据通道的时候用到它。UIH是Unnumbered

Informationwith

Header的简写,称作带

信头的未编号信息。UIH数据帧是用来传输数据信息的。除了UIH和SABM外,还有其他数据帧类型,详见27.010协议。另外,P/F位的设置,是一种响应匹配机制。例如,当建立通道时,发送了一个SABM数据帧到基带,其中数据帧中的P/F位置l。数据链路建立后,基带返回一个数据帧,其中P/F位也置1。如果返回的数据帧中,P/F位为0,则该数据帧会被丢弃。数据长度域也可以通过EA位来进行扩展,但数据长度域的位数最多为15位。数据长度乘以2,得到的乘积再与EA相加的和就是数据长度域的值。校验域,我们在实现中用到了CRC校验。基于上述描述,我们需要实现2个应用程序接口,mux_write0和mux—read0。mux—write接口的作用是按数据帧的格式对数据进行封装,并把封装后的数据写到基带。mux_write接口需要多个参数,如数据链路通道编号,数据流,数据长度,还有数据帧的类型。mux—rea

d接口的作用是接收基带传输过来的信息。他需要一个缓冲区来存储数据,并按协议对数据进行解码,获取数据流以及目的数据链路通道,最后把数据流写到目的数据链路通道中,从而被更上一层捕获消息。

4.2.2虚拟多串口

按照多路复用无线接口层的设计,我们要虚拟出3个串口。相关的关键代码

兰州大学硕士学位论文

如下:

int

fd=open(“/dev/ptmx",0一RDWR

0一NONBLOCK):

char*pts=ptsname(fd):grantpt(fd):unlockpt(fd):当打开文件/dev/ptmx时,可以获得虚拟终端主节点ptmx的文件描述符,而且在/dev/pts目录下生成一个虚拟终端,接着通过调用ptsname函数,可以获得虚拟终端的绝对路径。虚拟终端要起作用,必须把主节点的文件描述符作为参数,传递给grantpt和unlockpt函数,从而修改虚拟终端的访问属性以及对虚拟终端进行解锁。通过利用上述代码,我们可以建立起3个虚拟串口。然而,当三条数据链路中都有数据同时需要处理时,基带如何进行操作呢?要解决这样的问题,使得多路复用监控程序正常运行,我们必须先通知基带这3条数据链路通道的信息,从而与虚拟串口建立一对一的连接,方便基带对数据链路进行管理。这时,我们就需要利用一条控制信道把数据链路的相关配置信息告诉给基带。这些配置信息包括数据链路地址,数据链路上流通的数据帧类型,数掘链路的优先级等等。根据27.010协议,实际操作中我们的配置信息如下:

unsigned

char[]DLCl={0x83,Oxl1,Ox01,OxlO,Ox01,OxOa,Ox00,

Ox02,Ox03,Ox02):

unsigned

char[]DLC2={0x83,Oxl1,Ox02,OxlO,Ox02,OxOa,Ox00,

Ox02,Ox03,Ox02):

unsigned

char[]DLC3={0x83,Oxl1,Ox03,OxlO,Ox03,OxOa,Ox00,

Ox02,Ox03,Ox02):其实,当运用AT+CMUX=O命令设置时,基带中就产生了一条控制信道。这条控制信道也可以认为是数据链路通道,编号为0。建立数据链路通道的具体过程如下:1.向控制信道发送SABM数据帧,确认控制信道建立。2.向控制信道发送UIH数据帧,数据帧中的数据内容为DLC1的配置信息,从而在处理器中注册上第l条数据链路通道。

兰州大学硕士学位论文

3.向数据链路通道l发送SABM数据帧,确认数据链路通道已经建立。4.向控制信道发送UIH数据帧,数据帧中的数据内容为DLC2的配置信息,从而在处理器中注册上第2条数据链路通道。5.向数据链路通道2发送SABM数据帧,确认数据链路通道已经建立。6.向控制信道发送UIH数据帧,数据帧中的数据内容为DLC3的配置信息,从而在处理器中注册上第3条数据链路通道。7.向数据链路通道3发送SABM数

据帧,确认数据链路通道已经建立。

4.2.3汇聚层信息处理

实现汇聚层的目的是允许数据通过多路复用控制器时,保留原有的结构或与数据流相关的其他参数。汇聚层常见用法是在数据流中嵌入满足V.24通讯协议的控制信号。V.24控制信号是只有一个字节大小的数据。因为V.24是作为数据流的一部分,并且嵌入到用户消息的数据流的头部,所以要在封装数据之前,就要把V.24控制信号写到数据流中。而当从基带获取数据帧时,要先把数据内容从数据帧中解码出来,然后去除V.24控制信号,最后才传输给用户。多路复用监控程序数据流程如图4.1和图4.2所示。图4.1描述了数据发送的数据流程,图4.2描述了数据接收的数据流程。

图4.1数据发送流程

兰州大学硕士学位论文

存储数据包

图4.2数据接收流程

在数据发送流程中,数据头添加控制信号的操作是在多路复用监控程序获得消息信息时就马上进行操作。在实际的实现中,增加一个缓存区。这个缓存区的首个字节写入控制信号。然后,需要把消息信息一个字节不漏的复制到新增加的缓存区内,紧跟在控制信号之后。那么,它就是我们要发送的数据流,可以进入封装阶段。在数据接收流程中,去除数据头部信号的操作是在获取了数据流之后再进行的。在实际的实现中,我们也增加了一个缓存区,存储从数据流第二个元素开始的所有内容。那么,这个新增的缓存区就是系统要接收的消息。

4.3基于多路复用的硬件抽象层

硬件抽象层与应用程序框架层的通讯是通过无线接口层监控程序rild完成的。rild只是负责建立Socket通道,完成数据的传输。它只相当于一座桥梁,与多路复用无关。而硬件抽象层是与多路复用监控程序创建出来的3个虚拟串口

兰州人学硕士学位论文

直接通讯的。为此,我们需要实现多路复用的硬件抽象层。虚拟串口是以设备文件的形式存在于系统中,名字可能为/dev/ptsl,/dev/pts2,/dev/pts3。多路复用硬件抽象层的实现,就是对这些设备文件进行打开操作,读操作和写操作。为了方便操作,我们在多路复用监控程序中为这些设备文件建立了对应的符号连接,分别为/dev/data,/dev/urc,/dev/at。/dev/at对应的是系统主要的数据链路,/dev/urc对应的是主动上报消息的数据链路,/dev/data对应的是数据业务的数据链路。首先,我们需要打开这些文件。因为三个数据链路都是同时运行的,所以我们用不可阻断的、可读写的方式打开这些虚拟串口设备。相关代码如下:intintint

fd_at=open(“/dev/at”,O__RDWR

0一NONBLOCK):

fd—urc=open(“/dev/urc”,0一RDWR10一NONBLOCK):fd—data=open(“/dev/data”,0一RDWR0一NONBLOCK):

其次,我们需要解决数据读取的问题。在硬件抽象层中,创建了一个不断循环的读线程readerLoop0。它的作用是检测三个数据通道文件是否被修改。如果文件被修改,则说明,在这个数据通道中可以读取到数据。实现这个过程,我们运用Linux的系统调用select[37]来完成。最后,我们要解决写数据的问题。在Android原有的参考设计中,写数据是通过at—send—command0等多个类似的函数来调用。但最后都是通过writeline()把数据写到数据链路通道中。而,我们要

相关主题
文本预览
相关文档 最新文档