1. 程式人生 > >硬體介面開發之Modem來電顯示

硬體介面開發之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方法中初始化控制元件的一些屬性。如下程式碼所示。 Code
然後我們就只需要關注axApax1_OnRing和axApax1_OnTapiCallerID處理函數了,如下程式碼所示
Code
最後關閉程式的時候要釋放資源,否則會出現COM錯誤的,程式碼如下所示。
Code