auto-sync

This commit is contained in:
rusEfi 2016-09-13 20:03:14 -04:00
parent abaa6584d7
commit 9a61e8b0e0
6 changed files with 38 additions and 30 deletions

View File

@ -33,7 +33,8 @@
#include "electronic_throttle.h" #include "electronic_throttle.h"
#include "idle_thread.h" #include "idle_thread.h"
#include "alternatorController.h" #include "alternatorController.h"
#endif #include "hardware.h"
#endif /* EFI_PROD_CODE */
#include "hip9011_lookup.h" #include "hip9011_lookup.h"
@ -110,6 +111,21 @@ static fuel_table_t alphaNfuel = {
static volatile int globalConfigurationVersion = 0; static volatile int globalConfigurationVersion = 0;
/**
* Current engine configuration. On firmware start we assign empty configuration, then
* we copy actual configuration after reading settings.
* This is useful to compare old and new configurations in order to apply new settings.
*
* todo: place this field next to 'engineConfiguration'?
*/
engine_configuration_s activeConfiguration;
extern engine_configuration_s *engineConfiguration;
void rememberCurrentConfiguration(void) {
memcpy(&activeConfiguration, engineConfiguration, sizeof(engine_configuration_s));
}
/** /**
* This counter is incremented every time user adjusts ECU parameters online (either via dev console or other * This counter is incremented every time user adjusts ECU parameters online (either via dev console or other
* tuning software) * tuning software)
@ -118,8 +134,16 @@ int getGlobalConfigurationVersion(void) {
return globalConfigurationVersion; return globalConfigurationVersion;
} }
/**
* this is the top-level method which should be called in case of any changes to engine configuration
* online tuning of most values in the maps does not count as configuration change, but 'Burn' command does
*/
void incrementGlobalConfigurationVersion(void) { void incrementGlobalConfigurationVersion(void) {
globalConfigurationVersion++; globalConfigurationVersion++;
#if EFI_PROD_CODE || defined(__DOXYGEN__)
applyNewHardwareSettings();
#endif /* EFI_PROD_CODE */
rememberCurrentConfiguration();
} }
/** /**

View File

@ -53,6 +53,7 @@ void setWholeTimingTable(angle_t value DECLARE_ENGINE_PARAMETER_S);
void setConstantDwell(floatms_t dwellMs DECLARE_ENGINE_PARAMETER_S); void setConstantDwell(floatms_t dwellMs DECLARE_ENGINE_PARAMETER_S);
void printFloatArray(const char *prefix, float array[], int size); void printFloatArray(const char *prefix, float array[], int size);
void rememberCurrentConfiguration(void);
void incrementGlobalConfigurationVersion(void); void incrementGlobalConfigurationVersion(void);
int getGlobalConfigurationVersion(void); int getGlobalConfigurationVersion(void);

View File

@ -390,7 +390,7 @@ static void setBit(const char *offsetStr, const char *bitStr, const char *valueS
* this response is part of dev console API * this response is part of dev console API
*/ */
scheduleMsg(&logger, "bit @%d/%d is %d", offset, bit, value); scheduleMsg(&logger, "bit @%d/%d is %d", offset, bit, value);
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
static void setShort(const int offset, const int value) { static void setShort(const int offset, const int value) {
@ -399,7 +399,7 @@ static void setShort(const int offset, const int value) {
uint16_t *ptr = (uint16_t *) (&((char *) engineConfiguration)[offset]); uint16_t *ptr = (uint16_t *) (&((char *) engineConfiguration)[offset]);
*ptr = (uint16_t) value; *ptr = (uint16_t) value;
getShort(offset); getShort(offset);
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
static void getBit(int offset, int bit) { static void getBit(int offset, int bit) {
@ -430,7 +430,7 @@ static void setInt(const int offset, const int value) {
int *ptr = (int *) (&((char *) engineConfiguration)[offset]); int *ptr = (int *) (&((char *) engineConfiguration)[offset]);
*ptr = value; *ptr = value;
getInt(offset); getInt(offset);
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
static void getFloat(int offset) { static void getFloat(int offset) {

View File

@ -618,7 +618,7 @@ static void setIgnitionPin(const char *indexStr, const char *pinName) {
} }
scheduleMsg(&logger, "setting ignition pin[%d] to %s please save&restart", index, hwPortname(pin)); scheduleMsg(&logger, "setting ignition pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->ignitionPins[index] = pin; boardConfiguration->ignitionPins[index] = pin;
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
static void setIndividualPin(const char *pinName, brain_pin_e *targetPin, const char *name) { static void setIndividualPin(const char *pinName, brain_pin_e *targetPin, const char *name) {
@ -629,7 +629,7 @@ static void setIndividualPin(const char *pinName, brain_pin_e *targetPin, const
} }
scheduleMsg(&logger, "setting %s pin to %s please save&restart", name, hwPortname(pin)); scheduleMsg(&logger, "setting %s pin to %s please save&restart", name, hwPortname(pin));
*targetPin = pin; *targetPin = pin;
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
// set_idle_pin none // set_idle_pin none
@ -665,7 +665,7 @@ static void setInjectionPin(const char *indexStr, const char *pinName) {
} }
scheduleMsg(&logger, "setting injection pin[%d] to %s please save&restart", index, hwPortname(pin)); scheduleMsg(&logger, "setting injection pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->injectionPins[index] = pin; boardConfiguration->injectionPins[index] = pin;
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
static void setTriggerInputPin(const char *indexStr, const char *pinName) { static void setTriggerInputPin(const char *indexStr, const char *pinName) {
@ -680,7 +680,7 @@ static void setTriggerInputPin(const char *indexStr, const char *pinName) {
} }
scheduleMsg(&logger, "setting trigger pin[%d] to %s please save&restart", index, hwPortname(pin)); scheduleMsg(&logger, "setting trigger pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->triggerInputPins[index] = pin; boardConfiguration->triggerInputPins[index] = pin;
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
static void setTriggerSimulatorMode(const char *indexStr, const char *modeCode) { static void setTriggerSimulatorMode(const char *indexStr, const char *modeCode) {
@ -706,7 +706,7 @@ static void setEgtCSPin(const char *indexStr, const char *pinName, board_configu
} }
scheduleMsg(&logger, "setting EGT CS pin[%d] to %s please save&restart", index, hwPortname(pin)); scheduleMsg(&logger, "setting EGT CS pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->max31855_cs[index] = pin; boardConfiguration->max31855_cs[index] = pin;
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
static void setTriggerSimulatorPin(const char *indexStr, const char *pinName) { static void setTriggerSimulatorPin(const char *indexStr, const char *pinName) {
@ -720,7 +720,7 @@ static void setTriggerSimulatorPin(const char *indexStr, const char *pinName) {
} }
scheduleMsg(&logger, "setting trigger simulator pin[%d] to %s please save&restart", index, hwPortname(pin)); scheduleMsg(&logger, "setting trigger simulator pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->triggerSimulatorPins[index] = pin; boardConfiguration->triggerSimulatorPins[index] = pin;
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
#if HAL_USE_ADC || defined(__DOXYGEN__) #if HAL_USE_ADC || defined(__DOXYGEN__)
@ -748,7 +748,7 @@ static void setAnalogInputPin(const char *sensorStr, const char *pinName) {
engineConfiguration->tpsAdcChannel = channel; engineConfiguration->tpsAdcChannel = channel;
scheduleMsg(&logger, "setting TPS to %s/%d", pinName, channel); scheduleMsg(&logger, "setting TPS to %s/%d", pinName, channel);
} }
applyNewConfiguration(); incrementGlobalConfigurationVersion();
} }
#endif #endif

View File

@ -135,6 +135,8 @@ bool hasFirmwareErrorFlag = false;
static virtual_timer_t resetTimer; static virtual_timer_t resetTimer;
extern engine_configuration_s activeConfiguration;
EXTERN_ENGINE EXTERN_ENGINE
; ;
@ -158,24 +160,6 @@ static void scheduleReboot(void) {
unlockAnyContext(); unlockAnyContext();
} }
/**
* Current engine configuration. On firmware start we assign empty configuration, then
* we copy actual configuration after reading settings.
* This is useful to compare old and new configurations in order to apply new settings.
*
* todo: place this field next to 'engineConfiguration'?
*/
engine_configuration_s activeConfiguration;
static void rememberCurrentConfiguration(void) {
memcpy(&activeConfiguration, engineConfiguration, sizeof(engine_configuration_s));
}
void applyNewConfiguration(void) {
applyNewHardwareSettings();
rememberCurrentConfiguration();
}
void runRusEfi(void) { void runRusEfi(void) {
efiAssertVoid(getRemainingStack(chThdSelf()) > 512, "init s"); efiAssertVoid(getRemainingStack(chThdSelf()) > 512, "init s");
initIntermediateLoggingBuffer(); initIntermediateLoggingBuffer();

View File

@ -9,6 +9,5 @@
#define RUSEFI_H_ #define RUSEFI_H_
void runRusEfi(void); void runRusEfi(void);
void applyNewConfiguration(void);
#endif /* RUSEFI_H_ */ #endif /* RUSEFI_H_ */