本文引用地址: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;//接口描述符的類型編號
BYTE bInterfaceNumber;//該接口的編號
BYTE bAlternateSetting;//備用的接口描述符編號
BYTE bNumEndpoints;//該接口使用的端點數(shù),不包括端點0
BYTE bInterfaceClass;//接口類型
BYTE bInterfaceSubClass;//接口子類型
BYTE bInterfaceProtocol;//接口遵循的協(xié)議
BYTE iInterface;//描述該接口的字符串索引值
}
INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;
4.端點描述符
//定義標(biāo)準(zhǔn)的端點描述符結(jié)構(gòu)
typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
BYTE bLegth;//端點描述符字節(jié)數(shù)大小
BYTE bDescriptorType;//端點描述符類型編號
BYTE bEndpointAddress;//端點地址及輸入輸出屬性
BYTE bmAttributes;//端點的傳輸類型屬性
WORD wMaxPacketSize;//端點收、發(fā)的最大包大小
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),//配置描述符的字節(jié)數(shù)大小,這里為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),//接口描述符的字節(jié)數(shù)大小,這里為9
INTERFACE_DESCRIPTOR,//接口描述符類型編號,接口描述符為3
0x00,//接口編號為4
0x00,//該接口描述符的編號為0
ENDPOINT_NUMBER,//非0端點數(shù)量為2,只使用端點主端點輸入和輸出
0x08,//定義為USB大容量存儲設(shè)備
0x06,//使用的子類,為簡化塊命令
0x50,//使用的協(xié)議,這里使用單批量傳輸協(xié)議
0x00//接口描述符字符串索引,為0,表示沒有字符串
},
//endpoint_descriptor[]
{
{//主端點輸入描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點描述符的字節(jié)數(shù)大小,這里為7
ENDPOINT_DESCRIPTOR,//端點描述符類型編號,端點描述符為5
MAIN_POINT_IN,//端點號,主輸入端點
ENDPOINT_TYPE_BULK,//使用的傳輸類型,批量傳輸
0x4000,//該端點支持的最大包尺寸,64字節(jié)
0x00//中斷掃描時間,對批量傳輸無效
},
{//主端點輸出描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點描述符的字節(jié)數(shù)大小,這里為7
ENDPOINT_DESCRIPTOR,//端點描述符類型編號,端點描述符為5
MAIN_POINT_OUT,//端點號,主輸出端點
ENDPOINT_TYPE_BULK,//使用的傳輸類型,批量傳輸
0x4000,//該端點支持的最大包尺寸,64字節(jié)
0x00//中斷掃描時間,對批量傳輸無效
}
}
};
其中關(guān)于端點的類型定義如下
//定義的端點類型
#define ENDPOINT_TYPE_CONTROL0x00//控制傳輸
#define ENDPOINT_TYPE_ISOCHRONOUS0x01//同步傳輸
#define ENDPOINT_TYPE_BULK0x02//批量傳輸
#define ENDPOINT_TYPE_INTERRUPT0x03//中斷傳輸
端點號的定義如下
#define MAIN_POINT_OUT0x02//2號輸出端點
#define MAIN_POINT_IN0x82//2號輸入端點
評論