原文地址:http://xiaoruanjian.iteye.com/blog/1092488
介绍
Windows Embedded CE可以通过CellCore架构(蜂窝无线通信系统TAPI服务提供者)和Telephony API(TAPI 2.0 Unimodem 驱动)提供GPRS通信。CellCore架构是一个高级特性的架构,它对GSM调制解调器的功能要求较高。不幸的是,不是所有的调制解调器都支持CellCore架构要求的所有特性。并且由于软硬件的价格限制,一些应用并不倾向采用具有高级特性的调制解调器。在这些情况下,CellCore架构不是一个好选择,应用可以使用Windows CE提供的Telephony API做为替代。使用TAPI不是直接了当的,它有一些限制需要解决。本文着重于解决这些限制。
面向的读者
GPRS连接文章的第一部分(在Windows CE 6.0中使用GPRS连接)着重说明了如何通过拨号网络来建立GPRS数据连接。
该文章的读者提出了一些问题,比如:
在数据连接有效时如何发送短消息?
如何访问SIM卡上的地址簿或者如何获取信号强度?
对于以上所有问题和类似的问题,有一个单一的解决方法。本文将着重说明此方法及其实现。本文适合于许多类型的读者,包括工程师、经理和wince爱好者,如果他们希望在数据连接有效时同时进行一些并行的工作,例如信号强度检测、地址簿查询等。
如果工程师只对通过拨号网络的GPRS数据通信感兴趣,则可以阅读在Windows CE 6.0中使用GPRS连接这篇文章。
范围
本文的范围限于支持CMUX规约(GSM07.10标准的一部分)的调制解调器。
Telephony API
Telephony API(TAPI 2.0)被开发出来的目的是通过基于AT命令的调制解调器建立数据连接。由于GSM调制解调器基于AT命令,TAPI被用于建立GPRS数据连接。通过使用RAS API,GPRS连接可以被建立。
图1. TAPI结构
Telephony API使用通用调制解调器驱动(AT命令调制解调器的TSP)来建立GPRS连接。Unimodem使用串口驱动来访问调制解调器。请参考在Windows CE 6.0中使用GPRS连接这篇文章来获得关于使用Telephony API的GPRS数据通信方面的更多信息。
Unimodem结构的限制
通常当GPRS通信被建立后,其相应的串口状态为忙,其它进程不能对它访问,该串口只被用于unimodem驱动。这对于使用GSM调制解调器的一些简单功能,像获取信号强度、访问电话本等来说是一个大障碍,除非有一个专用的端口用于这些功能。不幸的是不是所有的调制解调器都有双串口来支持同时使用GPRS和其它的一些调制解调器功能。并且添加一个串口将增加硬件的费用开销。以下部分将说明现在的GPRS调制解调器的结构和如何使用调制解调器内提供的内部多路复用器来解决这些限制问题。
目前的GSM/GPRS调制解调器结构
图2. GSM调制解调器的多路复用器
图2绘出了GSM/GPRS调制解调器的结构。如上所示,每个GPRS/GSM调制解调器都有一个内部多路复用器,该复用器从串口获取命令并传送到对应的信道,如电路交换数据、包交换数据、状态/控制和访问电话号码簿等。基本上,客户应用程序和MUX进行通信(下面将说明其中涉及到的一些步骤)。现在大多数的多路复用器都被设计成支持CMUX协议(GSM07.10标准的一部分),它们在GSM/GPRS调制解调器和终端设备(TE)之间运作,允许在一个通常的异步串行接口上同时存在一些过程(信道)。每个过程(信道)包含有字节流来传送各种数据,例如语音、传真、短信、信元广播服务、电话号码簿的维护、电池状态、GPRS和USSD等。这将允许在保持数据连接的同时将短信和信元广播服务传送给终端设备。许多其它组合也是可能的,包括数字语音。例如可以传送数字语音和短信的组合。每个信道都有自己的缓冲区管理和流控制机制。CMUX规约最多支持64个这样的信道。
Windows Embedded CE 6.0 GSM 7.10 MUX驱动
Windows Embedded CE 6.0在CellCore架构中支持GSM 7.10多路复用器驱动组件,此驱动对于CellCore架构来说是可分离的。对于应用程序来说,根据调制解调器的功能,这些信道可以被当作虚拟串口来访问。通常GSM调制解调器不在多路复用器模式下工作。GSM0710多路复用器驱动会发送AT+CMUX命令使多路复用器模式可用,之后驱动会发送SABM帧来请求信道。第一个信道是控制信道,剩下的信道是通信信道。这些信道被视为虚拟COM口。图3显示了多路复用器可用的GSM调制解调器和Windows CE设备之间的接口。
图3. GSM调制解调器和Windows CE多路复用器驱动的接口
将unimodem驱动和MUX集成
在GSM调制解调器上同时进行若干上面提到的操作的一种方法,就是使用MUX驱动提供的虚拟串口。有两种方式可以进行GPRS数据通信。第一种方法是移植unimodem驱动来用虚拟串口建立GPRS数据通信,另一种方法是写自己的TSPI驱动来做同样的事。两种情形都需要工程师较好地理解Windows Embedded CE 6.0的GSM07.10驱动和TSPI驱动的工作原理。
开发自有的TSPI驱动
在wince600/public/common /oak/ drivers /SAMPTSPI目录下可以找到TSPI的示例驱动程序。自己的TSPI驱动可以在此驱动上开发。问题是开发和测试时间会很长。
移植Unimodem驱动
图4显示了如何可以将Unimodem驱动与MUX驱动结合。因为MUX驱动可能不支持unimodem可能会需要的一些IOCTL调用,所以unimodem驱动需要被移植。移植unimodem驱动不需要花很多时间,因为这个驱动是已开发好并被测试过的。
将会遇到的问题
GSM7.10多路复用器驱动提供了虚拟串行端口。此驱动被实现为一个通常的串口驱动,并需要处理许多来自unimodem驱动的IOCTL调用。Unimodem期望打交道的对象是个串口驱动,而实际上是多路复用器驱动接收了这些调用。这些IOCTL被通过标准的串口驱动API访问。不幸的是多路复用器驱动不支持所有的这些IOCTL调用。例如urgeComm()这个API。此函数会丢弃指定的通信资源中的所有输入和输出缓冲区的字符。但是与此API对应的IOCTL在多路复用器驱动中没有实现。而通常的串口驱动会支持此调用。所以unimodem驱动的一些函数要被移除,或者多路复用器驱动要实现一些API调用。
图4. 多路复用器上的TAPI
收益
数据传输和其它一些功能,如短信、地址簿等,可以同时进行。
可以写定制化的应用程序来实现无缝化的语音和数据通信。
CellCore架构中的语音通信支持被包含在Windows CE professional license里。
为语音通信写定制化的应用程序并用unimodem实现数据传输将会节省费用开销。
总结
如上所述一个多路复用器可用的GPRS调制解调器可以在被用于发送数据的同时也被用于发送短信,访问电话号码簿等。