專利名稱:一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及音頻設(shè)備的使用方法,尤其涉及添加外部音頻設(shè)備后多個網(wǎng)絡(luò)語音通訊模塊共用外部音頻設(shè)備的方法。
背景技術(shù):
目前網(wǎng)絡(luò)通訊終端之間可以通過網(wǎng)絡(luò)語音通訊模塊進行網(wǎng)絡(luò)語音通訊,實現(xiàn)語音通訊功能的音頻設(shè)備包括終端上的系統(tǒng)默認聲卡、麥克風(fēng)以及耳機或音箱。由于用戶對麥克風(fēng)和耳機的體驗與傳統(tǒng)手持電話的體驗不同,為了達到與傳統(tǒng)語音通訊相似的用戶體驗,通常為網(wǎng)絡(luò)通訊終端添加與傳統(tǒng)語音通訊類似的外部音頻設(shè)備作為處理該網(wǎng)絡(luò)通信業(yè)務(wù)的專用音頻設(shè)備,例如在網(wǎng)絡(luò)語音通訊業(yè)務(wù)中使用USB Phone即USB接口的電話進行語音通訊。該USB Phone通過USB接口與終端連接。USB Phone設(shè)備具有集成錄放功能的音頻設(shè)備和鍵盤輸入的人體學(xué)輸入設(shè)備的HID(Human Interface Device,人機對話接口設(shè)備)。網(wǎng)絡(luò)語音通訊模塊與USB Phone設(shè)備連接后,網(wǎng)絡(luò)語音通訊業(yè)務(wù)通過接收HID傳送的按鍵消息,進行撥號、呼叫以及結(jié)束等操作。通過網(wǎng)絡(luò)語音通訊業(yè)務(wù)和USB Phone設(shè)備的配合使用,可使網(wǎng)絡(luò)電話在用戶體驗上達到與傳統(tǒng)電話同等的效果。
在一個終端上,通常允許同時運行多個網(wǎng)絡(luò)語音通訊模塊,由于多個網(wǎng)絡(luò)語音通訊模塊同時運行時,只允許有一個網(wǎng)絡(luò)語音通訊模塊使用并控制USBPhone設(shè)備,即同時只允許一個網(wǎng)絡(luò)語音通訊模塊獲得USB Phone設(shè)備的控制權(quán),因此需要解決如何控制多個網(wǎng)絡(luò)語音通訊模塊使用一個USB Phone設(shè)備的問題。
目前網(wǎng)絡(luò)語音通訊模塊通過一個撥號軟件Dialer控制USB Phone設(shè)備,并接受從USB Phone上報的消息?,F(xiàn)有技術(shù)中的撥號軟件為可執(zhí)行程序,被網(wǎng)絡(luò)語音通訊模塊調(diào)用,實現(xiàn)連接和控制網(wǎng)絡(luò)語音通訊模塊和USB Phone設(shè)備。控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,通過可執(zhí)行程序為用戶提供一個交互界面,當某個網(wǎng)絡(luò)語音通訊模塊需要建立與USB Phone的連接時,通過該交互界面選擇需要建立連接的網(wǎng)絡(luò)語音通訊模塊。
但是,由于目前的撥號軟件需要在用戶安裝完網(wǎng)絡(luò)語音通訊模塊后,另外安裝一個可執(zhí)行程序,并且在運行時需要用戶人工切換對USB Phone的控制權(quán),同時系統(tǒng)啟動兩個進程才可以使用USB Phone設(shè)備,因此給用戶操作過程復(fù)雜,程序不便于維護,并且使操作系統(tǒng)增加一個進程的資源開銷。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題在于提供一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法及裝置,能夠減少用戶的人為操作過程,提高用戶體驗,同時減少系統(tǒng)的開銷。
為解決上述技術(shù)問題,本發(fā)明提供了一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,網(wǎng)絡(luò)語音通訊軟件調(diào)用動態(tài)鏈接庫控制音頻設(shè)備,所述控制過程包括步驟1)判斷是否存在處于激活狀態(tài)的動態(tài)鏈接庫,若有則進入步驟2),若無則獲取音頻設(shè)備的控制權(quán)2)判斷是否存在處于通話狀態(tài)的動態(tài)鏈接庫,若有則結(jié)束本流程,若無則獲取音頻設(shè)備的控制權(quán)。
步驟1)之前還包括設(shè)置共享數(shù)據(jù)單元,用于記錄處于激活狀態(tài)的動態(tài)鏈接庫標識;以及處于激活狀態(tài)的動態(tài)鏈接庫是否處于通話狀態(tài)。
步驟1)中所述獲取音頻設(shè)備的控制權(quán)包括11)將共享數(shù)據(jù)單元中的處于激活狀態(tài)的動態(tài)鏈接庫標識修改為當前欲獲取控制權(quán)的動態(tài)鏈接庫標識;12)將當前處于激活狀態(tài)的動態(tài)鏈接庫標識設(shè)為處于通話狀態(tài)。
步驟2)中所述獲取音頻設(shè)備的控制權(quán)包括21)將共享數(shù)據(jù)單元中的處于激活狀態(tài)的動態(tài)鏈接庫標識修改為欲獲取控制權(quán)的動態(tài)鏈接庫標識;22)將當前處于激活狀態(tài)的動態(tài)鏈接庫標識設(shè)為處于通話狀態(tài)。
所述控制過程還包括動態(tài)鏈接庫定期訪問共享數(shù)據(jù)單元,包括以下步驟31)判斷共享數(shù)據(jù)單元中處于激活狀態(tài)的動態(tài)鏈接庫標識是否為0,若是則將其修改為訪問的動態(tài)鏈接庫標識,若否進入步驟32);32)判斷判斷共享數(shù)據(jù)單元中處于激活狀態(tài)的動態(tài)鏈接庫標識是否與訪問的動態(tài)鏈接庫相同,若相同則結(jié)束本流程,若不同則進入步驟33);33)將當前訪問的動態(tài)鏈接庫標識設(shè)為處于通話狀態(tài)。
本發(fā)明還提供了一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的裝置,包括至少一個動態(tài)鏈接庫,供相應(yīng)的網(wǎng)絡(luò)語音通訊模塊調(diào)用;共享數(shù)據(jù)單元,用于各個動態(tài)鏈接庫之間的通訊,實現(xiàn)對音頻設(shè)備的控制。
所述共享數(shù)據(jù)單元記錄當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫標識;以及當前所述音頻設(shè)備的通話狀態(tài);所述動態(tài)鏈接庫獲取所述共享數(shù)據(jù)單元記錄的信息,并根據(jù)該信息獲取對所述音頻設(shè)備的控制權(quán)所述共享數(shù)據(jù)單元包括計數(shù)器,用于網(wǎng)絡(luò)語音通訊模塊啟動時為相應(yīng)的動態(tài)鏈接庫分配動態(tài)鏈接庫標識;第一存儲單元,用于記錄當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫標識;第二存儲單元,用于記錄音頻設(shè)備當前的通訊狀態(tài)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是本發(fā)明所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法及裝置通過使用動態(tài)鏈接庫來代替現(xiàn)有技術(shù)中的可執(zhí)行程序,減少了系統(tǒng)資源開銷,同時通過與共享數(shù)據(jù)單元的配合使用,實現(xiàn)對外部音頻設(shè)備控制權(quán)的自動切換,從而減輕用戶負擔(dān),便于程序維護。
另外,本發(fā)明在訪問所述共享數(shù)據(jù)單元時,進行加鎖處理,從而保證數(shù)據(jù)的一致性。
本發(fā)明通過設(shè)置訪問所述共享數(shù)據(jù)單元的周期,對所述共享數(shù)據(jù)單元記錄的信息進行更新,保證了共享數(shù)據(jù)單元記錄信息的正確性。
圖1是本發(fā)明所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法的原理圖;圖2是第二實施例中共享數(shù)據(jù)單元的結(jié)構(gòu)示意圖;圖3是第二實施例中啟動網(wǎng)絡(luò)語音通訊模塊時獲取音頻設(shè)備控制權(quán)的流程圖;圖4是第二實施例中網(wǎng)絡(luò)語音通訊模塊運行時切換音頻設(shè)備控制權(quán)的流程圖;圖5是第二實施例中更新共享數(shù)據(jù)單元記錄的信息的流程圖;圖6是第二實施例中釋放音頻設(shè)備控制權(quán)的流程圖。
具體實施例方式
本發(fā)明提供的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,通過網(wǎng)絡(luò)語音通訊模塊調(diào)用動態(tài)鏈接庫實現(xiàn)對所述音頻設(shè)備進行控制。由于每個動態(tài)鏈接庫都是執(zhí)行一樣的程序,彼此都不知道其它動態(tài)鏈接庫的狀態(tài),進而無法獲悉當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫,以便在某個網(wǎng)絡(luò)語音通訊模塊需要與音頻設(shè)備建立連接時能夠使該網(wǎng)絡(luò)語音通訊模塊對應(yīng)的動態(tài)鏈接庫及時獲取音頻設(shè)備的控制權(quán),本發(fā)明在網(wǎng)絡(luò)語音通訊模塊中預(yù)先設(shè)置共享數(shù)據(jù)單元,并在該共享數(shù)據(jù)單元記錄當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫標識;以及當前所述音頻設(shè)備的通訊狀態(tài);當某個動態(tài)鏈接庫獲取音頻設(shè)備的控制權(quán)時,根據(jù)所述共享數(shù)據(jù)單元記錄的信息獲取對所述音頻設(shè)備的控制權(quán),由于當前音頻設(shè)備的控制權(quán)發(fā)生變更,因此為了保證共享數(shù)據(jù)單元記錄的數(shù)據(jù)的正確性需要修改所述共享數(shù)據(jù)單元記錄的信息。
本發(fā)明還可以在每個動態(tài)鏈接庫中保存動態(tài)鏈接庫的激活狀態(tài)信息,所述激活狀態(tài)是指獲得音頻設(shè)備的控制權(quán)。當某個動態(tài)鏈接庫獲取音頻設(shè)備的控制權(quán)時,根據(jù)所述共享數(shù)據(jù)單元記錄的信息以及動態(tài)鏈接庫的激活狀態(tài)信息獲取對所述音頻設(shè)備的控制權(quán)。
另外,由于共享數(shù)據(jù)單元是由多個動態(tài)鏈接庫共同訪問的,因此,在訪問共享數(shù)據(jù)單元之前,必須先對共享數(shù)據(jù)單元進行加鎖處理,完成修改后作去鎖處理。以保證同時只有一個共享數(shù)據(jù)單元在訪問共享數(shù)據(jù)單元,從而保證了數(shù)據(jù)的一致性。
若某個網(wǎng)絡(luò)語音通訊模塊需要通過音頻設(shè)備通信,則通知其對應(yīng)的動態(tài)鏈接庫訪問共享數(shù)據(jù)單元,該動態(tài)鏈接庫首先查看當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫,本發(fā)明所述的根據(jù)所述共享數(shù)據(jù)單元記錄的信息獲取對所述音頻設(shè)備的控制權(quán),分為以下幾種情況。
當某個網(wǎng)絡(luò)語音通訊模塊啟動時,如果當前沒有動態(tài)鏈接庫占有所述音頻設(shè)備的控制權(quán),則直接獲取所述音頻設(shè)備的控制權(quán),并在共享數(shù)據(jù)單元記錄當前動態(tài)鏈接庫為獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫;如果某個網(wǎng)絡(luò)語音通訊模塊啟動時已經(jīng)有其他的網(wǎng)絡(luò)語音通訊模塊對應(yīng)的動態(tài)鏈接庫獲取所述音頻設(shè)備的控制權(quán),則退出該共享訪問區(qū)。
當某個網(wǎng)絡(luò)語音通訊模塊運行時,當前存在獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫,但是該動態(tài)鏈接庫對應(yīng)的網(wǎng)絡(luò)語音通訊模塊未處于通信狀態(tài)時,當其他網(wǎng)絡(luò)語音通訊模塊接收到呼入請求時,則處于非激活狀態(tài)的動態(tài)鏈接庫需要獲取音頻設(shè)備的控制權(quán),并在共享數(shù)據(jù)單元記錄當前動態(tài)鏈接庫為獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫。相反,如果當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫對應(yīng)的網(wǎng)絡(luò)語音通訊模塊處于通信狀態(tài),則向該訪問共享數(shù)據(jù)單元的動態(tài)鏈接庫對應(yīng)的網(wǎng)絡(luò)語音通訊模塊報告,然后退出該共享數(shù)據(jù)單元。
另外,由于動態(tài)鏈接庫只能單向地訪問共享數(shù)據(jù)單元,共享數(shù)據(jù)單元不能主動向動態(tài)鏈接庫傳遞信息,而必須存在一個獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫,因此,本發(fā)明設(shè)置訪問共享數(shù)據(jù)單元的周期,使動態(tài)鏈接庫定期訪問共享數(shù)據(jù)單元的內(nèi)容,以便及時更新狀態(tài)。當?shù)竭_所述預(yù)先設(shè)置的訪問周期時,如果當前音頻設(shè)備無人占用,例如占用該音頻設(shè)備的動態(tài)鏈接庫對應(yīng)的網(wǎng)絡(luò)語音通訊模塊退出了。則訪問共享數(shù)據(jù)單元的動態(tài)鏈接庫獲取當前對音頻設(shè)備的控制權(quán),并修改共享數(shù)據(jù)單元的相應(yīng)信息。如果存在獲得當前音頻設(shè)備控制權(quán)的動態(tài)鏈接庫,則需要進一步判斷該動態(tài)鏈接庫是否是正在訪問共享數(shù)據(jù)單元的動態(tài)鏈接庫,如果是,則說明狀態(tài)相符,不作處理,退出;如果否,并且該動態(tài)鏈接庫處于激活狀態(tài),則說明說明控制權(quán)已經(jīng)被其它動態(tài)鏈接庫獲取,狀態(tài)不一致,那么,需要改該動態(tài)鏈接庫的狀態(tài)。如果處于非激活狀態(tài),則狀態(tài)一致,不作處理,退出。
當動態(tài)鏈接庫對應(yīng)的網(wǎng)絡(luò)語音通訊模塊退出時,需要對共享數(shù)據(jù)單元記錄信息進行更新,即如果該動態(tài)鏈接庫為當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫,則釋放對音頻設(shè)備的控制權(quán)。當然,如果當前音頻設(shè)備的控制權(quán)已經(jīng)被其它動態(tài)鏈接庫獲取,或者該動態(tài)鏈接庫沒有獲得音頻設(shè)備的控制權(quán),則不修改共享數(shù)據(jù)單元記錄的信息,直接退出。
與上述控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法相配合,本發(fā)明還提供一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的裝置,包括至少一個動態(tài)鏈接庫,供相應(yīng)的網(wǎng)絡(luò)語音通訊模塊調(diào)用;以及共享數(shù)據(jù)單元,用于記錄當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫標識;以及當前所述音頻設(shè)備的通訊狀態(tài);所述動態(tài)鏈接庫獲取所述共享數(shù)據(jù)單元記錄的信息,并根據(jù)該信息獲取對所述音頻設(shè)備的控制權(quán)。所述共享數(shù)據(jù)單元包括計數(shù)器,用于為初次訪問所述共享數(shù)據(jù)單元的動態(tài)鏈接庫分配動態(tài)鏈接庫標識;第一存儲單元,用于記錄當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫標識;第二存儲單元,用于記錄當前所述音頻設(shè)備的通訊狀態(tài)。同樣,為了保證數(shù)據(jù)的一致性所述動態(tài)鏈接庫還用于對所述共享數(shù)據(jù)單元加鎖和去鎖。同樣,為了對共享數(shù)據(jù)單元的記錄的信息即使更新,所述動態(tài)鏈接庫還包括定時單元,用于設(shè)置訪問所述共享數(shù)據(jù)單元的周期,當?shù)竭_所述共享數(shù)據(jù)單元的周期時,對該共享數(shù)據(jù)單元進行訪問。同樣,當某個網(wǎng)絡(luò)語音通訊模塊退出時,如果其對應(yīng)的動態(tài)鏈接庫為當前獲得音頻設(shè)備的控制權(quán)的動態(tài)鏈接庫,則需要將所述控制權(quán)進行釋放。
以下詳細闡述本發(fā)明的實現(xiàn)過程。
網(wǎng)絡(luò)語音通訊模塊通常另外添加音頻設(shè)備進行網(wǎng)絡(luò)通信。在網(wǎng)絡(luò)語音通訊業(yè)務(wù)中使用USB Phone即USB接口的電話進行語音通訊。該USB Phone通過USB接口與終端連接。USB Phone設(shè)備具有集成錄放功能的音頻設(shè)備和鍵盤輸入的人體學(xué)輸入設(shè)備的HID(Human Interface Device,人機對話接口設(shè)備)。網(wǎng)絡(luò)語音通訊模塊與USB Phone設(shè)備連接后,網(wǎng)絡(luò)語音通訊業(yè)務(wù)通過接收HID傳送的按鍵消息,進行撥號、呼叫以及結(jié)束等操作。通過網(wǎng)絡(luò)語音通訊業(yè)務(wù)和USB Phone設(shè)備的配合使用,可使網(wǎng)絡(luò)電話在用戶體驗上達到與傳統(tǒng)電話同等的效果。
網(wǎng)絡(luò)語音通訊模塊通過撥號軟件Dialer來控制UsbPhone設(shè)備,并接受從UsbPhone上報的消息。撥號軟件可以是一個可執(zhí)行程序,獨立存在;或者是一個動態(tài)鏈接庫,供網(wǎng)絡(luò)語音通訊模塊調(diào)用。在本實施例中,控制音頻設(shè)備的裝置包括至少一個撥號軟件Dialer,通過該撥號軟件控制USB Phone設(shè)備,并接受從USB Phone上報的消息。為了避免使用額外的可執(zhí)行程序控制不同網(wǎng)絡(luò)語音通訊模塊間的音頻設(shè)備切換,本實施例中的撥號軟件Dialer采用動態(tài)鏈接庫方式,網(wǎng)絡(luò)語音通訊模塊通過調(diào)用動態(tài)鏈接庫,建立與音頻設(shè)備的連接。如圖1所示,每個網(wǎng)絡(luò)語音通訊模塊對應(yīng)一個動態(tài)鏈接庫,將該動態(tài)鏈接庫命名為Dialer.dll。每個動態(tài)鏈接庫Dialer.dll必須知道當前是自己是否具有USB Phone設(shè)備的控制權(quán),并且,當其他網(wǎng)絡(luò)語音通訊模塊進行通信時,還需要有相應(yīng)的自動控制權(quán)切換方法。以下通過五個方面進行闡述共享數(shù)據(jù)單元的規(guī)劃、Dialer的啟動設(shè)置、控制權(quán)搶奪方案、心跳處理、Dialer退出處理。以下就其實現(xiàn)過程列舉兩個具體實施例進行詳細闡述。
第一實施例在本實施例中,對于每個Dialer.dll,記錄Dialer ID變量,作為Dialer.dll的唯一標識,即本發(fā)明所述的動態(tài)鏈接庫標識。Dialer ID從l開始計數(shù)。
由于每個Dialer.dll都是執(zhí)行一樣的程序,彼此都不知道其它Dialer的狀態(tài),因此,在本實施例中設(shè)定一共享數(shù)據(jù)單元,用于不同動態(tài)鏈接庫之間的通訊。所述共享數(shù)據(jù)單元包括三個信息,分別由所述共享數(shù)據(jù)單元的計數(shù)器、第一存儲單元和第二存儲單元完成;“Dialer.dll計數(shù)器”用于給每個剛啟動的Dialer.dll分配Dialer ID,初始值為1;第一存儲單元在本實施例中存儲“當前激活的DialerID”信息,記錄目前唯一一個激活的Dialer ID,每個Dialer可以通過訪問共享數(shù)據(jù)單元的這個域來了解當前哪個Dialer處于激活狀態(tài),例如,“當前激活的Dialer ID”的初始值為0,表示USB Phone未被任何Dialer占用;“當前激活的Dialer ID”值非0時,則表示USB Phone已被某個Dialer占用;第二存儲單元存儲“當前激活的DialerID是否處于通話狀態(tài)”信息,即本發(fā)明所述的當前音頻設(shè)備的通訊狀態(tài)信息,記錄激活的Dialer的通話狀態(tài),例如,以“true”表示處于通話狀態(tài);“false”表示處于非通話狀態(tài)。
因為共享數(shù)據(jù)單元是多個Dialer共同訪問的,所以,在修改共享數(shù)據(jù)單元之前,必須先對共享數(shù)據(jù)單元進行加鎖處理,完成修改后作去鎖處理。以保證同時只有一個Dialer在訪問共享數(shù)據(jù)單元,從而保證了數(shù)據(jù)的一致性。每個Dialer的Dialer ID值通過共享數(shù)據(jù)單元的“計數(shù)器”獲取,同樣也保證了DialerID的唯一性。接下來,判斷USB Phone設(shè)備是否被其它Dialer占用。如果“當前激活Dialer ID”值為0,表示無人占用,這時,該Dialer占用USB Phone設(shè)備,將自己的Dialer ID填入“當前激活的Dialer ID”;相反,如果“當前激活的DialerID”值非0,則表示USB Phone已經(jīng)被某個Dialer占用,則對共享數(shù)據(jù)單元內(nèi)容不作修改。
根據(jù)上述處理,多個Dialer啟動時,只有第一個Dialer能獲取USB Phone的控制權(quán)。
當處于獲得USB Phone的Dialer沒有通話時,用戶呼叫其它Dialer,則沒有USB Phone控制權(quán)的Dialer可以搶奪USB Phone的控制權(quán),具體流程如下當有用戶呼入時,讀取共享數(shù)據(jù)單元“當前激活的Dialer ID”值,該值如果為0,則表示當前沒有任何Dialer占用USB Phone,進而占用USB Phone的控制權(quán),修改共享數(shù)據(jù)單元相應(yīng)數(shù)據(jù)段,之后退出。如果取出的“當前激活DialerID”值不是0,則說明其它Dialer占用了USB Phone,這時,進一步讀取“是否通話”值,如果占用的Dialer正在處于通話過程,則不能搶奪控制權(quán),這時,應(yīng)該向上層的網(wǎng)絡(luò)語音通訊模塊報告,USB Phone被其它Dialer所占用;如果占用的Dialer不處于通話過程,則進行控制權(quán)搶奪操作,占用USB Phone的控制權(quán),修改共享數(shù)據(jù)單元相應(yīng)數(shù)據(jù)段。
由于Dialer只能單向地訪問共享數(shù)據(jù)單元,共享數(shù)據(jù)單元不能主動向Dialer傳遞信息,因此在本實施例中設(shè)置訪問共享數(shù)據(jù)單元的周期,使Dialer定期訪問共享數(shù)據(jù)單元內(nèi)容,以便及時更新狀態(tài)。具體為,設(shè)置一個定時器,例如Dialer間隔5秒執(zhí)行一次心跳處理,首先,取出共享數(shù)據(jù)單元中的“當前激活Dialer ID”值,如果為0,表示當前USB Phone設(shè)備無人占用,可能的原因是,占用的Dialer所在的網(wǎng)絡(luò)語音通訊模塊程序退出了。這時,按照上文所述方法占用USB Phone的控制權(quán),修改共享數(shù)據(jù)單元相應(yīng)數(shù)據(jù)段。
當Dialer所在的網(wǎng)絡(luò)語音通訊模塊退出時,必須對共享數(shù)據(jù)單元內(nèi)容進行更新,當Dialer所在的網(wǎng)絡(luò)語音通訊模塊退出時,首先判斷自己是否處于為當前獲得音頻設(shè)備的動態(tài)鏈接庫,如果不是,則不必修改共享數(shù)據(jù)單元,直接退出;如果是,則進一步和共享數(shù)據(jù)單元的“當前激活Dialer ID”值進行比較,如果值不同,說明其它Dialer已經(jīng)搶奪了控制權(quán),這時,同樣不修改共享數(shù)據(jù)單元內(nèi)容,直接退出,如果比較結(jié)果兩者值相同,說明狀態(tài)一致,當前Dialer正占用著USB Phone的控制權(quán),這時,應(yīng)該釋放控制權(quán),以便讓其它未退出的Dialer能使用USB Phone。所以,將共享數(shù)據(jù)單元中的“當前激活Dialer ID”值改為初始值0,表示當前沒有任何Dialer占用USB Phone設(shè)備。
第二實施例本實施例與第一實施例的差別在于,對于每個Dialer.dll,記錄了兩個狀態(tài)變量,一為Dialer ID變量,記錄Dialer.dll的唯一標識,即本發(fā)明所述的動態(tài)鏈接庫標識,Dialer ID從1開始計數(shù);二為Active變量,即本發(fā)明所述的動態(tài)鏈接庫的激活狀態(tài),記錄本Dialer.dll是否處于激活狀態(tài)。所謂激活狀態(tài),即獲得USB Phone的控制權(quán),同時只能有一個動態(tài)鏈接庫處于激活狀態(tài)。
由于每個Dialer.dll都是執(zhí)行一樣的程序,彼此都不知道其它動態(tài)鏈接庫的狀態(tài),因此,在本實施例中設(shè)定一共享數(shù)據(jù)單元,用于不同動態(tài)鏈接庫之間的通訊。如圖2所示所述共享數(shù)據(jù)單元包括三個信息,分別由所述共享數(shù)據(jù)單元的計數(shù)器、第一存儲單元和第二存儲單元完成;“Dialer.dll計數(shù)器”用于給每個剛啟動的Dialer.dll分配Dialer ID,初始值為1;第一存儲單元在本實施例中存儲“Dialer.dll計數(shù)器”用于給每個剛啟動的Dialer.dll分配Dialer ID,初始值為1;“當前激活的Dialer ID”記錄目前唯一一個激活的Dialer ID,每個動態(tài)鏈接庫可以通過訪問共享數(shù)據(jù)單元的這個域來了解當前哪個動態(tài)鏈接庫處于激活狀態(tài),例如,“當前激活的Dialer ID”的初始值為0,表示USB Phone未被任何動態(tài)鏈接庫占用;“當前激活的Dialer ID”的值非0,則表示USB Phone已被某個動態(tài)鏈接庫占用;第二存儲單元存儲“當前激活的Dialer ID是否處于通話狀態(tài)”信息,記錄激活的動態(tài)鏈接庫的通話狀態(tài),即本發(fā)明所述的音頻設(shè)備當前的通訊狀態(tài),例如,以“true”表示處于通話狀態(tài);“false”表示處于非通話狀態(tài)。
如圖3所示,因為共享數(shù)據(jù)單元是多個動態(tài)鏈接庫共同訪問的,所以,每個網(wǎng)絡(luò)語音通訊模塊對應(yīng)的動態(tài)鏈接庫在修改共享數(shù)據(jù)單元之前,必須先對共享數(shù)據(jù)單元進行加鎖處理(S0),完成修改后作去鎖處理(S8)。以保證同時只有一個動態(tài)鏈接庫在訪問共享數(shù)據(jù)單元,從而保證了數(shù)據(jù)的一致性。每個動態(tài)鏈接庫的Dialer ID值通過共享數(shù)據(jù)單元的“計數(shù)器”獲取(S1),同樣也保證了Dialer ID的唯一性。然后共享數(shù)據(jù)單元中的計數(shù)器值加一(S2)。接下來,判斷USB Phone設(shè)備是否被其它動態(tài)鏈接庫占用(S3)。如果“當前激活DialerID”值為0,表示無人占用,這時,該動態(tài)鏈接庫占用USB Phone設(shè)備,將自己的Dialer ID填入“當前激活Dialer ID”(S4),進一步修改是否通話為未通話狀態(tài)(S5),并修改Active變量為激活狀態(tài)(S6);相反,如果“當前激活Dialer ID”值非0,則表示USB Phone已經(jīng)被某個Dialer占用,這時,直接修改Active變量為非激活狀態(tài)(S7),對共享數(shù)據(jù)單元內(nèi)容不作修改。
當處于激活狀態(tài)的Dialer沒有通話時,用戶呼叫其它Dialer,則處于非激活狀態(tài)的Dialer可以搶奪USB Phone的控制權(quán),具體流程如圖4所示當有用戶呼入時,判斷本Dialer是否處于激活狀態(tài)(S1),如果已經(jīng)處于激活狀態(tài),則退出(S2),不必進行控制權(quán)搶奪操作。如果處于非激活狀態(tài),在修改共享數(shù)據(jù)單元之前,先對共享數(shù)據(jù)單元進行加鎖處理(S3),則讀取共享數(shù)據(jù)單元的“當前激活Dialer ID”值,判斷是否為0(S4),該值如果為0,則表示當前沒有任何Dialer占用USB Phone,進而占用USB Phone的控制權(quán),修改共享數(shù)據(jù)單元相應(yīng)數(shù)據(jù)段,即將“當前激活Dialer ID”值修改為本Dialer的Dialer ID值(S5),將“是否處于通話狀態(tài)”修改為否(S6),并把Active置為激活狀態(tài)(S7),之后退出。如果取出的“當前激活Dialer ID”值不是0,則說明其它Dialer占用了USB Phone,這時,進一步讀取“是否通話”值(S8),如果占用的Dialer正在處于通話過程,則不能搶奪控制權(quán),這時,應(yīng)該向上層的網(wǎng)絡(luò)語音通訊模塊報告,USB Phone被其它Dialer所占用(S9);如果占用的Dialer不處于通話過程,則進行控制權(quán)搶奪操作,占用USB Phone的控制權(quán),修改共享數(shù)據(jù)單元相應(yīng)數(shù)據(jù)段,即“當前激活的Dialer ID值”和“當前激活的Dialer ID是否處于通話”(S10、S11),并把Active置為激活狀態(tài)(S13),修改完畢后,將共享數(shù)據(jù)單元去鎖(S12)。
由于Dialer只能單向地訪問共享數(shù)據(jù)單元,共享數(shù)據(jù)單元不能主動向Dialer傳遞信息,因此在本實施例中設(shè)置了訪問共享數(shù)據(jù)單元的周期,使Dialer定期訪問共享數(shù)據(jù)單元內(nèi)容,以便及時更新狀態(tài)。具體為,設(shè)置一個定時器,例如Dialer間隔5秒執(zhí)行一次心跳處理,具體的理流程如圖5所示在修改共享數(shù)據(jù)單元之前,必須先對共享數(shù)據(jù)單元進行加鎖處理(S0),完成修改后作去鎖處理(S9),首先,取出共享數(shù)據(jù)單元中的“當前激活DialerID”值,判斷是否為0(S1),如果為0,表示當前USB Phone設(shè)備無人占用,可能的原因是,占用的Dialer所在的網(wǎng)絡(luò)語音通訊模塊程序退出了。這時,按照上文所述方法占用USB Phone的控制權(quán),修改共享數(shù)據(jù)單元相應(yīng)數(shù)據(jù)段,將“當前激活Dialer ID”值修改為本Dialer的Dialer ID值(S2),將“是否處于通話狀態(tài)”修改為否(S3)并把Active置為激活狀態(tài)(S4)。如果“當前激活Dialer ID”值不為0,則和本Dialer ID值相比較(S5),判斷是否相同(S6),如果相同,說明狀態(tài)相符,不作處理,退出(Sl0);如果不同,說明當前激活的Dialer不是自己,進一步再判斷自己是否處于激活狀態(tài)(S7),如果是,說明控制權(quán)已經(jīng)被其它Dialer搶奪,狀態(tài)不一致,那么,就要修改Active變量為非激活狀態(tài)(S8)。如果處于非激活狀態(tài),則狀態(tài)一致,不作處理,退出(S10)。
當Dialer所在的網(wǎng)絡(luò)語音通訊模塊退出時,必須對共享數(shù)據(jù)單元內(nèi)容進行更新,具體操作如圖6所示當Dialer所在的網(wǎng)絡(luò)語音通訊模塊退出時,首先判斷自己是否處于激活狀態(tài)(S1),如果不是,則不必修改共享數(shù)據(jù)單元,直接退出(S8);如果處于激活狀態(tài),在修改共享數(shù)據(jù)單元之前,必須先對共享數(shù)據(jù)單元進行加鎖處理(S2),取出共享數(shù)據(jù)單元中的“當前激活的Dialer ID值”(S3),則進一步和共享數(shù)據(jù)單元的“當前激活Dialer ID”值進行比較(S4),判斷是否相同(S5),如果值不同,說明其它Dialer已經(jīng)搶奪了控制權(quán),這時,同樣不修改共享數(shù)據(jù)單元內(nèi)容,直接退出,如果比較結(jié)果兩者值相同,說明狀態(tài)一致,當前Dialer正占用著USB Phone的控制權(quán),這時,應(yīng)該釋放控制權(quán),以便讓其它未退出的Dialer能使用USB Phone。所以,將共享數(shù)據(jù)單元中的“當前激活Dialer ID”值改為初始值0(S6),表示當前沒有任何Dialer占用USB Phone設(shè)備,完成修改后作去鎖處理(S7)。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
權(quán)利要求
1.一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,網(wǎng)絡(luò)語音通訊軟件調(diào)用動態(tài)鏈接庫控制音頻設(shè)備,其特征在于所述控制過程包括步驟1)判斷是否存在處于激活狀態(tài)的動態(tài)鏈接庫,若有則進入步驟2),若無則獲取音頻設(shè)備的控制權(quán)2)判斷是否存在處于通話狀態(tài)的動態(tài)鏈接庫,若有則結(jié)束本流程,若無則獲取音頻設(shè)備的控制權(quán)。
2.根據(jù)權(quán)利要求1所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,其特征在于,步驟1)之前還包括設(shè)置共享數(shù)據(jù)單元,用于記錄處于激活狀態(tài)的動態(tài)鏈接庫標識;以及處于激活狀態(tài)的動態(tài)鏈接庫是否處于通話狀態(tài)。
3.根據(jù)權(quán)利要求2所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,其特征在于,步驟1)中所述獲取音頻設(shè)備的控制權(quán)包括11)將共享數(shù)據(jù)單元中的處于激活狀態(tài)的動態(tài)鏈接庫標識修改為當前欲獲取控制權(quán)的動態(tài)鏈接庫標識;12)將當前處于激活狀態(tài)的動態(tài)鏈接庫標識設(shè)為處于通話狀態(tài)。
4.根據(jù)權(quán)利要求2或3所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,其特征在于,步驟2)中所述獲取音頻設(shè)備的控制權(quán)包括21)將共享數(shù)據(jù)單元中的處于激活狀態(tài)的動態(tài)鏈接庫標識修改為欲獲取控制權(quán)的動態(tài)鏈接庫標識;22)將當前處于激活狀態(tài)的動態(tài)鏈接庫標識設(shè)為處于通話狀態(tài)。
5.根據(jù)權(quán)利要求2所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,其特征在于所述控制過程還包括動態(tài)鏈接庫定期訪問共享數(shù)據(jù)單元,包括以下步驟31)判斷共享數(shù)據(jù)單元中處于激活狀態(tài)的動態(tài)鏈接庫標識是否為0,若是則將其修改為訪問的動態(tài)鏈接庫標識,若否進入步驟32);32)判斷判斷共享數(shù)據(jù)單元中處于激活狀態(tài)的動態(tài)鏈接庫標識是否與訪問的動態(tài)鏈接庫相同,若相同則結(jié)束本流程,若不同則進入步驟33);33)將當前訪問的動態(tài)鏈接庫標識設(shè)為處于通話狀態(tài)。
6.根據(jù)權(quán)利要求2、3、5中任一項所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,其特征在于,還包括在訪問所述共享數(shù)據(jù)單元時,對所述共享數(shù)據(jù)單元加鎖,以及退出所述共享數(shù)據(jù)單元時,對所述共享數(shù)據(jù)單元去鎖。
7.一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的裝置,其特征在于,包括至少一個動態(tài)鏈接庫,供相應(yīng)的網(wǎng)絡(luò)語音通訊模塊調(diào)用;共享數(shù)據(jù)單元,用于各個動態(tài)鏈接庫之間的通訊,實現(xiàn)對音頻設(shè)備的控制。
8.根據(jù)權(quán)利要求7所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的裝置,其特征在于,所述共享數(shù)據(jù)單元記錄當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫標識;以及當前所述音頻設(shè)備的通話狀態(tài);所述動態(tài)鏈接庫獲取所述共享數(shù)據(jù)單元記錄的信息,并根據(jù)該信息獲取對所述音頻設(shè)備的控制權(quán)。
9.根據(jù)權(quán)利要求8所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的裝置,其特征在于,所述共享數(shù)據(jù)單元包括計數(shù)器,用于網(wǎng)絡(luò)語音通訊模塊啟動時為相應(yīng)的動態(tài)鏈接庫分配動態(tài)鏈接庫標識;第一存儲單元,用于記錄當前獲得音頻設(shè)備控制權(quán)的動態(tài)鏈接庫標識;第二存儲單元,用于記錄音頻設(shè)備當前的通訊狀態(tài)。
10.根據(jù)權(quán)利要求9所述的控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的裝置,其特征在于,還包括定時單元,用于設(shè)置訪問所述共享數(shù)據(jù)單元的周期。
全文摘要
一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的方法,網(wǎng)絡(luò)語音通訊軟件調(diào)用動態(tài)鏈接庫控制音頻設(shè)備,所述控制過程包括步驟1)判斷是否存在處于激活狀態(tài)的動態(tài)鏈接庫,若有則進入步驟2),若無則獲取音頻設(shè)備的控制權(quán);2)判斷是否存在處于通話狀態(tài)的動態(tài)鏈接庫,若有則結(jié)束本流程,若無則獲取音頻設(shè)備的控制權(quán)。本發(fā)明還提供了一種控制網(wǎng)絡(luò)語音通訊音頻設(shè)備的裝置,包括至少一個動態(tài)鏈接庫,供相應(yīng)的網(wǎng)絡(luò)語音通訊模塊調(diào)用;共享數(shù)據(jù)單元,用于各個動態(tài)鏈接庫之間的通訊,實現(xiàn)對音頻設(shè)備的控制。
文檔編號H04M7/00GK1909570SQ20051008835
公開日2007年2月7日 申請日期2005年8月2日 優(yōu)先權(quán)日2005年8月2日
發(fā)明者王麒 申請人:騰訊科技(深圳)有限公司