一種基于hid協(xié)議的數(shù)據(jù)傳輸方法
【技術領域】
[0001]本發(fā)明涉及通訊控制領域,尤其是無線遙控領域。
【背景技術】
[0002]得益于Windows操作系統(tǒng)對HID (Human Interface Devices)協(xié)議的良好支持,目前很多數(shù)據(jù)傳輸方法都基于HID協(xié)議,以免除安裝驅動程序的困擾。但對于移動操作系統(tǒng)例如1S、Android系統(tǒng)而言,盡管HID協(xié)議規(guī)范中定義了多種類型設備,但這些系統(tǒng)原生支持較好的也只有常用的鍵盤或鼠標類型(其中1S系統(tǒng)的HID協(xié)議目前不支持鼠標類型)。因此對于采用移動操作系統(tǒng)的主機例如手機、平板、智能電視、機頂盒等等,在利用HID協(xié)議傳輸數(shù)據(jù)受此限制下,目前實現(xiàn)數(shù)據(jù)傳輸?shù)挠袃煞N方式:1、本身可定義為鍵值或坐標相關類型的應用(例如鍵盤、鼠標、遙控器、手柄等);2、其他HID設備類型數(shù)據(jù),需要修改操作系統(tǒng)底層驅動進行識別。
[0003]對于上述兩種方式,第I種方式限制了設備的數(shù)據(jù)類型,并且控制鍵碼等內容是明文的,很容易被截取,無法做到安全保密性;而對于第2種,顯然對于第一方原廠而言增加了實現(xiàn)的復雜度,而對于第三方應用軟件開發(fā)商則在開發(fā)相應的驅動程序時需要適配不同版本的操作系統(tǒng),同樣增加了實現(xiàn)難度,總體上都是提高了研發(fā)投入和維護成本。
【發(fā)明內容】
[0004]為克服現(xiàn)有技術中的上述幾種實現(xiàn)方式的缺點,本發(fā)明提出了一種基于HID協(xié)議的數(shù)據(jù)處理和加密傳輸方法,將設備聲明為HID鍵盤類型,并采用HID鍵值類型的數(shù)據(jù)傳輸格式,以得到系統(tǒng)原生支持(無需驅動、兼容性好),且傳輸?shù)脑紨?shù)據(jù)可為16bit、24bit甚至更長的數(shù)據(jù)類型,遠大于HID鍵值數(shù)據(jù)只有7bit的復雜度,以滿足更復雜的應用;并且因為采用了鍵值類型的數(shù)據(jù)傳輸格式,也支持傳輸標準鍵值,因此可基于標準鍵盤或遙控器,在其標準按鍵數(shù)據(jù)上擴展增加其他數(shù)據(jù)的傳輸,實現(xiàn)功能更復雜的遙控裝置。
[0005]本發(fā)明提供了一種基于HID協(xié)議的數(shù)據(jù)傳輸方法,接收端的操作系統(tǒng)能基于HID協(xié)議接收其原生支持的HID設備所發(fā)送的數(shù)據(jù)包,所述數(shù)據(jù)包包括m+n個字節(jié)的標準數(shù)據(jù)和P個字節(jié)的格式相關數(shù)據(jù);發(fā)送端并不是所述接收端原生支持的HID設備類型,所述方法包括以下步驟:
[0006]a.所述發(fā)送端利用一加密算法對原始數(shù)據(jù)進行加密;
[0007]b.所述發(fā)送端對加密后的數(shù)據(jù)生成校驗碼;
[0008]c.所述發(fā)送端將所述加密后的數(shù)據(jù)和所述校驗碼相組合后的數(shù)據(jù)拆分成m個字
-K-
T ;
[0009]d.所述發(fā)送端將所述m個字節(jié)轉換成所述接收端根據(jù)所述HID協(xié)議能識別的m個字Tl ;
[0010]e.所述發(fā)送端在所述轉換后的m個字節(jié)的數(shù)據(jù)之前添加符合所述HID協(xié)議的η個字節(jié)的識別數(shù)據(jù),以便所述接收端能區(qū)分接收到的數(shù)據(jù)是來自所述接收端原生支持的HID設備的,還是來自所述發(fā)送端的;
[0011]f.所述發(fā)送端在所述η個字節(jié)的識別數(shù)據(jù)之前,添加P個字節(jié)的格式相關數(shù)據(jù);
[0012]g.所述發(fā)送端將所述符合所述HID協(xié)議的m個字節(jié)和所述η個字節(jié)的識別數(shù)據(jù)以及P個字節(jié)的格式相關數(shù)據(jù)封裝成一個完整的符合所述HID協(xié)議的數(shù)據(jù)包,并發(fā)送給所述接收端。
[0013]所述方法還包括:
[0014]h.所述接收端接收到步驟g發(fā)出的所述數(shù)據(jù)包;
[0015]1.所述接收端根據(jù)所述識別數(shù)據(jù)判斷所述數(shù)據(jù)包是其原生支持的HID設備發(fā)送的,還是所述發(fā)送端發(fā)送的;
[0016]j.若是所述發(fā)送端發(fā)送的,則所述接收端將接收到的所述數(shù)據(jù)包的后m個字節(jié)進行解碼獲得一加密后的數(shù)據(jù)和校驗碼;
[0017]k.所述接收端利用所述校驗碼對所述加密后的數(shù)據(jù)進行校驗;
[0018]1.若校驗成功,則對所述加密后的數(shù)據(jù)進行解密,獲得原始數(shù)據(jù)。
[0019]在一個實施例中,所述HID協(xié)議為HID鍵盤協(xié)議,其中,所述P個字節(jié)的格式相關數(shù)據(jù)包括I個控制鍵字節(jié)和I個保留字節(jié),所述m+n個字節(jié)的標準數(shù)據(jù)為6個標準鍵值,所述m為4、η為2、P為2。
[0020]在一個實施例中,所述原始數(shù)據(jù)的長度為16bit,所述校驗碼的長度為Sbit ;步驟d中的轉換后的m個字節(jié)為4個符合所述HID鍵盤協(xié)議的標準鍵值,所述識別數(shù)據(jù)為2個字節(jié)的不常用的標準鍵值,所述識別數(shù)據(jù)預先存儲在所述接收端中。
[0021]在一個實施例中,所述識別數(shù)據(jù)為0x68和0x69。
[0022]在一個實施例中,步驟f包括將添加一個0x00的控制鍵字節(jié)和一個0x00的保留字Tl O
[0023]在一個實施例中,步驟d包括:
[0024]根據(jù)一映射表將所述m個字節(jié)轉換成所述接收端通過所述HID協(xié)議能識別的m個字節(jié),其中,所述映射表存儲于所述發(fā)送端和所述接收端中。
[0025]在一個實施例中,步驟h和i之間,還包括以下步驟:
[0026]判斷接收到的數(shù)據(jù)包的后m+n個字節(jié)是否均為非O值,若是,則執(zhí)行步驟i ;若否,則認為所述數(shù)據(jù)包是所述接收端原生支持的HID設備發(fā)送的。
[0027]在一個實施例中,所述發(fā)送端是具有指紋識別模塊的遠程操控設備。
[0028]在一個實施例中,所述發(fā)送端是具有手寫輸入模塊的遠程操控設備。
【附圖說明】
[0029]本發(fā)明的以上
【發(fā)明內容】
以及下面的【具體實施方式】在結合附圖閱讀時會得到更好的理解。需要說明的是,附圖僅作為所請求保護的發(fā)明的示例。在附圖中,相同的附圖標記代表相同或類似的元素。
[0030]圖1示出根據(jù)本發(fā)明的一實施例的基于HID協(xié)議的數(shù)據(jù)處理和加密傳輸方法;
[0031]圖2示出根據(jù)本發(fā)明的一實施例的數(shù)據(jù)轉換成HID鍵值的示意圖;
[0032]圖3示出根據(jù)本發(fā)明的一實施例的發(fā)送端的數(shù)據(jù)處理流程示意圖;以及
[0033]圖4示出根據(jù)本發(fā)明的一實施例的接收端的數(shù)據(jù)處理流程示意圖。
【具體實施方式】
[0034]以下在【具體實施方式】中詳細敘述本發(fā)明的詳細特征以及優(yōu)點,其內容足以使任何本領域技術人員了解本發(fā)明的技術內容并據(jù)以實施,且根據(jù)本說明書所揭露的說明書、權利要求及附圖,本領域技術人員可輕易地理解本發(fā)明相關的目的及優(yōu)點。
[0035]圖1示出根據(jù)本發(fā)明的一實施例的基于HID協(xié)議的數(shù)據(jù)處理和加密傳輸方法,其中,接收端的操作系統(tǒng)能基于HID協(xié)議接收其原生支持的HID設備所發(fā)送的數(shù)據(jù)包,所述數(shù)據(jù)包包括m+n個字節(jié)的標準數(shù)據(jù)和P個字節(jié)的格式相關數(shù)據(jù);發(fā)送端并不是所述接收端原生支持的HID設備類型。
[0036]對于發(fā)送端而言,該方法包括以下步驟。
[0037]步驟101,發(fā)送端利用一加密算法對原始數(shù)據(jù)進行加密。
[0038]步驟102,所述發(fā)送端對加密后的數(shù)據(jù)生成校驗碼。
[0039]步驟103,所述發(fā)送端將所述加密后的數(shù)據(jù)和所述校驗碼相組合后的數(shù)據(jù)拆分成m個字節(jié)。
[0040]步驟104,所述發(fā)送端將所述m個字節(jié)轉換成接收端通過所述HID協(xié)議能識別的m個字節(jié)。
[0041]步驟105,所述發(fā)送端在所述轉換后的m個字節(jié)的數(shù)據(jù)之前,添加η個字節(jié)的識別數(shù)據(jù),以便所述接收端能區(qū)分接收到的數(shù)據(jù)是來自所述接收端原生支持的HID設備的,還是來自所述發(fā)送端的。在一個實施例中,該η個字節(jié)的識別數(shù)據(jù)可以是不常用的但符合該HID協(xié)議規(guī)范的數(shù)據(jù)。
[0042]步驟106,所述發(fā)送端在所述η個字節(jié)的識別數(shù)據(jù)之前添加P個字節(jié)的格式相關數(shù)據(jù);
[0043]步驟107,所述發(fā)送端將所述符合所述HID協(xié)議的m個字節(jié)和所述η個字節(jié)的識別數(shù)據(jù)以及P個字節(jié)的格式相關數(shù)據(jù)封裝成一個完整的符合所述HID協(xié)議的數(shù)據(jù)包,并發(fā)送給所述接收端。
[0044]對于接收端而言,所述方法包括步驟:
[0045]步驟108,所述接收端接收到步驟g發(fā)出的所述數(shù)據(jù)包;
[0046]步驟109,所述接收端根據(jù)所述識別數(shù)據(jù)判斷所述數(shù)據(jù)包是其原生支持的HID設備發(fā)送的,還是所述發(fā)送端發(fā)送的;
[0047]步驟110,若是所述發(fā)送端發(fā)送的,則所述接收端將接收到的所述數(shù)據(jù)包的后m個字節(jié)進行解碼獲得一加密后的數(shù)據(jù)和校驗碼;
[0048]步驟111,所述接收端利用所述校驗碼對所述加密后的數(shù)據(jù)進行校驗;
[0049]步驟112,若校驗成功,則對所述加密后的數(shù)據(jù)進行解密,獲得原始數(shù)據(jù)。
[0050]為了更清楚地闡明本申請的技術方案,以下以HID鍵盤協(xié)議為例詳細介紹本發(fā)明的主要技術方案。本領域技術人員在閱讀了以下內容后,應了解本發(fā)明的應用不限于HID鍵盤協(xié)議,還可以應用于其他Android或1S系統(tǒng)支持較好的其他HID協(xié)議,例如,游戲手柄協(xié)議或HID鼠標協(xié)議。同時,為了描述方便,下文中提到的“普通按鍵”指的是接收端的操作系統(tǒng)基于HID協(xié)議所原生支持的HID設備的按鍵事件。而“自定義數(shù)據(jù)”指的是本發(fā)明的接收端所發(fā)送并轉換后的數(shù)據(jù)。
[0051]在一個實施例中,本發(fā)明采用HID協(xié)議規(guī)范中的標準鍵盤設備類型,HID協(xié)議的標準數(shù)據(jù)包為8個字節(jié)(即m+n+p = 8),標準鍵盤設備類型的定義中前2個字節(jié)分別為控制鍵字節(jié)和保留字節(jié)(即P = 2),后6個字節(jié)才是標準鍵值(即m+n = 6),因此為了傳輸較長的數(shù)據(jù),同時又符合標準鍵盤類型的定義,為實現(xiàn)簡單,本方案具體實現(xiàn)時只使用后面6個字節(jié)數(shù)據(jù),前面2個字節(jié)數(shù)據(jù)設為O。
[0052]同樣,為了符合標準鍵盤類型的定義,本方案的實現(xiàn)方法是發(fā)送端將待傳輸?shù)臄?shù)據(jù)轉換為6個標準鍵碼,然后再傳輸,以便接收端能夠正常解析。
[0053]由于傳輸時已經將數(shù)據(jù)轉換成標準鍵值,需要將其和鍵盤按鍵的鍵值區(qū)分開來,以便接收端能夠正確區(qū)分是自定義數(shù)據(jù)還是接收端原生支持的HID設備的按鍵,實現(xiàn)方法是將6個鍵值的頭2個字節(jié)(即η = 2)分別定義為兩個極少用到的特殊鍵值作為識別數(shù)據(jù),這樣大幅降低誤判的概率。
[0054]在HID鍵盤應用中,6個鍵值表示鍵盤同時按下了 6個按鍵,而這種情況在實際應用中出現(xiàn)較少,因此本方案在實現(xiàn)數(shù)據(jù)傳輸時每次都會產生完整的6個鍵值的數(shù)據(jù),以進一步減少接收端在判斷是所接收的數(shù)據(jù)是其原生支持的HID設備發(fā)送的鍵值還是自定義數(shù)據(jù)轉換的鍵值時判斷失誤的概率。
[0055]6個字節(jié)當中,除了頭2個字節(jié)作為識別數(shù)據(jù)之外,后4個字節(jié)則真正用來保存待傳輸?shù)臄?shù)據(jù)。由于標準鍵值的有效位數(shù)為7個bit,所以4個字節(jié)能使用的也只有28個bit。因此本方案實現(xiàn)的傳輸數(shù)據(jù)長度最長支持28bit。
[0056]28bit的原始數(shù)據(jù)需要轉換成4個字節(jié)鍵值再傳輸。在一個實施例中,可以通過一預先設計的鍵值映射表來實現(xiàn)這種轉換,以保證映射后的鍵值屬于標準鍵盤范圍。
[0057]結合應用需求和實現(xiàn)便利性,本方案在實現(xiàn)時采用了 24bit數(shù)據(jù)長度,實現(xiàn)方法為:24bit數(shù)據(jù)分散為4組6bit數(shù)據(jù),分別占4個鍵值字節(jié)當中每個字節(jié)的6個bit有效位。
[0058]由于24bit數(shù)據(jù)需要轉換成標準鍵值數(shù)據(jù)再傳輸,而對于24bit數(shù)據(jù)本身格式無限制,