attachment download 在这一节里,圈圈并没有把配置描述符的HID描述符说清楚,只是说它是一个类描述符,应该跟在接口描述符后面。那么这到底是什么意思,我们暂且先在这里打个问号?
usb配置描述符的定义:
code uint8 ConfigurationDescriptor[9+9+9+7]={
/*配置描述符*/
/*bLength*/0x09, /*bDescriptorType*/0x02,
/*wToTalLength*/sizeof(ConfigurationDescriptor)&0xFF,(sizeof(ConfigurationDescriptor)>>8)&0xFF,
/*bNumInterfaces*/0x01, /*bConfiguration*/0x01,
/*iConfiguration*/0x00, /*bmAttributes*/0x80,
/*bMaxPower*/0x32,
/*接口描述符*/
/*bLength*/0x09, /*bDescriptorType*/0x04,
/*bInterfaceNumber*/0x00, /*bAlternateSetting*/0x00,
/*bNumEndpoints*/0x01, /*bInterfaceClass*/0x03,
/*bInterfaceSubClass*/0x01, /*bInterfaceProtocol*/0x02,
/*iConfiguration*/0x00,
/*HID描述符*/
/*bLength*/0x09, /*bDescriptorType*/0x21,
/*bcdHID*/0x10,0x01, /*bCountryCode*/0x21,
/*bNumDescriptors*/0x01, /*bDescriptorType*/0x22,
/*bDescriptorLength*/sizeof(ReportDescriptor)&0xFF,(sizeof(ReportDescriptor)>>8)&0xFF,
/*端点描述符*/
/*bLength*/0x07, /*bDescriptorType*/0x05,
/*bEndpointAddress*/0x81, /*bmAttributes*/0x03,
/*bMaxPacketSize*/0x10,0x00, /*bInterval*/0x0A
};
其中包括配置描述符,接口描述符,HID描述符,端点描述符。
描述符的返回:
case CONFIGURATION_DESCRIPTOR:
Prints("配置描述符。\r\n");
pSendData=ConfigurationDescriptor;
SendLength=ConfigurationDescriptor[2]+(ConfigurationDescriptor[3]<<8);
if(wLength>SendLength){
if(SendLength%DeviceDescriptor[7]==0) NeedZeroPacket=1;
}
else SendLength=wLength;
Prints("wLength=");
UsbEp0SendData();
break;
文章评论(0条评论)
登录后参与讨论