基于Windows CE 6.0的电话系统设计与实现
时间:03-07
来源:互联网
点击:
0 引言
随着嵌入式设备和通信网络的飞速发展,消费者对移动通讯的需求不断增加。电话系统成为消费类嵌入式设备中一个非常重要的组成部分。在很多嵌入式系统中,应用程序通过直接lhJGPRS模块发送AT命令实现电话通讯功能。这种方法具有很大的硬件相关性,随着应用复杂度的增加会造成系统难以维护,并且不具备可移植性。
无线接口层(RIL)最初是针对Windows Mobile操作系统引入的组件,用于屏蔽Modem硬件设备细节。RIL将上层应用请求转化为与具体硬件设备相关的AT命令发送给Modem设备,使上层软件可以通过RIL无缝地与GSM/GPRS通信。上层软件将RIL作为逻辑设备,发送与硬件设备无关的命令,实现和底层设备交互的功能。
由于RIL具有屏蔽底层硬件设备细节的特点,因此本文在其基础上进行电话系统设计,使电话系统具有较强的硬件无关性。本设计利用电话应用程序接口(TAPI)实现电话基本功能,并且引入电话管理层,对电话系统进行管理和优化,使上层应用和底层硬件设备完全剥离,使电话系统具有较强的可移植性。
1 基本原理
1.1 CPU和GPRS模块通信原理
嵌入式系统的模块化和可裁剪性决定了大多数嵌入式移动设备都采用双核架构一核心的应用处理器和基带处理器GPRS模块,两者通过串口连接,采用握手方式发送AT命令进行通信。通常上层应用程序可以直接发送AT命令实现电话功能,但会使系统缺乏可移植性,并且系统状态难以维护。
本设计所基于的RIL可以解决这个问题。RIL处于应用程序之下,GPRS模块之上,如图l所示。RIL屏蔽了硬件上的细节,负责传输数据;发送AT命令;接收来自GSM/GPRS模块的响应。上层应用只需将与设备无关的请求发送到RIL,由RIL实现与底层通讯硬件设备的交互。
1.2 RIL原理
RIL分为RIL Driver和RIL Proxy两部分。RIL Driver以流驱动的方式实现,负责AT命令的发送和响应的接收,整个系统只有唯一的一个RIL Driver。每个应用程序有独立的RIL Proxy,和RIL DriverJ注行交互。应用程序使用RIL的流程如图2所示。
首先应用程序注册到RIL Driver,获得一个RIL Proxy。此后应用程序通过RIL Proxy发送与硬件无关的请求。融L Proxy将请求发送给Device Manager,Device Manager根据控制码将请求发送给RIL Driver。最后RIL Driver将上层应用传来的与设备无关的请求转化为与具体硬件设备相关的AT命令写到串口,发送给GPRS模块,实现一次命令的发送。
同样地,对于GPRS模块返回的响应,RIL Driver从串口将命令读出,将与硬件相关的响应转换为硬件无关的通知放入通知队列,发送给相应的RIL Proxy。
2 系统硬件架构
本系统中作为核心的嵌入式开发板采用的应用处理器为Monahans310,通过串口与SIMCOM公司生产的型号为SIM300D的GPRS模块相连。应用处理器通过串口向GPRS模块发送AT命令实现电话、短信、上网等功能。系统硬件如图3所示。SIM300D支持MUX功能,支持数据和语音的同步传送,并与音频模块9713相连,实现语音输入输出功能。
3 软件设计与实现
本文所设计的电话系统以RIL为基础,利用电话应用程序接口(TAPI)实现电话功能。本设计中电话系统的主体是电话管理层,在电话管理层中实现电话功能、电话管理和电话系统优化。电话管理层的引入降低了应用程序和设备硬件的相关性,增强了系统的可移植性。
3.1电话管理层架构
电话管理层的作用有以下三点:利用TAPI实现电话呼入、拨出、切换等功能;对电话进行管理,实现多路电话切换,增强电话系统的健壮性;封装TSP(电话服务提供接口)消息,使上层用户程序不依赖于具体TSP消息,增强了电话系统的可移植性。
电话管理层由TAPI线路功能模块CTapiLine、电话管理模块CCallManager和辅助模块三部分组成,如图4所示。
TAPI线路功能模块负责利用TAPI创建电话线路,实现电话功能。该模块采用Singleton设计模式,对于一个用户应用程序只有唯一的TAPI线路功能模块对象,这使所有电话都只有在唯一线路上操作。
电话管理模块CCallManager实现电话的管理,和TsP消息的封装。上层用户应用程序只和电话管理类交互。TAPL线路功能模块和电话管理模块之间采用消息队列进行通信,降低了模块间的依赖性。通话记录模块CRecordManager和通讯录模块CContactManager是辅助模块,进行数据库的读写。
3.2电话功能实现
电话管理层在TAPI线路功能模块中利用TAPI实现电话呼入、拨出、切换等功能。TAPI采用客户端服务端模式,由TAPI和TSP两个部分所组成。TAPI处于客户端,为上层应用提供API。TSP处于服务端,由通信设备制造商提供,操作来A符合TAPI规范的应用的请求。
由于电话系统基于RIL,在利用TAPI函数linelnitialize初始化线路时,向RIL Driver进行注册,并获得属于电话进程的RIL Proxy。初始化线路的同时指定接收两P返回消息的回调函数lineCallbackFunc。因此对TAPI的调用最终通过RIL Proxy发往RIL Driver,RIL Driver收到的相应消息经过TSP返回给回调函数。
由于在TAPI中以句柄HCALL为唯一标识对电话的操作,因此在TAPI线路功能模块中将电话的句柄和号码进行一一映射,句柄用于功能实现,号码用于和电话管理模块的交互。
3.3多个电话的管理
电话管理模块对当前所有电话进行管理。电话管理模块维护一个响铃状态电话m_pRingingCall和一个用于存放所有处于连接(接通、保持)状态电话的容器m_vCalls。每个电话以号码作为唯一ID,电话的状态包括:响铃(包括来电响铃和呼出拨号响铃)、活动、保持、断开。状态的转换如图5所示。电话管理模块管理各电话状态间的切换,例如通话中接听新来电,电话管理模块将原电话状态由活动转为保持,将新电话状态由响铃转为活动并放入m_vCalls。电话管理模块使得任意时刻用户可以方便地获得电话系统的状态和当前电话的信息。
3.4电话系统优化
磷腿早已成为标准接口,但是由于髓瑚∈用异步消息处理机制,同时这些消息又与通讯设备模块密切相关,造成了电话应用程序开发上的困难,同时使应用程序的可设移计植在性删较路差功,能不模利块于中消费只类对电标子准产删品息的做开出发响。因应此,本而将具体电话状态细节交由电话管理模块分析。
以电话挂断为例(如图6所示)。在线路功能模块会收到碱断消息LINECALLSTATE_DISCONNECTED,任何通讯设备模块都会支持这个消息。这个消息根据不同挂断情况又细分了不同的子消息,如表示对方电话正忙的LINEDISCONNECTMODE_BUSY 消息,表示对方普通挂断的LINEDISCONNECT_NORMAL消息等。这些消息和具体的通讯设备模块相关,SIM300D没有这些子消息,因此不能让用户应用程序直接与TAPI交互,需要引入电话管理模块。在TAPI线路功能模块中在接收到LINECALLSTATE_DISCONNECTED消息后向电话管理模块发送断开消息,由电话管理模块根据电话的状态(例如是否是接通电话,是否主动挂断)分析挂断的原因通知上层用户应用程序。这样就增强了电话系统的可移植性。
随着嵌入式设备和通信网络的飞速发展,消费者对移动通讯的需求不断增加。电话系统成为消费类嵌入式设备中一个非常重要的组成部分。在很多嵌入式系统中,应用程序通过直接lhJGPRS模块发送AT命令实现电话通讯功能。这种方法具有很大的硬件相关性,随着应用复杂度的增加会造成系统难以维护,并且不具备可移植性。
无线接口层(RIL)最初是针对Windows Mobile操作系统引入的组件,用于屏蔽Modem硬件设备细节。RIL将上层应用请求转化为与具体硬件设备相关的AT命令发送给Modem设备,使上层软件可以通过RIL无缝地与GSM/GPRS通信。上层软件将RIL作为逻辑设备,发送与硬件设备无关的命令,实现和底层设备交互的功能。
由于RIL具有屏蔽底层硬件设备细节的特点,因此本文在其基础上进行电话系统设计,使电话系统具有较强的硬件无关性。本设计利用电话应用程序接口(TAPI)实现电话基本功能,并且引入电话管理层,对电话系统进行管理和优化,使上层应用和底层硬件设备完全剥离,使电话系统具有较强的可移植性。
1 基本原理
1.1 CPU和GPRS模块通信原理
嵌入式系统的模块化和可裁剪性决定了大多数嵌入式移动设备都采用双核架构一核心的应用处理器和基带处理器GPRS模块,两者通过串口连接,采用握手方式发送AT命令进行通信。通常上层应用程序可以直接发送AT命令实现电话功能,但会使系统缺乏可移植性,并且系统状态难以维护。
本设计所基于的RIL可以解决这个问题。RIL处于应用程序之下,GPRS模块之上,如图l所示。RIL屏蔽了硬件上的细节,负责传输数据;发送AT命令;接收来自GSM/GPRS模块的响应。上层应用只需将与设备无关的请求发送到RIL,由RIL实现与底层通讯硬件设备的交互。
1.2 RIL原理
RIL分为RIL Driver和RIL Proxy两部分。RIL Driver以流驱动的方式实现,负责AT命令的发送和响应的接收,整个系统只有唯一的一个RIL Driver。每个应用程序有独立的RIL Proxy,和RIL DriverJ注行交互。应用程序使用RIL的流程如图2所示。
首先应用程序注册到RIL Driver,获得一个RIL Proxy。此后应用程序通过RIL Proxy发送与硬件无关的请求。融L Proxy将请求发送给Device Manager,Device Manager根据控制码将请求发送给RIL Driver。最后RIL Driver将上层应用传来的与设备无关的请求转化为与具体硬件设备相关的AT命令写到串口,发送给GPRS模块,实现一次命令的发送。
同样地,对于GPRS模块返回的响应,RIL Driver从串口将命令读出,将与硬件相关的响应转换为硬件无关的通知放入通知队列,发送给相应的RIL Proxy。
2 系统硬件架构
本系统中作为核心的嵌入式开发板采用的应用处理器为Monahans310,通过串口与SIMCOM公司生产的型号为SIM300D的GPRS模块相连。应用处理器通过串口向GPRS模块发送AT命令实现电话、短信、上网等功能。系统硬件如图3所示。SIM300D支持MUX功能,支持数据和语音的同步传送,并与音频模块9713相连,实现语音输入输出功能。
3 软件设计与实现
本文所设计的电话系统以RIL为基础,利用电话应用程序接口(TAPI)实现电话功能。本设计中电话系统的主体是电话管理层,在电话管理层中实现电话功能、电话管理和电话系统优化。电话管理层的引入降低了应用程序和设备硬件的相关性,增强了系统的可移植性。
3.1电话管理层架构
电话管理层的作用有以下三点:利用TAPI实现电话呼入、拨出、切换等功能;对电话进行管理,实现多路电话切换,增强电话系统的健壮性;封装TSP(电话服务提供接口)消息,使上层用户程序不依赖于具体TSP消息,增强了电话系统的可移植性。
电话管理层由TAPI线路功能模块CTapiLine、电话管理模块CCallManager和辅助模块三部分组成,如图4所示。
TAPI线路功能模块负责利用TAPI创建电话线路,实现电话功能。该模块采用Singleton设计模式,对于一个用户应用程序只有唯一的TAPI线路功能模块对象,这使所有电话都只有在唯一线路上操作。
电话管理模块CCallManager实现电话的管理,和TsP消息的封装。上层用户应用程序只和电话管理类交互。TAPL线路功能模块和电话管理模块之间采用消息队列进行通信,降低了模块间的依赖性。通话记录模块CRecordManager和通讯录模块CContactManager是辅助模块,进行数据库的读写。
3.2电话功能实现
电话管理层在TAPI线路功能模块中利用TAPI实现电话呼入、拨出、切换等功能。TAPI采用客户端服务端模式,由TAPI和TSP两个部分所组成。TAPI处于客户端,为上层应用提供API。TSP处于服务端,由通信设备制造商提供,操作来A符合TAPI规范的应用的请求。
由于电话系统基于RIL,在利用TAPI函数linelnitialize初始化线路时,向RIL Driver进行注册,并获得属于电话进程的RIL Proxy。初始化线路的同时指定接收两P返回消息的回调函数lineCallbackFunc。因此对TAPI的调用最终通过RIL Proxy发往RIL Driver,RIL Driver收到的相应消息经过TSP返回给回调函数。
由于在TAPI中以句柄HCALL为唯一标识对电话的操作,因此在TAPI线路功能模块中将电话的句柄和号码进行一一映射,句柄用于功能实现,号码用于和电话管理模块的交互。
3.3多个电话的管理
电话管理模块对当前所有电话进行管理。电话管理模块维护一个响铃状态电话m_pRingingCall和一个用于存放所有处于连接(接通、保持)状态电话的容器m_vCalls。每个电话以号码作为唯一ID,电话的状态包括:响铃(包括来电响铃和呼出拨号响铃)、活动、保持、断开。状态的转换如图5所示。电话管理模块管理各电话状态间的切换,例如通话中接听新来电,电话管理模块将原电话状态由活动转为保持,将新电话状态由响铃转为活动并放入m_vCalls。电话管理模块使得任意时刻用户可以方便地获得电话系统的状态和当前电话的信息。
3.4电话系统优化
磷腿早已成为标准接口,但是由于髓瑚∈用异步消息处理机制,同时这些消息又与通讯设备模块密切相关,造成了电话应用程序开发上的困难,同时使应用程序的可设移计植在性删较路差功,能不模利块于中消费只类对电标子准产删品息的做开出发响。因应此,本而将具体电话状态细节交由电话管理模块分析。
以电话挂断为例(如图6所示)。在线路功能模块会收到碱断消息LINECALLSTATE_DISCONNECTED,任何通讯设备模块都会支持这个消息。这个消息根据不同挂断情况又细分了不同的子消息,如表示对方电话正忙的LINEDISCONNECTMODE_BUSY 消息,表示对方普通挂断的LINEDISCONNECT_NORMAL消息等。这些消息和具体的通讯设备模块相关,SIM300D没有这些子消息,因此不能让用户应用程序直接与TAPI交互,需要引入电话管理模块。在TAPI线路功能模块中在接收到LINECALLSTATE_DISCONNECTED消息后向电话管理模块发送断开消息,由电话管理模块根据电话的状态(例如是否是接通电话,是否主动挂断)分析挂断的原因通知上层用户应用程序。这样就增强了电话系统的可移植性。
- 蓝牙无线电调制解调器Siw1701原理与应用(02-19)
- 嵌入式移动数据库的关键技术(03-20)
- 在嵌入式SQL中怎样使用游标(08-12)
- 嵌入式Linux系统软件开发学习思路详细介绍 (08-20)
- 基于AVR单片机的嵌入式“瘦服务器”系统设计思想(03-11)
- 嵌入式系统设计中的存储碎片收集策略(05-04)