LPC1768的USB-相关结构体定义

发布者:科技火箭最新更新时间:2017-01-12 来源: eefocus关键字: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  结构体定义 引用地址:LPC1768的USB-相关结构体定义

上一篇:LPC1768的USB使用--宏定义
下一篇:LPC1768的usb使用--硬件篇

推荐阅读最新更新时间:2024-03-16 15:30

保护USB的电源开关设计方案
  1  引言   通用串行总线(UniversalSerialBus)使PC机与外部设备的连接变得简单而迅速,随着计算机以及与USB相关便携式设备的发展,USB必将获得更广泛的应用。由于USB具有即插即用的特点,在负载出现异常的瞬间,电源开关会流过数安培的电流,从而对电路造成损坏。   本文设计的USB电源开关采用自举电荷泵,为N型功率管提供2倍于电源的栅驱动电压。在负载出现异常时,过流保护电路能迅速限制功率管电流,以避免热插拔对电路造成损坏。   2  USB开关电路的整体设计思路   图1为USB电源开关的整体设计。其中,VIN为电源输入,VOUT为USB的输出。在负载正常的情况下,由电荷泵产生足够高的栅驱动电压
[嵌入式]
STM32_USB之完全双缓存(包括发送和接收) -- 更新中断处理
STM32的USB双缓存接收代码其实已经可以在ST提供的USB示例代码中找到,只要稍加修改,就可以得到将近1MB的数据接收性能。虽然Datasheet中说明USB发送也同样可以使用双缓存,但并没有示例代码,由于为了测试性能,自己做了一个,测试中没有发现问题,虽然对性能的提升不如在USB接收上实现双缓存那么多。 注意: FreeUserBuffer的作用是切换当前的USB缓存。 1.接收双缓冲: EPX_OUT_Callback中,此代码只是在ST的示例程序的基础上稍加修改,并且不是偶写的,而是一个网友测试的: if(GetENDPOINT(ENDP3) & EP_DTOG_TX) { FreeUserBuff
[单片机]
高速串行连接火爆 推动保障性技术创新和市场发展
随着USB和HDMI等等高速串行接口技术和产品开始向5G等超高传输速度方向发展,与之相配套的相关技术的重要性也日趋突出,并也带来了芯片等行业新的市场机会。如高速串行传输与“传统”并行架构之间的桥接和转换、如何使高速信号更好地传输所需要的信号完整性、更精准的频率控制技术以防止噪声/信号抖动…… 尽管经济危机对许多芯片厂商造成了巨大的影响,但目前高速串行芯片市场却是商机凸显。以高速USB连接市场为例,市场调研机构In-Stat公司的数据表明:目前USB已经成为个人电脑历史上最成功的接口,目前在PC和外设领域内的采用率高达100%;全球已经有超过60亿个USB接口应用,而每年的市场需求达30亿个单位;并将在2013年实现市
[手机便携]
[嵌入式框架][nrf52820][nrf52840] 硬件USB_HID
USB设备(USBD)控制器实现全速USB设备功能,满足2.0版本的USB规范。 这里列出的是USBD的主要特性: 全速度(12mbps)设备完全符合通用串行总线规范修订2.0,包括以下是USB实施者论坛发布的工程更改通知: 上拉/下拉电阻ECN 5V短路耐受要求变更ECN USB设备栈在北欧SDK中可用 集成(芯片上)USB收发器(PHY) 软件控制的芯片上拉在D+ 端点: 两个控制(1 IN, 1 OUT) 14 bulk/interrupt (7 IN, 7 OUT) 两个同步(1in, 1out) 双缓冲等时(ISO)端点(IN/OUT)支持 USB挂起、恢复和远程唤醒支持 每个bulk/中断端点的64字节缓冲区大
[单片机]
[嵌入式框架][nrf52820][nrf52840] 硬件<font color='red'>USB</font>_HID
嵌入式系统中的USB总线接口电路图
  详细阐述了一种用于嵌入式系统中的USB总线接口电路,该电路是基于USB专用芯片CH375实现的,并给出了系统硬件实现和应用程序。实验结果表明,该电路具有成本低、可靠性高等特点,可方便地集成到各种嵌入式系统中。    接口电路设计 :单片机与CH375芯片的连接方式有串行接口和并行接口两种,串行接口连接方式虽然电路连接简单,不用扩展使用外部地址空间,但其要遵循一定的通信协议,软件设计较为复杂,并且传输速度较并行接口的传输速度要慢。对于大多数嵌入式系统应用,因串口资源较少,而且扩展外部地址空间技术非常成熟,故本接口电路采取了并口连接方式。其电路原理图如图2所示。      图2 接口电路图   图2中的X8为USB
[嵌入式]
STM32用串口(USB串口)下载程序的方法
一、 STM32串口下载程序步骤 1)安装《CH340驱动(USB串口驱动)_XP_WIN7共用》 2)打开串口下载软件《STM32F4串口下载软件(FLYMCU)》 3)开发板USB接口连接到电脑USB口,给开发板供电 4)下载软件设置如下;点搜索串口,选择正确的串口号,波特率不用管,选择HEX文件,点开始编程就可以下载了。 二、 硬件连接 USB转串口CH340接线图如下。 ARM串口TXD连接到CH340G的RXD脚,RXD连接到CH340G的TXD脚; CH340是5V供电,可以由USB供电。boot0置1(接到3.3V) ,boot1置0(接地)。 三、说明:对于已加密的STM32芯片可以通过串口下载程序来解锁下
[单片机]
基于ARM的嵌入式USB图像采集与显示方案
  引言   目前市场上大部分的图像采集与处理系统是基于DSP 芯片的,这种图像采集与处理系统成本高、功耗高、体积约束等特点并不适用于一些简单的应用。随着USB 摄像头的普及和基于ARM 的嵌入式芯片的快速发展,将二者结合的便携性越来越受人们欢迎。本文介绍了一种基于三星S3C2440A 芯片的嵌入式USB 摄像头图像采集与显示方案,该方案具有良好的可移植性和扩展性,并且成本、大小和实时处理都能够满足市场需求。   1 系统架构   系统通过当前市场上应用最广泛的中芯微公司生产的zc301p 芯片的USB 摄像头进行图像采集,然后将图像信息传送到ARM 芯片中进行处理,最终通过基于Qt/Embedded 编写的图形显示程序在LC
[单片机]
基于ARM的嵌入式<font color='red'>USB</font>图像采集与显示方案
AuthenTec推出安全性高的指纹传感器
AuthenTec推出业界首款具有最高级安全特性的指纹传感器EntrePad 1610,占位面积小,适合各种便携产品,如笔记本和平板电脑。这款集成 传感器和相关电路为一身的集成方案包括内置USB接口,售价5美元,倍受笔记本制造商青睐。 EntrePad 1610创造了新的安全记录,它采用业界最全面的安全方案,使PC用户免受安全侵犯,如身份盗用、网上诱骗、密码问题及仿造指纹。 EntrePad 1610封装尺寸小,仅为12×5mm,仅比前代产品厚1.2mm或1.96mm。该器件比市场目前的产品小33%。它采用40球栅阵列封装,大批量时售价仅为5美元(仅供参考)。
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved