📄 ggpdiusbd12.h
字号:
/********************************************************************
TITLE: GGPDIUSBD12.H
AUTHOR: GanGuoqiang
DISCRIPTION:
NOTE:
DATE : 2009.1.26
***********************************************************************/
#ifndef __GGPDIUSBD12_H__
#define __GGPDIUSBD12_H__
extern D12init();
//extern ISR_CONSULT();
//extern pc_flag;//union USBPC_FLAG
//extern int_flag;//union USBINT_FLAG
//extern lst_flag;//union USBLST_FLAG
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/***********************************************************************************/
/***********************************************************************************/
#define MAX_CONTROLDATA_SIZE 16
#define USB_ENDPOINT_DIRECTION_MASK 0x80 //设备请求类型,传输方向 D7 1000,0000b
//#define USB_IDLE 0
//#define USB_TRANSMIT 1
//#define USB_RECEIVE 2
//#define D12_STALL 0x02
/***********************************************************************************/
/*****************************************************************************************/
#define MAX_ENDPOINTS 0x05//
#define EP1_PACKET_SIZE 0x10
#define EP0_PACKET_SIZE 0x10
#define EP2_PACKET_SIZE 0x40
/***************************************************************************************/
/*****************************bRequest STANDARE REQUEST********************************/
/***************************************************************************************/
#define GET_STATUS 0x00 //获取状态请求
#define CLEAR_FEATURE 0x01 //清除特性请求
#define SET_FEATURE 0x03 //设置特性请求
#define SET_ADDRESS 0x05 //设置地址请求
#define GET_DESCRIPTOR 0x06 //获取描述符请求
#define SET_DESCRIPTOR 0x07 //设置描述符请求
#define GET_CONFIGURATION 0x08 //获取配置请求
#define SET_CONFIGURATION 0x09 //设置配置请求
#define GET_INTERFACE 0x0A //获取接口请求
#define SET_INTERFACE 0x0B //设置接口请求
#define SYNCH_FRAME 0x0C //同步帧请求****
/***************************************************************************************/
#define USB_STANDARD_REQUEST 0x00 //5,6位的定义
#define USB_TYPE_REQUEST 0x20
#define USB_VENDOR_REQUEST 0x40
#define USB_RESERVED_REQUEST 0x60
/***************************************************************************************/
/*****************************bDescriptorType ****************************************/
/***************************************************************************************/
#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 //端点描述符编号
/***********************************************************************************/
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/********************************flag bits**********************************************/
union USBPC_FLAG //typedef 程序标志位
{
unsigned short Register;
struct
{
unsigned char bus_reset :1;
unsigned char suspend :1;
/* unsigned char remote_wakeup :1;*/
unsigned char setup_packet :1;//receive setup packet
/*
unsigned char control_state :2;//control endpoit(endpoint 0)status in service
//0:IDEL
//1:TRANSMIT
*/ //2:RECEIVE
unsigned char usb_idle :1;
unsigned char control_in_endp :1;
unsigned char control_out_endp :1;
unsigned char configuration :1;//0:haven't configed...1:configed/* */
unsigned char ep1buf_full :1;//endpoint 1output dual buffer full
unsigned char ep2buf_full :1;
}bits;
}pc_flag;//;//
union USBINT_FLAG //typedef中断寄存器
{
unsigned char Register[2];
struct
{
unsigned char control_out_endp :1;
unsigned char control_in_endp :1;
unsigned char endp_1_out :1;
unsigned char endp_1_in :1;
unsigned char main_out_endp :1;
unsigned char main_in_endp :1;
unsigned char bus_reset :1;
unsigned char suspend :1;
unsigned char DMA_EOT :1;
unsigned char reserved :7;
}bits;
}int_flag;//;//
union USBLST_FLAG //typedef 端点最后处理状态
{
unsigned char Register;
struct
{
unsigned char successful :1;
unsigned char error_code :4;
unsigned char setup_packet :1;
unsigned char data1_ok :1;
unsigned char prestatus_not_read :1;
}bits;
}lst_flag;//;//
/********************************************************************************************************/
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/********************************structure**************************************************************/
/********************************USB DEVICE REQUEST*********************************************************
DISCRIPTION: USING DEFAUT PIPE CONTROL TRANSFER,THE REQUEST AND PARAMETER SENT WITH THE SETUP PACKET
DATE : 2009.1.21
**********************************************************************************************************/
typedef struct _device_request
{
unsigned char bmRequestType;//D7:IO(0 ALWAYS OUT); D65:0.STANDARD/1.CLASS/2.VENDOR/3.RESERVED D4-0:0.DEVICE/1.INTERFACE/2.ENDPOINT/3.OTHER/RESERVED
unsigned char bRequest; //
unsigned char wValue; //WORD SIZE FIELD
unsigned short wIndex; //INDEX OR OFFSET;IDENTIFY ENDP/INTERFACE bmRequest SPECIFIED
//D7:IO;D3-0:ENDPOINT NUM
//D7-0:INTERFACE NUM
unsigned short wLength; //NUM OF BYTES IF DATA STAGE FOLLOWED/DISPITE IO PATTERN
//unsigned short
}DEVICE_REQUEST;
typedef struct _control_xfer
{
DEVICE_REQUEST DeviceRequest; //usb request structure,8bytes
unsigned short wLength; //xfer total bytes
unsigned short wCount; //xfer bytes counter
unsigned char *pData; //xferring data's pointer
unsigned char dataBuffer[MAX_CONTROLDATA_SIZE];//requested data 16
}CONTROL_XFER;
/******************************************************************************/
/********************************************************************
initial data
***********************************************************************/
typedef struct _DEVICE_DCESCRIPTOR_STRUCT
{
unsigned char blength; //设备描述符的字节数大小
unsigned char bDescriptorType; //设备描述符类型编号
unsigned short bcdUSB; //USB版本号
unsigned char bDeviceClass; //USB分配的设备类代码
unsigned char bDeviceSubClass; //USB分配的子类代码
unsigned char bDeviceProtocol; //USB分配的设备协议代码
unsigned char bMaxPacketSize0; //端点0的最大包大小
unsigned short idVendor; //厂商编号
unsigned short idProduct; //产品编号
unsigned short bcdDevice; //设备出厂编号
unsigned char iManufacturer; //设备厂商字符串的索引
unsigned char iProduct; //描述产品字符串的索引
unsigned char iSerialNumber; //描述设备序列号字符串的索引
unsigned char bNumConfigurations; //可能的配置数量
}
USB_DEVICE_DESCRIPTOR;
typedef struct _CONFIGURATION_DESCRIPTOR_STRUCT
{
unsigned char bLength; //配置描述符的字节数大小
unsigned char bDescriptorType; //配置描述符类型编号
unsigned short wTotalLength; //此配置返回的所有数据大小
unsigned char bNumInterfaces; //此配置所支持的接口数量
unsigned char bConfigurationValue; //Set_Configuration命令所需要的参数值
unsigned char iConfiguration; //描述该配置的字符串的索引值
unsigned char bmAttributes; //供电模式的选择
unsigned char MaxPower; //设备从总线提取的最大电流
}
USB_CONFIGURATION_DESCRIPTOR;
typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
unsigned char bLength; //接口描述符的字节数大小
unsigned char bDescriptorType; //接口描述符的类型编号
unsigned char bInterfaceNumber; //该接口的编号
unsigned char bAlternateSetting; //备用的接口描述符编号
unsigned char bNumEndpoints; //该接口使用的端点数,不包括端点0
unsigned char bInterfaceClass; //接口类型
unsigned char bInterfaceSubClass; //接口子类型
unsigned char bInterfaceProtocol; //接口遵循的协议
unsigned char iInterface; //描述该接口的字符串索引值
}
USB_INTERFACE_DESCRIPTOR;
typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
unsigned char bLength; //端点描述符字节数大小
unsigned char bDescriptorType; //端点描述符类型编号
unsigned char bEndpointAddress; //端点地址及输入输出属性
unsigned char bmAttributes; //端点的传输类型属性
unsigned short wMaxPacketSize; //端点收、发的最大包大小
unsigned char bInterval; //主机查询端点的时间间隔
}
USB_ENDPOINT_DESCRIPTOR;
///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
code USB_DEVICE_DESCRIPTOR DeviceDescr=
{
sizeof(USB_DEVICE_DESCRIPTOR),
USB_DEVICE_DESCRIPTOR_TYPE,
SWAP16(0X0110),
0x0dc,//USB_CLASS_CODE_TEST_CLASS_DEVICE,
0,0,
EP0_PACKET_SIZE,
SWAP16(0X0471),
SWAP16(0X0666),
SWAP16(0X0100),
0,0,0,
1
};
code USB_CONFIGURATION_DESCRIPTOR ConfigDescr=
{
sizeof(USB_CONFIGURATION_DESCRIPTOR),
USB_CONFIGURATION_DESCRIPTOR_TYPE,
SWAP16(0x2e), //CONFIG_DESCRIPTOR_LENGTH
1,
1,
0,
0XA0,
0X32
};
code USB_INTERFACE_DESCRIPTOR InterfaceDescr=
{
sizeof(USB_INTERFACE_DESCRIPTOR),
USB_INTERFACE_DESCRIPTOR_TYPE,
0,
0,
MAX_ENDPOINTS,
0xdc,//USB_CLASS_CODE_TEST_CLASS_DEVICE,
0x0a0,//USB_SUBCLASS_CODE_TEST_CLASS_D12,
0x0b0,//USB_PROTOCOL_CODE_TEST_CLASS_D12,
0
};
code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr= //
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0X81,
0x03,//USB_ENDPOINT_TYPE_INTERRUPT,
SWAP16(EP1_PACKET_SIZE),
10
};
code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr=//
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0X1,
0x03,//USB_ENDPOINT_TYPE_INTERRUPT,
SWAP16(EP1_PACKET_SIZE),
10
};
code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr= //
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0X82,
0x02,//USB_ENDPOINT_TYPE_BULK,
SWAP16(EP2_PACKET_SIZE),
10
};
code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr= //
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0X2,
0x02,//USB_ENDPOINT_TYPE_BULK,
SWAP16(EP2_PACKET_SIZE),
0x0a
};
/******************************************************************************/
#endif
/**/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -