1. 程式人生 > >自定義USB-HID裝置_筆記

自定義USB-HID裝置_筆記

參考圈圈教程:

在USB鍵盤的描述符基礎上做如下修改:

1、Device Descriptor :修改PID/VID ;

2、Configuration Descriptor :修改 Interface Descriptor中的 bInterfaceSubClass 欄位和bInterfaceProtocol欄位改為 0 ;(自定義HID不使用子類和協議)

3、HID Report Descriptor :

  • 應用集合的用途改為0x00(undefined)
  • 修改報告描述符格式
//USB報告描述符的定義
code uint8 ReportDescriptor[]=
{
 //每行開始的第一位元組為該條目的字首,字首的格式為:
 //D7~D4:bTag。D3~D2:bType;D1~D0:bSize。以下分別對每個條目註釋。
 
 //這是一個全域性(bType為1)條目,將用途頁選擇為普通桌面Generic Desktop Page。
 //後面跟1位元組資料(bSize為1),後面的位元組數就不註釋了,自己根據bSize來判斷。
 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
 
 //這是一個區域性(bType為2)條目,用途選擇為0x00。在普通桌面頁中,
 //該用途是未定義的,如果使用該用途來開集合,那麼系統將不會把它
 //當作標準系統裝置,從而就成了一個使用者自定義的HID裝置。
 0x09, 0x00, // USAGE (0)
 
 //這是一個主條目(bType為0)條目,開集合,後面跟的資料0x01表示
 //該集合是一個應用集合。它的性質在前面由用途頁和用途定義為
 //使用者自定義。
 0xa1, 0x01, // COLLECTION (Application)

 //這是一個全域性條目,說明邏輯值最小值為0。
 0x15, 0x00, //     LOGICAL_MINIMUM (0)
 
 //這是一個全域性條目,說明邏輯值最大為255。
 0x25, 0xff, //     LOGICAL_MAXIMUM (255)
 
 //這是一個區域性條目,說明用途的最小值為1。
 0x19, 0x01, //     USAGE_MINIMUM (1)
 
 //這是一個區域性條目,說明用途的最大值8。
 0x29, 0x08, //     USAGE_MAXIMUM (8) 
 
 //這是一個全域性條目,說明資料域的數量為八個。
 0x95, 0x08, //     REPORT_COUNT (8)
 
 //這是一個全域性條目,說明每個資料域的長度為8bit,即1位元組。
 0x75, 0x08, //     REPORT_SIZE (8)
 
 //這是一個主條目,說明有8個長度為8bit的資料域做為輸入。
 0x81, 0x02, //     INPUT (Data,Var,Abs)
 
 //這是一個區域性條目,說明用途的最小值為1。
 0x19, 0x01, //     USAGE_MINIMUM (1)
 
 //這是一個區域性條目,說明用途的最大值8。
 0x29, 0x08, //     USAGE_MAXIMUM (8) 
 
 //這是一個主條目。定義輸出資料(8位元組,注意前面的全域性條目)。
 0x91, 0x02, //   OUTPUT (Data,Var,Abs)
 
 //下面這個主條目用來關閉前面的集合。bSize為0,所以後面沒資料。
 0xc0        // END_COLLECTION
};
//通過上面的報告描述符的定義,我們知道返回的輸入報告具有8位元組。
//輸出報告也有8位元組。至於這8位元組的資料是幹什麼用的,就要由使用者
//自己來決定了。像我們這個實驗,輸入報告的第一位元組用來描述8個按鍵
//的狀態,第二到第五位元組返回返回報告的次數(增加一個長整型的變數Count,
//每傳送一次報告就加1)。而輸出報告的第一位元組則用來控制板上8個LED
//的狀態,第二位元組(非0時)用來清除上面的報告計數器Count。


相關推薦

定義USB-HID裝置_筆記

參考圈圈教程: 在USB鍵盤的描述符基礎上做如下修改: 1、Device Descriptor :修改PID/VID ; 2、Configuration Descriptor :修改 Interface Descriptor中的 bInterfaceSubClass 欄位和

LINUX 定義USB Gadget HID 裝置

最近在搞自定義的Gadget hid裝置,核心版本:LINUX3.15       使用開發板:ATMEL SAMA5D3  編譯環境:Ubuntu 12.04 首先配置核心,進入Device driver 選單  [*] USB suppo

[轉]C++ MFC介面讀寫USB HID裝置資料程式

C++ MFC介面讀寫USB HID裝置資料程式跟大家分享一個最近開發的,用來測試USB HID裝置的通用程式,程式還有很多可以繼續優化的地方,比如說interupt的週期,讀取位元組的多少等。我遇到的問題是:開發一個簡單易用的介面,用來對USB HID裝置(比如說遊戲手柄,控制面板等)讀寫資料,一

Android USB Host與USB Hid裝置的通訊(印表機和android通訊,通過USB

記事:android和印表機通過網路通訊(網路印表機),有空也要記錄一下 堆疊關係也要記錄一下(通常我們所說的堆疊都是指棧,比如一個方法被呼叫的時候,我們就會把相關變數壓棧(巢狀才會壓棧,一個方法呼叫完是要出棧的),除非遞迴,一般情況下,棧是不會溢位的) 近期一直在做Android USB

提高USB HID裝置速率的方法——基於C8051F380

       專案採用C8051F380的USB2.0介面實現HID裝置(配置為Game Controller)。利用端點1傳送資料,每包12個位元組。經測試,即使裝置什麼也不做,僅在main函式的while(1)迴圈中持續傳送資料,最快資料也僅達到5ms

dev定義排序,CustomColumnSort--------------------學習筆記

一般的控制元件或者元件都支援按照某一列進行排序。但是,這種排序是根據資料來源裡的資料預設按照降序或升序排序的,同時這樣的排序與欄位的型別有關。 假設現在欄位的型別是字串型別 ,但是,儲存的資料時數字加一些特殊的符號例如:20/1 ,1/5,1/30,0/2等等的資料。這

USB-HID裝置協議解讀

   參考文獻:Device Class Definition for Human Interface Devices(HID) 用於描述HID功能特徵的有三個值:Class   SubClass   Interfaces Subclass Code Descriptio

iOS網易雲信 定義訊息的坑_未知型別訊息

OK 先閱讀官方文件。。。在gitHub裡面。。https://github.com/netease-im/NIM_iOS_UIKit/blob/master/Documents/nim_custom_message.md  文件有點坑。。很多細節沒提 直接未知型別訊息錯誤

利用Velocity自動生成定義程式碼_java版_原始碼下載

Velocity很多企業都要求要會,其實也不難,重要的是練過啊,實踐出真知。對於有多年開發經驗的人而言其實是比較簡單的,但是卻有可能在實際開發中從來沒用過,我就是其中之一。此篇部落格借鑑程式設計師的Velocity經驗來加以學習。 專案結構: 執行效果:你可能會看到專案

USB HID裝置資料的讀取

USB裝置(HID) Android下獲取HID資料的方式: 1.通過讀取/dev/hidrawX裝置節點 看名字就知道意思了(這個需要在編譯的時候開啟) 2.如果是標準HID裝置,還可以通過/dev/input裡的裝置節點讀取 方式一.通過input/even

STM32 定義HID USB裝置的實現

最近需要使用STM32開發一個裝置通過HID協議與主機通訊,於是開始學習USB,發現USB這個體系實在太龐大了,直接看USB的例程根本看不懂,完全找不到突破口,最後在網上找到一本不錯的書《圈圈教你玩USB》,這本書能夠很好地帶你入門。列舉過程,請求,令牌,資料包,端點,描述符,這些知識都講的很清

USB定義HID裝置實現-STM32

該文件使用USB韌體庫,在其基礎上進行了自己的定製,完成了一個USB-HID裝置,首先是usb_desc.c檔案,裡面存放了usb各種描述符的存在 #include "usb_desc.h" //usb標準裝置描述符 const u8 DinkUsbDeviceDe

STM32配置CH375B成HID Host模式讀取定義HID裝置的資料 ——STM32埠初始化

  最近產品需要一個USB主機測試治具,所以需要做一個USB HOST去讀取HID裝置的資料,由於以前也沒做過USB方面的專案,對這一塊也不是很熟悉,因此遇到了很多困難,所幸的是經過兩天半的努力,最終完成了CH375B的除錯。不多廢話,先上一張我除錯的MCU管腳分配圖  標頭

基於stm32的定義HID裝置開發與上位機通訊實現(附原始碼)

現在主流的安卓手機資料連線線,Mini-usb、Micro-usb,Type-c,產品追隨主流,非聯網裝置,摒棄ST-LINK、JLINK,直接用usb資料傳輸升級。主要實現與HID裝置的通訊即人機互動。本文主要介紹了HID裝置的下位機通訊連線與上位機裝置識別。 下位機:

angularJS1筆記-(10)-定義指令(templateUrl屬性)

clas angular ima 追加 set provider black text rep index.html: <!DOCTYPE html> <html lang="en"> <head> <meta chars

python學習筆記5-定義函數

函數調用 筆記 取值 修改 args pytho class 名稱 func 1 自定義函數   (1)函數代碼塊以def關鍵字開頭,然後函數標識符名稱和圓括號   (2)任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用於定義參數   (3)函數的第一行語句可以選擇

MySQL學習筆記-定義函數

自定義函數 signed mysql pwm begin 多個 2個 list ive MySQL學習筆記-自定義函數 1.自定義函數簡介 自定義函數:用戶自定義函數(user-defined function,UDF)是一種對MySQL擴展的途徑,其用法與內置函數相同

微信開發筆記-調用定義分享接口

彈出菜單 菜單 開發筆記 n-1 onf target ready 模式 時間戳 文章來自:http://www.cnblogs.com/ysyn/archive/2015/07/23/4665897.html 引言:   工作中開發微信網站,簡稱微網站。由於微

學習筆記19_定義錯誤頁

默認 errors acc .html 調試 error redirect nbsp edi 在WebConfig中,可以配置當服務器發生哪些錯誤時,能跳轉到那個頁面: <customErrors mode ="On" defaultRedirect = " defa

轉:C#制作ORM映射學習筆記定義Attribute類

技術 sage 其中 username pac ont 學習 collect reat 之前在做unity項目時發現只能用odbc連接數據庫,感覺非常的麻煩,因為之前做web開發的時候用慣了ORM映射,所以我想在unity中也用一下ORM(雖然我知道出於性能的考慮這樣做事不