/*
 * Copyright 2020 Northwestern Inclusive Technology Lab
 *
 * 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.
 */

#pragma once

namespace keyboard {

// Larkin abstracted keyboard keycodes that are converted
// for processing in native system converters
enum keycode {
    NUM_0_KEY,
    NUM_1_KEY,
    NUM_2_KEY,
    NUM_3_KEY,
    NUM_4_KEY,
    NUM_5_KEY,
    NUM_6_KEY,
    NUM_7_KEY,
    NUM_8_KEY,
    NUM_9_KEY,

    A_KEY,
    S_KEY,
    D_KEY,
    F_KEY,
    H_KEY,
    G_KEY,
    Z_KEY,
    X_KEY,
    C_KEY,
    V_KEY,
    B_KEY,
    Q_KEY,
    W_KEY,
    E_KEY,
    R_KEY,
    Y_KEY,
    T_KEY,
    O_KEY,
    U_KEY,
    I_KEY,
    P_KEY,
    L_KEY,
    J_KEY,
    K_KEY,
    M_KEY,
    N_KEY,

    MINUS_KEY,
    EQUAL_KEY,

    RIGHT_BRACKET_KEY,
    LEFT_BRACKET_KEY,

    QUOTE_KEY,
    SEMICOLON_KEY,
    BACKSLASH_KEY,
    COMMA_KEY,
    PERIOD_KEY,
    SLASH_KEY,
    GRAVE_KEY,

    RETURN_KEY,
    TAB_KEY,

    SPACE_KEY,
    DELETE_KEY,
    FORWARD_DELETE_KEY,

    ESCAPE_KEY,
    COMMAND_KEY,
    SHIFT_LEFT_KEY,
    CAPSLOCK_KEY,
    OPTION_LEFT_KEY,
    CONTROL_LEFT_KEY,
    SHIFT_RIGHT_KEY,
    OPTION_RIGHT_KEY,
    CONTROL_RIGHT_KEY,
    END_KEY,

    VOLUME_UP_KEY,
    VOLUME_DOWN_KEY,
    VOLUME_MUTE_KEY,

    HELP_KEY,
    HOME_KEY,

    PAGE_UP_KEY,
    PAGE_DOWN_KEY,

    LEFT_ARROW_KEY,
    RIGHT_ARROW_KEY,
    DOWN_ARROW_KEY,
    UP_ARROW_KEY,

    KEYPAD_NUM_0_KEY,
    KEYPAD_NUM_1_KEY,
    KEYPAD_NUM_2_KEY,
    KEYPAD_NUM_3_KEY,
    KEYPAD_NUM_4_KEY,
    KEYPAD_NUM_5_KEY,
    KEYPAD_NUM_6_KEY,
    KEYPAD_NUM_7_KEY,
    KEYPAD_NUM_8_KEY,
    KEYPAD_NUM_9_KEY,
    KEYPAD_DECIMAL_KEY,
    KEYPAD_MULTIPLY_KEY,
    KEYPAD_PLUS_KEY,
    KEYPAD_CLEAR_KEY,
    KEYPAD_DIVIDE_KEY,
    KEYPAD_ENTER_KEY,
    KEYPAD_MINUS_KEY,
    KEYPAD_EQUALS_KEY,

    FUNCTION_KEY,
    F1_KEY,
    F2_KEY,
    F3_KEY,
    F4_KEY,
    F5_KEY,
    F6_KEY,
    F7_KEY,
    F8_KEY,
    F9_KEY,
    F10_KEY,
    F11_KEY,
    F12_KEY,
    F13_KEY,
    F14_KEY,
    F15_KEY,
    F16_KEY,
    F17_KEY,
    F18_KEY,
    F19_KEY,
    F20_KEY
};
};  // namespace keyboard
