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

📄 descriptor.h

📁 USB通信测试软件 -- 与S3C44B0的下位机通信的软件. XP驱动------------ PDIUSBD12的PC机驱动程序.USB_Test---------S3C44B0X板的USB固件程
💻 H
字号:
/*
;************************************************************************************************************
;*									  	 江西师范大学物理通讯电子学院
;*
;*                                     	      创  新  中  心
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                      
;* 文件名称 : Descriptor.h
;* 文件功能 : 与USB相关描述符数据结构的定义.
;* 补充说明 : 
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : zhouhong
;* 修改日期 : 2006-11-5 
;* 版本声明 : V1.0.0
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : zhouhong   
;* 创建日期 : 2006-11-5  
;* 版本声明 : V1.0.0     
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************                         
;*/
#ifndef _Descriptor_H_
#define _Descriptor_H_

#include "..\INC\USBecd.h"

//
// Definition Data Type 
// 定义数据类型
// 
#define USB_U8 unsigned char
#define USB_U16 unsigned short 

//将一个十六位的数据分成二个8位的数据,低位在前,高位在后
#define U16TO2U8(dataNum)  ((dataNum)&0x00ff) , ((dataNum)>>8)
//****************************************************************************
//
// The following defines are specific the USB standard version 1.1.
// 以下定义在USB1.1版本中使用
//****************************************************************************

//
// Definitions of the bit fields in the bmRequestType field of a setup packet.
// 定义设置包中USB请求类型(bmRequestType)中各位字段.
// RT==RequestType
//
#define USB_RT_DEVICE_TO_HOST                   0x80	//D7:传输方向(设备到主机)
#define USB_RT_TYPE_MASK                        0x60    //D6..D5:保留
#define USB_RT_TYPE_STANDARD                    0x00	//D6..D5:标准
#define USB_RT_TYPE_CLASS                       0x20	//D6..D5:类
#define USB_RT_TYPE_VENDOR                      0x40	//D6..D5:厂商
#define USB_RT_RECIPIENT_MASK                   0x1F	//D4..D0:接收者:4-31保留
#define USB_RT_RECIPIENT_DEVICE                 0x00	//D4..D0:接收者:0 设备	
#define USB_RT_RECIPIENT_INTERFACE              0x01	//D4..D0:接收者:1 接口
#define USB_RT_RECIPIENT_ENDPOINT               0x02	//D4..D0:接收者:2 端点
#define USB_RT_RECIPIENT_OTHER					0x03	//D4..D0:接收者:3 其它

//
// Definitions bmRequest field of a setup packet
// 定义USB标准请求命令(bmRequest)
#define USB_R_GET_STATUS            0x00	//获得设备,接口或者端点的某种状态
#define USB_R_GET_DEVICE            0x01
#define USB_R_CLEAR_FEATURE         0x01	//清除设备、接口或端点的某种特征。设备:清除其远程唤醒功能
											// 接口:无          端口:清除其停止工作的状态 
#define USB_R_GET_STRING            0x03	
#define USB_R_SET_FEATURE           0x03    //主机要求启动一个在设备、接口或端点上的特征。   
#define USB_R_SET_ADDRESS           0x05	//为设备设置一个惟一的地址
#define USB_R_GET_DESCRIPTOR        0x06	//获得设备的某种标准描述符
#define USB_R_SET_DESCRIPTOR        0x07	//为设备新增一个描述符,或更新一个已存在的描述符
#define USB_R_GET_CONFIGURATION     0x08	//获得指定设备当前配置的值
#define USB_R_SET_CONFIGURATION     0x09	//激活设备的某个配置
#define USB_R_GET_INTERFACE         0x0A	//获得设备接口当前工作的选择设置值(AlternateSetting)
#define USB_R_SET_INTERFACE         0x0B	//主机激活设备的某个接口
#define USB_R_SYNCH_FRAME           0x0C	//在实时传输中,设备的端点可以以一个次序传输不同大小的数据包

//
// Definitions of the bit fields in the wIndex field of setup packets where the
// wIndex field is used to specify a endpoint (i.e. Clear_Feature, Get_Status,
// and Set_Feature).
// 定义wIndex被指定为端点时表示端点地址.
//
#define USB_ENDPOINT_DIRECTION_MASK             0x0080	//配置值低字节有效
#define USB_ENDPOINT_ADDRESS_MASK               0x007f	//端点地址1-127

//
// Definitions of the features that can be specified in the wValue field of a
// Clear_Feature or Set_Feature setup packet.
// 定义wValue在Clear_Feature 或 Set_Feature 安装包中表示特征选择符.
//
#define USB_FEATURE_ENDPOINT_STALL              0x0000	//命令接收对象:设备
#define USB_FEATURE_REMOTE_WAKEUP               0x0001	//命令接收对象:端点
#define USB_FEATURE_POWER_D0                    0x0002
#define USB_FEATURE_POWER_D1                    0x0003
#define USB_FEATURE_POWER_D2                    0x0004
#define USB_FEATURE_POWER_D3                    0x0005

//
// Definitions of the wValue field for a Get_Descriptor setup packet.
//wValue在Get_Descriptor安装包中表示描述符类型和描述符的索引值
//高字节表示描述符类型,低字节表示描述符索引值
//
#define USB_DESCRIPTOR_TYPE_MASK                0xFF00	//得到描述符类型,屏蔽索引值
#define USB_DESCRIPTOR_DEVICE                   0x0100	//设备描述符
#define USB_DESCRIPTOR_CONFIGURATION            0x0200	//配置描述符
#define USB_DESCRIPTOR_STRING                   0x0300	//字符串描述符
#define USB_DESCRIPTOR_INTERFACE                0x0400	//接口描述符
#define USB_DESCRIPTOR_ENDPOINT                 0x0500	//端点描述符
#define USB_DESCRIPTOR_INDEX_MASK               0x00FF	//得到描述符索引值,屏蔽描述符类型

//
// Definitions of the device status returned for a Get_Status setup packet.
// 设备状态
//
#define USB_DEVICE_STATUS_SELF_POWERED          0x01	//自供电
#define USB_DEVICE_STATUS_REMOTE_WAKEUP         0x02	//远程唤醒

//
// Definitions of the endpoint status returned for a Get_Status setup packet.
// 端点状态
//
#define USB_ENDPOINT_STATUS_STALLED             0x01	//端点停止


//
// Definitions Constant of Descriptor Type  in the USB
// 定义描述符常数
//
#define USB_DEVICE_DESCRIPTOR_TYPE 				0x01	//设备描述符类型=01H
#define USB_CONFIGURATION_DESCRIPTOR_TYPE		0x02	//配置描述符类型=02H
#define USB_INTERFACE_DESCRIPTOR_TYPE			0x04	//接口描述符类型=04H
#define USB_ENDPOINT_DESCRIPTOR_TYPE			0x05	//端点描述符类型=05H

//
// Definitions  of bDeviceClass in the USB_DEVICE_DESCRIPTOR
// 定义类型代码(设备的类别)
//
#define USB_CLASS_SPECIFIED_IN_INTERFACE		0x00	//在接口描述符中提供
#define USB_CLASS_COMMUNICATION					0x02	//通信类
#define USB_CLASS_HUB							0x09	//集线器类
#define USB_CLASS_CODE_TEST_CLASS_DEVICE		0xDC	//测试设备类型
#define USB_CLASS_RADIO_COMMUNICATION_DEVICE	0xE0	//无线通信设备类
#define USB_CLASS_VENDOR_DEFINITION_DEVICE		0xFF	//厂商定义的设备类

//
// Definitions of the bmAttributes in the USB_ENDPOINT_DESCRIPTOR
// 定义端点传输类型
//
#define USB_ENDPOINT_TYPE_CONTROL				0x00	//控制传输
#define USB_ENDPOINT_TYPE_ISOCHRONOUS			0x01	//实时传输
#define USB_ENDPOINT_TYPE_BULK					0x02	//批量传输
#define USB_ENDPOINT_TYPE_INTERRUPT				0x03	//中断传输

//
//  Definitions of 
//
#define NUM_ENPOINTS                            0x04    //除端点0的端点数目4H
#define MAX_ENPOINTS                            0x007f    //除端点0最大端点数目4H   

#define USB_TOTAL_CFG_DESCSIZE  sizeof(USB_CONFIGURATION_DESCRIPTOR)+sizeof(USB_INTERFACE_DESCRIPTOR)\
								 +NUM_ENPOINTS*sizeof(USB_ENDPOINT_DESCRIPTOR)

/*USB设备请求数据结构*/
typedef struct _USB_device_request
{
	USB_U8 bmRequestType;		//请求类型
	USB_U8 bRequest;			//USB具体请求
	USB_U16 wValue;				//USB数据,根据不同的请求含义改变
	USB_U16 wIndex;				//USB请求索引,根据不同的请求含义改变
	USB_U16 wLength;			//数据字节数
}USB_DEVICE_REQUEST;

/*控制传输数据结构*/
typedef struct _control_xfer
{
	USB_DEVICE_REQUEST DeviceRequest;			//USB设备请求数据结构体,8Byte
	USB_U16 wLength;							//传输数据的总字节数
	USB_U8 wCount;								//传输数据的指针
	USB_U8 *pData;								//传输数据的指针
	USB_U8 dataBuffer[MAX_CONTROLDATA_SIZE];	//请求的数据
}USB_CONTROL_XFER;

/*USB设备描述符数据结构*/
typedef struct _USB_device_descriptor
{
	USB_U8 bLength;				//设备描述符长度=12H
	USB_U8 bDescriptorType;		//设备描述符类型=01H
	USB_U16 bcdUSB;				//USB规划发布号(BCD码)
	USB_U8 bDeviceClass;		//设备类型代码(由USB指定)
	USB_U8 bDeviceSubClass;		//设备子类型代码(由USB分配)
	USB_U8 bDeviceProtocol;		//设备协议代码(由USB分配)
	USB_U8 bMaxPacketSize0;		//端口0最大数据吞吐量(8,16,32,64)
	USB_U16 idVendor;			//供应商ID(由USB分配)
	USB_U16 idProduct;			//产品ID(由厂商分配)
	USB_U16 bcdDevice;			//设备出厂编码(序列号)
	USB_U8 iManufacturer;		//厂商描述符字符串索引
	USB_U8 iProduct;			//产品描述符字符串索引
	USB_U8 iSerialNumber;		//设备序列号字符串索引
	USB_U8 bNumConfiguations;	//可能的配置数
}USB_DEVICE_DESCRIPTOR;

/*
*************************************************************************************************************
***********************注意:当一个结构体中包含十六的数据时这个结构体的大小一定为偶数*************************
************所以:当表示用结构体表示一个结构体大小为奇数时,在此结构体中不能包含有十六位的数据类型*************
*********这就是为什么把:USB_U16 wTotalLength分为两个USB_U8 wTotalLengthH,USB_U8 wTotalLengthL的原因**********	
*************************************************************************************************************
*/
/*USB配置描述符数据结构*/
typedef struct _USB_configuration_descriptor
{
	USB_U8 bLength;				//描述符长度=09H
	USB_U8 bDescriptorType;		//描述符类型=02H
	USB_U8 wTotalLengthL;		//此配置信息总长(低位)
	USB_U8 wTotalLengthH;		//(包括配置、接口、端点、和设备类及厂商定义的描述符)
	USB_U8 bNumInterface;		//配置所支持接口数
	USB_U8 bConfigurationValue;	//在SetConfiguration()请求中用作参数选择配置值
	USB_U8 iConfiguration;		//用于描述该配置字符串描述符的索引
	USB_U8 bmAttibutes;//配置特性:D7:保留(1),D6:自给电源,D5:远程唤醒,D4..0:保留(1)   
	USB_U8 MaxPower;		//最大电源耗费量.以2mA为一个单位 
}USB_CONFIGURATION_DESCRIPTOR;

/*USB接口描述符数据结构*/
typedef struct _USB_interface_descriptor
{
	USB_U8 bLength;				//描述符长度=09H
	USB_U8 bDescriptorType;		//描述符类型=04H
	USB_U8 bInterfaceNumber;	//接口编号
	USB_U8 bAlternateSetting;	//可选设置的索引值
	USB_U8 bNumEndpoint;		//使用端口数目(端口0除外)
	USB_U8 bInterfaceClass;		//类型代码(由USB分配)
	USB_U8 bInterfaceSubClass;	//子类型代码(由USB分配)
	USB_U8 bInterfaceProtocol;	//协议代码(由USB分配)
	USB_U8 iInterface;			//字符串描述符的索引
}USB_INTERFACE_DESCRIPTOR;

/*USB端点描述符数据结构*/
typedef struct _USB_endpoint_descriptor
{
	USB_U8 bLength;				//描述符长度=07H
	USB_U8 bDescriptorType;		//描述符类型=05H
	USB_U8 bEndpointAddress;	//USB设备端点地址:Bit0..3:端口号 Bit4..6:保留(0) 
								//Bit7:方向,对于控制端点可忽略.0:out端点 1:in端点
	USB_U8 bmAttributes;		//端点属性. Bit1..0: 00:控制 01:同步 02:批量 03:中断
	USB_U8 wMaxPacketSizeL;		//本端点接收或发送的最大信息包的大小
	USB_U8 wMaxPacketSizeH;		//高位
	USB_U8 iInterval;			//访问端点的时间间隔  
}USB_ENDPOINT_DESCRIPTOR;

/*USB字符串描述符数据结构*/
typedef struct _USB_string_descriptor
{
	USB_U8 bLength;				//描述符长度
	USB_U8 bDescriptorType;		//描述符类型
}USB_STRING_DESCRIPTOR;

/*PDIUSBD12描述符结构*/
typedef struct _USB_descriptor
{
	USB_CONFIGURATION_DESCRIPTOR ConfigDescr;	//配置描述符
	USB_INTERFACE_DESCRIPTOR InterfaceDescr;	//接口描述符
	USB_ENDPOINT_DESCRIPTOR EP1_TXDescr;		//端点1输入描述符
	USB_ENDPOINT_DESCRIPTOR EP1_RXDescr; 		//端点1输出描述符
	USB_ENDPOINT_DESCRIPTOR EP2_TXDescr;		//端点2输入描述符
	USB_ENDPOINT_DESCRIPTOR EP2_RXDescr;        //端点2输出描述符
}USB_DESCRIPTOR,*PUSB_DESCRIPTOR;


/*
*************************************************************************************************************
*                                   函数声明
*************************************************************************************************************
*/
INT8U USB_Get_Status(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U USB_Clear_Feature(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U  USB_Set_Feature(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U  USB_Set_Address(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U USB_Get_Descriptor(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U USB_Set_Configuration(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U USB_Get_Configuration(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U USB_Get_Interface(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U USB_Set_Interface(USB_DEVICE_REQUEST *sDeviceRequest);
INT8U USB_Reserved(USB_DEVICE_REQUEST *sDeviceRequest);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -