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

📄 usb.h

📁 PDIUSBD12 HID固件源代码
💻 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 + -