www.pudn.com > USBDriver.rar > Descriptor.h


/****************************************Copyright (c)************************************************** 
**                               ¹ãÖÝÖÜÁ¢¹¦µ¥Æ¬»ú·¢Õ¹ÓÐÏÞ¹«Ë¾ 
**                                     ÑÐ    ¾¿    Ëù 
**                                        ²úÆ·Ò»²¿  
** 
**                                 http://www.zlgmcu.com 
** 
** ÎÄ   ¼þ   Ãû: Descriptor.h 
** ×îºóÐÞ¸ÄÈÕÆÚ: 2004Äê7ÔÂ2ÈÕ 
** Ãè        Êö: USBÇý¶¯³ÌÐòÈí¼þ°ü: PDIUSBD12 É豸¶ËÇý¶¯³ÌÐò USBЭÒé²ãÓйØÃèÊö·û½á¹¹Ì嶨Ò弰ȡֵ 
** °æ	     ±¾: V1.0 
**********************************************************************************************************/ 
 
 
/* 
********************************************************************************************* 
*        					USB ÃèÊö·û½á¹¹Ìå¼°Æä³ÉԱȡֵºê¶¨Òå 
********************************************************************************************* 
*/ 
/***********  USB  É豸ÃèÊö·û½á¹¹Ìå  ****************/ 
typedef struct _USB_DEVICE_DESCRIPTOR { 
    INT8U bLength; 
    INT8U bDescriptorType; 
    INT8U bcdUSB0; 
    INT8U bcdUSB1; 
    INT8U bDeviceClass; 
    INT8U bDeviceSubClass; 
    INT8U bDeviceProtocol; 
    INT8U bMaxPacketSize0; 
    INT8U idVendor0; 
    INT8U idVendor1; 
    INT8U idProduct0; 
    INT8U idProduct1; 
    INT8U bcdDevice0; 
    INT8U bcdDevice1; 
    INT8U iManufacturer; 
    INT8U iProduct; 
    INT8U iSerialNumber; 
    INT8U bNumConfigurations; 
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR; 
 
/***********  USB  ÅäÖÃÃèÊö·û½á¹¹Ìå  ****************/ 
typedef struct _USB_CONFIGURATION_DESCRIPTOR { 
    INT8U bLength; 
    INT8U bDescriptorType; 
    INT8U wTotalLength0; 
    INT8U wTotalLength1; 
    INT8U bNumInterfaces; 
    INT8U bConfigurationValue; 
    INT8U iConfiguration; 
    INT8U bmAttributes; 
    INT8U MaxPower; 
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR; 
 
/***********  USB  ½Ó¿ÚÃèÊö·û½á¹¹Ìå  ****************/ 
typedef struct _USB_INTERFACE_DESCRIPTOR { 
    INT8U bLength; 
    INT8U bDescriptorType; 
    INT8U bInterfaceNumber; 
    INT8U bAlternateSetting; 
    INT8U bNumEndpoints; 
    INT8U bInterfaceClass; 
    INT8U bInterfaceSubClass; 
    INT8U bInterfaceProtocol; 
    INT8U iInterface; 
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; 
 
/***********  USB  ¶ËµãÃèÊö·û½á¹¹Ìå  ****************/ 
typedef struct _USB_ENDPOINT_DESCRIPTOR { 
    INT8U bLength; 
    INT8U bDescriptorType; 
    INT8U bEndpointAddress; 
    INT8U bmAttributes; 
    INT8U wMaxPacketSize0; 
    INT8U wMaxPacketSize1; 
    INT8U bInterval; 
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR; 
 
 
/***********  USB ×Ö·û´®ÃèÊö·û½á¹¹Ìå  ****************/ 
typedef struct _USB_STRING_DESCRIPTOR { 
    INT8U bLength; 
    INT8U bDescriptorType; 
    INT8U bString[1]; 
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR; 
 
//USB×î´ó×Ö·û³¤¶È 
#define MAXIMUM_USB_STRING_LENGTH 255 
 
/***********  USB µçÔ´ÃèÊö·û½á¹¹Ìå  ****************/ 
typedef struct _USB_POWER_DESCRIPTOR { 
    INT8U  bLength; 
    INT8U  bDescriptorType; 
    INT8U  bCapabilitiesFlags; 
    INT16U EventNotification; 
    INT16U D1LatencyTime; 
    INT16U D2LatencyTime; 
    INT16U D3LatencyTime; 
    INT8U  PowerUnit; 
    INT16U D0PowerConsumption; 
    INT16U D1PowerConsumption; 
    INT16U D2PowerConsumption; 
} USB_POWER_DESCRIPTOR, *PUSB_POWER_DESCRIPTOR; 
 
// USB ¹©µçÃèÊö·ûȡֵ 
#define USB_SUPPORT_D0_COMMAND      0x01 
#define USB_SUPPORT_D1_COMMAND      0x02 
#define USB_SUPPORT_D2_COMMAND      0x04 
#define USB_SUPPORT_D3_COMMAND      0x08 
 
#define USB_SUPPORT_D1_WAKEUP       0x10 
#define USB_SUPPORT_D2_WAKEUP       0x20 
 
/***********  USB ͨÓÃÃèÊö·û½á¹¹Ìå  ****************/ 
typedef struct _USB_COMMON_DESCRIPTOR { 
    INT8U bLength; 
    INT8U bDescriptorType; 
} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR; 
 
 
/***********  USB HUB ÃèÊö·û½á¹¹Ìå  ***************/ 
typedef struct _USB_HUB_DESCRIPTOR { 
    INT8U        bDescriptorLength;      // Length of this descriptor 
    INT8U        bDescriptorType;        // Hub configuration type 
    INT8U        bNumberOfPorts;         // number of ports on this hub 
    INT16U       wHubCharacteristics;    // Hub Charateristics 
    INT8U        bPowerOnToPowerGood;    // port power on till power good in 2ms 
    INT8U        bHubControlCurrent;     // max current in mA 
    // 
    // room for 255 ports power control and removable bitmask 
    INT8U        bRemoveAndPowerMask[64]; 
} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR; 
 
/* 
********************************************************************************************* 
*                  	 ͨÓà ÃèÊö·û½á¹¹Ìå³ÉԱȡֵºê¶¨Òå 
********************************************************************************************* 
*/ 
	//******************************************************* 
	// USB É豸ÇëÇóÀàÐÍÑÚÂë masks  
	//******************************************************* 
//(1) ½ÓÊÕ·½: D4...D0  
#define USB_RECIPIENT            (INT8U)0x1F 
#define USB_RECIPIENT_DEVICE     (INT8U)0x00 
#define USB_RECIPIENT_INTERFACE  (INT8U)0x01 
#define USB_RECIPIENT_ENDPOINT   (INT8U)0x02 
 
//(2) ÀàÐÍ: D6...D5 
#define USB_REQUEST_TYPE_MASK    (INT8U)0x60 
#define USB_STANDARD_REQUEST     (INT8U)0x00 
#define USB_CLASS_REQUEST        (INT8U)0x20 
#define USB_VENDOR_REQUEST       (INT8U)0x40 
 
//(3) Êý¾Ý´«Êä·½Ïò: D7 
#define DEVICE_ADDRESS_MASK      0x7F 
 
//(4) USB ÇëÇó© 
#define USB_REQUEST_MASK         (INT8U)0x0F 
 
//(5) USB¶Ëµã·½ÏòÑÚÂë 
#define USB_ENDPOINT_DIRECTION_MASK               0x80 
#define USB_ENDPOINT_DIRECTION_OUT(addr)          (!((addr) & USB_ENDPOINT_DIRECTION_MASK)) 
#define USB_ENDPOINT_DIRECTION_IN(addr)           ((addr) & USB_ENDPOINT_DIRECTION_MASK) 
 
	//******************************************************* 
	// USB É豸ÇëÇóÀàÐÍ 
	//******************************************************* 
#define USB_DEVICE_DESCRIPTOR_TYPE                0x01 
#define USB_CONFIGURATION_DESCRIPTOR_TYPE         0x02 
#define USB_STRING_DESCRIPTOR_TYPE                0x03 
#define USB_INTERFACE_DESCRIPTOR_TYPE             0x04 
#define USB_ENDPOINT_DESCRIPTOR_TYPE              0x05 
#define USB_POWER_DESCRIPTOR_TYPE                 0x06 
 
	//******************************************************* 
	// ÏÂÃæÎª»ùÓÚUSB 1.0¹æ·¶µÄÕýÈ·Öµ 
	//******************************************************* 
#define USB_REQUEST_GET_STATUS                    0x00 
#define USB_REQUEST_CLEAR_FEATURE                 0x01 
 
#define USB_REQUEST_SET_FEATURE                   0x03 
 
#define USB_REQUEST_SET_ADDRESS                   0x05 
#define USB_REQUEST_GET_DESCRIPTOR                0x06 
#define USB_REQUEST_SET_DESCRIPTOR                0x07 
#define USB_REQUEST_GET_CONFIGURATION             0x08 
#define USB_REQUEST_SET_CONFIGURATION             0x09 
#define USB_REQUEST_GET_INTERFACE                 0x0A 
#define USB_REQUEST_SET_INTERFACE                 0x0B 
#define USB_REQUEST_SYNC_FRAME                    0x0C 
 
	/******************************************************* 
	** USB ÌØÐÔÑ¡Ôñ·û 
	********************************************************/ 
#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 
 
#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((INT16U)((INT16U)d<<8 | i)) 
 
	/******************************************************* 
	** USB ÅäÖÃÃèÊö·û 
	********************************************************/ 
#define USB_CONFIG_POWERED_MASK                   0xc0 
 
#define USB_CONFIG_BUS_POWERED                    0x80 
#define USB_CONFIG_SELF_POWERED                   0x40 
#define USB_CONFIG_REMOTE_WAKEUP                  0x20 
 
#define BUS_POWERED                           0x80 
#define SELF_POWERED                          0x40 
#define REMOTE_WAKEUP                         0x20 
 
	/******************************************************* 
	** USB ¶ËµãÃèÊö·û½á¹¹Ìå: ¶ËµãÊôÐÔ 
	********************************************************/ 
#define USB_ENDPOINT_TYPE_MASK                    0x03 
 
#define USB_ENDPOINT_TYPE_CONTROL                 0x00 
#define USB_ENDPOINT_TYPE_ISOCHRONOUS             0x01 
#define USB_ENDPOINT_TYPE_BULK                    0x02 
#define USB_ENDPOINT_TYPE_INTERRUPT               0x03 
 
	/******************************************************* 
	** USB  É豸Àà 
	********************************************************/ 
#define USB_DEVICE_CLASS_RESERVED           0x00 
#define USB_DEVICE_CLASS_AUDIO              0x01 
#define USB_DEVICE_CLASS_COMMUNICATIONS     0x02 
#define USB_DEVICE_CLASS_HUMAN_INTERFACE    0x03 
#define USB_DEVICE_CLASS_MONITOR            0x04 
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05 
#define USB_DEVICE_CLASS_POWER              0x06 
#define USB_DEVICE_CLASS_PRINTER            0x07 
#define USB_DEVICE_CLASS_STORAGE            0x08 
#define USB_DEVICE_CLASS_HUB                0x09 
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC    0xFF 
 
/* 
********************************************************************************************* 
*             D12 רÓà    ¸÷ÖÖÃèÊö·û½á¹¹Ìå   ÃèÊö·û½á¹¹Ìå³ÉԱȡֵºê¶¨Òå 
********************************************************************************************* 
*/ 
/***********  D12 USB ¸÷ÖÖÃèÊö·û½á¹¹Ìå *********************/ 
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; 
 
/*****   D12 ½Ó¿ÚÃèÊö·ûÖÐ: ³ý¶Ëµã0µÄ¶ËµãË÷ÒýÊýÄ¿  ******/ 
#define NUM_ENDPOINTS	4 
 
/*****   D12 ÅäÖÃÃèÊö·û³¤¶È  ******/ 
#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \ 
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \ 
									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR)) 
 
//(1) ¶Ëµã0×î´ó·Ö×é´óС 
#define EP0_TX_FIFO_SIZE   16 
#define EP0_RX_FIFO_SIZE   16 
#define EP0_PACKET_SIZE    16 
 
//(2) ¶Ëµã1 ½ÓÊÕ»ò·¢Ë͵Ä×î´óÐÅÏ¢°ü´óС 
#define EP1_TX_FIFO_SIZE   16 
#define EP1_RX_FIFO_SIZE   16 
#define EP1_PACKET_SIZE    16 
 
//(3) ¶Ëµã1 ½ÓÊÕ»ò·¢Ë͵Ä×î´óÐÅÏ¢°ü´óС 
#define EP2_TX_FIFO_SIZE   64 
#define EP2_RX_FIFO_SIZE   64 
#define EP2_PACKET_SIZE    64 
 
extern const USB_DEVICE_DESCRIPTOR DeviceDescr; 
extern const USB_DESCRIPTOR usb_descr;