diff --git a/CMakeLists.txt b/CMakeLists.txt index 46e9171e..8abced63 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,8 @@ project(GP2040-CE LANGUAGES C CXX ASM VERSION ${CMAKE_GIT_REPO_VERSION}) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) +set(ENV{GP2040_BOARDCONFIG} GamePad-LED) + if(DEFINED ENV{GP2040_BOARDCONFIG}) set(GP2040_BOARDCONFIG $ENV{GP2040_BOARDCONFIG}) elseif(NOT DEFINED GP2040_BOARDCONFIG) @@ -47,6 +49,8 @@ elseif(NOT DEFINED SKIP_SUBMODULES) set(SKIP_SUBMODULES FALSE) endif() + + if(DEFINED ENV{SKIP_WEBBUILD}) set(SKIP_WEBBUILD $ENV{SKIP_WEBBUILD}) elseif(NOT DEFINED SKIP_WEBBUILD) diff --git a/Gamepad-LED.code-workspace b/Gamepad-LED.code-workspace new file mode 100644 index 00000000..876a1499 --- /dev/null +++ b/Gamepad-LED.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/configs/GamePad-LED/BoardConfig.h b/configs/GamePad-LED/BoardConfig.h new file mode 100644 index 00000000..e36bdc73 --- /dev/null +++ b/configs/GamePad-LED/BoardConfig.h @@ -0,0 +1,287 @@ + +/* + * SPDX-License-Identifier: MIT + * SPDX-FileCopyrightText: Copyright (c) 2021 Jason Skuby (mytechtoybox.com) + */ + +#ifndef GAMEPAD_LED_CONFIG_H_ +#define GAMEPAD_LED_CONFIG_H_ + +#include "enums.pb.h" + +#define BOARD_CONFIG_LABEL "GAMEPAD LED Fighting Board" + + + +// This is the main pin definition section. +// This will let you specify which GPIO pin each button is assigned too. +// You can set any of the main pins as `-1` to disable it. +// The Turbo pin and LS + RS slider pins can also be set to `-1` to disable that functionality. +// Please note that only when `PIN_BUTTON_TURBO` is set to `-1` will the `T##` be removed from a connected display. +// Please note that only when `PIN_SLIDER_ONE` and `PIN_SLIDER_TWO` are set to `-1` will the button combo shortcut for DP/LS/RS work. +// The buttons are listed in GP2040 configuration, beside each the listed order is *GP2040 / Xinput / Switch / PS3 / Directinput / Arcade* + +#define PIN_DPAD_UP 1 // UP +#define PIN_DPAD_DOWN 2 // DOWN +#define PIN_DPAD_RIGHT 3 // RIGHT +#define PIN_DPAD_LEFT 0 // LEFT +#define PIN_BUTTON_B1 11 // B1 / A / B / Cross / 2 / K1 +#define PIN_BUTTON_B2 12 // B2 / B / A / Circle / 3 / K2 +#define PIN_BUTTON_R2 13 // R2 / RT / ZR / R2 / 8 / K3 +#define PIN_BUTTON_L2 14 // L2 / LT / ZL / L2 / 7 / K4 +#define PIN_BUTTON_B3 7 // B3 / X / Y / Square / 1 / P1 +#define PIN_BUTTON_B4 8 // B4 / Y / X / Triangle / 4 / P2 +#define PIN_BUTTON_R1 9 // R1 / RB / R / R1 / 6 / P3 +#define PIN_BUTTON_L1 10 // L1 / LB / L / L1 / 5 / P4 +#define PIN_BUTTON_S1 5 // S1 / Back / Minus / Select / 9 / Coin +#define PIN_BUTTON_S2 6 // S2 / Start / Plus / Start / 10 / Start +#define PIN_BUTTON_L3 21 // L3 / LS / LS / L3 / 11 / LS +#define PIN_BUTTON_R3 22 // R3 / RS / RS / R3 / 12 / RS +#define PIN_BUTTON_A1 4 // A1 / Guide / Home / PS / 13 / ~ +#define PIN_BUTTON_A2 20 // A2 / ~ / Capture / ~ / 14 / ~ +#define PIN_BUTTON_FN 19 // Hotkey Function + +#define PIN_BUTTON_REVERSE -1 // UDLR Reverse + + +// This is the D-PAD select section + +#define JSLIDER_ENABLED 1 +#define PIN_SLIDER_ONE 23 // Left Stick Slider +#define PIN_SLIDER_TWO 17 // Right Stick Slider + +// This is the SOCD select section +#define SLIDER_SOCD_ENABLED 1 +#define PIN_SLIDER_SOCD_ONE 18 // SOCD Slider Pin One +#define PIN_SLIDER_SOCD_TWO 16 // SOCD Slider Pin Two +#define SLIDER_SOCD_SLOT_ONE SOCD_MODE_UP_PRIORITY +#define SLIDER_SOCD_SLOT_TWO SOCD_MODE_SECOND_INPUT_PRIORITY +#define SLIDER_SOCD_SLOT_DEFAULT SOCD_MODE_NEUTRAL + + +#define DEFAULT_FORCED_SETUP_MODE FORCED_SETUP_MODE_OFF // FORCED_SETUP_MODE_OFF, FORCED_SETUP_MODE_LOCK_MODE_SWITCH, FORCED_SETUP_MODE_LOCK_WEB_CONFIG, FORCED_SETUP_MODE_LOCK_BOTH +#define DEFAULT_LOCK_HOTKEYS false // or true +#define DEFAULT_PS4CONTROLLER_TYPE PS4_CONTROLLER + +// This is the LEDs section. +// The default `TURBO_LED_PIN` pin is set to `15` ( it is recommended to run through 3V3(OUT) with a resistor) +// The Turbo LED will flash at a speed consistant with the set speed of the Turbo when a Turbo button is active. +// It is recommended to disable the `TURBO_LED_PIN` by setting it to `-1` if you are sensitive of flashing lights. +// The default `BOARD_LEDS_PIN` pin is set to `28`. +// The board LED pin will allow you to connect addressible RGB LEDs on the Pico. +// Addressible RGB LEDs should be connected to the `VBUS` pin (#40), an avalible ground pin and the defined `BOARD_LEDS_PIN`. +// Special note - You should only ever use addressible RGB LEDs that are rated for 5v operation on the Pico. +// The defualt `LED_BRIGHTNESS_MAXIMUM` value is `50`. +// This will change how bright the LEDs are with `0` being off and `100` being full brightness. +// The minimum `LED_BRIGHTNESS_MAXIMUM` value is `0`. +// The maximum `LED_BRIGHTNESS_MAXIMUM` value is `100`. +// The defualt `LED_BRIGHTNESS_STEPS` value is `5`. +// This will change how many brightness steps there are when increasing or decreasing the brightness of the LEDs via the onboard shortcut. +// It is recommend to keep this value at `5` or `10`. +// The defualt `LED_FORMAT` is `LED_FORMAT_GRB`. +// You can also choose the `LED_FORMAT` of `LED_FORMAT_RGB` if your addressible RGB LEDs are not working as intended. +// The defualt `LEDS_PER_PIXEL` is set to `1`. +// This will change how many addressible RGB LEDs there are per button. +// The default LEDS_[BUTTON] is an order and has nothing to do with what GPIO pin something is connected to. +// Unless you are planning on running custom animations I would recommmend you leave this as is. + +#define TURBO_LED_PIN -1 +#define TURBO_ENABLED 1 +#define PIN_BUTTON_TURBO 28 // Turbo + + +#define BOARD_LEDS_PIN 15 + +#define LED_BRIGHTNESS_MAXIMUM 150 +#define LED_BRIGHTNESS_STEPS 5 +#define LED_FORMAT LED_FORMAT_GRB +#define LEDS_PER_PIXEL 1 + +#define LEDS_DPAD_LEFT 11 +#define LEDS_DPAD_DOWN 10 +#define LEDS_DPAD_RIGHT 9 +#define LEDS_DPAD_UP 0 +#define LEDS_BUTTON_B3 1 +#define LEDS_BUTTON_B4 2 +#define LEDS_BUTTON_R1 3 +#define LEDS_BUTTON_L1 4 +#define LEDS_BUTTON_B1 8 +#define LEDS_BUTTON_B2 7 +#define LEDS_BUTTON_R2 6 +#define LEDS_BUTTON_L2 5 +#define LEDS_BUTTON_S1 -1 +#define LEDS_BUTTON_S2 -1 +#define LEDS_BUTTON_L3 -1 +#define LEDS_BUTTON_R3 -1 +#define LEDS_BUTTON_A1 -1 +#define LEDS_BUTTON_A2 -1 + + +// This is the Player LED section. +// In this section you can specify if Player LEDs will be active, and, if active, which pins will be used for them. +// The defualt is `PLED_TYPE_NONE` which will turn the Player LEDs off. +// The default pin for each Player LED is `-1` which disables it. +// To enable a `PLED#_PIN`, replace the `-1` with the GPIO pin number that is desired. +// There are three options for `PLED_TYPE` currently: +// 1 - `PLED_TYPE_NONE` - This will disable the Player LEDs +// 2 - `PLED_TYPE_PWM` - This will enable the Player LEDs ( it is recommended to run through 3V3(OUT) with a resistor) +// 3 - `PLED_TYPE_RGB` - This will enable the Player LEDs as addressible RGB LEDs (please not that this has not been implemented yet) + +#define PLED_TYPE PLED_TYPE_PWM +#define PLED1_PIN -1 +#define PLED2_PIN -1 +#define PLED3_PIN -1 +#define PLED4_PIN -1 + + +// This is the Analog section. +// In this section you can specify if Analog is enabled, and, if endabled, which pins will be used for it. +// The default for `ANALOG_ADC_VRX` and `ANALOG_ADC_VRY` is `-1` which disables them. +// To enable a `ANALOG_ADC_VRX` and `ANALOG_ADC_VRY`, replace the `-1` with the GPIO pin numbers that are desired. + +#define ANALOG_ADC_1_VRX -1 +#define ANALOG_ADC_1_VRY -1 +#define ANALOG_ADC_1_MODE DPAD_MODE_LEFT_ANALOG +#define ANALOG_ADC_1_INVERT INVERT_NONE + +#define ANALOG_ADC_2_VRX -1 +#define ANALOG_ADC_2_VRY -1 +#define ANALOG_ADC_2_MODE DPAD_MODE_RIGHT_ANALOG +#define ANALOG_ADC_2_INVERT INVERT_NONE + + +// This is the I2C Display section (commonly known as the OLED display section). +// In this section you can specify if a display as been enabled, which pins are assined to it, the block address and speed. +// The default for `HAS_I2C_DISPLAY` is `1` which enables it. +// To disable the display you can change `HAS_I2C_DISPLAY` to `-1`. +// The default `I2C_SDA_PIN` is `0`. +// The defualt `I2C_SCL_PIN` is `1`. +// The defualt `I2C_BLOCK` is `12c0`. +// If you change the `I2C_SDA_PIN` and `I2C_SCL_PIN` pin mapping, you may need to change the `I2C_BLOCK` as well. +// The defualt `I2C_SPEED` is `400000`. +// This should be more than fast enough for most displays. +// Some smaller displays (like 0.96" and 1.31") can go up to `800000` or even `1000000`. +// The default `DISPLAY_FLIP` is `0`. +// This can be changed to `1` to have the dispaly output flipped. +// The default `DISPLAY_INVERY` is `0`. +// This can be changed to `1` to have the color on the display inverted. +// The default `BUTTON_LAYOUT` is `BUTTON_LAYOUT_STICK` which will show an arcade stick on the left hand side of the display. +// There are seven options for `BUTTON_LAYOUT` currently: +// 1 - BUTTON_LAYOUT_STICK - This is a basic joystick layout +// 2 - BUTTON_LAYOUT_STICKLESS - This is a basic stickless (all button) layout +// 3 - BUTTON_LAYOUT_BUTTONS_ANGLED - This a WASD button layout that is angled +// 4 - BUTTON_LAYOUT_BUTTONS_BASIC - This a WASD button layout that is straight +// 5 - BUTTON_LAYOUT_KEYBOARD_ANGLED - This is a WASD keyboard layout that is angled +// 6 - BUTTON_LAYOUT_KEYBOARDA - This is a WASD keyboard layout that is straight +// 7 - BUTTON_LAYOUT_DANCEPADA - This is a dance pad layout (must be used with `BUTTON_LAYOUT_DANCEPADB` in `BUTTON_LAYOUT_RIGHT`) +// The default `BUTTON_LAYOUT_RIGHT` is `BUTTON_LAYOUT_NOIR8` which will show eight buttons on the right hand side of the display. +// There are eleven options for `BUTTON_LAYOUT_RIGHT` currently: +// 1 - BUTTON_LAYOUT_ARCADE - This is a standard 8 button arcade layout +// 2 - BUTTON_LAYOUT_STICKLESSB - This is a basic stickless (all button) layout +// 3 - BUTTON_LAYOUT_BUTTONS_ANGLEDB - This is a standard 8 button arcade layout that is angled +// 4 - BUTTON_LAYOUT_VEWLIX - This is the standard 8 button Vewlix layout +// 5 - BUTTON_LAYOUT_VEWLIX7 - This is the standard 7 button Vewlix layout +// 6 - BUTTON_LAYOUT_CAPCOM - This is the standard 8 button Capcom layout +// 7 - BUTTON_LAYOUT_CAPCOM6 - This is the stndard 6 button Capcom layout +// 8 - BUTTON_LAYOUT_SEGA2P - This is the standard 8 button Sega2P layout +// 9 - BUTTON_LAYOUT_NOIR8 - This is the standard 8 button Noir layout +// 10 - BUTTON_LAYOUT_KEYBOARDB - This is a WASD keyboard layout that is straight +// 11 - BUTTON_LAYOUT_DANCEPADB - This is a dance pad layout (must be used with `BUTTON_LAYOUT_DANCEPADA` in `BUTTON_LAYOUT`) +// The default `SPLASH_MODE` is `NOSPLASH`. +// There are four options for `SPLASH_MODE` currently: +// 1 - `STATICSPLASH` - This will display the static splash image +// 2 - `CLOSEIN` - This will display the static splash image as a top and bottom coming together animation +// 3 - `CLOSEINCUSTOM` - This will display the custom splash image as a top and bottom coming together animation +// 4 - `NOSPLASH` - This will not display a splash screen on boot +// Special note - All of the splash screen images can be changed via `include/bitmaps.h` + +#define HAS_I2C_DISPLAY 1 +#define I2C_SDA_PIN 26 +#define I2C_SCL_PIN 27 +#define I2C_BLOCK i2c1 +#define I2C_SPEED 400000 +#define DISPLAY_FLIP 0 +#define DISPLAY_INVERT 0 + +// I2C Analog ADS1219 Add-on Options +#define I2C_ANALOG1219_SDA_PIN -1 +#define I2C_ANALOG1219_SCL_PIN -1 +#define I2C_ANALOG1219_BLOCK i2c0 +#define I2C_ANALOG1219_SPEED 400000 +#define I2C_ANALOG1219_ADDRESS 0x40 + +// Reverse Button section +#define REVERSE_LED_PIN -1 +#define REVERSE_UP_DEFAULT 1 +#define REVERSE_DOWN_DEFAULT 1 +#define REVERSE_LEFT_DEFAULT 1 +#define REVERSE_RIGHT_DEFAULT 1 + +#define BUTTON_LAYOUT BUTTON_LAYOUT_STICKLESS +#define BUTTON_LAYOUT_RIGHT BUTTON_LAYOUT_STICKLESSB +#define SPLASH_MODE SPLASH_MODE_NONE +#define SPLASH_CHOICE SPLASH_CHOICE_MAIN +#define SPLASH_DURATION 7500 // Duration in milliseconds + +// Board LED Add-on Setting +// BOARD_LED_OFF - Turns the on-board LED off +// MODE_INDICATOR - On-board LED blinks on various frequencies depending +// on the current mode (config, normal, or no USB data) +// INPUT_TEST - Blinks whenever any input is made + +#define BOARD_LED_TYPE ON_BOARD_LED_MODE_OFF + +// Dual Directional Add-on Options + +#define PIN_DUAL_DIRECTIONAL_UP -1 +#define PIN_DUAL_DIRECTIONAL_DOWN -1 +#define PIN_DUAL_DIRECTIONAL_LEFT -1 +#define PIN_DUAL_DIRECTIONAL_RIGHT -1 +#define DUAL_DIRECTIONAL_STICK_MODE DPAD_MODE_DIGITAL +#define DUAL_DIRECTIONAL_COMBINE_MODE DUAL_COMBINE_MODE_MIXED + +// BOOTSEL Button Add-on setting +#define BOOTSEL_BUTTON_MASK 0 // 0 means none, get other mask from GamepadState.h + +// Extra Button Add-on setting +#define EXTRA_BUTTON_MASK 0 // 0 means none, get other mask from GamepadState.h + // For directions, use GAMEPAD_MASK_DU, GAMEPAD_MASK_DD, GAMEPAD_MASK_DL and GAMEPAD_MASK_DR +#define EXTRA_BUTTON_PIN -1 + +// USB Passthrough settings +#define PSPASSTHROUGH_ENABLED 1 +#define PSPASSTHROUGH_PIN_DPLUS 24 + + +// Button Lock Add-on setting +#define FOCUS_MODE_ENABLED 1 +#define FOCUS_MODE_BUTTON_MASK GAMEPAD_MASK_S1 | GAMEPAD_MASK_S2 | GAMEPAD_MASK_A1 | GAMEPAD_MASK_A2 // 0 means none, get other mask from GamepadState.h +#define FOCUS_MODE_PIN 29 +#define FOCUS_MODE_BUTTON_LOCK_ENABLED 1 +#define FOCUS_MODE_MACRO_LOCK_ENABLED 1 +#define FOCUS_MODE_RGB_LOCK_ENABLED 1 +#define FOCUS_MODE_OLED_LOCK_ENABLED 1 + +// Keyboard Mapping Configuration +// List of HID keycodes can be located here: https://github.com/hathach/tinyusb/blob/3623ba1884ddff23e9b64766cb6dd032f1425846/src/class/hid/hid.h#L356 +// Even for the modifier keys, HID_KEY entries should be used as the implementation expects those and will convert as necessary. +#define KEY_DPAD_UP HID_KEY_ARROW_UP // UP +#define KEY_DPAD_DOWN HID_KEY_ARROW_DOWN // DOWN +#define KEY_DPAD_RIGHT HID_KEY_ARROW_RIGHT // RIGHT +#define KEY_DPAD_LEFT HID_KEY_ARROW_LEFT // LEFT +#define KEY_BUTTON_B1 HID_KEY_SHIFT_LEFT // B1 / A / B / Cross / 2 / K1 +#define KEY_BUTTON_B2 HID_KEY_Z // B2 / B / A / Circle / 3 / K2 +#define KEY_BUTTON_R2 HID_KEY_X // R2 / RT / ZR / R2 / 8 / K3 +#define KEY_BUTTON_L2 HID_KEY_V // L2 / LT / ZL / L2 / 7 / K4 +#define KEY_BUTTON_B3 HID_KEY_CONTROL_LEFT // B3 / X / Y / Square / 1 / P1 +#define KEY_BUTTON_B4 HID_KEY_ALT_LEFT // B4 / Y / X / Triangle / 4 / P2 +#define KEY_BUTTON_R1 HID_KEY_SPACE // R1 / RB / R / R1 / 6 / P3 +#define KEY_BUTTON_L1 HID_KEY_C // L1 / LB / L / L1 / 5 / P4 +#define KEY_BUTTON_S1 HID_KEY_5 // S1 / Back / Minus / Select / 9 / Coin +#define KEY_BUTTON_S2 HID_KEY_1 // S2 / Start / Plus / Start / 10 / Start +#define KEY_BUTTON_L3 HID_KEY_EQUAL // L3 / LS / LS / L3 / 11 / LS +#define KEY_BUTTON_R3 HID_KEY_MINUS // R3 / RS / RS / R3 / 12 / RS +#define KEY_BUTTON_A1 HID_KEY_9 // A1 / Guide / Home / PS / 13 / ~ +#define KEY_BUTTON_A2 HID_KEY_F2 // A2 / ~ / Capture / ~ / 14 / ~ + +#endif \ No newline at end of file diff --git a/headers/addons/i2cdisplay.h b/headers/addons/i2cdisplay.h index 583f8043..2fab35f2 100644 --- a/headers/addons/i2cdisplay.h +++ b/headers/addons/i2cdisplay.h @@ -239,6 +239,8 @@ class I2CDisplayAddon : public GPAddon uint16_t prevButtonState; bool turnOffWhenSuspended; bool isInputHistoryEnabled; + bool isFocusModeEnabled; + bool focusModePrevState; InputHistoryAddon* inputHistoryAddon; }; diff --git a/headers/addons/neopicoleds.h b/headers/addons/neopicoleds.h index 114bb7bc..5a19229f 100644 --- a/headers/addons/neopicoleds.h +++ b/headers/addons/neopicoleds.h @@ -195,6 +195,8 @@ class NeoPicoLEDAddon : public GPAddon { AnimationStation as; std::map buttonPositions; bool turnOffWhenSuspended; + bool isFocusModeEnabled; + bool focusModePrevState; }; #endif diff --git a/src/addons/i2cdisplay.cpp b/src/addons/i2cdisplay.cpp index e2b6ded9..6ff98c83 100644 --- a/src/addons/i2cdisplay.cpp +++ b/src/addons/i2cdisplay.cpp @@ -14,26 +14,29 @@ #include "config.pb.h" #include "usb_driver.h" -bool I2CDisplayAddon::available() { - const DisplayOptions& options = Storage::getInstance().getDisplayOptions(); +bool I2CDisplayAddon::available() +{ + const DisplayOptions &options = Storage::getInstance().getDisplayOptions(); return options.enabled && PeripheralManager::getInstance().isI2CEnabled(options.i2cBlock); } -void I2CDisplayAddon::setup() { - const DisplayOptions& options = Storage::getInstance().getDisplayOptions(); - PeripheralI2C* i2c = PeripheralManager::getInstance().getI2C(options.i2cBlock); +void I2CDisplayAddon::setup() +{ + const DisplayOptions &options = Storage::getInstance().getDisplayOptions(); + PeripheralI2C *i2c = PeripheralManager::getInstance().getI2C(options.i2cBlock); obdI2CInit(&obd, - options.size, - options.i2cAddress, - options.flip, - options.invert, - DISPLAY_USEWIRE, - i2c, - -1); + options.size, + options.i2cAddress, + options.flip, + options.invert, + DISPLAY_USEWIRE, + i2c, + -1); const int detectedDisplay = initDisplay(0); - if (isSH1106(detectedDisplay)) { + if (isSH1106(detectedDisplay)) + { // The display is actually a SH1106 that was misdetected as a SSD1306 by OneBitDisplay. // Reinitialize as SH1106. initDisplay(OLED_132x64); @@ -44,217 +47,266 @@ void I2CDisplayAddon::setup() { clearScreen(1); gamepad = Storage::getInstance().GetGamepad(); pGamepad = Storage::getInstance().GetProcessedGamepad(); + + const FocusModeOptions &focusModeOptions = Storage::getInstance().getAddonOptions().focusModeOptions; + isFocusModeEnabled = focusModeOptions.enabled && focusModeOptions.oledLockEnabled && + isValidPin(focusModeOptions.pin); + prevButtonState = 0; displaySaverTimer = options.displaySaverTimeout; displaySaverTimeout = displaySaverTimer; configMode = Storage::getInstance().GetConfigMode(); turnOffWhenSuspended = options.turnOffWhenSuspended; - const InputHistoryOptions& inputHistoryOptions = Storage::getInstance().getAddonOptions().inputHistoryOptions; + const InputHistoryOptions &inputHistoryOptions = Storage::getInstance().getAddonOptions().inputHistoryOptions; isInputHistoryEnabled = inputHistoryOptions.enabled; } bool I2CDisplayAddon::isDisplayPowerOff() { - if (turnOffWhenSuspended && get_usb_suspended()) { - if (displayIsPowerOn) setDisplayPower(0); - return true; - } else { - if (!displayIsPowerOn) setDisplayPower(1); + + if (isFocusModeEnabled) + { + const FocusModeOptions &focusModeOptions = Storage::getInstance().getAddonOptions().focusModeOptions; + bool isFocusModeActive = !gpio_get(focusModeOptions.pin); + if (focusModePrevState != isFocusModeActive) + { + focusModePrevState = isFocusModeActive; + if (isFocusModeActive) + { + setDisplayPower(0); + } + else + { + setDisplayPower(1); + } + } + } + else + { + if (turnOffWhenSuspended && get_usb_suspended()) + { + if (displayIsPowerOn) + setDisplayPower(0); + return true; + } + else + { + if (!displayIsPowerOn) + setDisplayPower(1); + } } - if (!displaySaverTimeout) return false; + if (!displaySaverTimeout && !isFocusModeEnabled) + return false; float diffTime = getMillis() - prevMillis; displaySaverTimer -= diffTime; - if (!!displaySaverTimeout && (gamepad->state.buttons || gamepad->state.dpad) ) { + if (!!displaySaverTimeout && (gamepad->state.buttons || gamepad->state.dpad)) + { displaySaverTimer = displaySaverTimeout; setDisplayPower(1); - } else if (!!displaySaverTimeout && displaySaverTimer <= 0) { + } + else if (!!displaySaverTimeout && displaySaverTimer <= 0) + { setDisplayPower(0); } prevMillis = getMillis(); - return (!!displaySaverTimeout && displaySaverTimer <= 0); + return (isFocusModeEnabled && focusModePrevState) || (!!displaySaverTimeout && displaySaverTimer <= 0); } void I2CDisplayAddon::setDisplayPower(uint8_t status) { - if (displayIsPowerOn != status) { + if (displayIsPowerOn != status) + { displayIsPowerOn = status; obdPower(&obd, status); } } -void I2CDisplayAddon::process() { - if (!configMode && isDisplayPowerOff()) return; +void I2CDisplayAddon::process() +{ + if (!configMode && isDisplayPowerOff()) + return; clearScreen(0); - switch (getDisplayMode()) { - case I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION: - drawStatusBar(gamepad); - drawText(0, 2, "[Web Config Mode]"); - drawText(0, 3, std::string("GP2040-CE : ") + std::string(GP2040VERSION)); - drawText(0, 4, "[http://192.168.7.1]"); - drawText(0, 5, "Preview:"); - drawText(5, 6, "B1 > Button"); - drawText(5, 7, "B2 > Splash"); + switch (getDisplayMode()) + { + case I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION: + drawStatusBar(gamepad); + drawText(0, 2, "[Web Config Mode]"); + drawText(0, 3, std::string("GP2040-CE : ") + std::string(GP2040VERSION)); + drawText(0, 4, "[http://192.168.7.1]"); + drawText(0, 5, "Preview:"); + drawText(5, 6, "B1 > Button"); + drawText(5, 7, "B2 > Splash"); + break; + case I2CDisplayAddon::DisplayMode::SPLASH: + if (getDisplayOptions().splashMode == static_cast(SPLASH_MODE_NONE)) + { + drawText(0, 4, " Splash NOT enabled."); break; - case I2CDisplayAddon::DisplayMode::SPLASH: - if (getDisplayOptions().splashMode == static_cast(SPLASH_MODE_NONE)) { - drawText(0, 4, " Splash NOT enabled."); - break; - } - drawSplashScreen(getDisplayOptions().splashMode, (uint8_t*) Storage::getInstance().getDisplayOptions().splashImage.bytes, 90); + } + drawSplashScreen(getDisplayOptions().splashMode, (uint8_t *)Storage::getInstance().getDisplayOptions().splashImage.bytes, 90); + break; + case I2CDisplayAddon::DisplayMode::BUTTONS: + drawStatusBar(gamepad); + const DisplayOptions &options = getDisplayOptions(); + ButtonLayoutCustomOptions buttonLayoutCustomOptions = options.buttonLayoutCustomOptions; + + switch (options.buttonLayout) + { + case BUTTON_LAYOUT_STICK: + drawArcadeStick(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); break; - case I2CDisplayAddon::DisplayMode::BUTTONS: - drawStatusBar(gamepad); - const DisplayOptions& options = getDisplayOptions(); - ButtonLayoutCustomOptions buttonLayoutCustomOptions = options.buttonLayoutCustomOptions; - - switch (options.buttonLayout) { - case BUTTON_LAYOUT_STICK: - drawArcadeStick(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_STICKLESS: - drawStickless(8, 20, 8, 2); - break; - case BUTTON_LAYOUT_BUTTONS_ANGLED: - drawWasdBox(8, (isInputHistoryEnabled ? 22 : 28), 7, 3); - break; - case BUTTON_LAYOUT_BUTTONS_BASIC: - drawUDLR(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_KEYBOARD_ANGLED: - drawKeyboardAngled(18, (isInputHistoryEnabled ? 24 : 28), 5, 2); - break; - case BUTTON_LAYOUT_KEYBOARDA: - drawMAMEA(8, (isInputHistoryEnabled ? 22 : 28), 10, 1); - break; - case BUTTON_LAYOUT_OPENCORE0WASDA: - drawOpenCore0WASDA(16, (isInputHistoryEnabled ? 22 : 28), 10, 1); - break; - case BUTTON_LAYOUT_DANCEPADA: - drawDancepadA(39, (isInputHistoryEnabled ? 10 : 12), (isInputHistoryEnabled ? 13 : 15), 2); - break; - case BUTTON_LAYOUT_TWINSTICKA: - drawTwinStickA(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_BLANKA: - drawBlankA(0, 0, 0, 0); - break; - case BUTTON_LAYOUT_VLXA: - drawVLXA(7, (isInputHistoryEnabled ? 22 : 28), 7, 2); - break; - case BUTTON_LAYOUT_CUSTOMA: - drawButtonLayoutLeft(buttonLayoutCustomOptions.paramsLeft); - break; - case BUTTON_LAYOUT_FIGHTBOARD_STICK: - drawArcadeStick(18, 22, 8, 2); - break; - case BUTTON_LAYOUT_FIGHTBOARD_MIRRORED: - drawFightboardMirrored(0, 22, 7, 2); - break; - } + case BUTTON_LAYOUT_STICKLESS: + drawStickless(8, 20, 8, 2); + break; + case BUTTON_LAYOUT_BUTTONS_ANGLED: + drawWasdBox(8, (isInputHistoryEnabled ? 22 : 28), 7, 3); + break; + case BUTTON_LAYOUT_BUTTONS_BASIC: + drawUDLR(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_KEYBOARD_ANGLED: + drawKeyboardAngled(18, (isInputHistoryEnabled ? 24 : 28), 5, 2); + break; + case BUTTON_LAYOUT_KEYBOARDA: + drawMAMEA(8, (isInputHistoryEnabled ? 22 : 28), 10, 1); + break; + case BUTTON_LAYOUT_OPENCORE0WASDA: + drawOpenCore0WASDA(16, (isInputHistoryEnabled ? 22 : 28), 10, 1); + break; + case BUTTON_LAYOUT_DANCEPADA: + drawDancepadA(39, (isInputHistoryEnabled ? 10 : 12), (isInputHistoryEnabled ? 13 : 15), 2); + break; + case BUTTON_LAYOUT_TWINSTICKA: + drawTwinStickA(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_BLANKA: + drawBlankA(0, 0, 0, 0); + break; + case BUTTON_LAYOUT_VLXA: + drawVLXA(7, (isInputHistoryEnabled ? 22 : 28), 7, 2); + break; + case BUTTON_LAYOUT_CUSTOMA: + drawButtonLayoutLeft(buttonLayoutCustomOptions.paramsLeft); + break; + case BUTTON_LAYOUT_FIGHTBOARD_STICK: + drawArcadeStick(18, 22, 8, 2); + break; + case BUTTON_LAYOUT_FIGHTBOARD_MIRRORED: + drawFightboardMirrored(0, 22, 7, 2); + break; + } - switch (options.buttonLayoutRight) { - case BUTTON_LAYOUT_ARCADE: - drawArcadeButtons(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_STICKLESSB: - drawSticklessButtons(8, 20, 8, 2); - break; - case BUTTON_LAYOUT_BUTTONS_ANGLEDB: - drawWasdButtons(8, (isInputHistoryEnabled ? 22 : 28), 7, 3); - break; - case BUTTON_LAYOUT_VEWLIX: - drawVewlix(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_VEWLIX7: - drawVewlix7(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_CAPCOM: - drawCapcom(6, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_CAPCOM6: - drawCapcom6(16, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_SEGA2P: - drawSega2p(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_NOIR8: - drawNoir8(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_KEYBOARDB: - drawMAMEB(68, (isInputHistoryEnabled ? 22 : 28), 10, 1); - break; - case BUTTON_LAYOUT_KEYBOARD8B: - drawMAME8B(68, (isInputHistoryEnabled ? 22 : 28), 10, 1); - break; - case BUTTON_LAYOUT_OPENCORE0WASDB: - drawOpenCore0WASDB(68, (isInputHistoryEnabled ? 22 : 28), 10, 1); - break; - case BUTTON_LAYOUT_DANCEPADB: - drawDancepadB(39, (isInputHistoryEnabled ? 10 : 12), (isInputHistoryEnabled ? 13 : 15), 2); - break; - case BUTTON_LAYOUT_TWINSTICKB: - drawTwinStickB(100, (isInputHistoryEnabled ? 22 : 28), 8, 2); - break; - case BUTTON_LAYOUT_BLANKB: - drawSticklessButtons(0, 0, 0, 0); - break; - case BUTTON_LAYOUT_VLXB: - drawVLXB(6, (isInputHistoryEnabled ? 22 : 28), 7, 2); - break; - case BUTTON_LAYOUT_CUSTOMB: - drawButtonLayoutRight(buttonLayoutCustomOptions.paramsRight); - break; - case BUTTON_LAYOUT_FIGHTBOARD: - drawFightboard(8, 22, 7, 3); - break; - case BUTTON_LAYOUT_FIGHTBOARD_STICK_MIRRORED: - drawArcadeStick(90, 22, 8, 2); - break; - } + switch (options.buttonLayoutRight) + { + case BUTTON_LAYOUT_ARCADE: + drawArcadeButtons(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_STICKLESSB: + drawSticklessButtons(8, 20, 8, 2); + break; + case BUTTON_LAYOUT_BUTTONS_ANGLEDB: + drawWasdButtons(8, (isInputHistoryEnabled ? 22 : 28), 7, 3); + break; + case BUTTON_LAYOUT_VEWLIX: + drawVewlix(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_VEWLIX7: + drawVewlix7(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_CAPCOM: + drawCapcom(6, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_CAPCOM6: + drawCapcom6(16, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_SEGA2P: + drawSega2p(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_NOIR8: + drawNoir8(8, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_KEYBOARDB: + drawMAMEB(68, (isInputHistoryEnabled ? 22 : 28), 10, 1); + break; + case BUTTON_LAYOUT_KEYBOARD8B: + drawMAME8B(68, (isInputHistoryEnabled ? 22 : 28), 10, 1); + break; + case BUTTON_LAYOUT_OPENCORE0WASDB: + drawOpenCore0WASDB(68, (isInputHistoryEnabled ? 22 : 28), 10, 1); + break; + case BUTTON_LAYOUT_DANCEPADB: + drawDancepadB(39, (isInputHistoryEnabled ? 10 : 12), (isInputHistoryEnabled ? 13 : 15), 2); + break; + case BUTTON_LAYOUT_TWINSTICKB: + drawTwinStickB(100, (isInputHistoryEnabled ? 22 : 28), 8, 2); + break; + case BUTTON_LAYOUT_BLANKB: + drawSticklessButtons(0, 0, 0, 0); + break; + case BUTTON_LAYOUT_VLXB: + drawVLXB(6, (isInputHistoryEnabled ? 22 : 28), 7, 2); + break; + case BUTTON_LAYOUT_CUSTOMB: + drawButtonLayoutRight(buttonLayoutCustomOptions.paramsRight); + break; + case BUTTON_LAYOUT_FIGHTBOARD: + drawFightboard(8, 22, 7, 3); + break; + case BUTTON_LAYOUT_FIGHTBOARD_STICK_MIRRORED: + drawArcadeStick(90, 22, 8, 2); + break; + } - if(isInputHistoryEnabled && inputHistoryAddon != nullptr) { - inputHistoryAddon->drawHistory(&obd); - } + if (isInputHistoryEnabled && inputHistoryAddon != nullptr) + { + inputHistoryAddon->drawHistory(&obd); + } - break; + break; } obdDumpBuffer(&obd, NULL); } -I2CDisplayAddon::DisplayMode I2CDisplayAddon::getDisplayMode() { - if (configMode) { +I2CDisplayAddon::DisplayMode I2CDisplayAddon::getDisplayMode() +{ + if (configMode) + { gamepad->read(); uint16_t buttonState = gamepad->state.buttons; - if (prevButtonState && !buttonState) { // has button been pressed (held and released)? - switch (prevButtonState) { - case (GAMEPAD_MASK_B1): - prevDisplayMode = - prevDisplayMode == I2CDisplayAddon::DisplayMode::BUTTONS ? - I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION : I2CDisplayAddon::DisplayMode::BUTTONS; - break; - case (GAMEPAD_MASK_B2): - prevDisplayMode = - prevDisplayMode == I2CDisplayAddon::DisplayMode::SPLASH ? - I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION : I2CDisplayAddon::DisplayMode::SPLASH; - break; - default: - prevDisplayMode = I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION; + if (prevButtonState && !buttonState) + { // has button been pressed (held and released)? + switch (prevButtonState) + { + case (GAMEPAD_MASK_B1): + prevDisplayMode = + prevDisplayMode == I2CDisplayAddon::DisplayMode::BUTTONS ? I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION : I2CDisplayAddon::DisplayMode::BUTTONS; + break; + case (GAMEPAD_MASK_B2): + prevDisplayMode = + prevDisplayMode == I2CDisplayAddon::DisplayMode::SPLASH ? I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION : I2CDisplayAddon::DisplayMode::SPLASH; + break; + default: + prevDisplayMode = I2CDisplayAddon::DisplayMode::CONFIG_INSTRUCTION; } } prevButtonState = buttonState; return prevDisplayMode; - } else { - if (Storage::getInstance().getDisplayOptions().splashMode != static_cast(SPLASH_MODE_NONE)) { + } + else + { + if (Storage::getInstance().getDisplayOptions().splashMode != static_cast(SPLASH_MODE_NONE)) + { uint32_t splashDuration = getDisplayOptions().splashDuration; - if (splashDuration == 0 || getMillis() < splashDuration) { + if (splashDuration == 0 || getMillis() < splashDuration) + { return I2CDisplayAddon::DisplayMode::SPLASH; } } @@ -263,29 +315,33 @@ I2CDisplayAddon::DisplayMode I2CDisplayAddon::getDisplayMode() { return I2CDisplayAddon::DisplayMode::BUTTONS; } -const DisplayOptions& I2CDisplayAddon::getDisplayOptions() { +const DisplayOptions &I2CDisplayAddon::getDisplayOptions() +{ bool configMode = Storage::getInstance().GetConfigMode(); return configMode ? Storage::getInstance().getPreviewDisplayOptions() : Storage::getInstance().getDisplayOptions(); } -int I2CDisplayAddon::initDisplay(int typeOverride) { - const DisplayOptions& options = Storage::getInstance().getDisplayOptions(); - PeripheralI2C* i2c = PeripheralManager::getInstance().getI2C(options.i2cBlock); +int I2CDisplayAddon::initDisplay(int typeOverride) +{ + const DisplayOptions &options = Storage::getInstance().getDisplayOptions(); + PeripheralI2C *i2c = PeripheralManager::getInstance().getI2C(options.i2cBlock); return obdI2CInit(&obd, - typeOverride > 0 ? typeOverride : options.size, - options.i2cAddress, - options.flip, - options.invert, - DISPLAY_USEWIRE, - i2c, - -1); + typeOverride > 0 ? typeOverride : options.size, + options.i2cAddress, + options.flip, + options.invert, + DISPLAY_USEWIRE, + i2c, + -1); } -bool I2CDisplayAddon::isSH1106(int detectedDisplay) { +bool I2CDisplayAddon::isSH1106(int detectedDisplay) +{ // Only attempt detection if we think we are using a SSD1306 or if auto-detection failed. if (detectedDisplay != OLED_SSD1306_3C && detectedDisplay != OLED_SSD1306_3D && - detectedDisplay != OLED_NOT_FOUND) { + detectedDisplay != OLED_NOT_FOUND) + { return false; } @@ -298,33 +354,38 @@ bool I2CDisplayAddon::isSH1106(int detectedDisplay) { // are writing. obdPower(&obd, false); - const uint8_t RANDOM_DATA[] = { 0xbf, 0x88, 0x13, 0x41, 0x00 }; + const uint8_t RANDOM_DATA[] = {0xbf, 0x88, 0x13, 0x41, 0x00}; uint8_t buffer[4]; uint8_t i = 0; - for (; i < sizeof(RANDOM_DATA); ++i) { + for (; i < sizeof(RANDOM_DATA); ++i) + { buffer[0] = 0x80; // one command buffer[1] = 0xE0; // read-modify-write buffer[2] = 0xC0; // one data - if (obd.i2c->write(obd.oled_addr, buffer, 3) == 0) { + if (obd.i2c->write(obd.oled_addr, buffer, 3) == 0) + { break; } // Read two bytes back, the first byte is a dummy read and the second byte is the byte was actually want. - if (obd.i2c->read(obd.oled_addr, buffer, 2) == 0) { + if (obd.i2c->read(obd.oled_addr, buffer, 2) == 0) + { break; } // Check whether the byte we read is the byte we previously wrote. - if (i > 0 && buffer[1] != RANDOM_DATA[i - 1]) { + if (i > 0 && buffer[1] != RANDOM_DATA[i - 1]) + { break; } // Write the current byte, we will attempt to read it in the next loop iteration. - buffer[0] = 0xc0; // one data + buffer[0] = 0xc0; // one data buffer[1] = RANDOM_DATA[i]; // data byte - buffer[2] = 0x80; // one command - buffer[3] = 0xEE; // end read-modify-write - if (obd.i2c->write(obd.oled_addr, buffer, 4) == 0) { + buffer[2] = 0x80; // one command + buffer[3] = 0xEE; // end read-modify-write + if (obd.i2c->write(obd.oled_addr, buffer, 4) == 0) + { break; } } @@ -333,132 +394,135 @@ bool I2CDisplayAddon::isSH1106(int detectedDisplay) { return i == sizeof(RANDOM_DATA); } -void I2CDisplayAddon::clearScreen(int render) { +void I2CDisplayAddon::clearScreen(int render) +{ obdFill(&obd, 0, render); } -void I2CDisplayAddon::drawButtonLayoutLeft(ButtonLayoutParamsLeft& options) +void I2CDisplayAddon::drawButtonLayoutLeft(ButtonLayoutParamsLeft &options) { - int32_t& startX = options.common.startX; - int32_t& startY = options.common.startY; - int32_t& buttonRadius = options.common.buttonRadius; - int32_t& buttonPadding = options.common.buttonPadding; + int32_t &startX = options.common.startX; + int32_t &startY = options.common.startY; + int32_t &buttonRadius = options.common.buttonRadius; + int32_t &buttonPadding = options.common.buttonPadding; switch (options.layout) - { - case BUTTON_LAYOUT_STICK: - drawArcadeStick(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_STICKLESS: - drawStickless(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_BUTTONS_ANGLED: - drawWasdBox(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_BUTTONS_BASIC: - drawUDLR(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_KEYBOARD_ANGLED: - drawKeyboardAngled(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_KEYBOARDA: - drawMAMEA(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_OPENCORE0WASDA: - drawOpenCore0WASDA(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_DANCEPADA: - drawDancepadA(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_TWINSTICKA: - drawTwinStickA(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_BLANKA: - drawBlankA(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_VLXA: - drawVLXA(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_FIGHTBOARD_STICK: - drawArcadeStick(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_FIGHTBOARD_MIRRORED: - drawFightboardMirrored(startX, startY, buttonRadius, buttonPadding); - break; - } + { + case BUTTON_LAYOUT_STICK: + drawArcadeStick(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_STICKLESS: + drawStickless(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_BUTTONS_ANGLED: + drawWasdBox(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_BUTTONS_BASIC: + drawUDLR(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_KEYBOARD_ANGLED: + drawKeyboardAngled(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_KEYBOARDA: + drawMAMEA(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_OPENCORE0WASDA: + drawOpenCore0WASDA(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_DANCEPADA: + drawDancepadA(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_TWINSTICKA: + drawTwinStickA(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_BLANKA: + drawBlankA(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_VLXA: + drawVLXA(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_FIGHTBOARD_STICK: + drawArcadeStick(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_FIGHTBOARD_MIRRORED: + drawFightboardMirrored(startX, startY, buttonRadius, buttonPadding); + break; + } } -void I2CDisplayAddon::drawButtonLayoutRight(ButtonLayoutParamsRight& options) +void I2CDisplayAddon::drawButtonLayoutRight(ButtonLayoutParamsRight &options) { - int32_t& startX = options.common.startX; - int32_t& startY = options.common.startY; - int32_t& buttonRadius = options.common.buttonRadius; - int32_t& buttonPadding = options.common.buttonPadding; + int32_t &startX = options.common.startX; + int32_t &startY = options.common.startY; + int32_t &buttonRadius = options.common.buttonRadius; + int32_t &buttonPadding = options.common.buttonPadding; switch (options.layout) - { - case BUTTON_LAYOUT_ARCADE: - drawArcadeButtons(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_STICKLESSB: - drawSticklessButtons(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_BUTTONS_ANGLEDB: - drawWasdButtons(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_VEWLIX: - drawVewlix(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_VEWLIX7: - drawVewlix7(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_CAPCOM: - drawCapcom(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_CAPCOM6: - drawCapcom6(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_SEGA2P: - drawSega2p(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_NOIR8: - drawNoir8(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_KEYBOARDB: - drawMAMEB(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_KEYBOARD8B: - drawMAME8B(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_OPENCORE0WASDB: - drawOpenCore0WASDB(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_DANCEPADB: - drawDancepadB(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_TWINSTICKB: - drawTwinStickB(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_BLANKB: - drawSticklessButtons(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_VLXB: - drawVLXB(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_FIGHTBOARD: - drawFightboard(startX, startY, buttonRadius, buttonPadding); - break; - case BUTTON_LAYOUT_FIGHTBOARD_STICK_MIRRORED: - drawArcadeStick(startX, startY, buttonRadius, buttonPadding); - break; - } + { + case BUTTON_LAYOUT_ARCADE: + drawArcadeButtons(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_STICKLESSB: + drawSticklessButtons(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_BUTTONS_ANGLEDB: + drawWasdButtons(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_VEWLIX: + drawVewlix(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_VEWLIX7: + drawVewlix7(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_CAPCOM: + drawCapcom(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_CAPCOM6: + drawCapcom6(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_SEGA2P: + drawSega2p(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_NOIR8: + drawNoir8(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_KEYBOARDB: + drawMAMEB(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_KEYBOARD8B: + drawMAME8B(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_OPENCORE0WASDB: + drawOpenCore0WASDB(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_DANCEPADB: + drawDancepadB(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_TWINSTICKB: + drawTwinStickB(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_BLANKB: + drawSticklessButtons(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_VLXB: + drawVLXB(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_FIGHTBOARD: + drawFightboard(startX, startY, buttonRadius, buttonPadding); + break; + case BUTTON_LAYOUT_FIGHTBOARD_STICK_MIRRORED: + drawArcadeStick(startX, startY, buttonRadius, buttonPadding); + break; + } } void I2CDisplayAddon::drawDiamond(int cx, int cy, int size, uint8_t colour, uint8_t filled) { - if (filled) { + if (filled) + { int i; - for (i = 0; i < size; i++) { + for (i = 0; i < size; i++) + { obdDrawLine(&obd, cx - i, cy - size + i, cx + i, cy - size + i, colour, 0); obdDrawLine(&obd, cx - i, cy + size - i, cx + i, cy + size - i, colour, 0); } @@ -510,27 +574,46 @@ void I2CDisplayAddon::drawArcadeStick(int startX, int startY, int buttonRadius, // Stick obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY + (buttonMargin / 2), buttonRadius * 1.25, buttonRadius * 1.25, 1, 0); - if (pressedUp()) { - if (pressedLeft()) { + if (pressedUp()) + { + if (pressedLeft()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY, buttonRadius, buttonRadius, 1, 1); } - } else if (pressedDown()) { - if (pressedLeft()) { + } + else if (pressedDown()) + { + if (pressedLeft()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin, buttonRadius, buttonRadius, 1, 1); } - } else if (pressedLeft()) { + } + else if (pressedLeft()) + { obdPreciseEllipse(&obd, startX, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + buttonMargin, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); } } @@ -542,27 +625,46 @@ void I2CDisplayAddon::drawVLXA(int startX, int startY, int buttonRadius, int but // Stick obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY + (buttonMargin / 2), buttonRadius * 1.25, buttonRadius * 1.25, 1, 0); - if (pressedUp()) { - if (pressedLeft()) { + if (pressedUp()) + { + if (pressedLeft()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY, buttonRadius, buttonRadius, 1, 1); } - } else if (pressedDown()) { - if (pressedLeft()) { + } + else if (pressedDown()) + { + if (pressedLeft()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin, buttonRadius, buttonRadius, 1, 1); } - } else if (pressedLeft()) { + } + else if (pressedLeft()) + { obdPreciseEllipse(&obd, startX, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + buttonMargin, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); } } @@ -570,24 +672,24 @@ void I2CDisplayAddon::drawVLXA(int startX, int startY, int buttonRadius, int but void I2CDisplayAddon::drawFightboardMirrored(int startX, int startY, int buttonRadius, int buttonPadding) { const int buttonMargin = buttonPadding + (buttonRadius * 2); - const int leftMargin = startX + buttonPadding + buttonRadius; + const int leftMargin = startX + buttonPadding + buttonRadius; obdPreciseEllipse(&obd, leftMargin, startY - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedL1()); obdPreciseEllipse(&obd, leftMargin + buttonMargin, startY - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedR1()); - obdPreciseEllipse(&obd, leftMargin + (buttonMargin*2), startY - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedB4()); - obdPreciseEllipse(&obd, leftMargin + (buttonMargin*3), startY * 1.25, buttonRadius, buttonRadius, 1, pGamepad->pressedB3()); + obdPreciseEllipse(&obd, leftMargin + (buttonMargin * 2), startY - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedB4()); + obdPreciseEllipse(&obd, leftMargin + (buttonMargin * 3), startY * 1.25, buttonRadius, buttonRadius, 1, pGamepad->pressedB3()); obdPreciseEllipse(&obd, leftMargin, startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedL2()); obdPreciseEllipse(&obd, leftMargin + buttonMargin, startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedR2()); - obdPreciseEllipse(&obd, leftMargin + (buttonMargin*2), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedB2()); - obdPreciseEllipse(&obd, leftMargin + (buttonMargin*3), startY + buttonMargin * 1.25, buttonRadius, buttonRadius, 1, pGamepad->pressedB1()); - - // Extra buttons - obdPreciseEllipse(&obd, startX + buttonMargin * 0.5, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedL3()); - obdPreciseEllipse(&obd, startX + buttonMargin * 1.0625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS1()); - obdPreciseEllipse(&obd, startX + buttonMargin * 1.625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedA1()); - obdPreciseEllipse(&obd, startX + buttonMargin * 2.125+0.0625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS2()); - obdPreciseEllipse(&obd, startX + buttonMargin * 2.75, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedR3()); + obdPreciseEllipse(&obd, leftMargin + (buttonMargin * 2), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedB2()); + obdPreciseEllipse(&obd, leftMargin + (buttonMargin * 3), startY + buttonMargin * 1.25, buttonRadius, buttonRadius, 1, pGamepad->pressedB1()); + + // Extra buttons + obdPreciseEllipse(&obd, startX + buttonMargin * 0.5, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedL3()); + obdPreciseEllipse(&obd, startX + buttonMargin * 1.0625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS1()); + obdPreciseEllipse(&obd, startX + buttonMargin * 1.625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedA1()); + obdPreciseEllipse(&obd, startX + buttonMargin * 2.125 + 0.0625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS2()); + obdPreciseEllipse(&obd, startX + buttonMargin * 2.75, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedR3()); } void I2CDisplayAddon::drawTwinStickA(int startX, int startY, int buttonRadius, int buttonPadding) @@ -597,27 +699,46 @@ void I2CDisplayAddon::drawTwinStickA(int startX, int startY, int buttonRadius, i // Stick obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY + (buttonMargin / 2), buttonRadius * 1.25, buttonRadius * 1.25, 1, 0); - if (pressedUp()) { - if (pressedLeft()) { + if (pressedUp()) + { + if (pressedLeft()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY, buttonRadius, buttonRadius, 1, 1); } - } else if (pressedDown()) { - if (pressedLeft()) { + } + else if (pressedDown()) + { + if (pressedLeft()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin, buttonRadius, buttonRadius, 1, 1); } - } else if (pressedLeft()) { + } + else if (pressedLeft()) + { obdPreciseEllipse(&obd, startX, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else if (pressedRight()) { + } + else if (pressedRight()) + { obdPreciseEllipse(&obd, startX + buttonMargin, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); } } @@ -629,27 +750,46 @@ void I2CDisplayAddon::drawTwinStickB(int startX, int startY, int buttonRadius, i // Stick obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY + (buttonMargin / 2), buttonRadius * 1.25, buttonRadius * 1.25, 1, 0); - if (pGamepad->pressedB4()) { - if (pGamepad->pressedB3()) { + if (pGamepad->pressedB4()) + { + if (pGamepad->pressedB3()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else if (pGamepad->pressedB2()) { + } + else if (pGamepad->pressedB2()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin / 5), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + (buttonMargin / 2), startY, buttonRadius, buttonRadius, 1, 1); } - } else if (pGamepad->pressedB1()) { - if (pGamepad->pressedB3()) { + } + else if (pGamepad->pressedB1()) + { + if (pGamepad->pressedB3()) + { obdPreciseEllipse(&obd, startX + (buttonMargin / 5), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else if (pGamepad->pressedB2()) { + } + else if (pGamepad->pressedB2()) + { obdPreciseEllipse(&obd, startX + (buttonMargin * 0.875), startY + (buttonMargin * 0.875), buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin, buttonRadius, buttonRadius, 1, 1); } - } else if (pGamepad->pressedB3()) { + } + else if (pGamepad->pressedB3()) + { obdPreciseEllipse(&obd, startX, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else if (pGamepad->pressedB2()) { + } + else if (pGamepad->pressedB2()) + { obdPreciseEllipse(&obd, startX + buttonMargin, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); - } else { + } + else + { obdPreciseEllipse(&obd, startX + buttonMargin / 2, startY + buttonMargin / 2, buttonRadius, buttonRadius, 1, 1); } } @@ -663,7 +803,6 @@ void I2CDisplayAddon::drawMAMEA(int startX, int startY, int buttonSize, int butt obdRectangle(&obd, startX + buttonMargin, startY + buttonMargin, startX + buttonSize + buttonMargin, startY + buttonSize + buttonMargin, 1, pressedDown()); obdRectangle(&obd, startX + buttonMargin, startY, startX + buttonSize + buttonMargin, startY + buttonSize, 1, pressedUp()); obdRectangle(&obd, startX + buttonMargin * 2, startY + buttonMargin, startX + buttonSize + buttonMargin * 2, startY + buttonSize + buttonMargin, 1, pressedRight()); - } void I2CDisplayAddon::drawOpenCore0WASDA(int startX, int startY, int buttonSize, int buttonPadding) @@ -677,13 +816,12 @@ void I2CDisplayAddon::drawOpenCore0WASDA(int startX, int startY, int buttonSize, obdRectangle(&obd, startX + buttonMargin * 2, startY + buttonMargin, startX + buttonSize + buttonMargin * 2, startY + buttonSize + buttonMargin, 1, pressedRight()); // Aux buttons - obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 0.5, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS2()); - obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 1.25, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS1()); - obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 2, startY -25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedA1()); - obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 2.75, startY -25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedA2()); - obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 3.5, startY -25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedL3()); - obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 4.25, startY -25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedR3()); - + obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 0.5, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS2()); + obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 1.25, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS1()); + obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 2, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedA1()); + obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 2.75, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedA2()); + obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 3.5, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedL3()); + obdPreciseEllipse(&obd, startX - 15 + buttonMargin * 4.25, startY - 25 + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedR3()); } void I2CDisplayAddon::drawMAMEB(int startX, int startY, int buttonSize, int buttonPadding) @@ -698,7 +836,6 @@ void I2CDisplayAddon::drawMAMEB(int startX, int startY, int buttonSize, int butt obdRectangle(&obd, startX, startY + buttonMargin, startX + buttonSize, startY + buttonMargin + buttonSize, 1, pGamepad->pressedB1()); obdRectangle(&obd, startX + buttonMargin, startY + buttonMargin, startX + buttonSize + buttonMargin, startY + buttonMargin + buttonSize, 1, pGamepad->pressedB2()); obdRectangle(&obd, startX + buttonMargin * 2, startY + buttonMargin, startX + buttonSize + buttonMargin * 2, startY + buttonMargin + buttonSize, 1, pGamepad->pressedR2()); - } void I2CDisplayAddon::drawMAME8B(int startX, int startY, int buttonSize, int buttonPadding) @@ -708,14 +845,13 @@ void I2CDisplayAddon::drawMAME8B(int startX, int startY, int buttonSize, int but // 8-button MAME Style obdRectangle(&obd, startX, startY, startX + buttonSize, startY + buttonSize, 1, pGamepad->pressedB3()); obdRectangle(&obd, startX + buttonMargin, startY - (buttonMargin / 3), startX + buttonSize + buttonMargin, startY - (buttonMargin / 3) + buttonSize, 1, pGamepad->pressedB4()); - obdRectangle(&obd, startX + buttonMargin * 2, startY - (buttonMargin / 3), startX + buttonSize + buttonMargin * 2, startY - (buttonMargin / 3)+ buttonSize, 1, pGamepad->pressedR1()); + obdRectangle(&obd, startX + buttonMargin * 2, startY - (buttonMargin / 3), startX + buttonSize + buttonMargin * 2, startY - (buttonMargin / 3) + buttonSize, 1, pGamepad->pressedR1()); obdRectangle(&obd, startX + buttonMargin * 3, startY, startX + buttonSize + buttonMargin * 3, startY + buttonSize, 1, pGamepad->pressedL1()); obdRectangle(&obd, startX, startY + buttonMargin, startX + buttonSize, startY + buttonMargin + buttonSize, 1, pGamepad->pressedB1()); obdRectangle(&obd, startX + buttonMargin, startY - (buttonMargin / 3) + buttonMargin, startX + buttonSize + buttonMargin, startY - (buttonMargin / 3) + buttonMargin + buttonSize, 1, pGamepad->pressedB2()); obdRectangle(&obd, startX + buttonMargin * 2, startY - (buttonMargin / 3) + buttonMargin, startX + buttonSize + buttonMargin * 2, startY - (buttonMargin / 3) + buttonMargin + buttonSize, 1, pGamepad->pressedR2()); obdRectangle(&obd, startX + buttonMargin * 3, startY + buttonMargin, startX + buttonSize + buttonMargin * 3, startY + buttonMargin + buttonSize, 1, pGamepad->pressedL2()); - } void I2CDisplayAddon::drawOpenCore0WASDB(int startX, int startY, int buttonSize, int buttonPadding) @@ -725,14 +861,13 @@ void I2CDisplayAddon::drawOpenCore0WASDB(int startX, int startY, int buttonSize, // 8-button Open_Core0 WASD obdRectangle(&obd, startX, startY, startX + buttonSize, startY + buttonSize, 1, pGamepad->pressedB3()); obdRectangle(&obd, startX + buttonMargin, startY - (buttonMargin / 3), startX + buttonSize + buttonMargin, startY - (buttonMargin / 3) + buttonSize, 1, pGamepad->pressedB4()); - obdRectangle(&obd, startX + buttonMargin * 2, startY - (buttonMargin / 3), startX + buttonSize + buttonMargin * 2, startY - (buttonMargin / 3)+ buttonSize, 1, pGamepad->pressedR1()); + obdRectangle(&obd, startX + buttonMargin * 2, startY - (buttonMargin / 3), startX + buttonSize + buttonMargin * 2, startY - (buttonMargin / 3) + buttonSize, 1, pGamepad->pressedR1()); obdRectangle(&obd, startX + buttonMargin * 3, startY, startX + buttonSize + buttonMargin * 3, startY + buttonSize, 1, pGamepad->pressedL1()); obdRectangle(&obd, startX, startY + buttonMargin, startX + buttonSize, startY + buttonMargin + buttonSize, 1, pGamepad->pressedB1()); obdRectangle(&obd, startX + buttonMargin, startY - (buttonMargin / 3) + buttonMargin, startX + buttonSize + buttonMargin, startY - (buttonMargin / 3) + buttonMargin + buttonSize, 1, pGamepad->pressedB2()); obdRectangle(&obd, startX + buttonMargin * 2, startY - (buttonMargin / 3) + buttonMargin, startX + buttonSize + buttonMargin * 2, startY - (buttonMargin / 3) + buttonMargin + buttonSize, 1, pGamepad->pressedR2()); obdRectangle(&obd, startX + buttonMargin * 3, startY + buttonMargin, startX + buttonSize + buttonMargin * 3, startY + buttonMargin + buttonSize, 1, pGamepad->pressedL2()); - } void I2CDisplayAddon::drawKeyboardAngled(int startX, int startY, int buttonRadius, int buttonPadding) @@ -777,7 +912,7 @@ void I2CDisplayAddon::drawVLXB(int startX, int startY, int buttonRadius, int but obdPreciseEllipse(&obd, startX + (buttonMargin * 4.75) - (buttonMargin / 3), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedR2()); obdPreciseEllipse(&obd, startX + (buttonMargin * 5.75) - (buttonMargin / 3), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedL2()); - obdPreciseEllipse(&obd, startX + (buttonMargin * 7.4) - (buttonMargin / 3.5), startY + buttonMargin - (buttonMargin / 1.5), buttonRadius *.8, buttonRadius * .8, 1, pGamepad->pressedS2()); + obdPreciseEllipse(&obd, startX + (buttonMargin * 7.4) - (buttonMargin / 3.5), startY + buttonMargin - (buttonMargin / 1.5), buttonRadius * .8, buttonRadius * .8, 1, pGamepad->pressedS2()); } void I2CDisplayAddon::drawFightboard(int startX, int startY, int buttonRadius, int buttonPadding) @@ -794,11 +929,11 @@ void I2CDisplayAddon::drawFightboard(int startX, int startY, int buttonRadius, i obdPreciseEllipse(&obd, (startX + buttonMargin * 5.625), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedR2()); obdPreciseEllipse(&obd, (startX + buttonMargin * 6.625), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedL2()); - // Extra buttons + // Extra buttons obdPreciseEllipse(&obd, startX + buttonMargin * 4.5, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedL3()); obdPreciseEllipse(&obd, startX + buttonMargin * 5.0625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS1()); obdPreciseEllipse(&obd, startX + buttonMargin * 5.625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedA1()); - obdPreciseEllipse(&obd, startX + buttonMargin * 6.125+0.0625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS2()); + obdPreciseEllipse(&obd, startX + buttonMargin * 6.125 + 0.0625, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedS2()); obdPreciseEllipse(&obd, startX + buttonMargin * 6.75, startY + (buttonMargin * 1.5), 3, 3, 1, pGamepad->pressedR3()); } @@ -815,7 +950,7 @@ void I2CDisplayAddon::drawVewlix7(int startX, int startY, int buttonRadius, int obdPreciseEllipse(&obd, startX + (buttonMargin * 2.75) - (buttonMargin / 3), startY + buttonMargin + (buttonMargin * 0.2), buttonRadius, buttonRadius, 1, pGamepad->pressedB1()); obdPreciseEllipse(&obd, startX + (buttonMargin * 3.75) - (buttonMargin / 3), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedB2()); obdPreciseEllipse(&obd, startX + (buttonMargin * 4.75) - (buttonMargin / 3), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, pGamepad->pressedR2()); - //obdPreciseEllipse(&obd, startX + (buttonMargin * 5.75) - (buttonMargin / 3), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, gamepad->pressedL2()); + // obdPreciseEllipse(&obd, startX + (buttonMargin * 5.75) - (buttonMargin / 3), startY + buttonMargin - (buttonMargin / 4), buttonRadius, buttonRadius, 1, gamepad->pressedL2()); } void I2CDisplayAddon::drawSega2p(int startX, int startY, int buttonRadius, int buttonPadding) @@ -945,9 +1080,9 @@ void I2CDisplayAddon::drawDancepadB(int startX, int startY, int buttonSize, int { const int buttonMargin = buttonPadding + buttonSize; - obdRectangle(&obd, startX, startY, startX + buttonSize, startY + buttonSize, 1, pGamepad->pressedB2()); // Up/Left - obdRectangle(&obd, startX, startY + buttonMargin * 2, startX + buttonSize, startY + buttonSize + buttonMargin * 2, 1, pGamepad->pressedB4()); // Down/Left - obdRectangle(&obd, startX + buttonMargin * 2, startY, startX + buttonSize + buttonMargin * 2, startY + buttonSize, 1, pGamepad->pressedB1()); // Up/Right + obdRectangle(&obd, startX, startY, startX + buttonSize, startY + buttonSize, 1, pGamepad->pressedB2()); // Up/Left + obdRectangle(&obd, startX, startY + buttonMargin * 2, startX + buttonSize, startY + buttonSize + buttonMargin * 2, 1, pGamepad->pressedB4()); // Down/Left + obdRectangle(&obd, startX + buttonMargin * 2, startY, startX + buttonSize + buttonMargin * 2, startY + buttonSize, 1, pGamepad->pressedB1()); // Up/Right obdRectangle(&obd, startX + buttonMargin * 2, startY + buttonMargin * 2, startX + buttonSize + buttonMargin * 2, startY + buttonSize + buttonMargin * 2, 1, pGamepad->pressedB3()); // Down/Right } @@ -959,95 +1094,145 @@ void I2CDisplayAddon::drawBlankB(int startX, int startY, int buttonSize, int but { } -void I2CDisplayAddon::drawSplashScreen(int splashMode, uint8_t * splashChoice, int splashSpeed) +void I2CDisplayAddon::drawSplashScreen(int splashMode, uint8_t *splashChoice, int splashSpeed) { - int mils = getMillis(); - switch (splashMode) + int mils = getMillis(); + switch (splashMode) { - case SPLASH_MODE_STATIC: // Default, display static or custom image - obdDrawSprite(&obd, splashChoice, 128, 64, 16, 0, 0, 1); - break; - case SPLASH_MODE_CLOSEIN: // Close-in. Animate the GP2040 logo - obdDrawSprite(&obd, (uint8_t *)bootLogoTop, 43, 39, 6, 43, std::min((mils / splashSpeed) - 39, 0), 1); - obdDrawSprite(&obd, (uint8_t *)bootLogoBottom, 80, 21, 10, 24, std::max(64 - (mils / (splashSpeed * 2)), 44), 1); - break; - case SPLASH_MODE_CLOSEINCUSTOM: // Close-in on custom image or delayed close-in if custom image does not exist - obdDrawSprite(&obd, splashChoice, 128, 64, 16, 0, 0, 1); - if (mils > 2500) { - int milss = mils - 2500; - obdRectangle(&obd, 0, 0, 127, 1 + (milss / splashSpeed), 0, 1); - obdRectangle(&obd, 0, 63, 127, 62 - (milss / (splashSpeed * 2)), 0, 1); - obdDrawSprite(&obd, (uint8_t *)bootLogoTop, 43, 39, 6, 43, std::min((milss / splashSpeed) - 39, 0), 1); - obdDrawSprite(&obd, (uint8_t *)bootLogoBottom, 80, 21, 10, 24, std::max(64 - (milss / (splashSpeed * 2)), 44), 1); - } - break; + case SPLASH_MODE_STATIC: // Default, display static or custom image + obdDrawSprite(&obd, splashChoice, 128, 64, 16, 0, 0, 1); + break; + case SPLASH_MODE_CLOSEIN: // Close-in. Animate the GP2040 logo + obdDrawSprite(&obd, (uint8_t *)bootLogoTop, 43, 39, 6, 43, std::min((mils / splashSpeed) - 39, 0), 1); + obdDrawSprite(&obd, (uint8_t *)bootLogoBottom, 80, 21, 10, 24, std::max(64 - (mils / (splashSpeed * 2)), 44), 1); + break; + case SPLASH_MODE_CLOSEINCUSTOM: // Close-in on custom image or delayed close-in if custom image does not exist + obdDrawSprite(&obd, splashChoice, 128, 64, 16, 0, 0, 1); + if (mils > 2500) + { + int milss = mils - 2500; + obdRectangle(&obd, 0, 0, 127, 1 + (milss / splashSpeed), 0, 1); + obdRectangle(&obd, 0, 63, 127, 62 - (milss / (splashSpeed * 2)), 0, 1); + obdDrawSprite(&obd, (uint8_t *)bootLogoTop, 43, 39, 6, 43, std::min((milss / splashSpeed) - 39, 0), 1); + obdDrawSprite(&obd, (uint8_t *)bootLogoBottom, 80, 21, 10, 24, std::max(64 - (milss / (splashSpeed * 2)), 44), 1); + } + break; } } -void I2CDisplayAddon::drawText(int x, int y, std::string text) { - obdWriteString(&obd, 0, x, y, (char*)text.c_str(), FONT_6x8, 0, 0); +void I2CDisplayAddon::drawText(int x, int y, std::string text) +{ + obdWriteString(&obd, 0, x, y, (char *)text.c_str(), FONT_6x8, 0, 0); } -void I2CDisplayAddon::drawStatusBar(Gamepad * gamepad) +void I2CDisplayAddon::drawStatusBar(Gamepad *gamepad) { - const TurboOptions& turboOptions = Storage::getInstance().getAddonOptions().turboOptions; + const TurboOptions &turboOptions = Storage::getInstance().getAddonOptions().turboOptions; // Limit to 21 chars with 6x8 font for now statusBar.clear(); switch (gamepad->getOptions().inputMode) { - case INPUT_MODE_HID: statusBar += "DINPUT"; break; - case INPUT_MODE_SWITCH: statusBar += "SWITCH"; break; - case INPUT_MODE_XINPUT: statusBar += "XINPUT"; break; - case INPUT_MODE_MDMINI: statusBar += "GEN/MD"; break; - case INPUT_MODE_NEOGEO: statusBar += "NGMINI"; break; - case INPUT_MODE_PCEMINI: statusBar += "PCE/TG"; break; - case INPUT_MODE_EGRET: statusBar += "EGRET"; break; - case INPUT_MODE_ASTRO: statusBar += "ASTRO"; break; - case INPUT_MODE_PSCLASSIC: statusBar += "PSC"; break; - case INPUT_MODE_XBOXORIGINAL: statusBar += "OGXBOX"; break; - case INPUT_MODE_PS4: - if ( PS4Data::getInstance().ps4ControllerType == PS4ControllerType::PS4_CONTROLLER ) { - if (PS4Data::getInstance().authsent == true ) - statusBar += "PS4:AS"; - else - statusBar += "PS4 "; - } else if ( PS4Data::getInstance().ps4ControllerType == PS4ControllerType::PS4_ARCADESTICK ) { - if (PS4Data::getInstance().authsent == true ) - statusBar += "PS5:AS"; - else - statusBar += "PS5 "; - } - break; - case INPUT_MODE_XBONE: statusBar += "XBONE"; break; - case INPUT_MODE_KEYBOARD: statusBar += "HID-KB"; break; - case INPUT_MODE_CONFIG: statusBar += "CONFIG"; break; + case INPUT_MODE_HID: + statusBar += "DINPUT"; + break; + case INPUT_MODE_SWITCH: + statusBar += "SWITCH"; + break; + case INPUT_MODE_XINPUT: + statusBar += "XINPUT"; + break; + case INPUT_MODE_MDMINI: + statusBar += "GEN/MD"; + break; + case INPUT_MODE_NEOGEO: + statusBar += "NGMINI"; + break; + case INPUT_MODE_PCEMINI: + statusBar += "PCE/TG"; + break; + case INPUT_MODE_EGRET: + statusBar += "EGRET"; + break; + case INPUT_MODE_ASTRO: + statusBar += "ASTRO"; + break; + case INPUT_MODE_PSCLASSIC: + statusBar += "PSC"; + break; + case INPUT_MODE_XBOXORIGINAL: + statusBar += "OGXBOX"; + break; + case INPUT_MODE_PS4: + if (PS4Data::getInstance().ps4ControllerType == PS4ControllerType::PS4_CONTROLLER) + { + if (PS4Data::getInstance().authsent == true) + statusBar += "PS4:AS"; + else + statusBar += "PS4 "; + } + else if (PS4Data::getInstance().ps4ControllerType == PS4ControllerType::PS4_ARCADESTICK) + { + if (PS4Data::getInstance().authsent == true) + statusBar += "PS5:AS"; + else + statusBar += "PS5 "; + } + break; + case INPUT_MODE_XBONE: + statusBar += "XBONE"; + break; + case INPUT_MODE_KEYBOARD: + statusBar += "HID-KB"; + break; + case INPUT_MODE_CONFIG: + statusBar += "CONFIG"; + break; } - if ( turboOptions.enabled && isValidPin(turboOptions.buttonPin) ) { + if (turboOptions.enabled && isValidPin(turboOptions.buttonPin)) + { statusBar += " T"; - if ( turboOptions.shotCount < 10 ) // padding + if (turboOptions.shotCount < 10) // padding statusBar += "0"; statusBar += std::to_string(turboOptions.shotCount); - } else { + } + else + { statusBar += " "; // no turbo, don't show Txx setting } switch (gamepad->getOptions().dpadMode) { - case DPAD_MODE_DIGITAL: statusBar += " D"; break; - case DPAD_MODE_LEFT_ANALOG: statusBar += " L"; break; - case DPAD_MODE_RIGHT_ANALOG: statusBar += " R"; break; + case DPAD_MODE_DIGITAL: + statusBar += " D"; + break; + case DPAD_MODE_LEFT_ANALOG: + statusBar += " L"; + break; + case DPAD_MODE_RIGHT_ANALOG: + statusBar += " R"; + break; } switch (Gamepad::resolveSOCDMode(gamepad->getOptions())) { - case SOCD_MODE_NEUTRAL: statusBar += " SOCD-N"; break; - case SOCD_MODE_UP_PRIORITY: statusBar += " SOCD-U"; break; - case SOCD_MODE_SECOND_INPUT_PRIORITY: statusBar += " SOCD-L"; break; - case SOCD_MODE_FIRST_INPUT_PRIORITY: statusBar += " SOCD-F"; break; - case SOCD_MODE_BYPASS: statusBar += " SOCD-X"; break; + case SOCD_MODE_NEUTRAL: + statusBar += " SOCD-N"; + break; + case SOCD_MODE_UP_PRIORITY: + statusBar += " SOCD-U"; + break; + case SOCD_MODE_SECOND_INPUT_PRIORITY: + statusBar += " SOCD-L"; + break; + case SOCD_MODE_FIRST_INPUT_PRIORITY: + statusBar += " SOCD-F"; + break; + case SOCD_MODE_BYPASS: + statusBar += " SOCD-X"; + break; } if (Storage::getInstance().getAddonOptions().macroOptions.enabled) statusBar += " M"; @@ -1058,9 +1243,12 @@ bool I2CDisplayAddon::pressedUp() { switch (gamepad->getOptions().dpadMode) { - case DPAD_MODE_DIGITAL: return pGamepad->pressedUp(); - case DPAD_MODE_LEFT_ANALOG: return pGamepad->state.ly == GAMEPAD_JOYSTICK_MIN; - case DPAD_MODE_RIGHT_ANALOG: return pGamepad->state.ry == GAMEPAD_JOYSTICK_MIN; + case DPAD_MODE_DIGITAL: + return pGamepad->pressedUp(); + case DPAD_MODE_LEFT_ANALOG: + return pGamepad->state.ly == GAMEPAD_JOYSTICK_MIN; + case DPAD_MODE_RIGHT_ANALOG: + return pGamepad->state.ry == GAMEPAD_JOYSTICK_MIN; } return false; @@ -1070,9 +1258,12 @@ bool I2CDisplayAddon::pressedDown() { switch (gamepad->getOptions().dpadMode) { - case DPAD_MODE_DIGITAL: return pGamepad->pressedDown(); - case DPAD_MODE_LEFT_ANALOG: return pGamepad->state.ly == GAMEPAD_JOYSTICK_MAX; - case DPAD_MODE_RIGHT_ANALOG: return pGamepad->state.ry == GAMEPAD_JOYSTICK_MAX; + case DPAD_MODE_DIGITAL: + return pGamepad->pressedDown(); + case DPAD_MODE_LEFT_ANALOG: + return pGamepad->state.ly == GAMEPAD_JOYSTICK_MAX; + case DPAD_MODE_RIGHT_ANALOG: + return pGamepad->state.ry == GAMEPAD_JOYSTICK_MAX; } return false; @@ -1082,9 +1273,12 @@ bool I2CDisplayAddon::pressedLeft() { switch (gamepad->getOptions().dpadMode) { - case DPAD_MODE_DIGITAL: return pGamepad->pressedLeft(); - case DPAD_MODE_LEFT_ANALOG: return pGamepad->state.lx == GAMEPAD_JOYSTICK_MIN; - case DPAD_MODE_RIGHT_ANALOG: return pGamepad->state.rx == GAMEPAD_JOYSTICK_MIN; + case DPAD_MODE_DIGITAL: + return pGamepad->pressedLeft(); + case DPAD_MODE_LEFT_ANALOG: + return pGamepad->state.lx == GAMEPAD_JOYSTICK_MIN; + case DPAD_MODE_RIGHT_ANALOG: + return pGamepad->state.rx == GAMEPAD_JOYSTICK_MIN; } return false; @@ -1094,14 +1288,18 @@ bool I2CDisplayAddon::pressedRight() { switch (gamepad->getOptions().dpadMode) { - case DPAD_MODE_DIGITAL: return pGamepad->pressedRight(); - case DPAD_MODE_LEFT_ANALOG: return pGamepad->state.lx == GAMEPAD_JOYSTICK_MAX; - case DPAD_MODE_RIGHT_ANALOG: return pGamepad->state.rx == GAMEPAD_JOYSTICK_MAX; + case DPAD_MODE_DIGITAL: + return pGamepad->pressedRight(); + case DPAD_MODE_LEFT_ANALOG: + return pGamepad->state.lx == GAMEPAD_JOYSTICK_MAX; + case DPAD_MODE_RIGHT_ANALOG: + return pGamepad->state.rx == GAMEPAD_JOYSTICK_MAX; } return false; } -void I2CDisplayAddon::attachInputHistoryAddon(InputHistoryAddon* pInputHistoryAddon) { +void I2CDisplayAddon::attachInputHistoryAddon(InputHistoryAddon *pInputHistoryAddon) +{ inputHistoryAddon = pInputHistoryAddon; } diff --git a/src/addons/neopicoleds.cpp b/src/addons/neopicoleds.cpp index aeb7ae09..6a14c2ea 100644 --- a/src/addons/neopicoleds.cpp +++ b/src/addons/neopicoleds.cpp @@ -45,75 +45,77 @@ uint32_t rgbPLEDValues[4]; PLEDAnimationState getXInputAnimationNEOPICO(uint8_t *data) { PLEDAnimationState animationState = - { - .state = 0, - .animation = PLED_ANIM_NONE, - .speed = PLED_SPEED_OFF, - }; + { + .state = 0, + .animation = PLED_ANIM_NONE, + .speed = PLED_SPEED_OFF, + }; // Check first byte for LED payload if (data[0] == 0x01) { switch (data[2]) { - case XINPUT_PLED_BLINKALL: - case XINPUT_PLED_ROTATE: - case XINPUT_PLED_BLINK: - case XINPUT_PLED_SLOWBLINK: - case XINPUT_PLED_ALTERNATE: - animationState.state = (PLED_STATE_LED1 | PLED_STATE_LED2 | PLED_STATE_LED3 | PLED_STATE_LED4); - animationState.animation = PLED_ANIM_BLINK; - animationState.speed = PLED_SPEED_FAST; - break; - - case XINPUT_PLED_FLASH1: - case XINPUT_PLED_ON1: - animationState.state = PLED_STATE_LED1; - animationState.animation = PLED_ANIM_SOLID; - animationState.speed = PLED_SPEED_OFF; - break; - - case XINPUT_PLED_FLASH2: - case XINPUT_PLED_ON2: - animationState.state = PLED_STATE_LED2; - animationState.animation = PLED_ANIM_SOLID; - animationState.speed = PLED_SPEED_OFF; - break; - - case XINPUT_PLED_FLASH3: - case XINPUT_PLED_ON3: - animationState.state = PLED_STATE_LED3; - animationState.animation = PLED_ANIM_SOLID; - animationState.speed = PLED_SPEED_OFF; - break; - - case XINPUT_PLED_FLASH4: - case XINPUT_PLED_ON4: - animationState.state = PLED_STATE_LED4; - animationState.animation = PLED_ANIM_SOLID; - animationState.speed = PLED_SPEED_OFF; - break; - - default: - break; + case XINPUT_PLED_BLINKALL: + case XINPUT_PLED_ROTATE: + case XINPUT_PLED_BLINK: + case XINPUT_PLED_SLOWBLINK: + case XINPUT_PLED_ALTERNATE: + animationState.state = (PLED_STATE_LED1 | PLED_STATE_LED2 | PLED_STATE_LED3 | PLED_STATE_LED4); + animationState.animation = PLED_ANIM_BLINK; + animationState.speed = PLED_SPEED_FAST; + break; + + case XINPUT_PLED_FLASH1: + case XINPUT_PLED_ON1: + animationState.state = PLED_STATE_LED1; + animationState.animation = PLED_ANIM_SOLID; + animationState.speed = PLED_SPEED_OFF; + break; + + case XINPUT_PLED_FLASH2: + case XINPUT_PLED_ON2: + animationState.state = PLED_STATE_LED2; + animationState.animation = PLED_ANIM_SOLID; + animationState.speed = PLED_SPEED_OFF; + break; + + case XINPUT_PLED_FLASH3: + case XINPUT_PLED_ON3: + animationState.state = PLED_STATE_LED3; + animationState.animation = PLED_ANIM_SOLID; + animationState.speed = PLED_SPEED_OFF; + break; + + case XINPUT_PLED_FLASH4: + case XINPUT_PLED_ON4: + animationState.state = PLED_STATE_LED4; + animationState.animation = PLED_ANIM_SOLID; + animationState.speed = PLED_SPEED_OFF; + break; + + default: + break; } } return animationState; } -bool NeoPicoLEDAddon::available() { - const LEDOptions& ledOptions = Storage::getInstance().getLedOptions(); +bool NeoPicoLEDAddon::available() +{ + const LEDOptions &ledOptions = Storage::getInstance().getLedOptions(); return isValidPin(ledOptions.dataPin); } void NeoPicoLEDAddon::setup() { // Set Default LED Options - const LEDOptions& ledOptions = Storage::getInstance().getLedOptions(); + const LEDOptions &ledOptions = Storage::getInstance().getLedOptions(); turnOffWhenSuspended = ledOptions.turnOffWhenSuspended; - if ( ledOptions.pledType == PLED_TYPE_RGB ) { + if (ledOptions.pledType == PLED_TYPE_RGB) + { neoPLEDs = new NeoPicoPlayerLEDs(); } @@ -124,27 +126,34 @@ void NeoPicoLEDAddon::setup() configureLEDs(); nextRunTime = make_timeout_time_ms(0); // Reset timeout + + const FocusModeOptions &focusModeOptions = Storage::getInstance().getAddonOptions().focusModeOptions; + isFocusModeEnabled = focusModeOptions.enabled && focusModeOptions.rgbLockEnabled && + isValidPin(focusModeOptions.pin); } void NeoPicoLEDAddon::process() { - const LEDOptions& ledOptions = Storage::getInstance().getLedOptions(); + const LEDOptions &ledOptions = Storage::getInstance().getLedOptions(); if (!isValidPin(ledOptions.dataPin) || !time_reached(this->nextRunTime)) return; - Gamepad * gamepad = Storage::getInstance().GetProcessedGamepad(); - uint8_t * featureData = Storage::getInstance().GetFeatureData(); + Gamepad *gamepad = Storage::getInstance().GetProcessedGamepad(); + uint8_t *featureData = Storage::getInstance().GetFeatureData(); AnimationHotkey action = animationHotkeys(gamepad); - if (ledOptions.pledType == PLED_TYPE_RGB) { + if (ledOptions.pledType == PLED_TYPE_RGB) + { inputMode = gamepad->getOptions().inputMode; // HACK - if (inputMode == INPUT_MODE_XINPUT) { + if (inputMode == INPUT_MODE_XINPUT) + { animationState = getXInputAnimationNEOPICO(featureData); if (neoPLEDs != nullptr && animationState.animation != PLED_ANIM_NONE) neoPLEDs->animate(animationState); } } - if ( action != HOTKEY_LEDS_NONE ) { + if (action != HOTKEY_LEDS_NONE) + { as.HandleEvent(action); } @@ -165,20 +174,47 @@ void NeoPicoLEDAddon::process() as.Animate(); - if (turnOffWhenSuspended && get_usb_suspended()) { - as.DimBrightnessTo0(); - } else { - as.SetBrightness(AnimationStation::GetBrightness()); + if (isFocusModeEnabled) + { + const FocusModeOptions &focusModeOptions = Storage::getInstance().getAddonOptions().focusModeOptions; + bool isFocusModeActive = !gpio_get(focusModeOptions.pin); + if (focusModePrevState != isFocusModeActive) + { + focusModePrevState = isFocusModeActive; + if (isFocusModeActive) + { + as.DimBrightnessTo0(); + } + else + { + as.SetBrightness(AnimationStation::GetBrightness()); + } + } + } + else + { + + if (turnOffWhenSuspended && get_usb_suspended()) + { + as.DimBrightnessTo0(); + } + else + { + as.SetBrightness(AnimationStation::GetBrightness()); + } } as.ApplyBrightness(frame); // Apply the player LEDs to our first 4 leds if we're in NEOPIXEL mode - if (ledOptions.pledType == PLED_TYPE_RGB) { - if (inputMode == INPUT_MODE_XINPUT) { // HACK - LEDOptions & ledOptions = Storage::getInstance().getLedOptions(); - int32_t pledPins[] = { ledOptions.pledPin1, ledOptions.pledPin2, ledOptions.pledPin3, ledOptions.pledPin4 }; - for (int i = 0; i < PLED_COUNT; i++) { + if (ledOptions.pledType == PLED_TYPE_RGB) + { + if (inputMode == INPUT_MODE_XINPUT) + { // HACK + LEDOptions &ledOptions = Storage::getInstance().getLedOptions(); + int32_t pledPins[] = {ledOptions.pledPin1, ledOptions.pledPin2, ledOptions.pledPin3, ledOptions.pledPin4}; + for (int i = 0; i < PLED_COUNT; i++) + { if (pledPins[i] < 0) continue; @@ -197,7 +233,7 @@ void NeoPicoLEDAddon::process() this->nextRunTime = make_timeout_time_ms(NeoPicoLEDAddon::intervalMS); } -std::vector * NeoPicoLEDAddon::getLEDPositions(string button, std::vector> *positions) +std::vector *NeoPicoLEDAddon::getLEDPositions(string button, std::vector> *positions) { int buttonPosition = buttonPositions[button]; if (buttonPosition < 0) @@ -216,36 +252,36 @@ std::vector * NeoPicoLEDAddon::getLEDPositions(string button, std::vect std::vector> NeoPicoLEDAddon::generatedLEDButtons(std::vector> *positions) { std::vector> pixels = - { - { - PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), - PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), - }, - { - PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), - PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), - }, - { - PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), - PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), - }, - { - PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), - PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), - }, { - PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), - PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), - PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), - PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), - PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), - PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), - PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), - PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), - PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), - PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), - }, - }; + { + PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), + PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), + }, + { + PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), + PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), + }, + { + PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), + PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), + }, + { + PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), + PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), + }, + { + PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), + PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), + PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), + PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), + PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), + PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), + PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), + PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), + PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), + PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), + }, + }; return pixels; } @@ -256,56 +292,56 @@ std::vector> NeoPicoLEDAddon::generatedLEDButtons(std::vector std::vector> NeoPicoLEDAddon::generatedLEDStickless(vector> *positions) { std::vector> pixels = - { - { - PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), - NO_PIXEL, - NO_PIXEL, - }, - { - PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), - NO_PIXEL, - NO_PIXEL, - }, - { - PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), - NO_PIXEL, - NO_PIXEL, - }, - { - PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), - NO_PIXEL, - NO_PIXEL, - }, - { - PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), - PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), - NO_PIXEL, - }, - { - PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), - PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), - NO_PIXEL, - }, { - PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), - PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), - NO_PIXEL, - }, - { - PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), - PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), - NO_PIXEL, - }, - { - PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), - PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), - PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), - PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), - PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), - PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), - }, - }; + { + PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), + NO_PIXEL, + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), + NO_PIXEL, + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), + NO_PIXEL, + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), + NO_PIXEL, + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), + PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), + PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), + PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), + PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), + NO_PIXEL, + }, + { + PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), + PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), + PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), + PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), + PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), + PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), + }, + }; return pixels; } @@ -316,44 +352,44 @@ std::vector> NeoPicoLEDAddon::generatedLEDStickless(vector> NeoPicoLEDAddon::generatedLEDWasd(std::vector> *positions) { std::vector> pixels = - { - { - NO_PIXEL, - PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), - }, - { - PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), - PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), - }, - { - NO_PIXEL, - PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), - }, { - PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), - PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), - }, - { - PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), - PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), - }, - { - PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), - PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), - }, - { - PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), - PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), - }, - { - PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), - PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), - PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), - PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), - PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), - PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), - }, - }; + { + NO_PIXEL, + PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), + }, + { + PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), + PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), + }, + { + NO_PIXEL, + PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), + }, + { + PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), + PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), + }, + { + PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), + PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), + }, + { + PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), + PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), + }, + { + PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), + PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), + }, + { + PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), + PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), + PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), + PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), + PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), + PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), + }, + }; return pixels; } @@ -364,44 +400,44 @@ std::vector> NeoPicoLEDAddon::generatedLEDWasd(std::vector> NeoPicoLEDAddon::generatedLEDWasdFBM(std::vector> *positions) { std::vector> pixels = - { - { - PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), - PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), - }, - { - PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), - PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), - }, - { - PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), - PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), - }, - { - PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), - PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), - }, - { - NO_PIXEL, - PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), - }, - { - PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), - PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), - }, - { - NO_PIXEL, - PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), - }, { - PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), - PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), - PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), - PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), - PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), - PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), - }, - }; + { + PIXEL(BUTTON_LABEL_L1, GAMEPAD_MASK_L1), + PIXEL(BUTTON_LABEL_L2, GAMEPAD_MASK_L2), + }, + { + PIXEL(BUTTON_LABEL_R1, GAMEPAD_MASK_R1), + PIXEL(BUTTON_LABEL_R2, GAMEPAD_MASK_R2), + }, + { + PIXEL(BUTTON_LABEL_B4, GAMEPAD_MASK_B4), + PIXEL(BUTTON_LABEL_B2, GAMEPAD_MASK_B2), + }, + { + PIXEL(BUTTON_LABEL_B3, GAMEPAD_MASK_B3), + PIXEL(BUTTON_LABEL_B1, GAMEPAD_MASK_B1), + }, + { + NO_PIXEL, + PIXEL(BUTTON_LABEL_LEFT, GAMEPAD_MASK_DL), + }, + { + PIXEL(BUTTON_LABEL_UP, GAMEPAD_MASK_DU), + PIXEL(BUTTON_LABEL_DOWN, GAMEPAD_MASK_DD), + }, + { + NO_PIXEL, + PIXEL(BUTTON_LABEL_RIGHT, GAMEPAD_MASK_DR), + }, + { + PIXEL(BUTTON_LABEL_S1, GAMEPAD_MASK_S1), + PIXEL(BUTTON_LABEL_S2, GAMEPAD_MASK_S2), + PIXEL(BUTTON_LABEL_L3, GAMEPAD_MASK_L3), + PIXEL(BUTTON_LABEL_R3, GAMEPAD_MASK_R3), + PIXEL(BUTTON_LABEL_A1, GAMEPAD_MASK_A1), + PIXEL(BUTTON_LABEL_A2, GAMEPAD_MASK_A2), + }, + }; return pixels; } @@ -418,44 +454,44 @@ std::vector> NeoPicoLEDAddon::createLEDLayout(ButtonLayout la switch (static_cast(layout)) { - case BUTTON_LAYOUT_BLANKA: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_BLANKA: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_BUTTONS_BASIC: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_BUTTONS_BASIC: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_KEYBOARD_ANGLED: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_KEYBOARD_ANGLED: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_KEYBOARDA: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_KEYBOARDA: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_DANCEPADA: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_DANCEPADA: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_TWINSTICKA: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_TWINSTICKA: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_ARCADE: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_ARCADE: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_STICKLESS: - return generatedLEDStickless(&positions); + case BUTTON_LAYOUT_STICKLESS: + return generatedLEDStickless(&positions); - case BUTTON_LAYOUT_BUTTONS_ANGLED: - return generatedLEDWasd(&positions); + case BUTTON_LAYOUT_BUTTONS_ANGLED: + return generatedLEDWasd(&positions); - case BUTTON_LAYOUT_VLXA: - return generatedLEDButtons(&positions); + case BUTTON_LAYOUT_VLXA: + return generatedLEDButtons(&positions); - case BUTTON_LAYOUT_FIGHTBOARD_STICK: - return generatedLEDWasd(&positions); + case BUTTON_LAYOUT_FIGHTBOARD_STICK: + return generatedLEDWasd(&positions); - case BUTTON_LAYOUT_FIGHTBOARD_MIRRORED: - return generatedLEDWasdFBM(&positions); + case BUTTON_LAYOUT_FIGHTBOARD_MIRRORED: + return generatedLEDWasdFBM(&positions); - case BUTTON_LAYOUT_OPENCORE0WASDA: - return generatedLEDStickless(&positions); + case BUTTON_LAYOUT_OPENCORE0WASDA: + return generatedLEDStickless(&positions); } assert(false); @@ -464,7 +500,7 @@ std::vector> NeoPicoLEDAddon::createLEDLayout(ButtonLayout la uint8_t NeoPicoLEDAddon::setupButtonPositions() { - const LEDOptions& ledOptions = Storage::getInstance().getLedOptions(); + const LEDOptions &ledOptions = Storage::getInstance().getLedOptions(); buttonPositions.clear(); buttonPositions.emplace(BUTTON_LABEL_UP, ledOptions.indexUp); buttonPositions.emplace(BUTTON_LABEL_DOWN, ledOptions.indexDown); @@ -485,7 +521,7 @@ uint8_t NeoPicoLEDAddon::setupButtonPositions() buttonPositions.emplace(BUTTON_LABEL_A1, ledOptions.indexA1); buttonPositions.emplace(BUTTON_LABEL_A2, ledOptions.indexA2); uint8_t buttonCount = 0; - for (auto const& buttonPosition : buttonPositions) + for (auto const &buttonPosition : buttonPositions) { if (buttonPosition.second > -1) buttonCount++; @@ -496,7 +532,7 @@ uint8_t NeoPicoLEDAddon::setupButtonPositions() void NeoPicoLEDAddon::configureLEDs() { - const LEDOptions& ledOptions = Storage::getInstance().getLedOptions(); + const LEDOptions &ledOptions = Storage::getInstance().getLedOptions(); uint8_t buttonCount = setupButtonPositions(); vector> pixels = createLEDLayout(static_cast(ledOptions.ledLayout), ledOptions.ledsPerButton, buttonCount); matrix.setup(pixels, ledOptions.ledsPerButton); diff --git a/src/config_utils.cpp b/src/config_utils.cpp index a90d8e16..eed8b1f2 100644 --- a/src/config_utils.cpp +++ b/src/config_utils.cpp @@ -434,6 +434,10 @@ void ConfigUtils::initUnsetPropertiesWithDefaults(Config& config) // addonOptions.sliderOptions INIT_UNSET_PROPERTY(config.addonOptions.sliderOptions, enabled, !!JSLIDER_ENABLED); INIT_UNSET_PROPERTY(config.addonOptions.sliderOptions, modeDefault, SLIDER_MODE_ZERO); + INIT_UNSET_PROPERTY(config.addonOptions.sliderOptions, deprecatedPinSliderOne, PIN_SLIDER_ONE); + INIT_UNSET_PROPERTY(config.addonOptions.sliderOptions, deprecatedPinSliderTwo, PIN_SLIDER_TWO); + INIT_UNSET_PROPERTY(config.addonOptions.sliderOptions, deprecatedModeOne, SLIDER_MODE_ONE); + INIT_UNSET_PROPERTY(config.addonOptions.sliderOptions, deprecatedModeTwo, SLIDER_MODE_TWO); // addonOptions.reverseOptions INIT_UNSET_PROPERTY(config.addonOptions.reverseOptions, enabled, !!REVERSE_ENABLED); @@ -447,6 +451,10 @@ void ConfigUtils::initUnsetPropertiesWithDefaults(Config& config) // addonOptions.socdSliderOptions INIT_UNSET_PROPERTY(config.addonOptions.socdSliderOptions, enabled, !!SLIDER_SOCD_ENABLED); INIT_UNSET_PROPERTY(config.addonOptions.socdSliderOptions, modeDefault, SLIDER_SOCD_SLOT_DEFAULT); + INIT_UNSET_PROPERTY(config.addonOptions.socdSliderOptions, deprecatedPinOne, PIN_SLIDER_SOCD_ONE); + INIT_UNSET_PROPERTY(config.addonOptions.socdSliderOptions, deprecatedPinTwo, PIN_SLIDER_SOCD_TWO); + INIT_UNSET_PROPERTY(config.addonOptions.socdSliderOptions, deprecatedModeOne, SLIDER_SOCD_SLOT_ONE); + INIT_UNSET_PROPERTY(config.addonOptions.socdSliderOptions, deprecatedModeTwo, SLIDER_SOCD_SLOT_TWO); // addonOptions.analogADS1219Options INIT_UNSET_PROPERTY(config.addonOptions.analogADS1219Options, enabled, !!I2C_ANALOG1219_ENABLED); @@ -553,6 +561,8 @@ void ConfigUtils::initUnsetPropertiesWithDefaults(Config& config) INIT_UNSET_PROPERTY(config.addonOptions.focusModeOptions, enabled, !!FOCUS_MODE_ENABLED); INIT_UNSET_PROPERTY(config.addonOptions.focusModeOptions, pin, FOCUS_MODE_PIN); INIT_UNSET_PROPERTY(config.addonOptions.focusModeOptions, buttonLockMask, FOCUS_MODE_BUTTON_MASK); + INIT_UNSET_PROPERTY(config.addonOptions.focusModeOptions, oledLockEnabled, !!FOCUS_MODE_OLED_LOCK_ENABLED); + INIT_UNSET_PROPERTY(config.addonOptions.focusModeOptions, rgbLockEnabled, !!FOCUS_MODE_RGB_LOCK_ENABLED); INIT_UNSET_PROPERTY(config.addonOptions.focusModeOptions, buttonLockEnabled, !!FOCUS_MODE_BUTTON_LOCK_ENABLED); INIT_UNSET_PROPERTY(config.addonOptions.focusModeOptions, macroLockEnabled, !!FOCUS_MODE_MACRO_LOCK_ENABLED);