/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * 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 _LIBINPUT_INPUT_EVENT_LABELS_H
#define _LIBINPUT_INPUT_EVENT_LABELS_H

#include <input/Input.h>
#include <android/keycodes.h>

#define DEFINE_KEYCODE(key) { #key, AKEYCODE_##key }
#define DEFINE_AXIS(axis) { #axis, AMOTION_EVENT_AXIS_##axis }
#define DEFINE_LED(led) { #led, ALED_##led }
#define DEFINE_FLAG(flag) { #flag, POLICY_FLAG_##flag }

namespace android {

template<typename T, size_t N>
size_t size(T (&)[N]) { return N; }

struct InputEventLabel {
    const char *literal;
    int value;
};


static const InputEventLabel KEYCODES[] = {
    // NOTE: If you add a new keycode here you must also add it to several other files.
    //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
    DEFINE_KEYCODE(UNKNOWN),
    DEFINE_KEYCODE(SOFT_LEFT),
    DEFINE_KEYCODE(SOFT_RIGHT),
    DEFINE_KEYCODE(HOME),
    DEFINE_KEYCODE(BACK),
    DEFINE_KEYCODE(CALL),
    DEFINE_KEYCODE(ENDCALL),
    DEFINE_KEYCODE(0),
    DEFINE_KEYCODE(1),
    DEFINE_KEYCODE(2),
    DEFINE_KEYCODE(3),
    DEFINE_KEYCODE(4),
    DEFINE_KEYCODE(5),
    DEFINE_KEYCODE(6),
    DEFINE_KEYCODE(7),
    DEFINE_KEYCODE(8),
    DEFINE_KEYCODE(9),
    DEFINE_KEYCODE(STAR),
    DEFINE_KEYCODE(POUND),
    DEFINE_KEYCODE(DPAD_UP),
    DEFINE_KEYCODE(DPAD_DOWN),
    DEFINE_KEYCODE(DPAD_LEFT),
    DEFINE_KEYCODE(DPAD_RIGHT),
    DEFINE_KEYCODE(DPAD_CENTER),
    DEFINE_KEYCODE(VOLUME_UP),
    DEFINE_KEYCODE(VOLUME_DOWN),
    DEFINE_KEYCODE(POWER),
    DEFINE_KEYCODE(CAMERA),
    DEFINE_KEYCODE(CLEAR),
    DEFINE_KEYCODE(A),
    DEFINE_KEYCODE(B),
    DEFINE_KEYCODE(C),
    DEFINE_KEYCODE(D),
    DEFINE_KEYCODE(E),
    DEFINE_KEYCODE(F),
    DEFINE_KEYCODE(G),
    DEFINE_KEYCODE(H),
    DEFINE_KEYCODE(I),
    DEFINE_KEYCODE(J),
    DEFINE_KEYCODE(K),
    DEFINE_KEYCODE(L),
    DEFINE_KEYCODE(M),
    DEFINE_KEYCODE(N),
    DEFINE_KEYCODE(O),
    DEFINE_KEYCODE(P),
    DEFINE_KEYCODE(Q),
    DEFINE_KEYCODE(R),
    DEFINE_KEYCODE(S),
    DEFINE_KEYCODE(T),
    DEFINE_KEYCODE(U),
    DEFINE_KEYCODE(V),
    DEFINE_KEYCODE(W),
    DEFINE_KEYCODE(X),
    DEFINE_KEYCODE(Y),
    DEFINE_KEYCODE(Z),
    DEFINE_KEYCODE(COMMA),
    DEFINE_KEYCODE(PERIOD),
    DEFINE_KEYCODE(ALT_LEFT),
    DEFINE_KEYCODE(ALT_RIGHT),
    DEFINE_KEYCODE(SHIFT_LEFT),
    DEFINE_KEYCODE(SHIFT_RIGHT),
    DEFINE_KEYCODE(TAB),
    DEFINE_KEYCODE(SPACE),
    DEFINE_KEYCODE(SYM),
    DEFINE_KEYCODE(EXPLORER),
    DEFINE_KEYCODE(ENVELOPE),
    DEFINE_KEYCODE(ENTER),
    DEFINE_KEYCODE(DEL),
    DEFINE_KEYCODE(GRAVE),
    DEFINE_KEYCODE(MINUS),
    DEFINE_KEYCODE(EQUALS),
    DEFINE_KEYCODE(LEFT_BRACKET),
    DEFINE_KEYCODE(RIGHT_BRACKET),
    DEFINE_KEYCODE(BACKSLASH),
    DEFINE_KEYCODE(SEMICOLON),
    DEFINE_KEYCODE(APOSTROPHE),
    DEFINE_KEYCODE(SLASH),
    DEFINE_KEYCODE(AT),
    DEFINE_KEYCODE(NUM),
    DEFINE_KEYCODE(HEADSETHOOK),
    DEFINE_KEYCODE(FOCUS),   // *Camera* focus
    DEFINE_KEYCODE(PLUS),
    DEFINE_KEYCODE(MENU),
    DEFINE_KEYCODE(NOTIFICATION),
    DEFINE_KEYCODE(SEARCH),
    DEFINE_KEYCODE(MEDIA_PLAY_PAUSE),
    DEFINE_KEYCODE(MEDIA_STOP),
    DEFINE_KEYCODE(MEDIA_NEXT),
    DEFINE_KEYCODE(MEDIA_PREVIOUS),
    DEFINE_KEYCODE(MEDIA_REWIND),
    DEFINE_KEYCODE(MEDIA_FAST_FORWARD),
    DEFINE_KEYCODE(MUTE),
    DEFINE_KEYCODE(PAGE_UP),
    DEFINE_KEYCODE(PAGE_DOWN),
    DEFINE_KEYCODE(PICTSYMBOLS),
    DEFINE_KEYCODE(SWITCH_CHARSET),
    DEFINE_KEYCODE(BUTTON_A),
    DEFINE_KEYCODE(BUTTON_B),
    DEFINE_KEYCODE(BUTTON_C),
    DEFINE_KEYCODE(BUTTON_X),
    DEFINE_KEYCODE(BUTTON_Y),
    DEFINE_KEYCODE(BUTTON_Z),
    DEFINE_KEYCODE(BUTTON_L1),
    DEFINE_KEYCODE(BUTTON_R1),
    DEFINE_KEYCODE(BUTTON_L2),
    DEFINE_KEYCODE(BUTTON_R2),
    DEFINE_KEYCODE(BUTTON_THUMBL),
    DEFINE_KEYCODE(BUTTON_THUMBR),
    DEFINE_KEYCODE(BUTTON_START),
    DEFINE_KEYCODE(BUTTON_SELECT),
    DEFINE_KEYCODE(BUTTON_MODE),
    DEFINE_KEYCODE(ESCAPE),
    DEFINE_KEYCODE(FORWARD_DEL),
    DEFINE_KEYCODE(CTRL_LEFT),
    DEFINE_KEYCODE(CTRL_RIGHT),
    DEFINE_KEYCODE(CAPS_LOCK),
    DEFINE_KEYCODE(SCROLL_LOCK),
    DEFINE_KEYCODE(META_LEFT),
    DEFINE_KEYCODE(META_RIGHT),
    DEFINE_KEYCODE(FUNCTION),
    DEFINE_KEYCODE(SYSRQ),
    DEFINE_KEYCODE(BREAK),
    DEFINE_KEYCODE(MOVE_HOME),
    DEFINE_KEYCODE(MOVE_END),
    DEFINE_KEYCODE(INSERT),
    DEFINE_KEYCODE(FORWARD),
    DEFINE_KEYCODE(MEDIA_PLAY),
    DEFINE_KEYCODE(MEDIA_PAUSE),
    DEFINE_KEYCODE(MEDIA_CLOSE),
    DEFINE_KEYCODE(MEDIA_EJECT),
    DEFINE_KEYCODE(MEDIA_RECORD),
    DEFINE_KEYCODE(F1),
    DEFINE_KEYCODE(F2),
    DEFINE_KEYCODE(F3),
    DEFINE_KEYCODE(F4),
    DEFINE_KEYCODE(F5),
    DEFINE_KEYCODE(F6),
    DEFINE_KEYCODE(F7),
    DEFINE_KEYCODE(F8),
    DEFINE_KEYCODE(F9),
    DEFINE_KEYCODE(F10),
    DEFINE_KEYCODE(F11),
    DEFINE_KEYCODE(F12),
    DEFINE_KEYCODE(NUM_LOCK),
    DEFINE_KEYCODE(NUMPAD_0),
    DEFINE_KEYCODE(NUMPAD_1),
    DEFINE_KEYCODE(NUMPAD_2),
    DEFINE_KEYCODE(NUMPAD_3),
    DEFINE_KEYCODE(NUMPAD_4),
    DEFINE_KEYCODE(NUMPAD_5),
    DEFINE_KEYCODE(NUMPAD_6),
    DEFINE_KEYCODE(NUMPAD_7),
    DEFINE_KEYCODE(NUMPAD_8),
    DEFINE_KEYCODE(NUMPAD_9),
    DEFINE_KEYCODE(NUMPAD_DIVIDE),
    DEFINE_KEYCODE(NUMPAD_MULTIPLY),
    DEFINE_KEYCODE(NUMPAD_SUBTRACT),
    DEFINE_KEYCODE(NUMPAD_ADD),
    DEFINE_KEYCODE(NUMPAD_DOT),
    DEFINE_KEYCODE(NUMPAD_COMMA),
    DEFINE_KEYCODE(NUMPAD_ENTER),
    DEFINE_KEYCODE(NUMPAD_EQUALS),
    DEFINE_KEYCODE(NUMPAD_LEFT_PAREN),
    DEFINE_KEYCODE(NUMPAD_RIGHT_PAREN),
    DEFINE_KEYCODE(VOLUME_MUTE),
    DEFINE_KEYCODE(INFO),
    DEFINE_KEYCODE(CHANNEL_UP),
    DEFINE_KEYCODE(CHANNEL_DOWN),
    DEFINE_KEYCODE(ZOOM_IN),
    DEFINE_KEYCODE(ZOOM_OUT),
    DEFINE_KEYCODE(TV),
    DEFINE_KEYCODE(WINDOW),
    DEFINE_KEYCODE(GUIDE),
    DEFINE_KEYCODE(DVR),
    DEFINE_KEYCODE(BOOKMARK),
    DEFINE_KEYCODE(CAPTIONS),
    DEFINE_KEYCODE(SETTINGS),
    DEFINE_KEYCODE(TV_POWER),
    DEFINE_KEYCODE(TV_INPUT),
    DEFINE_KEYCODE(STB_POWER),
    DEFINE_KEYCODE(STB_INPUT),
    DEFINE_KEYCODE(AVR_POWER),
    DEFINE_KEYCODE(AVR_INPUT),
    DEFINE_KEYCODE(PROG_RED),
    DEFINE_KEYCODE(PROG_GREEN),
    DEFINE_KEYCODE(PROG_YELLOW),
    DEFINE_KEYCODE(PROG_BLUE),
    DEFINE_KEYCODE(APP_SWITCH),
    DEFINE_KEYCODE(BUTTON_1),
    DEFINE_KEYCODE(BUTTON_2),
    DEFINE_KEYCODE(BUTTON_3),
    DEFINE_KEYCODE(BUTTON_4),
    DEFINE_KEYCODE(BUTTON_5),
    DEFINE_KEYCODE(BUTTON_6),
    DEFINE_KEYCODE(BUTTON_7),
    DEFINE_KEYCODE(BUTTON_8),
    DEFINE_KEYCODE(BUTTON_9),
    DEFINE_KEYCODE(BUTTON_10),
    DEFINE_KEYCODE(BUTTON_11),
    DEFINE_KEYCODE(BUTTON_12),
    DEFINE_KEYCODE(BUTTON_13),
    DEFINE_KEYCODE(BUTTON_14),
    DEFINE_KEYCODE(BUTTON_15),
    DEFINE_KEYCODE(BUTTON_16),
    DEFINE_KEYCODE(LANGUAGE_SWITCH),
    DEFINE_KEYCODE(MANNER_MODE),
    DEFINE_KEYCODE(3D_MODE),
    DEFINE_KEYCODE(CONTACTS),
    DEFINE_KEYCODE(CALENDAR),
    DEFINE_KEYCODE(MUSIC),
    DEFINE_KEYCODE(CALCULATOR),
    DEFINE_KEYCODE(ZENKAKU_HANKAKU),
    DEFINE_KEYCODE(EISU),
    DEFINE_KEYCODE(MUHENKAN),
    DEFINE_KEYCODE(HENKAN),
    DEFINE_KEYCODE(KATAKANA_HIRAGANA),
    DEFINE_KEYCODE(YEN),
    DEFINE_KEYCODE(RO),
    DEFINE_KEYCODE(KANA),
    DEFINE_KEYCODE(ASSIST),
    DEFINE_KEYCODE(BRIGHTNESS_DOWN),
    DEFINE_KEYCODE(BRIGHTNESS_UP),
    DEFINE_KEYCODE(MEDIA_AUDIO_TRACK),
    DEFINE_KEYCODE(SLEEP),
    DEFINE_KEYCODE(WAKEUP),
    DEFINE_KEYCODE(PAIRING),
    DEFINE_KEYCODE(MEDIA_TOP_MENU),
    DEFINE_KEYCODE(11),
    DEFINE_KEYCODE(12),
    DEFINE_KEYCODE(LAST_CHANNEL),
    DEFINE_KEYCODE(TV_DATA_SERVICE),
    DEFINE_KEYCODE(VOICE_ASSIST),
    DEFINE_KEYCODE(TV_RADIO_SERVICE),
    DEFINE_KEYCODE(TV_TELETEXT),
    DEFINE_KEYCODE(TV_NUMBER_ENTRY),
    DEFINE_KEYCODE(TV_TERRESTRIAL_ANALOG),
    DEFINE_KEYCODE(TV_TERRESTRIAL_DIGITAL),
    DEFINE_KEYCODE(TV_SATELLITE),
    DEFINE_KEYCODE(TV_SATELLITE_BS),
    DEFINE_KEYCODE(TV_SATELLITE_CS),
    DEFINE_KEYCODE(TV_SATELLITE_SERVICE),
    DEFINE_KEYCODE(TV_NETWORK),
    DEFINE_KEYCODE(TV_ANTENNA_CABLE),
    DEFINE_KEYCODE(TV_INPUT_HDMI_1),
    DEFINE_KEYCODE(TV_INPUT_HDMI_2),
    DEFINE_KEYCODE(TV_INPUT_HDMI_3),
    DEFINE_KEYCODE(TV_INPUT_HDMI_4),
    DEFINE_KEYCODE(TV_INPUT_COMPOSITE_1),
    DEFINE_KEYCODE(TV_INPUT_COMPOSITE_2),
    DEFINE_KEYCODE(TV_INPUT_COMPONENT_1),
    DEFINE_KEYCODE(TV_INPUT_COMPONENT_2),
    DEFINE_KEYCODE(TV_INPUT_VGA_1),
    DEFINE_KEYCODE(TV_AUDIO_DESCRIPTION),
    DEFINE_KEYCODE(TV_AUDIO_DESCRIPTION_MIX_UP),
    DEFINE_KEYCODE(TV_AUDIO_DESCRIPTION_MIX_DOWN),
    DEFINE_KEYCODE(TV_ZOOM_MODE),
    DEFINE_KEYCODE(TV_CONTENTS_MENU),
    DEFINE_KEYCODE(TV_MEDIA_CONTEXT_MENU),
    DEFINE_KEYCODE(TV_TIMER_PROGRAMMING),
    DEFINE_KEYCODE(HELP),
    DEFINE_KEYCODE(NAVIGATE_PREVIOUS),
    DEFINE_KEYCODE(NAVIGATE_NEXT),
    DEFINE_KEYCODE(NAVIGATE_IN),
    DEFINE_KEYCODE(NAVIGATE_OUT),
    DEFINE_KEYCODE(STEM_PRIMARY),
    DEFINE_KEYCODE(STEM_1),
    DEFINE_KEYCODE(STEM_2),
    DEFINE_KEYCODE(STEM_3),
    DEFINE_KEYCODE(DPAD_UP_LEFT),
    DEFINE_KEYCODE(DPAD_DOWN_LEFT),
    DEFINE_KEYCODE(DPAD_UP_RIGHT),
    DEFINE_KEYCODE(DPAD_DOWN_RIGHT),
    DEFINE_KEYCODE(MEDIA_SKIP_FORWARD),
    DEFINE_KEYCODE(MEDIA_SKIP_BACKWARD),
    DEFINE_KEYCODE(MEDIA_STEP_FORWARD),
    DEFINE_KEYCODE(MEDIA_STEP_BACKWARD),
    DEFINE_KEYCODE(SOFT_SLEEP),
    DEFINE_KEYCODE(CUT),
    DEFINE_KEYCODE(COPY),
    DEFINE_KEYCODE(PASTE),
    DEFINE_KEYCODE(SYSTEM_NAVIGATION_UP),
    DEFINE_KEYCODE(SYSTEM_NAVIGATION_DOWN),
    DEFINE_KEYCODE(SYSTEM_NAVIGATION_LEFT),
    DEFINE_KEYCODE(SYSTEM_NAVIGATION_RIGHT),
    DEFINE_KEYCODE(ALL_APPS),
    DEFINE_KEYCODE(REFRESH),

    { NULL, 0 }
};

static const InputEventLabel AXES[] = {
    DEFINE_AXIS(X),
    DEFINE_AXIS(Y),
    DEFINE_AXIS(PRESSURE),
    DEFINE_AXIS(SIZE),
    DEFINE_AXIS(TOUCH_MAJOR),
    DEFINE_AXIS(TOUCH_MINOR),
    DEFINE_AXIS(TOOL_MAJOR),
    DEFINE_AXIS(TOOL_MINOR),
    DEFINE_AXIS(ORIENTATION),
    DEFINE_AXIS(VSCROLL),
    DEFINE_AXIS(HSCROLL),
    DEFINE_AXIS(Z),
    DEFINE_AXIS(RX),
    DEFINE_AXIS(RY),
    DEFINE_AXIS(RZ),
    DEFINE_AXIS(HAT_X),
    DEFINE_AXIS(HAT_Y),
    DEFINE_AXIS(LTRIGGER),
    DEFINE_AXIS(RTRIGGER),
    DEFINE_AXIS(THROTTLE),
    DEFINE_AXIS(RUDDER),
    DEFINE_AXIS(WHEEL),
    DEFINE_AXIS(GAS),
    DEFINE_AXIS(BRAKE),
    DEFINE_AXIS(DISTANCE),
    DEFINE_AXIS(TILT),
    DEFINE_AXIS(GENERIC_1),
    DEFINE_AXIS(GENERIC_2),
    DEFINE_AXIS(GENERIC_3),
    DEFINE_AXIS(GENERIC_4),
    DEFINE_AXIS(GENERIC_5),
    DEFINE_AXIS(GENERIC_6),
    DEFINE_AXIS(GENERIC_7),
    DEFINE_AXIS(GENERIC_8),
    DEFINE_AXIS(GENERIC_9),
    DEFINE_AXIS(GENERIC_10),
    DEFINE_AXIS(GENERIC_11),
    DEFINE_AXIS(GENERIC_12),
    DEFINE_AXIS(GENERIC_13),
    DEFINE_AXIS(GENERIC_14),
    DEFINE_AXIS(GENERIC_15),
    DEFINE_AXIS(GENERIC_16),

    // NOTE: If you add a new axis here you must also add it to several other files.
    //       Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list.
    { NULL, 0 }
};

static const InputEventLabel LEDS[] = {
    DEFINE_LED(NUM_LOCK),
    DEFINE_LED(CAPS_LOCK),
    DEFINE_LED(SCROLL_LOCK),
    DEFINE_LED(COMPOSE),
    DEFINE_LED(KANA),
    DEFINE_LED(SLEEP),
    DEFINE_LED(SUSPEND),
    DEFINE_LED(MUTE),
    DEFINE_LED(MISC),
    DEFINE_LED(MAIL),
    DEFINE_LED(CHARGING),
    DEFINE_LED(CONTROLLER_1),
    DEFINE_LED(CONTROLLER_2),
    DEFINE_LED(CONTROLLER_3),
    DEFINE_LED(CONTROLLER_4),

    // NOTE: If you add new LEDs here, you must also add them to Input.h
    { NULL, 0 }
};

static const InputEventLabel FLAGS[] = {
    DEFINE_FLAG(VIRTUAL),
    DEFINE_FLAG(FUNCTION),
    DEFINE_FLAG(GESTURE),

    { NULL, 0 }
};

static int lookupValueByLabel(const char* literal, const InputEventLabel *list) {
    while (list->literal) {
        if (strcmp(literal, list->literal) == 0) {
            return list->value;
        }
        list++;
    }
    return list->value;
}

static const char* lookupLabelByValue(int value, const InputEventLabel* list) {
    while (list->literal) {
        if (list->value == value) {
            return list->literal;
        }
        list++;
    }
    return NULL;
}

static inline int32_t getKeyCodeByLabel(const char* label) {
    return int32_t(lookupValueByLabel(label, KEYCODES));
}

static inline const char* getLabelByKeyCode(int32_t keyCode) {
    if (keyCode >= 0 && keyCode < static_cast<int32_t>(size(KEYCODES))) {
        return KEYCODES[keyCode].literal;
    }
    return NULL;
}

static inline uint32_t getKeyFlagByLabel(const char* label) {
    return uint32_t(lookupValueByLabel(label, FLAGS));
}

static inline int32_t getAxisByLabel(const char* label) {
    return int32_t(lookupValueByLabel(label, AXES));
}

static inline const char* getAxisLabel(int32_t axisId) {
    return lookupLabelByValue(axisId, AXES);
}

static inline int32_t getLedByLabel(const char* label) {
    return int32_t(lookupValueByLabel(label, LEDS));
}


} // namespace android
#endif // _LIBINPUT_INPUT_EVENT_LABELS_H
