在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HID協議是什么意思

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:韋東山老師驅動大 ? 2023-07-17 17:41 ? 次閱讀

對于 USB 接口的 HID 設備,有一套協議。

1.1 描述符

HID 設備有如下描述符:

圖片

  • HID
    設備的"設備描述符"并無實際意義,沒有使用"設備描述符"來表示自己是 HID 設備。
  • HID
    設備只有一個配置,所以只有一個配置描述符
  • 接口描述符
    • bInterfaceClass
      為 3,表示它是 HID 設備
    • bInterfaceSubClass
      是 0 或 1,1 表示它支持"Boot Interface"(表示 PC 的 BIOS 能識別、使用它),0
      表示必須等操作系統啟動后通過驅動程序來使用它。
    • bInterfaceProtocol:0-None,
      1-鍵盤, 2-鼠標
  • 端點描述符:HID
    設備有一個控制端點、一個中斷端點

圖片

對于鼠標,HOST 可以通過中斷端點讀到數據。

1.2 數據格式

1.2.1 鍵盤

通過中斷傳輸可以讀到鍵盤數據,它是 8 字節的數據,格式如下:

偏移大小描述
01字節"Modifier
keys status",就是ctrl、alt、shift等按鍵的狀態
11字節保留
21字節第1個按鍵的鍵值
31字節第2個按鍵的鍵值
41字節第3個按鍵的鍵值
51字節第4個按鍵的鍵值
61字節第5個按鍵的鍵值
71字節第6個按鍵的鍵值

第 0 個字節中每一位都表示一個按鍵的狀態,某位等于 1
時,表示對應的按鍵被按下,格式如下:

長度描述
01Left
Ctrl
11Left
Shift
21Left
Alt
31Left
GUI(Windows/Super key)
41Right
Ctrl
51Right
Shift
61Right
Alt
71Right
GUI(Windows/Super key)

讀到的鍵盤數據里有 6 個按鍵值,每個按鍵值都是 8 位的數據。如果某個按鍵值不等于
0,就表示某個按鍵被按下了。按鍵值跟按鍵的對應關系,請看后面的《1.2.4 掃描碼》。

示例:按鍵"A"、"B"、"C"、"X"的按鍵值分別是 4、5、6、0x1B。

按下了"A",USB 鍵盤上報的數據為:

00 00 04 00 00 00 00 00

松開"A",USB 鍵盤上報的數據為:

00 00 00 00 00 00 00 00

按下"A"、"B",USB 鍵盤上報的數據為:

00 00 04 05 00 00 00 00

保持"A"、"B"不松開,繼續按下"C",USB 鍵盤上報的數據為:

00 00 04 05 06 00 00 00

松開"A",但是保持"B"、"C"不松開,USB 鍵盤上報的數據為:

00 00 05 06 00 00 00 00

USB
鍵盤上報的數據里,哪個按鍵先被按下,就先記錄它的按鍵值。在上面的例子里,"A"松開后只有"B"、"C"這兩個按鍵,"B"、"C"的按鍵值挪到了前面。

按下"Left shift"、并且按下"X",USB 鍵盤上報的數據為:

02 00 1B 00 00 00 00 00

USB
鍵盤只能上報 6 個按鍵值,如果有超過 6 個按鍵被按下,那么它將上報"phantom condition"(6 個按鍵值都是
1),但是"Modifier keys status"還是有效的。比如"Right Shift"被按下,另外超過 6 個的按鍵也被按下時,USB
鍵盤上報的數據為:

20 00 01 01 01 01 01 01

1.2.2 LED

我們還可控制鍵盤的 LED,需要發出一個控制傳輸請求:SetReport ,使用這個請求發送一個字節的數據。

這個字節的數據格式如下,某位為 1 時,會點亮相應的 LED:

長度描述
01Num
Lock
11Caps
Lock
21Scroll
Lock
31Compose
41Kana
51保留,寫為0

發出的 SetReport,是一個控制傳輸的"setup packet",格式如下:

圖片

以 libusb 的函數描述它的參數,如下:

int LIBUSB_CALL libusb_control_transfer(libusb_device_handle *dev_handle,
 uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
 unsigned char *data, uint16_t wLength, unsigned int timeout);

/* 示例代碼 */
unsigned char data = (1< < 1); /* 點亮Caps Lock */
uint16_t wValue = (0x02< < 8)|0; // 0x02: 發給設備, 0: report ID
uint16_t wIndex = 0; // 一般是0, the interface number of the USB keyboard
libusb_control_transfer(dev_handle, 0x21, 0x09, wValue, wIndex, &data, 1, timeout);

1.2.3

鼠標

通過中斷傳輸可以讀到鼠標數據,它是
8 字節的數據,格式如下:

偏移大小描述
01字節
11字節按鍵狀態
22字節X
位移
42字節Y
位移
61字節或2字節滾輪

按鍵狀態里,每一位對應鼠標的一個按鍵,等
1 時表示對應按鍵被點擊了,格式如下:

長度描述
01鼠標的左鍵
11鼠標的右鍵
21鼠標的中間鍵
35保留,設備自己定義bit3:
鼠標的側邊按鍵bit4:

X
位移、Y 位移都是 8 位的有符號數。對于 X 位移,負數表示鼠標向左移動,正數表示鼠標向右移動,移動的幅度就使用這個 8 位數據表示。對于 Y
位移,負數表示鼠標向上移動,正數表示鼠標向下移動,移動的幅度就使用這個 8 位數據表示。

1.2.4 掃描碼

USB 規范里為每個按鍵定義了 16 位的按鍵值,注意:它是 16 位的,但是 USB 鍵盤只使用 8
位表示按鍵值。所以有些按鍵需要通過"Modifier keys status"來確定。比如"Left Ctrl"的按鍵值是 224,這無法通過 8
位數據來表示,在 USB 鍵盤上報的數據里,使用第 0 字節的 bit4 來表示。

圖片

libusb
有同步接口和異步接口,異步接口可以同時支持多個鼠標使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8600

    瀏覽量

    151166
  • usb
    usb
    +關注

    關注

    60

    文章

    7945

    瀏覽量

    264687
  • HID
    HID
    +關注

    關注

    2

    文章

    130

    瀏覽量

    46612
收藏 人收藏

    評論

    相關推薦

    基于HID協議的USB人機交互設備的接口設計

      目前市場上USB設備的種類繁多,但是這些設備會有一些共同的特性,根據這些特性可以把USB設備劃分為不同的類,如顯示設備、通信設備、音頻設備、大容量存儲設備、人機
    發表于 09-12 10:09 ?2545次閱讀
    基于<b class='flag-5'>HID</b><b class='flag-5'>協議</b>的USB人機交互設備的接口設計

    請問檢測模擬量后如何用HID協議傳給上位機?

    檢測模擬量后如何用HID協議傳給上位機?
    發表于 03-26 06:54

    STM32F107移植了USB-HID實現鍵盤功能,BIOS下不識別怎么解決?

    STM32F107移植了官方的USB-HID協議,實現鍵盤功能,BIOS下不識別,有什么可以解決的辦法嗎?
    發表于 04-15 07:14

    基于 I2C 的人機接口設備 (HID) 協議鍵盤實現,適用于 Windows 8

    `描述該參考設計是經過驗證的鍵盤掃描儀或控制器。這個 128 鍵位掃描器件專門針對操作系統為 Windows 8 的終端設備。該器件完全符合 Microsoft 規定的 HID Over I2C
    發表于 04-15 10:43

    想做CC2640控制藍牙外設,求資源

    打算用CC2640做一個 主HID 來控制藍牙外設,同時也要做為從HID與手機連接。想咨詢一下CC2640的資源,如Flash夠不夠用啊?聽說HID協議棧不小的,有七八十K。另外,C
    發表于 03-25 14:26

    采用HID協議實現工控自定義鍵盤接口設計

    USB連接、斷開操作)、u***_istr.c(直接處理USB中斷)、u***_prop.c(用于上層協議處理,比如HID協議,大容量存儲設備協議)、u***_desc.c(具體設備的
    發表于 06-20 05:00

    是否可以在用戶PC應用程序中使用PIKIT 3作為SPI主端口或UART?

    PICkit串行分析器,但我想實現后者的一些功能。也許有一些關于PICkit 3 HID協議的信息?我可以自己編寫電腦應用程序。
    發表于 10-15 15:57

    請問單片機只有串口怎么才能使用HID協議?

    單片機只有串口,希望使用HID協議使用鼠標做到絕對坐標定位.求詳細一點的解答~~感激不盡啊
    發表于 03-13 09:00

    基于潤和Neptune開發板的鍵盤藍牙模塊DIY指南資料

    項目簡介這個項目適合:有線u***鍵盤升級藍牙鍵盤,改造后鍵盤有線/藍牙模式只能二選一。支持BLE 4.2協議,可向下兼容舊BLE版本,如: BLE 4.0。支持HID協議(Human Interface Device),理論上
    發表于 04-30 17:02

    怎么改多媒體鍵盤的鍵值和按鍵排布順序?

    \EVT\EXAM\BLE\HID_Keyboard\Project怎么改多媒體鍵盤的鍵值和按鍵排布順序有沒有什么軟件可以生成HID的描述符摳藍牙HID協議真的是很費勁
    發表于 09-05 07:57

    新唐的BSP包是用來干什么用的?

    新唐的BSP包是用來干什么用的?小白一個。。。畢設要做NANO120的HID協議
    發表于 08-25 07:02

    Universal Serial Bus (USB)HID

    Universal Serial Bus (USB)HID協議手冊 THIS SPECIFICATION IS PROVIDED
    發表于 03-12 09:27 ?154次下載

    USB HID協議學習入門

    USB HID 類是比較大的一個類,HID 類設備屬于人機交互操作的設備。用于控制計算機操作的一些方面,如USB 鼠標,USB 鍵盤,USB 游戲操縱桿,USB 觸摸板,USB 軌跡球、電話撥號設備、VCR 遙
    發表于 11-15 14:39 ?315次下載

    基于HID協議的工控自定義鍵盤接口設計

    發表于 08-24 18:36 ?16次下載

    基于 I2C 的人機接口設備 (HID協議鍵盤實現

    發表于 09-22 19:30 ?43次下載
    主站蜘蛛池模板: 在线观看免费av网| 在线资源天堂| 亚洲成人在线免费| 久久综合久久精品| 天天摸天天躁天天添天天爽| 色五丁香| 色综合久久中文字幕网| bt天堂资源在线官网bt| 性xxxx欧美| 天天爱天天色| 波多野结衣在线网站| 在线观看视频免费入口| 婷婷影院在线综合免费视频| 沟沟人体一区二区| 5555kkkk香蕉在线观看| 天堂资源在线观看| 一级做a免费视频| 中文字幕色婷婷在线精品中| 日韩毛片免费看| 色哟永久免费| 最好看免费中文字幕2018视频| 毛片免费网| 精品亚洲综合在线第一区| 亚洲婷婷影院| a级精品九九九大片免费看| 爆操欧美| 毛片毛片毛片毛片毛片毛片| 免费不卡毛片| 性日韩精品| 午夜小网站| 美日韩毛片| 国产成人精品日本亚洲语言 | 李老汉和小花的性生生活| 女人张腿让男子桶免费动态图| 免费人成网站线观看合集| 亚洲爱爱网| 天天想夜夜操| 亚洲欧美日韩动漫| 偷自在线| 亚洲a级毛片| 天天干天天拍|