📄 usb.h
字号:
/******************************************************************************
**
** Filename: Usb.h
**
** System: RISC
**
** Platform: dsPIC33F
**
** Description:
******************************************************************************/
#ifndef __USB_H__
#define __USB_H__
void usb_bus_reset(void);
void usb_bus_suspend(void);
void endp0_out(void);
void endp0_in(void);
void endp2_out(void);
void endp2_in(void);
#define BYTE unsigned char
#define WORD unsigned int
typedef struct {
unsigned BIT0:1;
unsigned BIT1:1;
unsigned BIT2:1;
unsigned BIT3:1;
unsigned BIT4:1;
unsigned BIT5:1;
unsigned BIT6:1;
unsigned BIT7:1;
unsigned BIT8:1;
unsigned BIT9:1;
unsigned BIT10:1;
unsigned BIT11:1;
unsigned BIT12:1;
unsigned BIT13:1;
unsigned BIT14:1;
unsigned BIT15:1;
} USB_FLAGS_REGISTER;
USB_FLAGS_REGISTER usb_flags_Register;
#define USB__bus_reset usb_flags_Register.BIT0
#define USB_suspend usb_flags_Register.BIT1
#define USB_remote_wakeup usb_flags_Register.BIT2
#define USB_int_isr usb_flags_Register.BIT3
#define USB_not_end usb_flags_Register.BIT4
#define USB_usb_idle usb_flags_Register.BIT5
#define USB_usb_busy usb_flags_Register.BIT6
#define USB_setup_packet_in usb_flags_Register.BIT7
#define USB_setup_packet_out usb_flags_Register.BIT8
#define USB_set_addr usb_flags_Register.BIT9
#define USB_usb_endp0_in usb_flags_Register.BIT10
#define USB_usb_endp2_in usb_flags_Register.BIT11
#define USB_usb_endp2_out usb_flags_Register.BIT12
union
{
struct
{
unsigned BIT0:1;
unsigned BIT1:1;
unsigned BIT2:1;
unsigned BIT3:1;
unsigned BIT4:1;
unsigned BIT5:1;
unsigned BIT6:1;
unsigned BIT7:1;
unsigned BIT8:1;
unsigned BIT9:1;
unsigned BIT10:1;
unsigned BIT11:1;
unsigned BIT12:1;
unsigned BIT13:1;
unsigned BIT14:1;
unsigned BIT15:1;
}Interrupt_RegisterBits;
unsigned int Interrupt_Register;
}Flag;
#define Interrupt_control_out_port Flag.Interrupt_RegisterBits.BIT0
#define Interrupt_control_in_port Flag.Interrupt_RegisterBits.BIT1
#define Interrupt_port_out_1 Flag.Interrupt_RegisterBits.BIT2
#define Interrupt_port_in_1 Flag.Interrupt_RegisterBits.BIT3
#define Interrupt_main_out_port Flag.Interrupt_RegisterBits.BIT4
#define Interrupt_main_in_port Flag.Interrupt_RegisterBits.BIT5
#define Interrupt_bus_reset Flag.Interrupt_RegisterBits.BIT6
#define Interrupt_suspend_change Flag.Interrupt_RegisterBits.BIT7
#define Interrupt_DMA_EOT Flag.Interrupt_RegisterBits.BIT8
union
{
struct
{
unsigned BIT0:1;
unsigned BIT1:1;
unsigned BIT2:1;
unsigned BIT3:1;
unsigned BIT4:1;
unsigned BIT5:1;
unsigned BIT6:1;
unsigned BIT7:1;
}Last_Status_RegisterBits;
unsigned char Last_Status_Register;
}Flag1;
#define Last_Status_successful Flag1.Last_Status_RegisterBits.BIT0
#define Last_Status_error_code0 Flag1.Last_Status_RegisterBits.BIT1
#define Last_Status_error_code1 Flag1.Last_Status_RegisterBits.BIT2
#define Last_Status_error_code2 Flag1.Last_Status_RegisterBits.BIT3
#define Last_Status_error_code3 Flag1.Last_Status_RegisterBits.BIT4
#define Last_Status_setup_packet Flag1.Last_Status_RegisterBits.BIT5
#define Last_Status_data_1 Flag1.Last_Status_RegisterBits.BIT6
#define Last_Status_prestatus_not_read Flag1.Last_Status_RegisterBits.BIT7
// 定义标准的描述符类型,也就是USB分配的各种描述符的编号,即bDescriptorType 字段的值
#define DEVICE_DESCRIPTOR 0x01 //设备描述符
#define CONFIGURATION_DESCRIPTOR 0x02 //配置描述符
#define STRING_DESCRIPTOR 0x03 //字符串描述符
#define INTERFACE_DESCRIPTOR 0x04 //接口描述符
#define ENDPOINT_DESCRIPTOR 0x05 //端点描述符
#define CLASS_DESCRIPTOR 0x21 //类描述符
#define REPORT_DESCRIPTOR 0x22 //报告描述符
//定义标准的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 //同步帧请求
//定义特性选择器
#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 //中断传输
//定义标准的设备描述符结构
typedef struct _DEVICE_DCESCRIPTOR_STRUCT
{
BYTE blength; //设备描述符的字节数大小
BYTE bDescriptorType; //设备描述符类型编号
WORD bcdUSB; //USB版本号
BYTE bDeviceClass; //USB分配的设备类代码
BYTE bDeviceSubClass; //USB分配的子类代码
BYTE bDeviceProtocol; //USB分配的设备协议代码
BYTE bMaxPacketSize0; //端点0的最大包大小
WORD idVendor; //厂商编号
WORD idProduct; //产品编号
WORD bcdDevice; //设备出厂编号
BYTE iManufacturer; //设备厂商字符串的索引
BYTE iProduct; //描述产品字符串的索引
BYTE iSerialNumber; //描述设备序列号字符串的索引
BYTE bNumConfigurations; //可能的配置数量
}
DEVICE_DESCRIPTOR_STRUCT, * pDEVICE_DESCRIPTOR_STRUCT;
typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
{
//定义标准的配置描述符结构
BYTE bConfigLength; //配置描述符的字节数大小
BYTE bConfigDescriptorType; //配置描述符类型编号
WORD wTotalLength; //此配置返回的所有数据大小
BYTE bNumInterfaces; //此配置所支持的接口数量
BYTE bConfigurationValue; //Set_Configuration命令所需要的参数值
BYTE iConfiguration; //描述该配置的字符串的索引值
BYTE bmConfigAttributes; //供电模式的选择
BYTE MaxPower; //设备从总线提取的最大电流
//定义标准的接口描述符结构
BYTE bInterfaceLength; //接口描述符的字节数大小
BYTE bInterfaceDescriptorType; //接口描述符的类型编号
BYTE bInterfaceNumber; //该接口的编号
BYTE bAlternateSetting; //备用的接口描述符编号
BYTE bNumEndpoints; //该接口使用的端点数,不包括端点0
BYTE bInterfaceClass; //接口类型
BYTE bInterfaceSubClass; //接口子类型
BYTE bInterfaceProtocol; //接口遵循的协议
BYTE iInterface; //描述该接口的字符串索引值
//定义标准的类描述符结构
BYTE bClassLength; //类描述符的字节数大小
BYTE bClassDescriptorType; //类描述符类型编号
BYTE bBcdHIDL; //HID类发布号
BYTE bBcdHIDH; //
BYTE bCountryCode; //本地国家代码
BYTE bNumDescriptors; //HID描述符要遵循的号(1)
BYTE bDescriptorType; //报告描述符类型(HID)
BYTE bDescriptorLengthL; //总报告描述符总长度
BYTE bDescriptorLengthH; //
//定义标准的端点描述符结构
BYTE b1Legth; //端点描述符字节数大小
BYTE b1DescriptorType; //端点描述符类型编号
BYTE b1EndpointAddress; //端点地址及输入输出属性
BYTE b1mAttributes; //端点的传输类型属性
BYTE b1MaxPacketSizeL; //端点收、发的最大包大小
BYTE b1MaxPacketSizeH; //
BYTE b1Interval; //主机查询端点的时间间隔
//定义标准的端点描述符结构
BYTE b2Legth; //端点描述符字节数大小
BYTE b2DescriptorType; //端点描述符类型编号
BYTE b2EndpointAddress; //端点地址及输入输出属性
BYTE b2mAttributes; //端点的传输类型属性
BYTE b2MaxPacketSizeL; //端点收、发的最大包大小
BYTE b2MaxPacketSizeH; //
BYTE b2Interval; //主机查询端点的时间间隔
}
CON_INT_ENDP_DESCRIPTOR_STRUCT;
typedef struct _REPORT_DESCRIPTOR_STRUCT
{
BYTE bReportParameter[34]; //
}
REPORT_DESCRIPTOR_STRUCT;
//一个字符串描述符结构
typedef struct _STRING_DESCRIPTOR_STRUCT
{
BYTE bLength; //字符串描述符的字节数大小
BYTE bDescriptorType; //字符串描述符类型编号
BYTE SomeDesriptor[36]; //UNICODE编码的字符串
}
STRING_DESCRIPTOR_STRUCT, * pSTRING_DESCRIPTOR_STRUCT;
//标准设备请求命令结构
typedef struct _REQUESTCMD
{
BYTE bmRequestType; //请求命令类型
BYTE bRequest; //请求命令代码
WORD wValue; //命令信息
WORD wIndex; //索引信息
WORD wLength; //传输数据大小
}
REQUESTCMD, * pREQUESTCMD;
//setup_packet缓冲区
#define MAX_CONTROL_DATA_SIZE 16
typedef struct _control_data_buff
{
REQUESTCMD DeviceRequest; //USB设备请求
unsigned int wLength;
unsigned int wCount;
unsigned char *pData;
unsigned char dataBuffer[MAX_CONTROL_DATA_SIZE];
}CONTROL_DATA_BUFF;
#endif
/*-----------------------------------------------------------------------------
End of Usb.h
-----------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -