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

📄 usb.h

📁 基于S3C2440在ADS环境下开发的USB读写程序。
💻 H
字号:
/****************************************************************
 NAME: usb.h
 DESC: definitions(USB data structure) for USB setup operation.
       Because It's h/w independent file, it may be used without any change in future.
       Reuse the source of S3C2400X u24xmon 
 HISTORY:
 Apr.07.2000:purnnamu: first release. 
 ****************************************************************/
#ifndef __USB_H__
#define __USB_H__

//************************
//       Endpoint 0      
//************************

// Standard bmRequestTyje (Direction) 
#define HOST_TO_DEVICE              (0x00)
#define DEVICE_TO_HOST              (0x80)    

// Standard bmRequestType (Type) 
#define STANDARD_TYPE               (0x00)
#define CLASS_TYPE                  (0x20)
#define VENDOR_TYPE                 (0x40)
#define RESERVED_TYPE               (0x60)

// Standard bmRequestType (Recipient) 
#define DEVICE_RECIPIENT            (0)
#define INTERFACE_RECIPIENT         (1)
#define ENDPOINT_RECIPIENT          (2)
#define OTHER_RECIPIENT             (3)

// Feature Selectors 
#define DEVICE_REMOTE_WAKEUP        (1)
#define EP_STALL                    (0)

// Standard Request Codes 
#define GET_STATUS                  (0)
#define CLEAR_FEATURE               (1)
#define SET_FEATURE                 (3)
#define SET_ADDRESS                 (5)
#define GET_DESCRIPTOR              (6)
#define SET_DESCRIPTOR              (7)
#define GET_CONFIGURATION           (8)
#define SET_CONFIGURATION           (9)
#define GET_INTERFACE               (10)
#define SET_INTERFACE               (11)
#define SYNCH_FRAME                 (12)

// Class-specific Request Codes 
#define GET_DEVICE_ID               (0)
#define GET_PORT_STATUS             (1)
#define SOFT_RESET                  (2)

// Descriptor Types
#define DEVICE_TYPE                 (1)
#define CONFIGURATION_TYPE          (2)
#define STRING_TYPE                 (3)
#define INTERFACE_TYPE              (4)
#define ENDPOINT_TYPE               (5)

//configuration descriptor: bmAttributes 
#define CONF_ATTR_DEFAULT	    (0x80) //Spec 1.0 it was BUSPOWERED bit.
#define CONF_ATTR_REMOTE_WAKEUP     (0x20)
#define CONF_ATTR_SELFPOWERED       (0x40)

//endpoint descriptor
#define EP_ADDR_IN		    (0x80)	
#define EP_ADDR_OUT		    (0x00)

#define EP_ATTR_CONTROL		    (0x0)	
#define EP_ATTR_ISOCHRONOUS	    (0x1)
#define EP_ATTR_BULK		    (0x2)
#define EP_ATTR_INTERRUPT	    (0x3)	


//string descriptor
#define LANGID_US_L 		    (0x09)  
#define LANGID_US_H 		    (0x04)


struct USB_SETUP_DATA{
    U8 bmRequestType;    
    U8 bRequest;         
    U8 bValueL;          
    U8 bValueH;          
    U8 bIndexL;          
    U8 bIndexH;          
    U8 bLengthL;         
    U8 bLengthH;         
};



//usb 器件属性
struct USB_DEVICE_DESCRIPTOR{
    U8 bLength;  //描述符的长度
    U8 bDescriptorType;  //描述符类型编号
           
    U8 bcdUSBL;
    U8 bcdUSBH;   //usb版本号
    
    U8 bDeviceClass;    //usb分配的设备类code      
    U8 bDeviceSubClass;     //usb分配的子类code
    U8 bDeviceProtocol;    //usb分配的协议code      
    U8 bMaxPacketSize0;    //endpoint0最大包大小
         
    U8 idVendorL;
    U8 idVendorH;      //厂商编号
    
    U8 idProductL;
    U8 idProductH;     //产品编号
    
    U8 bcdDeviceL;
    U8 bcdDeviceH;      //设备出厂编号
    
    U8 iManufacturer;    //描述厂商字符串的索引
    U8 iProduct;         //描述产品字符串的索引
    U8 iSerialNumber;    //描述设备序列号字符串的索引
    U8 bNumConfigurations;  //可能的配置数量
};


struct USB_CONFIGURATION_DESCRIPTOR{
    U8 bLength;    //描述符的长度
    U8 bDescriptorType; //描述符类型编号
    
    U8 wTotalLengthL;
    U8 wTotalLengthH;   //配置所返回的所有数据的大小
    
    U8 bNumInterfaces;   //配置所支持的接口数
    
    U8 bConfigurationValue; //set_configuration命令所需要的参数值
    U8 iConfiguration;   //描述该配置的字符串的索引值
    U8 bmAttributes;       //供电模式的选择
    U8 maxPower;          //设备从总线提取的最大电流
};
    

struct USB_INTERFACE_DESCRIPTOR{
    U8 bLength;                //描述符的长度
    U8 bDescriptorType;         //描述符类型编号   
    U8 bInterfaceNumber;         //接口编号
    U8 bAlternateSetting; //备用的接口描述符的编号
    U8 bNumEndpoints;     //该接口使用的端点数,不包括端点0
    U8 bInterfaceClass;   //接口类型
    U8 bInterfaceSubClass;   //接口子类型
    U8 bInterfaceProtocol;  //接口所遵循的协议
    U8 iInterface;         //描述该接口的字符串索引值
};


struct USB_ENDPOINT_DESCRIPTOR{
    U8 bLength;           //描述符的长度
    U8 bDescriptorType;        //描述符类型编号     
    U8 bEndpointAddress;    //端点地址:0~3位是端点号,第七位是方向(0-out,1-in)
    U8 bmAttributes;       //端点属性:bit[0:1]的值为00表示控制,01表示同步,02表示批量,03表示中断
   
    U8 wMaxPacketSizeL;
    U8 wMaxPacketSizeH;      //本端点接受或发送的最大信息包的大小
  
    U8 bInterval;             //轮询数据传送端点的时间间隔
    						  //对于批量传送的端点以及控制传送的端点,此域忽略
    						  //对于同步传送的端点,此域必须为1
    						  //对于中断传送的端点,此域值的范围为1~255
};

 struct USB_CONFIGURATION_SET{
     U8 ConfigurationValue;
 };

 struct USB_GET_STATUS{
     U8 Device;
     U8 Interface;
     U8 Endpoint0;
     U8 Endpoint1;
     U8 Endpoint3;
 };

 struct USB_INTERFACE_GET{
     U8 AlternateSetting;
 };


 
#endif /*__USB_H__*/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

⌨️ 快捷键说明

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