USB-HID调试过程分享(1)

2017-1-21

==================================================

采用网络上分享的描述符,设置相关配置信息如下:

const UINT8 C_abyUsbDeviceDescriptor[18] =   //USB设备描述符
{
    0x12,                       //bLength: 0x12 字节
    0x01,                       //bDescriptorType: 设备
    0x00, 0x02,                 //bcdUSB: version1.1----0101--》0200
    0x00,                       //bDeviceClass: 自定义接口
    0x00,                       //bDeviceSubClass: 子类0
    0x00,                       //bDeviceProtocol: 协议0
    0x40,                       //bMaxPacketSize0: 64字节
    0x98, 0x54,                 //idVendor:  厂商 ID        
    0x01, 0x00,                 //idProduct: 产品 ID 
    0x00, 0x03,                 //bcdDevice: 设备版本
    0x01,                       //iManufacturer: 字符串索引
    0x02,                       //iProduct: 字符串索引
    0x00,                       //iSerialNumber: 字符串索引       
    0x01,                       //bNumConfigurations:支持的配置数1       
};


 const UINT8 C_abyUsbBConfigurationDescriptor [] =  //USB配置描述符
{                             //USB配置描述符
    0x09,                         //bLength  
    0x02,                         //bDescriptor
    0x29, 0x00,                   //wTotalLength
    0x01,                         //bNumInterface
    0x01,                         //bConfiguration Value
    0x00,                         //iConfiguration
    0xa0,                         //bmAttributes
    0x32,                         //bMaxPower
                              //USB接口描述符
    0x09,                         //bLength: 
    0x04,                         //bDescriptorType
    0x00,                         //bInterfaceNumber
    0x00,                         //bAlternateSetting
    0x02,                         //bNumEndpoints
    0x03,                         //bInterfaceClass:
    0x00,                         //bInterfaceSubClass
    0x00,                         //bInterfaceProtocol
    0x00,                         //iInterface:        
                              //HID描述符
    0x09,                         //bLength: 
    0x21,                         //bDescriptorType:
    0x10,                         //BCDHID: 
    0x01,                         
    0x00,                         //bCountryCode: 
    0x01,                         //bNumDescriptor:
    0x22,                         //bDescriptorType:
    0x34,                         //WDescriptorLength: 
    0x00,                      
                               //USB接口描述符端点描述符
    0x07,                          //bLength: 
    0x05,                          //bDescriptorType:
    0x81,                          //EndpointAddress 
    0x03,                          //bmAttributes
    0x40,                          //wMaxPacketSize --04-->40
    0x00,                          
    0x0A,                          //bInterval---轮询周期
      
    0x07,                          //bLength: 
    0x05,                          //bDescriptorType: 
    0x02,                          //EndpointAddress
    0x03,                          //bmAttributes
    0x40,                          //wMaxPacketSize ---04->40                      
    0x00,                          
    0x0A,                          //bInterval---轮询周期
};
 
 const UINT8 C_abyUsbReportDescriptor[] =  //USB报告描述符
{                            
    0x06, 0xA0,0xFF,             //用法页(FFA0h, vendor defined)
    0x09, 0x01,                  //用法(vendor defined)
    0xA1, 0x01,                  //集合(Application)
    0x09, 0x02,                  //用法(vendor defined)
    0xA1, 0x00,                  //集合(Physical)
    0x06, 0xA1,0xFF,             //用法页(vendor defined)
                             //输入报告
    0x09, 0x03 ,                 //用法(vendor defined)
    0x09, 0x04,                  //用法(vendor defined)
    0x15, 0x80,                  //逻辑最小值(0x80 or -128)
    0x25, 0x7F,                  //逻辑最大值(0x7F or 127)
    0x35, 0x00,                  //物理最小值(0)
    0x45, 0xFF,                  //物理最大值(255)
    0x75, 0x08,                  //报告长度Report size (8位)---
    0x95, 0x40,                  //报告数值(64 fields))---

    0x81, 0x02,                  //输入(data, variable, absolute)
                             //输出报告
    0x09, 0x05,                  //用法(vendor defined)
    0x09, 0x06,                  //用法(vendor defined)
    0x15, 0x80,                  //逻辑最小值(0x80 or -128)
    0x25, 0x7F,                  //逻辑最大值(0x7F or 127)
    0x35, 0x00,                  //物理最小值(0)
    0x45, 0xFF,                  //物理最大值(255)
    0x75, 0x08,                  //报告长度(8位)
    0x95, 0x40,                  //报告数值(64 fields)

    0x91, 0x02,                  //输出(data, variable, absolute)
    0xC0,                    //集合结束(Physical)
    0xC0                     //集合结束(Application)           
};

目前主要的问题是,不能发送64Byte的数据,最多只能8字节。


2017-1-22

=======================================================================================

多方查找资料,得知,要修改发送的字节需要修改三个地方:端点描述符,报告描述符,还有端点暖冲区大小。

前两部分,之前都已经调整好,主要是端点缓冲区没有设置好。查询源代码发现,没有针对端点缓冲区设置,默认为0,最多8Byte,增加初始化为64Byte,即可解决。终于成功了。

USB-HID调试过程分享(1)_第1张图片




你可能感兴趣的:(USB,HID,C语言)