專(zhuān)利名稱(chēng):一種多鼠標(biāo)/鍵盤(pán)模擬裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)的鼠標(biāo)、鍵盤(pán)模擬裝置,具體為一種多鼠標(biāo)/鍵盤(pán)模擬裝置。
背景技術(shù):
現(xiàn)有計(jì)算機(jī)的鼠標(biāo)、鍵盤(pán)模擬裝置均只能模擬一個(gè)鼠標(biāo)或鍵盤(pán),如果需要通過(guò)模擬裝置控制多臺(tái)設(shè)備,則需要占用多個(gè)通信接口,通常需要外接一個(gè)擴(kuò)展通信接口的HUB, 這樣會(huì)影響系統(tǒng)的穩(wěn)定性;另外,大部分現(xiàn)有裝置都不提供反饋消息,使得上層控制應(yīng)用不知道所發(fā)的操作命令是否正確執(zhí)行。
發(fā)明內(nèi)容
本發(fā)明為了解決現(xiàn)有計(jì)算機(jī)的模擬鼠標(biāo)/鍵盤(pán)控制裝置只能控制一個(gè)鼠標(biāo)或鍵盤(pán)以及無(wú)法向上層應(yīng)用反饋操作結(jié)果的問(wèn)題,提供了一種多鼠標(biāo)/鍵盤(pán)模擬裝置。本發(fā)明是采用如下技術(shù)方案實(shí)現(xiàn)的一種多鼠標(biāo)/鍵盤(pán)模擬裝置,包括主處理機(jī)工作組、若干個(gè)從處理機(jī)工作組、標(biāo)準(zhǔn)通信總線、主控制機(jī)工作組、若干個(gè)被控制機(jī)工作組、 主板、電源、以及軟件模塊;主處理機(jī)工作組、標(biāo)準(zhǔn)通信總線和從處理機(jī)工作組均集成在主板上;電源與主板的電源端相連;標(biāo)準(zhǔn)通信總線由總線控制器、以及通信介質(zhì)構(gòu)成;主處理機(jī)工作組和從處理機(jī)工作組均由處理機(jī)、通信模塊和內(nèi)部通信模塊構(gòu)成;其中,主處理機(jī)工作組的處理機(jī)稱(chēng)為主處理機(jī),從處理機(jī)工作組的處理機(jī)稱(chēng)為從處理機(jī);被控制機(jī)工作組包括被控制機(jī)、以及通信模塊;主控制機(jī)工作組包括主控制機(jī)、以及通信模塊;主處理機(jī)工作組的內(nèi)部通信模塊經(jīng)標(biāo)準(zhǔn)通信總線的總線控制器分別與各個(gè)從處理機(jī)工作組的內(nèi)部通信模塊相連;主處理機(jī)工作組的通信模塊與主控制機(jī)工作組的通信模塊相連,構(gòu)成物理鏈路, 并在其上根據(jù)標(biāo)準(zhǔn)通信協(xié)議進(jìn)行通信;從處理機(jī)的通信模塊分別與對(duì)應(yīng)的被控制機(jī)通信模塊相連,構(gòu)成物理鏈路,并在其上根據(jù)PS/2協(xié)議、USB協(xié)議或無(wú)線通信協(xié)議進(jìn)行通信;主控制機(jī)命令包括命令類(lèi)型和參數(shù)對(duì)象兩個(gè)數(shù)據(jù)項(xiàng);命令類(lèi)型為枚舉型或整型,包括鍵盤(pán)操作、 鼠標(biāo)操作、獲取從處理機(jī)配置、更新從處理機(jī)配置;參數(shù)對(duì)象包含對(duì)應(yīng)命令的參數(shù)信息;主處理機(jī)收到主控制機(jī)命令,經(jīng)過(guò)處理后,向?qū)?yīng)的從處理機(jī)發(fā)送對(duì)應(yīng)的主處理機(jī)命令,并接收從處理機(jī)工作組發(fā)來(lái)的從處理機(jī)消息;從處理機(jī)機(jī)工作組收到主處理機(jī)命令后,進(jìn)行處理,通過(guò)從處理機(jī)的通信模塊按標(biāo)準(zhǔn)通信協(xié)議USB協(xié)議、PS/2協(xié)議或無(wú)線通信協(xié)議向被控制機(jī)發(fā)送相應(yīng)信息,并接收被控制機(jī)的反饋信息,處理后再生成從處理機(jī)消息發(fā)給主處理機(jī)工作組;
軟件模塊包括設(shè)于主控制機(jī)內(nèi)的控制機(jī)驅(qū)動(dòng)軟件模塊、設(shè)于主處理機(jī)內(nèi)的主處理機(jī)軟件模塊、以及設(shè)于從處理機(jī)內(nèi)的從處理機(jī)軟件模塊;控制機(jī)驅(qū)動(dòng)軟件模塊為標(biāo)準(zhǔn)硬件驅(qū)動(dòng)程序,提供配置從處理機(jī)和向主處理機(jī)發(fā)送鼠標(biāo)/鍵盤(pán)操作命令的軟件接口,它由操作系統(tǒng)和上層應(yīng)用軟件調(diào)用;主處理機(jī)軟件模塊在加電時(shí)自動(dòng)加載,負(fù)責(zé)處理主控制機(jī)命令和從處理機(jī)消息,并向主控制機(jī)發(fā)送響應(yīng)主控制機(jī)命令或報(bào)告主處理機(jī)工作組和從處理機(jī)工作組狀態(tài)的主處理機(jī)消息,向從處理機(jī)發(fā)送主處理機(jī)命令;從處理機(jī)軟件模塊在加電時(shí)自動(dòng)加載,負(fù)責(zé)處理主處理機(jī)命令,并向主處理機(jī)工作組報(bào)告主處理機(jī)命令的執(zhí)行結(jié)果及其工作狀態(tài)的從處理機(jī)消息;
控制機(jī)驅(qū)動(dòng)軟件模塊包含驅(qū)動(dòng)初始化子模塊、配置模擬裝置子模塊、獲取模擬裝置配置表子模塊、發(fā)送模擬操作命令子模塊、接收主處理機(jī)消息子模塊、處理主處理機(jī)消息子模塊、通信子模塊、以及模擬裝置配置數(shù)據(jù)模塊;
控制機(jī)驅(qū)動(dòng)軟件模塊的驅(qū)動(dòng)初始化子模塊在操作系統(tǒng)檢測(cè)到模擬裝置硬件后由操作系統(tǒng)調(diào)用,從模擬裝置配置數(shù)據(jù)模塊中讀取初始化數(shù)據(jù),生成初始化命令,并調(diào)用通信子模塊發(fā)送初始化命令、接收主處理機(jī)工作組消息,根據(jù)主處理機(jī)工作組消息生成下一個(gè)初始化命令,循環(huán)處理直到初始化交互完成;
控制機(jī)驅(qū)動(dòng)軟件模塊的配置模擬裝置子模塊由上層應(yīng)用軟件調(diào)用,有兩個(gè)參數(shù),分別為從處理機(jī)ID號(hào)和模擬設(shè)備類(lèi)型;從處理機(jī)ID號(hào)指明要配置哪個(gè)從處理機(jī)工作組;模擬設(shè)備類(lèi)型指明要將該從處理機(jī)工作組配置為鼠標(biāo)模擬器還是鍵盤(pán)模擬器;其工作流程為
1001.生成配置從處理機(jī)命令;
1002.調(diào)用通信子模塊向主處理機(jī)工作組發(fā)送配置從處理機(jī)命令;
1003.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的獲取模擬裝置配置子模塊由上層應(yīng)用程序調(diào)用,參數(shù)為主處理機(jī)ID號(hào),表示要獲取的主處理機(jī)的ID號(hào),可用-1或大于最大從處理機(jī)ID號(hào)的值表示主處理機(jī);工作流程為
1101.檢查模擬裝置配置數(shù)據(jù)模塊中是否有參數(shù)表中的主處理機(jī)ID號(hào),如果沒(méi)有,報(bào)錯(cuò),結(jié)束操作;如果有,執(zhí)行下一步;
1102.產(chǎn)生一個(gè)空的主控制機(jī)命令;
1103.將主控制機(jī)命令的命令類(lèi)型設(shè)置為獲取配置;
1104.將參數(shù)列表中的主處理機(jī)ID號(hào)封裝為主控制機(jī)命令的參數(shù)對(duì)象;
1105.調(diào)用通信子模塊發(fā)送主控制機(jī)命令;
1106.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的發(fā)送模擬操作命令子模塊由上層應(yīng)用軟件調(diào)用,包含的參數(shù)有本命令I(lǐng)D號(hào)、從處理機(jī)ID號(hào)、操作類(lèi)型和操作描述符;操作類(lèi)型有鍵盤(pán)操作和鼠標(biāo)操作;操作類(lèi)型為鍵盤(pán)操作時(shí)操作描述符中包含的信息有操作哪個(gè)按鍵和操作的類(lèi)型,如按下或者釋放;操作類(lèi)型為鼠標(biāo)操作時(shí)操作描述符包含的信息為各方向移動(dòng)距離、方向和各按鍵狀態(tài);其工作流程為
1201.檢查模擬裝置配置數(shù)據(jù)模塊中是否有參數(shù)表中的從處理機(jī)ID號(hào),如果沒(méi)有,報(bào)錯(cuò),結(jié)束操作;如果有,執(zhí)行下一步;
1202.檢查模擬裝置配置數(shù)據(jù)模塊中參數(shù)表中的從處理機(jī)ID號(hào)對(duì)應(yīng)的模擬類(lèi)型是否為鍵盤(pán);如果不是,報(bào)錯(cuò),結(jié)束操作;如果是,執(zhí)行下一步;
1203.檢查鍵盤(pán)操作描述符是否合法;如果不合法,報(bào)錯(cuò),結(jié)束操作;如果合法,執(zhí)行下一步;
1204.產(chǎn)生一個(gè)命令I(lǐng)D號(hào);
1205.產(chǎn)生一個(gè)空的主控制機(jī)命令;
1206.將主控制機(jī)命令的命令類(lèi)型設(shè)置為鍵盤(pán)操作;1207.將命令I(lǐng)D號(hào)、參數(shù)列表中的從處理機(jī)ID號(hào)和鍵盤(pán)操作描述符封裝為主控制機(jī)命令的參數(shù)對(duì)象;
1208.調(diào)用通信子模塊發(fā)送主控制機(jī)命令;
1209.將命令I(lǐng)D號(hào)放入待反饋命令列表中;
1210.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的接收主處理機(jī)消息子模塊由上層應(yīng)用程序調(diào)用,工作流程為
1301.初始化超時(shí)標(biāo)記;
1302.調(diào)用通信子模塊接收主處理機(jī)發(fā)送的主處理機(jī)消息;
1303.如果收到,執(zhí)行步驟1305;否則檢測(cè)是否超時(shí),如果超時(shí)執(zhí)行步驟1304,否則執(zhí)行步驟1302 ;
1304.報(bào)錯(cuò),結(jié)束操作;
1305.以接收到的主處理機(jī)消息為參數(shù),調(diào)用處理主處理機(jī)消息子模塊;
1306.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的處理主處理機(jī)消息子模塊,參數(shù)為主處理機(jī)消息;工作流程
為
1401.檢查參數(shù)是否合法;如果不合法,報(bào)錯(cuò),結(jié)束操作;如果合法,執(zhí)行下一步;
1402.檢查主處理機(jī)消息的消息類(lèi)型,如果消息類(lèi)型是更新從處理機(jī)狀態(tài),則執(zhí)行步驟 1403 ;如果消息類(lèi)型是命令反饋,則執(zhí)行步驟1405 ;
1403.更新模擬裝置配置數(shù)據(jù)模塊中對(duì)應(yīng)的從處理機(jī)狀態(tài),結(jié)束操作;
1404.從主處理機(jī)消息中取出參數(shù)對(duì)象;
1405.查找待反饋命令列表中是否有參數(shù)對(duì)象中包換的命令I(lǐng)D號(hào),沒(méi)有則結(jié)束操作;
1406.檢查參數(shù)對(duì)象中的命令執(zhí)行結(jié)果,如果表示執(zhí)行成功,將該命令I(lǐng)D號(hào)從待反饋命令列表中刪除;如果表示執(zhí)行不成功,則將該命令I(lǐng)D號(hào)從待反饋命令列表中移動(dòng)到未成功執(zhí)行命令列表中;
1407.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的通信子模塊包括接收和發(fā)送兩個(gè)子單元,根據(jù)標(biāo)準(zhǔn)通信協(xié)議規(guī)定的流程接收和發(fā)送數(shù)據(jù);
控制機(jī)驅(qū)動(dòng)軟件模塊的模擬裝置配置數(shù)據(jù)模塊中保存標(biāo)準(zhǔn)通信協(xié)議所規(guī)定的配置信息,以及各從處理機(jī)工作組的狀態(tài)信息,如待機(jī)/正常工作/故障、當(dāng)前模擬鼠標(biāo)還是鍵盤(pán)、 ID號(hào);
主處理機(jī)軟件模塊包括主處理機(jī)配置表數(shù)據(jù)子模塊、臨時(shí)數(shù)據(jù)子模塊、主處理機(jī)主函數(shù)模塊、主處理機(jī)初始化子模塊、接收主控制機(jī)命令子模塊、發(fā)送主處理機(jī)消息子模塊、處理主控制機(jī)命令子模塊、接收從處理機(jī)消息子模塊、處理從處理機(jī)消息子模塊、以及發(fā)送主處理機(jī)命令子模塊;
主處理機(jī)軟件模塊的主處理機(jī)配置表數(shù)據(jù)子模塊為數(shù)據(jù)模塊,保存模擬裝置設(shè)備描述信息、各從處理機(jī)配置信息和狀態(tài)信息,從機(jī)狀態(tài)信息的初始值為未初始化;
主處理機(jī)軟件模塊的臨時(shí)數(shù)據(jù)子模塊包括待發(fā)送主處理機(jī)命令列表、待發(fā)送主處理機(jī)消息列表、待處理從處理機(jī)消息列表、待處理主控制機(jī)命令列表、以及待反饋命令列表;
主處理機(jī)軟件模塊的主處理機(jī)主函數(shù)子模塊在模擬裝置加電時(shí)自動(dòng)加載;其工作流程為
2001.檢查與主控制機(jī)建立通信信道是否已建立,如果尚未建立,則調(diào)用主處理機(jī)初始化子模塊與主控制機(jī)建立通信信道;
2002.分別執(zhí)行以下六個(gè)步驟,執(zhí)行順序可互換 2002. 1調(diào)用接收主控制機(jī)命令子模塊;
2002. 2調(diào)用處理主控制機(jī)命令子模塊; 2002. 3調(diào)用接收從處理機(jī)消息模塊; 2002. 4調(diào)用處理從處理機(jī)消息模塊; 2002. 5調(diào)用發(fā)送主處理機(jī)消息模塊;
2002.6調(diào)用發(fā)送主處理機(jī)命令模塊;
2003.執(zhí)行步驟2001;
主處理機(jī)軟件模塊的主處理機(jī)初始化子模塊從主處理機(jī)配置表數(shù)據(jù)模塊獲取配置信息,按標(biāo)準(zhǔn)通信協(xié)議從通信模塊中讀取初始化命令數(shù)據(jù)包,或?qū)懭氤跏蓟顢?shù)據(jù)包,建立與主控制機(jī)的通信信道;
主處理機(jī)軟件模塊的接收主控制機(jī)命令子模塊用于接收主控制機(jī)發(fā)來(lái)的數(shù)據(jù),其工作流程為
2101.檢測(cè)主處理機(jī)的通信模塊緩沖區(qū)中是否有數(shù)據(jù),有則執(zhí)行下一步,沒(méi)有則執(zhí)行步驟2104 ;
2102.從主處理機(jī)的通信模塊緩沖區(qū)中讀取數(shù)據(jù);
2103.檢查讀取到的數(shù)據(jù)是否為主控制機(jī)命令,如果是則執(zhí)行步驟2103.1,否則執(zhí)行步驟2104 ;
2103. 1將數(shù)據(jù)格式化為主控制機(jī)命令;
2103. 2將該主控制機(jī)命令添加到待處理主控制機(jī)命令列表中;
2103.3執(zhí)行步驟2101 ;
2104.結(jié)束操作;
主處理機(jī)軟件模塊的發(fā)送主處理機(jī)消息子模塊用于向主控制機(jī)發(fā)送主處理機(jī)消息,工作流程為
2201.檢查待發(fā)送主處理機(jī)消息列表是否為空,如果為空則結(jié)束操作,否則執(zhí)行下一
止
少;
2202.從待發(fā)送主處理機(jī)消息列表中取出一個(gè)主處理機(jī)消息作為當(dāng)前主處理機(jī)消息;
2203.按標(biāo)準(zhǔn)通信協(xié)議要求將當(dāng)前主處理機(jī)消息格式化為數(shù)據(jù)包;
2204.向主處理機(jī)的通信模塊緩沖區(qū)中寫(xiě)入數(shù)據(jù)包;
2205.執(zhí)行步驟2201;
主處理機(jī)軟件模塊的處理主控制機(jī)命令子模塊用于處理已收到的主控制機(jī)命令,工作流程為
2301.檢查待處理主控制機(jī)命令列表是否為空,如果為空,則結(jié)束操作,否則執(zhí)行下一
止
少;
2302.從待處理主控制機(jī)命令列表中取出一個(gè)主控制機(jī)命令作為當(dāng)前主控制機(jī)命令;
2303.檢查命令類(lèi)型,如果命令類(lèi)型是鍵盤(pán)操作或鼠標(biāo)操作,則執(zhí)行步驟2303.1 ;如果是獲取從處理機(jī)配置,則執(zhí)行步驟2303. 2 ;如果是更新從處理機(jī)配置,則執(zhí)行步驟 2303. 3 ;
2303. 1檢查對(duì)應(yīng)從處理機(jī)的模擬類(lèi)型是否與命令類(lèi)型一致,如果一致執(zhí)行步驟 2303. 1. 1,否則執(zhí)行步驟2303. 1. 2 ;
2303. 1. 1將當(dāng)前主控制機(jī)命令格式化為主處理機(jī)命令,并添加到待發(fā)送主處理機(jī)命令列表;
2303. 1.2從當(dāng)前主控制機(jī)命令中取出命令序號(hào),和錯(cuò)誤碼一起封裝成主處理機(jī)消息, 放入待發(fā)送主處理機(jī)消息列表中;
2303. 2從主處理機(jī)配置表數(shù)據(jù)模塊中取出對(duì)應(yīng)從處理機(jī)的配置信息,封裝成主處理機(jī)消息,放入待發(fā)送主處理機(jī)消息列表中;
2303. 3檢查主控制機(jī)命令中的參數(shù)對(duì)象所列從處理機(jī)配置是否與主處理機(jī)配置表數(shù)據(jù)模塊中對(duì)應(yīng)從處理機(jī)當(dāng)前的配置信息完全相同,如果完全相同,則執(zhí)行步驟2303. 3. 1, 否則執(zhí)行步驟2303. 3. 2 ;
2303. 3. 1從當(dāng)前主控制機(jī)命令中取出命令序號(hào),和執(zhí)行成功碼一起封裝成主處理機(jī)消息,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)消息列表中;
2303.3. 2將命令序號(hào)、與對(duì)應(yīng)從處理機(jī)當(dāng)前配置信息不同的配置項(xiàng)、以及對(duì)應(yīng)從處理機(jī)ID封裝成主處理機(jī)命令,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)命令列表;
2304.執(zhí)行步驟2301;
主處理機(jī)軟件模塊的接收從處理機(jī)消息子模塊用于接收從處理機(jī)發(fā)來(lái)的從處理機(jī)消息,其工作流程為
2401.根據(jù)標(biāo)準(zhǔn)通信協(xié)議檢測(cè)是否有從處理機(jī)請(qǐng)求通信,如果有執(zhí)行下一步,否則結(jié)束操作;
2402.根據(jù)標(biāo)準(zhǔn)通信協(xié)議接收從處理機(jī)發(fā)來(lái)的數(shù)據(jù);
2403.檢查收到的數(shù)據(jù)是否為從處理機(jī)消息,是則執(zhí)行下一步,否則執(zhí)行步驟對(duì)05
2404.將收到的數(shù)據(jù)格式化為從處理機(jī)消息,放入待處理從處理機(jī)消息列表中;
2405.執(zhí)行步驟2401;
主處理機(jī)軟件模塊的處理從處理機(jī)消息子模塊用于處理已收到的從處理機(jī)消息,工作流程為
2501.檢查待處理從處理機(jī)消息列表是否為空,如果為空,則結(jié)束操作,否則執(zhí)行下一
步
2502.從待處理從處理機(jī)消息列表中取出一個(gè)從處理機(jī)消息作為當(dāng)前從處理機(jī)消
息;
2503.檢查消息類(lèi)型,如果是獲取配置信息,則執(zhí)行步驟2503.1 ;如果是命令反饋,則執(zhí)行步驟2503. 2 ;
2503. 1取出對(duì)應(yīng)從處理機(jī)的配置信息,將其和從處理機(jī)ID封裝成主處理機(jī)命令,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)命令列表;
2503. 2根據(jù)消息中的原命令類(lèi)型和參數(shù)對(duì)象修改對(duì)應(yīng)從處理機(jī)的工作狀態(tài),編寫(xiě)對(duì)應(yīng)的主處理機(jī)消息,并將其放入待發(fā)送主處理機(jī)消息列表中;2504.結(jié)束操作;主處理機(jī)軟件模塊的發(fā)送主處理機(jī)命令子模塊用于向從處理機(jī)發(fā)送主處理機(jī)命令,工作流程為
2601.檢查待發(fā)送主處理機(jī)命令列表是否為空,如果為空則結(jié)束操作,否則執(zhí)行下一
止
少;
2602.從待發(fā)送主處理機(jī)命令列表中取出一個(gè)主處理機(jī)命令作為當(dāng)前主處理機(jī)命
令;
2603.檢查主處理機(jī)配置表數(shù)據(jù)模塊中對(duì)應(yīng)從處理機(jī)的工作狀態(tài),如果狀態(tài)為“就緒”,則執(zhí)行下一步,否則將其重新放回待發(fā)送主處理機(jī)命令列表,執(zhí)行步驟2601 ;
2603.按標(biāo)準(zhǔn)通信協(xié)議要求將當(dāng)前主處理機(jī)命令格式化為數(shù)據(jù)包;
2604.根據(jù)標(biāo)準(zhǔn)通信協(xié)議向從處理機(jī)發(fā)送數(shù)據(jù)包;
2605.將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”;
2606.將當(dāng)前主處理機(jī)命令放入待反饋命令列表中;
2607.執(zhí)行步驟2601;
從處理機(jī)軟件模塊包括從處理機(jī)配置數(shù)據(jù)子模塊、從處理機(jī)主程序子模塊、初始化從處理機(jī)子模塊、接收主處理機(jī)命令子模塊、處理主處理機(jī)命令子模塊、發(fā)送從處理機(jī)消息子模塊、發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊;
從處理機(jī)軟件模塊的從處理機(jī)配置數(shù)據(jù)子模塊保存從處理機(jī)的配置信息,包括設(shè)備描述符、從處理機(jī)ID號(hào)、模擬類(lèi)型和待處理主處理機(jī)命令、待發(fā)送從處理機(jī)消息、鍵盤(pán)/鼠標(biāo)命令;
從處理機(jī)軟件模塊的從處理機(jī)主程序子模塊在從處理機(jī)加電時(shí)自動(dòng)執(zhí)行,工作流程
為
3001.調(diào)用初始化從處理機(jī)子模塊;
3002.調(diào)用接收主處理機(jī)命令子模塊,檢查是否接收到主處理機(jī)命令,如果接收到了執(zhí)行下一步,否則執(zhí)行步驟3002 ;
3003.調(diào)用處理主處理機(jī)命令子模塊,處理接收到的主處理機(jī)命令;
3004.調(diào)用發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊;
3005.調(diào)用發(fā)送從處理機(jī)消息子模塊;
3006.執(zhí)行步驟3002;
從處理機(jī)軟件模塊的初始化從處理機(jī)子模塊負(fù)責(zé)從主處理機(jī)獲取配置信息,并與被控制機(jī)建立通信信道,工作流程為
3101.編寫(xiě)表示請(qǐng)求從處理機(jī)配置信息的從處理機(jī)消息;
3102.調(diào)用發(fā)送從處理機(jī)消息子模塊,發(fā)送從處理機(jī)消息;
3103.循環(huán)調(diào)用接收主處理機(jī)命令模塊,直到收到包含本從處理機(jī)配置信息的主處理機(jī)命令,執(zhí)行下一步;
3104.根據(jù)主處理機(jī)命令中包含的從處理機(jī)配置信息更新從處理機(jī)配置數(shù)據(jù)子模塊中相應(yīng)的數(shù)據(jù);
3105.根據(jù)從處理機(jī)配置信息和標(biāo)準(zhǔn)通信協(xié)議從通信模塊的緩沖區(qū)中讀取和寫(xiě)入初始化數(shù)據(jù)包;
3106.檢測(cè)是否正確建立與被控制機(jī)之間的通信信道,如果沒(méi)有,執(zhí)行步驟3105,否則執(zhí)行下一步;
3107.編寫(xiě)表示從處理機(jī)工作狀態(tài)為就緒的從處理機(jī)消息;
3108.調(diào)用發(fā)送從處理機(jī)消息子模塊,發(fā)送從處理機(jī)消息;
3109.結(jié)束操作;
從處理機(jī)軟件模塊的接收主處理機(jī)命令子模塊根據(jù)標(biāo)準(zhǔn)通信協(xié)議檢測(cè)主處理機(jī)是否請(qǐng)求發(fā)送數(shù)據(jù),如果檢測(cè)到請(qǐng)求,根據(jù)標(biāo)準(zhǔn)通信協(xié)議規(guī)定接收數(shù)據(jù),接收完數(shù)據(jù)后,將其格式轉(zhuǎn)化為主處理機(jī)命令形式記錄在從處理機(jī)數(shù)據(jù)子模塊中;
從處理機(jī)軟件模塊的處理主處理機(jī)命令子模塊從從處理機(jī)數(shù)據(jù)子模塊中取出待處理主處理機(jī)命令,判斷命令類(lèi)型,如果是更新配置信息,則根據(jù)主處理機(jī)命令中包含的配置信息更新對(duì)應(yīng)的配置信息項(xiàng),編寫(xiě)用于反饋的從處理機(jī)消息,并調(diào)用發(fā)送從處理機(jī)消息子模塊發(fā)送該從處理機(jī)消息;然后重新啟動(dòng)本從處理機(jī);如果是鍵盤(pán)/鼠標(biāo)操作命令,根據(jù)主處理機(jī)命令包含的參數(shù)對(duì)象編寫(xiě)對(duì)應(yīng)的鍵盤(pán)/鼠標(biāo)操作命令,并將其寫(xiě)入從處理機(jī)數(shù)據(jù)子模塊中;然后清除從處理機(jī)數(shù)據(jù)子模塊中的待處理主處理機(jī)命令數(shù)據(jù)項(xiàng);
從處理機(jī)軟件模塊的發(fā)送從處理機(jī)消息子模塊從從處理機(jī)數(shù)據(jù)子模塊中取出待發(fā)送從處理將消息,按標(biāo)準(zhǔn)通信協(xié)議將其發(fā)送給主處理機(jī);然后將從處理機(jī)數(shù)據(jù)子模塊中的待發(fā)送從處理機(jī)消息清除;
從處理機(jī)軟件模塊的發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊按標(biāo)準(zhǔn)通信協(xié)議把從處理機(jī)數(shù)據(jù)模塊中的待發(fā)送鍵盤(pán)/鼠標(biāo)命令封裝為標(biāo)準(zhǔn)的數(shù)據(jù)包,放入通信模塊的緩沖區(qū)中;檢測(cè)是否發(fā)送成功;編寫(xiě)表示發(fā)送成功或失敗的從處理機(jī)消息,并將其放任從處理機(jī)數(shù)據(jù)子模塊中; 清除從處理機(jī)數(shù)據(jù)子模塊中的待發(fā)送鍵盤(pán)/鼠標(biāo)命令。本發(fā)明所述的裝置可靠性強(qiáng),可模擬多個(gè)鼠標(biāo)或鍵盤(pán),并向上層應(yīng)用反饋操作結(jié)果;解決了現(xiàn)有計(jì)算機(jī)的模擬鼠標(biāo)/鍵盤(pán)控制裝置只能控制一個(gè)鼠標(biāo)或鍵盤(pán)以及無(wú)法向上層應(yīng)用反饋操作結(jié)果的問(wèn)題,可廣泛適用于計(jì)算機(jī)模擬鼠標(biāo)/鍵盤(pán)控制。
圖1本發(fā)明的結(jié)構(gòu)示意圖。
具體實(shí)施例方式一種多鼠標(biāo)/鍵盤(pán)模擬裝置,包括主處理機(jī)工作組、若干個(gè)從處理機(jī)工作組、標(biāo)準(zhǔn)通信總線、主控制機(jī)工作組、若干個(gè)被控制機(jī)工作組、主板、電源、以及軟件模塊;主處理機(jī)工作組、標(biāo)準(zhǔn)通信總線和從處理機(jī)工作組均集成在主板上;電源與主板的電源端相連;標(biāo)準(zhǔn)通信總線由總線控制器、以及通信介質(zhì)構(gòu)成;主處理機(jī)工作組和從處理機(jī)工作組均由處理機(jī)、通信模塊和內(nèi)部通信模塊構(gòu)成;其中,主處理機(jī)工作組的處理機(jī)稱(chēng)為主處理機(jī),從處理機(jī)工作組的處理機(jī)稱(chēng)為從處理機(jī);被控制機(jī)工作組包括被控制機(jī)、以及通信模塊;主控制機(jī)工作組包括主控制機(jī)、以及通信模塊;主處理機(jī)工作組的內(nèi)部通信模塊經(jīng)標(biāo)準(zhǔn)通信總線的總線控制器分別與各個(gè)從處理機(jī)工作組的內(nèi)部通信模塊相連;主處理機(jī)工作組的通信模塊與主控制機(jī)工作組的通信模塊相連,構(gòu)成物理鏈路,并在其上根據(jù)標(biāo)準(zhǔn)通信協(xié)議進(jìn)行通信;從處理機(jī)的通信模塊分別與對(duì)應(yīng)的被控制機(jī)通信模塊相連,構(gòu)成物理鏈路,并在其上根據(jù)PS/2協(xié)議、USB協(xié)議或無(wú)線通信協(xié)議進(jìn)行通信;主控制機(jī)命令包括命令類(lèi)型和參數(shù)對(duì)象兩個(gè)數(shù)據(jù)項(xiàng);命令類(lèi)型為枚舉型或整型,包括鍵盤(pán)操作、鼠標(biāo)操作、獲取從處理機(jī)配置、更新從處理機(jī)配置;參數(shù)對(duì)象包含對(duì)應(yīng)命令的參數(shù)信息;主處理機(jī)收到主控制機(jī)命令,經(jīng)過(guò)處理后,向?qū)?yīng)的從處理機(jī)發(fā)送對(duì)應(yīng)的主處理機(jī)命令,并接收從處理機(jī)工作組發(fā)來(lái)的從處理機(jī)消息;從處理機(jī)機(jī)工作組收到主處理機(jī)命令后,進(jìn)行處理,通過(guò)從處理機(jī)的通信模塊按標(biāo)準(zhǔn)通信協(xié)議USB協(xié)議、PS/2協(xié)議或無(wú)線通信協(xié)議向被控制機(jī)發(fā)送相應(yīng)信息,并接收被控制機(jī)的反饋信息,處理后再生成從處理機(jī)消息發(fā)給主處理機(jī)工作組;
軟件模塊包括設(shè)于主控制機(jī)內(nèi)的控制機(jī)驅(qū)動(dòng)軟件模塊、設(shè)于主處理機(jī)內(nèi)的主處理機(jī)軟件模塊、以及設(shè)于從處理機(jī)內(nèi)的從處理機(jī)軟件模塊;控制機(jī)驅(qū)動(dòng)軟件模塊為標(biāo)準(zhǔn)硬件驅(qū)動(dòng)程序,提供配置從處理機(jī)和向主處理機(jī)發(fā)送鼠標(biāo)/鍵盤(pán)操作命令的軟件接口,它由操作系統(tǒng)和上層應(yīng)用軟件調(diào)用;主處理機(jī)軟件模塊在加電時(shí)自動(dòng)加載,負(fù)責(zé)處理主控制機(jī)命令和從處理機(jī)消息,并向主控制機(jī)發(fā)送響應(yīng)主控制機(jī)命令或報(bào)告主處理機(jī)工作組和從處理機(jī)工作組狀態(tài)的主處理機(jī)消息,向從處理機(jī)發(fā)送主處理機(jī)命令;從處理機(jī)軟件模塊在加電時(shí)自動(dòng)加載,負(fù)責(zé)處理主處理機(jī)命令,并向主處理機(jī)工作組報(bào)告主處理機(jī)命令的執(zhí)行結(jié)果及其工作狀態(tài)的從處理機(jī)消息;
控制機(jī)驅(qū)動(dòng)軟件模塊包含驅(qū)動(dòng)初始化子模塊、配置模擬裝置子模塊、獲取模擬裝置配置表子模塊、發(fā)送模擬操作命令子模塊、接收主處理機(jī)消息子模塊、處理主處理機(jī)消息子模塊、通信子模塊、以及模擬裝置配置數(shù)據(jù)模塊;
控制機(jī)驅(qū)動(dòng)軟件模塊的驅(qū)動(dòng)初始化子模塊在操作系統(tǒng)檢測(cè)到模擬裝置硬件后由操作系統(tǒng)調(diào)用,從模擬裝置配置數(shù)據(jù)模塊中讀取初始化數(shù)據(jù),生成初始化命令,并調(diào)用通信子模塊發(fā)送初始化命令、接收主處理機(jī)工作組消息,根據(jù)主處理機(jī)工作組消息生成下一個(gè)初始化命令,循環(huán)處理直到初始化交互完成;
控制機(jī)驅(qū)動(dòng)軟件模塊的配置模擬裝置子模塊由上層應(yīng)用軟件調(diào)用,有兩個(gè)參數(shù),分別為從處理機(jī)ID號(hào)和模擬設(shè)備類(lèi)型;從處理機(jī)ID號(hào)指明要配置哪個(gè)從處理機(jī)工作組;模擬設(shè)備類(lèi)型指明要將該從處理機(jī)工作組配置為鼠標(biāo)模擬器還是鍵盤(pán)模擬器;其工作流程為
1001.生成配置從處理機(jī)命令;
1002.調(diào)用通信子模塊向主處理機(jī)工作組發(fā)送配置從處理機(jī)命令;
1003.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的獲取模擬裝置配置子模塊由上層應(yīng)用程序調(diào)用,參數(shù)為主處理機(jī)ID號(hào),表示要獲取的主處理機(jī)的ID號(hào),可用-1或大于最大從處理機(jī)ID號(hào)的值表示主處理機(jī);工作流程為
1101.檢查模擬裝置配置數(shù)據(jù)模塊中是否有參數(shù)表中的主處理機(jī)ID號(hào),如果沒(méi)有,報(bào)錯(cuò),結(jié)束操作;如果有,執(zhí)行下一步;
1102.產(chǎn)生一個(gè)空的主控制機(jī)命令;
1103.將主控制機(jī)命令的命令類(lèi)型設(shè)置為獲取配置;
1104.將參數(shù)列表中的主處理機(jī)ID號(hào)封裝為主控制機(jī)命令的參數(shù)對(duì)象;
1105.調(diào)用通信子模塊發(fā)送主控制機(jī)命令;
1106.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的發(fā)送模擬操作命令子模塊由上層應(yīng)用軟件調(diào)用,包含的參數(shù)有本命令I(lǐng)D號(hào)、從處理機(jī)ID號(hào)、操作類(lèi)型和操作描述符;操作類(lèi)型有鍵盤(pán)操作和鼠標(biāo)操作;操作類(lèi)型為鍵盤(pán)操作時(shí)操作描述符中包含的信息有操作哪個(gè)按鍵和操作的類(lèi)型,如按下或者釋放;操作類(lèi)型為鼠標(biāo)操作時(shí)操作描述符包含的信息為各方向移動(dòng)距離、方向和各按鍵狀態(tài);其工作流程為
1201.檢查模擬裝置配置數(shù)據(jù)模塊中是否有參數(shù)表中的從處理機(jī)ID號(hào),如果沒(méi)有,報(bào)錯(cuò),結(jié)束操作;如果有,執(zhí)行下一步;
1202.檢查模擬裝置配置數(shù)據(jù)模塊中參數(shù)表中的從處理機(jī)ID號(hào)對(duì)應(yīng)的模擬類(lèi)型是否為鍵盤(pán);如果不是,報(bào)錯(cuò),結(jié)束操作;如果是,執(zhí)行下一步;
1203.檢查鍵盤(pán)操作描述符是否合法;如果不合法,報(bào)錯(cuò),結(jié)束操作;如果合法,執(zhí)行下一步;
1204.產(chǎn)生一個(gè)命令I(lǐng)D號(hào);
1205.產(chǎn)生一個(gè)空的主控制機(jī)命令;
1206.將主控制機(jī)命令的命令類(lèi)型設(shè)置為鍵盤(pán)操作;
1207.將命令I(lǐng)D號(hào)、參數(shù)列表中的從處理機(jī)ID號(hào)和鍵盤(pán)操作描述符封裝為主控制機(jī)命令的參數(shù)對(duì)象;
1208.調(diào)用通信子模塊發(fā)送主控制機(jī)命令;
1209.將命令I(lǐng)D號(hào)放入待反饋命令列表中;
1210.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的接收主處理機(jī)消息子模塊由上層應(yīng)用程序調(diào)用,工作流程為
1301.初始化超時(shí)標(biāo)記;
1302.調(diào)用通信子模塊接收主處理機(jī)發(fā)送的主處理機(jī)消息;
1303.如果收到,執(zhí)行步驟1305;否則檢測(cè)是否超時(shí),如果超時(shí)執(zhí)行步驟1304,否則執(zhí)行步驟1302 ;
1304.報(bào)錯(cuò),結(jié)束操作;
1305.以接收到的主處理機(jī)消息為參數(shù),調(diào)用處理主處理機(jī)消息子模塊;
1306.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的處理主處理機(jī)消息子模塊,參數(shù)為主處理機(jī)消息;工作流程
為
1401.檢查參數(shù)是否合法;如果不合法,報(bào)錯(cuò),結(jié)束操作;如果合法,執(zhí)行下一步;
1402.檢查主處理機(jī)消息的消息類(lèi)型,如果消息類(lèi)型是更新從處理機(jī)狀態(tài),則執(zhí)行步驟 1403 ;如果消息類(lèi)型是命令反饋,則執(zhí)行步驟1405 ;
1403.更新模擬裝置配置數(shù)據(jù)模塊中對(duì)應(yīng)的從處理機(jī)狀態(tài),結(jié)束操作;
1404.從主處理機(jī)消息中取出參數(shù)對(duì)象;
1405.查找待反饋命令列表中是否有參數(shù)對(duì)象中包換的命令I(lǐng)D號(hào),沒(méi)有則結(jié)束操作;
1406.檢查參數(shù)對(duì)象中的命令執(zhí)行結(jié)果,如果表示執(zhí)行成功,將該命令I(lǐng)D號(hào)從待反饋命令列表中刪除;如果表示執(zhí)行不成功,則將該命令I(lǐng)D號(hào)從待反饋命令列表中移動(dòng)到未成功執(zhí)行命令列表中;
1407.結(jié)束操作;
控制機(jī)驅(qū)動(dòng)軟件模塊的通信子模塊包括接收和發(fā)送兩個(gè)子單元,根據(jù)標(biāo)準(zhǔn)通信協(xié)議規(guī)定的流程接收和發(fā)送數(shù)據(jù);控制機(jī)驅(qū)動(dòng)軟件模塊的模擬裝置配置數(shù)據(jù)模塊中保存標(biāo)準(zhǔn)通信協(xié)議所規(guī)定的配置信息,以及各從處理機(jī)工作組的狀態(tài)信息,如待機(jī)/正常工作/故障、當(dāng)前模擬鼠標(biāo)還是鍵盤(pán)、 ID號(hào);
主處理機(jī)軟件模塊包括主處理機(jī)配置表數(shù)據(jù)子模塊、臨時(shí)數(shù)據(jù)子模塊、主處理機(jī)主函數(shù)模塊、主處理機(jī)初始化子模塊、接收主控制機(jī)命令子模塊、發(fā)送主處理機(jī)消息子模塊、處理主控制機(jī)命令子模塊、接收從處理機(jī)消息子模塊、處理從處理機(jī)消息子模塊、以及發(fā)送主處理機(jī)命令子模塊;
主處理機(jī)軟件模塊的主處理機(jī)配置表數(shù)據(jù)子模塊為數(shù)據(jù)模塊,保存模擬裝置設(shè)備描述信息、各從處理機(jī)配置信息和狀態(tài)信息,從機(jī)狀態(tài)信息的初始值為未初始化;
主處理機(jī)軟件模塊的臨時(shí)數(shù)據(jù)子模塊包括待發(fā)送主處理機(jī)命令列表、待發(fā)送主處理機(jī)消息列表、待處理從處理機(jī)消息列表、待處理主控制機(jī)命令列表、以及待反饋命令列表; 主處理機(jī)軟件模塊的主處理機(jī)主函數(shù)子模塊在模擬裝置加電時(shí)自動(dòng)加載;其工作流程
為
2001.檢查與主控制機(jī)建立通信信道是否已建立,如果尚未建立,則調(diào)用主處理機(jī)初始化子模塊與主控制機(jī)建立通信信道;
2002.分別執(zhí)行以下六個(gè)步驟,執(zhí)行順序可互換 2002. 1調(diào)用接收主控制機(jī)命令子模塊;
2002. 2調(diào)用處理主控制機(jī)命令子模塊; 2002. 3調(diào)用接收從處理機(jī)消息模塊; 2002. 4調(diào)用處理從處理機(jī)消息模塊; 2002. 5調(diào)用發(fā)送主處理機(jī)消息模塊;
2002.6調(diào)用發(fā)送主處理機(jī)命令模塊;
2003.執(zhí)行步驟2001;
主處理機(jī)軟件模塊的主處理機(jī)初始化子模塊從主處理機(jī)配置表數(shù)據(jù)模塊獲取配置信息,按標(biāo)準(zhǔn)通信協(xié)議從通信模塊中讀取初始化命令數(shù)據(jù)包,或?qū)懭氤跏蓟顢?shù)據(jù)包,建立與主控制機(jī)的通信信道;
主處理機(jī)軟件模塊的接收主控制機(jī)命令子模塊用于接收主控制機(jī)發(fā)來(lái)的數(shù)據(jù),其工作流程為
2101.檢測(cè)主處理機(jī)的通信模塊緩沖區(qū)中是否有數(shù)據(jù),有則執(zhí)行下一步,沒(méi)有則執(zhí)行步驟2104 ;
2102.從主處理機(jī)的通信模塊緩沖區(qū)中讀取數(shù)據(jù);
2103.檢查讀取到的數(shù)據(jù)是否為主控制機(jī)命令,如果是則執(zhí)行步驟2103.1,否則執(zhí)行步驟2104 ;
2103. 1將數(shù)據(jù)格式化為主控制機(jī)命令;
2103. 2將該主控制機(jī)命令添加到待處理主控制機(jī)命令列表中;
2103.3執(zhí)行步驟2101 ;
2104.結(jié)束操作;
主處理機(jī)軟件模塊的發(fā)送主處理機(jī)消息子模塊用于向主控制機(jī)發(fā)送主處理機(jī)消息,工作流程為2201.檢查待發(fā)送主處理機(jī)消息列表是否為空,如果為空則結(jié)束操作,否則執(zhí)行下一
止
少;
2202.從待發(fā)送主處理機(jī)消息列表中取出一個(gè)主處理機(jī)消息作為當(dāng)前主處理機(jī)消息;
2203.按標(biāo)準(zhǔn)通信協(xié)議要求將當(dāng)前主處理機(jī)消息格式化為數(shù)據(jù)包;
2204.向主處理機(jī)的通信模塊緩沖區(qū)中寫(xiě)入數(shù)據(jù)包;
2205.執(zhí)行步驟2201;
主處理機(jī)軟件模塊的處理主控制機(jī)命令子模塊用于處理已收到的主控制機(jī)命令,工作流程為
2301.檢查待處理主控制機(jī)命令列表是否為空,如果為空,則結(jié)束操作,否則執(zhí)行下一
止
少;
2302.從待處理主控制機(jī)命令列表中取出一個(gè)主控制機(jī)命令作為當(dāng)前主控制機(jī)命令;
2303.檢查命令類(lèi)型,如果命令類(lèi)型是鍵盤(pán)操作或鼠標(biāo)操作,則執(zhí)行步驟2303.1 ; 如果是獲取從處理機(jī)配置,則執(zhí)行步驟2303. 2 ;如果是更新從處理機(jī)配置,則執(zhí)行步驟 2303. 3 ;
2303. 1檢查對(duì)應(yīng)從處理機(jī)的模擬類(lèi)型是否與命令類(lèi)型一致,如果一致執(zhí)行步驟 2303. 1. 1,否則執(zhí)行步驟2303. 1. 2 ;
2303. 1. 1將當(dāng)前主控制機(jī)命令格式化為主處理機(jī)命令,并添加到待發(fā)送主處理機(jī)命令列表;
2303. 1.2從當(dāng)前主控制機(jī)命令中取出命令序號(hào),和錯(cuò)誤碼一起封裝成主處理機(jī)消息, 放入待發(fā)送主處理機(jī)消息列表中;
2303. 2從主處理機(jī)配置表數(shù)據(jù)模塊中取出對(duì)應(yīng)從處理機(jī)的配置信息,封裝成主處理機(jī)消息,放入待發(fā)送主處理機(jī)消息列表中;
2303. 3檢查主控制機(jī)命令中的參數(shù)對(duì)象所列從處理機(jī)配置是否與主處理機(jī)配置表數(shù)據(jù)模塊中對(duì)應(yīng)從處理機(jī)當(dāng)前的配置信息完全相同,如果完全相同,則執(zhí)行步驟2303. 3. 1, 否則執(zhí)行步驟2303. 3. 2 ;
2303. 3. 1從當(dāng)前主控制機(jī)命令中取出命令序號(hào),和執(zhí)行成功碼一起封裝成主處理機(jī)消息,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)消息列表中;
2303.3. 2將命令序號(hào)、與對(duì)應(yīng)從處理機(jī)當(dāng)前配置信息不同的配置項(xiàng)、以及對(duì)應(yīng)從處理機(jī)ID封裝成主處理機(jī)命令,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)命令列表;
2304.執(zhí)行步驟2301;
主處理機(jī)軟件模塊的接收從處理機(jī)消息子模塊用于接收從處理機(jī)發(fā)來(lái)的從處理機(jī)消息,其工作流程為
2401.根據(jù)標(biāo)準(zhǔn)通信協(xié)議檢測(cè)是否有從處理機(jī)請(qǐng)求通信,如果有執(zhí)行下一步,否則結(jié)束操作;
2402.根據(jù)標(biāo)準(zhǔn)通信協(xié)議接收從處理機(jī)發(fā)來(lái)的數(shù)據(jù);
2403.檢查收到的數(shù)據(jù)是否為從處理機(jī)消息,是則執(zhí)行下一步,否則執(zhí)行步驟對(duì)05
2404.將收到的數(shù)據(jù)格式化為從處理機(jī)消息,放入待處理從處理機(jī)消息列表中;
2405.執(zhí)行步驟2401;主處理機(jī)軟件模塊的處理從處理機(jī)消息子模塊用于處理已收到的從處理機(jī)消息,工作流程為
2501.檢查待處理從處理機(jī)消息列表是否為空,如果為空,則結(jié)束操作,否則執(zhí)行下一
止
少
2502.從待處理從處理機(jī)消息列表中取出一個(gè)從處理機(jī)消息作為當(dāng)前從處理機(jī)消
息;
2503.檢查消息類(lèi)型,如果是獲取配置信息,則執(zhí)行步驟2503.1 ;如果是命令反饋,則執(zhí)行步驟2503. 2 ;
2503. 1取出對(duì)應(yīng)從處理機(jī)的配置信息,將其和從處理機(jī)ID封裝成主處理機(jī)命令,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)命令列表;
2503. 2根據(jù)消息中的原命令類(lèi)型和參數(shù)對(duì)象修改對(duì)應(yīng)從處理機(jī)的工作狀態(tài),編寫(xiě)對(duì)應(yīng)的主處理機(jī)消息,并將其放入待發(fā)送主處理機(jī)消息列表中;2504.結(jié)束操作;
主處理機(jī)軟件模塊的發(fā)送主處理機(jī)命令子模塊用于向從處理機(jī)發(fā)送主處理機(jī)命令,工作流程為
2601.檢查待發(fā)送主處理機(jī)命令列表是否為空,如果為空則結(jié)束操作,否則執(zhí)行下一
止
少;
2602.從待發(fā)送主處理機(jī)命令列表中取出一個(gè)主處理機(jī)命令作為當(dāng)前主處理機(jī)命
令;
2603.檢查主處理機(jī)配置表數(shù)據(jù)模塊中對(duì)應(yīng)從處理機(jī)的工作狀態(tài),如果狀態(tài)為“就緒”,則執(zhí)行下一步,否則將其重新放回待發(fā)送主處理機(jī)命令列表,執(zhí)行步驟2601 ;
2603.按標(biāo)準(zhǔn)通信協(xié)議要求將當(dāng)前主處理機(jī)命令格式化為數(shù)據(jù)包;
2604.根據(jù)標(biāo)準(zhǔn)通信協(xié)議向從處理機(jī)發(fā)送數(shù)據(jù)包;
2605.將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”;
2606.將當(dāng)前主處理機(jī)命令放入待反饋命令列表中;
2607.執(zhí)行步驟2601;
從處理機(jī)軟件模塊包括從處理機(jī)配置數(shù)據(jù)子模塊、從處理機(jī)主程序子模塊、初始化從處理機(jī)子模塊、接收主處理機(jī)命令子模塊、處理主處理機(jī)命令子模塊、發(fā)送從處理機(jī)消息子模塊、發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊;
從處理機(jī)軟件模塊的從處理機(jī)配置數(shù)據(jù)子模塊保存從處理機(jī)的配置信息,包括設(shè)備描述符、從處理機(jī)ID號(hào)、模擬類(lèi)型和待處理主處理機(jī)命令、待發(fā)送從處理機(jī)消息、鍵盤(pán)/鼠標(biāo)命令;
從處理機(jī)軟件模塊的從處理機(jī)主程序子模塊在從處理機(jī)加電時(shí)自動(dòng)執(zhí)行,工作流程
為
3001.調(diào)用初始化從處理機(jī)子模塊;
3002.調(diào)用接收主處理機(jī)命令子模塊,檢查是否接收到主處理機(jī)命令,如果接收到了執(zhí)行下一步,否則執(zhí)行步驟3002 ;
3003.調(diào)用處理主處理機(jī)命令子模塊,處理接收到的主處理機(jī)命令;
3004.調(diào)用發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊;
3005.調(diào)用發(fā)送從處理機(jī)消息子模塊;3006.執(zhí)行步驟3002 ;
從處理機(jī)軟件模塊的初始化從處理機(jī)子模塊負(fù)責(zé)從主處理機(jī)獲取配置信息,并與被控制機(jī)建立通信信道,工作流程為
3101.編寫(xiě)表示請(qǐng)求從處理機(jī)配置信息的從處理機(jī)消息;
3102.調(diào)用發(fā)送從處理機(jī)消息子模塊,發(fā)送從處理機(jī)消息;
3103.循環(huán)調(diào)用接收主處理機(jī)命令模塊,直到收到包含本從處理機(jī)配置信息的主處理機(jī)命令,執(zhí)行下一步;
3104.根據(jù)主處理機(jī)命令中包含的從處理機(jī)配置信息更新從處理機(jī)配置數(shù)據(jù)子模塊中相應(yīng)的數(shù)據(jù);
3105.根據(jù)從處理機(jī)配置信息和標(biāo)準(zhǔn)通信協(xié)議從通信模塊的緩沖區(qū)中讀取和寫(xiě)入初始化數(shù)據(jù)包;
3106.檢測(cè)是否正確建立與被控制機(jī)之間的通信信道,如果沒(méi)有,執(zhí)行步驟3105,否則執(zhí)行下一步;
3107.編寫(xiě)表示從處理機(jī)工作狀態(tài)為就緒的從處理機(jī)消息;
3108.調(diào)用發(fā)送從處理機(jī)消息子模塊,發(fā)送從處理機(jī)消息;
3109.結(jié)束操作;
從處理機(jī)軟件模塊的接收主處理機(jī)命令子模塊根據(jù)標(biāo)準(zhǔn)通信協(xié)議檢測(cè)主處理機(jī)是否請(qǐng)求發(fā)送數(shù)據(jù),如果檢測(cè)到請(qǐng)求,根據(jù)標(biāo)準(zhǔn)通信協(xié)議規(guī)定接收數(shù)據(jù),接收完數(shù)據(jù)后,將其格式轉(zhuǎn)化為主處理機(jī)命令形式記錄在從處理機(jī)數(shù)據(jù)子模塊中;
從處理機(jī)軟件模塊的處理主處理機(jī)命令子模塊從從處理機(jī)數(shù)據(jù)子模塊中取出待處理主處理機(jī)命令,判斷命令類(lèi)型,如果是更新配置信息,則根據(jù)主處理機(jī)命令中包含的配置信息更新對(duì)應(yīng)的配置信息項(xiàng),編寫(xiě)用于反饋的從處理機(jī)消息,并調(diào)用發(fā)送從處理機(jī)消息子模塊發(fā)送該從處理機(jī)消息;然后重新啟動(dòng)本從處理機(jī);如果是鍵盤(pán)/鼠標(biāo)操作命令,根據(jù)主處理機(jī)命令包含的參數(shù)對(duì)象編寫(xiě)對(duì)應(yīng)的鍵盤(pán)/鼠標(biāo)操作命令,并將其寫(xiě)入從處理機(jī)數(shù)據(jù)子模塊中;然后清除從處理機(jī)數(shù)據(jù)子模塊中的待處理主處理機(jī)命令數(shù)據(jù)項(xiàng);
從處理機(jī)軟件模塊的發(fā)送從處理機(jī)消息子模塊從從處理機(jī)數(shù)據(jù)子模塊中取出待發(fā)送從處理將消息,按標(biāo)準(zhǔn)通信協(xié)議將其發(fā)送給主處理機(jī);然后將從處理機(jī)數(shù)據(jù)子模塊中的待發(fā)送從處理機(jī)消息清除;
從處理機(jī)軟件模塊的發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊按標(biāo)準(zhǔn)通信協(xié)議把從處理機(jī)數(shù)據(jù)模塊中的待發(fā)送鍵盤(pán)/鼠標(biāo)命令封裝為標(biāo)準(zhǔn)的數(shù)據(jù)包,放入通信模塊的緩沖區(qū)中;檢測(cè)是否發(fā)送成功;編寫(xiě)表示發(fā)送成功或失敗的從處理機(jī)消息,并將其放任從處理機(jī)數(shù)據(jù)子模塊中; 清除從處理機(jī)數(shù)據(jù)子模塊中的待發(fā)送鍵盤(pán)/鼠標(biāo)命令。
權(quán)利要求
1. 一種多鼠標(biāo)/鍵盤(pán)模擬裝置,其特征在于包括主處理機(jī)工作組、若干個(gè)從處理機(jī)工作組、標(biāo)準(zhǔn)通信總線、主控制機(jī)工作組、若干個(gè)被控制機(jī)工作組、主板、電源、以及軟件模塊; 主處理機(jī)工作組、標(biāo)準(zhǔn)通信總線和從處理機(jī)工作組均集成在主板上;電源與主板的電源端相連;標(biāo)準(zhǔn)通信總線由總線控制器、以及通信介質(zhì)構(gòu)成;主處理機(jī)工作組和從處理機(jī)工作組均由處理機(jī)、通信模塊和內(nèi)部通信模塊構(gòu)成;其中,主處理機(jī)工作組的處理機(jī)稱(chēng)為主處理機(jī),從處理機(jī)工作組的處理機(jī)稱(chēng)為從處理機(jī);被控制機(jī)工作組包括被控制機(jī)、以及通信模塊;主控制機(jī)工作組包括主控制機(jī)、以及通信模塊;主處理機(jī)工作組的內(nèi)部通信模塊經(jīng)標(biāo)準(zhǔn)通信總線的總線控制器分別與各個(gè)從處理機(jī)工作組的內(nèi)部通信模塊相連;主處理機(jī)工作組的通信模塊與主控制機(jī)工作組的通信模塊相連,構(gòu)成物理鏈路,并在其上根據(jù)標(biāo)準(zhǔn)通信協(xié)議進(jìn)行通信;從處理機(jī)的通信模塊分別與對(duì)應(yīng)的被控制機(jī)通信模塊相連,構(gòu)成物理鏈路, 并在其上根據(jù)PS/2協(xié)議、USB協(xié)議或無(wú)線通信協(xié)議進(jìn)行通信;主控制機(jī)命令包括命令類(lèi)型和參數(shù)對(duì)象兩個(gè)數(shù)據(jù)項(xiàng);命令類(lèi)型為枚舉型或整型,包括鍵盤(pán)操作、鼠標(biāo)操作、獲取從處理機(jī)配置、更新從處理機(jī)配置;參數(shù)對(duì)象包含對(duì)應(yīng)命令的參數(shù)信息;主處理機(jī)收到主控制機(jī)命令,經(jīng)過(guò)處理后,向?qū)?yīng)的從處理機(jī)發(fā)送對(duì)應(yīng)的主處理機(jī)命令,并接收從處理機(jī)工作組發(fā)來(lái)的從處理機(jī)消息;從處理機(jī)機(jī)工作組收到主處理機(jī)命令后,進(jìn)行處理,通過(guò)從處理機(jī)的通信模塊按標(biāo)準(zhǔn)通信協(xié)議USB協(xié)議、PS/2協(xié)議或無(wú)線通信協(xié)議向被控制機(jī)發(fā)送相應(yīng)信息,并接收被控制機(jī)的反饋信息,處理后再生成從處理機(jī)消息發(fā)給主處理機(jī)工作組;軟件模塊包括設(shè)于主控制機(jī)內(nèi)的控制機(jī)驅(qū)動(dòng)軟件模塊、設(shè)于主處理機(jī)內(nèi)的主處理機(jī)軟件模塊、以及設(shè)于從處理機(jī)內(nèi)的從處理機(jī)軟件模塊;控制機(jī)驅(qū)動(dòng)軟件模塊為標(biāo)準(zhǔn)硬件驅(qū)動(dòng)程序,提供配置從處理機(jī)和向主處理機(jī)發(fā)送鼠標(biāo)/鍵盤(pán)操作命令的軟件接口,它由操作系統(tǒng)和上層應(yīng)用軟件調(diào)用;主處理機(jī)軟件模塊在加電時(shí)自動(dòng)加載,負(fù)責(zé)處理主控制機(jī)命令和從處理機(jī)消息,并向主控制機(jī)發(fā)送響應(yīng)主控制機(jī)命令或報(bào)告主處理機(jī)工作組和從處理機(jī)工作組狀態(tài)的主處理機(jī)消息,向從處理機(jī)發(fā)送主處理機(jī)命令;從處理機(jī)軟件模塊在加電時(shí)自動(dòng)加載,負(fù)責(zé)處理主處理機(jī)命令,并向主處理機(jī)工作組報(bào)告主處理機(jī)命令的執(zhí)行結(jié)果及其工作狀態(tài)的從處理機(jī)消息;控制機(jī)驅(qū)動(dòng)軟件模塊包含驅(qū)動(dòng)初始化子模塊、配置模擬裝置子模塊、獲取模擬裝置配置表子模塊、發(fā)送模擬操作命令子模塊、接收主處理機(jī)消息子模塊、處理主處理機(jī)消息子模塊、通信子模塊、以及模擬裝置配置數(shù)據(jù)模塊;控制機(jī)驅(qū)動(dòng)軟件模塊的驅(qū)動(dòng)初始化子模塊在操作系統(tǒng)檢測(cè)到模擬裝置硬件后由操作系統(tǒng)調(diào)用,從模擬裝置配置數(shù)據(jù)模塊中讀取初始化數(shù)據(jù),生成初始化命令,并調(diào)用通信子模塊發(fā)送初始化命令、接收主處理機(jī)工作組消息,根據(jù)主處理機(jī)工作組消息生成下一個(gè)初始化命令,循環(huán)處理直到初始化交互完成;控制機(jī)驅(qū)動(dòng)軟件模塊的配置模擬裝置子模塊由上層應(yīng)用軟件調(diào)用,有兩個(gè)參數(shù),分別為從處理機(jī)ID號(hào)和模擬設(shè)備類(lèi)型;從處理機(jī)ID號(hào)指明要配置哪個(gè)從處理機(jī)工作組;模擬設(shè)備類(lèi)型指明要將該從處理機(jī)工作組配置為鼠標(biāo)模擬器還是鍵盤(pán)模擬器;其工作流程為·1001.生成配置從處理機(jī)命令;·1002.調(diào)用通信子模塊向主處理機(jī)工作組發(fā)送配置從處理機(jī)命令;·1003.結(jié)束操作;控制機(jī)驅(qū)動(dòng)軟件模塊的獲取模擬裝置配置子模塊由上層應(yīng)用程序調(diào)用,參數(shù)為主處理機(jī)ID號(hào),表示要獲取的主處理機(jī)的ID號(hào),可用-1或大于最大從處理機(jī)ID號(hào)的值表示主處理機(jī);工作流程為·1101.檢查模擬裝置配置數(shù)據(jù)模塊中是否有參數(shù)表中的主處理機(jī)ID號(hào),如果沒(méi)有,報(bào)錯(cuò),結(jié)束操作;如果有,執(zhí)行下一步;·1102.產(chǎn)生一個(gè)空的主控制機(jī)命令;·1103.將主控制機(jī)命令的命令類(lèi)型設(shè)置為獲取配置;·1104.將參數(shù)列表中的主處理機(jī)ID號(hào)封裝為主控制機(jī)命令的參數(shù)對(duì)象;·1105.調(diào)用通信子模塊發(fā)送主控制機(jī)命令;·1106.結(jié)束操作;控制機(jī)驅(qū)動(dòng)軟件模塊的發(fā)送模擬操作命令子模塊由上層應(yīng)用軟件調(diào)用,包含的參數(shù)有本命令I(lǐng)D號(hào)、從處理機(jī)ID號(hào)、操作類(lèi)型和操作描述符;操作類(lèi)型有鍵盤(pán)操作和鼠標(biāo)操作;操作類(lèi)型為鍵盤(pán)操作時(shí)操作描述符中包含的信息有操作哪個(gè)按鍵和操作的類(lèi)型,如按下或者釋放;操作類(lèi)型為鼠標(biāo)操作時(shí)操作描述符包含的信息為各方向移動(dòng)距離、方向和各按鍵狀態(tài);其工作流程為.1201.檢查模擬裝置配置數(shù)據(jù)模塊中是否有參數(shù)表中的從處理機(jī)ID號(hào),如果沒(méi)有,報(bào)錯(cuò),結(jié)束操作;如果有,執(zhí)行下一步;.1202.檢查模擬裝置配置數(shù)據(jù)模塊中參數(shù)表中的從處理機(jī)ID號(hào)對(duì)應(yīng)的模擬類(lèi)型是否為鍵盤(pán);如果不是,報(bào)錯(cuò),結(jié)束操作;如果是,執(zhí)行下一步;.1203.檢查鍵盤(pán)操作描述符是否合法;如果不合法,報(bào)錯(cuò),結(jié)束操作;如果合法,執(zhí)行下一步; .1204.產(chǎn)生一個(gè)命令I(lǐng)D號(hào);.1205.產(chǎn)生一個(gè)空的主控制機(jī)命令;.1206.將主控制機(jī)命令的命令類(lèi)型設(shè)置為鍵盤(pán)操作;.1207.將命令I(lǐng)D號(hào)、參數(shù)列表中的從處理機(jī)ID號(hào)和鍵盤(pán)操作描述符封裝為主控制機(jī)命令的參數(shù)對(duì)象;.1208.調(diào)用通信子模塊發(fā)送主控制機(jī)命令;.1209.將命令I(lǐng)D號(hào)放入待反饋命令列表中;.1210.結(jié)束操作;控制機(jī)驅(qū)動(dòng)軟件模塊的接收主處理機(jī)消息子模塊由上層應(yīng)用程序調(diào)用,工作流程為.1301.初始化超時(shí)標(biāo)記;.1302.調(diào)用通信子模塊接收主處理機(jī)發(fā)送的主處理機(jī)消息;.1303.如果收到,執(zhí)行步驟1305;否則檢測(cè)是否超時(shí),如果超時(shí)執(zhí)行步驟1304,否則執(zhí)行步驟1302 ;報(bào)錯(cuò),結(jié)束操作;以接收到的主處理機(jī)消息為參數(shù),調(diào)用處理主處理機(jī)消息子模塊; 結(jié)束操作;控制機(jī)驅(qū)動(dòng)軟件模塊的處理主處理機(jī)消息子模塊,參數(shù)為主處理機(jī)消息;工作流程為檢查參數(shù)是否合法;如果不合法,報(bào)錯(cuò),結(jié)束操作;如果合法,執(zhí)行下一步;·1403.檢查主處理機(jī)消息的消息類(lèi)型,如果消息類(lèi)型是更新從處理機(jī)狀態(tài),則執(zhí)行步驟 1403 ;如果消息類(lèi)型是命令反饋,則執(zhí)行步驟1405 ;·1404.更新模擬裝置配置數(shù)據(jù)模塊中對(duì)應(yīng)的從處理機(jī)狀態(tài),結(jié)束操作; 從主處理機(jī)消息中取出參數(shù)對(duì)象;·1405.查找待反饋命令列表中是否有參數(shù)對(duì)象中包換的命令I(lǐng)D號(hào),沒(méi)有則結(jié)束操作;·1406.檢查參數(shù)對(duì)象中的命令執(zhí)行結(jié)果,如果表示執(zhí)行成功,將該命令I(lǐng)D號(hào)從待反饋命令列表中刪除;如果表示執(zhí)行不成功,則將該命令I(lǐng)D號(hào)從待反饋命令列表中移動(dòng)到未成功執(zhí)行命令列表中;·1407.結(jié)束操作;控制機(jī)驅(qū)動(dòng)軟件模塊的通信子模塊包括接收和發(fā)送兩個(gè)子單元,根據(jù)標(biāo)準(zhǔn)通信協(xié)議規(guī)定的流程接收和發(fā)送數(shù)據(jù);控制機(jī)驅(qū)動(dòng)軟件模塊的模擬裝置配置數(shù)據(jù)模塊中保存標(biāo)準(zhǔn)通信協(xié)議所規(guī)定的配置信息,以及各從處理機(jī)工作組的狀態(tài)信息,如待機(jī)/正常工作/故障、當(dāng)前模擬鼠標(biāo)還是鍵盤(pán)、 ID號(hào);主處理機(jī)軟件模塊包括主處理機(jī)配置表數(shù)據(jù)子模塊、臨時(shí)數(shù)據(jù)子模塊、主處理機(jī)主函數(shù)模塊、主處理機(jī)初始化子模塊、接收主控制機(jī)命令子模塊、發(fā)送主處理機(jī)消息子模塊、處理主控制機(jī)命令子模塊、接收從處理機(jī)消息子模塊、處理從處理機(jī)消息子模塊、以及發(fā)送主處理機(jī)命令子模塊;主處理機(jī)軟件模塊的主處理機(jī)配置表數(shù)據(jù)子模塊為數(shù)據(jù)模塊,保存模擬裝置設(shè)備描述信息、各從處理機(jī)配置信息和狀態(tài)信息,從機(jī)狀態(tài)信息的初始值為未初始化;主處理機(jī)軟件模塊的臨時(shí)數(shù)據(jù)子模塊包括待發(fā)送主處理機(jī)命令列表、待發(fā)送主處理機(jī)消息列表、待處理從處理機(jī)消息列表、待處理主控制機(jī)命令列表、以及待反饋命令列表; 主處理機(jī)軟件模塊的主處理機(jī)主函數(shù)子模塊在模擬裝置加電時(shí)自動(dòng)加載;其工作流程為(2001.檢查與主控制機(jī)建立通信信道是否已建立,如果尚未建立,則調(diào)用主處理機(jī)初始化子模塊與主控制機(jī)建立通信信道;分別執(zhí)行以下六個(gè)步驟,執(zhí)行順序可互換(2002.1調(diào)用接收主控制機(jī)命令子模塊; 2002. 2調(diào)用處理主控制機(jī)命令子模塊; 2002. 3調(diào)用接收從處理機(jī)消息模塊; 2002. 4調(diào)用處理從處理機(jī)消息模塊; 2002. 5調(diào)用發(fā)送主處理機(jī)消息模塊; 2002. 6調(diào)用發(fā)送主處理機(jī)命令模塊; 執(zhí)行步驟2001 ;主處理機(jī)軟件模塊的主處理機(jī)初始化子模塊從主處理機(jī)配置表數(shù)據(jù)模塊獲取配置信息,按標(biāo)準(zhǔn)通信協(xié)議從通信模塊中讀取初始化命令數(shù)據(jù)包,或?qū)懭氤跏蓟顢?shù)據(jù)包,建立與主控制機(jī)的通信信道;主處理機(jī)軟件模塊的接收主控制機(jī)命令子模塊用于接收主控制機(jī)發(fā)來(lái)的數(shù)據(jù),其工作流程為檢測(cè)主處理機(jī)的通信模塊緩沖區(qū)中是否有數(shù)據(jù),有則執(zhí)行下一步,沒(méi)有則執(zhí)行步驟 2104 ;·2102.從主處理機(jī)的通信模塊緩沖區(qū)中讀取數(shù)據(jù);·2103.檢查讀取到的數(shù)據(jù)是否為主控制機(jī)命令,如果是則執(zhí)行步驟2103.1,否則執(zhí)行步驟2104 ; ·2103. 1將數(shù)據(jù)格式化為主控制機(jī)命令;·2103. 2將該主控制機(jī)命令添加到待處理主控制機(jī)命令列表中;·2103.3執(zhí)行步驟2101 ;·2104.結(jié)束操作;主處理機(jī)軟件模塊的發(fā)送主處理機(jī)消息子模塊用于向主控制機(jī)發(fā)送主處理機(jī)消息,工作流程為·2201.檢查待發(fā)送主處理機(jī)消息列表是否為空,如果為空則結(jié)束操作,否則執(zhí)行下一步?!?202.從待發(fā)送主處理機(jī)消息列表中取出一個(gè)主處理機(jī)消息作為當(dāng)前主處理機(jī)消息;·2203.按標(biāo)準(zhǔn)通信協(xié)議要求將當(dāng)前主處理機(jī)消息格式化為數(shù)據(jù)包;·2204.向主處理機(jī)的通信模塊緩沖區(qū)中寫(xiě)入數(shù)據(jù)包;·2205.執(zhí)行步驟2201;主處理機(jī)軟件模塊的處理主控制機(jī)命令子模塊用于處理已收到的主控制機(jī)命令,工作流程為·2301.檢查待處理主控制機(jī)命令列表是否為空,如果為空,則結(jié)束操作,否則執(zhí)行下一步?!?302.從待處理主控制機(jī)命令列表中取出一個(gè)主控制機(jī)命令作為當(dāng)前主控制機(jī)命令; 檢查命令類(lèi)型,如果命令類(lèi)型是鍵盤(pán)操作或鼠標(biāo)操作,則執(zhí)行步驟2303. 1 ;如果是獲取從處理機(jī)配置,則執(zhí)行步驟2303. 2 ;如果是更新從處理機(jī)配置,則執(zhí)行步驟2303. 3 ;·2303.1檢查對(duì)應(yīng)從處理機(jī)的模擬類(lèi)型是否與命令類(lèi)型一致,如果一致執(zhí)行步驟 2303. 1. 1,否則執(zhí)行步驟2303. 1. 2 ;·2303. 1. 1將當(dāng)前主控制機(jī)命令格式化為主處理機(jī)命令,并添加到待發(fā)送主處理機(jī)命令列表;·2303. 1.2從當(dāng)前主控制機(jī)命令中取出命令序號(hào),和錯(cuò)誤碼一起封裝成主處理機(jī)消息, 放入待發(fā)送主處理機(jī)消息列表中;·2303. 2從主處理機(jī)配置表數(shù)據(jù)模塊中取出對(duì)應(yīng)從處理機(jī)的配置信息,封裝成主處理機(jī)消息,放入待發(fā)送主處理機(jī)消息列表中;·2303. 3檢查主控制機(jī)命令中的參數(shù)對(duì)象所列從處理機(jī)配置是否與主處理機(jī)配置表數(shù)據(jù)模塊中對(duì)應(yīng)從處理機(jī)當(dāng)前的配置信息完全相同,如果完全相同,則執(zhí)行步驟2303. 3. 1, 否則執(zhí)行步驟2303. 3. 2 ;·2303. 3. 1從當(dāng)前主控制機(jī)命令中取出命令序號(hào),和執(zhí)行成功碼一起封裝成主處理機(jī)消息,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)消息列表中;·2303. 3. 2將命令序號(hào)、與對(duì)應(yīng)從處理機(jī)當(dāng)前配置信息不同的配置項(xiàng)、以及對(duì)應(yīng)從處理機(jī)ID封裝成主處理機(jī)命令,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)命令列表;執(zhí)行步驟2301 ;主處理機(jī)軟件模塊的接收從處理機(jī)消息子模塊用于接收從處理機(jī)發(fā)來(lái)的從處理機(jī)消息,其工作流程為·2401.根據(jù)標(biāo)準(zhǔn)通信協(xié)議檢測(cè)是否有從處理機(jī)請(qǐng)求通信,如果有執(zhí)行下一步,否則結(jié)束操作;·2402.根據(jù)標(biāo)準(zhǔn)通信協(xié)議接收從處理機(jī)發(fā)來(lái)的數(shù)據(jù);·2403.檢查收到的數(shù)據(jù)是否為從處理機(jī)消息,是則執(zhí)行下一步,否則執(zhí)行步驟對(duì)05·2404.將收到的數(shù)據(jù)格式化為從處理機(jī)消息,放入待處理從處理機(jī)消息列表中;·2405.執(zhí)行步驟2401;主處理機(jī)軟件模塊的處理從處理機(jī)消息子模塊用于處理已收到的從處理機(jī)消息,工作流程為檢查待處理從處理機(jī)消息列表是否為空,如果為空,則結(jié)束操作,否則執(zhí)行下一步 從待處理從處理機(jī)消息列表中取出一個(gè)從處理機(jī)消息作為當(dāng)前從處理機(jī)消息; 檢查消息類(lèi)型,如果是獲取配置信息,則執(zhí)行步驟2503. 1 ;如果是命令反饋,則執(zhí)行步驟 2503. 2 ;.2503. 1取出對(duì)應(yīng)從處理機(jī)的配置信息,將其和從處理機(jī)ID封裝成主處理機(jī)命令,將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”,放入待發(fā)送主處理機(jī)命令列表;.2503. 2根據(jù)消息中的原命令類(lèi)型和參數(shù)對(duì)象修改對(duì)應(yīng)從處理機(jī)的工作狀態(tài),編寫(xiě)對(duì)應(yīng)的主處理機(jī)消息,并將其放入待發(fā)送主處理機(jī)消息列表中;2504.結(jié)束操作;主處理機(jī)軟件模塊的發(fā)送主處理機(jī)命令子模塊用于向從處理機(jī)發(fā)送主處理機(jī)命令,工作流程為檢查待發(fā)送主處理機(jī)命令列表是否為空,如果為空則結(jié)束操作,否則執(zhí)行下一步; 從待發(fā)送主處理機(jī)命令列表中取出一個(gè)主處理機(jī)命令作為當(dāng)前主處理機(jī)命令; 檢查主處理機(jī)配置表數(shù)據(jù)模塊中對(duì)應(yīng)從處理機(jī)的工作狀態(tài),如果狀態(tài)為“就緒”,則執(zhí)行下一步,否則將其重新放回待發(fā)送主處理機(jī)命令列表,執(zhí)行步驟2601 ; 按標(biāo)準(zhǔn)通信協(xié)議要求將當(dāng)前主處理機(jī)命令格式化為數(shù)據(jù)包; 根據(jù)標(biāo)準(zhǔn)通信協(xié)議向從處理機(jī)發(fā)送數(shù)據(jù)包; 將對(duì)應(yīng)從處理機(jī)的工作狀態(tài)改為“繁忙”; 將當(dāng)前主處理機(jī)命令放入待反饋命令列表中; 2607.執(zhí)行步驟洸01 ;從處理機(jī)軟件模塊包括從處理機(jī)配置數(shù)據(jù)子模塊、從處理機(jī)主程序子模塊、初始化從處理機(jī)子模塊、接收主處理機(jī)命令子模塊、處理主處理機(jī)命令子模塊、發(fā)送從處理機(jī)消息子模塊、發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊;從處理機(jī)軟件模塊的從處理機(jī)配置數(shù)據(jù)子模塊保存從處理機(jī)的配置信息,包括設(shè)備描述符、從處理機(jī)ID號(hào)、模擬類(lèi)型和待處理主處理機(jī)命令、待發(fā)送從處理機(jī)消息、鍵盤(pán)/鼠標(biāo)命令;從處理機(jī)軟件模塊的從處理機(jī)主程序子模塊在從處理機(jī)加電時(shí)自動(dòng)執(zhí)行,工作流程為調(diào)用初始化從處理機(jī)子模塊;調(diào)用接收主處理機(jī)命令子模塊,檢查是否接收到主處理機(jī)命令,如果接收到了執(zhí)行下一步,否則執(zhí)行步驟3002 ;調(diào)用處理主處理機(jī)命令子模塊,處理接收到的主處理機(jī)命令; 調(diào)用發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊; 調(diào)用發(fā)送從處理機(jī)消息子模塊; 執(zhí)行步驟3002 ;從處理機(jī)軟件模塊的初始化從處理機(jī)子模塊負(fù)責(zé)從主處理機(jī)獲取配置信息,并與被控制機(jī)建立通信信道,工作流程為編寫(xiě)表示請(qǐng)求從處理機(jī)配置信息的從處理機(jī)消息; 調(diào)用發(fā)送從處理機(jī)消息子模塊,發(fā)送從處理機(jī)消息;循環(huán)調(diào)用接收主處理機(jī)命令模塊,直到收到包含本從處理機(jī)配置信息的主處理機(jī)命令,執(zhí)行下一步;根據(jù)主處理機(jī)命令中包含的從處理機(jī)配置信息更新從處理機(jī)配置數(shù)據(jù)子模塊中相應(yīng)的數(shù)據(jù);根據(jù)從處理機(jī)配置信息和標(biāo)準(zhǔn)通信協(xié)議從通信模塊的緩沖區(qū)中讀取和寫(xiě)入初始化數(shù)據(jù)包;·3106.檢測(cè)是否正確建立與被控制機(jī)之間的通信信道,如果沒(méi)有,執(zhí)行步驟3105,否則執(zhí)行下一步;·3107.編寫(xiě)表示從處理機(jī)工作狀態(tài)為就緒的從處理機(jī)消息;·3108.調(diào)用發(fā)送從處理機(jī)消息子模塊,發(fā)送從處理機(jī)消息;·3109.結(jié)束操作;從處理機(jī)軟件模塊的接收主處理機(jī)命令子模塊根據(jù)標(biāo)準(zhǔn)通信協(xié)議檢測(cè)主處理機(jī)是否請(qǐng)求發(fā)送數(shù)據(jù),如果檢測(cè)到請(qǐng)求,根據(jù)標(biāo)準(zhǔn)通信協(xié)議規(guī)定接收數(shù)據(jù),接收完數(shù)據(jù)后,將其格式轉(zhuǎn)化為主處理機(jī)命令形式記錄在從處理機(jī)數(shù)據(jù)子模塊中;從處理機(jī)軟件模塊的處理主處理機(jī)命令子模塊從從處理機(jī)數(shù)據(jù)子模塊中取出待處理主處理機(jī)命令,判斷命令類(lèi)型,如果是更新配置信息,則根據(jù)主處理機(jī)命令中包含的配置信息更新對(duì)應(yīng)的配置信息項(xiàng),編寫(xiě)用于反饋的從處理機(jī)消息,并調(diào)用發(fā)送從處理機(jī)消息子模塊發(fā)送該從處理機(jī)消息;然后重新啟動(dòng)本從處理機(jī);如果是鍵盤(pán)/鼠標(biāo)操作命令,根據(jù)主處理機(jī)命令包含的參數(shù)對(duì)象編寫(xiě)對(duì)應(yīng)的鍵盤(pán)/鼠標(biāo)操作命令,并將其寫(xiě)入從處理機(jī)數(shù)據(jù)子模塊中;然后清除從處理機(jī)數(shù)據(jù)子模塊中的待處理主處理機(jī)命令數(shù)據(jù)項(xiàng);從處理機(jī)軟件模塊的發(fā)送從處理機(jī)消息子模塊從從處理機(jī)數(shù)據(jù)子模塊中取出待發(fā)送從處理將消息,按標(biāo)準(zhǔn)通信協(xié)議將其發(fā)送給主處理機(jī);然后將從處理機(jī)數(shù)據(jù)子模塊中的待發(fā)送從處理機(jī)消息清除;從處理機(jī)軟件模塊的發(fā)送鍵盤(pán)/鼠標(biāo)命令子模塊按標(biāo)準(zhǔn)通信協(xié)議把從處理機(jī)數(shù)據(jù)模塊中的待發(fā)送鍵盤(pán)/鼠標(biāo)命令封裝為標(biāo)準(zhǔn)的數(shù)據(jù)包,放入通信模塊的緩沖區(qū)中;檢測(cè)是否發(fā)送成功;編寫(xiě)表示發(fā)送成功或失敗的從處理機(jī)消息,并將其放任從處理機(jī)數(shù)據(jù)子模塊中; 清除從處理機(jī)數(shù)據(jù)子模塊中的待發(fā)送鍵盤(pán)/鼠標(biāo)命令。
全文摘要
本發(fā)明涉及計(jì)算機(jī)的鼠標(biāo)、鍵盤(pán)模擬裝置,具體為一種多鼠標(biāo)/鍵盤(pán)模擬裝置。本發(fā)明解決了現(xiàn)有計(jì)算機(jī)的模擬鼠標(biāo)/鍵盤(pán)控制裝置只能控制一個(gè)鼠標(biāo)或鍵盤(pán)以及無(wú)法向上層應(yīng)用反饋操作結(jié)果的問(wèn)題。一種多鼠標(biāo)/鍵盤(pán)模擬裝置,包括主處理機(jī)工作組、若干個(gè)從處理機(jī)工作組、標(biāo)準(zhǔn)通信總線、主控制機(jī)工作組、若干個(gè)被控制機(jī)工作組、主板、電源、以及軟件模塊;主處理機(jī)工作組、標(biāo)準(zhǔn)通信總線和從處理機(jī)工作組均集成在主板上;標(biāo)準(zhǔn)通信總線由總線控制器、以及通信介質(zhì)構(gòu)成;主處理機(jī)工作組和從處理機(jī)工作組均由處理機(jī)、通信模塊和內(nèi)部通信模塊構(gòu)成。本發(fā)明所述的裝置可靠性強(qiáng),可廣泛適用于計(jì)算機(jī)模擬鼠標(biāo)/鍵盤(pán)控制。
文檔編號(hào)G06F3/02GK102298446SQ20111023958
公開(kāi)日2011年12月28日 申請(qǐng)日期2011年8月20日 優(yōu)先權(quán)日2011年8月20日
發(fā)明者喬超, 戴斌, 潘鳳, 趙潤(rùn)林 申請(qǐng)人:運(yùn)城學(xué)院