@@ -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