智能手机论文.doc_第1页
智能手机论文.doc_第2页
智能手机论文.doc_第3页
智能手机论文.doc_第4页
智能手机论文.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

I的 智能手机通信功能的设计与实现摘 要 本文介绍以UP-TECH S2410作为核心开发板,UP-GPRS作为无线收发模块,嵌入式Linux作为操作系统, Qt4.5作为编程开发环境的智能手机系统不同的实现方式。结合实践,实现了智能手机语音通话.短信收发等主要功能,分析了作为一个可收发系统,多线程和定时器两种实现方案的不同实现过程,进而总结归纳了两种方案各自的优缺点。关键字 智能手机 Qt 多线程 定时器 多线程通信 Design and implementation of smart phone communication system Abstract This article introduces the UP-TECH S2410 as a core development board, UP-GPRS as the wireless transceiver modules, embedded Linux as the operating system, Nokia Qt4.5 as a development language, different smart phone system implementations. With practice, through the realization of intelligent mobile voice calls, text messaging and other basic functions of the system as a transceiver, the implementation process of multi-threading and timers and their respective advantages and disadvantages are analyzed.Keywords smart phone Qt multi-threading timers Multi-thread communication0 概 述自从上世纪末叶,手机巨头摩托罗拉推出第一款名为天拓A6188的智能手机后,智能手机行业蓬勃发展,时至今日,已是百家争鸣,各有所长。各大厂商针对智能手机的投入也逐步增大,导致在该研究领域,从嵌入式平台的搭建、操作系统和GUI应用程序开发框架的选择,到嵌入式软件的设计与开发,每一个方面都炙手可热。与其它操作系统相比,Linux具有二个其它操作系统无法比拟的优势。其一,Linux具有开放的源代码,能够大大降低成本。其二,既满足了手机制造商根据实际情况有针对性地开发自己的Linux手机操作系统的要求,又吸引了众多软件开发商对内容应用软件的开发,丰富了第三方应用。越来越多的厂商加入了基于Linux操作系统的智能手机的研发中。Qt是诺基亚开发的一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。它具有优良的跨平台性,面向对象,丰富的API,支持2D/3D图像渲染,支持OpenGL等众多优点。图1为智能手机系统的三层结构。底层为操作系统层,中间层为服务程序层,上层为用户界面层。设计智能手机系统的关键在于各项功能的实现即服务程序层的编写,如接/打电话,接/发短信,收发电子邮件,运行游戏等。用户界面层(GUI Interaction)服务程序层(function Server)嵌入式操作系统(embedded OS) 图 1 智能手机软件系统结构移植经过裁剪的Linux操作系统,可以方便的构建嵌入式操作系统层。而用户界面层则采用Qt Designer设计应用程序界面并绑定到qtopia下。本文重点阐述了采用多线程和定时器两种方式设计和实现服务程序层的方法。1 采用Qt多线程实现服务程序层1.1服务线程的设计与实现手机功能的实现(接/打电话,收/发短信)涉及到对GPRS/GSM模块串口的读/写。 通过AT指令,应用程序可以很方便的和GPRS/GSM模块进行交互,如拨打电话:ATD;(为被叫电话号码)。对于手机用户的主动操作(如对手机界面的切换,打电话,发短信等),通过建立一个QAServer线程进行响应。而对于手机的被动操作(如有电话呼入,有短信到来等),通过建立一个QLServer线程,用于对gprs模块的串口进行监听,并根据从串口中读取的不同的信息触发QAServer线程中的相关操作进行响应。二者关系上,QLServer线程辅助QAServer线程,实现各项功能。QLServer线程主要是用于对gprs模块进行监听,并唤醒QAServer线程中的相关响应操作。QLServer线程主要包含以下几个函数(相关的信号函数将在下面讨论):void readGprsData(int fd,QString gprsSC); /读取串口中的字符信息void encodeGPRS(Qstring gprsSC); /解析读出的信息,并唤醒 /QLServer中的响应操作QAServer线程主要是用于执行相关的响应操作,如拨打/接听电话等。QAServer线程主要包含以下函数(相关的槽函数将在下面讨论):void call(QString); /打电话void answer(); /接电话void hanUp(); /挂电话void sendMessage(QString MES,QString serverNum,QString TeleNum); /发送短信,调用了enCodeMESvoid enCodeMES(QString MES,QString serverNum,QString TeleNum); /对要发送的短信进行编码void readMessage(QStirng index)/读取短信,并触发用户界面层的界面操作 ( /调用了unCodeMES)void unCodeMES(QString mesrc,QString phonenum);/解析要读取的短信整个应用程序共包括3个线程及主线程,从而构成了用户界面层。所有涉及界面的操作必须在主线程中实现,主线程也被称为GUI线程,它是唯一一个允许执行GUI相关操作的线程(而且必须在创建一个QThread之前创建QApplication(or QCoreApplication)对象)。在QAServer中的界面操作,则是通过 signal/slot 机制,通过QAServer线程类中创建一个 signal (信号),在主线程的界面管理类中创建一个slot(槽)。一旦QAServer线程发送相关修改界面的信号,主线程即接收并对信号进行处理,进而调用相应的界面管理类的方法(槽)来响应操作。1.2 线程间的通信流程本段以接收,阅读短信并发送短信为例,说明服务程序层的线程间通信的流程,如图2QLServer线程和QAServer线程以及主线程,消息循环,等待可能输入进行相应。QLServer不断监听GPRS/GSM模块传送过来的信号,当有短信到来时,由QLServer解析出是短信信号,并把解析出的短信索引位置(index)通过QT线程之间的传递机制发送给QAServer线程。QAServer线程通过索引位置(index)解析出发送方的号码,并发送消息给主线程。主线程调用界面管理对象中的方法,弹出提示框,提示有新短信到来,用户是否需要阅读短信。用户点击阅读短信,主线程将短信索引位置返回发送给QAServer线程。QAServer线程接收到消息后,调用短信解析函数readMessage,解析出短信内容,并(把)发送消息给主线程,主线程调用界面管理中的方法,显示短信内容。编辑短信内容,输入目标号码,点击发送短信。主线程将短信内容、短信中心号码、目标号码以消息的形式,发送给QAServer线程QAServer线程调用sendMessage函数,编码短信。并通过AT指令,向GPRS模块串口写入编码后的短信。短信将被GPRS模块发送。 图2 线程间的通信(以接收,阅读,发送短信为例)1.3 线程间通信机制的方式与实现1.3.1 QCOP协议QCOP是Qt内部的一种通信协议,该协议用于不同的客户之间在同一地址空间内部或者不同的进程之间的通信。目前,此机制还只在 Qt 的嵌入式版本(Qt/Embedded)中提供.QCOP利用继承自QObject的QCopChannel类来实现。QCopChannel可以实现多个线程之间的通信。QCopChannel类提供了静态函数send()来发送需要传递的消息和数据,静态函数isRegistered()来查询某个Channel是否已经被注册。当从Channel中接收消息和数据时,需要构造一个QCopChannel的子类并重写receive()函数,或者提供一个槽并利用connect()函数将receive()信号连接起来。以QLServer线程监听到新短信,向QAServer线程发送短信索引位置(Message index)为例,说明采用QCOP机制线程之间的通信方式。在QLServer中的方法:QByteArray data;/如果字数过多,建议删减此处QDataStream out(&data, QIODevice:WriteOnly);out =0) emit newMes(QString index); /*解析出新短信到来,发送新短信到来的信号。信号中包含短信的存储索引位置(index)*/ 在QAServer中的方法:public slots: void readMessage(Qstirng index);/定义槽函数关联信号和槽,是在主线程的界面管理类中的构造函数中,关联函数如下:QObject:connect(QLSerObj,SIGNAL(newMes(QString index),QASerObj,SLOT(readMessage(Qstirng index);(1.3.3 其他的通信机制Qt程序的线程还可以通过事件进行通信,在QThread中通过QThread:postEvent()方法将事件提交给一个对象,该方法提供了一种Thread-safe 的事件提交过程。提交的事件被放进一个队列中,然后 GUI 主事件线程被唤醒并将此事件发给相应的对象。但该方式适用于非主线程和主线程之间的通信,因而使用受到限制。这种通信机制在本系统中无法方便的满足非主线程与非主线程之间的直接通信。由于采用的嵌入式操作系统为Linux,而Qt做为一个跨平台开发工具,不仅支持自己特有的通信机制,也支持Linux中有名的管道通信机制,即FIFO机制.)2 采用Qt定时器实现服务程序层首先建立一个GprsServer类,在类的构造函数中创建并启动定时器TimerProcess,并利用信号和槽机制中的connect函数,将定时器超时为信号与功能处理函数processGprs为槽函数相关联()。然后通过功能处理函数processGprs来间隔的读取串口和处理用户的相关操作(如接/打电话等)。用户的不同操作将通过标志变量来确定,用户的操作和读取串口提取出来的信息都会设置相应的标志变量(如用户点击发送短信,SendMF被置为1。SendMF为1并且定时器超时,发短信功能代码将被执行同时SendMF被重置0)。如图3为定时器的流程图。 图3 定时器实现服务层的程序流程图3 实验结果(通过分别)采用多线程和定时器两种程序架构,分别实现了智能手机电话拨打/接听/拒接和短信接收/发送等基本功能,并着重研究了QT中关于多线程间通信的实现途径,进而对比得出以下结论:使用多线程将程序划分为多个独立的任务,因此可以提高应用程序的响应速度。在采集GPRS串口数据线程的运行过程中,用户界面也可以一直保持活动状态,即时无延迟感的响应用户的操作。另外多线程中由专门的线程负责采集GPRS数据的线程,(这样就)可以保证读出GPRS串口发送过来的全部数据,确保了数据的完整性。(但使用多线程的)缺点是使用多线程会带来一些不确定因素。如果线程之间的通信没有处理好,会产生数据的不同步和线程安全问题。其次,使用多线程在技术上有一定的难度。使用定时器的优点是,功能的划分比较明确,实现难度相对较低,出现异常的情况可以得到控制。缺点是对设备的利用率不高,每次对GPRS串口的采集都有一定的时间间隔,这就要求硬件设备有一定大小的缓冲区。在一定情况下,如大量信息的接收,有可能产生数据的丢失。4 结束语本文通过智能手机项目,总结了实现智能手机后台功能服务程序的两种框架,并对两种框架的设计和具体实现过称进行了阐述。对采用多线程或定时器实现智能手机系统的可行性和优缺点,进行了实践验证和总结。由于两种程序框架均具有良好的可扩展性,如在采用多线程设计的框架中只需要添加线程和增加功能函数,在采用定时器设计的框架中只需要增加标志变量和功能函数,手机的功能都可以得到良好的扩展,这为后续开发奠定了基础。鉴于智能手机通信系统的设计要么是采用多线程/进程或定时器,要么是多线程+定时器,笔者分别采用两种方式设计的程序框架和对采用这两种方式实现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论