📄 d12_value.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 + -