硬件接口开发之Modem来电显示

     本文介绍下如何实现Modem的来电显示的功能。Modem的来电显示是在我最早的送水管理软件中实现的,大概是05年完成的,由于Modem的成本比较低(普通的在100元之内),而来电显示功能在送水管理软件中比较需要,因此是一项性价比比较好的功能。
     随着时间的推移,Modem的生产越来越少,而支持来电显示模块的Modem就更少一些了,取而代之是功能比较专一的来电显示盒横行天下,一般USB来电显示盒都可以支持2路、4路、8路等等,但是USB来电显示盒较贵,Modem由于性价比比较好,市场上依然还继续出现。本篇主要介绍如何实现Modem的来电显示,下篇将继续介绍基于USB的来电显示盒的接口开发。目前在我的送水软件中,为了兼顾两者的好处,一般是集成了两个硬件的功能,随便选一个硬件都可以使用来电显示功能。
    看看Modem来电显示的应用场景,在送水软件中,链接一台电话(Modem只能连接一台电话),当有客户的电话接入的时候,软件会提示用户的信息,并进入下订单的界面,如下所示。


    这样非常方便业务员的信息输入,同时还可以调出更多客户的相关信息,如客户的账号信息,购买记录作为默认这次订单的操作等,达到优质服务的目的。如下这个改进版的送水软件的来电显示功能就提供了客户财务信息,默认上次的购买记录等信息。



Modem的来电显示功能需要下面所需的前提条件。
一、 实现来电显示的系统最小需求。
       1. 你的固定电话已经向电信局申请开通了来电显示功能,若没有申请,即使MODEM支持也是不行的。
       2. 安装了MODEM的专用驱动软件( 注意不要使用Windows如XP自带的驱动程序)。
       3. MODEM支持来电显示。不管是内置MODEM,外置MODEM,只要它支持来电显示即可。

二、怎么判断MODEM是不是支持来电显示?
       1. 打开超级终端,随便输入一个连接名称,比如TEST。
       2. 按确定后,下个窗口中,看到你的MODEM,不要输入电话号码。再下一步。
       3. 在这个窗口中按取消。
       4. 这样一个可以输入的空白窗口就有了。
       输入:AT回车
       如果出现OK,说明MODEM支持AT指令,不然,其他也不用试了。
       然后输入下面的命令(每条前面加上AT),只要一条反应有OK,就说明MODEM本身芯片支持来电显示。
       #CID=1
       %CCID=1
       +VCID=1
       #CC1
       *ID1

三、Modem 驱动安装的问题
       如果您的操作系统是Windows 2K/XP,当安装MODEM驱动程序的时候,会自动安装操作系统自带的MODEM驱动,而此驱动程序只能支持数据传送(即只能用来拨号上网,而没有传真和语音功能)。所以您必须升级MODEM的驱动程序,并且在升级的时候手工指定到跟随MODEM的光盘中的驱动程序(而不让系统自己搜索)。并且在升级完之后重新启动系统。


下面介绍如何在C#中实现来电显示模块的功能。

Modem的来电显示需要一个和串口打交道的控件Apax Control,它是一个ActiveX的控件,原则上可以应用在任何语言中,本文只介绍在C#中的应用。
首先需要注册ActiveX控件,然后在开发IDE中引用控件,把控件拖动到界面上,如下所示。


然后生成目录会多出几个文件,如下所示。


在代码中,我们可以再Form_Load方法中初始化控件的一些属性。如下代码所示。
ContractedBlock.gif ExpandedBlockStart.gif Code
                // 设置来电显示控件的属性
                this.axApax1.EnableVoice = true;
                
this.axApax1.Visible = false;
                
this.axApax1.TapiStatusDisplay = false;
                
this.axApax1.TapiAnswer();
                
this.axApax1.OnRing += new EventHandler(axApax1_OnRing);
                
this.axApax1.OnTapiCallerID += new IApaxEvents_OnTapiCallerIDEventHandler(axApax1_OnTapiCallerID);

然后我们就只需要关注axApax1_OnRing和axApax1_OnTapiCallerID处理函数了,如下代码所示
ContractedBlock.gif ExpandedBlockStart.gif Code
        /// <summary>
        
/// 来电响铃后的处理事件
        
/// </summary>
        private void axApax1_OnRing(object sender, EventArgs e)
        {
            
//由于此函数会触发3次,故使用axApax1_OnTapiCallerID事件进行处理。
        }

        
/// <summary>
        
/// 来电响铃后的处理事件
        
/// </summary>
        private void axApax1_OnTapiCallerID(object sender, IApaxEvents_OnTapiCallerIDEvent e)
        {
            ComingCallUtil.PlaySound();
            
string oldCaption = this.Text;
            
this.Text = "最近一个客户来电号码:" + this.axApax1.CallerID;
            
string phoneNumber = this.axApax1.CallerID;

            
this.axApax1.Close();
            
this.axApax1.TapiAnswer();

            Portal.gc.CustomerComingCall(phoneNumber);
            
this.Text = oldCaption;
        }

最后关闭程序的时候要释放资源,否则会出现COM错误的,代码如下所示。
ContractedBlock.gif ExpandedBlockStart.gif Code
        /// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>
        protected override void Dispose(bool disposing)
        {
            
if (this.axApax1 != null)
            {
                
this.axApax1.Dispose(); //必须执行,否则出错
            }

            Portal.gc.Dispose(); 
//伍华聪 
            if (disposing)
            {
                
if (components != null)
                {
                    components.Dispose();
                }
            }
            
base.Dispose(disposing);

        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值