LPC1768的USB-相关结构体定义
#ifndef __USB_H__
#define __USB_H__
//usb传输数据的宏定义描述
#include "sys.h"
typedef __packed union {
U16 W;
__packed struct {
U8 L;
U8 H;
} WB;
} U16_8;//定义一个16位长度的结构体并且内部分成两个八位,因为wvalue windex经常要做分开处理
//请求类型方向定义
#define REQUEST_HOST_TO_DEVICE 0 //主机到设备的请求
#define REQUEST_DEVICE_TO_HOST 1 //设备到主机的请求
/*请求类型的具体类型定义*/
#define REQUEST_STANDARD 0 //标准请求
#define REQUEST_CLASS 1 //类请求
#define REQUEST_VENDOR 2 //厂商请求
#define REQUEST_RESERVED 3 //保留请求
/* 请求的接受者定义 */
#define REQUEST_TO_DEVICE 0 //请求设备
#define REQUEST_TO_INTERFACE 1 //请求接口
#define REQUEST_TO_ENDPOINT 2 //请求端点
#define REQUEST_TO_OTHER 3 //3-41保留请求
/* 请求类型字节定义*/
typedef __packed union _REQUEST_TYPE {
__packed struct _BM {
U8 Recipient : 5; //请求的对象,接受者 0-4
U8 Type : 2; //请求的类型 5-6
U8 Dir : 1; //请求的方向 7位
} BM;
U8 B;
} REQUEST_TYPE;
/* usb标准请求的请求代码 brequest */
#define USB_REQUEST_GET_STATUS 0 //获取设备状态
#define USB_REQUEST_CLEAR_FEATURE 1 //清除设备特性
#define USB_REQUEST_SET_FEATURE 3 //设置设备特性
#define USB_REQUEST_SET_ADDRESS 5 //设置设备地址(地址是带方向的)
#define USB_REQUEST_GET_DESCRIPTOR 6 //获取描述符
#define USB_REQUEST_SET_DESCRIPTOR 7 //设置描述符
#define USB_REQUEST_GET_CONFIGURATION 8 //获取配置
#define USB_REQUEST_SET_CONFIGURATION 9 //设置配置
#define USB_REQUEST_GET_INTERFACE 10 //获取接口
#define USB_REQUEST_SET_INTERFACE 11 //设置接口
#define USB_REQUEST_SYNC_FRAME 12 //同步帧请求
/* usb获取状态的命令描述 */
#define USB_GETSTATUS_SELF_POWERED 0x01 //电源状态
#define USB_GETSTATUS_REMOTE_WAKEUP 0x02 //远程唤醒设备
#define USB_GETSTATUS_ENDPOINT_STALL 0x01 //端点stall(休眠,暂停,知道下一个setup包发送)
/* usb标准特性请求 */
#define USB_FEATURE_ENDPOINT_STALL 0 //端点暂停
#define USB_FEATURE_REMOTE_WAKEUP 1 //远程唤醒
/* usb setup包的数据定义 */
typedef __packed struct _USB_SETUP_PACKET {
REQUEST_TYPE bmRequestType; //请求类型
U8 bRequest; //请求代码
U16_8 wValue;
U16_8 wIndex;
U16 wLength; //这个数据长度需要注意(获取描述符中过程中,这个代表我们能返回的最大包长度,不得超过这个值)
} USB_SETUP_PACKET;
/* wvalue的低字节 获取描述符的分类 */
#define USB_DEVICE_DESCRIPTOR_TYPE 1 //获取设备描述符
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 2 //获取配置描述符
#define USB_STRING_DESCRIPTOR_TYPE 3 //获取字符串描述符
#define USB_INTERFACE_DESCRIPTOR_TYPE 4 //获取接口描述符
#define USB_ENDPOINT_DESCRIPTOR_TYPE 5 //获取端点描述符
#define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 6 //不知道是啥
#define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE 7 //不知道是啥
#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 8 //不知道是啥
#define USB_OTG_DESCRIPTOR_TYPE 9 //获取otg描述符
#define USB_DEBUG_DESCRIPTOR_TYPE 10 //获取调试描述符
#define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 11 //不知道
/* usb的设备类定义(在描述符中有用) */
#define USB_DEVICE_CLASS_RESERVED 0x00 //保留设备类型
#define USB_DEVICE_CLASS_AUDIO 0x01 //音频设备
#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02 //通讯设备
#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03 //HID设备
#define USB_DEVICE_CLASS_MONITOR 0x04 //驱动设备
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05 //物理接口设备
#define USB_DEVICE_CLASS_POWER 0x06 //电源设备
#define USB_DEVICE_CLASS_PRINTER 0x07 //打印设备
#define USB_DEVICE_CLASS_STORAGE 0x08 //存储设备
#define USB_DEVICE_CLASS_HUB 0x09 //hub设备
#define USB_DEVICE_CLASS_MISCELLANEOUS 0xEF //
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
/* 设备属性值定义*/
#define USB_CONFIG_POWERED_MASK 0x40 //开机状态?
#define USB_CONFIG_BUS_POWERED 0x80 //总线供电
#define USB_CONFIG_SELF_POWERED 0xC0 //自身带电
#define USB_CONFIG_REMOTE_WAKEUP 0x20 //使能远程唤醒
/* 最大总线需求电流(未识别的情况下统一是100MA,识别之后才根据实际配置选择电流,不大于800MA) */
#define USB_CONFIG_POWER_MA(mA) ((mA)/2)
/* 端点地址描述 */
#define USB_ENDPOINT_DIRECTION_MASK 0x80
#define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
#define USB_ENDPOINT_IN(addr) ((addr) | 0x80) //输入端点,最高位应该为1,用于向主机输入数据
/* 端点特性描述*/
#define USB_ENDPOINT_TYPE_MASK 0x03 //端点类型掩码
#define USB_ENDPOINT_TYPE_CONTROL 0x00 //控制端点
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01 //同步端点
#define USB_ENDPOINT_TYPE_BULK 0x02 //批量端点
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03 //中断端点
#define USB_ENDPOINT_SYNC_MASK 0x0C //同步传输类型掩码
#define USB_ENDPOINT_SYNC_NO_SYNCHRONIZATION 0x00
#define USB_ENDPOINT_SYNC_ASYNCHRONOUS 0x04
#define USB_ENDPOINT_SYNC_ADAPTIVE 0x08
#define USB_ENDPOINT_SYNC_SYNCHRONOUS 0x0C
#define USB_ENDPOINT_USAGE_MASK 0x30 //端点用途掩码
#define USB_ENDPOINT_USAGE_DATA 0x00
#define USB_ENDPOINT_USAGE_FEEDBACK 0x10 //反馈类型
#define USB_ENDPOINT_USAGE_IMPLICIT_FEEDBACK 0x20
#define USB_ENDPOINT_USAGE_RESERVED 0x30
/* usb标准设备描述符,一般为18字节 */
typedef __packed struct _USB_DEVICE_DESCRIPTOR {
U8 bLength;//设备描述符长度
U8 bDescriptorType;//设备描述符编号
U16 bcdUSB;//使用的usb版本,小端结构 低字节在前
U8 bDeviceClass;//设备类(可以不定义设备类为0,在配置描述符中定义)
U8 bDeviceSubClass;//设备子类
U8 bDeviceProtocol;//设备protocal
U8 bMaxPacketSize0;//控制端点0的最大长度
U16 idVendor; //VID,厂商ID号码
U16 idProduct;//PID 产品id号码
U16 bcdDevice;//设备的版本
U8 iManufacturer;//厂商字符串的索引值
U8 iProduct; //产品字符串的索引值
U8 iSerialNumber;//产品序列号的索引值
U8 bNumConfigurations;//usb的配置数量
} USB_DEVICE_DESCRIPTOR;
/* USB 2.0 Device Qualifier Descriptor usb2.0的东西,不知道做什么的*/
typedef __packed struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
U8 bLength;
U8 bDescriptorType;
U16 bcdUSB;
U8 bDeviceClass;
U8 bDeviceSubClass;
U8 bDeviceProtocol;
U8 bMaxPacketSize0;
U8 bNumConfigurations;
U8 bReserved;
} USB_DEVICE_QUALIFIER_DESCRIPTOR;
/*usb标准配置描述符*/
typedef __packed struct _USB_CONFIGURATION_DESCRIPTOR {
U8 bLength;//描述符长度
U8 bDescriptorType;//配置描述符的编号
U16 wTotalLength;//配置描述符集合的总长度,包括配置描述符本身、接口描述符、类描述符、端点描述符等
U8 bNumInterfaces;//配置包含的接口数
U8 bConfigurationValue;//配置的值
U8 iConfiguration;//配置的字符串索引
U8 bmAttributes;//设备属性
U8 bMaxPower;//设备需要的最大电流
} USB_CONFIGURATION_DESCRIPTOR;//配置描述符
/* usb标准接口描述符 */
typedef __packed struct _USB_INTERFACE_DESCRIPTOR {
U8 bLength;//接口描述符长度
U8 bDescriptorType;//接口描述符的类型,也就是编号 固定为04
U8 bInterfaceNumber;//该接口的编号
U8 bAlternateSetting;//该接口的备用编号
U8 bNumEndpoints;//接口包含的非0端点数目
U8 bInterfaceClass;//接口使用的类
U8 bInterfaceSubClass;//接口使用的子类
U8 bInterfaceProtocol;//接口使用的协议
U8 iInterface;//接口的字符串索引值
} USB_INTERFACE_DESCRIPTOR;
/* usb标准端点描述符 */
typedef __packed struct _USB_ENDPOINT_DESCRIPTOR {
U8 bLength;//端点描述符长度
U8 bDescriptorType;//端点描述符编号,固定为5
U8 bEndpointAddress;//端点地址,注意输入输出
U8 bmAttributes;//端点特性(是哪一类端点)
U16 wMaxPacketSize;//端点最大包长度
U8 bInterval;//端点查询时间帧时间 usb1.1 一帧1ms
} USB_ENDPOINT_DESCRIPTOR;
/* usb字符串描述符 */
typedef __packed struct _USB_STRING_DESCRIPTOR {
U8 bLength;//字符串描述符长度
U8 bDescriptorType;//字符串描述符类型,固定为3
U16 bString/*[]*/;//描述字符串的数组,指针?
} USB_STRING_DESCRIPTOR;
/* USB通用描述符(usb描述符通常都是以这样的格式开头 长度+描述符类型(描述符类型上面有))*/
typedef __packed struct _USB_COMMON_DESCRIPTOR {
U8 bLength;
U8 bDescriptorType;
} USB_COMMON_DESCRIPTOR;
#endif /* __USB_H__ */
#ifndef __HID_H__
#define __HID_H__
/* HID Subclass Codes */
#define HID_SUBCLASS_NONE 0x00
#define HID_SUBCLASS_BOOT 0x01
/* HID Protocol Codes */
#define HID_PROTOCOL_NONE 0x00
#define HID_PROTOCOL_KEYBOARD 0x01
#define HID_PROTOCOL_MOUSE 0x02
/* HID Descriptor Types */
#define HID_HID_DESCRIPTOR_TYPE 0x21
#define HID_REPORT_DESCRIPTOR_TYPE 0x22
#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23
/* HID Descriptor */
typedef __packed struct _HID_DESCRIPTOR
{
U8 bLength;
U8 bDescriptorType;
U16 bcdHID;
U8 bCountryCode;
U8 bNumDescriptors;
/* Array of one or more descriptors */
__packed struct _HID_DESCRIPTOR_LIST
{
U8 bDescriptorType;
U16 wDescriptorLength;
}DescriptorList[1];
} HID_DESCRIPTOR;
/* HID Request Codes */
#define HID_REQUEST_GET_REPORT 0x01
#define HID_REQUEST_GET_IDLE 0x02
#define HID_REQUEST_GET_PROTOCOL 0x03
#define HID_REQUEST_SET_REPORT 0x09
#define HID_REQUEST_SET_IDLE 0x0A
#define HID_REQUEST_SET_PROTOCOL 0x0B
/* HID Report Types */
#define HID_REPORT_INPUT 0x01
#define HID_REPORT_OUTPUT 0x02
#define HID_REPORT_FEATURE 0x03
/* Usage Pages */
#define HID_USAGE_PAGE_UNDEFINED 0x00
#define HID_USAGE_PAGE_GENERIC 0x01
#define HID_USAGE_PAGE_SIMULATION 0x02
#define HID_USAGE_PAGE_VR 0x03
#define HID_USAGE_PAGE_SPORT 0x04
#define HID_USAGE_PAGE_GAME 0x05
#define HID_USAGE_PAGE_DEV_CONTROLS 0x06
#define HID_USAGE_PAGE_KEYBOARD 0x07
#define HID_USAGE_PAGE_LED 0x08
#define HID_USAGE_PAGE_BUTTON 0x09
#define HID_USAGE_PAGE_ORDINAL 0x0A
#define HID_USAGE_PAGE_TELEPHONY 0x0B
#define HID_USAGE_PAGE_CONSUMER 0x0C
#define HID_USAGE_PAGE_DIGITIZER 0x0D
#define HID_USAGE_PAGE_UNICODE 0x10
#define HID_USAGE_PAGE_ALPHANUMERIC 0x14
/* ... */
/* Generic Desktop Page (0x01) */
#define HID_USAGE_GENERIC_POINTER 0x01
#define HID_USAGE_GENERIC_MOUSE 0x02
#define HID_USAGE_GENERIC_JOYSTICK 0x04
#define HID_USAGE_GENERIC_GAMEPAD 0x05
#define HID_USAGE_GENERIC_KEYBOARD 0x06
#define HID_USAGE_GENERIC_KEYPAD 0x07
#define HID_USAGE_GENERIC_X 0x30
#define HID_USAGE_GENERIC_Y 0x31
#define HID_USAGE_GENERIC_Z 0x32
#define HID_USAGE_GENERIC_RX 0x33
#define HID_USAGE_GENERIC_RY 0x34
#define HID_USAGE_GENERIC_RZ 0x35
#define HID_USAGE_GENERIC_SLIDER 0x36
#define HID_USAGE_GENERIC_DIAL 0x37
#define HID_USAGE_GENERIC_WHEEL 0x38
#define HID_USAGE_GENERIC_HATSWITCH 0x39
#define HID_USAGE_GENERIC_COUNTED_BUFFER 0x3A
#define HID_USAGE_GENERIC_BYTE_COUNT 0x3B
#define HID_USAGE_GENERIC_MOTION_WAKEUP 0x3C
#define HID_USAGE_GENERIC_VX 0x40
#define HID_USAGE_GENERIC_VY 0x41
#define HID_USAGE_GENERIC_VZ 0x42
#define HID_USAGE_GENERIC_VBRX 0x43
#define HID_USAGE_GENERIC_VBRY 0x44
#define HID_USAGE_GENERIC_VBRZ 0x45
#define HID_USAGE_GENERIC_VNO 0x46
#define HID_USAGE_GENERIC_SYSTEM_CTL 0x80
#define HID_USAGE_GENERIC_SYSCTL_POWER 0x81
#define HID_USAGE_GENERIC_SYSCTL_SLEEP 0x82
#define HID_USAGE_GENERIC_SYSCTL_WAKE 0x83
#define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU 0x84
#define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU 0x85
#define HID_USAGE_GENERIC_SYSCTL_APP_MENU 0x86
#define HID_USAGE_GENERIC_SYSCTL_HELP_MENU 0x87
#define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT 0x88
#define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT 0x89
#define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT 0x8A
#define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT 0x8B
#define HID_USAGE_GENERIC_SYSCTL_MENU_UP 0x8C
#define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN 0x8D
/* ... */
/* Simulation Controls Page (0x02) */
/* ... */
#define HID_USAGE_SIMULATION_RUDDER 0xBA
#define HID_USAGE_SIMULATION_THROTTLE 0xBB
/* ... */
/* Virtual Reality Controls Page (0x03) */
/* ... */
/* Sport Controls Page (0x04) */
/* ... */
/* Game Controls Page (0x05) */
/* ... */
/* Generic Device Controls Page (0x06) */
/* ... */
/* Keyboard/Keypad Page (0x07) */
/* Error "keys" */
#define HID_USAGE_KEYBOARD_NOEVENT 0x00
#define HID_USAGE_KEYBOARD_ROLLOVER 0x01
#define HID_USAGE_KEYBOARD_POSTFAIL 0x02
#define HID_USAGE_KEYBOARD_UNDEFINED 0x03
/* Letters */
#define HID_USAGE_KEYBOARD_aA 0x04
#define HID_USAGE_KEYBOARD_zZ 0x1D
/* Numbers */
#define HID_USAGE_KEYBOARD_ONE 0x1E
#define HID_USAGE_KEYBOARD_ZERO 0x27
#define HID_USAGE_KEYBOARD_RETURN 0x28
#define HID_USAGE_KEYBOARD_ESCAPE 0x29
#define HID_USAGE_KEYBOARD_DELETE 0x2A
/* Funtion keys */
#define HID_USAGE_KEYBOARD_F1 0x3A
#define HID_USAGE_KEYBOARD_F12 0x45
#define HID_USAGE_KEYBOARD_PRINT_SCREEN 0x46
/* Modifier Keys */
#define HID_USAGE_KEYBOARD_LCTRL 0xE0
#define HID_USAGE_KEYBOARD_LSHFT 0xE1
#define HID_USAGE_KEYBOARD_LALT 0xE2
#define HID_USAGE_KEYBOARD_LGUI 0xE3
#define HID_USAGE_KEYBOARD_RCTRL 0xE4
#define HID_USAGE_KEYBOARD_RSHFT 0xE5
#define HID_USAGE_KEYBOARD_RALT 0xE6
#define HID_USAGE_KEYBOARD_RGUI 0xE7
#define HID_USAGE_KEYBOARD_SCROLL_LOCK 0x47
#define HID_USAGE_KEYBOARD_NUM_LOCK 0x53
#define HID_USAGE_KEYBOARD_CAPS_LOCK 0x39
/* ... */
/* LED Page (0x08) */
#define HID_USAGE_LED_NUM_LOCK 0x01
#define HID_USAGE_LED_CAPS_LOCK 0x02
#define HID_USAGE_LED_SCROLL_LOCK 0x03
#define HID_USAGE_LED_COMPOSE 0x04
#define HID_USAGE_LED_KANA 0x05
#define HID_USAGE_LED_POWER 0x06
#define HID_USAGE_LED_SHIFT 0x07
#define HID_USAGE_LED_DO_NOT_DISTURB 0x08
#define HID_USAGE_LED_MUTE 0x09
#define HID_USAGE_LED_TONE_ENABLE 0x0A
#define HID_USAGE_LED_HIGH_CUT_FILTER 0x0B
#define HID_USAGE_LED_LOW_CUT_FILTER 0x0C
#define HID_USAGE_LED_EQUALIZER_ENABLE 0x0D
#define HID_USAGE_LED_SOUND_FIELD_ON 0x0E
#define HID_USAGE_LED_SURROUND_FIELD_ON 0x0F
#define HID_USAGE_LED_REPEAT 0x10
#define HID_USAGE_LED_STEREO 0x11
#define HID_USAGE_LED_SAMPLING_RATE_DETECT 0x12
#define HID_USAGE_LED_SPINNING 0x13
#define HID_USAGE_LED_CAV 0x14
#define HID_USAGE_LED_CLV 0x15
#define HID_USAGE_LED_RECORDING_FORMAT_DET 0x16
#define HID_USAGE_LED_OFF_HOOK 0x17
#define HID_USAGE_LED_RING 0x18
#define HID_USAGE_LED_MESSAGE_WAITING 0x19
#define HID_USAGE_LED_DATA_MODE 0x1A
#define HID_USAGE_LED_BATTERY_OPERATION 0x1B
#define HID_USAGE_LED_BATTERY_OK 0x1C
#define HID_USAGE_LED_BATTERY_LOW 0x1D
#define HID_USAGE_LED_SPEAKER 0x1E
#define HID_USAGE_LED_HEAD_SET 0x1F
#define HID_USAGE_LED_HOLD 0x20
#define HID_USAGE_LED_MICROPHONE 0x21
#define HID_USAGE_LED_COVERAGE 0x22
#define HID_USAGE_LED_NIGHT_MODE 0x23
#define HID_USAGE_LED_SEND_CALLS 0x24
#define HID_USAGE_LED_CALL_PICKUP 0x25
#define HID_USAGE_LED_CONFERENCE 0x26
#define HID_USAGE_LED_STAND_BY 0x27
#define HID_USAGE_LED_CAMERA_ON 0x28
#define HID_USAGE_LED_CAMERA_OFF 0x29
#define HID_USAGE_LED_ON_LINE 0x2A
#define HID_USAGE_LED_OFF_LINE 0x2B
#define HID_USAGE_LED_BUSY 0x2C
#define HID_USAGE_LED_READY 0x2D
#define HID_USAGE_LED_PAPER_OUT 0x2E
#define HID_USAGE_LED_PAPER_JAM 0x2F
#define HID_USAGE_LED_REMOTE 0x30
#define HID_USAGE_LED_FORWARD 0x31
#define HID_USAGE_LED_REVERSE 0x32
#define HID_USAGE_LED_STOP 0x33
#define HID_USAGE_LED_REWIND 0x34
#define HID_USAGE_LED_FAST_FORWARD 0x35
#define HID_USAGE_LED_PLAY 0x36
#define HID_USAGE_LED_PAUSE 0x37
#define HID_USAGE_LED_RECORD 0x38
#define HID_USAGE_LED_ERROR 0x39
#define HID_USAGE_LED_SELECTED_INDICATOR 0x3A
#define HID_USAGE_LED_IN_USE_INDICATOR 0x3B
#define HID_USAGE_LED_MULTI_MODE_INDICATOR 0x3C
#define HID_USAGE_LED_INDICATOR_ON 0x3D
#define HID_USAGE_LED_INDICATOR_FLASH 0x3E
#define HID_USAGE_LED_INDICATOR_SLOW_BLINK 0x3F
#define HID_USAGE_LED_INDICATOR_FAST_BLINK 0x40
#define HID_USAGE_LED_INDICATOR_OFF 0x41
#define HID_USAGE_LED_FLASH_ON_TIME 0x42
#define HID_USAGE_LED_SLOW_BLINK_ON_TIME 0x43
#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME 0x44
#define HID_USAGE_LED_FAST_BLINK_ON_TIME 0x45
#define HID_USAGE_LED_FAST_BLINK_OFF_TIME 0x46
#define HID_USAGE_LED_INDICATOR_COLOR 0x47
#define HID_USAGE_LED_RED 0x48
#define HID_USAGE_LED_GREEN 0x49
#define HID_USAGE_LED_AMBER 0x4A
#define HID_USAGE_LED_GENERIC_INDICATOR 0x4B
/* Button Page (0x09) */
/* There is no need to label these usages. */
/* Ordinal Page (0x0A) */
/* There is no need to label these usages. */
/* Telephony Device Page (0x0B) */
#define HID_USAGE_TELEPHONY_PHONE 0x01
#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE 0x02
#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS 0x03
#define HID_USAGE_TELEPHONY_HANDSET 0x04
#define HID_USAGE_TELEPHONY_HEADSET 0x05
#define HID_USAGE_TELEPHONY_KEYPAD 0x06
#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON 0x07
/* ... */
/* Consumer Page (0x0C) */
#define HID_USAGE_CONSUMER_CONTROL 0x01
/* ... */
/* and others ... */
/* HID Report Item Macros */
/* Main Items */
#define HID_Input(x) 0x81,x
#define HID_Output(x) 0x91,x
#define HID_Feature(x) 0xB1,x
#define HID_Collection(x) 0xA1,x
#define HID_EndCollection 0xC0
/* Data (Input, Output, Feature) */
#define HID_Data 0<<0
#define HID_Constant 1<<0
#define HID_Array 0<<1
#define HID_Variable 1<<1
#define HID_Absolute 0<<2
#define HID_Relative 1<<2
#define HID_NoWrap 0<<3
#define HID_Wrap 1<<3
#define HID_Linear 0<<4
#define HID_NonLinear 1<<4
#define HID_PreferredState 0<<5
#define HID_NoPreferred 1<<5
#define HID_NoNullPosition 0<<6
#define HID_NullState 1<<6
#define HID_NonVolatile 0<<7
#define HID_Volatile 1<<7
/* Collection Data */
#define HID_Physical 0x00
#define HID_Application 0x01
#define HID_Logical 0x02
#define HID_Report 0x03
#define HID_NamedArray 0x04
#define HID_UsageSwitch 0x05
#define HID_UsageModifier 0x06
/* Global Items */
#define HID_UsagePage(x) 0x05,x
#define HID_UsagePageVendor(x) 0x06,x,0xFF
#define HID_LogicalMin(x) 0x15,x
#define HID_LogicalMinS(x) 0x16,(x&0xFF),((x>>8)&0xFF)
#define HID_LogicalMinL(x) 0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_LogicalMax(x) 0x25,x
#define HID_LogicalMaxS(x) 0x26,(x&0xFF),((x>>8)&0xFF)
#define HID_LogicalMaxL(x) 0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_PhysicalMin(x) 0x35,x
#define HID_PhysicalMinS(x) 0x36,(x&0xFF),((x>>8)&0xFF)
#define HID_PhysicalMinL(x) 0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_PhysicalMax(x) 0x45,x
#define HID_PhysicalMaxS(x) 0x46,(x&0xFF),((x>>8)&0xFF)
#define HID_PhysicalMaxL(x) 0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_UnitExponent(x) 0x55,x
#define HID_Unit(x) 0x65,x
#define HID_UnitS(x) 0x66,(x&0xFF),((x>>8)&0xFF)
#define HID_UnitL(x) 0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_ReportSize(x) 0x75,x
#define HID_ReportID(x) 0x85,x
#define HID_ReportCount(x) 0x95,x
#define HID_Push 0xA0
#define HID_Pop 0xB0
/* Local Items */
#define HID_Usage(x) 0x09,x
#define HID_UsageMin(x) 0x19,x
#define HID_UsageMax(x) 0x29,x
#endif /* __HID_H__ */
LPC1768的USB-相关结构体定义的更多相关文章
- ARM单片机的头文件如何用结构体定义地址
下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...
- Swift类和结构体定义-备
Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...
- C#中结构体定义并转换字节数组
最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换:由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一 ...
- C语言结构体定义的几种方法
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义
原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...
- #pragma pack 在BITMAP结构体定义中的使用
BITMAP位图文件主要分为如下3个部分: 块名称 对应Windows结构体定义 大小(Byte) 文件信息头 BITMAPFILEHEADER 14 位图信息头 BITMAPINFOHEADER 4 ...
- go 结构体定义和结构体指针
结构体一个结构体(`struct`)就是一个字段的集合. 将来要使用它向java .C# 中的class 有相同的地位 struct 可以用来值传递 同时可以通过引用传递参数(地址) java C# ...
- 2018-3-4-dotnet-设计规范-·-结构体定义
title author date CreateTime categories dotnet 设计规范 · 结构体定义 lindexi 2018-03-04 17:48:44 +0800 2018-2 ...
随机推荐
- 初识Ubuntu
刚刚装好bantu 16.10就遇到了好多问题,记录一下 一.卸载一些用不到的软件. 1.su认证失败 sudo passwd //输入命令,然后修改密码即可 2.卸载libreoffice sudo ...
- Listview的OnScrollListener的滑动监听实现分页加载
//---------------主布局文件---------------------------- <ListView android:layout_width="fill_pare ...
- 《JavaScript高级程序设计》读书笔记 ---变量
ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据.换句话说,每个变量仅仅是一个用于保存值的占位符而已.定义变量时要使用var 操作符(注意var 是一个关键字),后 ...
- 4--OC --合成存取器方法
1. 从OC 2.0开始就已经可以自动生成设置函数方法和获取函数方法(统称为存取器方法). 什么是 @property 和 @synthesize ? @property 和 @synthesize ...
- 编译Android各种错误
第一次编译成功,第二次出现Value for 'keystore' is not valid. It must resolve to a single path 打开proj.android\ant. ...
- Mysql主从备份、主主备份
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- IDL 实现 EOF(经验正交函数分析)
关于EOF详细介绍请wiki http://en.wikipedia.org/wiki/Empirical_orthogonal_functions或者Google之. 与PCA一样,EOF也是遥感多 ...
- Java 堆内存(Heap)[转]
将jvm内存很不错的文章,转自 堆(Heap)又被称为:优先队列(Priority Queue),是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复 ...
- Yii config 配置
Yii2 配置文件 常用配置总结 <?php // 主配置文件 $config = array( 'modules' => array( 'gii' => array( 'class ...
- Excel 帮助类
using System; using System.Collections.Generic; using System.Data; using System.Drawing; using Syste ...