- UID
- 1029342
- 性别
- 男
|
2.4 DTMF语音拨号、来电显示驱动的设计与实现由于DTMF芯片要提供双音多频拨号的功能,所以与FSK芯片驱动相比,DTMF芯片驱动中多了一个write函数。DTMF芯片的多音多频拨号部分有2根线和CPU相连:1根数据线、1根时钟线。Write函数实际上就是根据芯片的写时序把用户进程发来的数据传送到芯片上去。
相比于FSK来电显示信息的接收而言,DTMF来电显示信息的接收就比较容易了。DTMF来电显示芯片提供了1根中断信号线和4根并行数据线,每次中断来只需要读并行信号线,并进行简单的解码、缓存工作就可以了。此外为了方便,把摘、挂机,抬高、拉低静音等命令者包含此驱动的iotcl命令集中了;和FSK驱动一样,为了防止干扰对DTMF来电显示信息的影响,也在iotcl命令提供了打开、关闭DTMF来电显示中断的命令。
3 应用软件的设计与实现
接入点应用程序位于前面介绍的硬件平台以及设备驱动程序之上,三者之间的关系如图5所示。接入点应用程序是整个软件的核心,它与串口驱动程序、FSK来电显示驱动程序、DTMF来电显示驱动程序、DTMF拨号驱动程序、Flash驱动程序、振铃驱动程序交互,并通过后五个驱动程序控制具体硬件完成相关功能。
接入点可以对允许接入的蓝牙终端属性进行设备,只有被授权的蓝牙终端才能通过接入点访问PSTN。接入点的Flash可设置多个允许接入的蓝牙终端,并可通过与网关并联的电话进行增添、删除一个或全部删除终端设置的操作。
对于设置为双模的蓝牙手机,必须先向网络登记,网络返回成功信息的方可与网关建立物理和逻辑链路;而在双模手机主动与网关拆开物理链路时,也必须向网络登记。接入点可以发现已登记的双模手机是否离开本网关信号覆盖范围,并自动向网络登记,将双模手机的话务切换回移动网络中,而并模终端无需这样的操作。网关可同时与7个蓝牙终端建立ACL(Asynchronous Connection Less)
对于不同调制方式(FSK及DTMF)来电均能接收号码以及振铃,并根据来电号码分析被呼叫方,根据蓝牙无绳电话协议CTP(Cordless Telephony Profile)建立起TCS(Telephone Control Specification)链路、SCO(Synchronous Connection Oriented)链路。当来电显示为非特服号开头的号码时,表示来电来普通电话,所有与网关相连的分机终端都振铃。某一终端接听后,其它终端停止振铃,回到空闲状态。当来电显示为特服号开头的时候,表示来电为访问特定终端的话务,可以分析来电显示的格式得到接入顺序号,并使对应的蓝牙终端振铃。蓝牙双模或者单模终端能通过网关、PSTN网络拨打外部电话,网关支持终端多次拨号,并且外部电话能收到来电显示。
图6
我们设计的应用程序流程如图6所示。在μClinux系统中,此应用程序被视为一个用户进程。在系统启动rc脚本文件的末尾添加该进程,则系统在完成初始化工作后会自动启动该进程。对用户进程而言,硬件设备被视为设备描述文件,它和普通的文件没有区别,可用文件描述符(一个非负整数)表示。在程序启动时,用Linux系统提供的open函数打开这些设备,同时设置这些设备的工作方式;启动蓝牙协议栈,并设置工作模式、服务发现数据库和其它参数,使网关始终处于被发现和被动建链的一方。
此后应用程序地侦听、等待各设备数据的到来,我们采用了I/O多咱转接的技术来实现对多个描述符的读、写和管理。该技术的基本思想是:先构造一张有关描述符的表,然后调用一个函数,它要到描述符中的一个已准备好表示I/O时才返回。在返回时,它告诉进程哪一个描述符已准备好可以进行I/O。select函数可以执行I/O多路转换,传向该函数的参数告诉内核我们所关心的描述符、对于每个描述符我们所关心的条件(是否读一个给定的描述符?是否想写一个给定的描述符?是否关心一个描述符的异常条件?)以及希望等待的时间(可以永远等待、等待固定时间或完全不等待)。我们在程序中设置了永远等待,即只有所指定的描述符中的一个已准备好或捕捉到一个信号才返回。从select返回时,内核告诉我们已准备好的描述符的数量和哪一个描述符已准备好读、写或异常条件,应用程序这个信息进入相应的处理子模块。
结语
基于嵌入式μClinux系统的蓝牙PSTN网关实现了上术的所有功能,使蓝牙三合一电话的应用成为现实。最多7个蓝牙终端能同时与该网关建立物理和逻辑链路,网关能建立起一条语音链路。经实测,在传输距离不超过10m的前提下,话音质量良好,清晰无失真;在传输距离超过10m后,由于蓝牙的自动功率控制功能,会增大发射功率,模拟语音电路部分引入的电磁干扰噪声增加,影响通话效果,此问题可以通过调整PCB布局布线和对易干扰电路增加屏蔽来消除。根据标准蓝牙协议,蓝牙终端和网关之间最多可建立起3条语音链路,这将在下一个版本中加以改进。 |
|