#ifndef __USB_HID_KBD_H__
#define __USB_HID_KBD_H__

#include <stdint.h>
#include "include/ch5xx.h"
#include "include/ch5xx_usb.h"


#define KEY_LEFT_CTRL   0x80
#define KEY_LEFT_SHIFT    0x81
#define KEY_LEFT_ALT    0x82
#define KEY_LEFT_GUI    0x83
#define KEY_RIGHT_CTRL    0x84
#define KEY_RIGHT_SHIFT   0x85
#define KEY_RIGHT_ALT   0x86
#define KEY_RIGHT_GUI   0x87

#define KEY_UP_ARROW    0xDA
#define KEY_DOWN_ARROW    0xD9
#define KEY_LEFT_ARROW    0xD8
#define KEY_RIGHT_ARROW   0xD7
#define KEY_BACKSPACE   0xB2
#define KEY_TAB       0xB3
#define KEY_RETURN      0xB0
#define KEY_ESC       0xB1
#define KEY_INSERT      0xD1
#define KEY_DELETE      0xD4
#define KEY_PAGE_UP     0xD3
#define KEY_PAGE_DOWN   0xD6
#define KEY_HOME      0xD2
#define KEY_END       0xD5
#define KEY_CAPS_LOCK   0xC1
#define KEY_F1        0xC2
#define KEY_F2        0xC3
#define KEY_F3        0xC4
#define KEY_F4        0xC5
#define KEY_F5        0xC6
#define KEY_F6        0xC7
#define KEY_F7        0xC8
#define KEY_F8        0xC9
#define KEY_F9        0xCA
#define KEY_F10       0xCB
#define KEY_F11       0xCC
#define KEY_F12       0xCD
#define KEY_F13       0xF0
#define KEY_F14       0xF1
#define KEY_F15       0xF2
#define KEY_F16       0xF3
#define KEY_F17       0xF4
#define KEY_F18       0xF5
#define KEY_F19       0xF6
#define KEY_F20       0xF7
#define KEY_F21       0xF8
#define KEY_F22       0xF9
#define KEY_F23       0xFA
#define KEY_F24       0xFB

enum ConsumerKeycode{
    // Some keys might only work with linux
    CONSUMER_POWER    = 0x30,
    CONSUMER_SLEEP = 0x32,
    
    MEDIA_RECORD = 0xB2,
    MEDIA_FAST_FORWARD    = 0xB3,
    MEDIA_REWIND    = 0xB4,
    MEDIA_NEXT    = 0xB5,
    MEDIA_PREVIOUS    = 0xB6,
    MEDIA_PREV    = 0xB6, // Alias
    MEDIA_STOP    = 0xB7,
    MEDIA_PLAY_PAUSE    = 0xCD,
    MEDIA_PAUSE    = 0xB0,
    
    MEDIA_VOLUME_MUTE    = 0xE2,
    MEDIA_VOL_MUTE = 0xE2, // Alias
    MEDIA_VOLUME_UP    = 0xE9,
    MEDIA_VOL_UP    = 0xE9, // Alias
    MEDIA_VOLUME_DOWN    = 0xEA,
    MEDIA_VOL_DOWN    = 0xEA, // Alias
    
    CONSUMER_BRIGHTNESS_UP = 0x006F,
    CONSUMER_BRIGHTNESS_DOWN = 0x0070,
    
    CONSUMER_SCREENSAVER = 0x19e,
    
    CONSUMER_PROGRAMMABLE_BUTTON_CONFIGURATION = 0x182,
    CONSUMER_CONTROL_CONFIGURATION = 0x183,
    CONSUMER_EMAIL_READER    = 0x18A,
    CONSUMER_CALCULATOR    = 0x192,
    CONSUMER_EXPLORER    = 0x194,
    
    CONSUMER_BROWSER_HOME    = 0x223,
    CONSUMER_BROWSER_BACK    = 0x224,
    CONSUMER_BROWSER_FORWARD    = 0x225,
    CONSUMER_BROWSER_REFRESH    = 0x227,
    CONSUMER_BROWSER_BOOKMARKS    = 0x22A,
    
    
    // Consumer_Page_(0x0C)    0x15
    HID_CONSUMER_UNASSIGNED        = 0x00,
    HID_CONSUMER_NUMERIC_KEY_PAD    = 0x02,    // HID type NARY
    HID_CONSUMER_PROGRAMMABLE_BUTTONS    = 0x03,    // HID type NARY
    HID_CONSUMER_MICROPHONE_CA    = 0x04,
    HID_CONSUMER_HEADPHONE_CA    = 0x05,
    HID_CONSUMER_GRAPHIC_EQUALIZER_CA    = 0x06,
    // Reserved    = 0x07-1F
    HID_CONSUMER_PLUS_10    = 0x20,    // HID type OSC
    HID_CONSUMER_PLUS_100    = 0x21,    // HID type OSC
    HID_CONSUMER_AM_SLASH_PM    = 0x22,    // HID type OSC
    // Reserved    = 0x23-3F
    HID_CONSUMER_POWER    = 0x30,    // HID type OOC
    HID_CONSUMER_RESET    = 0x31,    // HID type OSC
    HID_CONSUMER_SLEEP    = 0x32,    // HID type OSC
    HID_CONSUMER_SLEEP_AFTER    = 0x33,    // HID type OSC
    HID_CONSUMER_SLEEP_MODE    = 0x34,    // HID type RTC
    HID_CONSUMER_ILLUMINATION    = 0x35,    // HID type OOC
    HID_CONSUMER_FUNCTION_BUTTONS    = 0x36,    // HID type NARY
    // Reserved    = 0x37-3F
    HID_CONSUMER_MENU    = 0x40,    // HID type OOC
    HID_CONSUMER_MENU_PICK    = 0x41,    // HID type OSC
    HID_CONSUMER_MENU_UP    = 0x42,    // HID type OSC
    HID_CONSUMER_MENU_DOWN    = 0x43,    // HID type OSC
    HID_CONSUMER_MENU_LEFT    = 0x44,    // HID type OSC
    HID_CONSUMER_MENU_RIGHT    = 0x45,    // HID type OSC
    HID_CONSUMER_MENU_ESCAPE    = 0x46,    // HID type OSC
    HID_CONSUMER_MENU_VALUE_INCREASE    = 0x47,    // HID type OSC
    HID_CONSUMER_MENU_VALUE_DECREASE    = 0x48,    // HID type OSC
    // Reserved 0x49-5F
    HID_CONSUMER_DATA_ON_SCREEN    = 0x60,    // HID type OOC
    HID_CONSUMER_CLOSED_CAPTION    = 0x61,    // HID type OOC
    HID_CONSUMER_CLOSED_CAPTION_SELECT    = 0x62,    // HID type OSC
    HID_CONSUMER_VCR_SLASH_TV    = 0x63,    // HID type OOC
    HID_CONSUMER_BROADCAST_MODE    = 0x64,    // HID type OSC
    HID_CONSUMER_SNAPSHOT    = 0x65,    // HID type OSC
    HID_CONSUMER_STILL    = 0x66,    // HID type OSC
    // Reserved 0x67-7F
    HID_CONSUMER_SELECTION    = 0x80,    // HID type NARY
    HID_CONSUMER_ASSIGN_SELECTION    = 0x81,    // HID type OSC
    HID_CONSUMER_MODE_STEP    = 0x82,    // HID type OSC
    HID_CONSUMER_RECALL_LAST    = 0x83,    // HID type OSC
    HID_CONSUMER_ENTER_CHANNEL    = 0x84,    // HID type OSC
    HID_CONSUMER_ORDER_MOVIE    = 0x85,    // HID type OSC
    HID_CONSUMER_CHANNEL    = 0x86,    // HID type LC
    HID_CONSUMER_MEDIA_SELECTION    = 0x87,    // HID type NARY
    HID_CONSUMER_MEDIA_SELECT_COMPUTER    = 0x88,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_TV    = 0x89,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_WWW    = 0x8A,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_DVD    = 0x8B,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_TELEPHONE    = 0x8C,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_PROGRAM_GUIDE    = 0x8D,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_VIDEO_PHONE    = 0x8E,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_GAMES    = 0x8F,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_MESSAGES    = 0x90,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_CD    = 0x91,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_VCR    = 0x92,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_TUNER    = 0x93,    // HID type SEL
    HID_CONSUMER_QUIT    = 0x94,    // HID type OSC
    HID_CONSUMER_HELP    = 0x95,    // HID type OOC
    HID_CONSUMER_MEDIA_SELECT_TAPE    = 0x96,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_CABLE    = 0x97,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_SATELLITE    = 0x98,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_SECURITY    = 0x99,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_HOME    = 0x9A,    // HID type SEL
    HID_CONSUMER_MEDIA_SELECT_CALL    = 0x9B,    // HID type SEL
    HID_CONSUMER_CHANNEL_INCREMENT    = 0x9C,    // HID type OSC
    HID_CONSUMER_CHANNEL_DECREMENT    = 0x9D,    // HID type OSC
    HID_CONSUMER_MEDIA_SELECT_SAP    = 0x9E,    // HID type SEL
    // Reserved 0x9F
    HID_CONSUMER_VCR_PLUS    = 0xA0,    // HID type OSC
    HID_CONSUMER_ONCE    = 0xA1,    // HID type OSC
    HID_CONSUMER_DAILY    = 0xA2,    // HID type OSC
    HID_CONSUMER_WEEKLY    = 0xA3,    // HID type OSC
    HID_CONSUMER_MONTHLY    = 0xA4,    // HID type OSC
    // Reserved 0xA5-AF
    HID_CONSUMER_PLAY    = 0xB0,    // HID type OOC
    HID_CONSUMER_PAUSE    = 0xB1,    // HID type OOC
    HID_CONSUMER_RECORD    = 0xB2,    // HID type OOC
    HID_CONSUMER_FAST_FORWARD    = 0xB3,    // HID type OOC
    HID_CONSUMER_REWIND    = 0xB4,    // HID type OOC
    HID_CONSUMER_SCAN_NEXT_TRACK    = 0xB5,    // HID type OSC
    HID_CONSUMER_SCAN_PREVIOUS_TRACK    = 0xB6,    // HID type OSC
    HID_CONSUMER_STOP    = 0xB7,    // HID type OSC
    HID_CONSUMER_EJECT    = 0xB8,    // HID type OSC
    HID_CONSUMER_RANDOM_PLAY    = 0xB9,    // HID type OOC
    HID_CONSUMER_SELECT_DISC    = 0xBA,    // HID type NARY
    HID_CONSUMER_ENTER_DISC_MC    = 0xBB,
    HID_CONSUMER_REPEAT    = 0xBC,    // HID type OSC
    HID_CONSUMER_TRACKING    = 0xBD,    // HID type LC
    HID_CONSUMER_TRACK_NORMAL    = 0xBE,    // HID type OSC
    HID_CONSUMER_SLOW_TRACKING    = 0xBF,    // HID type LC
    HID_CONSUMER_FRAME_FORWARD    = 0xC0,    // HID type RTC
    HID_CONSUMER_FRAME_BACK    = 0xC1,    // HID type RTC
    HID_CONSUMER_MARK    = 0xC2,    // HID type OSC
    HID_CONSUMER_CLEAR_MARK    = 0xC3,    // HID type OSC
    HID_CONSUMER_REPEAT_FROM_MARK    = 0xC4,    // HID type OOC
    HID_CONSUMER_RETURN_TO_MARK    = 0xC5,    // HID type OSC
    HID_CONSUMER_SEARCH_MARK_FORWARD    = 0xC6,    // HID type OSC
    HID_CONSUMER_SEARCH_MARK_BACKWARDS    = 0xC7,    // HID type OSC
    HID_CONSUMER_COUNTER_RESET    = 0xC8,    // HID type OSC
    HID_CONSUMER_SHOW_COUNTER    = 0xC9,    // HID type OSC
    HID_CONSUMER_TRACKING_INCREMENT    = 0xCA,    // HID type RTC
    HID_CONSUMER_TRACKING_DECREMENT    = 0xCB,    // HID type RTC
    HID_CONSUMER_STOP_SLASH_EJECT    = 0xCC,    // HID type OSC
    HID_CONSUMER_PLAY_SLASH_PAUSE    = 0xCD,    // HID type OSC
    HID_CONSUMER_PLAY_SLASH_SKIP    = 0xCE,    // HID type OSC
    // Reserved 0xCF-DF
    HID_CONSUMER_VOLUME    = 0xE0,    // HID type LC
    HID_CONSUMER_BALANCE    = 0xE1,    // HID type LC
    HID_CONSUMER_MUTE    = 0xE2,    // HID type OOC
    HID_CONSUMER_BASS    = 0xE3,    // HID type LC
    HID_CONSUMER_TREBLE    = 0xE4,    // HID type LC
    HID_CONSUMER_BASS_BOOST    = 0xE5,    // HID type OOC
    HID_CONSUMER_SURROUND_MODE    = 0xE6,    // HID type OSC
    HID_CONSUMER_LOUDNESS    = 0xE7,    // HID type OOC
    HID_CONSUMER_MPX    = 0xE8,    // HID type OOC
    HID_CONSUMER_VOLUME_INCREMENT    = 0xE9,    // HID type RTC
    HID_CONSUMER_VOLUME_DECREMENT    = 0xEA,    // HID type RTC
    // Reserved 0xEB-EF
    HID_CONSUMER_SPEED_SELECT    = 0xF0,    // HID type OSC
    HID_CONSUMER_PLAYBACK_SPEED    = 0xF1,    // HID type NARY
    HID_CONSUMER_STANDARD_PLAY    = 0xF2,    // HID type SEL
    HID_CONSUMER_LONG_PLAY    = 0xF3,    // HID type SEL
    HID_CONSUMER_EXTENDED_PLAY    = 0xF4,    // HID type SEL
    HID_CONSUMER_SLOW    = 0xF5,    // HID type OSC
    // Reserved 0xF6-FF
    HID_CONSUMER_FAN_ENABLE    = 0x100,    // HID type OOC
    HID_CONSUMER_FAN_SPEED    = 0x101,    // HID type LC
    HID_CONSUMER_LIGHT_ENABLE    = 0x102,    // HID type OOC
    HID_CONSUMER_LIGHT_ILLUMINATION_LEVEL    = 0x103,    // HID type LC
    HID_CONSUMER_CLIMATE_CONTROL_ENABLE    = 0x104,    // HID type OOC
    HID_CONSUMER_ROOM_TEMPERATURE    = 0x105,    // HID type LC
    HID_CONSUMER_SECURITY_ENABLE    = 0x106,    // HID type OOC
    HID_CONSUMER_FIRE_ALARM    = 0x107,    // HID type OSC
    HID_CONSUMER_POLICE_ALARM    = 0x108,    // HID type OSC
    HID_CONSUMER_PROXIMITY    = 0x109,    // HID type LC
    HID_CONSUMER_MOTION    = 0x10A,    // HID type OSC
    HID_CONSUMER_DURESS_ALARM    = 0x10B,    // HID type OSC
    HID_CONSUMER_HOLDUP_ALARM    = 0x10C,    // HID type OSC
    HID_CONSUMER_MEDICAL_ALARM    = 0x10D,    // HID type OSC
    // Reserved 0x10E-14F
    HID_CONSUMER_BALANCE_RIGHT    = 0x150,    // HID type RTC
    HID_CONSUMER_BALANCE_LEFT    = 0x151,    // HID type RTC
    HID_CONSUMER_BASS_INCREMENT    = 0x152,    // HID type RTC
    HID_CONSUMER_BASS_DECREMENT    = 0x153,    // HID type RTC
    HID_CONSUMER_TREBLE_INCREMENT    = 0x154,    // HID type RTC
    HID_CONSUMER_TREBLE_DECREMENT    = 0x155,    // HID type RTC
    // Reserved 0x156-15F
    HID_CONSUMER_SPEAKER_SYSTEM    = 0x160,    // HID type CL
    HID_CONSUMER_CHANNEL_LEFT    = 0x161,    // HID type CL
    HID_CONSUMER_CHANNEL_RIGHT    = 0x162,    // HID type CL
    HID_CONSUMER_CHANNEL_CENTER    = 0x163,    // HID type CL
    HID_CONSUMER_CHANNEL_FRONT    = 0x164,    // HID type CL
    HID_CONSUMER_CHANNEL_CENTER_FRONT    = 0x165,    // HID type CL
    HID_CONSUMER_CHANNEL_SIDE    = 0x166,    // HID type CL
    HID_CONSUMER_CHANNEL_SURROUND    = 0x167,    // HID type CL
    HID_CONSUMER_CHANNEL_LOW_FREQUENCY_ENHANCEMENT    = 0x168,    // HID type CL
    HID_CONSUMER_CHANNEL_TOP    = 0x169,    // HID type CL
    HID_CONSUMER_CHANNEL_UNKNOWN    = 0x16A,    // HID type CL
    // Reserved 0x16B-16F
    HID_CONSUMER_SUB_CHANNEL    = 0x170,    // HID type LC
    HID_CONSUMER_SUB_CHANNEL_INCREMENT    = 0x171,    // HID type OSC
    HID_CONSUMER_SUB_CHANNEL_DECREMENT    = 0x172,    // HID type OSC
    HID_CONSUMER_ALTERNATE_AUDIO_INCREMENT    = 0x173,    // HID type OSC
    HID_CONSUMER_ALTERNATE_AUDIO_DECREMENT    = 0x174,    // HID type OSC
    // Reserved 0x175-17F
    HID_CONSUMER_APPLICATION_LAUNCH_BUTTONS    = 0x180,    // HID type NARY
    HID_CONSUMER_AL_LAUNCH_BUTTON_CONFIGURATION_TOOL    = 0x181,    // HID type SEL
    HID_CONSUMER_AL_PROGRAMMABLE_BUTTON_CONFIGURATION    = 0x182,    // HID type SEL
    HID_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION    = 0x183,    // HID type SEL
    HID_CONSUMER_AL_WORD_PROCESSOR    = 0x184,    // HID type SEL
    HID_CONSUMER_AL_TEXT_EDITOR    = 0x185,    // HID type SEL
    HID_CONSUMER_AL_SPREADSHEET    = 0x186,    // HID type SEL
    HID_CONSUMER_AL_GRAPHICS_EDITOR    = 0x187,    // HID type SEL
    HID_CONSUMER_AL_PRESENTATION_APP    = 0x188,    // HID type SEL
    HID_CONSUMER_AL_DATABASE_APP    = 0x189,    // HID type SEL
    HID_CONSUMER_AL_EMAIL_READER    = 0x18A,    // HID type SEL
    HID_CONSUMER_AL_NEWSREADER    = 0x18B,    // HID type SEL
    HID_CONSUMER_AL_VOICEMAIL    = 0x18C,    // HID type SEL
    HID_CONSUMER_AL_CONTACTS_SLASH_ADDRESS_BOOK    = 0x18D,    // HID type SEL
    HID_CONSUMER_AL_CALENDAR_SLASH_SCHEDULE    = 0x18E,    // HID type SEL
    HID_CONSUMER_AL_TASK_SLASH_PROJECT_MANAGER    = 0x18F,    // HID type SEL
    HID_CONSUMER_AL_LOG_SLASH_JOURNAL_SLASH_TIMECARD    = 0x190,    // HID type SEL
    HID_CONSUMER_AL_CHECKBOOK_SLASH_FINANCE    = 0x191,    // HID type SEL
    HID_CONSUMER_AL_CALCULATOR    = 0x192,    // HID type SEL
    HID_CONSUMER_AL_A_SLASH_V_CAPTURE_SLASH_PLAYBACK    = 0x193,    // HID type SEL
    HID_CONSUMER_AL_LOCAL_MACHINE_BROWSER    = 0x194,    // HID type SEL
    HID_CONSUMER_AL_LAN_SLASH_WAN_BROWSER    = 0x195,    // HID type SEL
    HID_CONSUMER_AL_INTERNET_BROWSER    = 0x196,    // HID type SEL
    HID_CONSUMER_AL_REMOTE_NETWORKING_SLASH_ISP_CONNECT    = 0x197,    // HID type SEL
    HID_CONSUMER_AL_NETWORK_CONFERENCE    = 0x198,    // HID type SEL
    HID_CONSUMER_AL_NETWORK_CHAT    = 0x199,    // HID type SEL
    HID_CONSUMER_AL_TELEPHONY_SLASH_DIALER    = 0x19A,    // HID type SEL
    HID_CONSUMER_AL_LOGON    = 0x19B,    // HID type SEL
    HID_CONSUMER_AL_LOGOFF    = 0x19C,    // HID type SEL
    HID_CONSUMER_AL_LOGON_SLASH_LOGOFF    = 0x19D,    // HID type SEL
    HID_CONSUMER_AL_TERMINAL_LOCK_SLASH_SCREENSAVER    = 0x19E,    // HID type SEL
    HID_CONSUMER_AL_CONTROL_PANEL    = 0x19F,    // HID type SEL
    HID_CONSUMER_AL_COMMAND_LINE_PROCESSOR_SLASH_RUN    = 0x1A0,    // HID type SEL
    HID_CONSUMER_AL_PROCESS_SLASH_TASK_MANAGER    = 0x1A1,    // HID type SEL
    HID_CONSUMER_AL_SELECT_TASK_SLASH_APPLICATION    = 0x1A2,    // HID type SEL
    HID_CONSUMER_AL_NEXT_TASK_SLASH_APPLICATION    = 0x1A3,    // HID type SEL
    HID_CONSUMER_AL_PREVIOUS_TASK_SLASH_APPLICATION    = 0x1A4,    // HID type SEL
    HID_CONSUMER_AL_PREEMPTIVE_HALT_TASK_SLASH_APPLICATION    = 0x1A5,    // HID type SEL
    HID_CONSUMER_AL_INTEGRATED_HELP_CENTER    = 0x1A6,    // HID type SEL
    HID_CONSUMER_AL_DOCUMENTS    = 0x1A7,    // HID type SEL
    HID_CONSUMER_AL_THESAURUS    = 0x1A8,    // HID type SEL
    HID_CONSUMER_AL_DICTIONARY    = 0x1A9,    // HID type SEL
    HID_CONSUMER_AL_DESKTOP    = 0x1AA,    // HID type SEL
    HID_CONSUMER_AL_SPELL_CHECK    = 0x1AB,    // HID type SEL
    HID_CONSUMER_AL_GRAMMAR_CHECK    = 0x1AC,    // HID type SEL
    HID_CONSUMER_AL_WIRELESS_STATUS    = 0x1AD,    // HID type SEL
    HID_CONSUMER_AL_KEYBOARD_LAYOUT    = 0x1AE,    // HID type SEL
    HID_CONSUMER_AL_VIRUS_PROTECTION    = 0x1AF,    // HID type SEL
    HID_CONSUMER_AL_ENCRYPTION    = 0x1B0,    // HID type SEL
    HID_CONSUMER_AL_SCREEN_SAVER    = 0x1B1,    // HID type SEL
    HID_CONSUMER_AL_ALARMS    = 0x1B2,    // HID type SEL
    HID_CONSUMER_AL_CLOCK    = 0x1B3,    // HID type SEL
    HID_CONSUMER_AL_FILE_BROWSER    = 0x1B4,    // HID type SEL
    HID_CONSUMER_AL_POWER_STATUS    = 0x1B5,    // HID type SEL
    HID_CONSUMER_AL_IMAGE_BROWSER    = 0x1B6,    // HID type SEL
    HID_CONSUMER_AL_AUDIO_BROWSER    = 0x1B7,    // HID type SEL
    HID_CONSUMER_AL_MOVIE_BROWSER    = 0x1B8,    // HID type SEL
    HID_CONSUMER_AL_DIGITAL_RIGHTS_MANAGER    = 0x1B9,    // HID type SEL
    HID_CONSUMER_AL_DIGITAL_WALLET    = 0x1BA,    // HID type SEL
    // _Reserved 0x1BB
    HID_CONSUMER_AL_INSTANT_MESSAGING    = 0x1BC,    // HID type SEL
    HID_CONSUMER_AL_OEM_FEATURES_SLASH__TIPS_SLASH_TUTORIAL_BROWSER    = 0x1BD,    // HID type SEL
    HID_CONSUMER_AL_OEM_HELP    = 0x1BE,    // HID type SEL
    HID_CONSUMER_AL_ONLINE_COMMUNITY    = 0x1BF,    // HID type SEL
    HID_CONSUMER_AL_ENTERTAINMENT_CONTENT_BROWSER    = 0x1C0,    // HID type SEL
    HID_CONSUMER_AL_ONLINE_SHOPPING_BROWSER    = 0x1C1,    // HID type SEL
    HID_CONSUMER_AL_SMARTCARD_INFORMATION_SLASH_HELP    = 0x1C2,    // HID type SEL
    HID_CONSUMER_AL_MARKET_MONITOR_SLASH_FINANCE_BROWSER    = 0x1C3,    // HID type SEL
    HID_CONSUMER_AL_CUSTOMIZED_CORPORATE_NEWS_BROWSER    = 0x1C4,    // HID type SEL
    HID_CONSUMER_AL_ONLINE_ACTIVITY_BROWSER    = 0x1C5,    // HID type SEL
    HID_CONSUMER_AL_RESEARCH_SLASH_SEARCH_BROWSER    = 0x1C6,    // HID type SEL
    HID_CONSUMER_AL_AUDIO_PLAYER    = 0x1C7,    // HID type SEL
    // Reserved 0x1C8-1FF
    HID_CONSUMER_GENERIC_GUI_APPLICATION_CONTROLS    = 0x200, // HID type NARY
    HID_CONSUMER_AC_NEW    = 0x201,    // HID type SEL
    HID_CONSUMER_AC_OPEN    = 0x202,    // HID type SEL
    HID_CONSUMER_AC_CLOSE    = 0x203,    // HID type SEL
    HID_CONSUMER_AC_EXIT    = 0x204,    // HID type SEL
    HID_CONSUMER_AC_MAXIMIZE    = 0x205,    // HID type SEL
    HID_CONSUMER_AC_MINIMIZE    = 0x206,    // HID type SEL
    HID_CONSUMER_AC_SAVE    = 0x207,    // HID type SEL
    HID_CONSUMER_AC_PRINT    = 0x208,    // HID type SEL
    HID_CONSUMER_AC_PROPERTIES    = 0x209,    // HID type SEL
    HID_CONSUMER_AC_UNDO    = 0x21A,    // HID type SEL
    HID_CONSUMER_AC_COPY    = 0x21B,    // HID type SEL
    HID_CONSUMER_AC_CUT    = 0x21C,    // HID type SEL
    HID_CONSUMER_AC_PASTE    = 0x21D,    // HID type SEL
    HID_CONSUMER_AC_SELECT_ALL    = 0x21E,    // HID type SEL
    HID_CONSUMER_AC_FIND    = 0x21F,    // HID type SEL
    HID_CONSUMER_AC_FIND_AND_REPLACE    = 0x220,    // HID type SEL
    HID_CONSUMER_AC_SEARCH    = 0x221,    // HID type SEL
    HID_CONSUMER_AC_GO_TO    = 0x222,    // HID type SEL
    HID_CONSUMER_AC_HOME    = 0x223,    // HID type SEL
    HID_CONSUMER_AC_BACK    = 0x224,    // HID type SEL
    HID_CONSUMER_AC_FORWARD    = 0x225,    // HID type SEL
    HID_CONSUMER_AC_STOP    = 0x226,    // HID type SEL
    HID_CONSUMER_AC_REFRESH    = 0x227,    // HID type SEL
    HID_CONSUMER_AC_PREVIOUS_LINK    = 0x228,    // HID type SEL
    HID_CONSUMER_AC_NEXT_LINK    = 0x229,    // HID type SEL
    HID_CONSUMER_AC_BOOKMARKS    = 0x22A,    // HID type SEL
    HID_CONSUMER_AC_HISTORY    = 0x22B,    // HID type SEL
    HID_CONSUMER_AC_SUBSCRIPTIONS    = 0x22C,    // HID type SEL
    HID_CONSUMER_AC_ZOOM_IN    = 0x22D,    // HID type SEL
    HID_CONSUMER_AC_ZOOM_OUT    = 0x22E,    // HID type SEL
    HID_CONSUMER_AC_ZOOM    = 0x22F,    // HID type LC
    HID_CONSUMER_AC_FULL_SCREEN_VIEW    = 0x230,    // HID type SEL
    HID_CONSUMER_AC_NORMAL_VIEW    = 0x231,    // HID type SEL
    HID_CONSUMER_AC_VIEW_TOGGLE    = 0x232,    // HID type SEL
    HID_CONSUMER_AC_SCROLL_UP    = 0x233,    // HID type SEL
    HID_CONSUMER_AC_SCROLL_DOWN    = 0x234,    // HID type SEL
    HID_CONSUMER_AC_SCROLL    = 0x235,    // HID type LC
    HID_CONSUMER_AC_PAN_LEFT    = 0x236,    // HID type SEL
    HID_CONSUMER_AC_PAN_RIGHT    = 0x237,    // HID type SEL
    HID_CONSUMER_AC_PAN    = 0x238,    // HID type LC
    HID_CONSUMER_AC_NEW_WINDOW    = 0x239,    // HID type SEL
    HID_CONSUMER_AC_TILE_HORIZONTALLY    = 0x23A,    // HID type SEL
    HID_CONSUMER_AC_TILE_VERTICALLY    = 0x23B,    // HID type SEL
    HID_CONSUMER_AC_FORMAT    = 0x23C,    // HID type SEL
    HID_CONSUMER_AC_EDIT    = 0x23D,    // HID type SEL
    HID_CONSUMER_AC_BOLD    = 0x23E,    // HID type SEL
    HID_CONSUMER_AC_ITALICS    = 0x23F,    // HID type SEL
    HID_CONSUMER_AC_UNDERLINE    = 0x240,    // HID type SEL
    HID_CONSUMER_AC_STRIKETHROUGH    = 0x241,    // HID type SEL
    HID_CONSUMER_AC_SUBSCRIPT    = 0x242,    // HID type SEL
    HID_CONSUMER_AC_SUPERSCRIPT    = 0x243,    // HID type SEL
    HID_CONSUMER_AC_ALL_CAPS    = 0x244,    // HID type SEL
    HID_CONSUMER_AC_ROTATE    = 0x245,    // HID type SEL
    HID_CONSUMER_AC_RESIZE    = 0x246,    // HID type SEL
    HID_CONSUMER_AC_FLIP_HORIZONTAL    = 0x247,    // HID type SEL
    HID_CONSUMER_AC_FLIP_VERTICAL    = 0x248,    // HID type SEL
    HID_CONSUMER_AC_MIRROR_HORIZONTAL    = 0x249,    // HID type SEL
    HID_CONSUMER_AC_MIRROR_VERTICAL    = 0x24A,    // HID type SEL
    HID_CONSUMER_AC_FONT_SELECT    = 0x24B,    // HID type SEL
    HID_CONSUMER_AC_FONT_COLOR    = 0x24C,    // HID type SEL
    HID_CONSUMER_AC_FONT_SIZE    = 0x24D,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_LEFT    = 0x24E,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_CENTER_H    = 0x24F,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_RIGHT    = 0x250,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_BLOCK_H    = 0x251,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_TOP    = 0x252,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_CENTER_V    = 0x253,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_BOTTOM    = 0x254,    // HID type SEL
    HID_CONSUMER_AC_JUSTIFY_BLOCK_V    = 0x255,    // HID type SEL
    HID_CONSUMER_AC_INDENT_DECREASE    = 0x256,    // HID type SEL
    HID_CONSUMER_AC_INDENT_INCREASE    = 0x257,    // HID type SEL
    HID_CONSUMER_AC_NUMBERED_LIST    = 0x258,    // HID type SEL
    HID_CONSUMER_AC_RESTART_NUMBERING    = 0x259,    // HID type SEL
    HID_CONSUMER_AC_BULLETED_LIST    = 0x25A,    // HID type SEL
    HID_CONSUMER_AC_PROMOTE    = 0x25B,    // HID type SEL
    HID_CONSUMER_AC_DEMOTE    = 0x25C,    // HID type SEL
    HID_CONSUMER_AC_YES    = 0x25D,    // HID type SEL
    HID_CONSUMER_AC_NO    = 0x25E,    // HID type SEL
    HID_CONSUMER_AC_CANCEL    = 0x25F,    // HID type SEL
    HID_CONSUMER_AC_CATALOG    = 0x260,    // HID type SEL
    HID_CONSUMER_AC_BUY_SLASH_CHECKOUT    = 0x261,    // HID type SEL
    HID_CONSUMER_AC_ADD_TO_CART    = 0x262,    // HID type SEL
    HID_CONSUMER_AC_EXPAND    = 0x263,    // HID type SEL
    HID_CONSUMER_AC_EXPAND_ALL    = 0x264,    // HID type SEL
    HID_CONSUMER_AC_COLLAPSE    = 0x265,    // HID type SEL
    HID_CONSUMER_AC_COLLAPSE_ALL    = 0x266,    // HID type SEL
    HID_CONSUMER_AC_PRINT_PREVIEW    = 0x267,    // HID type SEL
    HID_CONSUMER_AC_PASTE_SPECIAL    = 0x268,    // HID type SEL
    HID_CONSUMER_AC_INSERT_MODE    = 0x269,    // HID type SEL
    HID_CONSUMER_AC_DELETE    = 0x26A,    // HID type SEL
    HID_CONSUMER_AC_LOCK    = 0x26B,    // HID type SEL
    HID_CONSUMER_AC_UNLOCK    = 0x26C,    // HID type SEL
    HID_CONSUMER_AC_PROTECT    = 0x26D,    // HID type SEL
    HID_CONSUMER_AC_UNPROTECT    = 0x26E,    // HID type SEL
    HID_CONSUMER_AC_ATTACH_COMMENT    = 0x26F,    // HID type SEL
    HID_CONSUMER_AC_DELETE_COMMENT    = 0x270,    // HID type SEL
    HID_CONSUMER_AC_VIEW_COMMENT    = 0x271,    // HID type SEL
    HID_CONSUMER_AC_SELECT_WORD    = 0x272,    // HID type SEL
    HID_CONSUMER_AC_SELECT_SENTENCE    = 0x273,    // HID type SEL
    HID_CONSUMER_AC_SELECT_PARAGRAPH    = 0x274,    // HID type SEL
    HID_CONSUMER_AC_SELECT_COLUMN    = 0x275,    // HID type SEL
    HID_CONSUMER_AC_SELECT_ROW    = 0x276,    // HID type SEL
    HID_CONSUMER_AC_SELECT_TABLE    = 0x277,    // HID type SEL
    HID_CONSUMER_AC_SELECT_OBJECT    = 0x278,    // HID type SEL
    HID_CONSUMER_AC_REDO_SLASH_REPEAT    = 0x279,    // HID type SEL
    HID_CONSUMER_AC_SORT    = 0x27A,    // HID type SEL
    HID_CONSUMER_AC_SORT_ASCENDING    = 0x27B,    // HID type SEL
    HID_CONSUMER_AC_SORT_DESCENDING    = 0x27C,    // HID type SEL
    HID_CONSUMER_AC_FILTER    = 0x27D,    // HID type SEL
    HID_CONSUMER_AC_SET_CLOCK    = 0x27E,    // HID type SEL
    HID_CONSUMER_AC_VIEW_CLOCK    = 0x27F,    // HID type SEL
    HID_CONSUMER_AC_SELECT_TIME_ZONE    = 0x280,    // HID type SEL
    HID_CONSUMER_AC_EDIT_TIME_ZONES    = 0x281,    // HID type SEL
    HID_CONSUMER_AC_SET_ALARM    = 0x282,    // HID type SEL
    HID_CONSUMER_AC_CLEAR_ALARM    = 0x283,    // HID type SEL
    HID_CONSUMER_AC_SNOOZE_ALARM    = 0x284,    // HID type SEL
    HID_CONSUMER_AC_RESET_ALARM    = 0x285,    // HID type SEL
    HID_CONSUMER_AC_SYNCHRONIZE    = 0x286,    // HID type SEL
    HID_CONSUMER_AC_SEND_SLASH_RECEIVE    = 0x287,    // HID type SEL
    HID_CONSUMER_AC_SEND_TO    = 0x288,    // HID type SEL
    HID_CONSUMER_AC_REPLY    = 0x289,    // HID type SEL
    HID_CONSUMER_AC_REPLY_ALL    = 0x28A,    // HID type SEL
    HID_CONSUMER_AC_FORWARD_MSG    = 0x28B,    // HID type SEL
    HID_CONSUMER_AC_SEND    = 0x28C,    // HID type SEL
    HID_CONSUMER_AC_ATTACH_FILE    = 0x28D,    // HID type SEL
    HID_CONSUMER_AC_UPLOAD    = 0x28E,    // HID type SEL
    HID_CONSUMER_AC_DOWNLOAD_SAVE_TARGET_AS    = 0x28F,    // HID type SEL
    HID_CONSUMER_AC_SET_BORDERS    = 0x290,    // HID type SEL
    HID_CONSUMER_AC_INSERT_ROW    = 0x291,    // HID type SEL
    HID_CONSUMER_AC_INSERT_COLUMN    = 0x292,    // HID type SEL
    HID_CONSUMER_AC_INSERT_FILE    = 0x293,    // HID type SEL
    HID_CONSUMER_AC_INSERT_PICTURE    = 0x294,    // HID type SEL
    HID_CONSUMER_AC_INSERT_OBJECT    = 0x295,    // HID type SEL
    HID_CONSUMER_AC_INSERT_SYMBOL    = 0x296,    // HID type SEL
    HID_CONSUMER_AC_SAVE_AND_CLOSE    = 0x297,    // HID type SEL
    HID_CONSUMER_AC_RENAME    = 0x298,    // HID type SEL
    HID_CONSUMER_AC_MERGE    = 0x299,    // HID type SEL
    HID_CONSUMER_AC_SPLIT    = 0x29A,    // HID type SEL
    HID_CONSUMER_AC_DISRIBUTE_HORIZONTALLY    = 0x29B,    // HID type SEL
    HID_CONSUMER_AC_DISTRIBUTE_VERTICALLY    = 0x29C,    // HID type SEL
};

#ifdef __cplusplus
extern "C" {
#endif

void USBInit(void);

uint8_t Keyboard_press(uint8_t k);
uint8_t Keyboard_release(uint8_t k);
void Keyboard_releaseAll(void);

uint8_t Keyboard_write(uint8_t c);
    
uint8_t Consumer_press(uint16_t k);
uint8_t Consumer_release(uint16_t k);
void Consumer_releaseAll(void);

uint8_t Consumer_write(uint16_t c);

uint8_t Keyboard_getLEDStatus();

#ifdef __cplusplus
} // extern "C"
#endif

#endif

