📄 descriptors.c
字号:
/**********************************************************************/
/*File: descriptors.c */
/*Author: duanlifeng */
/* */
/*描述: initializes character array with USB descriptor values */
/* that will be loaded into the USB descriptor RAM at startup */
/* */
/* 版权(c) 2003- 北京合众达电子技术有限责任公司 */
/**********************************************************************/
#include "Global_Maco.h"
#include <csl_usb.h>
#include <stdio.h>
#include <csl.h>
#include <csl_chiphal.h>
typedef struct USB_DataStructDef
{
Uint16 Bytes; /* Total number of bytes in the buf */
Uint16 *pBuffer; /* pointer to the start of buffer */
struct USB_DataStructDef *pNextBuffer; /* pointer to the next structure */
}USB_DataStruct;
/*Device Description*/
char Device_Description[20] ={
/* 器件描述表 */
0,
0,
DSCR_DEVICE_LEN, /* Descriptor length */
DSCR_DEVICE, /* Decriptor type */
0x01,0x01, /* Specification Version (BCD) */
0x00, /* Device class */
0x00, /* Device sub-class */
0x00, /* Device sub-sub-class */
0x40, /* Maximum packet size */
0xb4, 0x04, /* Vendor ID */
0x82, 0x00, /* Product ID (Sample Device) */
0x00, 0x00, /* Product version ID */
0x01, /* Manufacturer string index */
0x02, /* Product string index */
0x00, /* Serial number string index */
0x01, /* Number of configurations */
}; /* 一共20个字节 */
/*Device Qualifier Descriptor*/
char Device_Qualifier[11] = {
/* Device Qualifier Descriptor */
0,
DSCR_DEVQUAL_LEN, /* Descriptor length */
DSCR_DEVQUAL, /* Decriptor type */
0x00, 0x02, /* Specification Version (BCD) */
0x00, /* Device class */
0x00, /* Device sub-class */
0x00, /* Device sub-sub-class */
0x40, /* Maximum packet size */
0x01, /* Number of configurations */
0x00, /* Reserved */
};
/*device Configuration Descriptor*/
char Device_Config1[12] = {
/* Full-Speed Configuration Descriptor */
0,
0,
DSCR_CONFIG_LEN, /* Descriptor length */
DSCR_CONFIG, /* Descriptor type */
DSCR_CONFIG_LEN +
DSCR_INTRFC_LEN +
(4*DSCR_ENDPNT_LEN),/* Total Length (LSB) */
0x00, /* Total Length (MSB) */
0x01, /* Number of interfaces */
0x01, /* Configuration number */
0x04, /* Configuration string */
0x60, /* Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu) */
0x00, /* Power requirement (div 2 ma) */
0
};
/*device Configuration Descriptor*/
Uint16 Device_Config[6] = {
/* Full-Speed Configuration Descriptor */
0,
0x0209,
0x0074, //0020
0x0101,
0x6004,
0x0,
};
/*device Default Interface 0*/
Uint16 Device_Interface[6] = {
/* Interface Descriptor */
0,
0x0409,
0x0000,
0xFF0E, // 0x0802,
0x5006,
0x0005
};
/* Endpoint 1 descriptor(in) */
Uint16 Bulk_Out1_Descriptior[5] ={
0x0,
0x0507,
0x0201,
0x0040,
0x0000
};
/* Endpoint 1 descriptor(out) */
Uint16 Bulk_In1_Descriptior[5] ={
0x0,
0x0507,
0x0281,
0x0040,
0x0000
};
/* Endpoint 2 descriptor(in) */
Uint16 Bulk_Out2_Descriptior[5] ={
0x0,
0x0507,
0x0202,
0x0040,
0x0000
};
/* Endpoint 2 descriptor(out) */
Uint16 Bulk_In2_Descriptior[5] ={
0x0,
0x0507,
0x0282,
0x0040,
0x0000
};
/* Endpoint 3 descriptor(in) */
Uint16 Bulk_Out3_Descriptior[5] ={
0x0,
0x0507,
0x0203,
0x0040,
0x0000
};
/* Endpoint 3 descriptor(out) */
Uint16 Bulk_In3_Descriptior[5] ={
0x0,
0x0507,
0x0283,
0x0040,
0x0000
};
/* Endpoint 4 descriptor(in) */
Uint16 Bulk_Out4_Descriptior[5] ={
0x0,
0x0507,
0x0204,
0x0040,
0x0000
};
/* Endpoint 4 descriptor(out) */
Uint16 Bulk_In4_Descriptior[5] ={
0x0,
0x0507,
0x0284,
0x0040,
0x0000
};
/* Endpoint 5 descriptor(in) */
Uint16 Bulk_Out5_Descriptior[5] ={
0x0,
0x0507,
0x0205,
0x0040,
0x0000
};
/* Endpoint 5 descriptor(out) */
Uint16 Bulk_In5_Descriptior[5] ={
0x0,
0x0507,
0x0285,
0x0040,
0x0000
};
/* Endpoint 6 descriptor(in) */
Uint16 Bulk_Out6_Descriptior[5] ={
0x0,
0x0507,
0x0206,
0x0040,
0x0000
};
/* Endpoint 6 descriptor(out) */
Uint16 Bulk_In6_Descriptior[5] ={
0x0,
0x0507,
0x0286,
0x0040,
0x0000
};
/* Endpoint 7 descriptor(in) */
Uint16 Bulk_Out7_Descriptior[5] ={
0x0,
0x0507,
0x0207,
0x0040,
0x0000
};
/* Endpoint 7 descriptor(out) */
Uint16 Bulk_In7_Descriptior[5] ={
0x0,
0x0507,
0x0287,
0x0040,
0x0000
};
/*------- 下面构筑了一个配置描述表链 Configuration descriptor -----------*/
USB_DataStruct Bulk_In7_link ={ // Endpoint 7 in descriptor
0x0007,
(Uint16 *)&Bulk_In7_Descriptior,
NULL
};
USB_DataStruct Bulk_Out7_link ={ // Endpoint 7 out descriptor
0x0007,
(Uint16 *)&Bulk_Out7_Descriptior,
&Bulk_In7_link
};
USB_DataStruct Bulk_In6_link ={ // Endpoint 6 in descriptor
0x0007,
(Uint16 *)&Bulk_In6_Descriptior,
&Bulk_Out7_link
};
USB_DataStruct Bulk_Out6_link ={ // Endpoint 6 out descriptor
0x0007,
(Uint16 *)&Bulk_Out6_Descriptior,
&Bulk_In6_link
};
USB_DataStruct Bulk_In5_link ={ // Endpoint 5 in descriptor
0x0007,
(Uint16 *)&Bulk_In6_Descriptior,
&Bulk_Out6_link
};
USB_DataStruct Bulk_Out5_link ={ // Endpoint 5 out descriptor
0x0007,
(Uint16 *)&Bulk_Out5_Descriptior,
&Bulk_In5_link
};
USB_DataStruct Bulk_In4_link ={ // Endpoint 4 in descriptor
0x0007,
(Uint16 *)&Bulk_In4_Descriptior,
&Bulk_Out5_link
};
USB_DataStruct Bulk_Out4_link ={ // Endpoint 4 out descriptor
0x0007,
(Uint16 *)&Bulk_Out4_Descriptior,
&Bulk_In4_link
};
USB_DataStruct Bulk_In3_link ={ // Endpoint 3 in descriptor
0x0007,
(Uint16 *)&Bulk_In3_Descriptior,
&Bulk_Out4_link
};
USB_DataStruct Bulk_Out3_link ={ // Endpoint 3 out descriptor
0x0007,
(Uint16 *)&Bulk_Out3_Descriptior,
&Bulk_In3_link
};
USB_DataStruct Bulk_In2_link ={ // Endpoint 2 in descriptor
0x0007,
(Uint16 *)&Bulk_In2_Descriptior,
&Bulk_Out3_link
};
USB_DataStruct Bulk_Out2_link ={ // Endpoint 2 out descriptor
0x0007,
(Uint16 *)&Bulk_Out2_Descriptior,
&Bulk_In2_link
};
USB_DataStruct Bulk_In1_link ={ // Endpoint 1 in descriptor
0x0007,
(Uint16 *)&Bulk_In1_Descriptior,
&Bulk_Out2_link
};
USB_DataStruct Bulk_Out1_link ={ // Endpoint 1 out descriptor
0x0007,
(Uint16 *)&Bulk_Out1_Descriptior,
&Bulk_In1_link
};
USB_DataStruct usb_interface_link ={ // Interface descriptor
0x0009,
(Uint16 *)&Device_Interface,
&Bulk_Out1_link
};
USB_DataStruct usb_configuration_link ={ // Device descriptor
0x0009,
(Uint16 *)&Device_Config,
&usb_interface_link
};
/* String descriptor language ID */
Uint16 String_descriptor_langid[4] = {
0x0004,
0x0708,
0x0409,
0x0000
};
/* String descriptor */
Uint16 String_descriptor[12] = {
0x0000,
0x529c,0x0000,
0x17da,0x0000,
0x17f4,0x0000,
0x17f4,0x0000,
0x1800,0x0000,
0x0000
};
/* String descriptor1 */
char String_descriptor1[40] ={
/* String Descriptor 1 */
0x00,
0x00,
2+(2*7),
DSCR_STRING,
'S', 0x00,
'E', 0x00,
'E', 0x00,
'D', 0x00,
' ', 0x00,
' ', 0x00,
' ', 0x00,
/* String Descriptor 2 */
2+(2*10),
DSCR_STRING,
'D', 0x00,
'S', 0x00,
'K', 0x00,
'5', 0x00,
'5', 0x00,
'0', 0x00,
'9', 0x00,
'V', 0x00,
'0', 0x00,
'1', 0x00
};
/* String Descriptor 2 */
char String_descriptor2[24] ={
/* String Descriptor 2 */
0x00,
0x00,
2+(2*10),
DSCR_STRING,
'E', 0x00,
'Z', 0x00,
'-', 0x00,
'U', 0x00,
'S', 0x00,
'B', 0x00,
' ', 0x00,
'S', 0x00,
'X', 0x00,
'2', 0x00
};
/* 输入控制节点描述表 */
char EndPoint0In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x80, // 节点号和方向
0x00, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出控制节点描述表 */
char EndPoint0Out_Descriptor[8]={
0x00,
0x07, //
0x05, // 描述表类型
0x00, // 节点号和方向
0x00, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输入节点1的描述表 */
char EndPoint1In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x81, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出节点1的描述表 */
char EndPoint1Out_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x01, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输入节点2的描述表 */
char EndPoint2In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x82, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出节点2的描述表 */
char EndPoint2Out_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x02, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输入节点3的描述表 */
char EndPoint3In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x83, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出节点3的描述表 */
char EndPoint3Out_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x03, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输入节点4的描述表 */
char EndPoint4In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x84, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出节点4的描述表 */
char EndPoint4Out_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x04, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输入节点5的描述表 */
char EndPoint5In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x85, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出节点5的描述表 */
char EndPoint5Out_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x05, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输入节点6的描述表 */
char EndPoint6In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x86, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出节点6的描述表 */
char EndPoint6Out_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x06, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输入节点7的描述表 */
char EndPoint7In_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x87, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/* 输出节点7的描述表 */
char EndPoint7Out_Descriptor[8]={
0x00,
0x07, // 描述表长度
0x05, // 描述表类型
0x07, // 节点号和方向
0x02, // 节点类型
0x0040, // 最大的包尺寸(MSB)+最大的包尺寸(LSB)
0x00 // 查询间隔
};
/****************************************************************/
/* No more */
/****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -