⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 descriptors.c

📁 TMS320VC5509设备端USB设备驱动程序源文件
💻 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 + -