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

📄 d12_value.h

📁 我改了一部分别人的USB,原来的不方便看逻辑
💻 H
字号:
#ifndef __D12_VALUE_H__
#define __D12_VALUE_H__
#include "mytype.h"

#define ENDPOINT_NUMBER           2
//*************************************************
//端点号定义
#define CONTROL_POINT_OUT        0x00
#define CONTROL_POINT_IN         0x80
#define POINT_1_OUT              0x01
#define POINT_1_IN               0x81
#define MAIN_POINT_OUT           0x02
#define MAIN_POINT_IN            0x82
//*************************************************
//*************************************************
//初始化命令
#define Set_Address              0xD0
#define Set_Endpoint_Enable      0xD8
#define Set_Mode                 0xF3
#define Read_ID                  0xFD
#define Set_DMA                  0xFB
//*************************************************

//*************************************************
//数据流命令
#define Read_Interrupt_Register  0xF4
#define Select_EndPoint          0X00
#define Select_Endpoint_C_OUT    0X00
#define Select_Endpoint_C_IN     0X01
#define Select_Endpoint_1_OUT    0X02
#define Select_Endpoint_1_IN     0X03
#define Select_Endpoint_2_OUT    0X04
#define Select_Endpoint_2_IN     0X05
#define Read_Last_Status         0X40
#define Read_Last_Status_C_OUT   0X40
#define Read_Last_Status_C_IN    0X41
#define Read_Last_Status_1_OUT   0X42
#define Read_Last_Status_1_IN    0X43
#define Read_Last_Status_2_OUT   0X44
#define Read_Last_Status_2_IN    0X45
#define Read_Buffer              0XF0
#define Write_Buffer              0XF0
#define Set_Endpoint_Status_C_OUT 0X40
#define Set_Endpoint_Status_C_IN  0X41
#define Set_Endpoint_Status_1_OUT 0X42
#define Set_Endpoint_Status_1_IN  0X43
#define Set_Endpoint_Status_2_OUT 0X44
#define Set_Endpoint_Status_2_IN  0X45
#define Ack_Setup                 0XF1
#define Clear_Buffer              0XF2
#define Validate_Buffer           0XFA
//*************************************************

//*************************************************
//普通命令
#define Send_Resume               0XF6
#define Read_Current_Frame_Number 0XF5
//*************************************************
//*************************************************
//一些数据的定义
#define Endpoint_Enable           0X01
#define Endpoint_Disenable        0X00

#define Mode0_and_no_connect      0X04
#define Mode1_and_no_connect      0X44
#define Mode2_and_no_connect      0X84
#define Mode3_and_no_connect      0XC4
#define Mode0_and_connect         0X14
#define Mode1_and_connect         0X54
#define Mode2_and_connect         0X94
#define Mode3_and_connect         0XD4
#define Mode_Set_secend_byte      0X8B

#define D12_INT_ENDP0OUT		0x01
#define D12_INT_ENDP0IN			0x02
#define D12_INT_ENDP1OUT		0x04
#define D12_INT_ENDP1IN			0x08
#define D12_INT_ENDP2OUT		0x10
#define D12_INT_ENDP2IN			0x20
#define D12_INT_BUSRESET		0x40
#define D12_INT_SUSPENDCHANGE	0x80
#define D12_INT_EOT				0x0100

#define USB_REQUEST_TYPE_MASK    (uint8)0x60
#define USB_STANDARD_REQUEST     (uint8)0x00
#define USB_CLASS_REQUEST        (uint8)0x20
#define USB_VENDOR_REQUEST       (uint8)0x40

//(4) USB 请求
#define USB_REQUEST_MASK         (uint8)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)
//(1) 接收方: D4...D0 
#define USB_RECIPIENT             0x1F
#define USB_RECIPIENT_DEVICE      0x00
#define USB_RECIPIENT_INTERFACE   0x01
#define USB_RECIPIENT_ENDPOINT    0x02

#define MAX_ENDPOINTS              0x3
#define D12_STALL		     		0x02
	//*******************************************************
	// 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
/*****   D12 接口描述符中: 除端点0的端点索引数目  ******/
#define NUM_ENDPOINTS	4
/*****   D12 配置描述符长度  ******/
#define CONFIG_DESCRIPTOR_LENGTH    sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+ sizeof(INTERFACE_DESCRIPTOR_STRUCT)+ (NUM_ENDPOINTS * sizeof(ENDPOINT_DESCRIPTOR_STRUCT))  
								 

// 定义标准的描述符类型,也就是USB分配的各种描述符的编号,即bDescriptorType 字段的值

#define DEVICE_DESCRIPTOR               0x01  //设备描述符
#define CONFIGURATION_DESCRIPTOR        0x02  //配置描述符
#define STRING_DESCRIPTOR               0x03  //字符串描述符
#define INTERFACE_DESCRIPTOR            0x04  //接口描述符
#define ENDPOINT_DESCRIPTOR             0x05  //端点描述符
#define HID_DESCRIPTOR                  0x21  //HID描述符
#define REPORT_DESCRIPTOR               0x22  //报告描述符
#define PHYSICAL_DESCRIPTOR             0x23  //物理描述符
//类特殊接口描述符类型
#define CS_INTERFACE_DESCRIPTOR         0x24
//定义标准的USB请求命令,即USB分配的各种请求的编号,即bRequest字段的值

#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  //同步帧请求

//定义USB HID特定命令请求
#define GET_REPORT                      0x01  //获取报告
#define GET_IDLE                        0x02  //获取空闲状态
#define GET_PROTOCOL                    0x03  //获取协议
#define SET_REPORT                      0x09  //设置报告
#define SET_IDLE                        0x0A  //设置空闲
#define SET_PROTOCOL                    0x0B  //设置协议

//定义Abstract Control Model Requests码
#define SEND_ENCAPSULATED_COMMAND       0x00
#define GET_ENCAPSULATED_RESPONSE       0x01
#define SET_COMM_FEATURE                0x02
#define GET_COMM_FEATURE                0x03
#define CLEAR_COMM_FEATURE              0x04
#define SET_LINE_CODING                 0x20
#define GET_LINE_CODING                 0x21
#define SET_CONTROL_LINE_STATE          0x22
#define SEND_BREAK                      0x23

//定义Abstract Control Model Notifications码
#define NETWORK_CONNECTION              0x00
#define RESPONSE_AVAILABLE              0x01
#define SERIAL_STATE                    0x20

#define D12_SETUPPACKET		        	(uint8)0x20

//定义特性选择器

#define ENDPOINT_HALT                   0x00  //端点的禁止特性
#define DEVICE_REMOTE_WAKEUP            0x01  //设备的远程唤醒特性


//使用的端点数

//#define Number_Endpoint               0x05  //端点数量为5


//定义的端点类型
#define ENDPOINT_TYPE_CONTROL           0x00  //控制传输
#define ENDPOINT_TYPE_ISOCHRONOUS       0x01  //同步传输
#define ENDPOINT_TYPE_BULK              0x02  //批量传输
#define ENDPOINT_TYPE_INTERRUPT         0x03  //中断传输

#define USB_IDLE           0
#define USB_TRANSMIT       1
#define USB_RECEIVE        2


//常用参数
#define MAX_CONTROL_DATA_SIZE          16
#define EP0_PACKET_SIZE                16

#define SWAP16(x)  ((((uint16)(x))<<8)|(((uint16)(x))>>8))

//取一个整数的低字节 
#define LSB(x) ((uint8)(x))

//取一个整数的高字节
#define MSB(x) ((uint8)(((uint16)(x))>>8))  



typedef union                                         //中断寄存器
{
 uint8 value[2];
 struct 
  {
   uint8 control_out_port  :1;
   uint8 control_in_port   :1;
   uint8 port_out_1        :1;
   uint8 port_in_1         :1;
   uint8 main_out_port     :1;
   uint8 main_in_port      :1;
   uint8 bus_reset         :1;
   uint8 suspend_change    :1;
   uint8 DMA_EOT           :1;
   uint8 not_use           :7;
  }Status;
}INT_REG;
typedef union                                          //程序标志位
{
uint16 value;
struct 
{
 uint8 bus_reset        :1;
 uint8 suspend          :1;
 uint8 setup_packet  	:1;         	//收到SETUP包
 uint8 remote_wakeup    :1;
 uint8 int_isr          :1;
 uint8 not_end          :1;
 uint8 usb_idle         :1;
 uint8 usb_busy         :1;
 uint8 control_state    : 2;	//控制端点处理标志
													//0: IDLE	   空闲状态
													//1: TRANSMIT  数据发送状态
													//2: RECEIVE   数据接收状态
 uint8 set_addr         :1;
 uint8 usb_endp0_in     :1;
 uint8 usb_endp2_in     :1;
 uint8 usb_endp2_out    :1;
}Status;
}USB_FLAGS;



typedef union                                    //端点最后处理状态
{
 uint8 value;
 struct
 {
  uint8 successful          :1;
  uint8 error_code          :4;
  uint8 setup_packet        :1;
  uint8 data_1              :1;
  uint8 prestatus_not_read  :1;
 }Status;
}LAST_STATUS;
//第九章节数据类型 

//定义标准的设备描述符结构

typedef struct _DEVICE_DCESCRIPTOR_STRUCT
{
 uint8 blength;                               //设备描述符的字节数大小
 uint8 bDescriptorType;	                      //设备描述符类型编号
 uint16 bcdUSB;                                //USB版本号
 uint8 bDeviceClass;                          //USB分配的设备类代码
 uint8 bDeviceSubClass;                       //USB分配的子类代码
 uint8 bDeviceProtocol;                       //USB分配的设备协议代码
 uint8 bMaxPacketSize0;                       //端点0的最大包大小
 uint16 idVendor;                              //厂商编号
 uint16 idProduct;                             //产品编号
 uint16 bcdDevice;                             //设备出厂编号
 uint8 iManufacturer;                         //设备厂商字符串的索引
 uint8 iProduct;                              //描述产品字符串的索引
 uint8 iSerialNumber;                         //描述设备序列号字符串的索引
 uint8 bNumConfigurations;                    //可能的配置数量
}
DEVICE_DESCRIPTOR_STRUCT, * pDEVICE_DESCRIPTOR_STRUCT;


//定义标准的配置描述符结构

typedef struct _CONFIGURATION_DESCRIPTOR_STRUCT
{
 uint8 bLength;                               //配置描述符的字节数大小
 uint8 bDescriptorType;                       //配置描述符类型编号
 uint16 wTotalLength;                          //此配置返回的所有数据大小
 uint8 bNumInterfaces;                        //此配置所支持的接口数量
 uint8 bConfigurationValue;                   //Set_Configuration命令所需要的参数值
 uint8 iConfiguration;                        //描述该配置的字符串的索引值
 uint8 bmAttributes;                          //供电模式的选择
 uint8 MaxPower;                              //设备从总线提取的最大电流
}
CONFIGURATION_DESCRIPTOR_STRUCT, * pCONFIGURATION_DESCRIPTOR_STRUCT;


//定义标准的接口描述符结构

typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
 uint8 bLength;                               //接口描述符的字节数大小
 uint8 bDescriptorType;                       //接口描述符的类型编号
 uint8 bInterfaceNumber;                      //该接口的编号
 uint8 bAlternateSetting;                     //备用的接口描述符编号
 uint8 bNumEndpoints;                         //该接口使用的端点数,不包括端点0
 uint8 bInterfaceClass;                       //接口类型
 uint8 bInterfaceSubClass;                    //接口子类型
 uint8 bInterfaceProtocol;                    //接口遵循的协议
 uint8 iInterface;                            //描述该接口的字符串索引值
}
INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;


//定义标准的端点描述符结构

typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
 uint8 bLength;                                //端点描述符字节数大小
 uint8 bDescriptorType;                       //端点描述符类型编号
 uint8 bEndpointAddress;                      //端点地址及输入输出属性
 uint8 bmAttributes;                          //端点的传输类型属性
 uint16 wMaxPacketSize;                        //端点收、发的最大包大小
 uint8 bInterval;                             //主机查询端点的时间间隔
}
ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;


//HID描述符中的下级描述符号
typedef struct _HID_SUB_DESCRIPTOR_STRUCT
{
 uint8 bDescriptorType;    //下级描述符的类型编号
 uint16 wDescriptorLength;  //下级描述符的长度
}
HID_SUB_DESCRIPTOR_STRUCT,*pHID_SUB_DESCRIPTOR_STRUCT;

#define NUM_SUB_DESCRIPTORS 1

//定义HID描述符结构

typedef struct _HID_DESCRIPTOR_STRUCT
{
 uint8 bLength;
 uint8 bDescriptorType;
 uint16 bcdHID;
 uint8 bCountryCode;
 uint8 bNumDescriptors;
 HID_SUB_DESCRIPTOR_STRUCT HidSubDescriptors[NUM_SUB_DESCRIPTORS]; 
}
HID_DESCRIPTOR_STRUCT,*pHID_DESCRIPTOR_STRUCT;


//一个字符串描述符结构

typedef struct _STRING_DESCRIPTOR_STRUCT
{
 uint8 bLength;                                //字符串描述符的字节数大小
 uint8 bDescriptorType;                        //字符串描述符类型编号
 uint8 SomeDesriptor[36];                      //UNICODE编码的字符串
}
STRING_DESCRIPTOR_STRUCT, * pSTRING_DESCRIPTOR_STRUCT;


//标准设备请求命令结构

typedef struct _REQUESTCMD
{
 uint8 bmRequestType;                         //请求命令类型
 uint8 bRequest;                              //请求命令代码
 uint16 wValue;                                //命令信息
 uint16 wIndex;                                //索引信息
 uint16 wLength;                               //传输数据大小
}
REQUESTCMD, * pREQUESTCMD;

typedef struct _control_data_buff
{
 REQUESTCMD DeviceRequest;                    //USB设备请求
 uint16 wLength;
 uint16 wCount;
 uint8 * pData;
 uint8 dataBuffer[MAX_CONTROL_DATA_SIZE];
}CONTROL_DATA_BUFF;




#endif


⌨️ 快捷键说明

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