專利名稱:具有用戶應(yīng)用程序和電話程序之間的應(yīng)用編程接口和方法的無線通信裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及無線電通信裝置,該裝置包括一個用戶應(yīng)用程序(一般稱為一個應(yīng)用或小程序)和一個電話程序(例如一個電話類的一個實例)以及該用戶應(yīng)用程序和該電話程序之間的一個應(yīng)用程序編程接口(API)。本發(fā)明涉及API的很多方面并且涉及通過API調(diào)用的方法,例如建立雙模式呼叫的方法。
面向?qū)ο蟮某绦蛘Z言如Java(TM)由于可以在不同的平臺,操作系統(tǒng)和裝置之間移植而在越來越多的裝置中廣泛使用。這意味著為一個裝置開發(fā)的程序可以更容易地應(yīng)用于具有不同特征例如不同的操作系統(tǒng)或不同的微處理器的另一個裝置。
面向?qū)ο蟮某绦虻膽?yīng)用正擴(kuò)展到那些在內(nèi)存容量和處理能力方面明顯小于傳統(tǒng)個人計算機(jī)的設(shè)備和其它廣泛使用這種語言的平臺。由于許多原因在非常小的平臺上使用面向?qū)ο蟮恼Z言例如Java(TM)會出現(xiàn)問題。問題的一個例子在于需要支持一個完整的對象類的集合,其中一個對象是一個自包含計算機(jī)程序,它以規(guī)定的方式與其它程序交互,而且其中一個類是一組具有相似特點的對象的生成模板。一個問題是為了保持程序在不同的平臺間的可移植性,任何給定的應(yīng)用程序可以調(diào)用的類必須統(tǒng)一。例如,pJava(TM)有一個很大的類庫集合并正在努力定義一個只使用完整的類庫集合的一個子集的小一些的語言稱為“eJava”(TM)。
類的一個例子是一個可以通過Java(TM)電話API(JTAPI)調(diào)用的電話類。該類的一個實例可稱為一個“JTAPI實現(xiàn)”。
JTAPI是可移植的,基于JAVA(TM)的計算機(jī)-電話應(yīng)用程序的面向?qū)ο蟮膽?yīng)用程序編程接口描述在下面的廣域網(wǎng)的全球資源定位子上www.javasoft.com/products/JTAPI/index.html。該Java(TM)電話API支持第一和第三方電話應(yīng)用域。該API被設(shè)計為使能夠容易編制簡單的應(yīng)用,同時提供高級電話應(yīng)用程序所必需的特征。JTAPI是一組API。有一個“核心”API提供基本的呼叫模型和初級的電話特征,如發(fā)起電話呼叫和應(yīng)答電話呼叫。核心API由為特定的電話域如電話中心和媒體流訪問提供功能的標(biāo)準(zhǔn)擴(kuò)展API包圍。用JTAPI編寫的應(yīng)用程序可以在不同的計算機(jī)平臺和電話系統(tǒng)間移植。JTAPI的1.2版本于1997年12月發(fā)行于眾。
使用JTAPI的一個例子是在一個網(wǎng)絡(luò)配置中JTAPI應(yīng)用程序或JAVA(TM)應(yīng)用程序運行在遠(yuǎn)程站點,例如一個只有一個顯示器,鍵盤,處理器和一些內(nèi)存的網(wǎng)絡(luò)計算機(jī)。這個計算機(jī)利用管理電話資源的集中式服務(wù)器訪問網(wǎng)絡(luò)資源。JTAPI通過一個遠(yuǎn)程通信機(jī)制如Java(TM)的遠(yuǎn)程方法調(diào)用(RMI)或一個電話協(xié)議來與該服務(wù)器通信。Java(TM)電話API由一組Java(TM)語言包組成。每個包為計算機(jī)-電話應(yīng)用程序的一個特定方面提供一塊功能。電話服務(wù)器的實現(xiàn)根據(jù)當(dāng)前平臺硬件的能力來選擇所支持的包。應(yīng)用程序可以查詢當(dāng)前正在使用的實現(xiàn)可支持的包。另外,應(yīng)用程序開發(fā)者可能只關(guān)心應(yīng)用程序完成一個任務(wù)所需的被支持的包。例如,一個呼叫包允許用戶為一個網(wǎng)頁增加電話功能,而很多標(biāo)準(zhǔn)擴(kuò)展包擴(kuò)展JTAPI核心包。這些擴(kuò)展包為API帶來附加的電話功能,如全控制,呼叫中心,媒體,電話,專用數(shù)據(jù)和容量(capability)包。
需要使用標(biāo)準(zhǔn)電話API如JTAPI作為無線電電話或其它無線電通信裝置的電話API。
使用JTAPI作為無線電通信裝置的電話API,尤其是作為移動無線電話全球系統(tǒng)(GSM)的電話API,存在許多問題。一般而言,JTAPI的問題在于有多于63個事件類,總類文件大小大約為130K字節(jié)。這表示需要為無線電電話的整個程序的相當(dāng)小的組成部分分配相當(dāng)大的內(nèi)存。需要減少與JTAPI兼容的程序?qū)?nèi)存的要求。
在GSM通信裝置的上下文中,有一些GSM功能不能通過使用現(xiàn)有的JTAPI句法和方法特征來容易地獲得。而且,需要支持雙模式呼叫(這是在GSM使用的聲音和傳真呼叫或聲音和數(shù)據(jù)呼叫的術(shù)語),在有線電話和JTAPI中沒有雙模式呼叫的概念。簡單地增加或削減JTAPI不能提供令人滿意的方案,因為增加JTAPI會增加尋找事件類的需要,而削減JTAPI去掉了程序可在不同平臺之間移植的標(biāo)準(zhǔn)API的優(yōu)點。
因此,需要一個用于無線電通信裝置的電話API以及只占據(jù)最少內(nèi)存并支持無線電電話特有特點的相關(guān)類。
圖1示出了根據(jù)本發(fā)明的第一個實施例的無線電電話裝置的一個例子。
圖2示出了根據(jù)本發(fā)明的第二個實施例的無線電電話裝置的一個例子。
圖3是說明圖1和圖2無線電電話的軟件的結(jié)構(gòu)的軟件構(gòu)成圖。
圖4是進(jìn)一步詳細(xì)說明圖3的JTAPI方法實現(xiàn)的程序流程圖。
圖5和6是說明圖3的JTAPI方法實現(xiàn)的細(xì)節(jié)的流程圖。
圖7-13在說明JTAPI的附錄1中引用。
參看圖1,分層示出了一個無線電電話,硬件在最底下一層,應(yīng)用程序軟件在最高層。無線電電話包括第一微處理器10(微處理器A),第二微處理器11(微處理器B)以及特定RF硬件13。微處理器A和B連接在一起。微處理器B連接到RF硬件13。RF硬件13包括至少一個接收器和一個發(fā)送器。該RF硬件還包括一個最好包含一個聲音編碼器的聲音通信單元23。以及一個最好包含一個數(shù)據(jù)調(diào)制解調(diào)器或傳真調(diào)制解調(diào)器的數(shù)據(jù)通信單元24。微處理器有操作系統(tǒng)(OS)14如由Microware Systems Corporation of Des Moines,lowa提供的OS 9000。操作系統(tǒng)之上是虛擬機(jī)15,如商用JAVA(TM)虛擬機(jī)。應(yīng)用程序16和其它JAVA(TM)類17在虛擬機(jī)15上運行。類17的一個類是JPAPI實現(xiàn)18。微處理器11有接收發(fā)送軟件20,它完成諸如呼叫控制,分幀以及通常是字節(jié)級的處理如塊編碼功能。接收發(fā)送軟件20通過一個通用服務(wù)提供者模塊接口(CSPM)22與操作系統(tǒng)14通信。
作為圖1中的裝置的替換實施例,微處理器A和B的功能可以被集成到一個集成電路25,如圖2中虛線部分所示。在這個實施例中,微處理器10,硬件13,操作系統(tǒng)14,虛擬機(jī)15以及不同的軟件元素16-18與圖1中的實施例中的相同,在微處理器B的位置,有一個與微處理器10集成在一個集成電路25中的數(shù)字信號處理器。該數(shù)字信號處理器27有DSP碼28完成分幀和其它字節(jié)級的處理如塊編碼,而其它接收發(fā)送軟件功能如呼叫控制由運行在使用操作系統(tǒng)14的微處理器10上的接收發(fā)送軟件碼29完成。一個合適的集成電路25是M-Core(TM)集成微處理器,DSP可從摩托羅拉公司得到。
在圖3中,示出了應(yīng)用程序16(稱為“電話應(yīng)用”)和JTAPI方法實現(xiàn)18。示出了JTAPI接口30提供電話應(yīng)用16和JTAPI方法實現(xiàn)18之間的接口。JTAPI方法實現(xiàn)18控制并從無線電收發(fā)信機(jī)如GSPMI22的GSM收發(fā)信機(jī)30接收輸入。GSM收發(fā)信機(jī)30包括第二個微處理器11,RF硬件13以及接收發(fā)送軟件20(都在圖1中示出)。
JTAPI 30基本上如JTAPI規(guī)范1.2中所述,該規(guī)范定義高級對象的語法或操作,如“提供者”,該規(guī)范在附錄A中列出。另外,支持專門針對GSM的特殊操作,為此現(xiàn)定義下列專門術(shù)語。
JTAPI提供者的域簡單地就是指移動站(MS)。提供者域中的地址是那些MS的地址,例如,域中的一個地址代表一條電話線。
Provider.getAddresses()為MS返回一個地址數(shù)組,通常只有一個入口。如果MS支持多條線和多個電話號碼,默認(rèn)或初始地址(primaryaddress)是第一個入口。
Provider.getAddress()只接收分配給MS的一個或多個號碼。缺省值即初始地址,返回getAddresses()
。
Provider.getTerminals()返回MS支持的終端的一個數(shù)組。每一個電話承載類型(參看下面內(nèi)容)定義一個終端。
Provider.getTerminals()獲得一個指明終端名字的字符串,缺省時,返回聲音終端。所有的實現(xiàn)必須支持VOICE.DATA和FAX終端(參看下文)。
只要提供者還未關(guān)閉即使它是OUT_OF_SERVICE,Provider.CreateCall()將創(chuàng)建一個呼叫。該呼叫在提供者變?yōu)镮N_SERVICE之前不能被成功地發(fā)起。這個特點是對JTAPI 1.2的creatCall()的前提條件的一個改變并將在下面參看圖5和6進(jìn)行詳細(xì)說明。
Call.connect()語法分析目標(biāo)地址串以得到通用SS碼和地址標(biāo)志。如果傳送給Call.connect()的目標(biāo)數(shù)字串以“+”字符開始,type_of_number(TON)被設(shè)置為INTERNATIONAL;否則,TON為UNKNOWN。如果字符串只包含數(shù)字,號碼計劃標(biāo)識(NPI)為ISDN,否則為UNKNOWN。
TerminalConnection.join()和TerminalConnection.leave()用于在雙模式(聲音和數(shù)據(jù)或聲音和傳真)呼叫中改變呼叫模式,在一個呼叫中總是只有一個終端連接(Terminal Connection)是激活的;在另一個終端連接中激活join()引起電話模式的切換,在激活的終端連接上調(diào)用leave()自動激活另一模式。
應(yīng)用程序使用為媒體終端連接(MediaTerminalConnection)定義的API可以與電話的信息內(nèi)容交互。如果由Connection.getTerminalConnection()返回的TerminalConnection實現(xiàn)媒體終端連接,應(yīng)用程序可使用以下方法MediaTeminalConnection.getMediaAvailability(),其實現(xiàn)方法在JTAPI 1.2中定義;MediaTerminalConnection.getMediaState(),其實現(xiàn)方法在JTAPI 1.2中定義;MidiaTerminalConnection.generateDtmf(),用于生成呼叫中的DTMF音調(diào)。所有其它MediaTerminalConnection的方法都是可選的。
提供者不必非要在停止服務(wù)時斷開與激活呼叫的連接。提供者可能保持該呼叫處于激活狀態(tài)并假定出現(xiàn)臨時通信故障而試圖重新建立該呼叫。如果ProvOutOfServiceEv之后沒有緊跟著CallInvalidEv和相關(guān)的ConnDisconnectedEv事件(例如,在超時時間內(nèi)后兩個事件沒有跟入),應(yīng)用程序假定提供者正試圖重建一個呼叫。
另外,利用現(xiàn)有的JTAPI語法和方法特征許多GSM功能不能簡單地獲得。定義下面新的方法或具有不同特征的方法。
Provider.getNetworkID()返回當(dāng)前網(wǎng)絡(luò)名。
Proyider.getServicelevel()返回操作服務(wù)級別,NONE,EMERGENCY,F(xiàn)ULL。
Provider.isRoaming()當(dāng)MS不在本地PLMN時返回真。
這些新方法允許應(yīng)用程序確定當(dāng)前公共陸上移動網(wǎng)絡(luò)(PLMN),操作服務(wù)級別和該單元是否在本地PLMN上。
在JTAPI中,終端(Terminal)對象表示呼叫的物理的終端。假定該呼叫轉(zhuǎn)輸聲音。為了支持為GSM定義的附加的呼叫承載類型,為每一個主要呼叫承載類型定義一個附加的終端子類Terminal的DataTerminal子類表示GSM數(shù)據(jù)呼叫的物理終端。Terminal的FaxTerminal子類表示GSM傳真呼叫的物理終端。
一個典型的GSM MS將至少支持三個終端,一個聲音,一個數(shù)據(jù),一個傳真終端。MS可能支持附加的Terminal實例或子類(例如,支持內(nèi)部數(shù)據(jù)的InternalDataTerminal和傳送給連接的PC的數(shù)據(jù)的ModermDataTerminal)。應(yīng)用程序通過觀察適當(dāng)終端上的來話呼叫事件接收不同承載類型的來話呼叫。
現(xiàn)在參看圖4,說明允許支持雙模式GSM呼叫的具體特征。
圖4圖示圖3中的JTAPI實現(xiàn)18的詳細(xì)情況。方法的核心是提供者方法40。該提供者方法以無需詳細(xì)說明的方式與操作系統(tǒng)14接口。正如在上下文中使用的那樣,一個“方法”是定義在類里的在該類的實例中運作的一個函數(shù)。提供者方法40與一個聲音終端對象42,一個數(shù)據(jù)終端對象44,一個傳真終端對象46和一個地址對象48相關(guān)聯(lián)。當(dāng)要建立一個呼叫時,提供者方法40創(chuàng)建一個呼叫對象50。該呼叫對象50創(chuàng)建一個本地連接對象52。若是簡單的聲音連接,本地連接對象52創(chuàng)建一個引用聲音終端42的終端連接對象54。正如將進(jìn)一步詳細(xì)說明的那樣,本地連接對象52還創(chuàng)建第二個終端連接對象56(甚至第三個終端連接對象58)。第二終端連接對象56引用數(shù)據(jù)終端對象44。第三終端連接對象58,如果存在的話,引用傳真終端46。作為一個可選配置,第二和第三終端連接對象可被生成用于創(chuàng)建數(shù)據(jù)和傳真呼叫,這將進(jìn)一步詳細(xì)說明。
可能注意到如果呼叫是三方呼叫(three-way call),呼叫對象50將創(chuàng)建一個附加的遠(yuǎn)程連接對象60及與其關(guān)聯(lián)的終端連接對象62-66。還可能注意到如果還有一個呼叫(如一個占線的呼叫),提供者方法40可創(chuàng)建一個具有與其對應(yīng)的本地連接和終端連接的附加的第二呼叫對象70。在所有情況下,對于一個給定的無線電電話,只有三種終端聲音終端,數(shù)據(jù)終端和傳真終端。所以在所有情況下,由本地連接52,遠(yuǎn)程連接60和其它本地連接或遠(yuǎn)程連接創(chuàng)建的不同終端連接對象都分別引用聲音終端對象42,數(shù)據(jù)終端對象44以及傳真終端對象46。
在即將說明的處理中,目的是通過一個無線電電話通信頻道GSM收發(fā)信機(jī)30建立一個與遠(yuǎn)程交換機(jī)的呼叫,在該呼叫是雙模式(例如聲音和數(shù)據(jù)或聲音和傳真)的情況下,JTAPI方法實現(xiàn)18的目的是建立一個具有雙模式功能的呼叫并通過CSPMI 22通知GSM收發(fā)信機(jī)已建立一個雙模式呼叫,這樣GSM收發(fā)信機(jī)30可以通知GSM系統(tǒng)該呼叫是一個雙模呼叫,接著是GSM系統(tǒng)的交換機(jī),一旦接收到建立一個呼叫的請求創(chuàng)建一個呼叫并保持調(diào)制解調(diào)器的互通功能以支持該呼叫的數(shù)據(jù)或傳真功能。進(jìn)一步的目的是使用JTAPI命令Call.connect()在電話應(yīng)用程序16的調(diào)用中建立這個雙模呼叫。
在JTAPI版本1.2中,Call.connect()需要一個終端對象參數(shù),以建立一個去向或來自該終端的單模呼叫。為了建立一個雙模呼叫,本發(fā)明的首選實施例覆蓋Call.connect()并增加一個方法使第一個參數(shù)是一個終端數(shù)組,代替單個的發(fā)起終端。終端數(shù)組是命令call.connect的參數(shù)并包括一組終端對象,這組終端對象可能是一個聲音終端和一個數(shù)據(jù)終端,或一個聲音終端和一個傳真終端或是一個數(shù)據(jù)終端和一個傳真終端或是一個聲音終端,一個數(shù)據(jù)終端和一個傳真終端。當(dāng)方法提供者40與該命令和一個數(shù)組參數(shù)被調(diào)用時,它創(chuàng)建呼叫對象50和本地連接對象22。本地連接對象22創(chuàng)造第一和第二終端對象54和56。本地連接對象52向第一終端連接對象54查詢其終端。第一終端對象54回答本地連接對象52指明其終端(即其引用的終端)是聲音終端。同樣地,本地連接對象52向第二終端連接對象56查詢,第二終端連接對象56回答其終端是數(shù)據(jù)終端。本地連接對象54通知呼叫對象50已經(jīng)建立一個數(shù)據(jù)終端連接和一個聲音終端連接。呼叫對象50通知提供者40該雙模呼叫已被建立。提供者40通過CSPMI 22(通過OS 14)通知GSM收發(fā)信機(jī)已建立該雙模呼叫。
提供者40如下通過收發(fā)信機(jī)30建立呼叫,提供者40創(chuàng)建一個緩沖區(qū)類型為PlaceCallReq并從下表1中增加參數(shù)M/O/C。這些參數(shù)說明該呼叫。
表1參數(shù)名 參數(shù)類型M/O/CCallTypeCALL_TYPE MCalledParty1PHONE_NUMBER CRepeatIndicator2REPEAT_INDICATOR OCallType2CALL_TYPE ODataParameters3DATA_PARAMETERS CCLIRDisposition4CLIR_DISPOSITION OCUGInfo5CUG_INFO O1.對緊急呼叫為可選,對其它所有類型呼叫為必選。
2.對多呼叫類型呼叫為必選。
3.呼叫類型為數(shù)據(jù)或傳真時必選。
4.如果客戶希望替換CLIR預(yù)約缺省時,可能包含。
5.如果客戶希望替換CUG預(yù)約缺省時,可能包含。
本緩沖區(qū)的內(nèi)容通過串行連接22發(fā)送給收發(fā)信機(jī)30,如果被接收,該收發(fā)信機(jī)從下表2中返回確認(rèn)消息。
表2參數(shù)名 參數(shù)類型 M/O/CCallHandle1CALL_HANDLE C1.當(dāng)呼叫請求成功時必選。
這個確認(rèn)消息給出呼叫句柄使微處理器10可以在以后的命令中識別該呼叫。
在表1中,呼叫類型2(Call Type 2)指明一個替補(bǔ)呼叫類型并指明該替補(bǔ)類型為數(shù)據(jù)或傳真(在GSM中初始呼叫類型總是聲音)。用這種方式,提供者40通知收發(fā)信機(jī)30有一個替補(bǔ)呼叫類型是數(shù)據(jù)(也可為傳真)。這樣,當(dāng)收發(fā)信機(jī)30建立該呼叫時,開關(guān)也被通知有一個替補(bǔ)呼叫類型該替補(bǔ)呼叫類型要求預(yù)約數(shù)據(jù)調(diào)制解調(diào)器(或傳真調(diào)制解調(diào)器)。
第一個終端數(shù)組入口是初始激活終端,但呼叫被設(shè)置為可以處理在數(shù)組中聲明的任何終端,即連接到其它終端上的終端連接被置于呼叫控制terminalconnection.bridgedstate(或terminalconnection.passivestate)。如上所述,joined/leave被用于控制呼叫的當(dāng)前模式。connect()的這個變量用來支持初始聲明雙模呼叫參數(shù)(這樣要求應(yīng)用程序16預(yù)先聲明所有可能參與呼叫的終端)的GSM要求。
Call.connect()被覆蓋以加入方法以簡潔地指定目標(biāo)地址串的TON(號碼類型)和NPI(號碼方案標(biāo)識符),如果這些不能如上所述被推出的話。
Call.setEmergency()被定義設(shè)置緊急模式標(biāo)志。
Call.setCUGInfo()被定義在一個可編程表中指定關(guān)閉用戶組信息而不使用目標(biāo)地址串中的SS(輔助服務(wù))碼。
Call.setCallerIdRestricted()被定義在可編程表中指定呼叫線識別限制要求而不使用目標(biāo)地址串中的SS碼。
Call.offHook()不被支持。
應(yīng)用程序不能指定傳送或會議控制器。setTransferController()和setConferenceController()方法導(dǎo)致(throw)MethodNotSupported,以及get Conference Controller()和getTransfer()返回<NULL>。
setConferenceEnable(),getConference.Enable(),setTransferEnable()和getTransferEnable()處理控制傳送或會議這個呼叫的能力的內(nèi)部標(biāo)志。
Call.Consult()的調(diào)用必須包括目標(biāo)地址串,不支持未指定的變量。
Connection.reject(int)被定義使應(yīng)用程序可以在拒絕一個呼叫時指出一個拒絕原因。這支持用戶確定的用戶忙(user-determined-user-busy)功能。
Connection.addToAddress不被支持。
Connection.park()不被支持。
定義終端連接的一個子類(數(shù)據(jù)終端連接)表示網(wǎng)絡(luò)和終點數(shù)據(jù)終端之間的物理連接。定義指定和查詢數(shù)據(jù)呼叫參數(shù),如數(shù)據(jù)速率,調(diào)制解調(diào)器類型,協(xié)議層等的方法。同樣地,終端連接的一個子類((傳真終端連接),更準(zhǔn)確地說是媒體終端連接的一個子類)表示網(wǎng)絡(luò)和終點終端之間的物理連接。定義指定和查詢傳真呼叫參數(shù),如數(shù)據(jù)權(quán),組模式等的方法。
傳真終端連接(FaxTerminalConnection)還提供了設(shè)置傳真媒體流,傳送數(shù)據(jù)頁和頁結(jié)束標(biāo)識的媒體專用(media-specific)方法。
定義了一個新的終端事件允許應(yīng)用程序確定呼叫前轉(zhuǎn)是否可由“TermForwardingActiveEv”指定的終端激活。為不同的服務(wù)(例如,聲音,傳真和數(shù)據(jù))前轉(zhuǎn)是通過適當(dāng)?shù)慕K端對象(如VOICE,DATA,F(xiàn)AX)來發(fā)送信令的。
我們曾經(jīng)提到Provider.createCall()將創(chuàng)建一個呼叫,即使提供者是OUT_OF_SERVICE,但是只要它未關(guān)閉,而且該呼叫在提供者變?yōu)镮N_SERVICE之前不能被成功地發(fā)起。這里參看圖5和圖6對此特點進(jìn)行詳細(xì)說明。
參看圖5,將考慮這樣的情況,由于某種原因,應(yīng)用程序16開始發(fā)起一個呼叫或建立一個連接或分組數(shù)據(jù)會話。應(yīng)用程序16一般是用戶的接口并在,例如,用戶打開無線電通信裝置(移動站或MS)并撥了一個電話號碼之后開始初始化一個呼叫。應(yīng)用程序16通過API 30的Provider.createCall()命令調(diào)用Provider.create方法(步驟100)來初始化圖5所示的程序(或方法)。如果,在圖101中,通信裝置處于關(guān)閉模式,該程序只在步驟102簡單返回一個錯識并在步驟103退出。如果該裝置不處于關(guān)閉模式,在步驟110中創(chuàng)建一個呼叫對象50,圖5的程序在步驟111結(jié)束,準(zhǔn)備開始圖6的程序。
緊接著創(chuàng)建呼叫對象50之后,如果沒有任何進(jìn)一步的事件或條件(并且沒有任何中斷事件),應(yīng)用程序16通過API 30的Call.connect()命令調(diào)用Call.connect方法(步驟150)。如果,在步驟151中,判斷出通信裝置為不服務(wù)狀態(tài),程序(或方法)在步驟152等待而其它函數(shù)在步驟154完成搜索操作。通常10秒鐘的等待時間足夠使在搜索例程中連接到蜂窩網(wǎng)絡(luò)。如果,在步驟151或步驟156之后,通信裝置已建立與無線電通信網(wǎng)絡(luò)的服務(wù),步驟158開始一個命令通過串行接口22發(fā)送給收發(fā)信機(jī)30以建立一個呼叫,圖6的程序在步驟160結(jié)束。
在這種方式下,用戶甚至能夠在服務(wù)被建立之前開始撥電話號碼。這是一個非常有用的特征因為一個一般的用戶希望一打開通信裝置就開始建立呼叫,而不考慮服務(wù)是否已建立。服務(wù)的建立可以在響應(yīng)打開該裝置的動作(即按下電源鍵或打開一個觸發(fā)器)時開始。圖5和圖6的方法可以并行開始,響應(yīng)用戶或應(yīng)用程序的其它動作。
JTAPI定義中每個不同的JTAPI事件都有一個單獨的類,這是一個很大的問題。這給MS帶來定義多于63個事件類,每個總類文件大小大約為130K字節(jié)的負(fù)擔(dān)。
根據(jù)本發(fā)明的一個方面,應(yīng)用程序根據(jù)事件ID而不是事件類的類型被調(diào)度的。這將用一組小的多的事件分類類代替大量的事件類。應(yīng)用程序用事件ID確定在粗略類型中的具體事件。這大大節(jié)省了空間而又不會帶來對目標(biāo)封裝的大的損失。
事件類可分組為以下八個生成類-EV--所有事件的基本類。
-ProvEv--提供者事件。
-CallCtlAddrEv--地址和呼叫控制地址事件。
-CallCtlCallEv--呼叫和呼叫控制呼叫事件。
-CallCtlConnEv--連接和呼叫控制終端事件。
-CallCtrlTermEv--終端和呼叫控制終端事件。
-CallCtlTermConnEv--終端連接和呼叫控制終端連接事件。
-MediaEv--媒體事件。
具體事件的分組在下表3中列出。
表3Ev-所有事件的基本類 ProvEv-提供者事件,ProvInServiceEvProvObservationEndedEvProvOutOfServiceEvProvShutdownEvCallCtlAddrEv-地址和呼叫CallCtlCallEv-呼叫和呼叫控制控制地址事件 呼叫事件AddrEv CallEvCallCtlEvCallCtlEvAddrObservationEndedEv CallActiveEvCallCtlAddrDoNotDisturbEvCallnvalidEvCallCtlAddrForwardEv CallObservationEndedEvCallCtlAddrMessageWaitingEv表3內(nèi)容CallCtlConnEv CallCtlTermConnEvConnEv TermConnEvCallCtlEv CallCtlEvConnAltertingEvTermConnActiveEvConnConnectedEvTermConnCreatedEvConnCreatedEv TermConnDroppedEvConnDisconnectedEv TermConnPassiveEvConnFailedEv TermConnRingingEvConnInProgressEv TermConnUnknownEvConnUnknownEv CallCtlTermConnBridgedEvCallCtlConnAltertingEv CallCtlTermConnDroppedEvCallCtlConnDialingEv CallCtlTermConnHeldEvCallCtlConnDisconnectedEv CallCtlTermConnInUseEvCallCtlConnEstablishedEv CallCtlTermConnRingingEvCallCtlConnFailedEvCallCtlTermConnTalkingEvCallCtlConnInitiatedEv CallCtlTermConnUnknownEvCallCtlConnNetworkAltertingEvCallCtlConnNetworkReachedEvCallCtlConnOfferedEvCallCtlconnQueuedEvCallCtlconnUnknownEvCallCtlTermEv MediaEvTermEv Media TermConnAvailableEvCallCtlEv Media TermConnDtmfEvTermObservationEndedEv Media TermConnEvCallCtlTermDoNotDisturbEv Media TermConnstateEVMedia TermConnunavailableEv總而言之,說明了用于無線通信裝置的電話API和包含一個提供者方法的關(guān)聯(lián)的實現(xiàn),它非常適用于調(diào)用無線電電話函數(shù)的面向?qū)ο蟮挠嬎銠C(jī)程序。使用可在不同平臺高程度移植的API和只有很少內(nèi)存要求的實現(xiàn)。而且,通過使用用于建立簡單無線電電話呼叫的一個標(biāo)準(zhǔn)JTAPI事件類支持雙模電話功能,如在GSM無線電電話系統(tǒng)所要求的那樣。
根據(jù)本發(fā)明的一個方面,已說明的無線電通信裝置包含一個存儲用戶應(yīng)用程序和移動電話程序的內(nèi)存。移動電話程序包括描述該裝置所連接的無線網(wǎng)絡(luò)的參數(shù)。這些參數(shù)包括下列中的一個或多個當(dāng)前網(wǎng)絡(luò)的名字;當(dāng)前網(wǎng)絡(luò)的操作服務(wù)級別;當(dāng)前網(wǎng)絡(luò)是否為本地網(wǎng)絡(luò)的標(biāo)識。這些參數(shù)從收發(fā)信機(jī)或通過移動互聯(lián)網(wǎng)協(xié)議連接發(fā)送給移動電話程序。用戶應(yīng)用程序和移動電話程序的應(yīng)用程序編程接口至少有一個調(diào)用這些參數(shù)并將其返回給應(yīng)用程序的命令(即Provider.getNetworkID();Provider.getServicelevel();或Provider.isRoaming())。
上面的說明只是舉例說明,可以在本發(fā)明的范圍和主旨內(nèi)進(jìn)行細(xì)節(jié)修改。
附錄1Java電話API綜述版本1.2序言Java電話API(JTAPI)是一個可為基于Java的計算機(jī)電話應(yīng)用程序提供的,可移植的,面向?qū)ο蟮膽?yīng)用程序編程接口。JTAPI可為廣泛的用戶服務(wù),包括從呼叫中心應(yīng)用程序開發(fā)者到網(wǎng)頁設(shè)計者。JTAPI支持第一和第三方電話域。該API被設(shè)計為使編制簡單應(yīng)用程序容易,同時提供了高級電話應(yīng)用程序所需的特征。
Java電話API,實際上是一組API?!昂诵摹盇PI提供基本呼叫模型和基礎(chǔ)的電話特征如發(fā)起電話呼叫和回答電話呼叫核心API由提供特定電話域,如呼叫中心和媒體流訪問的功能的標(biāo)準(zhǔn)擴(kuò)展API包圍。JTAPI核心和擴(kuò)展包結(jié)構(gòu)在本文檔后續(xù)部分講解。用Java電話API編寫的應(yīng)用程序可在不同的計算機(jī)平臺和電話系統(tǒng)之間移植。JTAPI的實現(xiàn)可用于現(xiàn)有的計算機(jī)-電話集成平臺如Sun Microsystem的SunXTL,Microsoft和Intel的TAPI,Novell和Cucent的TSAPI以及IBM的CallPath。另外,獨立硬件供應(yīng)廠商可能選擇在他們的專有硬件上提供Java電話API的實現(xiàn)。文檔組織概述本文檔組織為下面幾個部分Java電話API特征—講述JTAPI的特征及其設(shè)計原則。
支持的配置—總結(jié)JTAPI可應(yīng)用的環(huán)境及其設(shè)計的計算機(jī)和軟件配置。
Java電話包結(jié)構(gòu)—總結(jié)Java電話API如何組織為不同的Java語言包。對每個包進(jìn)行簡單描述并提供指向詳細(xì)文檔的鏈接。
Java電話呼叫模型—講述電話呼叫和組成電話呼叫的不同對象在本API中是如何被表示的。
核心包方法—提供核心包中可用的主要方法的一個簡要總結(jié),該核心包完成最基本的電話操作,如發(fā)起一個電話呼叫,回答一個電話呼叫,以及斷開電話呼叫連接。
連接對象狀態(tài)—講述連接對象可以存在的狀態(tài)。它描述從每個狀態(tài)可進(jìn)行的轉(zhuǎn)換。
終端連接(TerminalConnection)對象狀態(tài)—講述終端連接對象可以存在的狀態(tài),描述從每個狀態(tài)可進(jìn)行的轉(zhuǎn)換。
發(fā)起一個電話呼叫—在任何電話API中使用最普遍的特征是發(fā)起一個電話呼叫。本部分講述發(fā)起一個呼叫所需調(diào)用的JTAPI方法并檢查呼叫模型中狀態(tài)的變化。這種分析將解釋呼叫是如何被發(fā)起,回答和結(jié)束的。
Java電話觀察者模型—講述JTAPI觀察者模型。應(yīng)用程序用觀察者異步通知JTAPI呼叫模型的狀態(tài)的變化。
這里沒有應(yīng)用程序編碼示例,但在由Sun Microsystem,Inc of PaloAlto,Califeornia出版的Java電話API版本1.2綜述中有兩個使用Java電話API的可運行的編碼示例。一個例子向指定的電話號碼發(fā)起一個電話呼叫。另一個例子示出一個指定的終端應(yīng)答一個來話電話呼叫。
定位和獲得提供者—講述應(yīng)用程序創(chuàng)建和獲得提供者對象的方式。
安全—總結(jié)JTAPI的安全策略。Java電話特征Java電話API的特征和指導(dǎo)設(shè)計的原則是給最基本的電話應(yīng)用程序帶來簡單性。
提供從桌面應(yīng)用程序到分布式呼叫中心電話應(yīng)用程序的可調(diào)節(jié)的框架。
接口應(yīng)用程序直接為提供者服務(wù)或作為與現(xiàn)有電話API,如SunXTL,TSAPI和TAPI的Java接口。
基于一個簡單核心,該核心由標(biāo)準(zhǔn)擴(kuò)展包擴(kuò)充。
在大范圍的任何可使用Java運行時間的硬件配置上運行。支持的配置JTAPI運行于不同的系統(tǒng)配置上,包括可直接訪問電話資源的集中式服務(wù)器,通過網(wǎng)絡(luò)訪問電話資源的遠(yuǎn)程網(wǎng)絡(luò)計算機(jī)。在第一種配置中網(wǎng)絡(luò)計算機(jī)運行JTAPI應(yīng)用程序并通過網(wǎng)絡(luò)訪問電話資源,如圖7所示。在第二種配置中,應(yīng)用程序運行在擁有自己電話資源的計算機(jī)上,如圖8所示。網(wǎng)絡(luò)計算機(jī)(NC)配置在一個網(wǎng)絡(luò)配置中,JTAPI應(yīng)用程序或Java應(yīng)用程序運行在遠(yuǎn)程工作站上。這個工作站可能是一個只有一個顯示器、鍵盤、處理器和一些內(nèi)存的網(wǎng)絡(luò)計算機(jī)。它訪問網(wǎng)絡(luò)資源,使用管理電話資源的集中式服務(wù)器。JTAPI通過遠(yuǎn)程通信機(jī)制,如Java的遠(yuǎn)程方法調(diào)用(RMJ),JOE,或電話協(xié)議與該服務(wù)器通信。下圖示出該配置。桌面計算機(jī)配置在桌面配置中,JTAPI應(yīng)用程序或Java應(yīng)用程序運行在擁有電話資源的工作站上。圖8示出了桌面配置。Java電話包結(jié)構(gòu)Java電話API由一組Java語言包組成。每個包為計算機(jī)-電話應(yīng)用程序的一個特定方面提供一個專門的功能。電話服務(wù)器的實現(xiàn)根據(jù)它們現(xiàn)有的平臺和硬件選擇它們支持的包。應(yīng)用程序可能查詢它們當(dāng)前使用的實現(xiàn)所支持的包。另外,應(yīng)用程序開發(fā)者可能只關(guān)心應(yīng)用程序完成一個任務(wù)所需的被支持的包。圖9示出了JTAPI包的結(jié)構(gòu)。
Java電話API的中心是“核心”包。核心包提供電話呼叫模型基本的框架和基礎(chǔ)的電話特征。這些特征包括發(fā)起一個電話呼叫,應(yīng)答一個電話呼叫以及斷開對電話呼叫的連接。簡單的電話應(yīng)用程序只需使用“核心”去完成它們的任務(wù),而不需要關(guān)心其它包的細(xì)節(jié)。例如,核心包允許應(yīng)用程序設(shè)計者很容易地為網(wǎng)頁增加電話功能。
很多“標(biāo)準(zhǔn)擴(kuò)展”包擴(kuò)充了JTAPI核心包。這些擴(kuò)展包每個為API帶來附加的電話功能。目前,本API有以下擴(kuò)展包呼叫控制,呼叫中心,媒體,電話,專用數(shù)據(jù)和權(quán)限包。下面總結(jié)每個包帶給JTAPI的特征,其中每個包都與一個獨立的概述文檔和說明書鏈接。
JTAPI包結(jié)構(gòu)是實現(xiàn)和應(yīng)用程序的雙向街(two-way street)。換句話說,電話服務(wù)器實現(xiàn)根據(jù)使用的硬件的能力選擇其實現(xiàn)的擴(kuò)展包(包括核心包)。應(yīng)用程序選擇用于完成所要求任務(wù)的所需要的擴(kuò)展包(包括核心包)。應(yīng)用程序可能向?qū)崿F(xiàn)查詢該實現(xiàn)所支持的擴(kuò)展包,應(yīng)用程序開發(fā)者不需要關(guān)心應(yīng)用程序不需要的其它包的細(xì)節(jié)。Java電話標(biāo)準(zhǔn)擴(kuò)展包每個JTAPI擴(kuò)展包都有一個描述其對核心API的擴(kuò)展的說明書,在大多數(shù)情況下有描述自己的獨立的綜述文檔。下面的圖列出了所有的擴(kuò)展包,如果有獨立的綜述文檔,還列出其鏈接。呼叫控制包javax.telephony.callcontrol包通過提供更高級的電話-控制特征如發(fā)起占線呼叫,傳送電話呼叫,會議電話呼叫來擴(kuò)展核心包。本包還提供了一個更詳細(xì)的電話呼叫的狀態(tài)模型。呼叫中心包javax.telephony,callcenter包提供給應(yīng)用程序完成管理大的呼叫中心所必需的高級特征的能力。這些高級特征的例子包括分路,自動呼叫分布(ACD),預(yù)報呼叫以及將應(yīng)用程序數(shù)據(jù)與電話對象相關(guān)聯(lián)。媒體包javax.telephony.media包使應(yīng)用程序可訪問與電話呼叫相關(guān)的媒體流。它們能夠從這些媒體流讀寫數(shù)據(jù)。java.telephony.media包還提供了DTMF(雙音多頻信號音)和非DTMF音的檢測和生成。電話包javax.telephony.phone包允許用戶控制電話硬件電話機(jī)的物理特征。實現(xiàn)可能將終端描述為元件的集合,其中這個包中的每個元件類型都有接口。權(quán)限包javax.telephony.capabilities包允許應(yīng)用程序查詢是否可以進(jìn)行某項操作。權(quán)限有兩種形式靜態(tài)權(quán)限指出一個實現(xiàn)是否支持一個特征;動態(tài)權(quán)限指出在給總的呼叫模型的當(dāng)前狀態(tài)下是否允許某特定操作。專用數(shù)據(jù)包javax.telephony.privatedata包使應(yīng)用程序能夠直接與基礎(chǔ)硬件開關(guān)通信數(shù)據(jù)。這個數(shù)據(jù)可能用于指導(dǎo)開關(guān)完成開關(guān)專有操作。應(yīng)用程序也可能使用包“捎帶”一些數(shù)據(jù)給Java電話API對象。Java電話呼叫模型JTAPI呼叫模型包括半打Java對象。這些對象用核心包中的Java接口來定義。每個呼叫模型對象要么表示電話領(lǐng)域中的一個物理實體要么表示一個邏輯實體。這些呼叫模型對象的主要目的是描述電話呼叫及參與電話呼叫的終點。這些呼叫模型對象以特有的方式相互關(guān)聯(lián),這將在下面總結(jié)并在核心包說明書中有詳細(xì)描述。
圖10示出了該JTAPI呼叫模型和組成該呼叫模型的對象。圖后有每個對象的描述。提供者對象提供者對象是電話服務(wù)提供者軟件的一個抽象。該提供者可能管理連接到服務(wù)器的PBX,桌面機(jī)器中的電話/傳真卡,或計算機(jī)網(wǎng)絡(luò)技術(shù),如IP。提供者隱藏電話子系統(tǒng)的服務(wù)專有方面并使Java應(yīng)用程序能夠以獨立于設(shè)置的方式與電話子系統(tǒng)交互。呼叫對象呼叫對象表示一個電話呼叫,在服務(wù)提供者和呼叫參與者之間流動的信息。電話呼叫包含一個呼叫對象和零個或多個連接。在兩方呼叫方案中,一個電話呼叫有一個呼叫和兩個連接。一個會議呼叫有三個或更多連接與一個呼叫對象關(guān)聯(lián)。地址對象地址對象表示一個電話號碼。它是電話呼叫的邏輯終點的抽象。注意這與物理的終點大不相同。事實上,一個地址可以對應(yīng)幾個物理終點(即終端)。連接對象連接對象是呼叫對象和地址對象之間通信鏈接模型。這種關(guān)系也被稱為“邏輯”視圖,因為關(guān)心的是呼叫和地址(即邏輯終端)之間的關(guān)系。座接對象可能處于幾個狀態(tài)中的一個,指出呼叫和地址之間關(guān)系的當(dāng)前狀態(tài)。這些連接狀態(tài)將在后文總結(jié)。終端對象終端對象表示一個物理裝置例如一個電話及其屬性。每個終端對象可能有一個或多個地址對象(電話號碼)與其關(guān)聯(lián),如許多辦公室電話能夠管理多個呼叫終端的情況。終端即所謂的一個呼叫的物理“終點”,因為它對應(yīng)于硬件的物理的一部分。終端連接對象終端連接對象是連接和一個呼叫的物理終點之間的關(guān)系的模型,它由終端對象來表示。這種關(guān)系還被稱為連接(與連接對象不同的是連接是邏輯視圖的模型)的“物理”視圖。終端連接對象描述連接和特定終端之間關(guān)系的當(dāng)前狀態(tài)。與終端連接有關(guān)的狀態(tài)將在本文檔后續(xù)部分描述。核心包方法核心包定義了三個方法支持其主要特征發(fā)起一個電話呼叫,應(yīng)答一個電話呼叫,斷開電話呼叫的一個連接。這些方法分別是Call.connect(),Terminal Connection.answer()和Connection.disconnect()。Call.connect()一旦應(yīng)用程序有一個空閑呼叫對象(由Provider.createCall()創(chuàng)建),它可能用Call.connect()發(fā)起一個電話呼叫。應(yīng)用程序必須指定源終端(物理終點)和該終端(在終端有多個電話號碼的情況下)的源地址(邏輯終點)。它還提供目標(biāo)電話號碼字符串。從Call.connect()方法返回兩個連接對象,表示電話呼叫的源和目標(biāo)端。TerminalConnection.answer()應(yīng)用程序用終端上的觀察器(下文討論)監(jiān)視什么時候出現(xiàn)來話呼叫。終端的一個來話電話呼叫由TerminalConnection向該處于RINGING狀態(tài)的終端指出(參看下文的連接終端狀態(tài))。那時,應(yīng)用程序可能調(diào)用TerminalConnection.answer()應(yīng)答該來話電話呼叫。Connection.disconnect()Connection.disconnect()方法用于從電話呼叫中刪除一個地址。連接對象表示該地址與電話呼叫的關(guān)系。應(yīng)用程序一般在連接處于CONNECTED狀態(tài)時調(diào)用本方法,導(dǎo)致連接變?yōu)镈ISCONNECTED狀態(tài)。在核心包中,應(yīng)用程序可能從該呼叫刪除整個地址,所有與該地址相關(guān)的參與呼叫的終端都被刪除。呼叫控制擴(kuò)展包括為應(yīng)用程序提供了從呼叫中只刪除單獨終端的功能。連接對象狀態(tài)連接對象總是處在反映一個呼叫和一個地址的關(guān)系的狀態(tài)上。一個連接存在的狀態(tài)不僅由于信息目的對應(yīng)用程序很重要,它還總指出哪些方法和動作可以在連接對象中調(diào)用。由規(guī)則控制的連接對象經(jīng)歷的狀態(tài)變化在下面的狀態(tài)轉(zhuǎn)換圖中示出。這圖為應(yīng)用程序開發(fā)者提供了連接對象可以轉(zhuǎn)換的可能狀態(tài)。這些狀態(tài)轉(zhuǎn)換規(guī)則對應(yīng)用程序開發(fā)者是非常有價值的。下面簡要總結(jié)每個狀態(tài)的意義。IDLE狀態(tài)IDLE狀態(tài)是所有新的連接對象的初始狀態(tài)。連接一般很快由IDLE狀態(tài)轉(zhuǎn)換為另一個狀態(tài)。一個連接處于IDLE狀態(tài)表明該方剛以某種形式加入該電話呼叫。IDLE狀態(tài)的連接沒有有效的核心方法。INPROGRESS狀態(tài)INPROGRESS狀態(tài)指明一個電話呼叫正在發(fā)向這個目標(biāo)終點。ALERTING狀態(tài)ALERTING狀態(tài)指明一個電話呼叫的目標(biāo)方受到有來話電話呼叫的警告。CONNECTED狀態(tài)CONNECTED狀態(tài)指明一方是電話呼叫的活動部分。連接處于CONNECTED狀態(tài)意味著關(guān)聯(lián)方正在與其它方通話或連接到音調(diào)。DISCONNECTED狀態(tài)DISCONNECTED狀態(tài)指明一方不再是電話呼叫的一部分。處于DISCONNECTED狀態(tài)的沒有有效的方法。FAILED狀態(tài)FAILED狀態(tài)指明發(fā)向終點的電話呼叫失敗。例如,如果一個應(yīng)用程序使用Call.connect()發(fā)起一個電話呼叫給正在忙的一方,與呼叫方關(guān)聯(lián)的連接轉(zhuǎn)換為FAILED狀態(tài)。UNKNOWN狀態(tài)UNKNOWN狀態(tài)指明提供者不能確定連接的當(dāng)前狀態(tài)。連接可以隨時轉(zhuǎn)換出或轉(zhuǎn)換為UNKNOWN狀態(tài),除非它為DISCONNECTED或FAILED狀態(tài)。調(diào)用處于該狀態(tài)的連接的任何方法的結(jié)果是不可預(yù)料的。終端連接對象狀態(tài)終端連接對象表示終端和連接的關(guān)系。如前面所述,這些對象表示呼叫的物理視圖,說明哪些物理終端終點是電話呼叫的部分。與連接對象相似,終端連接有自己的狀態(tài)集和狀態(tài)轉(zhuǎn)換圖。狀態(tài)圖如圖12所示,下面簡要說明每個狀態(tài)。IDLE狀態(tài)IDLE狀態(tài)是所有終端連接對象的初始狀態(tài)。它與連接對象的IDLE狀態(tài)意思相同。ACTIVE狀態(tài)ACTIVE狀態(tài)指明終端是電話呼叫活動的部分。這往往意味著該終端受話器已提起。RINGING狀態(tài)RINGING狀態(tài)指明終端正在發(fā)信號給用戶在終端上出現(xiàn)了一個來話電話呼叫。DROPPED狀態(tài)DROPPED狀態(tài)指明終端曾經(jīng)是電話呼叫的一部分,但之后已退出該電話呼叫。DROPPED狀態(tài)是所有終端連接的最后狀態(tài)。PASSIVE狀態(tài)PASSIVE狀態(tài)指明終端是電話呼叫的一部分,但不是活動部分。終端連接處于PASSIVE狀態(tài)指明該終端的資源正在被這個電話呼叫使用。包提供高級特征允許終端從PASSIVE狀態(tài)加入呼叫。UNKNOWN狀態(tài)UNKNOWN狀態(tài)指明提供者不能確定終端連接的當(dāng)前狀態(tài)。它與連接對象的UNKNOWN狀態(tài)的意義相同。發(fā)起一個電話呼叫上面幾部分概述了JTAPI呼叫模型,核心包的基本方法以及連接和終端連接的狀態(tài)。本部分將所有這些信息串在一起,提出在大部分電話應(yīng)用程序中使用的共有方案。本部分講述當(dāng)應(yīng)用程序發(fā)起一個簡單的電話呼叫時整個呼叫模型一般經(jīng)歷的狀態(tài)變換。讀者將會深入理解本簡單例子的呼叫模型變化。
用于講述呼叫模型經(jīng)歷的狀態(tài)變化的載體如圖13所示。這個圖是一個呼叫模型時間圖,其中不同對象的變化隨著時間的增加縱軸向下表示出來。本圖示出了應(yīng)用程序調(diào)用Call.Connect()方法之后的一般狀態(tài)變化。
在圖13中,分離的時間點以整數(shù)沿縱軸向下標(biāo)注。時間越大在縱軸的位置越向下,但這些整數(shù)并不是真正的(時鐘)時間。
圖13整個表示一個電話呼叫。本例所示情況下,該圖表示一個兩方的電話呼叫(Call.connect()方法總是引起兩方呼叫)。該圖可以劃分為兩部分左半邊和右半邊。左半邊表示電話呼叫的發(fā)起端,右半邊表示電話呼叫的目標(biāo)端。
在圖的左邊(發(fā)起)區(qū)域,兩條垂直線如在圖中指明的那樣表示發(fā)起終端和地址(它是Call.Connect()方法的參數(shù))對象。水平線如標(biāo)注的那樣或者表示連接對象或者表示終端連接對象。注意連接對象畫在里邊區(qū)域,而終端連接對象畫在外邊區(qū)域。
同樣地,在圖的右邊(目標(biāo))區(qū)域,兩條垂直線表示目標(biāo)地址和終端。在本例中,有兩個與目標(biāo)地址相關(guān)聯(lián)的目標(biāo)終端。這種配置已在前面圖10中示出。注意因為有兩個終端,在目標(biāo)區(qū)域有兩個終端連接對象。
圖13可以如下理解隨著時間的推移連接和終端連接對象改變狀態(tài)。一個新的連接或終端連接水平線的出現(xiàn)對應(yīng)于一個新的該類型的對象的創(chuàng)建。
在發(fā)起電話呼叫的例子中,我們看到在創(chuàng)建兩個處于IDLE狀態(tài)的連接后,發(fā)起連接轉(zhuǎn)換為CONNECTED狀態(tài),而目標(biāo)連接轉(zhuǎn)換為INPROGRESS狀態(tài)。這時,創(chuàng)建一個連接到發(fā)起終端的終端連接。該終端連接轉(zhuǎn)換為ACTIVE狀態(tài)。當(dāng)目標(biāo)連接轉(zhuǎn)換為ALERTING狀態(tài)時,兩個狀態(tài)為RINGING的終端連接被創(chuàng)建。
這時,在目標(biāo)終端其中之一上,一個人應(yīng)答該呼叫。當(dāng)發(fā)生這種情況時,終端連接轉(zhuǎn)換為ACTIVE狀態(tài),而另一個終端連接轉(zhuǎn)換為PASSIVE狀態(tài)。同時,目標(biāo)連接并發(fā)地轉(zhuǎn)換為CONNECTED狀態(tài)。當(dāng)該電話呼叫結(jié)束時,所有的連接都轉(zhuǎn)換為DISCONNECTED狀態(tài),所有的終端連接都轉(zhuǎn)換為DROPPED狀態(tài)。
最后,本文檔曾使用術(shù)語電話呼叫的“邏輯”和“物理”視圖。本圖使這些概念更清楚。應(yīng)用程序可以監(jiān)視連接對象(如,邏輯視圖)的狀態(tài)變化。通過看本圖,讀者可以理解這些狀態(tài)提供了電話呼叫過程的一個高層次視圖。終端連接狀態(tài)變化表示物理視圖,通過監(jiān)視終端連接的狀態(tài)變化,應(yīng)用程序能發(fā)現(xiàn)每個物理終點發(fā)生的情況。Java電話觀察者模型Java電話API使用Java觀察者/可視察模型異步通知應(yīng)用程序JTAPI呼叫模型的各種變化。這些變化可能包括對象的狀態(tài)變化或?qū)ο蟮膭?chuàng)建。
提供者,呼叫,終端,以及地址對象都有觀察者。與這些觀察者對應(yīng)的接口分別是Provider.Observer,CallObserver,TerminalObserver和AddessObserver。
ProviderObserver報告所有提供者對象的狀態(tài)變化。對核心包而言,當(dāng)提供者從OUT_OF_SERVICE狀態(tài)轉(zhuǎn)換為IN_SERVICE,SHUTDOWN狀態(tài)時狀態(tài)變化被報告。
呼叫觀察者報告所有參與電話呼叫的連接和終端連接的狀態(tài)變化信息和呼叫本身的狀態(tài)變化。地址觀察者和終端觀察者不報告這些狀態(tài)變化。
有時,應(yīng)用程序可能想監(jiān)視地址和或終端對象是否有來話電話呼叫。在這些實例中,應(yīng)用程序使用Address.addCallObserver()或Terminal.addCallObserver()方法。這些方法指示其實現(xiàn)自動增加一個CallObserver給所有發(fā)向一個地址或終端的呼叫。一旦該呼叫離開該地址或終端,這些CallObserver被刪除。
地址和終端觀察者報告這些對象的任何狀態(tài)變化,在核心包中這些對象沒有事件。但是,仍然有AddressObserver和TerminalObserver,以便其它包可以擴(kuò)展這些接口。定位和獲得提供者Java電話API定義一個約定,通過該約定應(yīng)用程序可以得到JTAPI電話服務(wù)器實現(xiàn)的服務(wù)。
將應(yīng)用程序鏈接到服務(wù)器的兩個元素是JtapiPeerFactoryJtapiPeerFactory類是需要電話服務(wù)的應(yīng)用程序的第一個聯(lián)系點。它能返回一個命名的JtapPeer對象或一個默認(rèn)的JtapiPeer對象。它被定義為靜態(tài)類。
JtapiPeerJtapiPeer接口是供應(yīng)廠商的Java電話API的特殊實現(xiàn)的基礎(chǔ)。每個提供JTAPI的一個實現(xiàn)的供應(yīng)廠商必須在可由JtapiPeerFactory載入的類中執(zhí)行該接口。
應(yīng)用程序通過一個實現(xiàn)JtapiPeer對象的類,得到一個提供者對象。
JtapiPeerFactory開始JtapiPeerFactory是定義在JTAPI中的一個靜態(tài)類。它的唯一的公用方法,getJtapiPeer()取得所要求的JtapiPeer實現(xiàn)或返回一個默認(rèn)的實現(xiàn)。
getJtapiPeer()作為參數(shù)取得所需的JTAPI服務(wù)器實現(xiàn)類的名字以返回該類的一個對象實例。如果沒有提供名字,getJtapiPeer()返回默認(rèn)的JTAPI服務(wù)器實現(xiàn)對象。
JtapiPeer獲得一個提供者對象JtapiPeer是一個接口。它由JTAPI服務(wù)器實現(xiàn)使用。它定義了應(yīng)用程序用以獲得提供者對象,查詢那些提供者上可用的服務(wù),獲取JtapiPeer對象實例的名字的方法。通過創(chuàng)建執(zhí)行JtapiPeer接口的類,JTAPI實現(xiàn)使用中可以使用下列方法。
應(yīng)用程序使用JtapiPeer.getProvider()方法來得到新的提供者對象。每個實現(xiàn)可支持一個或多個不同的“服務(wù)”(例如,支持當(dāng)前網(wǎng)絡(luò)介體的不同類型)。通過JtapiPeer.getServices()方法可以獲得一個可用服務(wù)的列表。
應(yīng)用程序還提供可選參數(shù)給提供者。這些參數(shù)附加到傳送給JtapiPeer.getProvider()方法的參數(shù)串中。參數(shù)串格式如下<服務(wù)名>; 參數(shù)1=值1;參數(shù)2=值2;…(<Service name>;arg1=val1;arg2=val2;…)
其中<服務(wù)名>不是可選的,后面的每個可選參數(shù)對都以分號分隔。這些參數(shù)的關(guān)鍵字是由實現(xiàn)指定的,除了兩個標(biāo)準(zhǔn)定義關(guān)鍵字1.login提供登錄用戶名給提供者。
2.passwd提供保密字給提供者。
應(yīng)用程序使用JtapiPeer.getName()方法獲取該JtapiPeer對象實例的名字,它有一個名字參數(shù)與JtapiPeerFactory.getJtapiPeer()方法的名字參數(shù)值相同。
Java電話API的安全性JTAPI同位體(peer)實現(xiàn)用Java“sandox”模型控制,對敏感操作的訪問。使用運行系統(tǒng)確定的條件JTAPI方法的調(diào)用者被劃分為“信任”和“非信任”兩種。
信任的調(diào)用者被允許完全訪問JTAPI的功能。非信任調(diào)用者僅限于那些不會破壞系統(tǒng)完整性的操作。
JTAPI可被用于訪問電話服務(wù)器或提供自身安全機(jī)制的實現(xiàn)。這些機(jī)制保持不變,諸如用戶名和保密字的參數(shù)是通過JtapiPeer.getProvider()方法的參數(shù)提供的。
權(quán)利要求
1.一個無線電通信裝置,包括一個存儲器,在其內(nèi)存儲用戶應(yīng)用程序和電話程序,該電話程序在操作時有多個終端對象;以及一個用戶應(yīng)用程序和電話程序之間的應(yīng)用程序編程接口,其中API有一個建立一個呼叫的命令,電話程序接收作為建立該呼叫的參數(shù)的一個指明多個終端對象的數(shù)組,從而為這多個終端對象建立一個呼叫。
2.權(quán)利要求1的裝置,其中多個終端對象是可以從下面的組中選擇的至少兩個不同的終端對象聲音終端對象,傳真終端對象和數(shù)據(jù)終端對象,從而允許建立一個雙模式呼叫。
3.權(quán)利要求1的裝置,至少包括由多個終端對象的第一終端對象控制的聲音元素和由多個終端對象的第二終端對象控制的數(shù)據(jù)元素。
4.權(quán)利要求3的裝置,包括具有至少運行電話程序的虛擬機(jī)的第一處理器和運行控制聲音元素和數(shù)據(jù)元素的收發(fā)信機(jī)軟件的第二處理器。
5.權(quán)利要求4的裝置,包括第一處理器和第二處理器之間的串行鏈接。
6.權(quán)利要求4的裝置,包括第一處理器和第二處理器之間的鏈接,其中該鏈接向收發(fā)信機(jī)軟件指明建立一個呼叫的命令是一個主類型或替補(bǔ)類型,其中替補(bǔ)類型指雙模式呼叫。
7.一種在無線電通信裝置中建立雙模式呼叫的方法,包括從一個應(yīng)用程序中通過應(yīng)用程序編程接口(API)調(diào)用一個呼叫連接類,使用一個包含一個數(shù)組參數(shù)的命令,該數(shù)組包括從聲音類型,傳真類型和數(shù)據(jù)類型中選擇的不同類型的多個終端對象。
8.權(quán)利要求7的方法,進(jìn)一步包括,在呼叫連接類中,調(diào)用引用一個聲音終端的第一連接對象和引用數(shù)據(jù)終端和傳真終端中的一個的第二連接對象。
9.權(quán)利要求7的方法,其中通過使用具有一個包括單終端對象的參數(shù)的命令,應(yīng)用程序還能與一個不支持建立雙模式呼叫的呼叫連接類接口。
10.權(quán)利要求7的方法,其中該呼叫連接能夠由一個包括單個終端對象參數(shù)的命令來調(diào)用,從而建立一個單模式呼叫。
11.一個無線電通信裝置,包括一個存儲用戶應(yīng)用程序和電話程序的存儲器,其中電話程序包括一組預(yù)定義事件,每個預(yù)定義事件有一個事件標(biāo)識符(ID),該預(yù)定事件組被劃分為(a)一個基本類,(b)一個提供者事件類,(c)一個地址和呼叫控制地址事件類,(d)一個呼叫和呼叫控制呼叫事件類,(e)一個連接和呼叫控制連接事件類,(f)一個終端和呼叫控制終端事件類,(g)一個終端連接和呼叫控制終端連接事件類,以及(h)一個媒體事件類,以及用戶應(yīng)用程序和電話程序之間的應(yīng)用程序編程接口(API),其中API從應(yīng)用程序接收一個命令,該命令定義從(a)到(h)組中的一個事件類,并有一個ID定義事件類中的一個事件。
12.根據(jù)權(quán)利要求11的無線電通信裝置,其中每個預(yù)定義事件有一個定義一個方法的計算機(jī)程序,其中所有對應(yīng)于一組預(yù)定義事件的事件的方法的計算機(jī)程序包括在一個類對象中,而不在任何級別低于類對象的對象中被子定義(subdefined)。
13.操作無線電通信裝置的一個方法,該通信裝置包括存儲用戶應(yīng)用程序和電話程序的存儲器,所述方法包括在電話程序中調(diào)用一個程序以創(chuàng)建一個呼叫對象,并創(chuàng)建該呼叫對象而不答用于無線電通信裝置的無線電服務(wù)是否已建立,在電話程序中調(diào)用一個程序以發(fā)起一個呼叫,但是如果無線電服務(wù)還未建立必須等待電線電服務(wù)被建立。
14.權(quán)利要求13的方法,包括在調(diào)用電話程序中的程序發(fā)起一個呼叫后在超時的時間內(nèi)服務(wù)未被建立時,返回一個錯誤給應(yīng)用程序。
全文摘要
一個無線電通信裝置包括一個存儲器存儲用戶應(yīng)用程序,電話程序以及二者之間的應(yīng)用程序編程接口。一方面,API有一個建立一個呼叫的命令,電話程序接收作為建立該呼叫的命令的參數(shù)的一個指明幾個終端對象的數(shù)組,從而為多個終端對象建立一個呼叫。另一方面,講述了事件的分類以及一個API命令從一個組中定義一個事件類和一個在事件類中定義一個事件的ID。另外,電話程序中的一個程序被調(diào)用以創(chuàng)建一個呼叫對象。
文檔編號H04L29/08GK1249640SQ99120719
公開日2000年4月5日 申請日期1999年9月27日 優(yōu)先權(quán)日1998年9月28日
發(fā)明者詹姆斯·E·馬蒂斯 申請人:摩托羅拉公司