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