/*
 * Copyright (c) 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.
 */

#include "ohos.multimodalInput.keyCode.impl.h"

#undef MMI_LOG_TAG
#define MMI_LOG_TAG "ohos.multimodalInput.keyCode.impl"

namespace OHOS {
namespace MMI {

const static std::map<int32_t, keyCode::KeyCode> KEY_CODE_TRANSFORMATION = {
    { KEYCODE_FN_ETS,                        keyCode::KeyCode::key_t::KEYCODE_FN },
    { KEYCODE_UNKNOWN_ETS,                   keyCode::KeyCode::key_t::KEYCODE_UNKNOWN },
    { KEYCODE_HOME_ETS,                      keyCode::KeyCode::key_t::KEYCODE_HOME },
    { KEYCODE_BACK_ETS,                      keyCode::KeyCode::key_t::KEYCODE_BACK },
    { KEYCODE_HEADSETHOOK_ETS,               keyCode::KeyCode::key_t::KEYCODE_HEADSETHOOK },
    { KEYCODE_SEARCH_ETS,                    keyCode::KeyCode::key_t::KEYCODE_SEARCH },
    { KEYCODE_MEDIA_PLAY_PAUSE_ETS,          keyCode::KeyCode::key_t::KEYCODE_MEDIA_PLAY_PAUSE },
    { KEYCODE_MEDIA_STOP_ETS,                keyCode::KeyCode::key_t::KEYCODE_MEDIA_STOP },
    { KEYCODE_MEDIA_NEXT_ETS,                keyCode::KeyCode::key_t::KEYCODE_MEDIA_NEXT },
    { KEYCODE_MEDIA_PREVIOUS_ETS,            keyCode::KeyCode::key_t::KEYCODE_MEDIA_PREVIOUS },
    { KEYCODE_MEDIA_REWIND_ETS,              keyCode::KeyCode::key_t::KEYCODE_MEDIA_REWIND },
    { KEYCODE_MEDIA_FAST_FORWARD_ETS,        keyCode::KeyCode::key_t::KEYCODE_MEDIA_FAST_FORWARD },
    { KEYCODE_VOLUME_UP_ETS,                 keyCode::KeyCode::key_t::KEYCODE_VOLUME_UP },
    { KEYCODE_VOLUME_DOWN_ETS,               keyCode::KeyCode::key_t::KEYCODE_VOLUME_DOWN },
    { KEYCODE_POWER_ETS,                     keyCode::KeyCode::key_t::KEYCODE_POWER },
    { KEYCODE_CAMERA_ETS,                    keyCode::KeyCode::key_t::KEYCODE_CAMERA },
    { KEYCODE_VOLUME_MUTE_ETS,               keyCode::KeyCode::key_t::KEYCODE_VOLUME_MUTE },
    { KEYCODE_MUTE_ETS,                      keyCode::KeyCode::key_t::KEYCODE_MUTE },
    { KEYCODE_BRIGHTNESS_UP_ETS,             keyCode::KeyCode::key_t::KEYCODE_BRIGHTNESS_UP },
    { KEYCODE_BRIGHTNESS_DOWN_ETS,           keyCode::KeyCode::key_t::KEYCODE_BRIGHTNESS_DOWN },
    { KEYCODE_0_ETS,                         keyCode::KeyCode::key_t::KEYCODE_0 },
    { KEYCODE_1_ETS,                         keyCode::KeyCode::key_t::KEYCODE_1 },
    { KEYCODE_2_ETS,                         keyCode::KeyCode::key_t::KEYCODE_2 },
    { KEYCODE_3_ETS,                         keyCode::KeyCode::key_t::KEYCODE_3 },
    { KEYCODE_4_ETS,                         keyCode::KeyCode::key_t::KEYCODE_4 },
    { KEYCODE_5_ETS,                         keyCode::KeyCode::key_t::KEYCODE_5 },
    { KEYCODE_6_ETS,                         keyCode::KeyCode::key_t::KEYCODE_6 },
    { KEYCODE_7_ETS,                         keyCode::KeyCode::key_t::KEYCODE_7 },
    { KEYCODE_8_ETS,                         keyCode::KeyCode::key_t::KEYCODE_8 },
    { KEYCODE_9_ETS,                         keyCode::KeyCode::key_t::KEYCODE_9 },
    { KEYCODE_STAR_ETS,                      keyCode::KeyCode::key_t::KEYCODE_STAR },
    { KEYCODE_POUND_ETS,                     keyCode::KeyCode::key_t::KEYCODE_POUND },
    { KEYCODE_DPAD_UP_ETS,                   keyCode::KeyCode::key_t::KEYCODE_DPAD_UP },
    { KEYCODE_DPAD_LEFT_ETS,                 keyCode::KeyCode::key_t::KEYCODE_DPAD_LEFT },
    { KEYCODE_DPAD_RIGHT_ETS,                keyCode::KeyCode::key_t::KEYCODE_DPAD_RIGHT },
    { KEYCODE_DPAD_CENTER_ETS,               keyCode::KeyCode::key_t::KEYCODE_DPAD_CENTER },
    { KEYCODE_A_ETS,                         keyCode::KeyCode::key_t::KEYCODE_A },
    { KEYCODE_B_ETS,                         keyCode::KeyCode::key_t::KEYCODE_B },
    { KEYCODE_C_ETS,                         keyCode::KeyCode::key_t::KEYCODE_C },
    { KEYCODE_D_ETS,                         keyCode::KeyCode::key_t::KEYCODE_D },
    { KEYCODE_E_ETS,                         keyCode::KeyCode::key_t::KEYCODE_E },
    { KEYCODE_F_ETS,                         keyCode::KeyCode::key_t::KEYCODE_F },
    { KEYCODE_G_ETS,                         keyCode::KeyCode::key_t::KEYCODE_G },
    { KEYCODE_H_ETS,                         keyCode::KeyCode::key_t::KEYCODE_H },
    { KEYCODE_I_ETS,                         keyCode::KeyCode::key_t::KEYCODE_I },
    { KEYCODE_J_ETS,                         keyCode::KeyCode::key_t::KEYCODE_J },
    { KEYCODE_K_ETS,                         keyCode::KeyCode::key_t::KEYCODE_K },
    { KEYCODE_L_ETS,                         keyCode::KeyCode::key_t::KEYCODE_L },
    { KEYCODE_M_ETS,                         keyCode::KeyCode::key_t::KEYCODE_M },
    { KEYCODE_N_ETS,                         keyCode::KeyCode::key_t::KEYCODE_N },
    { KEYCODE_O_ETS,                         keyCode::KeyCode::key_t::KEYCODE_O },
    { KEYCODE_P_ETS,                         keyCode::KeyCode::key_t::KEYCODE_P },
    { KEYCODE_Q_ETS,                         keyCode::KeyCode::key_t::KEYCODE_Q },
    { KEYCODE_R_ETS,                         keyCode::KeyCode::key_t::KEYCODE_R },
    { KEYCODE_S_ETS,                         keyCode::KeyCode::key_t::KEYCODE_S },
    { KEYCODE_T_ETS,                         keyCode::KeyCode::key_t::KEYCODE_T },
    { KEYCODE_U_ETS,                         keyCode::KeyCode::key_t::KEYCODE_U },
    { KEYCODE_V_ETS,                         keyCode::KeyCode::key_t::KEYCODE_V },
    { KEYCODE_W_ETS,                         keyCode::KeyCode::key_t::KEYCODE_W },
    { KEYCODE_X_ETS,                         keyCode::KeyCode::key_t::KEYCODE_X },
    { KEYCODE_Y_ETS,                         keyCode::KeyCode::key_t::KEYCODE_Y },
    { KEYCODE_Z_ETS,                         keyCode::KeyCode::key_t::KEYCODE_Z },
    { KEYCODE_COMMA_ETS,                     keyCode::KeyCode::key_t::KEYCODE_COMMA },
    { KEYCODE_PERIOD_ETS,                    keyCode::KeyCode::key_t::KEYCODE_PERIOD },
    { KEYCODE_ALT_LEFT_ETS,                  keyCode::KeyCode::key_t::KEYCODE_ALT_LEFT },
    { KEYCODE_ALT_RIGHT_ETS,                 keyCode::KeyCode::key_t::KEYCODE_ALT_RIGHT },
    { KEYCODE_SHIFT_LEFT_ETS,                keyCode::KeyCode::key_t::KEYCODE_SHIFT_LEFT },
    { KEYCODE_SHIFT_RIGHT_ETS,               keyCode::KeyCode::key_t::KEYCODE_SHIFT_RIGHT },
    { KEYCODE_TAB_ETS,                       keyCode::KeyCode::key_t::KEYCODE_TAB },
    { KEYCODE_SPACE_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SPACE },
    { KEYCODE_SYM_ETS,                       keyCode::KeyCode::key_t::KEYCODE_SYM },
    { KEYCODE_EXPLORER_ETS,                  keyCode::KeyCode::key_t::KEYCODE_EXPLORER },
    { KEYCODE_ENVELOPE_ETS,                  keyCode::KeyCode::key_t::KEYCODE_ENVELOPE },
    { KEYCODE_ENTER_ETS,                     keyCode::KeyCode::key_t::KEYCODE_ENTER },
    { KEYCODE_DEL_ETS,                       keyCode::KeyCode::key_t::KEYCODE_DEL },
    { KEYCODE_GRAVE_ETS,                     keyCode::KeyCode::key_t::KEYCODE_GRAVE },
    { KEYCODE_MINUS_ETS,                     keyCode::KeyCode::key_t::KEYCODE_MINUS },
    { KEYCODE_EQUALS_ETS,                    keyCode::KeyCode::key_t::KEYCODE_EQUALS },
    { KEYCODE_LEFT_BRACKET_ETS,              keyCode::KeyCode::key_t::KEYCODE_LEFT_BRACKET },
    { KEYCODE_RIGHT_BRACKET_ETS,             keyCode::KeyCode::key_t::KEYCODE_RIGHT_BRACKET },
    { KEYCODE_BACKSLASH_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BACKSLASH },
    { KEYCODE_SEMICOLON_ETS,                 keyCode::KeyCode::key_t::KEYCODE_SEMICOLON },
    { KEYCODE_APOSTROPHE_ETS,                keyCode::KeyCode::key_t::KEYCODE_APOSTROPHE },
    { KEYCODE_SLASH_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SLASH },
    { KEYCODE_AT_ETS,                        keyCode::KeyCode::key_t::KEYCODE_AT },
    { KEYCODE_PLUS_ETS,                      keyCode::KeyCode::key_t::KEYCODE_PLUS },
    { KEYCODE_MENU_ETS,                      keyCode::KeyCode::key_t::KEYCODE_MENU },
    { KEYCODE_PAGE_UP_ETS,                   keyCode::KeyCode::key_t::KEYCODE_PAGE_UP },
    { KEYCODE_PAGE_DOWN_ETS,                 keyCode::KeyCode::key_t::KEYCODE_PAGE_DOWN },
    { KEYCODE_ESCAPE_ETS,                    keyCode::KeyCode::key_t::KEYCODE_ESCAPE },
    { KEYCODE_FORWARD_DEL_ETS,               keyCode::KeyCode::key_t::KEYCODE_FORWARD_DEL },
    { KEYCODE_CTRL_LEFT_ETS,                 keyCode::KeyCode::key_t::KEYCODE_CTRL_LEFT },
    { KEYCODE_CTRL_RIGHT_ETS,                keyCode::KeyCode::key_t::KEYCODE_CTRL_RIGHT },
    { KEYCODE_CAPS_LOCK_ETS,                 keyCode::KeyCode::key_t::KEYCODE_CAPS_LOCK },
    { KEYCODE_SCROLL_LOCK_ETS,               keyCode::KeyCode::key_t::KEYCODE_SCROLL_LOCK },
    { KEYCODE_META_LEFT_ETS,                 keyCode::KeyCode::key_t::KEYCODE_META_LEFT },
    { KEYCODE_META_RIGHT_ETS,                keyCode::KeyCode::key_t::KEYCODE_META_RIGHT },
    { KEYCODE_FUNCTION_ETS,                  keyCode::KeyCode::key_t::KEYCODE_FUNCTION },
    { KEYCODE_SYSRQ_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SYSRQ },
    { KEYCODE_BREAK_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BREAK },
    { KEYCODE_MOVE_HOME_ETS,                 keyCode::KeyCode::key_t::KEYCODE_MOVE_HOME },
    { KEYCODE_MOVE_END_ETS,                  keyCode::KeyCode::key_t::KEYCODE_MOVE_END },
    { KEYCODE_INSERT_ETS,                    keyCode::KeyCode::key_t::KEYCODE_INSERT },
    { KEYCODE_FORWARD_ETS,                   keyCode::KeyCode::key_t::KEYCODE_FORWARD },
    { KEYCODE_MEDIA_PLAY_ETS,                keyCode::KeyCode::key_t::KEYCODE_MEDIA_PLAY },
    { KEYCODE_MEDIA_PAUSE_ETS,               keyCode::KeyCode::key_t::KEYCODE_MEDIA_PAUSE },
    { KEYCODE_MEDIA_CLOSE_ETS,               keyCode::KeyCode::key_t::KEYCODE_MEDIA_CLOSE },
    { KEYCODE_MEDIA_EJECT_ETS,               keyCode::KeyCode::key_t::KEYCODE_MEDIA_EJECT },
    { KEYCODE_MEDIA_RECORD_ETS,              keyCode::KeyCode::key_t::KEYCODE_MEDIA_RECORD },
    { KEYCODE_F1_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F1 },
    { KEYCODE_F2_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F2 },
    { KEYCODE_F3_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F3 },
    { KEYCODE_F4_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F4 },
    { KEYCODE_F5_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F5 },
    { KEYCODE_F6_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F6 },
    { KEYCODE_F7_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F7 },
    { KEYCODE_F8_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F8 },
    { KEYCODE_F9_ETS,                        keyCode::KeyCode::key_t::KEYCODE_F9 },
    { KEYCODE_F10_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F10 },
    { KEYCODE_F11_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F11 },
    { KEYCODE_F12_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F12 },
    { KEYCODE_NUM_LOCK_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUM_LOCK },
    { KEYCODE_NUMPAD_0_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_0 },
    { KEYCODE_NUMPAD_1_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_1 },
    { KEYCODE_NUMPAD_2_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_2 },
    { KEYCODE_NUMPAD_3_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_3 },
    { KEYCODE_NUMPAD_4_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_4 },
    { KEYCODE_NUMPAD_5_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_5 },
    { KEYCODE_NUMPAD_6_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_6 },
    { KEYCODE_NUMPAD_7_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_7 },
    { KEYCODE_NUMPAD_8_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_8 },
    { KEYCODE_NUMPAD_9_ETS,                  keyCode::KeyCode::key_t::KEYCODE_NUMPAD_9 },
    { KEYCODE_NUMPAD_DIVIDE_ETS,             keyCode::KeyCode::key_t::KEYCODE_NUMPAD_DIVIDE },
    { KEYCODE_NUMPAD_MULTIPLY_ETS,           keyCode::KeyCode::key_t::KEYCODE_NUMPAD_MULTIPLY },
    { KEYCODE_NUMPAD_SUBTRACT_ETS,           keyCode::KeyCode::key_t::KEYCODE_NUMPAD_SUBTRACT },
    { KEYCODE_NUMPAD_ADD_ETS,                keyCode::KeyCode::key_t::KEYCODE_NUMPAD_ADD },
    { KEYCODE_NUMPAD_DOT_ETS,                keyCode::KeyCode::key_t::KEYCODE_NUMPAD_DOT },
    { KEYCODE_NUMPAD_COMMA_ETS,              keyCode::KeyCode::key_t::KEYCODE_NUMPAD_COMMA },
    { KEYCODE_NUMPAD_ENTER_ETS,              keyCode::KeyCode::key_t::KEYCODE_NUMPAD_ENTER },
    { KEYCODE_NUMPAD_EQUALS_ETS,             keyCode::KeyCode::key_t::KEYCODE_NUMPAD_EQUALS },
    { KEYCODE_NUMPAD_LEFT_PAREN_ETS,         keyCode::KeyCode::key_t::KEYCODE_NUMPAD_LEFT_PAREN },
    { KEYCODE_NUMPAD_RIGHT_PAREN_ETS,        keyCode::KeyCode::key_t::KEYCODE_NUMPAD_RIGHT_PAREN },
    { KEYCODE_VIRTUAL_MULTITASK_ETS,         keyCode::KeyCode::key_t::KEYCODE_VIRTUAL_MULTITASK },
    { KEYCODE_BUTTON_A_ETS,                  keyCode::KeyCode::key_t::KEYCODE_BUTTON_A },
    { KEYCODE_BUTTON_B_ETS,                  keyCode::KeyCode::key_t::KEYCODE_BUTTON_B },
    { KEYCODE_BUTTON_X_ETS,                  keyCode::KeyCode::key_t::KEYCODE_BUTTON_X },
    { KEYCODE_BUTTON_Y_ETS,                  keyCode::KeyCode::key_t::KEYCODE_BUTTON_Y },
    { KEYCODE_BUTTON_L1_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BUTTON_L1 },
    { KEYCODE_BUTTON_R1_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BUTTON_R1 },
    { KEYCODE_BUTTON_L2_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BUTTON_L2 },
    { KEYCODE_BUTTON_R2_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BUTTON_R2 },
    { KEYCODE_BUTTON_SELECT_ETS,             keyCode::KeyCode::key_t::KEYCODE_BUTTON_SELECT },
    { KEYCODE_BUTTON_START_ETS,              keyCode::KeyCode::key_t::KEYCODE_BUTTON_START },
    { KEYCODE_BUTTON_MODE_ETS,               keyCode::KeyCode::key_t::KEYCODE_BUTTON_MODE },
    { KEYCODE_BUTTON_THUMBL_ETS,             keyCode::KeyCode::key_t::KEYCODE_BUTTON_THUMBL },
    { KEYCODE_BUTTON_THUMBR_ETS,             keyCode::KeyCode::key_t::KEYCODE_BUTTON_THUMBR },
    { KEYCODE_SLEEP_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SLEEP },
    { KEYCODE_ZENKAKU_HANKAKU_ETS,           keyCode::KeyCode::key_t::KEYCODE_ZENKAKU_HANKAKU },
    { KEYCODE_102ND_ETS,                     keyCode::KeyCode::key_t::KEYCODE_102ND },
    { KEYCODE_RO_ETS,                        keyCode::KeyCode::key_t::KEYCODE_RO },
    { KEYCODE_KATAKANA_ETS,                  keyCode::KeyCode::key_t::KEYCODE_KATAKANA },
    { KEYCODE_HIRAGANA_ETS,                  keyCode::KeyCode::key_t::KEYCODE_HIRAGANA },
    { KEYCODE_HENKAN_ETS,                    keyCode::KeyCode::key_t::KEYCODE_HENKAN },
    { KEYCODE_KATAKANA_HIRAGANA_ETS,         keyCode::KeyCode::key_t::KEYCODE_KATAKANA_HIRAGANA },
    { KEYCODE_MUHENKAN_ETS,                  keyCode::KeyCode::key_t::KEYCODE_MUHENKAN },
    { KEYCODE_LINEFEED_ETS,                  keyCode::KeyCode::key_t::KEYCODE_LINEFEED },
    { KEYCODE_MACRO_ETS,                     keyCode::KeyCode::key_t::KEYCODE_MACRO },
    { KEYCODE_NUMPAD_PLUSMINUS_ETS,          keyCode::KeyCode::key_t::KEYCODE_NUMPAD_PLUSMINUS },
    { KEYCODE_SCALE_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SCALE },
    { KEYCODE_HANGUEL_ETS,                   keyCode::KeyCode::key_t::KEYCODE_HANGUEL },
    { KEYCODE_HANJA_ETS,                     keyCode::KeyCode::key_t::KEYCODE_HANJA },
    { KEYCODE_YEN_ETS,                       keyCode::KeyCode::key_t::KEYCODE_YEN },
    { KEYCODE_STOP_ETS,                      keyCode::KeyCode::key_t::KEYCODE_STOP },
    { KEYCODE_AGAIN_ETS,                     keyCode::KeyCode::key_t::KEYCODE_AGAIN },
    { KEYCODE_PROPS_ETS,                     keyCode::KeyCode::key_t::KEYCODE_PROPS },
    { KEYCODE_UNDO_ETS,                      keyCode::KeyCode::key_t::KEYCODE_UNDO },
    { KEYCODE_COPY_ETS,                      keyCode::KeyCode::key_t::KEYCODE_COPY },
    { KEYCODE_OPEN_ETS,                      keyCode::KeyCode::key_t::KEYCODE_OPEN },
    { KEYCODE_PASTE_ETS,                     keyCode::KeyCode::key_t::KEYCODE_PASTE },
    { KEYCODE_FIND_ETS,                      keyCode::KeyCode::key_t::KEYCODE_FIND },
    { KEYCODE_CUT_ETS,                       keyCode::KeyCode::key_t::KEYCODE_CUT },
    { KEYCODE_HELP_ETS,                      keyCode::KeyCode::key_t::KEYCODE_HELP },
    { KEYCODE_CALC_ETS,                      keyCode::KeyCode::key_t::KEYCODE_CALC },
    { KEYCODE_FILE_ETS,                      keyCode::KeyCode::key_t::KEYCODE_FILE },
    { KEYCODE_BOOKMARKS_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BOOKMARKS },
    { KEYCODE_NEXT_ETS,                      keyCode::KeyCode::key_t::KEYCODE_NEXT },
    { KEYCODE_PLAYPAUSE_ETS,                 keyCode::KeyCode::key_t::KEYCODE_PLAYPAUSE },
    { KEYCODE_PREVIOUS_ETS,                  keyCode::KeyCode::key_t::KEYCODE_PREVIOUS },
    { KEYCODE_STOPCD_ETS,                    keyCode::KeyCode::key_t::KEYCODE_STOPCD },
    { KEYCODE_CONFIG_ETS,                    keyCode::KeyCode::key_t::KEYCODE_CONFIG },
    { KEYCODE_REFRESH_ETS,                   keyCode::KeyCode::key_t::KEYCODE_REFRESH },
    { KEYCODE_EXIT_ETS,                      keyCode::KeyCode::key_t::KEYCODE_EXIT },
    { KEYCODE_EDIT_ETS,                      keyCode::KeyCode::key_t::KEYCODE_EDIT },
    { KEYCODE_SCROLLUP_ETS,                  keyCode::KeyCode::key_t::KEYCODE_SCROLLUP },
    { KEYCODE_SCROLLDOWN_ETS,                keyCode::KeyCode::key_t::KEYCODE_SCROLLDOWN },
    { KEYCODE_NEW_ETS,                       keyCode::KeyCode::key_t::KEYCODE_NEW },
    { KEYCODE_REDO_ETS,                      keyCode::KeyCode::key_t::KEYCODE_REDO },
    { KEYCODE_CLOSE_ETS,                     keyCode::KeyCode::key_t::KEYCODE_CLOSE },
    { KEYCODE_PLAY_ETS,                      keyCode::KeyCode::key_t::KEYCODE_PLAY },
    { KEYCODE_BASSBOOST_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BASSBOOST },
    { KEYCODE_PRINT_ETS,                     keyCode::KeyCode::key_t::KEYCODE_PRINT },
    { KEYCODE_CHAT_ETS,                      keyCode::KeyCode::key_t::KEYCODE_CHAT },
    { KEYCODE_FINANCE_ETS,                   keyCode::KeyCode::key_t::KEYCODE_FINANCE },
    { KEYCODE_CANCEL_ETS,                    keyCode::KeyCode::key_t::KEYCODE_CANCEL },
    { KEYCODE_KBDILLUM_TOGGLE_ETS,           keyCode::KeyCode::key_t::KEYCODE_KBDILLUM_TOGGLE },
    { KEYCODE_KBDILLUM_DOWN_ETS,             keyCode::KeyCode::key_t::KEYCODE_KBDILLUM_DOWN },
    { KEYCODE_KBDILLUM_UP_ETS,               keyCode::KeyCode::key_t::KEYCODE_KBDILLUM_UP },
    { KEYCODE_SEND_ETS,                      keyCode::KeyCode::key_t::KEYCODE_SEND },
    { KEYCODE_REPLY_ETS,                     keyCode::KeyCode::key_t::KEYCODE_REPLY },
    { KEYCODE_FORWARDMAIL_ETS,               keyCode::KeyCode::key_t::KEYCODE_FORWARDMAIL },
    { KEYCODE_SAVE_ETS,                      keyCode::KeyCode::key_t::KEYCODE_SAVE },
    { KEYCODE_DOCUMENTS_ETS,                 keyCode::KeyCode::key_t::KEYCODE_DOCUMENTS },
    { KEYCODE_VIDEO_NEXT_ETS,                keyCode::KeyCode::key_t::KEYCODE_VIDEO_NEXT },
    { KEYCODE_VIDEO_PREV_ETS,                keyCode::KeyCode::key_t::KEYCODE_VIDEO_PREV },
    { KEYCODE_BRIGHTNESS_CYCLE_ETS,          keyCode::KeyCode::key_t::KEYCODE_BRIGHTNESS_CYCLE },
    { KEYCODE_BRIGHTNESS_ZERO_ETS,           keyCode::KeyCode::key_t::KEYCODE_BRIGHTNESS_ZERO },
    { KEYCODE_DISPLAY_OFF_ETS,               keyCode::KeyCode::key_t::KEYCODE_DISPLAY_OFF },
    { KEYCODE_BTN_MISC_ETS,                  keyCode::KeyCode::key_t::KEYCODE_BTN_MISC },
    { KEYCODE_GOTO_ETS,                      keyCode::KeyCode::key_t::KEYCODE_GOTO },
    { KEYCODE_INFO_ETS,                      keyCode::KeyCode::key_t::KEYCODE_INFO },
    { KEYCODE_PROGRAM_ETS,                   keyCode::KeyCode::key_t::KEYCODE_PROGRAM },
    { KEYCODE_PVR_ETS,                       keyCode::KeyCode::key_t::KEYCODE_PVR },
    { KEYCODE_SUBTITLE_ETS,                  keyCode::KeyCode::key_t::KEYCODE_SUBTITLE },
    { KEYCODE_FULL_SCREEN_ETS,               keyCode::KeyCode::key_t::KEYCODE_FULL_SCREEN },
    { KEYCODE_KEYBOARD_ETS,                  keyCode::KeyCode::key_t::KEYCODE_KEYBOARD },
    { KEYCODE_ASPECT_RATIO_ETS,              keyCode::KeyCode::key_t::KEYCODE_ASPECT_RATIO },
    { KEYCODE_PC_ETS,                        keyCode::KeyCode::key_t::KEYCODE_PC },
    { KEYCODE_TV_ETS,                        keyCode::KeyCode::key_t::KEYCODE_TV },
    { KEYCODE_TV2_ETS,                       keyCode::KeyCode::key_t::KEYCODE_TV2 },
    { KEYCODE_VCR_ETS,                       keyCode::KeyCode::key_t::KEYCODE_VCR },
    { KEYCODE_VCR2_ETS,                      keyCode::KeyCode::key_t::KEYCODE_VCR2 },
    { KEYCODE_SAT_ETS,                       keyCode::KeyCode::key_t::KEYCODE_SAT },
    { KEYCODE_CD_ETS,                        keyCode::KeyCode::key_t::KEYCODE_CD },
    { KEYCODE_TAPE_ETS,                      keyCode::KeyCode::key_t::KEYCODE_TAPE },
    { KEYCODE_TUNER_ETS,                     keyCode::KeyCode::key_t::KEYCODE_TUNER },
    { KEYCODE_PLAYER_ETS,                    keyCode::KeyCode::key_t::KEYCODE_PLAYER },
    { KEYCODE_DVD_ETS,                       keyCode::KeyCode::key_t::KEYCODE_DVD },
    { KEYCODE_AUDIO_ETS,                     keyCode::KeyCode::key_t::KEYCODE_AUDIO },
    { KEYCODE_VIDEO_ETS,                     keyCode::KeyCode::key_t::KEYCODE_VIDEO },
    { KEYCODE_MEMO_ETS,                      keyCode::KeyCode::key_t::KEYCODE_MEMO },
    { KEYCODE_CALENDAR_ETS,                  keyCode::KeyCode::key_t::KEYCODE_CALENDAR },
    { KEYCODE_RED_ETS,                       keyCode::KeyCode::key_t::KEYCODE_RED },
    { KEYCODE_GREEN_ETS,                     keyCode::KeyCode::key_t::KEYCODE_GREEN },
    { KEYCODE_YELLOW_ETS,                    keyCode::KeyCode::key_t::KEYCODE_YELLOW },
    { KEYCODE_BLUE_ETS,                      keyCode::KeyCode::key_t::KEYCODE_BLUE },
    { KEYCODE_CHANNELUP_ETS,                 keyCode::KeyCode::key_t::KEYCODE_CHANNELUP },
    { KEYCODE_CHANNELDOWN_ETS,               keyCode::KeyCode::key_t::KEYCODE_CHANNELDOWN },
    { KEYCODE_LAST_ETS,                      keyCode::KeyCode::key_t::KEYCODE_LAST },
    { KEYCODE_RESTART_ETS,                   keyCode::KeyCode::key_t::KEYCODE_RESTART },
    { KEYCODE_SLOW_ETS,                      keyCode::KeyCode::key_t::KEYCODE_SLOW },
    { KEYCODE_SHUFFLE_ETS,                   keyCode::KeyCode::key_t::KEYCODE_SHUFFLE },
    { KEYCODE_VIDEOPHONE_ETS,                keyCode::KeyCode::key_t::KEYCODE_VIDEOPHONE },
    { KEYCODE_GAMES_ETS,                     keyCode::KeyCode::key_t::KEYCODE_GAMES },
    { KEYCODE_ZOOMIN_ETS,                    keyCode::KeyCode::key_t::KEYCODE_ZOOMIN },
    { KEYCODE_ZOOMOUT_ETS,                   keyCode::KeyCode::key_t::KEYCODE_ZOOMOUT },
    { KEYCODE_ZOOMRESET_ETS,                 keyCode::KeyCode::key_t::KEYCODE_ZOOMRESET },
    { KEYCODE_WORDPROCESSOR_ETS,             keyCode::KeyCode::key_t::KEYCODE_WORDPROCESSOR },
    { KEYCODE_EDITOR_ETS,                    keyCode::KeyCode::key_t::KEYCODE_EDITOR },
    { KEYCODE_SPREADSHEET_ETS,               keyCode::KeyCode::key_t::KEYCODE_SPREADSHEET },
    { KEYCODE_GRAPHICSEDITOR_ETS,            keyCode::KeyCode::key_t::KEYCODE_GRAPHICSEDITOR },
    { KEYCODE_PRESENTATION_ETS,              keyCode::KeyCode::key_t::KEYCODE_PRESENTATION },
    { KEYCODE_DATABASE_ETS,                  keyCode::KeyCode::key_t::KEYCODE_DATABASE },
    { KEYCODE_NEWS_ETS,                      keyCode::KeyCode::key_t::KEYCODE_NEWS },
    { KEYCODE_VOICEMAIL_ETS,                 keyCode::KeyCode::key_t::KEYCODE_VOICEMAIL },
    { KEYCODE_ADDRESSBOOK_ETS,               keyCode::KeyCode::key_t::KEYCODE_ADDRESSBOOK },
    { KEYCODE_MESSENGER_ETS,                 keyCode::KeyCode::key_t::KEYCODE_MESSENGER },
    { KEYCODE_BRIGHTNESS_TOGGLE_ETS,         keyCode::KeyCode::key_t::KEYCODE_BRIGHTNESS_TOGGLE },
    { KEYCODE_SPELLCHECK_ETS,                keyCode::KeyCode::key_t::KEYCODE_SPELLCHECK },
    { KEYCODE_COFFEE_ETS,                    keyCode::KeyCode::key_t::KEYCODE_COFFEE },
    { KEYCODE_MEDIA_REPEAT_ETS,              keyCode::KeyCode::key_t::KEYCODE_MEDIA_REPEAT },
    { KEYCODE_IMAGES_ETS,                    keyCode::KeyCode::key_t::KEYCODE_IMAGES },
    { KEYCODE_BUTTONCONFIG_ETS,              keyCode::KeyCode::key_t::KEYCODE_BUTTONCONFIG },
    { KEYCODE_TASKMANAGER_ETS,               keyCode::KeyCode::key_t::KEYCODE_TASKMANAGER },
    { KEYCODE_JOURNAL_ETS,                   keyCode::KeyCode::key_t::KEYCODE_JOURNAL },
    { KEYCODE_CONTROLPANEL_ETS,              keyCode::KeyCode::key_t::KEYCODE_CONTROLPANEL },
    { KEYCODE_APPSELECT_ETS,                 keyCode::KeyCode::key_t::KEYCODE_APPSELECT },
    { KEYCODE_SCREENSAVER_ETS,               keyCode::KeyCode::key_t::KEYCODE_SCREENSAVER },
    { KEYCODE_ASSISTANT_ETS,                 keyCode::KeyCode::key_t::KEYCODE_ASSISTANT },
    { KEYCODE_KBD_LAYOUT_NEXT_ETS,           keyCode::KeyCode::key_t::KEYCODE_KBD_LAYOUT_NEXT },
    { KEYCODE_BRIGHTNESS_MIN_ETS,            keyCode::KeyCode::key_t::KEYCODE_BRIGHTNESS_MIN },
    { KEYCODE_BRIGHTNESS_MAX_ETS,            keyCode::KeyCode::key_t::KEYCODE_BRIGHTNESS_MAX },
    { KEYCODE_KBDINPUTASSIST_PREV_ETS,       keyCode::KeyCode::key_t::KEYCODE_KBDINPUTASSIST_PREV },
    { KEYCODE_KBDINPUTASSIST_NEXT_ETS,       keyCode::KeyCode::key_t::KEYCODE_KBDINPUTASSIST_NEXT },
    { KEYCODE_KBDINPUTASSIST_PREVGROUP_ETS,  keyCode::KeyCode::key_t::KEYCODE_KBDINPUTASSIST_PREVGROUP },
    { KEYCODE_KBDINPUTASSIST_NEXTGROUP_ETS,  keyCode::KeyCode::key_t::KEYCODE_KBDINPUTASSIST_NEXTGROUP },
    { KEYCODE_KBDINPUTASSIST_ACCEPT_ETS,     keyCode::KeyCode::key_t::KEYCODE_KBDINPUTASSIST_ACCEPT },
    { KEYCODE_KBDINPUTASSIST_CANCEL_ETS,     keyCode::KeyCode::key_t::KEYCODE_KBDINPUTASSIST_CANCEL },
    { KEYCODE_MOUSE_ASSISTANT_ETS,           keyCode::KeyCode::key_t::KEYCODE_MOUSE_ASSISTANT },
    { KEYCODE_MOUSE_INTELLIGENCE_SELECTION_ETS,       keyCode::KeyCode::key_t::KEYCODE_MOUSE_INTELLIGENCE_SELECTION },
    { KEYCODE_AOD_SINGLE_CLICK_ETS,          keyCode::KeyCode::key_t::KEYCODE_AOD_SINGLE_CLICK },
    { KEYCODE_FRONT_ETS,                     keyCode::KeyCode::key_t::KEYCODE_FRONT },
    { KEYCODE_SETUP_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SETUP },
    { KEYCODE_WAKEUP_ETS,                    keyCode::KeyCode::key_t::KEYCODE_WAKEUP },
    { KEYCODE_SENDFILE_ETS,                  keyCode::KeyCode::key_t::KEYCODE_SENDFILE },
    { KEYCODE_DELETEFILE_ETS,                keyCode::KeyCode::key_t::KEYCODE_DELETEFILE },
    { KEYCODE_XFER_ETS,                      keyCode::KeyCode::key_t::KEYCODE_XFER },
    { KEYCODE_PROG1_ETS,                     keyCode::KeyCode::key_t::KEYCODE_PROG1 },
    { KEYCODE_PROG2_ETS,                     keyCode::KeyCode::key_t::KEYCODE_PROG2 },
    { KEYCODE_MSDOS_ETS,                     keyCode::KeyCode::key_t::KEYCODE_MSDOS },
    { KEYCODE_SCREENLOCK_ETS,                keyCode::KeyCode::key_t::KEYCODE_SCREENLOCK },
    { KEYCODE_DIRECTION_ROTATE_DISPLAY_ETS,  keyCode::KeyCode::key_t::KEYCODE_DIRECTION_ROTATE_DISPLAY },
    { KEYCODE_CYCLEWINDOWS_ETS,              keyCode::KeyCode::key_t::KEYCODE_CYCLEWINDOWS },
    { KEYCODE_COMPUTER_ETS,                  keyCode::KeyCode::key_t::KEYCODE_COMPUTER },
    { KEYCODE_EJECTCLOSECD_ETS,              keyCode::KeyCode::key_t::KEYCODE_EJECTCLOSECD },
    { KEYCODE_ISO_ETS,                       keyCode::KeyCode::key_t::KEYCODE_ISO },
    { KEYCODE_MOVE_ETS,                      keyCode::KeyCode::key_t::KEYCODE_MOVE },
    { KEYCODE_F13_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F13 },
    { KEYCODE_F14_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F14 },
    { KEYCODE_F15_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F15 },
    { KEYCODE_F16_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F16 },
    { KEYCODE_F17_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F17 },
    { KEYCODE_F18_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F18 },
    { KEYCODE_F19_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F19 },
    { KEYCODE_F20_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F20 },
    { KEYCODE_F21_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F21 },
    { KEYCODE_F22_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F22 },
    { KEYCODE_F23_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F23 },
    { KEYCODE_F24_ETS,                       keyCode::KeyCode::key_t::KEYCODE_F24 },
    { KEYCODE_PROG3_ETS,                     keyCode::KeyCode::key_t::KEYCODE_PROG3 },
    { KEYCODE_PROG4_ETS,                     keyCode::KeyCode::key_t::KEYCODE_PROG4 },
    { KEYCODE_DASHBOARD_ETS,                 keyCode::KeyCode::key_t::KEYCODE_DASHBOARD },
    { KEYCODE_SUSPEND_ETS,                   keyCode::KeyCode::key_t::KEYCODE_SUSPEND },
    { KEYCODE_HP_ETS,                        keyCode::KeyCode::key_t::KEYCODE_HP },
    { KEYCODE_SOUND_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SOUND },
    { KEYCODE_QUESTION_ETS,                  keyCode::KeyCode::key_t::KEYCODE_QUESTION },
    { KEYCODE_CONNECT_ETS,                   keyCode::KeyCode::key_t::KEYCODE_CONNECT },
    { KEYCODE_SPORT_ETS,                     keyCode::KeyCode::key_t::KEYCODE_SPORT },
    { KEYCODE_SHOP_ETS,                      keyCode::KeyCode::key_t::KEYCODE_SHOP },
    { KEYCODE_ALTERASE_ETS,                  keyCode::KeyCode::key_t::KEYCODE_ALTERASE },
    { KEYCODE_SWITCHVIDEOMODE_ETS,           keyCode::KeyCode::key_t::KEYCODE_SWITCHVIDEOMODE },
    { KEYCODE_BATTERY_ETS,                   keyCode::KeyCode::key_t::KEYCODE_BATTERY },
    { KEYCODE_BLUETOOTH_ETS,                 keyCode::KeyCode::key_t::KEYCODE_BLUETOOTH },
    { KEYCODE_WLAN_ETS,                      keyCode::KeyCode::key_t::KEYCODE_WLAN },
    { KEYCODE_UWB_ETS,                       keyCode::KeyCode::key_t::KEYCODE_UWB },
    { KEYCODE_WWAN_WIMAX_ETS,                keyCode::KeyCode::key_t::KEYCODE_WWAN_WIMAX },
    { KEYCODE_RFKILL_ETS,                    keyCode::KeyCode::key_t::KEYCODE_RFKILL },
    { KEYCODE_CHANNEL_ETS,                   keyCode::KeyCode::key_t::KEYCODE_CHANNEL },
    { KEYCODE_BTN_0_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_0 },
    { KEYCODE_BTN_1_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_1 },
    { KEYCODE_BTN_2_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_2 },
    { KEYCODE_BTN_3_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_3 },
    { KEYCODE_BTN_4_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_4 },
    { KEYCODE_BTN_5_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_5 },
    { KEYCODE_BTN_6_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_6 },
    { KEYCODE_BTN_7_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_7 },
    { KEYCODE_BTN_8_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_8 },
    { KEYCODE_BTN_9_ETS,                     keyCode::KeyCode::key_t::KEYCODE_BTN_9 },
    { KEYCODE_DAGGER_CLICK_ETS,              keyCode::KeyCode::key_t::KEYCODE_DAGGER_CLICK },
    { KEYCODE_DAGGER_DOUBLE_CLICK_ETS,       keyCode::KeyCode::key_t::KEYCODE_DAGGER_DOUBLE_CLICK },
    { KEYCODE_DAGGER_LONG_PRESS_ETS,         keyCode::KeyCode::key_t::KEYCODE_DAGGER_LONG_PRESS },
    { KEYCODE_DIV_ETS,                       keyCode::KeyCode::key_t::KEYCODE_DIV },
    { KEYCODE_XKEY_ETS,                      keyCode::KeyCode::key_t::KEYCODE_XKEY },
    { KEYCODE_FINGERPRINT_SLIDE_UP_ETS,      keyCode::KeyCode::key_t::KEYCODE_FINGERPRINT_SLIDE_UP },
    { KEYCODE_FINGERPRINT_SLIDE_DOWN_ETS,    keyCode::KeyCode::key_t::KEYCODE_FINGERPRINT_SLIDE_DOWN },
    { KEYCODE_WRIST_TURN_ETS,                keyCode::KeyCode::key_t::KEYCODE_WRIST_TURN },
    { KEYCODE_BACK_PANEL_DOUBLE_TAP_ETS,     keyCode::KeyCode::key_t::KEYCODE_BACK_PANEL_DOUBLE_TAP }
};

keyCode::KeyCode TaiheKeyCodeConverter::ConvertEtsKeyCode(int32_t keyCode)
{
    auto iter = KEY_CODE_TRANSFORMATION.find(keyCode);
    if (iter == KEY_CODE_TRANSFORMATION.end()) {
        MMI_HILOGE("Find failed, keyCode:%{private}d", keyCode);
        return keyCode::KeyCode::key_t::KEYCODE_UNKNOWN;
    }
    return iter->second;
}

KeyCodeEts TaiheKeyCodeConverter::GetKeyCodeByValue(keyCode::KeyCode code)
{
    static std::mutex reverseMapMutex;
    static std::unordered_map<keyCode::KeyCode, int32_t> reverseMap;
    if (reverseMap.empty()) {
        std::lock_guard<std::mutex> guard(reverseMapMutex);
        if (reverseMap.empty()) {
            for (const auto& [key, val] : KEY_CODE_TRANSFORMATION) {
                reverseMap[val] = key;
            }
        }
    }
    auto it = reverseMap.find(code);
    if (it != reverseMap.end()) {
        return static_cast<KeyCodeEts>(it->second);
    }
    return KEYCODE_UNKNOWN_ETS;
}
} // namespace MMI
} // namespace OHOS

// Since these macros are auto-generate, }, lint will cause false positive.
// NOLINTBEGIN
// NOLINTEND