【正文】
[4] 李現(xiàn)勇 .Visual C++串口通信技術(shù)與工程實(shí)踐 [M].北京:人民郵電出版社, 2020。 第 15 頁(yè) 共 17頁(yè) 參考文獻(xiàn) [1] Cllarks Mirho amp。 結(jié) 論 從目前的發(fā)展情況來(lái)看, MODEM 已經(jīng)成為遠(yuǎn)距離通信的一種重要工具。這些測(cè)試同時(shí)在 Windows 20 Windows XP 系統(tǒng)下同時(shí)進(jìn)行。 } 5 軟件測(cè)試 模塊編程完結(jié)之后,設(shè)計(jì)測(cè)試用例,對(duì) GUI 界面外觀和功能等進(jìn)行檢測(cè)。dwWriteLen,FALSE)。dwWriteLen,amp。 return 0。ov)。 …………………… //ov 的初始化設(shè)置 for(。 } 第 13 頁(yè) 共 17頁(yè) int CTapiLine::GetIningCall()//應(yīng)答 {………………………………………………… .. lRet = lineSetNumRings(m_hLine,0,5)。里面封裝了 lineMakeCall 和 lineAnswer 兩個(gè) TAPI 類(lèi)成員函數(shù)。m_hLine, dwTAPIVer, 0x00000000, 1,LINECALLPRIVILEGE_OWNER,dwMediaMode,NULL)。 break。// 取得設(shè)備的性能 ……………………………………… 第 12 頁(yè) 共 17頁(yè) lRet = lineGetDevCaps(m_hLineApp, i, dwTmpVer, 0, lpDevCaps)。dwTmpVer, amp。//得到事件的句柄 m_nDevID = 1。dwNumDevs, amp。在進(jìn)行線路操作時(shí)調(diào)用TAPI 的類(lèi)成員函數(shù)需要同時(shí)取得設(shè)備和線路的狀態(tài),所以我對(duì) TAPI 的類(lèi)成員函數(shù)進(jìn)行了封裝,使這些操作都模塊化。 CTapiLine()。 int MakeOutgoingCall(const char *szAddress)。 public: HANDLE GetHandle(const char *szClassType, long *lError)。// HANDLE m_hLineMsgThread。//設(shè)備號(hào) HANDLE m_hLineEvent。類(lèi)的定義如下: class CTapiLine { protected: HLINEAPP m_hLineApp。通過(guò)次句柄我們就可以利用 WriteFile 和ReadFile 來(lái)讀寫(xiě)數(shù)據(jù)了。 非等待模式下要先定義一個(gè)OVERLAPPED 變量,并且作為函數(shù)的最后一個(gè)參數(shù)傳遞進(jìn)去。 因?yàn)? MODEM 通過(guò)控制計(jì)算機(jī)串口來(lái)進(jìn)行通信,所以 MODEM 的數(shù)據(jù)通信與串口數(shù)據(jù)通信的方法一樣,采用 ReadFile 和 writeFile 函數(shù)來(lái)接收數(shù)據(jù)和發(fā)送數(shù)據(jù)。 (4)LINECALLSTATE_SPECIALINFO 特別的消息,此時(shí)應(yīng)斷接,釋放掉占用的資源; (5)LINECALLSTATE_OFFERING 應(yīng)答方已收到呼叫方信號(hào),此時(shí)應(yīng)進(jìn)行應(yīng)答,調(diào)用 lineAnswer 函數(shù); (6)LINECALLSTATE_CONNECTED 已連接成功,此時(shí)可進(jìn)行數(shù)據(jù)的傳輸,但必須先得到 MODEM 的句柄 (7)LINECALLSTATE_DISCONNECTED 已斷接,此時(shí)應(yīng)釋放掉占用的資源。 TAPI 類(lèi)成員函數(shù) mylineGetDevCaps 獲得有關(guān)邏輯線路的性能的信息 Windows 把這些信息填充到一個(gè)名為 LINEDEVCAPS 的只讀結(jié)構(gòu)中,應(yīng)用程序檢查這個(gè)結(jié)構(gòu)就可以了解哪些設(shè)置是驅(qū)動(dòng)程序所允許的 TAPI 類(lèi)成員函數(shù) lineOpen 打開(kāi)線路。 (9) 結(jié)束 TAPI 的使用:在一切有關(guān) TAPI 的操作完成之后,調(diào)用lineShutdown()函數(shù)來(lái)終止 TAPI 的使用,它會(huì)隱含地關(guān)閉所以打開(kāi)的線路設(shè)備。應(yīng)用程序通過(guò)調(diào)用 lineAnswer( )函數(shù)來(lái)自動(dòng)應(yīng)答呼叫。 (3) 獲取線路設(shè)備的性能:應(yīng)用程序通過(guò)調(diào)用 lineGetDevCaps ( )函數(shù)來(lái)確定所使用的 TAPI 版本提供的線路設(shè)備能力。 3 程序設(shè)計(jì)思想與流程 使用 TAPI 開(kāi)發(fā)的基本思路 使用 TAPI 能夠比較方便地發(fā)出一個(gè)呼叫和應(yīng)答一個(gè)呼叫,它對(duì)呼叫的操作簡(jiǎn)單方便,給開(kāi)發(fā)者帶來(lái)了很大的方便。在呼叫改變狀態(tài)時(shí), Windows 會(huì)通知控制應(yīng)用程序。 (5) 呼叫 呼叫 (call) 是當(dāng)兩個(gè)線路設(shè)備由電話網(wǎng)絡(luò)連接在一起時(shí)存在的一種交互狀態(tài)。一部典型的電話包括叉簧和轉(zhuǎn)換器組成。典型的電話線路稱(chēng)為 POTS ( Plain old Telephone service 普通老式電話服務(wù))。線路設(shè)備( Line device)是任何連接計(jì)算機(jī)到電話線或者線路的物理設(shè)備,如調(diào)制解調(diào)器或 ISDN 卡等。如果兩者相等, TAPI 就能夠找出用于所有變長(zhǎng)數(shù)據(jù)的控件。 TAPI 首先證實(shí)該結(jié)構(gòu)有足夠大空間容納其定長(zhǎng)部分,然后填充定長(zhǎng)域,接著填入變長(zhǎng)項(xiàng)。其大小包括字符串末尾的空字符。在這三個(gè)域后面是固定長(zhǎng)度的域,對(duì)每個(gè)給定的結(jié)構(gòu)類(lèi)型固定長(zhǎng)度的域都具有同樣的長(zhǎng)度。 TAPI 的基本概念 (1) 設(shè)備 ID 設(shè)備 ID 是從零開(kāi)始按順序分配給每個(gè)設(shè)備的 ID;也就是說(shuō),如果安裝了 4個(gè)線路設(shè)備,這些線路沒(méi)備的設(shè)備 ID 相應(yīng)為 0、 3。 TAPI的體系結(jié)構(gòu) 圖 1 是 TAPI 體系結(jié)構(gòu)示意圖。 TAPI為通信應(yīng)用程序提供控制通信的功能,包括數(shù)據(jù)、傳真、語(yǔ)音,以及處理計(jì)算機(jī)與電話網(wǎng)之間的信號(hào)燈。 TAPI 通信編程 TAPI的含義 計(jì)算機(jī)電話集成( Computer Telephony Integration,縮寫(xiě) CTI)是計(jì)算機(jī)技術(shù)和電信技術(shù)相結(jié)合的產(chǎn)物。開(kāi)發(fā)者利用串行通信 API 再加上基本的 Hays 兼容的 AT 命令,就可以實(shí)現(xiàn)對(duì) MODEM 的控制。調(diào)制解調(diào)器 (MODEM)被用來(lái)實(shí)現(xiàn)數(shù)字信號(hào)到模擬信號(hào)和模擬信號(hào)到數(shù)字信號(hào)的相互轉(zhuǎn)換。因此,建立窗口后,將進(jìn)入一個(gè)循環(huán)。對(duì) 于一些特殊窗口,如按鈕等控件,他們的行為是系統(tǒng)制定好了的,所以不需要自己注冊(cè),直接使用對(duì)應(yīng)的“窗口類(lèi)”名稱(chēng)就行了。 } 窗口的建立 客戶需要自己建立窗口,建立后會(huì)得到系統(tǒng)返回的窗口句柄 (HWND),后繼的針對(duì)窗口的操作都針對(duì)句柄進(jìn)行。 客戶寫(xiě)一個(gè)消息處理函數(shù),在窗口建立前,將消息處理函數(shù)與窗口關(guān)聯(lián)。 消息處理函數(shù) Windows 程序是事件驅(qū)動(dòng)的,對(duì)于一個(gè)窗口,它的大部分例行維護(hù)是由系統(tǒng)維護(hù)的。 SDK 編程就是直接調(diào)用Windows 的 API 進(jìn)行編程, API 由上千個(gè) API 函數(shù)組成。 MODEM 能從計(jì)算機(jī)接收串行數(shù)據(jù),通過(guò) PSTN 電話網(wǎng)傳送給另一端的 MODEM ,所以使用 MODEM 可以實(shí)現(xiàn)兩臺(tái)遠(yuǎn)程計(jì)算機(jī)的互聯(lián),就像組成一個(gè)廣域網(wǎng)絡(luò)系統(tǒng)一樣。因此在網(wǎng)絡(luò)不發(fā)達(dá)地區(qū),在無(wú)網(wǎng)絡(luò)的情況下能用電話線進(jìn)行數(shù)據(jù)通訊就十分有意義了。 data Communications。s telephone Application Program Interface (TAPI), a standard application program interface (API), can help personal puters running Microsoft39。詳細(xì)的介紹了軟件開(kāi)發(fā)的的思路和流程,闡述了整個(gè)呼叫的生命周期內(nèi)的線路上所產(chǎn)生的狀態(tài)消息,以及依據(jù)這些消息而應(yīng)該進(jìn)行的具體操作。為了更好的發(fā)掘電話網(wǎng)絡(luò)的潛力,以及解決一些在沒(méi)有互聯(lián)網(wǎng)地區(qū)的數(shù)據(jù)的傳輸需要,開(kāi)發(fā)一種可以通過(guò)電話線路進(jìn)行數(shù)據(jù)傳輸?shù)能浖呛苡斜匾摹? 微軟的電話應(yīng)用程序接口( TAPI)是一種標(biāo)準(zhǔn)的應(yīng)用程序接口( API),使得個(gè)人電腦能夠通過(guò)運(yùn)行微軟的 Windows 系統(tǒng)來(lái)使用電話服務(wù)。根據(jù)軟件開(kāi)發(fā)的思路的指導(dǎo)以及整個(gè)線路消息為程序開(kāi)發(fā)的脈絡(luò),本文最后介紹了一個(gè)可以在 Windows 下面撥打?qū)Ψ降碾娫捥?hào)碼,當(dāng)雙方連通后可以通過(guò) 電話線路進(jìn)行數(shù)據(jù)傳輸?shù)某绦虻木幋a開(kāi)發(fā)過(guò)程 ,并且最后程序進(jìn)行了測(cè)試 。s Windows system to take use of telephone services. TAPI has encapsulated all AT mands for MODEM operation, which will only need users to call the TAPI function to initiate and answer a call, ra