📄 chap_9.h
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: Chap_9.h
** Last modified Date: 2005-8-6
** Last Version: V1.0
** Descriptions: chap_9.c头文件, 实现USB1.1协议
** The header file of chap_9.c, realize USB1.1 protocol
**------------------------------------------------------------------------------------------------------
** Created by: 郑明远 MingYuan Zheng
** Created date: 2005-8-6
** Version: V1.0
** Descriptions: 初始版本 The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#ifndef __CHAP_9_H__
#define __CHAP_9_H__
#include "usbdevconfig.h"
#define MSB(x) (((x) >> 8) & 0xFF)
#define MAX_ENDPOINTS (INT8U)0x3
#define USB_GETSTATUS_SELF_POWERED 0x01 /* the value of Get Status */
#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02 /* ...command */
#define USB_IDLE 0 /* USB Status value */
#define USB_TRANSMIT 1
#define USB_RECEIVE 2
#if 1
#if 1
/*********************************************************************************************************
USB device descriptor structure
*********************************************************************************************************/
#ifndef __USB_DEVICE_DESCRIPTOR_TYPE_
#define __USB_DEVICE_DESCRIPTOR_TYPE_
typedef struct __tagUSB_DEVICE_DESCRIPTOR {
USB_INT8U bLength;
USB_INT8U bDescriptorType;
USB_INT8U bcdUSB0;
USB_INT8U bcdUSB1;
USB_INT8U bDeviceClass;
USB_INT8U bDeviceSubClass;
USB_INT8U bDeviceProtocol;
USB_INT8U bMaxPacketSize0;
USB_INT8U idVendor0;
USB_INT8U idVendor1;
USB_INT8U idProduct0;
USB_INT8U idProduct1;
USB_INT8U bcdDevice0;
USB_INT8U bcdDevice1;
USB_INT8U iManufacturer;
USB_INT8U iProduct;
USB_INT8U iSerialNumber;
USB_INT8U bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
#endif
#endif
/*********************************************************************************************************
USB configuration descriptor structure
*********************************************************************************************************/
#ifndef __USB_CONFIGURATION_DESCRIPTOR_TYPE_
#define __USB_CONFIGURATION_DESCRIPTOR_TYPE_
typedef struct __tagUSB_CONFIGURATION_DESCRIPTOR {
USB_INT8U bLength;
USB_INT8U bDescriptorType;
USB_INT8U wTotalLength0;
USB_INT8U wTotalLength1;
USB_INT8U bNumInterfaces;
USB_INT8U bConfigurationValue;
USB_INT8U iConfiguration;
USB_INT8U bmAttributes;
USB_INT8U MaxPower;
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
#endif
/*********************************************************************************************************
USB interface descriptor structure
*********************************************************************************************************/
#ifndef __USB_INTERFACE_DESCRIPTOR_TYPE_
#define __USB_INTERFACE_DESCRIPTOR_TYPE_
typedef struct __tagUSB_INTERFACE_DESCRIPTOR {
USB_INT8U bLength;
USB_INT8U bDescriptorType;
USB_INT8U bInterfaceNumber;
USB_INT8U bAlternateSetting;
USB_INT8U bNumEndpoints;
USB_INT8U bInterfaceClass;
USB_INT8U bInterfaceSubClass;
USB_INT8U bInterfaceProtocol;
USB_INT8U iInterface;
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
#endif
/*********************************************************************************************************
USB endpoint descriptor structure
*********************************************************************************************************/
#ifndef __USB_ENDPOINT_DESCRIPTOR_TYPE_
#define __USB_ENDPOINT_DESCRIPTOR_TYPE_
typedef struct __tagUSB_ENDPOINT_DESCRIPTOR {
USB_INT8U bLength;
USB_INT8U bDescriptorType;
USB_INT8U bEndpointAddress;
USB_INT8U bmAttributes;
USB_INT8U wMaxPacketSize0;
USB_INT8U wMaxPacketSize1;
USB_INT8U bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
#endif
/*********************************************************************************************************
USB string descriptor structure
*********************************************************************************************************/
#ifndef __USB_STRING_DESCRIPTOR_TYPE_
#define __USB_STRING_DESCRIPTOR_TYPE_
typedef struct __tagUSB_STRING_DESCRIPTOR {
USB_INT8U bLength;
USB_INT8U bDescriptorType;
USB_INT8U bString[1];
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
#endif
/*********************************************************************************************************
USB OTG descriptor structure
*********************************************************************************************************/
#if 1
#ifndef __USB_OTG_DESCRIPTOR_TYPE_
#define __USB_OTG_DESCRIPTOR_TYPE_
typedef struct __tagUSB_OTG_DESCRIPTOR {
USB_INT8U bLength;
USB_INT8U bDescriptorType;
USB_INT8U bmAttributes;
} USB_OTG_DESCRIPTOR, *PUSB_OTG_DESCRIPTOR;
#endif
#endif
#endif
/*
*********************************************************************************************
* LPC23xx USB various descriptor members value
*/
/*********** LPC23xx USB various descriptor structure collect *********************/
typedef struct _USB_DESCRIPTOR {
USB_CONFIGURATION_DESCRIPTOR ConfigDescr; //configuration descriptor
USB_INTERFACE_DESCRIPTOR InterfaceDescr; //interface descriptor
USB_ENDPOINT_DESCRIPTOR EP1_TXDescr; //logic endpoint 1 IN descriptor
USB_ENDPOINT_DESCRIPTOR EP1_RXDescr; //logic endpoint 1 OUT descriptor
USB_ENDPOINT_DESCRIPTOR EP2_TXDescr; //logic endpoint 2 IN descriptor
USB_ENDPOINT_DESCRIPTOR EP2_RXDescr; //logic endpoint 2 OUT descriptor
} USB_DESCRIPTOR, *PUSB_DESCRIPTOR;
/***** In LPC23xx USB descriptor, the physical endpoint number except for logic enpoint 0 ******/
#define NUM_ENDPOINTS 4
/***** LPC23xx USB descriptor collect length ******/
#define CONFIG_DESCRIPTOR_LENGTH sizeof(USB_CONFIGURATION_DESCRIPTOR) \
+ sizeof(USB_INTERFACE_DESCRIPTOR) \
+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
//(1) logic endpoint 0 MaxPacketSize
#define EP0_TX_FIFO_SIZE 64
#define EP0_RX_FIFO_SIZE 64
#define EP0_PACKET_SIZE 64
//(2) logic endpoint 1 MaxPacketSize
#define EP1_TX_FIFO_SIZE 16
#define EP1_RX_FIFO_SIZE 16
#define EP1_PACKET_SIZE 16
//(3) logic endpoint 2 MaxPacketSize
#define EP2_TX_FIFO_SIZE 64
#define EP2_RX_FIFO_SIZE 64
#define EP2_PACKET_SIZE 64
#include "..\COMMON\Descriptor.h"
extern const USB_DEVICE_DESCRIPTOR DeviceDescr;
extern const USB_DESCRIPTOR usb_descr;
//*************************************************************************
// Chap_9.c used structure
//*************************************************************************
typedef struct _device_request
{
INT8U bmRequestType;
INT8U bRequest;
INT16U wValue;
INT16U wIndex;
INT16U wLength;
} DEVICE_REQUEST;
/*********** control transfer structure ************/
#define MAX_CONTROLDATA_SIZE 64
typedef struct _control_xfer
{
DEVICE_REQUEST DeviceRequest;
INT16U wLength;
INT16U wCount;
INT8U *pData;
INT8U dataBuffer[MAX_CONTROLDATA_SIZE];
} CONTROL_XFER;
//*************************************************************************
// USB standard device request service program
//*************************************************************************
void get_status(void);
void clear_feature(void);
void set_feature(void);
void set_address(void);
void get_descriptor(void);
void get_configuration(void);
void set_configuration(void);
void get_interface(void);
void set_interface(void);
void reserved(void);
void stall_ep0(void);
void ep0_txdone(void);
void ep0_rxdone(void);
void init_unconfig(void);
void init_config(void);
void single_transmit(INT8U * pData, INT8U len);
void code_transmit(INT8U * pRomData, INT16U len);
void control_handler(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -