色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    8575

    瀏覽量

    151015
  • usb
    usb
    +關注

    關注

    60

    文章

    7936

    瀏覽量

    264475
  • HID
    HID
    +關注

    關注

    2

    文章

    130

    瀏覽量

    46606
收藏 人收藏

    評論

    相關推薦

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

      目前市場上USB設備的種類繁多,但是這些設備會有一些共同的特性,根據這些特性可以把USB設備劃分為不同的類,如顯示設備、通信設備、音頻設備、大容量存儲設備、人機
    發表于 09-12 10:09 ?2539次閱讀
    基于<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次下載
    主站蜘蛛池模板: 快播苍井空| 99视频一区| 欧美一区二区三区男同| 成激人情在线影院920| 桃花免费高清在线观看| 精品 在线 视频 亚洲| 97精品国产高清在线看入口| 青青伊人影院| 国产亚洲精品久久久999密臂| 真实国产乱子伦精品一区二区三区 | 激情床戏揉胸吃胸视频| 91福利国产在线观看网站| 日本十八禁无遮无挡漫画| 国产在线观看黄| 97视频久久| 天堂色| 久久久精品国产免费A片胖妇女| black大战chinese周晓琳| 午夜片神马影院福利| 久久久久久免费高清电影| Y8848高清私人影院软件优势| 性色AV一区二区三区咪爱四虎| 老师扒开尿口男生摸尿口| 俄罗斯人与动ZOZ0| 一本色道久久综合亚洲精品| 秋霞电影网午夜鲁丝片无码| 果冻传媒在线观看网站| china年轻小帅脸直播飞机| 亚洲AV色香蕉一区二区9255| 免费无码国产欧美久久18| 国产精品自产拍在线观看网站| 2017欧美狠狠色| 乌克兰少妇大胆大BBW| 沦为公交两奶头春药高潮迭起| 国产成人免费视频| 18禁无遮遮挡羞漫画免费阅读 | 永久免费的污视频网站| 日韩美一区二区| 久久毛片基地| 国产精品成人啪精品视频免费观看 | 最近中文字幕完整版免费高清 |