基于TAPI和PBX实现双机互连互通
扫描二维码
随时随地手机看文章
引 言
计算机电话集成是计算机技术和电信技术相结合的产物。电信行业配备了各种各样的硬件系统,要设计一个考虑兼容所有种类的硬件系统的软件程序非常困难[1]。为了减轻开发者的负担,微软与Intel 联合创建了 Windows Telephony API(TAPI),给应用程序编程者提供一个接口,允许应用程序无需改变就可以适用多种多样的硬件系统。
1 TAPI通信原理
由于计算机与Modem 之间的通信方式均通过串口进行, 外置Modem 是通过串口线与计算机连接,内置Modem 通过虚拟串口实现通信 [2]。计算机与Modem 之间的通信由程序控制串口发送AT 命令数据到Modem。TAPI 扮演了应用程序与串口之间桥梁的角色,保证了软件开发的一致性。用户只需关注基于TAPI 的应用开发,而无需关注不同Modem 所对应的不同AT 命令集。
TAPI 是电话集成的编程工具, 已经被集成到 Win32 SDK 中[3],相关的模块是Tapi32.dll 和Tapisrv.exe。图 1 示意了 Windows TAPI 的结构。Tapi32.dll 运行于用户程序进程空间,TAPI 应用程序调用其中的功能函数 ;Tapi32.dll 与运行于TAPI 服务进程空间的 Tapisrv.exe 通信 [4] ;Tapisrv.exe 与通信硬件TAPI 服务提供者(TAPI Service Provider,TSP)DLL 通信;服务提供者DLL 直接与服务提供者驱动程序通信,并通过驱动程序操作硬件。
在 Windows NT 网络中, 第一次建立电话环境时, 应在进程中执行 1 个初始化调用来设置 TAPI 环境,包括加载Tapi32.dll、执行TAPI 服务Tapisrv.exe、加载注册库中有关的电话设备驱动程序[5]。
为了开发 TAPI 应用程序,必须调用Tapi32.dll 所提供的一系列函数。微软在 Win32 SDK 中提供了 Tapi32.dll 的头文件 Tapi.h 和输入库文件 Tapi.lib。任何调用Tapi32.dll 中函数的工程都必须包含此头文件和连接该输入库[6]。
2 TAPI通信实现
城际交换机连接两个计算机实现双机互连通信,如图 2 所示,因其线路简单、较容易实现,在现实中有许多应用场景。比如通过PC拨打电话,或者通过稳定可靠的电话线路收发送文件等。
在PC上开发应用程序实现采用电话线路通信,采用基于TAPI 类库构建用户类库的方法实现应用程序开发。在用户类库里实现编制电话数据应用程序,流程如图 3 所示。编制电话数据应用程序大致经过如下过程:
(1) 初始化 TAPI。通过调用函数lineInitializeEx在应用程序中完成 TAPI的初始化。
(2) 协调 TAPI版本。应用程序使用lineNegotiateAPI Version函数把 API使用版本通知给TAPI,返回与TAPI通信所能使用的版本。
(3)检查设备。调用lineGetDevCaps函数询问设备的能力,返回LINEDEVCAPS类型的数据结构。设备能力包括TAPI服务提供者、交换机信息、字符串格式、载波方式、数据传输等。
(4)打开线路。调用函数 lineOpen打开 1条线路设备,lineOpen返回线路设备的句柄,用以完成以后对此设备的各种操作。可以在 1个应用程序中打开多条线路。
(5)初始化线路状态。 通过调用函数 lineSetStatus Messages,初始化线路状态设置。
(6)创建侦听线路信息的线程,同时创建线程事件句柄和线程状态句柄。之所以需要线程状态句柄,是因为这里所实现的 TAPI通信软件系统中创建了反馈连接状态的线程,需要建立状态变化事件句柄通知该线程。
侦听线程工作时,获取线程事件,对 TAPI 事件根据消息 ID 种类分别应对处理。主要包括三种应对方法 :应答、呼叫信息处理、呼叫状态处理。呼叫状态再根据消息参数分别应对处理,处理方法包括:来电响应、空闲、连接、取消连接。线程事件触发处理流程如图 4 所示。
这里基于TAPI 和 PBX 实现的双机互联互通软件系统运行界面如图 5 所示。如果安装了数据模式的Modem,打开TAPI 通信后会获得TAPI 句柄,并据此可以进行串口通信;如果没有安装或安装了有问题的Modem 会报出无可使用设备的警示。在TAPI 通信没有打开的情况下,串行通信是不能使用的, 因为没有获得通信句柄。
为了测试互连互通功能,将一个 PC 作为被连接对象, 点击“等候”;将另一个 PC 作为主动连接对象,输入对端电话号码,并点击“拨号”。连接成功后即可互发数据。发送端输入一串字符点击发送,接收端读取到的数据显示在接受对话框里,收发数据相同,且反向拨号连接和反向数据收发都是可以的,至此实现了基于TAPI 和PBX 双机互连互通功能。
结 语
使用微软 TAPI 类库,实现了基于PBX 双机互连互通, 一方面说明基于TAPI 的电话线路通信无需关注底层Modem 板卡,只需关注应用开发 ;另一方面说明了采用微软这种电话API 通信架构确实有效,给应用开发带来了方便。