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,
.boardIdentifier = TARGET_BOARD_IDENTIFIER,
.hseMhz = SYSTEM_HSE_VALUE, // Not used for non-F4 targets
.configured = false,
);
uint8_t getCurrentPidProfileIndex(void)
@ -527,30 +528,43 @@ bool readEEPROM(void)
return success;
}
void writeEEPROM(void)
static void ValidateAndWriteConfigToEEPROM(bool setConfigured)
{
validateAndFixConfig();
suspendRxPwmPpmSignal();
#ifdef USE_CONFIGURATION_STATE
if (setConfigured) {
systemConfigMutable()->configured = true;
}
#else
UNUSED(setConfigured);
#endif
writeConfigToEEPROM();
resumeRxPwmPpmSignal();
}
void writeEEPROM(void)
{
ValidateAndWriteConfigToEEPROM(true);
}
void writeEEPROMWithFeatures(uint32_t features)
{
featureDisableAll();
featureEnable(features);
writeEEPROM();
ValidateAndWriteConfigToEEPROM(true);
}
void resetEEPROM(void)
{
resetConfigs();
writeEEPROM();
ValidateAndWriteConfigToEEPROM(false);
activateConfig();
}
@ -565,7 +579,7 @@ void ensureEEPROMStructureIsValid(void)
void saveConfigAndNotify(void)
{
writeEEPROM();
ValidateAndWriteConfigToEEPROM(true);
readEEPROM();
beeperConfirmationBeeps(1);
}
@ -581,3 +595,12 @@ void changePidProfile(uint8_t pidProfileIndex)
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
char boardIdentifier[sizeof(TARGET_BOARD_IDENTIFIER) + 1];
uint8_t hseMhz; // Not used for non-F4 targets
uint8_t configured;
} systemConfig_t;
PG_DECLARE(systemConfig_t, systemConfig);
@ -75,3 +76,5 @@ uint16_t getCurrentMinthrottle(void);
void resetConfigs(void);
void targetConfiguration(void);
void targetValidateConfiguration(void);
bool isSystemConfigured(void);

View File

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

View File

@ -205,9 +205,11 @@
#define USE_RX_XN297
#endif
#ifdef GENERIC_TARGET
#define USE_CONFIGURATION_STATE
// Setup crystal frequency for backward compatibility
// 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
#else
#ifdef TARGET_XTAL_MHZ
@ -215,7 +217,7 @@
#else
#define SYSTEM_HSE_VALUE (HSE_VALUE/1000000U)
#endif
#endif
#endif // GENERIC_TARGET
// Number of pins that needs pre-init
#ifdef USE_SPI