Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions headers/gamepad.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ class Gamepad {
GamepadButtonMapping *mapAnalogRSYNeg;
GamepadButtonMapping *mapAnalogRSYPos;
GamepadButtonMapping *map48WayMode;
GamepadButtonMapping *mapFocusMode;

// gamepad specific proxy of debounced buttons --- 1 = active (inverse of the raw GPIO)
// see GP2040::debounceGpioGetAll for details
Expand Down
31 changes: 14 additions & 17 deletions src/addons/focus_mode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,19 @@ void FocusModeAddon::process() {
Mask_t values = Storage::getInstance().GetGamepad()->debouncedGpio;

const FocusModeOptions& options = Storage::getInstance().getAddonOptions().focusModeOptions;

if (!options.enabled) return;

if ( options.overrideEnabled || values & mapFocusMode->pinMask ) {
if (buttonLockMask & GAMEPAD_MASK_DU) {
gamepad->state.dpad &= ~GAMEPAD_MASK_UP;
}
if (buttonLockMask & GAMEPAD_MASK_DD) {
gamepad->state.dpad &= ~GAMEPAD_MASK_DOWN;
}
if (buttonLockMask & GAMEPAD_MASK_DL) {
gamepad->state.dpad &= ~GAMEPAD_MASK_LEFT;
}
if (buttonLockMask & GAMEPAD_MASK_DR) {
gamepad->state.dpad &= ~GAMEPAD_MASK_RIGHT;
}
gamepad->state.buttons &= ~buttonLockMask;
if ( options.overrideEnabled || (mapFocusMode->pinMask && (values & mapFocusMode->pinMask)) ) {
if (buttonLockMask & GAMEPAD_MASK_DU) {
gamepad->state.dpad &= ~GAMEPAD_MASK_UP;
}
if (buttonLockMask & GAMEPAD_MASK_DD) {
gamepad->state.dpad &= ~GAMEPAD_MASK_DOWN;
}
if (buttonLockMask & GAMEPAD_MASK_DL) {
gamepad->state.dpad &= ~GAMEPAD_MASK_LEFT;
}
if (buttonLockMask & GAMEPAD_MASK_DR) {
gamepad->state.dpad &= ~GAMEPAD_MASK_RIGHT;
}
gamepad->state.buttons &= ~buttonLockMask;
}
}
12 changes: 10 additions & 2 deletions src/addons/input_macro.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -244,8 +244,16 @@ void InputMacro::runCurrentMacro() {
void InputMacro::preprocess()
{
FocusModeOptions * focusModeOptions = &Storage::getInstance().getAddonOptions().focusModeOptions;
if (focusModeOptions->enabled && focusModeOptions->macroLockEnabled)
return;
if (focusModeOptions->enabled && focusModeOptions->macroLockEnabled) {
Gamepad * gamepad = Storage::getInstance().GetGamepad();
if (gamepad->mapFocusMode->pinMask > 0) {
if (gamepad->debouncedGpio & gamepad->mapFocusMode->pinMask)
return;
} else {
if (focusModeOptions->overrideEnabled)
return;
}
}

checkMacroPress();
checkMacroAction();
Expand Down
3 changes: 3 additions & 0 deletions src/gamepad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ void Gamepad::setup()
mapAnalogRSYNeg = new GamepadButtonMapping(ANALOG_DIRECTION_RS_Y_NEG);
mapAnalogRSYPos = new GamepadButtonMapping(ANALOG_DIRECTION_RS_Y_POS);
map48WayMode = new GamepadButtonMapping(SUSTAIN_4_8_WAY_MODE);
mapFocusMode = new GamepadButtonMapping(0);

const auto assignCustomMappingToMaps = [&](GpioMappingInfo mapInfo, Pin_t pin) -> void {
if (mapDpadUp->buttonMask & mapInfo.customDpadMask) mapDpadUp->pinMask |= 1 << pin;
Expand Down Expand Up @@ -164,6 +165,7 @@ void Gamepad::setup()
case GpioAction::ANALOG_DIRECTION_RS_Y_NEG: mapAnalogRSYNeg->pinMask |= 1 << pin; break;
case GpioAction::ANALOG_DIRECTION_RS_Y_POS: mapAnalogRSYPos->pinMask |= 1 << pin; break;
case GpioAction::SUSTAIN_4_8_WAY_MODE: map48WayMode->pinMask |= 1 << pin; break;
case GpioAction::SUSTAIN_FOCUS_MODE: mapFocusMode->pinMask |= 1 << pin; break;
default: break;
}
}
Expand Down Expand Up @@ -241,6 +243,7 @@ void Gamepad::reinit()
delete mapAnalogRSYNeg;
delete mapAnalogRSYPos;
delete map48WayMode;
delete mapFocusMode;

// reinitialize pin mappings
this->setup();
Expand Down