1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > (USB HID) Report Descriptor 理解

(USB HID) Report Descriptor 理解

时间:2023-08-02 03:56:23

相关推荐

(USB HID) Report Descriptor 理解

在這理整理一下基本Report Descriptor對於入門基礎的了解。

在很多文件、Blog都有提到HID report總共分為3種:Input、Output、Feature reports。

在這些In/Out方向提的是Host的方向(PC),則 Feature是雙向傳輸的。

USB的網站找得到一隻小工具主要是幫忙編輯USB HID Report Descriptor用的

如果少了這隻Tool,做為一個USB HID開發的工程師就必須去HID Usage Tables查表填對應的代碼

寫 report descriptor,這是一件很累的事情所以有了他可以減少很多查表的時間

上圖是我一邊理解一邊編輯的report,利用tool另存一個Report descriptor head file,內容如下 :

1 0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1) 2 0x09, 0x01,// USAGE (Vendor Usage 1) 3 0xa1, 0x01,// COLLECTION (Application) 4 0x15, 0x00,// LOGICAL_MINIMUM (0) 5 0x26, 0x00, 0xff, // LOGICAL_MAXIMUM (255) 6 0x85, 0x01,// REPORT_ID (1) 7 0x75, 0x08,// REPORT_SIZE (8) 8 0x95, 0x3f,// REPORT_COUNT (63) 9 0x09, 0x01,// USAGE (Vendor Usage 1)10 0x91, 0x00,// OUTPUT (Data,Ary,Abs)11 0x85, 0x02,// REPORT_ID (2)12 0x75, 0x08,// REPORT_SIZE (8)13 0x95, 0x08,// REPORT_COUNT (8)14 0x09, 0x01,// USAGE (Vendor Usage 1)15 0x81, 0x00,// INPUT (Data,Ary,Abs)16 0xc0 // END_COLLECTION

這個report我僅定義了in/out report 但我的目的是可以做到雙向傳輸,所以實際使用上我還會加上一個Feature Report

理解整個組成,把想要的Report 定義宣告好最後在用一個USAGE_PAGE/USAGE/COLLECTION/COLLECTION_END包起來

USAGE_PAGE (Generic Desktop)USAGE (Keyboard)COLLECTION (Application)... 把我們已經寫好的東西放在這END_COLLECTION

LOGIC_MIN/LOGIC_MAX顧名思義就是Report接收的資料範圍

REPORT_SIZE我的理解,單位是bit

REPORT_COUNT單位是次數

所以對於這個Report描述,能做的事情是可以In/Out 8Bytes的功能

以下是我實驗時配置的Report Descripot

1 __ALIGN_BEGIN static uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] __ALIGN_END = 2 { 30x06, 0x00, 0xFF, // USAGE PAGE 40x09, 0x01,// USAGE (Vendor Usage 1) 50xa1, 0x01,// COLLECTION (Application) 6/* 7 */ 70x15, 0x00,// LOGICAL_MINIMUM (0) 80x25, 0xff,// LOGICAL_MAXIMUM (255) 90x75, 0x08,// REPORT_SIZE (8)10/* 13 */110x85, 0x01,// REPORT_ID (1). This defines input to STM32 (received from host)120x95, USB_HID_RECEIVE_FRAME_SIZE - 1, // REPORT_COUNT (63)130x09, 0x01,// USAGE (Vendor Usage 1)140x91, 0x02,// OUTPUT (Data,Var,Abs) (note: output from host)15/* 21 */160x85, 0x02,// REPORT_ID (2). This defines output from STM32 (sent to host)170x95, USB_HID_SEND_FRAME_SIZE-1, // REPORT_COUNT (63)180x09, 0x01,// USAGE (Vendor Usage 1)190x81, 0x02,// INPUT (Data,Var,Abs) (note: input to host)20/* 29 */210xc0 // END_COLLECTION22 }; /* CustomHID_ReportDescriptor */

參考資料:

猛哥的軌跡: 簡單講講USB

Device Class Definition for HID -

HID Usage Tables 1.12 -

Tutorial about USB HID Report Descriptor

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。