Remove the EFI_NO_CONFIG_WORKING_COPY option (#3630)

* no working copy

* oops
This commit is contained in:
Matthew Kennedy 2021-11-29 13:44:45 -08:00 committed by GitHub
parent f8d59d1031
commit a37c9bca9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 8 additions and 128 deletions

View File

@ -61,8 +61,6 @@
*/
#define EFI_TUNER_STUDIO TRUE
#undef EFI_NO_CONFIG_WORKING_COPY
/**
* Bluetooth UART setup support.
*/

View File

@ -60,8 +60,6 @@
*/
#define EFI_TUNER_STUDIO TRUE
#define EFI_NO_CONFIG_WORKING_COPY TRUE
/**
* Bluetooth UART setup support.
*/

View File

@ -89,15 +89,6 @@
#include "rusEfiFunctionalTest.h"
#endif /* EFI_SIMULATOR */
#if !defined(EFI_NO_CONFIG_WORKING_COPY)
/**
* this is a local copy of the configuration. Any changes to this copy
* have no effect until this copy is explicitly propagated to the main working copy
*/
persistent_config_s configWorkingCopy;
#endif /* EFI_NO_CONFIG_WORKING_COPY */
static void printErrorCounters() {
efiPrintf("TunerStudio size=%d / total=%d / errors=%d / H=%d / O=%d / P=%d / B=%d",
sizeof(tsOutputChannels), tsState.totalCounter, tsState.errorCounter, tsState.queryCommandCounter,
@ -169,12 +160,8 @@ void tunerStudioDebug(TsChannelBase* tsChannel, const char *msg) {
#endif /* EFI_TUNER_STUDIO_VERBOSE */
}
char *getWorkingPageAddr() {
#ifndef EFI_NO_CONFIG_WORKING_COPY
return (char*) &configWorkingCopy.engineConfiguration;
#else
return (char*) engineConfiguration;
#endif /* EFI_NO_CONFIG_WORKING_COPY */
uint8_t* getWorkingPageAddr() {
return (uint8_t*)engineConfiguration;
}
static constexpr size_t getTunerStudioPageSize() {
@ -199,39 +186,6 @@ static void handlePageSelectCommand(TsChannelBase *tsChannel, ts_response_format
sendOkResponse(tsChannel, mode);
}
/**
* Copy specified amount of bytes from specified offset from communication layer working copy into real configuration
*
* Some changes like changing VE table or timing table are applied right away, meaning
* that the values are copied from communication copy into actual engine control copy right away.
* We call these parameters 'soft parameters'
*
* This is needed to support TS online auto-tune.
*
* On the contrary, 'hard parameters' are waiting for the Burn button to be clicked and configuration version
* would be increased and much more complicated logic would be executed.
*/
static void onlineApplyWorkingCopyBytes(uint32_t offset, int count) {
if (offset >= sizeof(engine_configuration_s)) {
int maxSize = sizeof(persistent_config_s) - offset;
if (count > maxSize) {
warning(CUSTOM_TS_OVERFLOW, "TS overflow %d %d", offset, count);
return;
}
efiPrintf("applying soft change from %d length %d", offset, count);
#if !defined(EFI_NO_CONFIG_WORKING_COPY)
memcpy(((char*)config) + offset, ((char*) &configWorkingCopy) + offset,
count);
#endif /* EFI_NO_CONFIG_WORKING_COPY */
}
// todo: ECU does not burn while engine is running yet tune CRC
// tune CRC is calculated based on the latest online part (FSIO formulas are in online region of the tune)
// open question what's the best strategy to balance coding efforts, performance matters and tune crc functionality
// open question what is the runtime cost of wiping 2K of bytes on each IO communication, could be that 2K of byte memset
// is negligable comparing with the IO costs?
}
#if EFI_TUNER_STUDIO
static const void * getStructAddr(live_data_e structId) {
@ -326,7 +280,6 @@ void handleWriteChunkCommand(TsChannelBase* tsChannel, ts_response_format_e mode
if (!rebootForPresetPending) {
uint8_t * addr = (uint8_t *) (getWorkingPageAddr() + offset);
memcpy(addr, content, count);
onlineApplyWorkingCopyBytes(offset, count);
}
sendOkResponse(tsChannel, mode);
@ -342,7 +295,7 @@ static void handleCrc32Check(TsChannelBase *tsChannel, ts_response_format_e mode
return;
}
const char* start = getWorkingPageAddr() + offset;
const uint8_t* start = getWorkingPageAddr() + offset;
uint32_t crc = SWAP_UINT32(crc32(start, count));
tsChannel->sendResponse(mode, (const uint8_t *) &crc, 4);
@ -373,8 +326,6 @@ static void handleWriteValueCommand(TsChannelBase* tsChannel, ts_response_format
// Skip the write if a preset was just loaded - we don't want to overwrite it
if (!rebootForPresetPending) {
getWorkingPageAddr()[offset] = value;
onlineApplyWorkingCopyBytes(offset, 1);
}
}
@ -394,7 +345,7 @@ static void handlePageReadCommand(TsChannelBase* tsChannel, ts_response_format_e
return;
}
const uint8_t *addr = (const uint8_t *) (getWorkingPageAddr() + offset);
const uint8_t* addr = getWorkingPageAddr() + offset;
tsChannel->sendResponse(mode, addr, count);
#if EFI_TUNER_STUDIO_VERBOSE
// efiPrintf("Sending %d done", count);
@ -430,10 +381,6 @@ void handleBurnCommand(TsChannelBase* tsChannel, ts_response_format_e mode) {
// Skip the burn if a preset was just loaded - we don't want to overwrite it
if (!rebootForPresetPending) {
#if !defined(EFI_NO_CONFIG_WORKING_COPY)
memcpy(config, &configWorkingCopy, sizeof(persistent_config_s));
#endif /* EFI_NO_CONFIG_WORKING_COPY */
requestBurn();
}
@ -579,15 +526,6 @@ void TunerstudioThread::ThreadTask() {
}
}
/**
* Copy real configuration into the communications layer working copy
*/
void syncTunerStudioCopy(void) {
#if !defined(EFI_NO_CONFIG_WORKING_COPY)
memcpy(&configWorkingCopy, &persistentState.persistentConfiguration, sizeof(persistent_config_s));
#endif /* EFI_NO_CONFIG_WORKING_COPY */
}
#endif // EFI_TUNER_STUDIO
tunerstudio_counters_s tsState;
@ -891,7 +829,6 @@ void startTunerStudioConnectivity(void) {
// char (*__kaboom)[sizeof(persistent_config_s)] = 1;
memset(&tsState, 0, sizeof(tsState));
syncTunerStudioCopy();
addConsoleAction("tsinfo", printTsStats);
addConsoleAction("reset_ts", resetTs);

View File

@ -29,7 +29,7 @@ extern tunerstudio_counters_s tsState;
void tunerStudioDebug(TsChannelBase* tsChannel, const char *msg);
void tunerStudioError(TsChannelBase* tsChannel, const char *msg);
char *getWorkingPageAddr();
uint8_t* getWorkingPageAddr();
#if EFI_TUNER_STUDIO
#include "thread_controller.h"
@ -53,7 +53,6 @@ void printTsStats(void);
void requestBurn(void);
void startTunerStudioConnectivity(void);
void syncTunerStudioCopy(void);
#if defined __GNUC__
// GCC

View File

@ -1127,10 +1127,6 @@ void resetConfigurationExt(configuration_callback_t boardCallback, engine_type_e
firmwareError(CUSTOM_UNEXPECTED_ENGINE_TYPE, "Unexpected engine type: %d", engineType);
}
applyNonPersistentConfiguration();
#if EFI_TUNER_STUDIO
syncTunerStudioCopy();
#endif /* EFI_TUNER_STUDIO */
}
void emptyCallbackWithConfiguration(engine_configuration_s * engineConfiguration) {

View File

@ -22,10 +22,6 @@ bool hasFirmwareErrorFlag = false;
const char *dbg_panic_file;
int dbg_panic_line;
#if EFI_TUNER_STUDIO && !defined(EFI_NO_CONFIG_WORKING_COPY)
extern persistent_config_s configWorkingCopy;
#endif
const char* getFirmwareError(void) {
return criticalErrorMessageBuffer;
}
@ -120,11 +116,7 @@ bool warning(obd_code_e code, const char *fmt, ...) {
if (engineConfiguration->showHumanReadableWarning) {
#if EFI_TUNER_STUDIO
#if defined(EFI_NO_CONFIG_WORKING_COPY)
memcpy(persistentState.persistentConfiguration.warning_message, warningBuffer, sizeof(warningBuffer));
#else /* defined(EFI_NO_CONFIG_WORKING_COPY) */
memcpy(configWorkingCopy.warning_message, warningBuffer, sizeof(warningBuffer));
#endif /* defined(EFI_NO_CONFIG_WORKING_COPY) */
#endif /* EFI_TUNER_STUDIO */
}

View File

@ -351,12 +351,6 @@ static void getByte(int offset) {
}
static void onConfigurationChanged() {
#if EFI_TUNER_STUDIO
// on start-up rusEfi would read from working copy of TS while
// we have a lot of console commands which write into real copy of configuration directly
// we have a bit of a mess here
syncTunerStudioCopy();
#endif /* EFI_TUNER_STUDIO */
incrementGlobalConfigurationVersion();
}
@ -747,7 +741,7 @@ void initEngineContoller() {
* UNUSED_SIZE constants.
*/
#ifndef RAM_UNUSED_SIZE
#define RAM_UNUSED_SIZE 8000
#define RAM_UNUSED_SIZE 26000
#endif
#ifndef CCM_UNUSED_SIZE
#define CCM_UNUSED_SIZE 16

View File

@ -325,16 +325,6 @@ static void rewriteConfig() {
writeToFlashNow();
}
static void writeConfigCommand() {
#if EFI_TUNER_STUDIO
// on start-up rusEfi would read from working copy of TS while
// we have a lot of console commands which write into real copy of configuration directly
// we have a bit of a mess here
syncTunerStudioCopy();
#endif /* EFI_TUNER_STUDIO */
writeToFlashNow();
}
void initFlash() {
#if EFI_STORAGE_EXT_SNOR == TRUE
mfs_error_t err;
@ -359,7 +349,7 @@ void initFlash() {
/**
* This would write NOW (you should not be doing this while connected to real engine)
*/
addConsoleAction(CMD_WRITECONFIG, writeConfigCommand);
addConsoleAction(CMD_WRITECONFIG, writeToFlashNow);
#if EFI_TUNER_STUDIO
/**
* This would schedule write to flash once the engine is stopped

View File

@ -69,7 +69,7 @@ TEST(binary, testWriteCrc) {
TEST(TunerstudioCommands, writeChunkEngineConfig) {
EngineTestHelper eth(TEST_ENGINE);
MockTsChannel channel;
::testing::NiceMock<MockTsChannel> channel;
uint8_t* configBytes = reinterpret_cast<uint8_t*>(config);
@ -81,29 +81,5 @@ TEST(TunerstudioCommands, writeChunkEngineConfig) {
uint8_t val = 50;
handleWriteChunkCommand(&channel, TS_CRC, 100, 1, &val);
// hasn't changed yet
EXPECT_EQ(configBytes[100], 0);
handleBurnCommand(&channel, TS_CRC);
EXPECT_EQ(configBytes[100], 50);
}
TEST(TunerstudioCommands, writeChunkOutsideEngineConfig) {
EngineTestHelper eth(TEST_ENGINE);
MockTsChannel channel;
uint8_t* configBytes = reinterpret_cast<uint8_t*>(config);
size_t offset = sizeof(engine_configuration_s) + 100;
// Contains zero before the write
configBytes[offset] = 0;
EXPECT_EQ(configBytes[offset], 0);
// one step - writes past engineConfiguration don't need a burn
uint8_t val = 50;
handleWriteChunkCommand(&channel, TS_CRC, offset, 1, &val);
EXPECT_EQ(configBytes[offset], 50);
}