原创 圈圈教你玩USB--3.10 配置描述符集合的实现以及返回

2011-5-2 20:31 2292 11 11 分类: MCU/ 嵌入式

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条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条