2.配置描述符
//定义标准的配置描述符结构
typedef struct _CONFIGURATION_DESCRIPTOR_STRUCT
{
BYTE bLength;//配置描述符的字节数大小
BYTE bDescriptorType;//配置描述符类型编号
WORD wTotalLength;//此配置返回的所有数据大小
BYTE bNumInterfaces;//此配置所支持的接口数量
BYTE bConfigurationValue;//Set_Configuration命令所需要的参数值
BYTE iConfiguration;//描述该配置的字符串的索引值
BYTE bmAttributes;//供电模式的选择
BYTE MaxPower;//设备从总线提取的最大电流
}
CONFIGURATION_DESCRIPTOR_STRUCT, * pCONFIGURATION_DESCRIPTOR_STRUCT;
2.接口描述符
//定义标准的接口描述符结构
typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
BYTE bLength;//接口描述符的字节数大小
BYTE bDescriptorType;//接口描述符的类型编号
BYTE bInterfaceNumber;//该接口的编号
BYTE bAlternateSetting;//备用的接口描述符编号
BYTE bNumEndpoints;//该接口使用的端点数,不包括端点0
BYTE bInterfaceClass;//接口类型
BYTE bInterfaceSubClass;//接口子类型
BYTE bInterfaceProtocol;//接口遵循的协议
BYTE iInterface;//描述该接口的字符串索引值
}
INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;
4.端点描述符
//定义标准的端点描述符结构
typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
BYTE bLegth;//端点描述符字节数大小
BYTE bDescriptorType;//端点描述符类型编号
BYTE bEndpointAddress;//端点地址及输入输出属性
BYTE bmAttributes;//端点的传输类型属性
WORD wMaxPacketSize;//端点收、发的最大包大小
BYTE bInterval;//主机查询端点的时间间隔
}
ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;
下面是一个配置描述符集合的定义
typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
{
CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
INTERFACE_DESCRIPTOR_STRUCTinterface_descritor;
ENDPOINT_DESCRIPTOR_STRUCTendpoint_descriptor[ENDPOINT_NUMBER];
}CON_INT_ENDP_DESCRIPTOR_STRUCT;
配置描述符集合的示例
code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=//配置描述符集合
{
//configuration_descriptor//配置描述符
{
sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),//配置描述符的字节数大小,这里为9
CONFIGURATION_DESCRIPTOR,//配置描述符类型编号,配置描述符为2
(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+
sizeof(INTERFACE_DESCRIPTOR_STRUCT)+
sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+
(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+
sizeof(INTERFACE_DESCRIPTOR_STRUCT)+
sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256,//配置描述符集合的总大小
0x01,//只包含一个接口
0x01,//该配置的编号
0x00,//iConfiguration字段
0x80,//采用总线供电,不支持远程唤醒
0xC8//从总线获取最大电流400mA
},
//interface_descritor//接口描述符
{
sizeof(INTERFACE_DESCRIPTOR_STRUCT),//接口描述符的字节数大小,这里为9
INTERFACE_DESCRIPTOR,//接口描述符类型编号,接口描述符为3
0x00,//接口编号为4
0x00,//该接口描述符的编号为0
ENDPOINT_NUMBER,//非0端点数量为2,只使用端点主端点输入和输出
0x08,//定义为USB大容量存储设备
0x06,//使用的子类,为简化块命令
0x50,//使用的协议,这里使用单批量传输协议
0x00//接口描述符字符串索引,为0,表示没有字符串
},
//endpoint_descriptor[]
{
{//主端点输入描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端点描述符的字节数大小,这里为7
ENDPOINT_DESCRIPTOR,//端点描述符类型编号,端点描述符为5
MAIN_POINT_IN,//端点号,主输入端点
ENDPOINT_TYPE_BULK,//使用的传输类型,批量传输
0x4000,//该端点支持的最大包尺寸,64字节
0x00//中断扫描时间,对批量传输无效
},
{//主端点输出描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端点描述符的字节数大小,这里为7
ENDPOINT_DESCRIPTOR,//端点描述符类型编号,端点描述符为5
MAIN_POINT_OUT,//端点号,主输出端点
ENDPOINT_TYPE_BULK,//使用的传输类型,批量传输
0x4000,//该端点支持的最大包尺寸,64字节
0x00//中断扫描时间,对批量传输无效
}
}
};
其中关于端点的类型定义如下
//定义的端点类型
#define ENDPOINT_TYPE_CONTROL0x00//控制传输
#define ENDPOINT_TYPE_ISOCHRONOUS0x01//同步传输
#define ENDPOINT_TYPE_BULK0x02//批量传输
#define ENDPOINT_TYPE_INTERRUPT0x03//中断传输