專利名稱:對多種通用串行總線設(shè)備驅(qū)動的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種對多種通用串行總線設(shè)備驅(qū)動的方法,屬于計算機技術(shù)領(lǐng)域。
背景技術(shù):
目前市場上對于多種通用串行總線設(shè)備共存時的驅(qū)動管理,主要有如下幾種技術(shù)
1、 分別安裝各通用串行總線設(shè)備的驅(qū)動程序,安裝后采取獨立使用和管理,但是安 裝使用過程中可能會有沖突,且使用操作起來不方便,尤其會令基于底層驅(qū)動的上層應(yīng)用 開發(fā)變得更加復(fù)雜和難以維護;
2、 將各個驅(qū)動統(tǒng)一打包,然后對上提供統(tǒng)一應(yīng)用接口,當(dāng)有通用串行總線設(shè)備插入 時,系統(tǒng)會査找符合該通用串行總線設(shè)備的驅(qū)動并安裝,但是對于打包時沒有包含進來的 驅(qū)動對應(yīng)的通用串行總線設(shè)備,系統(tǒng)仍不能識別和使用,導(dǎo)致了可支持的通用串行總線設(shè) 備驅(qū)動種類受限, 一旦有新的通用串行總線設(shè)備需要支持,則要重新打包或者重新修改程 序,雖然在易用性方面有所提高,但是維護成本較大,頻繁打包和修改程序也會帶來不穩(wěn) 定等風(fēng)險;
3、 寫一個新的驅(qū)動程序使其支持現(xiàn)有的通用串行總線設(shè)備,將各通用串行總線設(shè)備 驅(qū)動程序源碼整合到一起,驅(qū)動程序根據(jù)各通用串行總線設(shè)備的特性執(zhí)行不同的程序分 支,從而在形式上實現(xiàn)了統(tǒng)一,但是該方案與方案2存在同樣的問題,即當(dāng)有新的通用串 行總線設(shè)備需要支持時,也需要修改驅(qū)動程序,不便于擴展,也不利于保證穩(wěn)定性。
發(fā)明內(nèi)容
本發(fā)明的目的是提出一種對多種通用串行總線設(shè)備驅(qū)動的方法,開發(fā)一個通用的通用 串行總線設(shè)備驅(qū)動程序,程序中不體現(xiàn)任何一個通用串行總線設(shè)備的通信協(xié)議,而是通過 讀取通用串行總線設(shè)備對應(yīng)的通信規(guī)則來獲得通信中需要的協(xié)議規(guī)則,對于多數(shù)通用串行 總線設(shè)備具有普遍的適用性。
本發(fā)明提出的同時對多種通用串行總線設(shè)備驅(qū)動的方法,包括以下步驟 (1 )分別為多種通用串行總線設(shè)備配置通用串行總線設(shè)備與主機的驅(qū)動模塊之間的 通信規(guī)則,并形成通信規(guī)則庫;
(2) 主機的驅(qū)動模塊分別從主機的管理模塊中獲取上述多種通用串行總線設(shè)備的廠 商代碼、產(chǎn)品代碼、產(chǎn)品版本號;
(3) 當(dāng)通用串行總線設(shè)備插入主機時,主機的驅(qū)動模塊根據(jù)上述獲取的各通用串行 總線設(shè)備的廠商代碼、產(chǎn)品代碼、產(chǎn)品版本號,從上述通信規(guī)則庫中檢索到與當(dāng)前插入的通用串行總線設(shè)備相匹配的通信規(guī)則;
(4) 主機的驅(qū)動模塊根據(jù)上述檢索到的通信規(guī)則,從當(dāng)前插入的通用串行總線設(shè)備 中獲取當(dāng)前插入的通用串行總線設(shè)備的序列號;
(5) 當(dāng)主機的應(yīng)用模塊向當(dāng)前插入的通用串行總線設(shè)備發(fā)送數(shù)據(jù)交互請求指令時, 主機的驅(qū)動模塊根據(jù)當(dāng)前插入的通用串行總線設(shè)備的通信規(guī)則,對數(shù)據(jù)交互請求指令進行 打包處理后發(fā)送至當(dāng)前插入的通用串行總線設(shè)備,當(dāng)前插入的通用串行總線設(shè)備接收到該 指令后進行解包處理,并根據(jù)上述數(shù)據(jù)交互請求指令,對當(dāng)前插入的通用串行總線設(shè)備中 需返回給主機驅(qū)動模塊的數(shù)據(jù)進行打包處理,最后發(fā)送至主機的驅(qū)動模塊;
(6) 主機的驅(qū)動模塊根據(jù)當(dāng)前插入的通用串行總線設(shè)備的通信規(guī)則,對接收到的當(dāng) 前插入的通用串行總線設(shè)備打包處理后返回的數(shù)據(jù)進行解包,從中獲取主機的應(yīng)用模塊需 要的數(shù)據(jù),并發(fā)送至主機的應(yīng)用模塊;
(7) 當(dāng)通用串行總線設(shè)備從主機移除時,主機的驅(qū)動模塊將當(dāng)前插入的通用串行總 線設(shè)備的通信規(guī)則從內(nèi)存中清除。
本發(fā)明提出的同時對多種通用串行總線設(shè)備驅(qū)動的方法,由于主機驅(qū)動模塊對各種通 用串行總線設(shè)備的支持是采用添加和修改通信規(guī)則方式實現(xiàn)的,因此即使有更多的通用串 行總線設(shè)備需要支持也不需要修改主機驅(qū)動模塊的程序,這就保證了主機驅(qū)動模塊的穩(wěn)定 性,當(dāng)已有驅(qū)動程序需支持新的通用串行總線設(shè)備時,只要按照已設(shè)計好的通信規(guī)則配置 流程和方法為該設(shè)備增加一個新的通信規(guī)則,新的通用串行總線設(shè)備就可以通過已有驅(qū)動 模塊進行識別和驅(qū)動了。只要理解和掌握通用串行總線設(shè)備通信規(guī)則的配置方法,對于新 的通用串行總線設(shè)備的支持將更快捷、更可靠。
圖1是本發(fā)明方法的流程框圖。
具體實施例方式
本發(fā)明提出的同時對多種通用串行總線設(shè)備驅(qū)動的方法,其流程框圖如圖l所示,包 括以下步驟
(1) 分別為多種通用串行總線設(shè)備配置通用串行總線設(shè)備與主機的驅(qū)動模塊之間的 通信規(guī)則,并形成通信規(guī)則庫;
(2) 當(dāng)通用串行總線設(shè)備插入主機時,主機的驅(qū)動模塊分別從主機的管理模塊中獲 取上述多種通用串行總線設(shè)備的廠商代碼、產(chǎn)品代碼、產(chǎn)品版本號;
(3) 主機的驅(qū)動模塊根據(jù)上述獲取的各通用串行總線設(shè)備的廠商代碼、產(chǎn)品代碼、 產(chǎn)品版本號,從上述通信規(guī)則庫中檢索到與當(dāng)前插入的通用串行總線設(shè)備相匹配的通信規(guī) 則;
(4) 主機的驅(qū)動模塊根據(jù)上述檢索到的通信規(guī)則,從當(dāng)前插入的通用串行總線設(shè)備中獲取當(dāng)前插入的通用串行總線設(shè)備的序列號;
(5) 當(dāng)主機的應(yīng)用模塊向當(dāng)前插入的通用串行總線設(shè)備發(fā)送數(shù)據(jù)交互請求指令時, 主機的驅(qū)動模塊根據(jù)當(dāng)前插入的通用串行總線設(shè)備的通信規(guī)則,對數(shù)據(jù)交互請求指令進行 打包處理后發(fā)送至當(dāng)前插入的通用串行總線設(shè)備,當(dāng)前插入的通用串行總線設(shè)備接收到該 指令后進行解包處理,并根據(jù)上述數(shù)據(jù)交互請求指令,對當(dāng)前插入的通用串行總線設(shè)備中 需返回給主機驅(qū)動模塊的數(shù)據(jù)進行打包處理,最后發(fā)送至主機的驅(qū)動模塊;
(6) 主機的驅(qū)動模塊根據(jù)當(dāng)前插入的通用串行總線設(shè)備的通信規(guī)則,對接收到的當(dāng) 前插入的通用串行總線設(shè)備打包處理后返回的數(shù)據(jù)進行解包,從中獲取主機的應(yīng)用模塊需 要的數(shù)據(jù),并發(fā)送至主機的應(yīng)用模塊;
(7) 當(dāng)通用串行總線設(shè)備從主機移除時,主機的驅(qū)動模塊將當(dāng)前插入的通用串行總 線設(shè)備的通信規(guī)則從內(nèi)存中清除。
以下介紹本發(fā)明的一個實施例
以國內(nèi)某廠商通用串行總線設(shè)備為例,說明其在windows系統(tǒng)上的識別和驅(qū)動過程。 (假設(shè)這個通用串行總線設(shè)備的廠商代碼、產(chǎn)品代碼、產(chǎn)品版本號分別為0x9876、 0x5432、 0x1000),該設(shè)備支持復(fù)位功能,且序列號后包含在復(fù)位響應(yīng)中。 新增通用串行總線設(shè)備時,通信規(guī)則配置方法和步驟
(1) 首先修改通信規(guī)則庫中的全局配置文件,即文件eiddrv.ini,在該文件的唯一 一個段[UDL]中添加一屬性及屬性值,該屬性為廠商代碼、產(chǎn)品代碼、產(chǎn)品版本對應(yīng)值16 進制顯示的順序組合,例子中的屬性應(yīng)為"987654321000",該屬性值為該通用串行總線 設(shè)備的具體配置規(guī)則對應(yīng)的配置文件的路徑及名稱,我們假定其文件名為
"987654321000.ini",并假定該文件所在路徑為"C:\ProgramFiles\eid\UDL",則此處 屬性"987654321000"對應(yīng)的屬性值為"C:\ProgramFiles\eid\UDL\987654321000.ini";
(2) 修改主機驅(qū)動模塊對應(yīng)的INF文件,即文件eiddrv. inf,在該文件中的[MfgO] 段中添加該通用串行總線設(shè)備對應(yīng)的廠商代碼和產(chǎn)品代碼,并在[Strings]中添加該通用 串行總線設(shè)備的顯示名稱,配置完后的內(nèi)容如下
%DeviceDescNew%=eID—DDI, USB\VID_9876&PID_5432 [Strings] DeviceDescNew= "New Device"
(3) 配置該例子中的通用串行總線設(shè)備的具體通信規(guī)則,即文件"987654321000. ini": 該文件的格式及所包含的段、及各段包含的屬性、屬性值等應(yīng)按照已經(jīng)設(shè)計好的通信規(guī)則 配置方法進行,且配置時需遵照通用串行總線設(shè)備廠商提供的與該通用串行總線設(shè)備對應(yīng) 的通信協(xié)議。
該通用串行總線設(shè)備的通信規(guī)則即文件"987654321000. ini"配置完成后,需將該 文件拷貝到路徑"C:\Program Files\eid\UDL\"下,此時,插入該設(shè)備后,就可以被主機的管理模塊和驅(qū)動模塊正確識別和驅(qū)動了 。
當(dāng)通用串行總線設(shè)備插入主機后,主機驅(qū)動模塊處理過程如下所述
(1) 當(dāng)通用串行總線設(shè)備插入主機后,主機的管理模塊獲取插入通用串行總線設(shè)備 的廠商代碼、產(chǎn)品代碼、產(chǎn)品版本號等信息,并啟動主機驅(qū)動模塊;
(2) 主機驅(qū)動模塊分別從上述主機的管理模塊中獲取上述多個通用串行總線設(shè)備的 廠商代碼、產(chǎn)品代碼、產(chǎn)品版本號,并讀取通信規(guī)則中的全局配置文件eiddrv.ini到緩 存中,并從eiddrv. ini文件的[UDL]中讀取以插入的通用串行總線設(shè)備的廠商代碼、產(chǎn)品 代碼、產(chǎn)品版本號順序形成的字符串為屬性的屬性值,即得到該插入通用串行總線設(shè)備的 通信規(guī)則對應(yīng)的配置文件的路徑及名稱,主機驅(qū)動模塊讀取該路徑下該文件到內(nèi)存中來;
(3) 主機驅(qū)動模塊獲取[UDL一BASE]段中的EPList信息,并為該通用串行總線設(shè)備 設(shè)置通信端口;
(4) 主機驅(qū)動模塊按照[UDL一RESETATRSERIALNO]段中的規(guī)則對插入的通用串行總線 設(shè)備發(fā)送復(fù)位應(yīng)答,并獲取插入的通用串行總線設(shè)備的復(fù)位應(yīng)答信息。由于假設(shè)例子中的 通用串行總線設(shè)備支持從其返回給主機驅(qū)動模塊的應(yīng)答信息中獲取序列號,主機驅(qū)動模塊 根據(jù)[UDL—RESETATRSERIALNO]段中配置的獲取通用串行總線設(shè)備序列號的規(guī)則從該設(shè)備 返回的復(fù)位應(yīng)答信息中獲取該設(shè)備的序列號。
主機驅(qū)動模塊正確獲取該通用串行總線設(shè)備的序列號后,主機應(yīng)用模塊就可以通過主 機驅(qū)動模塊向插入的通用串行總線設(shè)備發(fā)送數(shù)據(jù)請求指令。
(5) 主機應(yīng)用模塊發(fā)送數(shù)據(jù)請求指令給主機驅(qū)動模塊;主機驅(qū)動模塊按照插入的通 用串行總線設(shè)備的通信規(guī)則中的[UDL一SEND]段中規(guī)則對上述數(shù)據(jù)請求指令進行打包處理, 發(fā)給插入的通用串行總線設(shè)備。
(6) 插入的通用串行總線設(shè)備收到主機驅(qū)動模塊的數(shù)據(jù)請求指令后,先進行解包處 理,然后根據(jù)數(shù)據(jù)請求指令對其需返回給主機驅(qū)動模塊的數(shù)據(jù)進行打包處理,并向主機驅(qū) 動模塊返回;
(7) 主機驅(qū)動模塊接收插入的通用串行設(shè)備返回的數(shù)據(jù)包,按照插入的通用串行總 線設(shè)備的通信規(guī)則中的[UDL^RECV;i的規(guī)則對當(dāng)前插入的通用串行總線設(shè)備打包處理后返回 的數(shù)據(jù)進行解包,從中獲取主機的應(yīng)用模塊需要的數(shù)據(jù),并發(fā)送至主機的應(yīng)用模塊;
(8) 當(dāng)通用串行總線設(shè)備移除時,主機驅(qū)動模塊將內(nèi)存中該通用串行總線設(shè)備的通 信規(guī)則清除。
權(quán)利要求
1、一種同時對多種通用串行總線設(shè)備驅(qū)動的方法,其特征至于該方法包括以下步驟(1)分別為多種通用串行總線設(shè)備配置通用串行總線設(shè)備與主機的驅(qū)動模塊之間的通信規(guī)則,并形成通信規(guī)則庫;(2)當(dāng)通用串行總線設(shè)備插入主機時,主機的驅(qū)動模塊分別從主機的管理模塊中獲取上述多種通用串行總線設(shè)備的廠商代碼、產(chǎn)品代碼、產(chǎn)品版本號;(3)主機的驅(qū)動模塊根據(jù)上述獲取的各通用串行總線設(shè)備的廠商代碼、產(chǎn)品代碼、產(chǎn)品版本號,從上述通信規(guī)則庫中檢索到與當(dāng)前插入的通用串行總線設(shè)備相匹配的通信規(guī)則;(4)主機的驅(qū)動模塊根據(jù)上述檢索到的通信規(guī)則,從當(dāng)前插入的通用串行總線設(shè)備中獲取當(dāng)前插入的通用串行總線設(shè)備的序列號;(5)當(dāng)主機的應(yīng)用模塊向當(dāng)前插入的通用串行總線設(shè)備發(fā)送數(shù)據(jù)交互請求指令時,主機的驅(qū)動模塊根據(jù)當(dāng)前插入的通用串行總線設(shè)備的通信規(guī)則,對數(shù)據(jù)交互請求指令進行打包處理后發(fā)送至當(dāng)前插入的通用串行總線設(shè)備,當(dāng)前插入的通用串行總線設(shè)備接收到該指令后進行解包處理,并根據(jù)上述數(shù)據(jù)交互請求指令,對當(dāng)前插入的通用串行總線設(shè)備中需返回給主機驅(qū)動模塊的數(shù)據(jù)進行打包處理,最后發(fā)送至主機的驅(qū)動模塊;(6)主機的驅(qū)動模塊根據(jù)當(dāng)前插入的通用串行總線設(shè)備的通信規(guī)則,對接收到的當(dāng)前插入的通用串行總線設(shè)備打包處理后返回的數(shù)據(jù)進行解包,從中獲取主機的應(yīng)用模塊需要的數(shù)據(jù),并發(fā)送至主機的應(yīng)用模塊;(7)當(dāng)通用串行總線設(shè)備從主機移除時,主機的驅(qū)動模塊將當(dāng)前插入的通用串行總線設(shè)備的通信規(guī)則從內(nèi)存中清除。
全文摘要
本發(fā)明涉及一種對多種通用串行總線設(shè)備驅(qū)動的方法,屬計算機技術(shù)領(lǐng)域。先為通用串行總線設(shè)備配置通信規(guī)則,主機驅(qū)動模塊根據(jù)來自管理模塊的設(shè)備廠商代碼等信息檢索到該設(shè)備的通信規(guī)則,進而獲設(shè)備的序列號;并對來自主機應(yīng)用模塊的數(shù)據(jù)交互請求指令進行打包處理后發(fā)至當(dāng)前插入的設(shè)備,該設(shè)備對來自主機驅(qū)動模塊的數(shù)據(jù)進行解包處理,并返回應(yīng)答信息給主機驅(qū)動模塊;主機的驅(qū)動模塊根據(jù)通信規(guī)則,對接收到的應(yīng)答信息進行解包,并獲取有效數(shù)據(jù)發(fā)送至主機應(yīng)用模塊;當(dāng)該設(shè)備從主機移除時,主機驅(qū)動模塊將該設(shè)備對應(yīng)的通信規(guī)則清除。本發(fā)明的優(yōu)點是只要掌握通用串行總線設(shè)備通信規(guī)則的配置方法,對于新的通用串行總線設(shè)備的支持將更快捷、更可靠。
文檔編號G06F13/10GK101320333SQ20081011649
公開日2008年12月10日 申請日期2008年7月11日 優(yōu)先權(quán)日2008年7月11日
發(fā)明者張文翠, 張明德, 楊文勝 申請人:北京信城通數(shù)碼科技有限公司