syntax = "proto2";

import "nanopb.proto";

enum ButtonLayout
{
    option (nanopb_enumopt).long_names = false;

    BUTTON_LAYOUT_STICK = 0;
    BUTTON_LAYOUT_STICKLESS = 1;
    BUTTON_LAYOUT_BUTTONS_ANGLED = 2;
    BUTTON_LAYOUT_BUTTONS_BASIC = 3;
    BUTTON_LAYOUT_KEYBOARD_ANGLED = 4;
    BUTTON_LAYOUT_KEYBOARDA = 5;
    BUTTON_LAYOUT_DANCEPADA = 6;
    BUTTON_LAYOUT_TWINSTICKA = 7;
    BUTTON_LAYOUT_BLANKA = 8;
    BUTTON_LAYOUT_VLXA = 9;
    BUTTON_LAYOUT_FIGHTBOARD_STICK = 10;
    BUTTON_LAYOUT_FIGHTBOARD_MIRRORED = 11;
    BUTTON_LAYOUT_CUSTOMA = 12;
    BUTTON_LAYOUT_OPENCORE0WASDA = 13;
    BUTTON_LAYOUT_STICKLESS_13 = 14;
    BUTTON_LAYOUT_STICKLESS_16 = 15;
    BUTTON_LAYOUT_STICKLESS_14 = 16;
    BUTTON_LAYOUT_DANCEPAD_DDR_LEFT = 17;
    BUTTON_LAYOUT_DANCEPAD_DDR_SOLO = 18;
    BUTTON_LAYOUT_DANCEPAD_PIU_LEFT = 19;
    BUTTON_LAYOUT_POPN_A = 20;
    BUTTON_LAYOUT_TAIKO_A = 21;
    BUTTON_LAYOUT_BM_TURNTABLE_A = 22;
    BUTTON_LAYOUT_BM_5KEY_A = 23;
    BUTTON_LAYOUT_BM_7KEY_A = 24;
    BUTTON_LAYOUT_GITADORA_FRET_A = 25;
    BUTTON_LAYOUT_GITADORA_STRUM_A = 26;
    BUTTON_LAYOUT_BOARD_DEFINED_A = 27;
}

enum ButtonLayoutRight
{
    option (nanopb_enumopt).long_names = false;

    BUTTON_LAYOUT_ARCADE = 0;
    BUTTON_LAYOUT_STICKLESSB = 1;
    BUTTON_LAYOUT_BUTTONS_ANGLEDB = 2;
    BUTTON_LAYOUT_VEWLIX = 3;
    BUTTON_LAYOUT_VEWLIX7 = 4;
    BUTTON_LAYOUT_CAPCOM = 5;
    BUTTON_LAYOUT_CAPCOM6 = 6;
    BUTTON_LAYOUT_SEGA2P = 7;
    BUTTON_LAYOUT_NOIR8 = 8;
    BUTTON_LAYOUT_KEYBOARDB = 9;
    BUTTON_LAYOUT_DANCEPADB = 10;
    BUTTON_LAYOUT_TWINSTICKB = 11;
    BUTTON_LAYOUT_BLANKB = 12;
    BUTTON_LAYOUT_VLXB = 13;
    BUTTON_LAYOUT_FIGHTBOARD = 14;
    BUTTON_LAYOUT_FIGHTBOARD_STICK_MIRRORED = 15;
    BUTTON_LAYOUT_CUSTOMB = 16;
    BUTTON_LAYOUT_KEYBOARD8B = 17;
    BUTTON_LAYOUT_OPENCORE0WASDB = 18;
    BUTTON_LAYOUT_STICKLESS_13B = 19;
    BUTTON_LAYOUT_STICKLESS_16B = 20;
    BUTTON_LAYOUT_STICKLESS_14B = 21;
    BUTTON_LAYOUT_DANCEPAD_DDR_RIGHT = 22;
    BUTTON_LAYOUT_DANCEPAD_PIU_RIGHT = 23;
    BUTTON_LAYOUT_POPN_B = 24;
    BUTTON_LAYOUT_TAIKO_B = 25;
    BUTTON_LAYOUT_BM_TURNTABLE_B = 26;
    BUTTON_LAYOUT_BM_5KEY_B = 27;
    BUTTON_LAYOUT_BM_7KEY_B = 28;
    BUTTON_LAYOUT_GITADORA_FRET_B = 29;
    BUTTON_LAYOUT_GITADORA_STRUM_B = 30;
    BUTTON_LAYOUT_BOARD_DEFINED_B = 31;
}

enum SplashMode
{
    option (nanopb_enumopt).long_names = false;

    SPLASH_MODE_STATIC = 0;
    SPLASH_MODE_CLOSEIN = 1;
    SPLASH_MODE_CLOSEINCUSTOM = 2;
    SPLASH_MODE_NONE = 3;
}

enum SplashChoice
{
    option (nanopb_enumopt).long_names = false;

    SPLASH_CHOICE_MAIN = 0;
    SPLASH_CHOICE_X = 1;
    SPLASH_CHOICE_Y = 2;
    SPLASH_CHOICE_Z = 3;
    SPLASH_CHOICE_CUSTOM = 4;
    SPLASH_CHOICE_LEGACY = 5;
}

enum OnBoardLedMode
{
    option (nanopb_enumopt).long_names = false;
    
    ON_BOARD_LED_MODE_OFF = 0;
    ON_BOARD_LED_MODE_MODE_INDICATOR = 1;
    ON_BOARD_LED_MODE_INPUT_TEST = 2;
    ON_BOARD_LED_MODE_PS_AUTH = 3;
}

enum InputMode
{
    option (nanopb_enumopt).long_names = false;

    INPUT_MODE_XINPUT = 0;
    INPUT_MODE_SWITCH = 1;
    INPUT_MODE_HID = 2;
    INPUT_MODE_KEYBOARD = 3;
    INPUT_MODE_PS4 = 4;
    INPUT_MODE_XBONE = 5;
    INPUT_MODE_MDMINI = 6;
    INPUT_MODE_NEOGEO = 7;
    INPUT_MODE_PCEMINI = 8;
    INPUT_MODE_EGRET = 9;
    INPUT_MODE_ASTRO = 10;
    INPUT_MODE_PSCLASSIC = 11;
    INPUT_MODE_XBOXORIGINAL = 12;
    INPUT_MODE_PS5 = 13;
    INPUT_MODE_CONFIG = 255;
}

enum InputModeAuthType
{
    option (nanopb_enumopt).long_names = false;

    INPUT_MODE_AUTH_TYPE_NONE = 0;
    INPUT_MODE_AUTH_TYPE_KEYS = 1;
    INPUT_MODE_AUTH_TYPE_USB = 2;
    INPUT_MODE_AUTH_TYPE_I2C = 3;
}

enum DpadMode
{
    option (nanopb_enumopt).long_names = false;

    DPAD_MODE_DIGITAL = 0;
    DPAD_MODE_LEFT_ANALOG = 1;
    DPAD_MODE_RIGHT_ANALOG = 2;
}

enum InvertMode
{
    option (nanopb_enumopt).long_names = false;

    INVERT_NONE = 0;
    INVERT_X = 1;
    INVERT_Y = 2;
    INVERT_XY = 3;
}

enum SOCDMode
{
    option (nanopb_enumopt).long_names = false;

    SOCD_MODE_UP_PRIORITY = 0;				// U+D=U, L+R=N
    SOCD_MODE_NEUTRAL = 1;					// U+D=N, L+R=N
    SOCD_MODE_SECOND_INPUT_PRIORITY = 2;	// U>D=D, L>R=R (Last Input Priority, aka Last Win)
    SOCD_MODE_FIRST_INPUT_PRIORITY = 3;		// U>D=U, L>R=L (First Input Priority, aka First Win)
    SOCD_MODE_BYPASS = 4;					// U+D=UD, L+R=LR (No cleaning applied)
}

enum GpioAction
{
    option (nanopb_enumopt).long_names = false;

    // the lowest value is the default, which should be NONE;
    // reserving some numbers in case we need more not-mapped type values
    NONE                         = -10;
    RESERVED                     = -5;
    ASSIGNED_TO_ADDON            = 0;
    BUTTON_PRESS_UP              = 1;
    BUTTON_PRESS_DOWN            = 2;
    BUTTON_PRESS_LEFT            = 3;
    BUTTON_PRESS_RIGHT           = 4;
    BUTTON_PRESS_B1              = 5;
    BUTTON_PRESS_B2              = 6;
    BUTTON_PRESS_B3              = 7;
    BUTTON_PRESS_B4              = 8;
    BUTTON_PRESS_L1              = 9;
    BUTTON_PRESS_R1              = 10;
    BUTTON_PRESS_L2              = 11;
    BUTTON_PRESS_R2              = 12;
    BUTTON_PRESS_S1              = 13;
    BUTTON_PRESS_S2              = 14;
    BUTTON_PRESS_A1              = 15;
    BUTTON_PRESS_A2              = 16;
    BUTTON_PRESS_L3              = 17;
    BUTTON_PRESS_R3              = 18;
    BUTTON_PRESS_FN              = 19;
    BUTTON_PRESS_DDI_UP          = 20;
    BUTTON_PRESS_DDI_DOWN        = 21;
    BUTTON_PRESS_DDI_LEFT        = 22;
    BUTTON_PRESS_DDI_RIGHT       = 23;
    SUSTAIN_DP_MODE_DP           = 24;
    SUSTAIN_DP_MODE_LS           = 25;
    SUSTAIN_DP_MODE_RS           = 26;
    SUSTAIN_SOCD_MODE_UP_PRIO    = 27;
    SUSTAIN_SOCD_MODE_NEUTRAL    = 28;
    SUSTAIN_SOCD_MODE_SECOND_WIN = 29;
    SUSTAIN_SOCD_MODE_FIRST_WIN  = 30;
    SUSTAIN_SOCD_MODE_BYPASS     = 31;
    BUTTON_PRESS_TURBO           = 32;
    BUTTON_PRESS_MACRO           = 33;
    BUTTON_PRESS_MACRO_1         = 34;
    BUTTON_PRESS_MACRO_2         = 35;
    BUTTON_PRESS_MACRO_3         = 36;
    BUTTON_PRESS_MACRO_4         = 37;
    BUTTON_PRESS_MACRO_5         = 38;
    BUTTON_PRESS_MACRO_6         = 39;
}

enum GamepadHotkey
{
    option (nanopb_enumopt).long_names = false;

    HOTKEY_NONE                  = 0;
    HOTKEY_DPAD_DIGITAL          = 1;
    HOTKEY_DPAD_LEFT_ANALOG      = 2;
    HOTKEY_DPAD_RIGHT_ANALOG     = 3;
    HOTKEY_HOME_BUTTON           = 4;
    HOTKEY_CAPTURE_BUTTON        = 5;
    HOTKEY_SOCD_UP_PRIORITY      = 6;
    HOTKEY_SOCD_NEUTRAL          = 7;
    HOTKEY_SOCD_LAST_INPUT       = 8;
    HOTKEY_INVERT_X_AXIS         = 9;
    HOTKEY_INVERT_Y_AXIS         = 10;
    HOTKEY_SOCD_FIRST_INPUT      = 11;
    HOTKEY_SOCD_BYPASS           = 12;
    HOTKEY_TOGGLE_4_WAY_MODE     = 13;
    HOTKEY_TOGGLE_DDI_4_WAY_MODE = 14;
    HOTKEY_LOAD_PROFILE_1        = 15;
    HOTKEY_LOAD_PROFILE_2        = 16;
    HOTKEY_LOAD_PROFILE_3        = 17;
    HOTKEY_LOAD_PROFILE_4        = 18;
    HOTKEY_L3_BUTTON             = 19;
    HOTKEY_R3_BUTTON             = 20;
    HOTKEY_TOUCHPAD_BUTTON       = 21;
    HOTKEY_REBOOT_DEFAULT        = 22;
    HOTKEY_B1_BUTTON             = 23;
    HOTKEY_B2_BUTTON             = 24;
    HOTKEY_B3_BUTTON             = 25;
    HOTKEY_B4_BUTTON             = 26;
    HOTKEY_L1_BUTTON             = 27;
    HOTKEY_R1_BUTTON             = 28;
    HOTKEY_L2_BUTTON             = 29;
    HOTKEY_R2_BUTTON             = 30;
    HOTKEY_S1_BUTTON             = 31;
    HOTKEY_S2_BUTTON             = 32;
    HOTKEY_A1_BUTTON             = 33;
    HOTKEY_A2_BUTTON             = 34;
}

// This has to be kept in sync with LEDFormat in NeoPico.hpp
enum LEDFormat_Proto
{
    LED_FORMAT_GRB = 0;
    LED_FORMAT_RGB = 1;
    LED_FORMAT_GRBW = 2;
    LED_FORMAT_RGBW = 3;
}

enum ShmupMixMode
{
    option (nanopb_enumopt).long_names = false;

    SHMUP_MIX_MODE_TURBO_PRIORITY = 0;
    SHMUP_MIX_MODE_CHARGE_PRIORITY = 1;
}

enum PLEDType
{
    option (nanopb_enumopt).long_names = false;
    
    PLED_TYPE_NONE = -1;
    PLED_TYPE_PWM = 0;
    PLED_TYPE_RGB = 1;
};

enum ForcedSetupMode
{
    option (nanopb_enumopt).long_names = false;
    
	FORCED_SETUP_MODE_OFF = 0;
	FORCED_SETUP_MODE_LOCK_MODE_SWITCH = 1;
	FORCED_SETUP_MODE_LOCK_WEB_CONFIG = 2;
	FORCED_SETUP_MODE_LOCK_BOTH = 3;
};

enum DualDirectionalCombinationMode
{
	option (nanopb_enumopt).long_names = false;

	MIXED_MODE = 0;
	GAMEPAD_MODE = 1;
	DUAL_MODE = 2;
	NONE_MODE = 3;
}

enum PS4ControllerType
{
    option (nanopb_enumopt).long_names = false;
    
    PS4_CONTROLLER = 0;
    PS4_ARCADESTICK = 7;
}

enum MacroType
{
    option (nanopb_enumopt).long_names = false;

    ON_PRESS = 1;
    ON_HOLD_REPEAT = 2;
    ON_TOGGLE = 3;
};

enum GPElement
{
    option (nanopb_enumopt).long_names = false;

    GP_ELEMENT_WIDGET = 0;
    GP_ELEMENT_SCREEN = 1;
    GP_ELEMENT_BTN_BUTTON = 2;
    GP_ELEMENT_DIR_BUTTON = 3;
    GP_ELEMENT_PIN_BUTTON = 4;
    GP_ELEMENT_LEVER = 5;
    GP_ELEMENT_LABEL = 6;
    GP_ELEMENT_SPRITE = 7;
    GP_ELEMENT_SHAPE = 8;
};

enum GPShape_Type
{
    option (nanopb_enumopt).long_names = false;
    
    GP_SHAPE_ELLIPSE = 0;
    GP_SHAPE_SQUARE = 1;
    GP_SHAPE_DIAMOND = 2;
    GP_SHAPE_POLYGON = 3;
    GP_SHAPE_ARC = 4;
};

enum RotaryEncoderPinMode
{
    option (nanopb_enumopt).long_names = false;

    ENCODER_MODE_NONE = 0;
    ENCODER_MODE_LEFT_ANALOG_X = 1;
    ENCODER_MODE_LEFT_ANALOG_Y = 2;
    ENCODER_MODE_RIGHT_ANALOG_X = 3;
    ENCODER_MODE_RIGHT_ANALOG_Y = 4;
    ENCODER_MODE_LEFT_TRIGGER = 5;
    ENCODER_MODE_RIGHT_TRIGGER = 6;
    ENCODER_MODE_DPAD_X = 7;
    ENCODER_MODE_DPAD_Y = 8;
};