chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HID協(xié)議是什么意思

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:韋東山老師驅(qū)動(dòng)大 ? 2023-07-17 17:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

對(duì)于 USB 接口的 HID 設(shè)備,有一套協(xié)議。

1.1 描述符

HID 設(shè)備有如下描述符:

圖片

  • HID
    設(shè)備的"設(shè)備描述符"并無(wú)實(shí)際意義,沒(méi)有使用"設(shè)備描述符"來(lái)表示自己是 HID 設(shè)備。
  • HID
    設(shè)備只有一個(gè)配置,所以只有一個(gè)配置描述符
  • 接口描述符
    • bInterfaceClass
      為 3,表示它是 HID 設(shè)備
    • bInterfaceSubClass
      是 0 或 1,1 表示它支持"Boot Interface"(表示 PC 的 BIOS 能識(shí)別、使用它),0
      表示必須等操作系統(tǒng)啟動(dòng)后通過(guò)驅(qū)動(dòng)程序來(lái)使用它。
    • bInterfaceProtocol:0-None,
      1-鍵盤(pán), 2-鼠標(biāo)
  • 端點(diǎn)描述符:HID
    設(shè)備有一個(gè)控制端點(diǎn)、一個(gè)中斷端點(diǎn)

圖片

對(duì)于鼠標(biāo),HOST 可以通過(guò)中斷端點(diǎn)讀到數(shù)據(jù)。

1.2 數(shù)據(jù)格式

1.2.1 鍵盤(pán)

通過(guò)中斷傳輸可以讀到鍵盤(pán)數(shù)據(jù),它是 8 字節(jié)的數(shù)據(jù),格式如下:

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

第 0 個(gè)字節(jié)中每一位都表示一個(gè)按鍵的狀態(tài),某位等于 1
時(shí),表示對(duì)應(yīng)的按鍵被按下,格式如下:

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

讀到的鍵盤(pán)數(shù)據(jù)里有 6 個(gè)按鍵值,每個(gè)按鍵值都是 8 位的數(shù)據(jù)。如果某個(gè)按鍵值不等于
0,就表示某個(gè)按鍵被按下了。按鍵值跟按鍵的對(duì)應(yīng)關(guān)系,請(qǐng)看后面的《1.2.4 掃描碼》。

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

按下了"A",USB 鍵盤(pán)上報(bào)的數(shù)據(jù)為:

00 00 04 00 00 00 00 00

松開(kāi)"A",USB 鍵盤(pán)上報(bào)的數(shù)據(jù)為:

00 00 00 00 00 00 00 00

按下"A"、"B",USB 鍵盤(pán)上報(bào)的數(shù)據(jù)為:

00 00 04 05 00 00 00 00

保持"A"、"B"不松開(kāi),繼續(xù)按下"C",USB 鍵盤(pán)上報(bào)的數(shù)據(jù)為:

00 00 04 05 06 00 00 00

松開(kāi)"A",但是保持"B"、"C"不松開(kāi),USB 鍵盤(pán)上報(bào)的數(shù)據(jù)為:

00 00 05 06 00 00 00 00

USB
鍵盤(pán)上報(bào)的數(shù)據(jù)里,哪個(gè)按鍵先被按下,就先記錄它的按鍵值。在上面的例子里,"A"松開(kāi)后只有"B"、"C"這兩個(gè)按鍵,"B"、"C"的按鍵值挪到了前面。

按下"Left shift"、并且按下"X",USB 鍵盤(pán)上報(bào)的數(shù)據(jù)為:

02 00 1B 00 00 00 00 00

USB
鍵盤(pán)只能上報(bào) 6 個(gè)按鍵值,如果有超過(guò) 6 個(gè)按鍵被按下,那么它將上報(bào)"phantom condition"(6 個(gè)按鍵值都是
1),但是"Modifier keys status"還是有效的。比如"Right Shift"被按下,另外超過(guò) 6 個(gè)的按鍵也被按下時(shí),USB
鍵盤(pán)上報(bào)的數(shù)據(jù)為:

20 00 01 01 01 01 01 01

1.2.2 LED

我們還可控制鍵盤(pán)的 LED,需要發(fā)出一個(gè)控制傳輸請(qǐng)求:SetReport ,使用這個(gè)請(qǐng)求發(fā)送一個(gè)字節(jié)的數(shù)據(jù)。

這個(gè)字節(jié)的數(shù)據(jù)格式如下,某位為 1 時(shí),會(huì)點(diǎn)亮相應(yīng)的 LED:

長(zhǎng)度描述
01Num
Lock
11Caps
Lock
21Scroll
Lock
31Compose
41Kana
51保留,寫(xiě)為0

發(fā)出的 SetReport,是一個(gè)控制傳輸?shù)?setup packet",格式如下:

圖片

以 libusb 的函數(shù)描述它的參數(shù),如下:

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); /* 點(diǎn)亮Caps Lock */
uint16_t wValue = (0x02< < 8)|0; // 0x02: 發(fā)給設(shè)備, 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

鼠標(biāo)

通過(guò)中斷傳輸可以讀到鼠標(biāo)數(shù)據(jù),它是
8 字節(jié)的數(shù)據(jù),格式如下:

偏移大小描述
01字節(jié)
11字節(jié)按鍵狀態(tài)
22字節(jié)X
位移
42字節(jié)Y
位移
61字節(jié)或2字節(jié)滾輪

按鍵狀態(tài)里,每一位對(duì)應(yīng)鼠標(biāo)的一個(gè)按鍵,等
1 時(shí)表示對(duì)應(yīng)按鍵被點(diǎn)擊了,格式如下:

長(zhǎng)度描述
01鼠標(biāo)的左鍵
11鼠標(biāo)的右鍵
21鼠標(biāo)的中間鍵
35保留,設(shè)備自己定義bit3:
鼠標(biāo)的側(cè)邊按鍵bit4:

X
位移、Y 位移都是 8 位的有符號(hào)數(shù)。對(duì)于 X 位移,負(fù)數(shù)表示鼠標(biāo)向左移動(dòng),正數(shù)表示鼠標(biāo)向右移動(dòng),移動(dòng)的幅度就使用這個(gè) 8 位數(shù)據(jù)表示。對(duì)于 Y
位移,負(fù)數(shù)表示鼠標(biāo)向上移動(dòng),正數(shù)表示鼠標(biāo)向下移動(dòng),移動(dòng)的幅度就使用這個(gè) 8 位數(shù)據(jù)表示。

1.2.4 掃描碼

USB 規(guī)范里為每個(gè)按鍵定義了 16 位的按鍵值,注意:它是 16 位的,但是 USB 鍵盤(pán)只使用 8
位表示按鍵值。所以有些按鍵需要通過(guò)"Modifier keys status"來(lái)確定。比如"Left Ctrl"的按鍵值是 224,這無(wú)法通過(guò) 8
位數(shù)據(jù)來(lái)表示,在 USB 鍵盤(pán)上報(bào)的數(shù)據(jù)里,使用第 0 字節(jié)的 bit4 來(lái)表示。

圖片

libusb
有同步接口和異步接口,異步接口可以同時(shí)支持多個(gè)鼠標(biāo)使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9257

    瀏覽量

    155399
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8319

    瀏覽量

    278963
  • HID
    HID
    +關(guān)注

    關(guān)注

    2

    文章

    136

    瀏覽量

    48275
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于HID協(xié)議的USB人機(jī)交互設(shè)備的接口設(shè)計(jì)

      目前市場(chǎng)上USB設(shè)備的種類(lèi)繁多,但是這些設(shè)備會(huì)有一些共同的特性,根據(jù)這些特性可以把USB設(shè)備劃分為不同的類(lèi),如顯示設(shè)備、通信設(shè)備、音頻設(shè)備、大容量存儲(chǔ)設(shè)備、人機(jī)
    發(fā)表于 09-12 10:09 ?2823次閱讀
    基于<b class='flag-5'>HID</b><b class='flag-5'>協(xié)議</b>的USB人機(jī)交互設(shè)備的接口設(shè)計(jì)

    請(qǐng)問(wèn)檢測(cè)模擬量后如何用HID協(xié)議傳給上位機(jī)?

    檢測(cè)模擬量后如何用HID協(xié)議傳給上位機(jī)?
    發(fā)表于 03-26 06:54

    STM32F107移植了USB-HID實(shí)現(xiàn)鍵盤(pán)功能,BIOS下不識(shí)別怎么解決?

    STM32F107移植了官方的USB-HID協(xié)議,實(shí)現(xiàn)鍵盤(pán)功能,BIOS下不識(shí)別,有什么可以解決的辦法嗎?
    發(fā)表于 04-15 07:14

    基于 I2C 的人機(jī)接口設(shè)備 (HID) 協(xié)議鍵盤(pán)實(shí)現(xiàn),適用于 Windows 8

    `描述該參考設(shè)計(jì)是經(jīng)過(guò)驗(yàn)證的鍵盤(pán)掃描儀或控制器。這個(gè) 128 鍵位掃描器件專(zhuān)門(mén)針對(duì)操作系統(tǒng)為 Windows 8 的終端設(shè)備。該器件完全符合 Microsoft 規(guī)定的 HID Over I2C
    發(fā)表于 04-15 10:43

    想做CC2640控制藍(lán)牙外設(shè),求資源

    打算用CC2640做一個(gè) 主HID 來(lái)控制藍(lán)牙外設(shè),同時(shí)也要做為從HID與手機(jī)連接。想咨詢(xún)一下CC2640的資源,如Flash夠不夠用???聽(tīng)說(shuō)HID協(xié)議棧不小的,有七八十K。另外,C
    發(fā)表于 03-25 14:26

    采用HID協(xié)議實(shí)現(xiàn)工控自定義鍵盤(pán)接口設(shè)計(jì)

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

    是否可以在用戶(hù)PC應(yīng)用程序中使用PIKIT 3作為SPI主端口或UART?

    PICkit串行分析器,但我想實(shí)現(xiàn)后者的一些功能。也許有一些關(guān)于PICkit 3 HID協(xié)議的信息?我可以自己編寫(xiě)電腦應(yīng)用程序。
    發(fā)表于 10-15 15:57

    請(qǐng)問(wèn)單片機(jī)只有串口怎么才能使用HID協(xié)議?

    單片機(jī)只有串口,希望使用HID協(xié)議使用鼠標(biāo)做到絕對(duì)坐標(biāo)定位.求詳細(xì)一點(diǎn)的解答~~感激不盡啊
    發(fā)表于 03-13 09:00

    基于潤(rùn)和Neptune開(kāi)發(fā)板的鍵盤(pán)藍(lán)牙模塊DIY指南資料

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

    怎么改多媒體鍵盤(pán)的鍵值和按鍵排布順序?

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

    新唐的BSP包是用來(lái)干什么用的?

    新唐的BSP包是用來(lái)干什么用的?小白一個(gè)。。。畢設(shè)要做NANO120的HID協(xié)議
    發(fā)表于 08-25 07:02

    Universal Serial Bus (USB)HID協(xié)

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

    USB HID協(xié)議學(xué)習(xí)入門(mén)

    USB HID 類(lèi)是比較大的一個(gè)類(lèi),HID 類(lèi)設(shè)備屬于人機(jī)交互操作的設(shè)備。用于控制計(jì)算機(jī)操作的一些方面,如USB 鼠標(biāo),USB 鍵盤(pán),USB 游戲操縱桿,USB 觸摸板,USB 軌跡球、電話撥號(hào)設(shè)備、VCR 遙
    發(fā)表于 11-15 14:39 ?315次下載

    基于HID協(xié)議的工控自定義鍵盤(pán)接口設(shè)計(jì)

    發(fā)表于 08-24 18:36 ?16次下載

    基于 I2C 的人機(jī)接口設(shè)備 (HID協(xié)議鍵盤(pán)實(shí)現(xiàn)

    發(fā)表于 09-22 19:30 ?43次下載