From b76a7cbcd85e853ff9cfe9dcda8e7badaee1e98e Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 23 Sep 2022 05:47:50 -0700 Subject: [PATCH] simulator reads/writes configuration (#4605) * simulator reads/writes configuration * c_str * include order --- firmware/console/status_loop.cpp | 5 +- firmware/controllers/flash_main.cpp | 1 + simulator/.gitignore | 1 + simulator/main.cpp | 78 ++++++++++++++++++++ simulator/simulator/efifeatures.h | 5 +- simulator/simulator/mpu_util.h | 6 +- simulator/simulator/rusEfiFunctionalTest.cpp | 5 +- 7 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 simulator/.gitignore diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 45c1370442..479e4293f6 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -64,12 +64,15 @@ extern bool main_loop_started; #include "HD44780.h" #include "rusefi.h" #include "pin_repository.h" -#include "flash_main.h" #include "max31855.h" #include "single_timer_executor.h" #include "periodic_task.h" #endif /* EFI_PROD_CODE */ +#if EFI_INTERNAL_FLASH +#include "flash_main.h" +#endif + #if EFI_CJ125 #include "cj125.h" #endif /* EFI_CJ125 */ diff --git a/firmware/controllers/flash_main.cpp b/firmware/controllers/flash_main.cpp index 909d5c7777..213ed2657e 100644 --- a/firmware/controllers/flash_main.cpp +++ b/firmware/controllers/flash_main.cpp @@ -11,6 +11,7 @@ #if EFI_INTERNAL_FLASH +#include "mpu_util.h" #include "flash_main.h" #include "eficonsole.h" diff --git a/simulator/.gitignore b/simulator/.gitignore new file mode 100644 index 0000000000..a057273502 --- /dev/null +++ b/simulator/.gitignore @@ -0,0 +1 @@ +flash*.bin diff --git a/simulator/main.cpp b/simulator/main.cpp index e5746a390f..4b298c7eed 100644 --- a/simulator/main.cpp +++ b/simulator/main.cpp @@ -18,6 +18,11 @@ #include "chprintf.h" #include "rusEfiFunctionalTest.h" +#include +#include +#include +#include + #define CONSOLE_WA_SIZE THD_WORKING_AREA_SIZE(4096) bool main_loop_started = false; @@ -188,3 +193,76 @@ int main(int argc, char** argv) { chEvtUnregister(chnGetEventSource(&SD2), &sd2fel); return 0; } + + +uintptr_t getFlashAddrFirstCopy() { + return 1; +} + +uintptr_t getFlashAddrSecondCopy() { + return 2; +} + +#include "flash_int.h" + +static std::string makeFileName(flashaddr_t addr) { + std::stringstream ss; + + ss << "flash" << addr << ".bin"; + + return ss.str(); +} + +int intFlashErase(flashaddr_t address, size_t size) { + // Try to delete the file, swallow any errors (we can overwrite it anyway) + try { + std::filesystem::remove(makeFileName(address)); + } catch (...) { } +} + +int intFlashRead(flashaddr_t address, char* buffer, size_t size) { + auto fileName = makeFileName(address); + + printf("Simulator: reading config from %s\n", fileName.c_str()); + + std::ifstream flash; + flash.open(fileName, std::ios::binary); + + if (!flash.is_open()) { + // no file, nothing to read + // setting ot all 1s emulates real erased flash behavior + memset(buffer, 0xFF, size); + return HAL_SUCCESS; + } + + flash.read(buffer, size); + + flash.close(); + + return HAL_SUCCESS; +} + +int intFlashWrite(flashaddr_t address, const char* buffer, size_t size) { + auto fileName = makeFileName(address); + printf("Simulator: writing config to %s\n", fileName.c_str()); + + std::ofstream flash; + flash.open(fileName, std::ios::binary | std::ios::trunc); + + flash.write(buffer, size); + + flash.close(); + + return HAL_SUCCESS; +} + +// Write from file in to memory +// void simulatorWriteFlash(const persistent_config_container_s& cfg) { +// std::ofstream flash; +// flash.open(simFileName, std::ios::binary | std::ios::trunc); + +// const char* ptr = reinterpret_cast(&cfg); +// flash.write(ptr, sizeof(cfg)); + +// flash.close(); +// } diff --git a/simulator/simulator/efifeatures.h b/simulator/simulator/efifeatures.h index 1eca675f6d..0120e3f720 100644 --- a/simulator/simulator/efifeatures.h +++ b/simulator/simulator/efifeatures.h @@ -123,7 +123,10 @@ #define FUEL_MATH_EXTREME_LOGGING FALSE #define EFI_ANALOG_SENSORS TRUE -#define EFI_INTERNAL_FLASH FALSE +#define EFI_INTERNAL_FLASH TRUE +#define EFI_STORAGE_INT_FLASH TRUE +#define EFI_FLASH_WRITE_THREAD TRUE +#define EFI_STORAGE_EXT_SNOR FALSE #define EFI_RTC FALSE #define EFI_MALFUNCTION_INDICATOR FALSE #define EFI_HD44780_LCD FALSE diff --git a/simulator/simulator/mpu_util.h b/simulator/simulator/mpu_util.h index 40764e1402..bc80537b26 100644 --- a/simulator/simulator/mpu_util.h +++ b/simulator/simulator/mpu_util.h @@ -2,6 +2,8 @@ #if HAL_USE_CAN CANDriver* detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx); -bool isValidCanTxPin(brain_pin_e) { return true; } -bool isValidCanRxPin(brain_pin_e) { return true; } +static bool isValidCanTxPin(brain_pin_e) { return true; } +static bool isValidCanRxPin(brain_pin_e) { return true; } #endif // HAL_USE_CAN + +static bool allowFlashWhileRunning() { return true; } diff --git a/simulator/simulator/rusEfiFunctionalTest.cpp b/simulator/simulator/rusEfiFunctionalTest.cpp index 042e57d2fc..5ce4a2798e 100644 --- a/simulator/simulator/rusEfiFunctionalTest.cpp +++ b/simulator/simulator/rusEfiFunctionalTest.cpp @@ -25,6 +25,7 @@ #include #include "rusefi_lua.h" #include "can_hw.h" +#include "flash_main.h" #define DEFAULT_SIM_RPM 1200 #define DEFAULT_SNIFFER_THR 2500 @@ -98,7 +99,9 @@ void rusEfiFunctionalTest(void) { // todo: reduce code duplication with initEngineContoller - resetConfigurationExt(MINIMAL_PINS); + initFlash(); + loadConfiguration(); + enableTriggerStimulator(); commonInitEngineController();