關於 HID 你可能需要知道的幾件事 (更新中...)


  1. 《HID 1.11》 主要描述 report desc 的一些規則,以及如何進行通訊
  2. 《HUT 1.22》 則主要說明一些通用的 HID 設備類型具備的 Usage page, Usage
  3. 關於 HID 的文檔請從該網頁獲取:https://www.usb.org/hid

  1. 關於 HID 的庫可以使用 libusb 直接操作 USB HID 節點,也可通過 libhidapi 來操作,libhidapi 集成度更高,而且最近也開始重新維護了。都由 libusb 維護:
  2. libusb 倉庫地址:https://github.com/libusb/libusb
  3. libhidapi 倉庫地址:https://github.com/libusb/hidapi
  4. 如果你比較糾結到底是選擇 libusb 好還是 libhidapi 好,則可以看一下這個帖子:https://stackoverflow.com/questions/55272593/hidapi-vs-libusb-for-linux

  1. HID 規范文檔中設備描述的 input 和 output 都是站在 Host 端角度描述的
  2. HID 中的 report desc 主要是為了向 Host 描述設備具備何種功能,以及如何使用設備的。而 HID 從協議上並沒有嚴格的綁定傳輸過程中的數據與 report desc 的對應關系。這需要設備和 PC 端的驅動和應用程序來保證。因此,這也造成了是市面很多不規范的產品 dump 出來一個設備描述自己支持很多的功能,但可能其中只有一小部分的功能是支持的原因。

  1. HID report descriptor 描述了HID 設備的沒一筆數據的數據標簽(Tag)類型,大小,比如:

    1. 定義了 HID 的 input 事件應該被當作 mouse 事件還是 Keyboard 事件
    2. 定義了一個 output 事件或者 input 事件應該被如何傳輸(數據結構,類型)

  1. HID 的 ClassCode 恆定為 0x03

  2. HID 的 SubClass 有兩個值

    1. 0 代表無 SubClass
    2. 1 代表 Boot Interface Subclass
  3. HID 的 Protocol Codes 定義了三個值:(只有當 SubClass 為 1 的時候才會有 Interface Desc,並且 ProtocolCode 才有 非零值)

    1. 0 - None
    2. 1 - Keyboard
    3. 2 - Mouse

六: 關於 HID 的 Endpoint 說明如下:

  1. Control pipe de Endpoint0 是作為一個 USB 設備一定存在的,其也傳輸了包含以下內容:USB Control, Class request code, polled data(Message Data)
  2. Interrupt In, 用於承載 HID Input 類型數據(device to host)
  3. Interrupt Out,用於承載 HID output 類型數據(Host to devices),該 Endpoint 可不實現,此時 Output 數據通過 Endpoint0 傳輸

七 Report Descript

  1. HID Report Desc 中包含許多格式相近的 item,而分析這些 item 的上下文可以得知,一個 HID 的設備包含哪些能力。

  2. Report Desc 上下文的格式大致如下圖所示:

  3. 其中 item 的格式:

    短 item 主要包含以下幾個部分:bTag,bType,bSize,bData,如下所示
    ShortItems

    1. bTag 和 bType 一起標識該 Item 的屬性,其中 bType 主要指定屬性范圍,占用兩個位:
      00 - Main Items
      01 - Global Items
      10 - Local Items
      11 - 保留(實際上可看成和特殊的 bTag(1111), bSize(10) 搭配標識該 Item 為長 Items)

    2. 而對於短 Item 來說, bSize 標識該 item 的 bData 長度,短 Item 大致有 0,1,2,4 這幾種長度,分別用 00, 01, 10, 11 表示

    長 item 主要包含 特殊頭,bDataSize,bLongItemTag, Data,如下所示:
    LongItems


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM