Skip to content

Commit 091d4d9

Browse files
authored
Turbo Available / update pin fix (#805)
* Turbo Available / update pin fix * Moved turbo migrations to their own check (0.7.6+ upgrades will require this type of checking) * Silly comment fix
1 parent 17f6031 commit 091d4d9

2 files changed

Lines changed: 29 additions & 11 deletions

File tree

src/addons/turbo.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,25 @@
1212
#define TURBO_SHOT_MAX 30
1313

1414
bool TurboInput::available() {
15-
return Storage::getInstance().getAddonOptions().turboOptions.enabled;
16-
}
17-
18-
void TurboInput::setup()
19-
{
20-
const TurboOptions& options = Storage::getInstance().getAddonOptions().turboOptions;
21-
Gamepad * gamepad = Storage::getInstance().GetGamepad();
22-
uint32_t now = getMillis();
23-
2415
// Turbo Button initialized by void Gamepad::setup()
16+
bool hasTurboAssigned = false;
2517
GpioAction* pinMappings = Storage::getInstance().getProfilePinMappings();
2618
for (Pin_t pin = 0; pin < (Pin_t)NUM_BANK0_GPIOS; pin++)
2719
{
2820
if ( pinMappings[pin] == GpioAction::BUTTON_PRESS_TURBO ) {
29-
turboPin = pin;
21+
hasTurboAssigned = true;
22+
turboPin = pin;
3023
break;
3124
}
3225
}
26+
return Storage::getInstance().getAddonOptions().turboOptions.enabled && (hasTurboAssigned == true);
27+
}
28+
29+
void TurboInput::setup()
30+
{
31+
const TurboOptions& options = Storage::getInstance().getAddonOptions().turboOptions;
32+
Gamepad * gamepad = Storage::getInstance().GetGamepad();
33+
uint32_t now = getMillis();
3334

3435
// Turbo Dial
3536
uint8_t shotCount = std::clamp<uint8_t>(options.shotCount, TURBO_SHOT_MIN, TURBO_SHOT_MAX);

src/config_utils.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,7 @@ void gpioMappingsMigrationCore(Config& config)
700700
TiltOptions& tiltOptions = config.addonOptions.tiltOptions;
701701
KeyboardHostOptions& keyboardHostOptions = config.addonOptions.keyboardHostOptions;
702702
PSPassthroughOptions& psPassthroughOptions = config.addonOptions.psPassthroughOptions;
703+
TurboOptions& turboOptions = config.addonOptions.turboOptions;
703704

704705
const auto gamepadMaskToGpioAction = [&](Mask_t gpMask) -> GpioAction
705706
{
@@ -1099,7 +1100,6 @@ void gpioMappingsMigrationCore(Config& config)
10991100
markAddonPinIfUsed(config.addonOptions.buzzerOptions.pin);
11001101
markAddonPinIfUsed(config.addonOptions.focusModeOptions.pin);
11011102
markAddonPinIfUsed(config.addonOptions.turboOptions.ledPin);
1102-
markAddonPinIfUsed(config.addonOptions.turboOptions.deprecatedButtonPin);
11031103
markAddonPinIfUsed(config.addonOptions.turboOptions.shmupDialPin);
11041104
markAddonPinIfUsed(config.addonOptions.turboOptions.shmupBtn1Pin);
11051105
markAddonPinIfUsed(config.addonOptions.turboOptions.shmupBtn2Pin);
@@ -1181,6 +1181,19 @@ void gpioMappingsMigrationProfiles(Config& config)
11811181
config.migrations.buttonProfilesMigrated = true;
11821182
}
11831183

1184+
// Check for additional migrations for features 0.7.6+
1185+
void checkAdditionalMigrations(Config& config) {
1186+
// Features converted here must set their previous deprecated pin/set value as well (pin = -1)
1187+
TurboOptions & turboOptions = config.addonOptions.turboOptions;
1188+
1189+
// Convert turbo pin mapping to GPIO mapping config
1190+
if (turboOptions.enabled && isValidPin(turboOptions.deprecatedButtonPin)) {
1191+
// previous config had a value we haven't migrated yet, it can/should apply in the new config
1192+
config.gpioMappings.pins[turboOptions.deprecatedButtonPin].action = GpioAction::BUTTON_PRESS_TURBO;
1193+
turboOptions.deprecatedButtonPin = -1; // set our turbo options to -1 for subsequent calls
1194+
}
1195+
}
1196+
11841197
// populate existing configurations' buttonsMask and auxMask to mirror behavior
11851198
// from the behavior before this code merged. totally new configs get their
11861199
// board defaults via initUnsetPropertiesWithDefaults
@@ -1331,6 +1344,9 @@ void ConfigUtils::load(Config& config)
13311344
if (!config.migrations.buttonProfilesMigrated)
13321345
gpioMappingsMigrationProfiles(config);
13331346

1347+
// Run additional migrations for 0.7.6+ upgrades
1348+
checkAdditionalMigrations(config);
1349+
13341350
// Update boardVersion, in case we migrated from an older version
13351351
strncpy(config.boardVersion, GP2040VERSION, sizeof(config.boardVersion));
13361352
config.boardVersion[sizeof(config.boardVersion) - 1] = '\0';
@@ -1902,6 +1918,7 @@ bool ConfigUtils::fromJSON(Config& config, const char* data, size_t dataLen)
19021918
// we need to run migrations here too, in case the json document changed pins or things derived from pins
19031919
gpioMappingsMigrationCore(config);
19041920
gpioMappingsMigrationProfiles(config);
1921+
checkAdditionalMigrations(config);
19051922

19061923
return true;
19071924
}

0 commit comments

Comments
 (0)