fe0233ce创建于 24 天前历史提交
/*
 * Copyright (c) 2021-2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef KEY_EVENT_H
#define KEY_EVENT_H

#include <optional>
#include "parcel.h"

#include "input_event.h"

namespace OHOS {
namespace MMI {
class KeyEvent : public InputEvent {
public:
    /**
     * Unknown function key
     *
     * @since 9
     */
    static const int32_t UNKNOWN_FUNCTION_KEY;

    /**
     * Num Lock key
     *
     * @since 9
     */
    static const int32_t NUM_LOCK_FUNCTION_KEY;

    /**
     * Caps Lock key
     *
     * @since 9
     */
    static const int32_t CAPS_LOCK_FUNCTION_KEY;

    /**
     * Scroll Lock key
     *
     * @since 9
     */
    static const int32_t SCROLL_LOCK_FUNCTION_KEY;

    /**
     * Function (Fn) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FN;

    /**
     * Unknown keycode
     *
     *
     * @since 9
     */
    static const int32_t KEYCODE_UNKNOWN;

    /**
     * Home key
     * <p>This key is processed by the framework and will never be sent to the application.
     *
     * @since 9
     */
    static const int32_t KEYCODE_HOME;

    /**
     * Back key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BACK;

    /**
     * Call key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CALL;

    /**
     * End Call key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ENDCALL;

    /**
     * Clear key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CLEAR;

    /**
     * Headset Hook key
     * <p>This key is used to end a call and stop media.
     *
     * @since 9
     */
    static const int32_t KEYCODE_HEADSETHOOK;

    /**
     * Focus key
     * <p>This key is used to enable focus for the camera.
     *
     * @since 9
     */
    static const int32_t KEYCODE_FOCUS;

    /**
     * Notification key
     *
     * @since 9
     */
    static const int32_t KEYCODE_NOTIFICATION;

    /**
     * Search key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SEARCH;

    /**
     * Play/Pause media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_PLAY_PAUSE;

    /**
     * Stop media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_STOP;

    /**
     * Play Next media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_NEXT;

    /**
     * Play Previous media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_PREVIOUS;

    /**
     * Rewind media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_REWIND;

    /**
     * Fast Forward media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_FAST_FORWARD;

    /**
     * Volume Up key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VOLUME_UP;

    /**
     * Volume Down key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VOLUME_DOWN;

    /**
     * Power key
     *
     * @since 9
     */
    static const int32_t KEYCODE_POWER;

    /**
     * Remote Power KeyCode
     *
     * @since 9
     */
    static const int32_t KEYCODE_REMOTE_POWER;

    /**
     * Camera key
     * <p>This key is used to start the camera or take photos.
     *
     * @since 9
     */
    static const int32_t KEYCODE_CAMERA;

    /**
     * Voice Assistant key
     * <p>This key is used to wake up the voice assistant.
     *
     * @since 9
     */
    static const int32_t KEYCODE_VOICE_ASSISTANT;

    /**
     * Custom key 1
     * <p>The actions mapping to the custom keys are user-defined.
     * Key values 521-529 are reserved for custom keys.
     *
     * @since 9
     */
    static const int32_t KEYCODE_CUSTOM1;

    /**
     * Volume Mute key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VOLUME_MUTE;

    /**
     * Mute key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MUTE;

    /**
     * Brightness Up key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRIGHTNESS_UP;

    /**
     * Brightness Down key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRIGHTNESS_DOWN;

    /**
     * General-purpose key 1 on wearables
     *
     * @since 3
     */
    static const int32_t KEYCODE_WEAR_1;

    /**
     * Number 0 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_0;

    /**
     * Number 1 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_1;

    /**
     * Number 2 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_2;

    /**
     * Number 3 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_3;

    /**
     * Number 4 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_4;

    /**
     * Number 5 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_5;

    /**
     * Number 6 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_6;

    /**
     * Number 7 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_7;

    /**
     * Number 8 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_8;

    /**
     * Number 9 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_9;

    /**
     * Star (*) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_STAR;

    /**
     * Pound (#) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_POUND;

    /**
     * Directional Pad Up key
     * <p>This key may be synthesized from trackball motions.
     *
     * @since 9
     */
    static const int32_t KEYCODE_DPAD_UP;

    /**
     * Directional Pad Down key
     * <p>This key may be synthesized from trackball motions.
     *
     * @since 9
     */
    static const int32_t KEYCODE_DPAD_DOWN;

    /**
     * Directional Pad Left key
     * <p>This key may be synthesized from trackball motions.
     *
     * @since 9
     */
    static const int32_t KEYCODE_DPAD_LEFT;

    /**
     * Directional Pad Right key
     * <p>This key may be synthesized from trackball motions.
     *
     * @since 9
     */
    static const int32_t KEYCODE_DPAD_RIGHT;

    /**
     * Directional Pad Center key
     * <p>This key may be synthesized from trackball motions.
     *
     * @since 9
     */
    static const int32_t KEYCODE_DPAD_CENTER;

    /**
     * Letter A key
     *
     * @since 9
     */
    static const int32_t KEYCODE_A;

    /**
     * Letter B key
     *
     * @since 9
     */
    static const int32_t KEYCODE_B;

    /**
     * Letter C key
     *
     * @since 9
     */
    static const int32_t KEYCODE_C;

    /**
     * Letter D key
     *
     * @since 9
     */
    static const int32_t KEYCODE_D;

    /**
     * Letter E key
     *
     * @since 9
     */
    static const int32_t KEYCODE_E;

    /**
     * Letter F key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F;

    /**
     * Letter G key
     *
     * @since 9
     */
    static const int32_t KEYCODE_G;

    /**
     * Letter H key
     *
     * @since 9
     */
    static const int32_t KEYCODE_H;

    /**
     * Letter I key
     *
     * @since 9
     */
    static const int32_t KEYCODE_I;

    /**
     * Letter J key
     *
     * @since 9
     */
    static const int32_t KEYCODE_J;

    /**
     * Letter K key
     *
     * @since 9
     */
    static const int32_t KEYCODE_K;

    /**
     * Letter L key
     *
     * @since 9
     */
    static const int32_t KEYCODE_L;

    /**
     * Letter M key
     *
     * @since 9
     */
    static const int32_t KEYCODE_M;

    /**
     * Letter N key
     *
     * @since 9
     */
    static const int32_t KEYCODE_N;

    /**
     * Letter O key
     *
     * @since 9
     */
    static const int32_t KEYCODE_O;

    /**
     * Letter P key
     *
     * @since 9
     */
    static const int32_t KEYCODE_P;

    /**
     * Letter Q key
     *
     * @since 9
     */
    static const int32_t KEYCODE_Q;

    /**
     * Letter R key
     *
     * @since 9
     */
    static const int32_t KEYCODE_R;

    /**
     * Letter S key
     *
     * @since 9
     */
    static const int32_t KEYCODE_S;

    /**
     * Letter T key
     *
     * @since 9
     */
    static const int32_t KEYCODE_T;

    /**
     * Letter U key
     *
     * @since 9
     */
    static const int32_t KEYCODE_U;

    /**
     * Letter V key
     *
     * @since 9
     */
    static const int32_t KEYCODE_V;

    /**
     * Letter W key
     *
     * @since 9
     */
    static const int32_t KEYCODE_W;

    /**
     * Letter X key
     *
     * @since 9
     */
    static const int32_t KEYCODE_X;

    /**
     * Letter Y key
     *
     * @since 9
     */
    static const int32_t KEYCODE_Y;

    /**
     * Letter Z key
     *
     * @since 9
     */
    static const int32_t KEYCODE_Z;

    /**
     * Semicolon (;) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_COMMA;

    /**
     * Period (.) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PERIOD;

    /**
     * Left Alt modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ALT_LEFT;

    /**
     * Right Alt modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ALT_RIGHT;

    /**
     * Left Shift modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SHIFT_LEFT;

    /**
     * Right Shift modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SHIFT_RIGHT;

    /**
     * Tab key
     *
     * @since 9
     */
    static const int32_t KEYCODE_TAB;

    /**
     * Space key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SPACE;

    /**
     * Symbol modifier key
     * <p>This key is used to input alternate symbols.
     *
     * @since 9
     */
    static const int32_t KEYCODE_SYM;

    /**
     * Explorer function key
     * <p>This key is used to launch a browser application.
     *
     * @since 9
     */
    static const int32_t KEYCODE_EXPLORER;

    /**
     * Email function key
     * <p>This key is used to launch an email application.
     *
     * @since 9
     */
    static const int32_t KEYCODE_ENVELOPE;

    /**
     * Enter key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ENTER;

    /**
     * Backspace key
     * <p>Unlike {@link #static const int32_t KEYCODE_FORWARD_DEL},
     * this key is used to delete characters before the insertion point.
     *
     * @since 9
     */
    static const int32_t KEYCODE_DEL;

    /**
     * Backtick (') key
     *
     * @since 9
     */
    static const int32_t KEYCODE_GRAVE;

    /**
     * Minus (-) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MINUS;

    /**
     * Equals (=) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_EQUALS;

    /**
     * Left bracket ([) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_LEFT_BRACKET;

    /**
     * Right bracket (]) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_RIGHT_BRACKET;

    /**
     * Backslash (\) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BACKSLASH;

    /**
     * Semicolon (;) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SEMICOLON;

    /**
     * Apostrophe (') key
     *
     * @since 9
     */
    static const int32_t KEYCODE_APOSTROPHE;

    /**
     * Slash (/) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SLASH;

    /**
     * At (@) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_AT;

    /**
     * Plus (+) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PLUS;

    /**
     * Menu key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MENU;

    /**
     * Page Up key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PAGE_UP;

    /**
     * Page Down key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PAGE_DOWN;

    /**
     * Escape key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ESCAPE;

    /**
     * Forward Delete key
     * <p>Unlike {@link #static const int32_t KEYCODE_DEL},
     * this key is used to delete characters ahead of the insertion point.
     *
     * @since 9
     */
    static const int32_t KEYCODE_FORWARD_DEL;

    /**
     * Left Control modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CTRL_LEFT;

    /**
     * Right Control modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CTRL_RIGHT;

    /**
     * Caps Lock key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CAPS_LOCK;

    /**
     * Scroll Lock key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SCROLL_LOCK;

    /**
     * Left Meta modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_META_LEFT;

    /**
     * Right Meta modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_META_RIGHT;

    /**
     * Function modifier key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FUNCTION;

    /**
     * System Request/Print Screen key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SYSRQ;

    /**
     * Break/Pause key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BREAK;

    /**
     * Home Movement key
     * <p>This key is used to scroll or move the cursor around to the start of a line or to the
     * top of a list.
     *
     * @since 9
     */
    static const int32_t KEYCODE_MOVE_HOME;

    /**
     * End Movement key
     * <p>This key is used to scroll or move the cursor around to the end of a line or to the
     * bottom of a list.
     *
     * @since 9
     */
    static const int32_t KEYCODE_MOVE_END;

    /**
     * Insert key
     * <p>This key is used to toggle the insert or overwrite edit mode.
     *
     * @since 9
     */
    static const int32_t KEYCODE_INSERT;

    /**
     * Forward key
     * <p>This key is used to navigate forward in the history stack.
     * It is a complement of {@link #static const int32_t KEYCODE_BACK}.
     *
     * @since 9
     */
    static const int32_t KEYCODE_FORWARD;

    /**
     * Play media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_PLAY;

    /**
     * Pause media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_PAUSE;

    /**
     * Close media key
     * <p>This key can be used to close a CD tray, for example.
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_CLOSE;

    /**
     * Eject media key
     * <p>This key can be used to eject a CD tray, for example.
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_EJECT;

    /**
     * Record media key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_RECORD;

    /**
     * F1 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F1;

    /**
     * F2 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F2;

    /**
     * F3 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F3;

    /**
     * F4 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F4;

    /**
     * F5 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F5;

    /**
     * F6 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F6;

    /**
     * F7 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F7;

    /**
     * F8 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F8;

    /**
     * F9 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F9;

    /**
     * F10 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F10;

    /**
     * F11 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F11;

    /**
     * F12 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F12;

    /**
     * Number Lock key
     * <p>This key is used to alter the behavior of other keys on the numeric keypad.
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUM_LOCK;

    /**
     * Number 0 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_0;

    /**
     * Number 1 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_1;

    /**
     * Number 2 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_2;

    /**
     * Number 3 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_3;

    /**
     * Number 4 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_4;

    /**
     * Number 5 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_5;

    /**
     * Number 6 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_6;

    /**
     * Number 7 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_7;

    /**
     * Number 8 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_8;

    /**
     * Number 9 key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_9;

    /**
     * Slash (/) key (for division) on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_DIVIDE;

    /**
     * Star (*) key (for multiplication) on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_MULTIPLY;

    /**
     * Minus (-) key (for subtraction) on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_SUBTRACT;

    /**
     * Plus (+) key (for addition) on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_ADD;

    /**
     * Dot (.) key (for decimals or digit grouping) on the
     * numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_DOT;

    /**
     * Comma (,) key (for decimals or digit grouping) on the
     * numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_COMMA;

    /**
     * Enter key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_ENTER;

    /**
     * Equals (=) key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_EQUALS;

    /**
     * Left parentheses (() key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_LEFT_PAREN;

    /**
     * Right parentheses ()) key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_RIGHT_PAREN;

    /**
     * Virtual multitask key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VIRTUAL_MULTITASK;

    /**
     * Button A on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_A;

    /**
     * Button B on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_B;

    /**
     * Button C on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_C;

    /**
     * Button X on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_X;

    /**
     * Button Y on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_Y;

    /**
     * Button Z on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_Z;

    /**
     * Button L1 on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_L1;

    /**
     * Button R1 on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_R1;

    /**
     * Button L2 on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_L2;

    /**
     * Button R2 on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_R2;

    /**
     * Select button on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_SELECT;

    /**
     * Start button on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_START;

    /**
     * Mode button on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_MODE;

    /**
     * Left Thumb button on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_THUMBL;

    /**
     * Right Thumb button on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_THUMBR;

    /**
     * Trigger button on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_TRIGGER;

    /**
     * Thumb button on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_THUMB;

    /**
     * Thumb button 2 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_THUMB2;

    /**
     * Top button on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_TOP;

    /**
     * Top button 2 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_TOP2;

    /**
     * Pinkie button on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_PINKIE;

    /**
     * Base button 1 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE1;

    /**
     * Base button 2 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE2;

    /**
     * Base button 3 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE3;

    /**
     * Base button 4 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE4;

    /**
     * Base button 5 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE5;

    /**
     * Base button 6 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE6;

    /**
     * Base button 7 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE7;

    /**
     * Base button 8 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE8;

    /**
     * Base button 9 on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_BASE9;

    /**
     * Dead button on the joystick
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTON_DEAD;

    /**
     *  List Menu key on keyboard
     *
     * @since 9
     */
    static const int32_t KEYCODE_COMPOSE;

    /**
     * Sleep key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SLEEP;

    /**
     * Zenkaku_Hankaku, a Japanese modifier key that toggles between
     * Hankaku (half-width) and Zenkaku (full-width) characters
     *
     * @since 9
     */
    static const int32_t KEYCODE_ZENKAKU_HANKAKU;

    /**
     * 102nd key
     *
     * @since 9
     */
    static const int32_t KEYCODE_102ND;

    /**
     * Japanese Ro key
     *
     * @since 9
     */
    static const int32_t KEYCODE_RO;

    /**
     * Japanese katakana key
     *
     * @since 9
     */
    static const int32_t KEYCODE_KATAKANA;

    /**
     * Japanese hiragana key
     *
     * @since 9
     */
    static const int32_t KEYCODE_HIRAGANA;

    /**
     * Japanese conversion key
     *
     * @since 9
     */
    static const int32_t KEYCODE_HENKAN;

    /**
     * Japanese katakana/hiragana key
     *
     * @since 9
     */
    static const int32_t KEYCODE_KATAKANA_HIRAGANA;

    /**
     * Japanese non-conversion key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MUHENKAN;

    /**
     * Line Feed key
     *
     * @since 9
     */
    static const int32_t KEYCODE_LINEFEED;

    /**
     * Macro key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MACRO;

    /**
     * Plus/Minus key on the numeric keypad
     *
     * @since 9
     */
    static const int32_t KEYCODE_NUMPAD_PLUSMINUS;

    /**
     * Extension
     *
     * @since 9
     */
    static const int32_t KEYCODE_SCALE;

    /**
     * Japanese Hanguel key
     *
     * @since 9
     */
    static const int32_t KEYCODE_HANGUEL;

    /**
     * Japanese hanja key
     *
     * @since 9
     */
    static const int32_t KEYCODE_HANJA;

    /**
     * Japanese YEN key
     *
     * @since 9
     */
    static const int32_t KEYCODE_YEN;

    /**
     * Stop key
     *
     * @since 9
     */
    static const int32_t KEYCODE_STOP;

    /**
     * Again key
     *
     * @since 9
     */
    static const int32_t KEYCODE_AGAIN;

    /**
     * Props key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PROPS;

    /**
     * Undo key
     *
     * @since 9
     */
    static const int32_t KEYCODE_UNDO;

    /**
     * Copy key
     *
     * @since 9
     */
    static const int32_t KEYCODE_COPY;

    /**
     * Open key
     *
     * @since 9
     */
    static const int32_t KEYCODE_OPEN;

    /**
     * Paste key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PASTE;

    /**
     * Find key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FIND;

    /**
     * Cut key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CUT;

    /**
     * Help key
     *
     * @since 9
     */
    static const int32_t KEYCODE_HELP;

    /**
     * Calculate key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CALC;

    /**
     * File key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FILE;

    /**
     * Bookmarks key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BOOKMARKS;

    /**
     * Next key
     *
     * @since 9
     */
    static const int32_t KEYCODE_NEXT;

    /**
     * Play/Pause key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PLAYPAUSE;

    /**
     * Previous key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PREVIOUS;

    /**
     * CD Stop key
     *
     * @since 9
     */
    static const int32_t KEYCODE_STOPCD;

    /**
     * Configuration key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CONFIG;

    /**
     * Refresh key
     *
     * @since 9
     */
    static const int32_t KEYCODE_REFRESH;

    /**
     * Exit key
     *
     * @since 9
     */
    static const int32_t KEYCODE_EXIT;

    /**
     * Edit key
     *
     * @since 9
     */
    static const int32_t KEYCODE_EDIT;

    /**
     * Scroll Up key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SCROLLUP;

    /**
     * Scroll Down key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SCROLLDOWN;

    /**
     * New key
     *
     * @since 9
     */
    static const int32_t KEYCODE_NEW;

    /**
     * Redo key
     *
     * @since 9
     */
    static const int32_t KEYCODE_REDO;

    /**
     * Close key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CLOSE;

    /**
     * Play key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PLAY;

    /**
     * Bass boost key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BASSBOOST;

    /**
     * Print key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PRINT;

    /**
     * Chat key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CHAT;

    /**
     * Finance key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FINANCE;

    /**
     * Cancel key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CANCEL;

    /**
     * Keyboard Illumination Toggle key
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDILLUM_TOGGLE;

    /**
     * Keyboard Illumination Down key
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDILLUM_DOWN;

    /**
     * Keyboard Illumination Up key
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDILLUM_UP;

    /**
     * Send key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SEND;

    /**
     * Reply key
     *
     * @since 9
     */
    static const int32_t KEYCODE_REPLY;

    /**
     * Mail Forward key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FORWARDMAIL;

    /**
     * Save key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SAVE;

    /**
     * Documents key
     *
     * @since 9
     */
    static const int32_t KEYCODE_DOCUMENTS;

    /**
     * Next Video key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VIDEO_NEXT;

    /**
     * Previous Video key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VIDEO_PREV;

    /**
     * Brightness Cycle key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRIGHTNESS_CYCLE;

    /**
     * Brightness 0 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRIGHTNESS_ZERO;

    /**
     * Display Off key
     *
     * @since 9
     */
    static const int32_t KEYCODE_DISPLAY_OFF;

    /**
     * Miscellaneous buttons on the gamepad
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_MISC;

    /**
     * Go To key
     *
     * @since 9
     */
    static const int32_t KEYCODE_GOTO;

    /**
     * Info key
     *
     * @since 9
     */
    static const int32_t KEYCODE_INFO;

    /**
     * Program key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PROGRAM;

    /**
     * Personal Video Recorder (PVR) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PVR;

    /**
     * Subtitle key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SUBTITLE;

    /**
     * Full Screen key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FULL_SCREEN;

    /**
     * Keyboard
     *
     * @since 9
     */
    static const int32_t KEYCODE_KEYBOARD;

    /**
     * Aspect Ratio key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ASPECT_RATIO;

    /**
     * Port Control key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PC;

    /**
     * TV key
     *
     * @since 9
     */
    static const int32_t KEYCODE_TV;

    /**
     * TV key 2
     *
     * @since 9
     */
    static const int32_t KEYCODE_TV2;

    /**
     * VCR key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VCR;

    /**
     * VCR key 2
     *
     * @since 9
     */
    static const int32_t KEYCODE_VCR2;

    /**
     * SIM Application Toolkit (SAT) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SAT;

    /**
     * CD key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CD;

    /**
     * Tape key
     *
     * @since 9
     */
    static const int32_t KEYCODE_TAPE;

    /**
     * Tuner key
     *
     * @since 9
     */
    static const int32_t KEYCODE_TUNER;

    /**
     * Player key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PLAYER;

    /**
     * DVD key
     *
     * @since 9
     */
    static const int32_t KEYCODE_DVD;

    /**
     * Audio key
     *
     * @since 9
     */
    static const int32_t KEYCODE_AUDIO;

    /**
     * Video key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VIDEO;

    /**
     * Memo key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEMO;

    /**
     * Calendar key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CALENDAR;

    /**
     * Red indicator
     *
     * @since 9
     */
    static const int32_t KEYCODE_RED;

    /**
     * Green indicator
     *
     * @since 9
     */
    static const int32_t KEYCODE_GREEN;

    /**
     * Yellow indicator
     *
     * @since 9
     */
    static const int32_t KEYCODE_YELLOW;

    /**
     * Blue indicator
     *
     * @since 9
     */
    static const int32_t KEYCODE_BLUE;

    /**
     * Channel Up key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CHANNELUP;

    /**
     * Channel Down key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CHANNELDOWN;

    /**
     * Last key
     *
     * @since 9
     */
    static const int32_t KEYCODE_LAST;

    /**
     * Restart key
     *
     * @since 9
     */
    static const int32_t KEYCODE_RESTART;

    /**
     * Slow key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SLOW;

    /**
     * Shuffle key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SHUFFLE;

    /**
     * Videophone key
     *
     * @since 9
     */
    static const int32_t KEYCODE_VIDEOPHONE;

    /**
     * Games key
     *
     * @since 9
     */
    static const int32_t KEYCODE_GAMES;

    /**
     * Zoom In key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ZOOMIN;

    /**
     * Zoom Out key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ZOOMOUT;

    /**
     * Zoom Reset key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ZOOMRESET;

    /**
     * Word Processor key
     *
     * @since 9
     */
    static const int32_t KEYCODE_WORDPROCESSOR;

    /**
     * Editor key
     *
     * @since 9
     */
    static const int32_t KEYCODE_EDITOR;

    /**
     * Spreadsheet key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SPREADSHEET;

    /**
     * Graphics Editor key
     *
     * @since 9
     */
    static const int32_t KEYCODE_GRAPHICSEDITOR;

    /**
     * Presentation key
     *
     * @since 9
     */
    static const int32_t KEYCODE_PRESENTATION;

    /**
     * Database key
     *
     * @since 9
     */
    static const int32_t KEYCODE_DATABASE;

    /**
     * News key
     *
     * @since 9
     */
    static const int32_t KEYCODE_NEWS;

    /**
     * Voice mailbox
     *
     * @since 9
     */
    static const int32_t KEYCODE_VOICEMAIL;

    /**
     * Address Book key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ADDRESSBOOK;

    /**
     * Messenger key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MESSENGER;

    /**
     * Brightness Toggle key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRIGHTNESS_TOGGLE;

    /**
     * Spell Check key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SPELLCHECK;

    /**
     * Coffee key
     *
     * @since 9
     */
    static const int32_t KEYCODE_COFFEE;

    /**
     * Media Repeat key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MEDIA_REPEAT;

    /**
     * Images key
     *
     * @since 9
     */
    static const int32_t KEYCODE_IMAGES;

    /**
     * Button Configuration key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BUTTONCONFIG;

    /**
     * Task Manager key
     *
     * @since 9
     */
    static const int32_t KEYCODE_TASKMANAGER;

    /**
     * Journal key
     *
     * @since 9
     */
    static const int32_t KEYCODE_JOURNAL;

    /**
     * Control Panel key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CONTROLPANEL;

    /**
     * Application Select key
     *
     * @since 9
     */
    static const int32_t KEYCODE_APPSELECT;

    /**
     * Screen Saver key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SCREENSAVER;

    /**
     * Assistant key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ASSISTANT;

    /**
     * Next Keyboard Layout key
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBD_LAYOUT_NEXT;

    /**
     * Minimum Brightness key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRIGHTNESS_MIN;

    /**
     * Maximum Brightness key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRIGHTNESS_MAX;

    /**
     * Keyboard Input Assist_Previous
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDINPUTASSIST_PREV;

    /**
     * Keyboard Input Assist_Next
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDINPUTASSIST_NEXT;

    /**
     * Keyboard Input Assist_Previous Group
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDINPUTASSIST_PREVGROUP;

    /**
     * Keyboard Input Assist_Next Group
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDINPUTASSIST_NEXTGROUP;

    /**
     * Keyboard Input Assist_Accept
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDINPUTASSIST_ACCEPT;

    /**
     * Keyboard Input Assist_Cancel
     *
     * @since 9
     */
    static const int32_t KEYCODE_KBDINPUTASSIST_CANCEL;

    /**
     * Front key
     *
     * @since 9
     */
    static const int32_t KEYCODE_FRONT;

    /**
     * Setup key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SETUP;

    /**
     * Wakeup key
     *
     * @since 9
     */
    static const int32_t KEYCODE_WAKEUP;

    /**
     * Send File key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SENDFILE;

    /**
     * Delete File key
     *
     * @since 9
     */
    static const int32_t KEYCODE_DELETEFILE;

    /**
     * File Transfer (XFER) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_XFER;

    /**
     * Program key 1
     *
     * @since 9
     */
    static const int32_t KEYCODE_PROG1;

    /**
     * Program key 2
     *
     * @since 9
     */
    static const int32_t KEYCODE_PROG2;

    /**
     * MS-DOS key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MSDOS;

    /**
     * Screen Lock key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SCREENLOCK;

    /**
     * Direction Rotation Display key
     *
     * @since 9
     */
    static const int32_t KEYCODE_DIRECTION_ROTATE_DISPLAY;

    /**
     * Cycle Windows key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CYCLEWINDOWS;

    /**
     * Computer key
     *
     * @since 9
     */
    static const int32_t KEYCODE_COMPUTER;

    /**
     * Eject Close CD key
     *
     * @since 9
     */
    static const int32_t KEYCODE_EJECTCLOSECD;

    /**
     * ISO key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ISO;

    /**
     * Move key
     *
     * @since 9
     */
    static const int32_t KEYCODE_MOVE;

    /**
     * F13 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F13;

    /**
     * F14 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F14;

    /**
     * F15 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F15;

    /**
     * F16 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F16;

    /**
     * F17 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F17;

    /**
     * F18 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F18;

    /**
     * F19 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F19;

    /**
     * F20 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F20;

    /**
     * F21 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F21;

    /**
     * F22 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F22;

    /**
     * F23 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F23;

    /**
     * F24 key
     *
     * @since 9
     */
    static const int32_t KEYCODE_F24;

    /**
     * Program key 3
     *
     * @since 9
     */
    static const int32_t KEYCODE_PROG3;

    /**
     * Program key 4
     *
     * @since 9
     */
    static const int32_t KEYCODE_PROG4;

    /**
     * Dashboard key
     *
     * @since 9
     */
    static const int32_t KEYCODE_DASHBOARD;

    /**
     * Suspend key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SUSPEND;

    /**
     * Higher Order Path key
     *
     * @since 9
     */
    static const int32_t KEYCODE_HP;

    /**
     * Sound key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SOUND;

    /**
     * Question key
     *
     * @since 9
     */
    static const int32_t KEYCODE_QUESTION;

    /**
     * Connect key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CONNECT;

    /**
     * Sport key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SPORT;

    /**
     * Shop key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SHOP;

    /**
     * Alterase key
     *
     * @since 9
     */
    static const int32_t KEYCODE_ALTERASE;

    /**
     * Enable/Disable Video Mode key
     *
     * @since 9
     */
    static const int32_t KEYCODE_SWITCHVIDEOMODE;

    /**
     * Battery key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BATTERY;

    /**
     * Bluetooth key
     *
     * @since 9
     */
    static const int32_t KEYCODE_BLUETOOTH;

    /**
     * WLAN key
     *
     * @since 9
     */
    static const int32_t KEYCODE_WLAN;

    /**
     * Ultra-wideband (UWB) key
     *
     * @since 9
     */
    static const int32_t KEYCODE_UWB;

    /**
     * WWAN WiMAX key
     *
     * @since 9
     */
    static const int32_t KEYCODE_WWAN_WIMAX;

    /**
     * RF Kill key
     *
     * @since 9
     */
    static const int32_t KEYCODE_RFKILL;

    /**
     * Channel key
     *
     * @since 9
     */
    static const int32_t KEYCODE_CHANNEL;

    /**
     * Button 0
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_0;

    /**
     * Button 1
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_1;

    /**
     * Button 2
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_2;

    /**
     * Button 3
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_3;

    /**
     * Button 4
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_4;

    /**
     * Button 5
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_5;

    /**
     * Button 6
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_6;

    /**
     * Button 7
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_7;

    /**
     * Button 8
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_8;

    /**
     * Button 9
     *
     * @since 9
     */
    static const int32_t KEYCODE_BTN_9;

    /**
     * Virtual keyboard 1
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT1;

    /**
     * Virtual keyboard 2
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT2;

    /**
     * Virtual keyboard 3
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT3;

    /**
     * Virtual keyboard 4
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT4;

    /**
     * Virtual keyboard 5
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT5;

    /**
     * Virtual keyboard 6
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT6;

    /**
     * Virtual keyboard 7
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT7;

    /**
     * Virtual keyboard 8
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT8;

    /**
     * Virtual keyboard 9
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT9;

    /**
     * Virtual keyboard 10
     *
     * @since 9
     */
    static const int32_t KEYCODE_BRL_DOT10;

   /**
     * PEN_AIR_MOUSE
     *
     * @since 9
     */
    static const int32_t KEYCODE_KEY_PEN_AIR_MOUSE;

    /**
     * PEN_LIGHT_PINCH
     *
     * @since 9
     */
    static const int32_t KEYCODE_KEY_PEN_LIGHT_PINCH;

    /**
     * KEYCODE_PEN_AI
     *
     * @since 9
     */
    static const int32_t KEYCODE_KEY_PEN_AI;

    /**
     * KEYCODE_PEN_AI
     *
     * @since 9
     */
    static const int32_t KEYCODE_KEY_PEN_END_CLICK;

    /**
     * KEYCODE_PEN_AI
     *
     * @since 9
     */
    static const int32_t KEYCODE_KEY_PEN_END_DOUBLE_CLICK;

    /**
     * KEYCODE_PEN_AI
     *
     * @since 9
     */
    static const int32_t KEYCODE_KEY_PEN_MODE_SWITCH;

    /**
     * Pen lift key
     *
     * @since 26.0.0
     */
    static const int32_t KEYCODE_KEY_LIFT_PEN;
 
     /**
     * Pen down key
     *
     * @since 26.0.0
     */
    static const int32_t KEYCODE_KEY_DOWN_PEN;

    /**
     * KEYCODE_MMX_TOUCH
     *
     * @since 24
     */
    static const int32_t KEYCODE_MMX_TOUCH;

    /**
     * Left Knob roll-up
     * <p>In contrast to {@link #static const int32_t KEYCODE_LEFT_KNOB_ROLL_DOWN},
     * this key is used to roll the left knob upwards. The knob function is scenario-specific,
     * for example, increasing the volume or air conditioner temperature.
     *
     * @since 9
     */
    static const int32_t KEYCODE_LEFT_KNOB_ROLL_UP;

    /**
     * Left Knob roll-down
     * <p>In contrast to {@link #static const int32_t KEYCODE_LEFT_KNOB_ROLL_UP},
     * this key is used to roll the left knob downwards. The knob function is
     * scenario-specific, for example, reducing the volume or air
     * conditioner temperature.
     * @since 9
     */
    static const int32_t KEYCODE_LEFT_KNOB_ROLL_DOWN;

    /**
     * Left Knob
     * <p>Pressing the knob will activate its adjustment function.
     *
     * @since 9
     */
    static const int32_t KEYCODE_LEFT_KNOB;

    /**
     * Right Knob roll-up
     * <p>In contrast to {@link #static const int32_t KEYCODE_RIGHT_KNOB_ROLL_DOWN},
     * this key is used to roll the right knob upwards. The knobfunction is scenario-specific,
     * for example, increasing the volume or air conditioner temperature.
     *
     * @since 9
     */
    static const int32_t KEYCODE_RIGHT_KNOB_ROLL_UP;

    /**
     * Right Knob roll-down
     * <p>In contrast to {@link #static const int32_t KEYCODE_RIGHT_KNOB_ROLL_UP},
     * this key is used to roll the right knob downwards. The knobfunction is scenario-specific,
     * for example, reducing the volume or air conditioner temperature.
     *
     * @since 9
     */
    static const int32_t KEYCODE_RIGHT_KNOB_ROLL_DOWN;

    /**
     * Right Knob
     * <p>Pressing the knob will activate its adjustment function.
     *
     * @since 9
     */
    static const int32_t KEYCODE_RIGHT_KNOB;

    /**
     * Audio Source Switch button
     * <p>Pressing this button will enable the audio source. Depending on the
     * actual scenario, it may also indicate that the Bluetooth call control
     * button is pressed.
     * @since 9
     */
    static const int32_t KEYCODE_VOICE_SOURCE_SWITCH;

    /**
     * Menu key
     * <p>Pressing this key will display the launcher page.
     *
     * @since 9
     */
    static const int32_t KEYCODE_LAUNCHER_MENU;

    /**
     * Stylus key
     *
     * @since 12
     */
    static const int32_t KEYCODE_STYLUS_SCREEN;

    /**
     * Unknown key operation, which is usually used to indicate the initial invalid value.
     *
     * @since 9
     */
    static const int32_t KEY_ACTION_UNKNOWN;

    /**
     * Action Cancel
     * Pressing this key will cause the failure in reporting the Action Up event.
     * Instead, the action of pressing the Action Cancel key is reported.
     *
     * @since 9
     */
    static const int32_t KEY_ACTION_CANCEL;

    /**
     * Action Down
     *
     * @since 9
     */
    static const int32_t KEY_ACTION_DOWN;

    /**
     * Action Up
     *
     * @since 9
     */
    static const int32_t KEY_ACTION_UP;

    /**
     * Unknown intention
     *
     * @since 9
     */
    static const int32_t INTENTION_UNKNOWN;

    /**
     * Up intention
     *
     * @since 9
     */
    static const int32_t INTENTION_UP;

    /**
     * Down intention
     *
     * @since 9
     */
    static const int32_t INTENTION_DOWN;

    /**
     * Left intention
     *
     * @since 9
     */
    static const int32_t INTENTION_LEFT;

    /**
     * Right intention
     *
     * @since 9
     */
    static const int32_t INTENTION_RIGHT;

    /**
     * Select intention
     *
     * @since 9
     */
    static const int32_t INTENTION_SELECT;

    /**
     * Escape intention
     *
     * @since 9
     */
    static const int32_t INTENTION_ESCAPE;

    /**
     * Back intention
     *
     * @since 9
     */
    static const int32_t INTENTION_BACK;

    /**
     * Forward intention
     *
     * @since 9
     */
    static const int32_t INTENTION_FORWARD;

    /**
     * Menu intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MENU;

    /**
     * Home intention
     *
     * @since 9
     */
    static const int32_t INTENTION_HOME;

    /**
     * Page Up intention
     *
     * @since 9
     */
    static const int32_t INTENTION_PAGE_UP;

    /**
     * Page down intention
     *
     * @since 9
     */
    static const int32_t INTENTION_PAGE_DOWN;

    /**
     * Zoom out intention
     *
     * @since 9
     */
    static const int32_t INTENTION_ZOOM_OUT;

    /**
     * Zoom in intention
     *
     * @since 9
     */
    static const int32_t INTENTION_ZOOM_IN;

    /**
     * Media play/pause intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MEDIA_PLAY_PAUSE;

    /**
     * Media fast forward intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MEDIA_FAST_FORWARD;

    /**
     * Media fast rewind intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MEDIA_FAST_REWIND;

    /**
     * Media fast playback intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MEDIA_FAST_PLAYBACK;

    /**
     * Media next intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MEDIA_NEXT;

    /**
     * Media previous intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MEDIA_PREVIOUS;

    /**
     * Media mute intention
     *
     * @since 9
     */
    static const int32_t INTENTION_MEDIA_MUTE;

    /**
     * Volume up intention
     *
     * @since 9
     */
    static const int32_t INTENTION_VOLUTE_UP;

    /**
     * Volume down intention
     *
     * @since 9
     */
    static const int32_t INTENTION_VOLUTE_DOWN;

    /**
     * Call intention
     *
     * @since 9
     */
    static const int32_t INTENTION_CALL;

    /**
     * End call intention
     *
     * @since 9
     */
    static const int32_t INTENTION_ENDCALL;

    /**
     * Reject call intention
     *
     * @since 9
     */
    static const int32_t INTENTION_REJECTCALL;

    /**
     * Camera intention
     *
     * @since 9
     */
    static const int32_t INTENTION_CAMERA;

    /**
     * Outbound Notification Center
     *
     * @since 11
     */
    static const int32_t KEYCODE_CALL_NOTIFICATION_CENTER;

    /**
     * Outbound Control Center
     *
     * @since 11
     */
    static const int32_t KEYCODE_CALL_CONTROL_CENTER;

    /**
     * Dagger Press
     *
     * @since 12
     */
    static const int32_t KEYCODE_DAGGER_CLICK;

    /**
     * Dagger Click
     *
     * @since 13
     */
    static const int32_t KEYCODE_DAGGER_DOUBLE_CLICK;

    /**
     * Dagger Long Press
     *
     * @since 14
     */
    static const int32_t KEYCODE_DAGGER_LONG_PRESS;

    /**
     * Aod slide unlock
     *
     * @since 16
     */
    static const int32_t KEYCODE_AOD_SLIDE_UNLOCK;

    /**
     * Recent
     *
     * @since 18
     */
    static const int32_t KEYCODE_RECENT;

    /**
     * Floating back
     *
     * @since 18
     */
    static const int32_t KEYCODE_FLOATING_BACK;
    /**
     * Div key
     *
     * @since 20
     */
    static const int32_t KEYCODE_DIV;

    /**
     * Assistant By Mouse
     *
     * @since 26.0.0
     */
    static const int32_t KEYCODE_MOUSE_ASSISTANT;

    /**
     * Intelligence Selection By Mouse
     *
     * @since 26.0.0
     */
    static const int32_t KEYCODE_MOUSE_INTELLIGENCE_SELECTION;

    /**
     * Single tapping the smart phone's touch screen event, which is used when the Always On Display is enabled
     *
     * @since 26.0.0
     */
    static const int32_t KEYCODE_AOD_SINGLE_CLICK;

    /**
     * XKey
     *
     * @since 24
     */
    static const int32_t KEYCODE_XKEY;

    /**
     * FINGERPRINT_SLIDE_UP
     * @since 26.0.0
     */
    static const int32_t KEYCODE_FINGERPRINT_SLIDE_UP;

    /**
     * FINGERPRINT_SLIDE_DOWN
     * @since 26.0.0
     */
    static const int32_t KEYCODE_FINGERPRINT_SLIDE_DOWN;

    /**
     * Long press the writing button of pen in mouse mode
     * @since 26.0.0
     */
    static const int32_t KEYCODE_PEN_WRITING_MOUSE;

    /**
     * Wrist Turn key
     *
     * @since 26.0.0
     */
    static const int32_t KEYCODE_WRIST_TURN;

    /**
     * Back panel double tap key
     * Used for LuGu privacy mode
     * @internal
     * @since 26.0.0
     */
    static const int32_t KEYCODE_BACK_PANEL_DOUBLE_TAP;

    /**
     * Extended function key mask (fourth byte)
     * Used to identify extended function keys by checking bits 24-31
     * @internal
     * @since 26.0.0
     */
    static const uint32_t EXTENDED_FUNCTION_KEY_MASK;

    /**
     * Extended function key flag (fourth byte = 0x01)
     * @internal
     * @since 26.0.0
     */
    static const uint32_t EXTENDED_FUNCTION_KEY_FLAG;

    /**
     * Extended function key base
     * Base extended function key for internal system use
     * Reserved range: 16777216 - 33554431 (0x01000000 - 0x01FFFFFF)
     *
     * Extended function keys will skip interceptors, filters, and subscribers.
     * They are only dispatched to windows and not exposed to applications.
     *
     * @internal
     * @since 26.0.0
     */
    static const int32_t KEYCODE_EXT_FN_MIN;

    /**
     * Extended function key maximum value
     * Defines the upper bound of the reserved extended function key range
     * Reserved range: 16777216 - 33554431 (0x01000000 - 0x01FFFFFF)
     * Total available keys: 16777216
     * @internal
     * @since 26.0.0
     */
    static const int32_t KEYCODE_EXT_FN_MAX;

    /**
     * Business exclusive key mask (third byte)
     * Used to identify business exclusive keys within extended function key range
     * @internal
     * @since 26.0.0
     */
    static const uint32_t BUSINESS_EXCLUSIVE_KEY_MASK;

    /**
     * Business exclusive key flag (third byte = 0x01)
     * @internal
     * @since 26.0.0
     */
    static const uint32_t BUSINESS_EXCLUSIVE_KEY_FLAG;

    /**
     * Business exclusive key minimum value
     * Reserved range: 16842752 - 16859135 (0x01010000 - 0x0101FFFF)
     * @internal
     * @since 26.0.0
     */
    static const int32_t KEYCODE_BIZ_EXCLUSIVE_MIN;

    /**
     * Business exclusive key maximum value
     * @internal
     * @since 26.0.0
     */
    static const int32_t KEYCODE_BIZ_EXCLUSIVE_MAX;

public:
    class KeyItem {
    public:
        KeyItem();
        ~KeyItem();

        /**
         * @brief Obtains the key code of the key.
         * @return Returns the key code.
         * @since 9
         */
        int32_t GetKeyCode() const;

        /**
         * @brief Sets a key code for the key.
         * @param keyCode Indicates the key code to set.
         * @return void
         * @since 9
         */
        void SetKeyCode(int32_t keyCode);

        /**
         * @brief Obtains the raw key code of the key.
         * @return Returns the raw key code.
         * @since 26.0.0
         */
        int32_t GetRawCode() const;

        /**
         * @brief Sets a raw key code for the key.
         * @param rawCode Indicates the raw key code to set.
         * @return void
         * @since 26.0.0
         */
        void SetRawCode(int32_t rawCode);

        /**
         * @brief Obtains the time when the key is pressed.
         * @return Returns the time.
         * @since 9
         */
        int64_t GetDownTime() const;

        /**
         * @brief Sets the time when the key is pressed.
         * @param downTime Indicates the time to set.
         * @return void
         * @since 9
         */
        void SetDownTime(int64_t downTime);

        /**
         * @brief Obtains the unique identifier of the device that reports this event.
         * @return Returns the device ID.
         * @since 9
         */
        int32_t GetDeviceId() const;

        /**
         * @brief Sets a unique identifier for the device that reports this event.
         * @param deviceId Indicates the device ID to set.
         * @return void
         * @since 9
         */
        void SetDeviceId(int32_t deviceId);

        /**
         * @brief Checks whether the key is pressed.
         * @return Returns <b>true</b> if the key is pressed; returns <b>false</b> otherwise.
         * @since 9
         */
        bool IsPressed() const;

        /**
         * @brief Sets whether to enable the pressed state for the key.
         * @param pressed Specifies whether to set the pressed state for the key.
         * The value <b>true</b> means to set the pressed state for the key,
         * and the <b>false</b> means the opposite.
         * @return void
         * @since 9
         */
        void SetPressed(bool pressed);

        /**
         * @brief Sets the Unicode value corresponding to the current key.
         * @param unicode Unicode value.
         * @return Null
         * @since 9
         */
        void SetUnicode(uint32_t unicode);

        /**
         * @brief Obtains the Unicode value of the current key.
         * @return Returns the Unicode value.
         * @since 9
         */
        uint32_t GetUnicode() const;

    public:
        /**
         * @brief Writes data to a <b>Parcel</b> object.
         * @param out Indicates the object into which data will be written.
         * @return Returns <b>true</b> if the data is successfully written; returns <b>false</b> otherwise.
         * @since 9
         */
        bool WriteToParcel(Parcel &out) const;

        /**
         * @brief Reads data from a <b>Parcel</b> object.
         * @param in Indicates the object from which data will be read.
         * @return Returns <b>true</b> if the data is successfully read; returns <b>false</b> otherwise.
         * @since 9
         */
        bool ReadFromParcel(Parcel &in);

    private:
        bool pressed_ = false;
        int32_t deviceId_ = -1;
        int32_t keyCode_ = -1;
        int32_t rawCode_ = -1;
        int64_t downTime_ = 0;
        uint32_t unicode_ { 0 };
    };

public:
     static std::shared_ptr<KeyEvent> from(std::shared_ptr<InputEvent> inputEvent);

    /**
     * @brief Converts the action of this key event as a string.
     * @param action Indicates the action represented by pressing a key.
     * @return Returns the pointer to the action string.
     * @since 9
     */
    static const char* ActionToString(int32_t action);

    /**
     * @brief Converts the key code of this key event as a string.
     * @param keyCode Indicates the code that identifies the key.
     * @return Returns the pointer to the key code string.
     * @since 9
     */
    static const char* KeyCodeToString(int32_t keyCode);

    static std::shared_ptr<KeyEvent> Clone(std::shared_ptr<KeyEvent> keyEvent);

public:
    /**
     * @brief Constructor of KeyEvent.
     * @since 9
     */
    KeyEvent(const KeyEvent& other);

    /**
     * @brief Virtual destructor of KeyEvent.
     * @since 9
     */
    virtual ~KeyEvent();

    KeyEvent& operator=(const KeyEvent& other) = delete;
    DISALLOW_MOVE(KeyEvent);

    /**
     * @brief Creates a key event.
     * @since 9
     */
    static std::shared_ptr<KeyEvent> Create();

    virtual void Reset() override;

    virtual std::string ToString() override;

    /**
     * @brief Get the hash value.
     * @return size_t
     * @since 21
     */
    virtual size_t Hash() override;

    /**
     * @brief Obtains the key code of this key event.
     * @return Returns the key code.
     * @since 9
     */
    int32_t GetKeyCode() const;

    /**
     * @brief Sets a key code for this key event.
     * @param keyCode Indicates the key code to set.
     * @return void
     * @since 9
     */
    void SetKeyCode(int32_t keyCode);

    /**
     * @brief Obtains the raw key code of this key event.
     * @return Returns the raw key code.
     * @since 26.0.0
     */
    int32_t GetRawCode() const;

    /**
     * @brief Sets a raw key code for this key event.
     * @param rawCode Indicates the raw key code to set.
     * @return void
     * @since 26.0.0
     */
    void SetRawCode(int32_t rawCode);

    /**
     * @brief Obtains the key action of this key event.
     * @return Returns the key action.
     * @since 9
     */
    int32_t GetKeyAction() const;

    /**
     * @brief Sets a key action for this key event.
     * @param keyAction Indicates the key action to set.
     * @return void
     * @since 9
     */
    void SetKeyAction(int32_t keyAction);

    /**
     * @brief Obtains the list of pressed keys in this key event.
     * @return Returns the list of pressed keys.
     * @since 9
     */
    std::vector<int32_t> GetPressedKeys() const;

    /**
     * @brief Adds a key item.
     * @param keyItem Indicates the key item to add.
     * @return void
     * @since 9
     */
    void AddKeyItem(const KeyItem& keyItem);

    /**
     * @brief Set key item.
     * @param keyItem Indicates the key item to set.
     * @return void
     * @since 13
     */
    void SetKeyItem(std::vector<KeyItem> keyItem);

    /**
     * @brief Obtains the key item.
     * @return Returns the key item.
     * @since 9
     */
    std::vector<KeyEvent::KeyItem> GetKeyItems() const;

    /**
     * @brief Adds the pressed key items.
     * @param keyItem Indicates the key item to add.
     * @return void
     * @since 9
     */
    void AddPressedKeyItems(const KeyItem& keyItem);

    /**
     * @brief Removes the released key Items.
     * @param keyItem Indicates the key item to remove.
     * @return void
     * @since 9
     */
    void RemoveReleasedKeyItems(const KeyItem& keyItem);

    /**
     * @brief Obtains the key item of this key event.
     * @return Returns the key item.
     * @since 9
     */
    std::optional<KeyEvent::KeyItem> GetKeyItem() const;

    /**
     * @brief Obtains the key item based on a key code.
     * @param keyCode Indicates the key code.
     * @return Returns the key item.
     * @since 9
     */
    std::optional<KeyEvent::KeyItem> GetKeyItem(int32_t keyCode) const;

    /**
     * @brief Checks whether this key event is valid.
     * @return Returns <b>true</b> if the key event is valid; returns <b>false</b> otherwise.
     * @since 9
     */
    bool IsValid() const;

    /**
     * @brief Converts a specific key to a function key.
     * @param keyCode Indicates the keycode of the key to convert.
     * @return Returns the converted function key.
     * @since 9
     */
    int32_t TransitionFunctionKey(int32_t keyCode);

    /**
     * @brief Sets the enable status of the specified function key.
     * @param funcKey Indicates the function key.
     * @param value Indicates the enable status of the function key.
     * @return Returns the result indicating whether the setting is successful.
     * @since 9
     */
    int32_t SetFunctionKey(int32_t funcKey, int32_t value);

    /**
     * @brief Obtains the enable status of the specified function key.
     * @param funcKey Indicates the function key.
     * @return Returns the enable status of the function key.
     * @since 9
     */
    bool GetFunctionKey(int32_t funcKey) const;

    /**
     * @brief Obtains the key intention of the current event.
     * @param void
     * @return Returns the key intention of the current event.
     * @since 9
     */
    int32_t GetKeyIntention() const;

    /**
     * @brief Sets the key intention for the current key event.
     * @param keyIntention Specified key intention.
     * @return void
     * @since 9
     */
    void SetKeyIntention(int32_t keyIntention);

    /**
     * @brief Gets the automatic keystroke repeat status.
     * @return bool
     * @since 10
     */
    bool IsRepeat() const;

    /**
     * @brief Sets the injection key to repeat automatically.
     * @param repeat Key injection automatic repeat identification.
     * @return void
     * @since 10
     */
    void SetRepeat(bool repeat);

    /**
     * @brief Gets the real-time operation keystroke repeat status.
     * @return bool
     * @since 13
     */
    bool IsRepeatKey() const;

    /**
     * @brief Sets the injection key to repeat practical real-time operation.
     * @param repeat Key injection automatic repeat identification.
     * @return void
     * @since 13
     */
    void SetRepeatKey(bool repeatKey);

    /**
     * @brief Gets the repeat count of the current key event.
     * @return Returns the repeat count.
     * @since 26.0.0
     */
    int32_t GetRepeatCount() const;

    /**
     * @brief Sets the repeat count of the current key event.
     * @param repeatCount Indicates the repeat count to set.
     * @return void
     * @since 26.0.0
     */
    void SetRepeatCount(int32_t repeatCount);

    bool IsKeyPressed(int32_t keyCode) const;

    bool HasKeyItem(int32_t keyCode) const;

    /**
     * @brief Check if this key event is an extended function key
     * @return Returns true if this event is an extended function key; returns false otherwise
     * @internal
     * @since 26.0.0
     */
    bool IsExtendedFunctionKey() const;

    /**
     * @brief Check if this key event is a business exclusive key
     * @return Returns true if this event is a business exclusive key; returns false otherwise
     * @internal
     * @since 26.0.0
     */
    bool IsBusinessExclusiveKey() const;
#ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
    /**
     * @brief Set the enhance data.
     * @return void.
     * @since 11
     */
    void SetEnhanceData(std::vector<uint8_t> enhanceData);
    /**
     * @brief Obtains the enhance data.
     * @return Returns the enhance data.
     * @since 11
     */
    std::vector<uint8_t> GetEnhanceData() const;
#endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
public:
    /**
     * @brief Writes data to a <b>Parcel</b> object.
     * @param out Indicates the object into which data will be written.
     * @return Returns <b>true</b> if the data is successfully written; returns <b>false</b> otherwise.
     * @since 9
     */
    bool WriteToParcel(Parcel &out) const;
    bool Marshalling(Parcel &out) const override;

    /**
     * @brief Reads data from a <b>Parcel</b> object.
     * @param in Indicates the object from which data will be read.
     * @return Returns <b>true</b> if the data is successfully read; returns <b>false</b> otherwise.
     * @since 9
     */
    bool ReadFromParcel(Parcel &in);
    static KeyEvent *Unmarshalling(Parcel &in);

    /**
     * @brief Converts a key event action into a short string.
     * @param Indicates the key event action.
     * @return Returns the string converted from the key action.
     * @since 12
    */
    static std::string_view ActionToShortStr(int32_t action);
protected:
    /**
     * @brief Constructs an input event object by using the specified input event type. Generally, this method
     * is used to construct a base class object when constructing a derived class object.
     * @since 9
     */
    explicit KeyEvent(int32_t eventType);

public:
    void SetFourceMonitorFlag(bool fourceMonitorFlag);
    bool GetFourceMonitorFlag();
    void AddReleasedKeyItems(const KeyItem& keyItem);
    void RemoveReleasedKeyItems();

private:
#ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
    bool ReadEnhanceDataFromParcel(Parcel &in);
#endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
    bool IsValidKeyItem() const;

private:
    int32_t keyCode_ { -1 };
    int32_t rawCode_ { -1 };
    std::vector<KeyItem> keys_;
    int32_t keyAction_ { 0 };
    int32_t keyIntention_ { -1 };
    bool numLock_ { false };
    bool capsLock_ { false };
    bool scrollLock_ { false };
#ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
    std::vector<uint8_t> enhanceData_;
#endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
    bool repeat_ { false };
    bool repeatKey_ { false };
    int32_t repeatCount_ { 0 };
    bool fourceMonitorFlag_ { false };
};
} // namespace MMI
} // namespace OHOS
#endif // KEY_EVENT_H