真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

HID類的JoyStick描述符

應(yīng)用程序改自沁恒官網(wǎng)的CH583EVT包中的CompoundDev工程,配合下方的描述符能夠?qū)崿F(xiàn)①直接接電腦,在設(shè)備管理器中能夠查到被電腦識(shí)別為HID- compliant game contorller;②在CH582m單片機(jī)中自定義了回包內(nèi)容,通過(guò)USB抓包工具可以抓到單片機(jī)模擬的JoyStick與電腦主機(jī)正常通信。筆者將把主要函數(shù)貼在另一篇隨筆中。

十余年的三都網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整三都建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“三都網(wǎng)站設(shè)計(jì)”,“三都網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

設(shè)備、接口、類、端點(diǎn)描述符都是照貓畫虎改的,每行的注釋摘自《USB設(shè)計(jì)及應(yīng)用設(shè)計(jì)》一書。HID報(bào)表描述符是根據(jù)HID1.12規(guī)范寫的,JoyStick的報(bào)表描述符搬用了HID1.12手冊(cè)的例子,報(bào)表格式如下。

在電腦設(shè)備管理器中識(shí)別的類型↓

USB抓包↓(數(shù)值是隨便寫的,一般按鍵松開后,需要把對(duì)應(yīng)位置改成0x00再上傳一包)

JoyStick設(shè)備長(zhǎng)這樣↓

/*前綴:b:8位字節(jié)
* w:16位字
* bm:按位尋址
* i:索引
* id:標(biāo)識(shí)碼
* bcd:采用BCD碼編碼*/

const uint8_t MyDevDescr[] = {
  // 設(shè)備描述符↓
    0x12, //bLength 描述符的字節(jié)數(shù)長(zhǎng)度 標(biāo)準(zhǔn)為0x12
    0x01, //bDescriptorType 描述符的類型 0x01為設(shè)備描述符
    0x10, 0x01, //bcdUSB 設(shè)備支持的協(xié)議版本號(hào),0x0110表示為1.1
    0x00, //bDeviceClass 設(shè)備類代碼 0:每個(gè)接口指出它自己的類且各自獨(dú)立工作 FF:設(shè)備類由廠商定義
        //其他值表示設(shè)備在不同的接口上支持不同的類,接口之間可能不能獨(dú)立工作
    0x00, //bDeviceSubClass 設(shè)備子類代碼 根據(jù)手冊(cè)以及bDeviceClass的值而定,bDeviceClass為0,此值也要為0;若bDeviceClass為0xFF,此值保留
    0x00, //bDevicePortocol 協(xié)議碼 根據(jù)手冊(cè)以及bDeviceClass和bDeviceSubClass的值而定,上兩者為0,該值也要為0
    0x08, //bMaxPacketSize0 端點(diǎn)0的數(shù)據(jù)包的最大凈長(zhǎng)度
    0x00, 0x00, //idVendor 廠商ID
    0x00, 0x00, //idProduct 產(chǎn)品ID
    0x00, 0x00, //bcdDevice BCD設(shè)備發(fā)行號(hào)
    0x00, //iManufacturer 廠商信息字符串的索引
    0x00, //iProduct 產(chǎn)品信息字符串的索引
    0x00, //iSerialNumber 設(shè)備序列號(hào)字符串的索引
    0x01 //bNumConfigurations 可能的配置描述符數(shù)目 只有一種配置時(shí)此值為1
};

 

const uint8_t MyCfgDescr[] = {  
  // 配置描述符↓
    0x09, //bLength 描述符的字節(jié)數(shù)長(zhǎng)度 標(biāo)準(zhǔn)為0x09
    0x02, //bDescriptorType 描述符的類型 0x02為配置描述符
    0x22, 0x00, //wTotalLength 配置信息的總長(zhǎng)(包括配置、接口、端點(diǎn)、類和廠商描述符)
    0x01, //bNumInterfaces 該配置所支持的接口數(shù)目
    0x01, //bConfigurationValue 被SET_CONFIGURATION請(qǐng)求用作參數(shù)來(lái)選定
    0x00, //iConfiguration 該配置的字符串描述符索引值,在SET_CONFIGURATION中用作選定配置的參數(shù)
    0xA0, //bmAttributes D6:自供電 D5:遠(yuǎn)程喚醒 其他位保留。
        //若一個(gè)設(shè)備既能自供電又能使用總線供電,D6也要置1并在MaxPower指出需要從總線獲取的電量
    0x32, //MaxPower 該配置下的總線電源耗費(fèi)量,為兩倍此值(如0x32*2 = 100)mA
  //接口描述符↓
    0x09, //bLength 描述符的字節(jié)數(shù)長(zhǎng)度 標(biāo)準(zhǔn)為0x09
    0x04, //bDescriptorType 描述符的類型 0x04為接口描述符
    0x00, //bInterfaceNumber 接口號(hào),當(dāng)前配置支持的接口數(shù)組索引(從0開始)。
        //若該配置有倆接口,接下來(lái)的接口描述符此值就為1
    0x00, //bAlternateSetting 可選設(shè)置的索引值。一個(gè)接口可以有多個(gè)接口描述符,靠此字段區(qū)分
    0x01, //bNumEndpoints 此接口所包括的端點(diǎn)的個(gè)數(shù)。此值為1表示該接口只使用默認(rèn)端點(diǎn)0。
    0x03, //bInterfaceClass 接口所屬的類值。為0表示為將來(lái)的標(biāo)準(zhǔn)保留。為FF表示此接口類由廠商說(shuō)明。其他值查手冊(cè)。0x03為HID類
    0x00, //bInterfaceSublass 接口所屬子類的值。根據(jù)手冊(cè)以及bInterfaceClass的值來(lái)定,若上面的值為0,此值也要為0。
    0x00, //bInterfaceProtocol 協(xié)議碼,視手冊(cè)以及上兩者而定。上兩者為0,此值也要為0。
    0x00, //iInterface 此接口的字符串描述符的索引值。
  //HID類描述符↓
    0x09, //bLength 描述符的字節(jié)數(shù)長(zhǎng)度 標(biāo)準(zhǔn)為0x09
    0x21, //bDescriptorType 描述符的類型 0x21為人機(jī)接口類描述符
    0x12, 0x01, //bcdHID HID規(guī)范版本號(hào)的BCD碼,此描述符所用版本為1.12
    0x00, //bCountryCode 硬件目的國(guó)家的識(shí)別號(hào)碼。不啟用此功能則為0
    0x01, //bNumDescriptors 支持的附屬描述符數(shù)目。最小值為1:HID類至少有個(gè)報(bào)表描述符
    0x22, //bDescriptorType 類別描述符的類型。只有報(bào)表描述符為0x22;還有個(gè)實(shí)體描述符則為0x23
    0x4e, 0x00, //wDescriptorLength 報(bào)表描述符總長(zhǎng)度
  //端點(diǎn)描述符↓
    0x07, //bLength 描述符的字節(jié)數(shù)長(zhǎng)度 標(biāo)準(zhǔn)為0x07
    0x05, //bDescriptorType 描述符的類型 0x05為端點(diǎn)描述符
    0x81, //bmEndpointAddress 低四位為端點(diǎn)號(hào),最高位為0:OUT方向,為1:IN方向。其他位保留。
    0x03, //bmAttributes 低兩位為 00:控制傳輸;01:實(shí)時(shí)傳輸;10:批量傳輸;11:中斷傳輸。其他位保留
    0x08, 0x00, //bMaxPacketSize 端點(diǎn)收發(fā)的數(shù)據(jù)包最大凈長(zhǎng)度
    0x0a, //bInterval 周期數(shù)據(jù)傳輸端點(diǎn)的時(shí)間間隙。對(duì)于批量和控制傳輸來(lái)說(shuō)無(wú)意義
      //若該端點(diǎn)配置實(shí)時(shí)傳輸,此值必須為1(ms);若該端點(diǎn)配置中斷傳輸,此值為1~255(ms)
};

 

//JoyStick報(bào)表描述符↓,大多數(shù)是查手冊(cè)得到的數(shù)值。每行為一個(gè)short item。每個(gè)item的第一個(gè)字節(jié)的低兩位表示這個(gè)字節(jié)后面還有多少字節(jié)的數(shù)據(jù)

const uint8_t JoyStickRepDesc[] = {    //模擬操縱飛機(jī)的一種搖桿手柄
    0x05, 0x01, //UsagePage(Generic Desktop) UsagePage定義數(shù)據(jù)的用法或功能
    0x09, 0x04, //Usage(Joystick) Usage描述項(xiàng)目或collection的使用的索引
    0xA1, 0x01, //Collection(Application) 包含有共同用途或者執(zhí)行單一功能的項(xiàng)目。該項(xiàng)目可能指代節(jié)流閥、X方向和Y方向的指針,一起用來(lái)控制飛機(jī)的移動(dòng)
      0x05, 0x02, //UsagePage(Simulation Controls)  模擬輸出的控制器
      0x09, 0xBB, //Usage (Throttle)  節(jié)流閥,類似于飛機(jī)的油門
      0x15, 0x81, //Logical Minimum (-127) 報(bào)表項(xiàng)目的最小數(shù)值
      0x25, 0x7F, //Logical Maximum (127) 報(bào)表項(xiàng)目的最大數(shù)值
      0x75, 0x08, //Report Size (8) 項(xiàng)目字段的大小  每個(gè)回傳的數(shù)據(jù)為8位
      0x95, 0x01, //Report Count (1) 項(xiàng)目的數(shù)據(jù)域位的數(shù)目  回傳一個(gè)數(shù)據(jù)
      0x81, 0x02, //Input (Data, Variable, Absolute)  0x02的各位含義詳見(jiàn)卷標(biāo)

      0x05, 0x01, //UsagePage(Generic Desktop)  通用桌面設(shè)備
      0x09, 0x01, //Usage (Pointer)  指針,控制飛機(jī)的上下左右方向(鼠標(biāo)也是一種Pointer)
      0xA1, 0x00, //Collection (Physical) 包含代表數(shù)據(jù)在一個(gè)單一幾何上的項(xiàng)目
        0x09, 0x30, //Usage (X)  X方向
        0x09, 0x31, //Usage (Y)  Y方向
        0x95, 0x02, //Report Count (2) ?。╔和Y方向)回傳2個(gè)數(shù)據(jù)。協(xié)議手冊(cè)的例子中并沒(méi)有列ReportSize,該值沿用上一個(gè)ReportSize的值即8位
        0x81, 0x02, //Input (Data, Variable, Absolute)  0x02的各位含義詳見(jiàn)卷標(biāo)
      0xC0, //End Collection 關(guān)閉集合

      0x09, 0x39, //Usage (Hat switch)  苦力帽,在游戲中用于控制飛機(jī)的視野。根據(jù)下面的數(shù)值,可能這是個(gè)4向苦力帽。
      0x15, 0x00, //Logical Minimum (0) 報(bào)表項(xiàng)目的最小數(shù)值
      0x25, 0x03, //Logical Maximum (3) 報(bào)表項(xiàng)目的最大數(shù)值
      0x35, 0x00, //Physical Minimum (0) 以實(shí)際單位表示的邏輯小數(shù)值
      0x46, 0x0E, 0x01, //Physical Maximum (270) 以實(shí)際單位表示的邏輯大數(shù)值
        //將0~270這些數(shù)值分到0~3這些數(shù)據(jù)中,相當(dāng)于每一個(gè)報(bào)表數(shù)值代表了67.75個(gè)實(shí)際單位
      0x65, 0x04, //Unit (English Rotation: Angular Position) 表示單位。詳見(jiàn)表格,本設(shè)備單位為英制、角度
        //本設(shè)備只用到第0個(gè)半字節(jié),故只需要1字節(jié)數(shù)據(jù)即可表示單位。0x65后面最多可達(dá)4個(gè)字節(jié)的數(shù)據(jù),即8個(gè)半字節(jié)來(lái)表示單位
      0x55, 0x00, //Unit Exponent (0) 10的(0)次冪。詳見(jiàn)數(shù)值表,00h~到07h符號(hào)為正,08h~0Fh符號(hào)為負(fù)
      0x75, 0x04, //Report Size (4)  每個(gè)回傳的數(shù)據(jù)占4位
      0x95, 0x01, //Report Count (1)  回傳一個(gè)數(shù)據(jù)
      0x81, 0x42, //Input (Data, Variable, Absolute, Null State)  0x42的各位含義詳見(jiàn)卷標(biāo)

      0x05, 0x09, //Usage Page (Buttons)  按鍵
      0x19, 0x01, //Usage Minimum (Button 1)  定義1~4號(hào)四個(gè)按鍵
      0x29, 0x04, //Usage Maximum (Button 4)
      0x15, 0x00, //Logical Minimum (0) 報(bào)表項(xiàng)目的最小數(shù)值
      0x25, 0x01, //Logical Maximum (1) 報(bào)表項(xiàng)目的最大數(shù)值
      0x35, 0x00, //Physical Minimum (0) 以實(shí)際單位表示的邏輯小數(shù)值
      0x45, 0x01, //Physical Maximum (1) 以實(shí)際單位表示的邏輯大數(shù)值
      0x95, 0x04, //Report Count (4)  回傳4個(gè)數(shù)據(jù)
      0x75, 0x01, //Report Size (1)  每個(gè)數(shù)據(jù)占1位
      0x64, //Unit (None)  無(wú)單位
      0x81, 0x02, //Input (Data, Variable, Absolute)
    0xC0 //End Collection
};

網(wǎng)站題目:HID類的JoyStick描述符
URL標(biāo)題:http://weahome.cn/article/dsoijhc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部