Speed up the first boot on generic firmware

This commit is contained in:
jflyper 2018-12-10 22:04:14 +09:00 committed by mikeller
parent c9788f1831
commit feab0bcb81
4 changed files with 37 additions and 7 deletions

View File

@ -87,6 +87,7 @@ PG_RESET_TEMPLATE(systemConfig_t, systemConfig,
.powerOnArmingGraceTime = 5, .powerOnArmingGraceTime = 5,
.boardIdentifier = TARGET_BOARD_IDENTIFIER, .boardIdentifier = TARGET_BOARD_IDENTIFIER,
.hseMhz = SYSTEM_HSE_VALUE, // Not used for non-F4 targets .hseMhz = SYSTEM_HSE_VALUE, // Not used for non-F4 targets
.configured = false,
); );
uint8_t getCurrentPidProfileIndex(void) uint8_t getCurrentPidProfileIndex(void)
@ -527,30 +528,43 @@ bool readEEPROM(void)
return success; return success;
} }
void writeEEPROM(void) static void ValidateAndWriteConfigToEEPROM(bool setConfigured)
{ {
validateAndFixConfig(); validateAndFixConfig();
suspendRxPwmPpmSignal(); suspendRxPwmPpmSignal();
#ifdef USE_CONFIGURATION_STATE
if (setConfigured) {
systemConfigMutable()->configured = true;
}
#else
UNUSED(setConfigured);
#endif
writeConfigToEEPROM(); writeConfigToEEPROM();
resumeRxPwmPpmSignal(); resumeRxPwmPpmSignal();
} }
void writeEEPROM(void)
{
ValidateAndWriteConfigToEEPROM(true);
}
void writeEEPROMWithFeatures(uint32_t features) void writeEEPROMWithFeatures(uint32_t features)
{ {
featureDisableAll(); featureDisableAll();
featureEnable(features); featureEnable(features);
writeEEPROM(); ValidateAndWriteConfigToEEPROM(true);
} }
void resetEEPROM(void) void resetEEPROM(void)
{ {
resetConfigs(); resetConfigs();
writeEEPROM(); ValidateAndWriteConfigToEEPROM(false);
activateConfig(); activateConfig();
} }
@ -565,7 +579,7 @@ void ensureEEPROMStructureIsValid(void)
void saveConfigAndNotify(void) void saveConfigAndNotify(void)
{ {
writeEEPROM(); ValidateAndWriteConfigToEEPROM(true);
readEEPROM(); readEEPROM();
beeperConfirmationBeeps(1); beeperConfirmationBeeps(1);
} }
@ -581,3 +595,12 @@ void changePidProfile(uint8_t pidProfileIndex)
beeperConfirmationBeeps(pidProfileIndex + 1); beeperConfirmationBeeps(pidProfileIndex + 1);
} }
bool isSystemConfigured(void)
{
#ifdef USE_CONFIGURATION_STATE
return systemConfig()->configured;
#else
return true;
#endif
}

View File

@ -43,6 +43,7 @@ typedef struct systemConfig_s {
uint8_t powerOnArmingGraceTime; // in seconds uint8_t powerOnArmingGraceTime; // in seconds
char boardIdentifier[sizeof(TARGET_BOARD_IDENTIFIER) + 1]; char boardIdentifier[sizeof(TARGET_BOARD_IDENTIFIER) + 1];
uint8_t hseMhz; // Not used for non-F4 targets uint8_t hseMhz; // Not used for non-F4 targets
uint8_t configured;
} systemConfig_t; } systemConfig_t;
PG_DECLARE(systemConfig_t, systemConfig); PG_DECLARE(systemConfig_t, systemConfig);
@ -75,3 +76,5 @@ uint16_t getCurrentMinthrottle(void);
void resetConfigs(void); void resetConfigs(void);
void targetConfiguration(void); void targetConfiguration(void);
void targetValidateConfiguration(void); void targetValidateConfiguration(void);
bool isSystemConfigured(void);

View File

@ -503,7 +503,9 @@ void init(void)
if (!sensorsAutodetect()) { if (!sensorsAutodetect()) {
// if gyro was not detected due to whatever reason, notify and don't arm. // if gyro was not detected due to whatever reason, notify and don't arm.
if (isSystemConfigured()) {
indicateFailure(FAILURE_MISSING_ACC, 2); indicateFailure(FAILURE_MISSING_ACC, 2);
}
setArmingDisabled(ARMING_DISABLED_NO_GYRO); setArmingDisabled(ARMING_DISABLED_NO_GYRO);
} }

View File

@ -205,9 +205,11 @@
#define USE_RX_XN297 #define USE_RX_XN297
#endif #endif
#ifdef GENERIC_TARGET
#define USE_CONFIGURATION_STATE
// Setup crystal frequency for backward compatibility // Setup crystal frequency for backward compatibility
// Should be set to zero for generic targets and set with CLI variable set system_hse_value. // Should be set to zero for generic targets and set with CLI variable set system_hse_value.
#ifdef GENERIC_TARGET
#define SYSTEM_HSE_VALUE 0 #define SYSTEM_HSE_VALUE 0
#else #else
#ifdef TARGET_XTAL_MHZ #ifdef TARGET_XTAL_MHZ
@ -215,7 +217,7 @@
#else #else
#define SYSTEM_HSE_VALUE (HSE_VALUE/1000000U) #define SYSTEM_HSE_VALUE (HSE_VALUE/1000000U)
#endif #endif
#endif #endif // GENERIC_TARGET
// Number of pins that needs pre-init // Number of pins that needs pre-init
#ifdef USE_SPI #ifdef USE_SPI