Speed up the first boot on generic firmware
This commit is contained in:
parent
c9788f1831
commit
feab0bcb81
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue