本文引用地址:http://m.butianyuan.cn/article/201612/330287.htm2.接口描述符
//定義標(biāo)準(zhǔn)的接口描述符結(jié)構(gòu)
typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
BYTE bLength;//接口描述符的字節(jié)數(shù)大小
BYTE bDescriptorType;//接口描述符的類(lèi)型編號(hào)
BYTE bInterfaceNumber;//該接口的編號(hào)
BYTE bAlternateSetting;//備用的接口描述符編號(hào)
BYTE bNumEndpoints;//該接口使用的端點(diǎn)數(shù),不包括端點(diǎn)0
BYTE bInterfaceClass;//接口類(lèi)型
BYTE bInterfaceSubClass;//接口子類(lèi)型
BYTE bInterfaceProtocol;//接口遵循的協(xié)議
BYTE iInterface;//描述該接口的字符串索引值
}
INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;
4.端點(diǎn)描述符
//定義標(biāo)準(zhǔn)的端點(diǎn)描述符結(jié)構(gòu)
typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
BYTE bLegth;//端點(diǎn)描述符字節(jié)數(shù)大小
BYTE bDescriptorType;//端點(diǎn)描述符類(lèi)型編號(hào)
BYTE bEndpointAddress;//端點(diǎn)地址及輸入輸出屬性
BYTE bmAttributes;//端點(diǎn)的傳輸類(lèi)型屬性
WORD wMaxPacketSize;//端點(diǎn)收、發(fā)的最大包大小
BYTE bInterval;//主機(jī)查詢端點(diǎn)的時(shí)間間隔
}
ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;
下面是一個(gè)配置描述符集合的定義
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),//配置描述符的字節(jié)數(shù)大小,這里為9
CONFIGURATION_DESCRIPTOR,//配置描述符類(lèi)型編號(hào),配置描述符為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,//只包含一個(gè)接口
0x01,//該配置的編號(hào)
0x00,//iConfiguration字段
0x80,//采用總線供電,不支持遠(yuǎn)程喚醒
0xC8//從總線獲取最大電流400mA
},
//interface_descritor//接口描述符
{
sizeof(INTERFACE_DESCRIPTOR_STRUCT),//接口描述符的字節(jié)數(shù)大小,這里為9
INTERFACE_DESCRIPTOR,//接口描述符類(lèi)型編號(hào),接口描述符為3
0x00,//接口編號(hào)為4
0x00,//該接口描述符的編號(hào)為0
ENDPOINT_NUMBER,//非0端點(diǎn)數(shù)量為2,只使用端點(diǎn)主端點(diǎn)輸入和輸出
0x08,//定義為USB大容量存儲(chǔ)設(shè)備
0x06,//使用的子類(lèi),為簡(jiǎn)化塊命令
0x50,//使用的協(xié)議,這里使用單批量傳輸協(xié)議
0x00//接口描述符字符串索引,為0,表示沒(méi)有字符串
},
//endpoint_descriptor[]
{
{//主端點(diǎn)輸入描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點(diǎn)描述符的字節(jié)數(shù)大小,這里為7
ENDPOINT_DESCRIPTOR,//端點(diǎn)描述符類(lèi)型編號(hào),端點(diǎn)描述符為5
MAIN_POINT_IN,//端點(diǎn)號(hào),主輸入端點(diǎn)
ENDPOINT_TYPE_BULK,//使用的傳輸類(lèi)型,批量傳輸
0x4000,//該端點(diǎn)支持的最大包尺寸,64字節(jié)
0x00//中斷掃描時(shí)間,對(duì)批量傳輸無(wú)效
},
{//主端點(diǎn)輸出描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點(diǎn)描述符的字節(jié)數(shù)大小,這里為7
ENDPOINT_DESCRIPTOR,//端點(diǎn)描述符類(lèi)型編號(hào),端點(diǎn)描述符為5
MAIN_POINT_OUT,//端點(diǎn)號(hào),主輸出端點(diǎn)
ENDPOINT_TYPE_BULK,//使用的傳輸類(lèi)型,批量傳輸
0x4000,//該端點(diǎn)支持的最大包尺寸,64字節(jié)
0x00//中斷掃描時(shí)間,對(duì)批量傳輸無(wú)效
}
}
};
其中關(guān)于端點(diǎn)的類(lèi)型定義如下
//定義的端點(diǎn)類(lèi)型
#define ENDPOINT_TYPE_CONTROL0x00//控制傳輸
#define ENDPOINT_TYPE_ISOCHRONOUS0x01//同步傳輸
#define ENDPOINT_TYPE_BULK0x02//批量傳輸
#define ENDPOINT_TYPE_INTERRUPT0x03//中斷傳輸
端點(diǎn)號(hào)的定義如下
#define MAIN_POINT_OUT0x02//2號(hào)輸出端點(diǎn)
#define MAIN_POINT_IN0x82//2號(hào)輸入端點(diǎn)
評(píng)論