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,即可解决。终于成功了。