📄 dc_struct.h
字号:
#include "packet.h"
//----------------------------------------------
#ifndef _DC_STRUCT_H
#define _DC_STRUCT_H
#define DEBUG
// Standard Chapter 9 definition
//----------------------------------------------
// Standard Request Codes
#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_CONFIG 0x08
#define SET_CONFIG 0x09
#define GET_INTERFACE 0x0a
#define SET_INTERFACE 0x0b
#define SYNCH_FRAME 0x0c
// Descriptor Types
#define DEVICE 0x01
#define CONFIGURATION 0x02
#define STRING 0x03
#define INTERFACE 0x04
#define ENDPOINT 0x05
#define DEVICE_DES_LEN 18
#define CONFIG_DES_LEN 9
#define INTERFACE_DES_LEN 9
#define ENDPOINT_DES_LEN 7
#define CTRLEP 0
#define ISOEP 1
#define BULKEP 2
#define INTEP 3
#define USB_IDLE 0
#define USB_TRANSMIT 1
#define USB_RECEIVE 2
#define EPNUMBER 2
#define EP0MaxSize 64
#define TOTALLENGTH /*34*/9+9+8*EPNUMBER
//#define TOTALLENGTH (9+9+8*7)
#define SWAP(data) (data%256)|(data/256)<<8
#define MAX_CONTROLDATA_SIZE 64/2
#define EP0_PACKETSIZE 64/2
// Request
typedef struct device_request
{
unsigned char bmRequestType;
unsigned char bRequest;
unsigned long wValue;
unsigned long wIndex;
unsigned long wLength;
} USB_Device_Request;
/*
* Standard USB Descriptor Definitions
* Sec 9.6, page 261
*/
typedef struct std_dev_desc { /* Sec9.6.1, Table 9-8, p262 */
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short bcdUSB;
unsigned char bDeviceClass;
unsigned char bDeviceSubClass;
unsigned char bDeviceProtocol;
unsigned char bMaxPacketSize0;
unsigned short idVendor;
unsigned short idProduct;
unsigned short bcdDevice;
unsigned char iManufacturer;
unsigned char iProduct;
unsigned char iSerialNumber;
unsigned char bNumConfigurations;
}
std_dev_descriptor;
typedef struct dev_qual_desc { /* Sec 9.6.2, Table 9-9, p264 */
/* This is for Hi-speed */
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short bcdUSB;
unsigned char bDeviceClass;
unsigned char bDeviceSubClass;
unsigned char bDeviceProtocol;
unsigned char bMaxPacketSize0;
unsigned char bNumConfigurations;
}
dev_qualifier_descriptor;
typedef struct std_conf_desc { /* Sec9.6.3, Table 9-10, p265 */
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short wTotalLength;
// unsigned long wTotalLength; //??when defined unsigned short,the actual size is 8 word,instead of 9 word
unsigned char bNumInterfaces;
unsigned char bConfigurationValue;
unsigned char iConfiguration;
unsigned char bmAttributes;
unsigned char bMaxPower;
}
std_config_descriptor;
typedef struct std_if_desc { /* Sec9.6.5, Table 9-12, p268 */
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bInterfaceNumber;
unsigned char bAlternateSetting;
unsigned char bNumEndpoints;
unsigned char bInterfaceClass;
unsigned char bInterfaceSubClass;
unsigned char bInterfaceProtocol;
unsigned char iInterface;
}
std_interface_descriptor;
typedef struct std_ep_desc { /* Sec9.6.6, Table 9-13, p269 */
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bEndpointAddress;
unsigned char bmAttributes;
unsigned short wMaxPacketSize;
unsigned char bInterval;
}
std_endpoint_descriptor;
typedef struct std_str_desc { /* Sec9.6.7, Table 9-15, p273 */
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short bString; // bString[ (254) >> 1 ];
}
std_string_descriptor;
typedef struct std_conf_descall {
std_config_descriptor configdesc;
std_interface_descriptor interfacedesc;
std_endpoint_descriptor endpointdesc[8];
}
std_config_descriptorall;
/*----------------------------------------*
EP1:out,sigle buffer,isochronous,1023 buffer size.
EP2:in, sigle buffer,isochronous,1023 bytes buffer size.
EP3:out,sigle buffer, interrupt, 16 bytes buffer size
EP4:in, sigle buffer, interrupt, 16 bytes buffer size
EP5:out,sigle buffer, bulk , 64 bytes buffer size
EP6:in, sigle buffer, bulk, 64 bytes buffer size
EP7:out,double buffer, bulk , 64 bytes buffer size
EP8:in, double buffer, bulk, 64 bytes buffer size
*---------------------------------------*/
//??是否需要配置端点0?
typedef struct _SETUP_PKG {
USB_Device_Request DeviceRequest;
unsigned long wLength;
unsigned long wCount;
unsigned char *pData;
unsigned char dataBuffer[MAX_CONTROLDATA_SIZE];
} SETUP_PKG;
typedef struct _DATA_INFO {
struct _flags
{
unsigned char bus_reset; //1:总线挂起复位标志
unsigned char resume; //1:indicates that a"resume" state was detected
unsigned char suspend; //挂起改变标志
unsigned char sof; //SOF标志
unsigned char psof; //pseudo SOF标志
unsigned char busstatus; //current bus status
unsigned char setup_packet; //收到setup包
unsigned char remote_wakeup; //远程唤醒标志
unsigned char in_isr; //usb中断服务标志
unsigned char control_state; //控制端点处理状态 0:IDLE 空闲状态
// 1:TRANSMIT 数据发送状态
// 2:RECEIVE 数据接收状态
unsigned char configuration; //配置标志(0:未配置;1:已配置)
unsigned char ep1_rxflag; //端点1收到数据标志
unsigned char ep2_rxdone; //端点2收到数据标志
unsigned char ep3_rxflag; //端点3收到数据标志
unsigned char ep4_rxdone; //端点4收到数据标志
unsigned char ep5_rxflag; //端点5收到数据标志
unsigned char ep6_rxdone; //端点6收到数据标志
unsigned char ep7_rxflag; //端点7收到数据标志
unsigned char ep8_rxdone; //端点8收到数据标志
unsigned char ep1_txbuffull; //端点1发送缓冲区满
unsigned char ep2_txbuffull; //端点2发送缓冲区满
unsigned char ep3_txbuffull; //端点3发送缓冲区满
unsigned char ep4_txbuffull; //端点4发送缓冲区满
unsigned char ep5_txbuffull; //端点5发送缓冲区满
unsigned char ep6_txbuffull; //端点6发送缓冲区满
unsigned char ep7_txbuffull; //端点7发送缓冲区满
unsigned char ep8_txbuffull; //端点8发送缓冲区满
}bits;
unsigned short value;
}INFOFLAGS;
extern SETUP_PKG SetupPkg;
extern INFOFLAGS InfoFlags;
extern std_endpoint_descriptor StdEp1Desc1362;
extern std_endpoint_descriptor StdEp2Desc1362;
extern std_endpoint_descriptor StdEp3Desc1362;
extern std_endpoint_descriptor StdEp4Desc1362;
extern std_endpoint_descriptor StdEp5Desc1362;
extern std_endpoint_descriptor StdEp6Desc1362;
extern std_endpoint_descriptor StdEp7Desc1362;
extern std_endpoint_descriptor StdEp8Desc1362;
extern std_dev_descriptor StdDevDesc1362;
extern std_config_descriptor StdConfigDesc1362;
extern std_interface_descriptor StdInterfaceDesc1362;
extern std_config_descriptorall StdConfigDescAlltemp;
extern unsigned char BUFFER[64];
extern EP1_DATA_PAKEAGE EP1_DataPkg;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -