From d941bdc502caded418636c76cde9af800e833280 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 11 Sep 2020 17:08:11 -0700 Subject: [PATCH 1/6] logging simplification: switch bare functions to member functions (#1788) * first pass * first pass * const means we don't have to check! * static * test fixup --- firmware/console/status_loop.cpp | 2 +- firmware/controllers/core/error_handling.cpp | 4 +- firmware/development/engine_sniffer.cpp | 33 +++--- firmware/development/logic_analyzer.cpp | 30 +++--- firmware/development/sensor_chart.cpp | 10 +- firmware/hw_layer/adc/adc_inputs.cpp | 12 +-- firmware/hw_layer/rtc_helper.cpp | 2 +- firmware/util/datalogging.cpp | 103 ++++++------------- firmware/util/datalogging.h | 58 ++++++----- firmware/util/efilib.cpp | 8 +- firmware/util/loggingcentral.cpp | 6 +- simulator/simulator/rusEfiFunctionalTest.cpp | 8 +- unit_tests/tests/test_accel_enrichment.cpp | 2 +- unit_tests/tests/test_pid_auto.cpp | 2 +- 14 files changed, 117 insertions(+), 163 deletions(-) diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 7e9652e702..f9e8c72837 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -176,7 +176,7 @@ static systime_t timeOfPreviousPrintVersion = (systime_t) -1; #if EFI_PROD_CODE static void printOutPin(const char *pinName, brain_pin_e hwPin) { if (hwPin != GPIO_UNASSIGNED) { - appendPrintf(&logger, "%s%s%s@%s%s", PROTOCOL_OUTPIN, DELIMETER, pinName, hwPortname(hwPin), DELIMETER); + logger.appendPrintf("%s%s%s@%s%s", PROTOCOL_OUTPIN, DELIMETER, pinName, hwPortname(hwPin), DELIMETER); } } #endif /* EFI_PROD_CODE */ diff --git a/firmware/controllers/core/error_handling.cpp b/firmware/controllers/core/error_handling.cpp index b8a1fa1589..3e0f54416f 100644 --- a/firmware/controllers/core/error_handling.cpp +++ b/firmware/controllers/core/error_handling.cpp @@ -119,7 +119,7 @@ static void printToStream(MemoryStream *stream, const char *fmt, va_list ap) { } static void printWarning(const char *fmt, va_list ap) { - resetLogging(&logger); // todo: is 'reset' really needed here? + logger.reset(); // todo: is 'reset' really needed here? appendMsgPrefix(&logger); logger.append(WARNING_PREFIX); @@ -137,7 +137,7 @@ static void printWarning(const char *fmt, va_list ap) { } logger.append(warningBuffer); - append(&logger, DELIMETER); + logger.append(DELIMETER); scheduleLogging(&logger); } diff --git a/firmware/development/engine_sniffer.cpp b/firmware/development/engine_sniffer.cpp index e78eae1b5b..f0a2aa6bf2 100644 --- a/firmware/development/engine_sniffer.cpp +++ b/firmware/development/engine_sniffer.cpp @@ -58,7 +58,7 @@ int waveChartUsedSize; //#define DEBUG_WAVE 1 #if DEBUG_WAVE -static Logging debugLogging; +static LoggingWithStorage debugLogging("debug"); #endif /* DEBUG_WAVE */ static LoggingWithStorage logger("wave info"); @@ -76,11 +76,10 @@ static void resetNow(void) { } #endif -WaveChart::WaveChart() { +WaveChart::WaveChart() : logging("wave chart", WAVE_LOGGING_BUFFER, sizeof(WAVE_LOGGING_BUFFER)) { } void WaveChart::init() { - logging.initLoggingExt("wave chart", WAVE_LOGGING_BUFFER, sizeof(WAVE_LOGGING_BUFFER)); isInitialized = true; reset(); } @@ -89,11 +88,11 @@ void WaveChart::reset() { #if DEBUG_WAVE scheduleSimpleMsg(&debugLogging, "reset while at ", counter); #endif /* DEBUG_WAVE */ - resetLogging(&logging); + logging.reset(); counter = 0; startTimeNt = 0; collectingData = false; - appendPrintf(&logging, "%s%s", PROTOCOL_ENGINE_SNIFFER, DELIMETER); + logging.appendPrintf( "%s%s", PROTOCOL_ENGINE_SNIFFER, DELIMETER); } void WaveChart::startDataCollection() { @@ -144,8 +143,8 @@ void WaveChart::publishIfFull() { } void WaveChart::publish() { - appendPrintf(&logging, DELIMETER); - waveChartUsedSize = loggingSize(&logging); + logging.appendPrintf( DELIMETER); + waveChartUsedSize = logging.loggingSize(); #if DEBUG_WAVE Logging *l = &chart->logging; scheduleSimpleMsg(&debugLogging, "IT'S TIME", strlen(l->buffer)); @@ -211,20 +210,20 @@ void WaveChart::addEvent3(const char *name, const char * msg) { uint32_t diffNt = nowNt - startTimeNt; uint32_t time100 = NT2US(diffNt / ENGINE_SNIFFER_UNIT_US); - if (remainingSize(&logging) > 35) { + if (logging.remainingSize() > 35) { /** * printf is a heavy method, append is used here as a performance optimization */ - appendFast(&logging, name); - appendChar(&logging, CHART_DELIMETER); - appendFast(&logging, msg); - appendChar(&logging, CHART_DELIMETER); + logging.appendFast(name); + logging.appendChar(CHART_DELIMETER); + logging.appendFast(msg); + logging.appendChar(CHART_DELIMETER); // time100 -= startTime100; itoa10(timeBuffer, time100); - appendFast(&logging, timeBuffer); - appendChar(&logging, CHART_DELIMETER); - logging.linePointer[0] = 0; + logging.appendFast(timeBuffer); + logging.appendChar(CHART_DELIMETER); + logging.appendChar('\0'); } if (!alreadyLocked) { unlockOutputBuffer(); @@ -240,10 +239,6 @@ void initWaveChart(WaveChart *chart) { printStatus(); -#if DEBUG_WAVE - initLoggingExt(&debugLogging, "wave chart debug", &debugLogging.DEFAULT_BUFFER, sizeof(debugLogging.DEFAULT_BUFFER)); -#endif - #if EFI_HISTOGRAMS initHistogram(&engineSnifferHisto, "wave chart"); #endif /* EFI_HISTOGRAMS */ diff --git a/firmware/development/logic_analyzer.cpp b/firmware/development/logic_analyzer.cpp index 322b6c5851..a98dd69d77 100644 --- a/firmware/development/logic_analyzer.cpp +++ b/firmware/development/logic_analyzer.cpp @@ -171,38 +171,38 @@ static void reportWave(Logging *logging, int index) { float dwellMs = getSignalOnTime(index); float periodMs = getSignalPeriodMs(index); - appendPrintf(logging, "duty%d%s", index, DELIMETER); - appendFloat(logging, 100.0f * dwellMs / periodMs, 2); - appendPrintf(logging, "%s", DELIMETER); + logging->appendPrintf("duty%d%s", index, DELIMETER); + logging->appendFloat(100.0f * dwellMs / periodMs, 2); + logging->appendPrintf("%s", DELIMETER); /** * that's the ON time of the LAST signal */ - appendPrintf(logging, "dwell%d%s", index, DELIMETER); - appendFloat(logging, dwellMs, 2); - appendPrintf(logging, "%s", DELIMETER); + logging->appendPrintf("dwell%d%s", index, DELIMETER); + logging->appendFloat(dwellMs, 2); + logging->appendPrintf("%s", DELIMETER); /** * that's the total ON time during the previous engine cycle */ - appendPrintf(logging, "total_dwell%d%s", index, DELIMETER); - appendFloat(logging, readers[index].prevTotalOnTimeUs / 1000.0f, 2); - appendPrintf(logging, "%s", DELIMETER); + logging->appendPrintf("total_dwell%d%s", index, DELIMETER); + logging->appendFloat(readers[index].prevTotalOnTimeUs / 1000.0f, 2); + logging->appendPrintf("%s", DELIMETER); - appendPrintf(logging, "period%d%s", index, DELIMETER); - appendFloat(logging, periodMs, 2); - appendPrintf(logging, "%s", DELIMETER); + logging->appendPrintf("period%d%s", index, DELIMETER); + logging->appendFloat(periodMs, 2); + logging->appendPrintf("%s", DELIMETER); uint32_t offsetUs = getWaveOffset(index); int rpm = GET_RPM(); if (rpm != 0) { float oneDegreeUs = getOneDegreeTimeUs(rpm); - appendPrintf(logging, "advance%d%s", index, DELIMETER); + logging->appendPrintf("advance%d%s", index, DELIMETER); float angle = (offsetUs / oneDegreeUs) - tdcPosition(); fixAngle(angle, "waveAn", CUSTOM_ERR_6564); - appendFloat(logging, angle, 3); - appendPrintf(logging, "%s", DELIMETER); + logging->appendFloat(angle, 3); + logging->appendPrintf("%s", DELIMETER); } } } diff --git a/firmware/development/sensor_chart.cpp b/firmware/development/sensor_chart.cpp index ff97975f68..3e887990c5 100644 --- a/firmware/development/sensor_chart.cpp +++ b/firmware/development/sensor_chart.cpp @@ -49,7 +49,7 @@ void scAddData(float angle, float value) { * data after we have added some data - meaning it's time to flush */ // message terminator - appendPrintf(&scLogging, DELIMETER); + scLogging.appendPrintf(DELIMETER); // output pending data scheduleLogging(&scLogging); pendingData = false; @@ -58,13 +58,13 @@ void scAddData(float angle, float value) { } if (!pendingData) { pendingData = true; - resetLogging(&scLogging); + scLogging.reset(); // message header - appendPrintf(&scLogging, "%s%s", PROTOCOL_ANALOG_CHART, DELIMETER); + scLogging.appendPrintf( "%s%s", PROTOCOL_ANALOG_CHART, DELIMETER); } - if (remainingSize(&scLogging) > 100) { - appendPrintf(&scLogging, "%.2f|%.2f|", angle, value); + if (scLogging.remainingSize() > 100) { + scLogging.appendPrintf( "%.2f|%.2f|", angle, value); } #endif /* EFI_TEXT_LOGGING */ } diff --git a/firmware/hw_layer/adc/adc_inputs.cpp b/firmware/hw_layer/adc/adc_inputs.cpp index 7a12172d9f..9479f6965a 100644 --- a/firmware/hw_layer/adc/adc_inputs.cpp +++ b/firmware/hw_layer/adc/adc_inputs.cpp @@ -385,10 +385,10 @@ static void printFullAdcReport(Logging *logger) { int pin = getAdcChannelPin(hwIndex); int adcValue = getAvgAdcValue(hwIndex, fastAdc.samples, ADC_BUF_DEPTH_FAST, fastAdc.size()); - appendPrintf(logger, " F ch%d %s%d", index, portname(port), pin); - appendPrintf(logger, " ADC%d 12bit=%d", hwIndex, adcValue); + logger->appendPrintf(" F ch%d %s%d", index, portname(port), pin); + logger->appendPrintf(" ADC%d 12bit=%d", hwIndex, adcValue); float volts = adcToVolts(adcValue); - appendPrintf(logger, " v=%.2f", volts); + logger->appendPrintf(" v=%.2f", volts); appendMsgPostfix(logger); scheduleLogging(logger); @@ -405,10 +405,10 @@ static void printFullAdcReport(Logging *logger) { int pin = getAdcChannelPin(hwIndex); int adcValue = slowAdc.getAdcValueByIndex(index); - appendPrintf(logger, " S ch%d %s%d", index, portname(port), pin); - appendPrintf(logger, " ADC%d 12bit=%d", hwIndex, adcValue); + logger->appendPrintf(" S ch%d %s%d", index, portname(port), pin); + logger->appendPrintf(" ADC%d 12bit=%d", hwIndex, adcValue); float volts = adcToVolts(adcValue); - appendPrintf(logger, " v=%.2f", volts); + logger->appendPrintf(" v=%.2f", volts); appendMsgPostfix(logger); scheduleLogging(logger); diff --git a/firmware/hw_layer/rtc_helper.cpp b/firmware/hw_layer/rtc_helper.cpp index c2a511ddd9..b01053fc09 100644 --- a/firmware/hw_layer/rtc_helper.cpp +++ b/firmware/hw_layer/rtc_helper.cpp @@ -145,7 +145,7 @@ void printDateTime(void) { date_get_tm(&timp); appendMsgPrefix(&logger); - appendPrintf(&logger, "Current RTC localtime is: %04u-%02u-%02u %02u:%02u:%02u w=%d", timp.tm_year + 1900, timp.tm_mon + 1, timp.tm_mday, timp.tm_hour, + logger.appendPrintf( "Current RTC localtime is: %04u-%02u-%02u %02u:%02u:%02u w=%d", timp.tm_year + 1900, timp.tm_mon + 1, timp.tm_mday, timp.tm_hour, timp.tm_min, timp.tm_sec, rtcWorks); appendMsgPostfix(&logger); scheduleLogging(&logger); diff --git a/firmware/util/datalogging.cpp b/firmware/util/datalogging.cpp index 6f9169b5d1..449b64cde4 100644 --- a/firmware/util/datalogging.cpp +++ b/firmware/util/datalogging.cpp @@ -73,26 +73,22 @@ static IntermediateLogging intermediateLogging; /** * @returns true if data does not fit into this buffer */ -static ALWAYS_INLINE bool validateBuffer(Logging *logging, const char *text, uint32_t extraLen) { - if (logging->buffer == NULL) { - firmwareError(CUSTOM_ERR_LOGGING_NOT_READY, "Logging not initialized: %s", logging->name); - return true; - } - - if (remainingSize(logging) < extraLen + 1) { +bool Logging::validateBuffer(const char *text, uint32_t extraLen) { + if (remainingSize() < extraLen + 1) { #if EFI_PROD_CODE const char * msg = extraLen > 50 ? "(long)" : text; - warning(CUSTOM_LOGGING_BUFFER_OVERFLOW, "output overflow %s %d [%s]", logging->name, extraLen, msg); + warning(CUSTOM_LOGGING_BUFFER_OVERFLOW, "output overflow %s %d [%s]", name, extraLen, msg); #endif /* EFI_PROD_CODE */ return true; } + return false; } void Logging::append(const char *text) { efiAssertVoid(CUSTOM_APPEND_NULL, text != NULL, "append NULL"); uint32_t extraLen = efiStrlen(text); - bool isCapacityProblem = validateBuffer(this, text, extraLen); + bool isCapacityProblem = validateBuffer(text, extraLen); if (isCapacityProblem) { return; } @@ -103,20 +99,14 @@ void Logging::append(const char *text) { linePointer += extraLen; } -// todo: inline -void append(Logging *logging, const char *text) { - logging->append(text); -} - /** * @note This method if fast because it does not validate much, be sure what you are doing */ -void appendFast(Logging *logging, const char *text) { - char *s; - s = logging->linePointer; +void Logging::appendFast(const char *text) { + char *s = linePointer; while ((*s++ = *text++) != 0) ; - logging->linePointer = s - 1; + linePointer = s - 1; } /** @@ -138,15 +128,6 @@ void Logging::vappendPrintf(const char *fmt, va_list arg) { #endif // EFI_UNIT_TEST } -// todo: replace with logging->appendPrintf -void appendPrintf(Logging *logging, const char *fmt, ...) { - efiAssertVoid(CUSTOM_APPEND_STACK, getCurrentRemainingStack() > 128, "lowstck#4"); - va_list ap; - va_start(ap, fmt); - logging->vappendPrintf(fmt, ap); - va_end(ap); -} - void Logging::appendPrintf(const char *fmt, ...) { #if EFI_UNIT_TEST va_list ap; @@ -162,19 +143,7 @@ void Logging::appendPrintf(const char *fmt, ...) { #endif // EFI_UNIT_TEST } -void Logging::initLoggingExt(const char *name, char *buffer, int bufferSize) { - this->name = name; - this->buffer = buffer; - this->bufferSize = bufferSize; - resetLogging(this); - this->isInitialized = true; -} - -int isInitialized(Logging *logging) { - return logging->isInitialized; -} - -void appendFloat(Logging *logging, float value, int precision) { +void Logging::appendFloat(float value, int precision) { /** * todo: #1 this implementation is less than perfect * todo: #2 The only way to avoid double promotion would probably be using *float instead of float @@ -182,26 +151,26 @@ void appendFloat(Logging *logging, float value, int precision) { */ switch (precision) { case 1: - appendPrintf(logging, "%.1f", value); + appendPrintf("%.1f", value); break; case 2: - appendPrintf(logging, "%.2f", value); + appendPrintf("%.2f", value); break; case 3: - appendPrintf(logging, "%.3f", value); + appendPrintf("%.3f", value); break; case 4: - appendPrintf(logging, "%.4f", value); + appendPrintf("%.4f", value); break; case 5: - appendPrintf(logging, "%.5f", value); + appendPrintf("%.5f", value); break; case 6: - appendPrintf(logging, "%.6f", value); + appendPrintf("%.6f", value); break; default: - appendPrintf(logging, "%.2f", value); + appendPrintf("%.2f", value); } } @@ -210,7 +179,7 @@ static char header[16]; /** * this method should invoked on the main thread only */ -void printWithLength(char *line) { +static void printWithLength(char *line) { #if ! EFI_UNIT_TEST int len; char *p; @@ -248,21 +217,16 @@ void printWithLength(char *line) { } void appendMsgPrefix(Logging *logging) { - append(logging, PROTOCOL_MSG DELIMETER); + logging->append(PROTOCOL_MSG DELIMETER); } void appendMsgPostfix(Logging *logging) { - append(logging, DELIMETER); + logging->append(DELIMETER); } -void resetLogging(Logging *logging) { - char *buffer = logging->buffer; - if (buffer == NULL) { - firmwareError(ERROR_NULL_BUFFER, "Null buffer: %s", logging->name); - return; - } - logging->linePointer = buffer; - logging->linePointer[0] = 0; +void Logging::reset() { + linePointer = buffer; + *linePointer = 0; } /** @@ -279,24 +243,17 @@ void printMsg(Logging *logger, const char *fmt, ...) { logger->vappendPrintf(fmt, ap); va_end(ap); - append(logger, DELIMETER); + logger->append(DELIMETER); printWithLength(logger->buffer); - resetLogging(logger); + logger->reset(); } -uint32_t remainingSize(Logging *logging) { - return logging->bufferSize - loggingSize(logging); -} - -Logging::Logging() { -} - -Logging::Logging(char const *name, char *buffer, int bufferSize) : Logging() { -#if ! EFI_UNIT_TEST - initLoggingExt(name, buffer, bufferSize); -#else - this->buffer = buffer; -#endif /* ! EFI_UNIT_TEST */ +Logging::Logging(char const *name, char *buffer, int bufferSize) + : name(name) + , buffer(buffer) + , bufferSize(bufferSize) +{ + reset(); } LoggingWithStorage::LoggingWithStorage(const char *name) : Logging(name, DEFAULT_BUFFER, sizeof(DEFAULT_BUFFER)) { diff --git a/firmware/util/datalogging.h b/firmware/util/datalogging.h index 8765c93c19..fce42200e7 100644 --- a/firmware/util/datalogging.h +++ b/firmware/util/datalogging.h @@ -17,28 +17,51 @@ // size of buffers? class Logging { public: - Logging(); + Logging() = delete; Logging(const char *name, char *buffer, int bufferSize); - void initLoggingExt(const char *name, char *buffer, int bufferSize); + + void reset(); + void vappendPrintf(const char *fmt, va_list arg); void append(const char *text); void appendFast(const char *text); void appendPrintf(const char *fmt, ...); - const char *name = nullptr; - char SMALL_BUFFER[40]; + void appendFloat(float value, int precision); + + /** + * This macro breaks the normal zero=termination constraint, please take care of this outside of this function + */ + void appendChar(char c) { + *linePointer = c; + linePointer++; + } + + size_t loggingSize() const { + return (uintptr_t)linePointer - (uintptr_t)buffer; + } + + size_t remainingSize() const { + return bufferSize - loggingSize(); + } + +//private: + bool validateBuffer(const char *text, uint32_t extraLen); + + const char* const name = nullptr; + /** * Zero-terminated buffer of pending debug message * * Unless a larger external buffer is specified, this is just a pointer to DEFAULT_BUFFER */ - char *buffer = nullptr; + char* const buffer = nullptr; + const int bufferSize = 0; + /** * This pointer is always pointing at the position within the buffer into which next * write operation would append additional data */ char *linePointer = nullptr; - int bufferSize = 0; - volatile bool isInitialized = false; }; class LoggingWithStorage : public Logging { @@ -47,14 +70,8 @@ public: char DEFAULT_BUFFER[200]; }; -int isInitialized(Logging *logging); - void initLoggingExt(Logging *logging, const char *name, char *buffer, int bufferSize); -void appendFloat(Logging *logging, float value, int precision); - -void resetLogging(Logging *logging); - void appendMsgPrefix(Logging *logging); void appendMsgPostfix(Logging *logging); @@ -67,20 +84,7 @@ extern "C" #define lockOutputBuffer lockAnyContext #define unlockOutputBuffer unlockAnyContext -uint32_t remainingSize(Logging *logging); - -#define loggingSize(logging) ((int) (logging)->linePointer - (int) ((logging)->buffer)) - - void printMsg(Logging *logging, const char *fmt, ...); -void appendPrintf(Logging *logging, const char *fmt, ...); -void append(Logging *logging, const char *text); -void appendFast(Logging *logging, const char *text); - -/** - * This macro breaks the normal zero=termination constraint, please take care of this outside of this macro - */ -#define appendChar(logging, symbol) {(logging)->linePointer[0] = (symbol);(logging)->linePointer++;} /** * this method copies the line into the intermediate buffer for later output by @@ -91,5 +95,3 @@ void scheduleLogging(Logging *logging); #ifdef __cplusplus } #endif /* __cplusplus */ - -void printWithLength(char *line); diff --git a/firmware/util/efilib.cpp b/firmware/util/efilib.cpp index 8e0a0f313d..72e2fda824 100644 --- a/firmware/util/efilib.cpp +++ b/firmware/util/efilib.cpp @@ -312,12 +312,12 @@ void printHistogram(Logging *logging, histogram_s *histogram) { int report[5]; int len = hsReport(histogram, report); - resetLogging(logging); + logging->reset(); appendMsgPrefix(logging); - appendPrintf(logging, "histogram %s *", histogram->name); + logging.appendPrintf("histogram %s *", histogram->name); for (int i = 0; i < len; i++) - appendPrintf(logging, "%d ", report[i]); - appendPrintf(logging, "*"); + logging.appendPrintf("%d ", report[i]); + logging.appendPrintf("*"); appendMsgPostfix(logging); scheduleLogging(logging); #else diff --git a/firmware/util/loggingcentral.cpp b/firmware/util/loggingcentral.cpp index 5c27ceb78a..a7ab1a2024 100644 --- a/firmware/util/loggingcentral.cpp +++ b/firmware/util/loggingcentral.cpp @@ -82,7 +82,7 @@ void scheduleLogging(Logging *logging) { if (!alreadyLocked) { unlockOutputBuffer(); } - resetLogging(logging); + logging->reset(); return; } // memcpy is faster then strcpy because it is not looking for line terminator @@ -91,7 +91,7 @@ void scheduleLogging(Logging *logging) { if (!alreadyLocked) { unlockOutputBuffer(); } - resetLogging(logging); + logging->reset(); #endif /* EFI_TEXT_LOGGING */ } @@ -167,7 +167,7 @@ void scheduleMsg(Logging *logging, const char *format, ...) { return; } int wasLocked = lockAnyContext(); - resetLogging(logging); // todo: is 'reset' really needed here? + logging->reset(); // todo: is 'reset' really needed here? appendMsgPrefix(logging); va_list ap; diff --git a/simulator/simulator/rusEfiFunctionalTest.cpp b/simulator/simulator/rusEfiFunctionalTest.cpp index a661af8421..fa3d87adea 100644 --- a/simulator/simulator/rusEfiFunctionalTest.cpp +++ b/simulator/simulator/rusEfiFunctionalTest.cpp @@ -69,20 +69,20 @@ static void runChprintfTest() { { LoggingWithStorage testLogging("test"); - appendFloat(&testLogging, 1.23, 5); - appendFloat(&testLogging, 1.234, 2); + testLogging.appendFloat(1.23, 5); + testLogging.appendFloat(1.234, 2); assertString(testLogging.buffer, "1.230001.23"); } { LoggingWithStorage testLogging("test"); - appendFloat(&testLogging, -1.23, 5); + testLogging.appendFloat(-1.23, 5); assertString(testLogging.buffer, "-1.23000"); } { LoggingWithStorage testLogging("test"); - appendPrintf(&testLogging, "a%.2fb%fc", -1.2, -3.4); + testLogging.appendPrintf( "a%.2fb%fc", -1.2, -3.4); assertString(testLogging.buffer, "a-1.20b-3.400000095c"); } diff --git a/unit_tests/tests/test_accel_enrichment.cpp b/unit_tests/tests/test_accel_enrichment.cpp index 79531a4f69..6c721ab384 100644 --- a/unit_tests/tests/test_accel_enrichment.cpp +++ b/unit_tests/tests/test_accel_enrichment.cpp @@ -104,7 +104,7 @@ TEST(fuel, testAccelEnrichmentFractionalTps) { } } - Logging logger; + LoggingWithStorage logger("test"); initAccelEnrichment(&logger PASS_ENGINE_PARAMETER_SUFFIX); engine->rpmCalculator.setRpmValue(600); diff --git a/unit_tests/tests/test_pid_auto.cpp b/unit_tests/tests/test_pid_auto.cpp index 4ec3fb98eb..09ddaeb168 100644 --- a/unit_tests/tests/test_pid_auto.cpp +++ b/unit_tests/tests/test_pid_auto.cpp @@ -16,7 +16,7 @@ efitimems_t currentTimeMillis(void) { return mockTimeMs; } -Logging logging; +LoggingWithStorage logging("test"); static float zigZagOffset = 0; From b1a69ff92391cce7c76c6fd4ef2a22538fbab6dd Mon Sep 17 00:00:00 2001 From: David Holdeman Date: Fri, 11 Sep 2020 19:20:37 -0500 Subject: [PATCH 2/6] some documentation improvements (#1787) --- firmware/integration/rusefi_config.txt | 2 +- firmware/rusefi.cpp | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 015dba8dab..0a7e05576f 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -7,7 +7,7 @@ ! rusEfi configuration consists of two parts: ! First part is engine_configuration_s area, followed by a few tuning tables ! -! The only difference her is that engine_configuration_s area does not support hot modification while tuning tables could +! The only difference here is that engine_configuration_s area does not support hot modification while tuning tables could ! be modified without burning changes ! ! diff --git a/firmware/rusefi.cpp b/firmware/rusefi.cpp index 46efe9eb24..b9a161d543 100644 --- a/firmware/rusefi.cpp +++ b/firmware/rusefi.cpp @@ -12,7 +12,7 @@ * * For version see engine_controller.cpp getRusEfiVersion * - * @section sec_into + * @section sec_intro Intro * * rusEfi is implemented based on the idea that with modern 100+ MHz microprocessors the relatively * undemanding task of internal combustion engine control could be implemented in a high-level, processor-independent @@ -50,11 +50,11 @@ * * @section sec_timers Timers * At the moment rusEfi is build using 5 times: - * 1) 1MHz microsecond_timer.cpp - * 2) 10KHz fast ADC callback pwmpcb_fast adc_inputs.cpp - * 3) slow ADC callback pwmpcb_slow adc_inputs.cpp - * 4) periodicFastTimer engine_controller.cpp - * 5) periodicSlowTimer engine_controller.cpp + *
1) 1MHz microsecond_timer.cpp + *
2) 10KHz fast ADC callback pwmpcb_fast adc_inputs.cpp + *
3) slow ADC callback pwmpcb_slow adc_inputs.cpp + *
4) periodicFastTimer engine_controller.cpp + *
5) periodicSlowTimer engine_controller.cpp * * * @@ -96,7 +96,7 @@ * @section sec_fuel_injection Fuel Injection * * - * @sectuion sec_misc Misc + * @section sec_misc Misc * *
See main_trigger_callback.cpp for main trigger event handler *
See fuel_math.cpp for details on fuel amount logic From a5e74e04d47e8c17691982b005c95436d8dfd7a1 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sat, 12 Sep 2020 00:22:40 +0000 Subject: [PATCH 3/6] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 4 ++-- .../controllers/algo/rusefi_generated.h | 6 +++--- ...ngine_configuration_generated_structures.h | 4 ++-- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 6 +++--- .../controllers/generated/signature_all.h | 6 +++--- .../generated/signature_frankenso_na6.h | 6 +++--- .../controllers/generated/signature_kin.h | 6 +++--- .../controllers/generated/signature_mre_f4.h | 6 +++--- .../controllers/generated/signature_mre_f7.h | 6 +++--- .../generated/signature_prometheus_405.h | 6 +++--- .../generated/signature_prometheus_469.h | 6 +++--- .../generated/signature_proteus_f4.h | 6 +++--- .../generated/signature_proteus_f7.h | 6 +++--- firmware/tunerstudio/generated/cache.zip | Bin 869308 -> 869290 bytes firmware/tunerstudio/generated/rusefi.ini | 6 +++--- .../generated/rusefi_frankenso_na6.ini | 6 +++--- .../tunerstudio/generated/rusefi_kinetis.ini | 6 +++--- .../tunerstudio/generated/rusefi_mre_f4.ini | 6 +++--- .../tunerstudio/generated/rusefi_mre_f7.ini | 6 +++--- .../generated/rusefi_prometheus_405.ini | 6 +++--- .../generated/rusefi_prometheus_469.ini | 6 +++--- .../generated/rusefi_proteus_f4.ini | 6 +++--- .../generated/rusefi_proteus_f7.ini | 6 +++--- .../com/rusefi/config/generated/Fields.java | 5 ++--- java_console/rusefi.xml | 2 +- 29 files changed, 71 insertions(+), 72 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 2c85eb1d7b..2feb2829b4 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Fri Sep 11 02:18:01 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Sep 12 00:22:23 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3698,4 +3698,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Fri Sep 11 02:18:01 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Sep 12 00:22:23 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index c3f336e0c0..02068741d4 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1168,8 +1168,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 4166548158 +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 1538310286 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1480,7 +1480,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.09.11.kin.4166548158" +#define TS_SIGNATURE "rusEFI 2020.09.12.kin.1538310286" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 56e46effc7..6bb653a9aa 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3698,4 +3698,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index db069803bf..1480095b94 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index bf6157c6ad..a26a0f9a12 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index 1e26bedeec..8cae318173 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 4abbc38c56..d7870cb9e8 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index cca050d131..fc3124fb4e 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1168,8 +1168,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 327369018 +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 2959866634 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1480,7 +1480,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.09.11.all.327369018" +#define TS_SIGNATURE "rusEFI 2020.09.12.all.2959866634" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 1e51c48dfc..29424ce330 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 327369018 -#define TS_SIGNATURE "rusEFI 2020.09.11.all.327369018" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 2959866634 +#define TS_SIGNATURE "rusEFI 2020.09.12.all.2959866634" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index cfc4ff47e1..c865cf4a8a 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 3021481729 -#define TS_SIGNATURE "rusEFI 2020.09.11.frankenso_na6.3021481729" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 401644849 +#define TS_SIGNATURE "rusEFI 2020.09.12.frankenso_na6.401644849" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 7124fbed9f..3ab8d13eb6 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 4166548158 -#define TS_SIGNATURE "rusEFI 2020.09.11.kin.4166548158" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 1538310286 +#define TS_SIGNATURE "rusEFI 2020.09.12.kin.1538310286" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 6585dfe9af..f49d224571 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 40297872 -#define TS_SIGNATURE "rusEFI 2020.09.11.mre_f4.40297872" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 2710462368 +#define TS_SIGNATURE "rusEFI 2020.09.12.mre_f4.2710462368" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 5b6a1ed631..ebe39fb3a9 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 40297872 -#define TS_SIGNATURE "rusEFI 2020.09.11.mre_f7.40297872" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 2710462368 +#define TS_SIGNATURE "rusEFI 2020.09.12.mre_f7.2710462368" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index eabe415ea5..904a608030 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 2796333129 -#define TS_SIGNATURE "rusEFI 2020.09.11.prometheus_405.2796333129" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 88347257 +#define TS_SIGNATURE "rusEFI 2020.09.12.prometheus_405.88347257" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 25a19a5cc8..1bb127f362 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 2796333129 -#define TS_SIGNATURE "rusEFI 2020.09.11.prometheus_469.2796333129" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 88347257 +#define TS_SIGNATURE "rusEFI 2020.09.12.prometheus_469.88347257" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index f192cbd18a..e3a487ef68 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 4031945258 -#define TS_SIGNATURE "rusEFI 2020.09.11.proteus_f4.4031945258" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 1404706842 +#define TS_SIGNATURE "rusEFI 2020.09.12.proteus_f4.1404706842" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 161c8f8e0e..72b07213d5 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.09.11 -#define SIGNATURE_HASH 4031945258 -#define TS_SIGNATURE "rusEFI 2020.09.11.proteus_f7.4031945258" +#define SIGNATURE_DATE 2020.09.12 +#define SIGNATURE_HASH 1404706842 +#define TS_SIGNATURE "rusEFI 2020.09.12.proteus_f7.1404706842" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 874c7b689af09cdaa3c1b4ae67411249db31eaab..5b37b7b12b2d57d769ecd94c75cf5576d7d746c9 100644 GIT binary patch delta 253071 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 ui=&8=)u-0hHvAxfM?j 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 I1p24{13qE-hX4Qo diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index df11bdf8ff..2d77e2097c 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.all.327369018" + signature = "rusEFI 2020.09.12.all.2959866634" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.all.327369018" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.all.2959866634" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 434b1801c7..e0e90a07ae 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.frankenso_na6.3021481729" + signature = "rusEFI 2020.09.12.frankenso_na6.401644849" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.frankenso_na6.3021481729" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.frankenso_na6.401644849" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:53 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:15 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 75f38026d5..0002236ef6 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.kin.4166548158" + signature = "rusEFI 2020.09.12.kin.1538310286" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.kin.4166548158" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.kin.1538310286" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Fri Sep 11 02:18:01 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Sep 12 00:22:23 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 6ae30aaf36..afd3500deb 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.mre_f4.40297872" + signature = "rusEFI 2020.09.12.mre_f4.2710462368" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.mre_f4.40297872" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.mre_f4.2710462368" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:51 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:13 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 3224b08982..95e5826bc3 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.mre_f7.40297872" + signature = "rusEFI 2020.09.12.mre_f7.2710462368" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.mre_f7.40297872" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.mre_f7.2710462368" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:49 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:11 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index 32748c4efb..984ff1759e 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.prometheus_405.2796333129" + signature = "rusEFI 2020.09.12.prometheus_405.88347257" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.prometheus_405.2796333129" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.prometheus_405.88347257" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:56 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:18 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 7a1835efe8..8056c79835 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.prometheus_469.2796333129" + signature = "rusEFI 2020.09.12.prometheus_469.88347257" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.prometheus_469.2796333129" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.prometheus_469.88347257" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:55 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:16 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index dee684f380..991aa3b6f2 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.proteus_f4.4031945258" + signature = "rusEFI 2020.09.12.proteus_f4.1404706842" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.proteus_f4.4031945258" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.proteus_f4.1404706842" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:18:00 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:21 UTC 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index d8f9b64636..d3f84363a4 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.11.proteus_f7.4031945258" + signature = "rusEFI 2020.09.12.proteus_f7.1404706842" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.11.proteus_f7.4031945258" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.12.proteus_f7.1404706842" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:58 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:20 UTC 2020 pageSize = 20000 page = 1 diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index 144e1702a7..731e9c08f6 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Sep 11 02:17:42 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1124,7 +1124,6 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; - public static final int SIGNATURE_HASH = 327369018; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1385,7 +1384,7 @@ public class Fields { public static final char TS_SD_R_COMMAND = 'r'; public static final char TS_SD_W_COMMAND = 'w'; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.09.11.all.327369018"; + public static final String TS_SIGNATURE = "rusEFI 2020.09.12.all.2959866634"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 3567efe953..be209cfd02 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - + From d2b6eedc3eb40284ba35a310f8d6eeaea5349c81 Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Sat, 12 Sep 2020 00:42:56 +0000 Subject: [PATCH 4/6] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index ed488533ce..3582dc6706 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200911 +#define VCS_DATE 20200912 From 6629a2dea4ff8236d706831145461b80ce59b6e3 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 12 Sep 2020 00:35:49 -0700 Subject: [PATCH 5/6] remove (#1789) --- firmware/integration/rusefi_config.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 0a7e05576f..6905f7c88b 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -132,7 +132,6 @@ struct_no_prefix engine_configuration_s #define CRANKING_CURVE_SIZE 8 #define IGN_LOAD_COUNT 16 -#define IGN_TPS_COUNT 16 #define IGN_RPM_COUNT 16 #define INJECTION_PIN_COUNT 12 @@ -1308,8 +1307,7 @@ float[CRANKING_ADVANCE_CURVE_SIZE] crankingAdvance ;+Optional timing advance float[CLT_CURVE_SIZE] iacCoastingBins;CLT-based idle position for coasting (used in Auto-PID Idle mode);"C", 1, 0, -100.0, 250.0, 2 float[CLT_CURVE_SIZE] iacCoasting; CLT-based idle position for coasting (used in Auto-PID Idle mode);"%", 1, 0, 0.0, 100.0, 2 -uint8_t[512] unused3288;;"units", 1, 0, -20, 100, 0 -float[IGN_TPS_COUNT] ignitionTpsBins;;"TPS", 1, 0.0, 0, 100.0, 2 +uint8_t[576] unused3288;;"units", 1, 0, -20, 100, 0 float tChargeAirCoefMin;;"Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 float tChargeAirCoefMax;;"Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 From bb9db5b9356584ebd6f9f8ce85c6af346d02feac Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sat, 12 Sep 2020 07:37:31 +0000 Subject: [PATCH 6/6] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 10 +++------- .../controllers/algo/rusefi_generated.h | 6 ++---- ...ngine_configuration_generated_structures.h | 10 +++------- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 6 ++---- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 869290 -> 869092 bytes firmware/tunerstudio/generated/rusefi.ini | 9 ++++----- .../generated/rusefi_frankenso_na6.ini | 9 ++++----- .../tunerstudio/generated/rusefi_kinetis.ini | 9 ++++----- .../tunerstudio/generated/rusefi_mre_f4.ini | 9 ++++----- .../tunerstudio/generated/rusefi_mre_f7.ini | 9 ++++----- .../generated/rusefi_prometheus_405.ini | 9 ++++----- .../generated/rusefi_prometheus_469.ini | 9 ++++----- .../generated/rusefi_proteus_f4.ini | 9 ++++----- .../generated/rusefi_proteus_f7.ini | 9 ++++----- .../com/rusefi/config/generated/Fields.java | 6 ++---- java_console/rusefi.xml | 2 +- 29 files changed, 71 insertions(+), 94 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 2feb2829b4..32cd953910 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Sep 12 00:22:23 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Sep 12 07:37:06 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3159,11 +3159,7 @@ struct engine_configuration_s { /** * offset 3288 */ - uint8_t unused3288[512]; - /** - * offset 3800 - */ - float ignitionTpsBins[IGN_TPS_COUNT]; + uint8_t unused3288[576]; /** * offset 3864 */ @@ -3698,4 +3694,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Sep 12 00:22:23 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Sep 12 07:37:06 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 02068741d4..82662a5a5e 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -831,7 +831,6 @@ #define idleVeBins_offset 6608 #define IGN_LOAD_COUNT 16 #define IGN_RPM_COUNT 16 -#define IGN_TPS_COUNT 16 #define ignition_mode_e_auto_enum "IM_ONE_COIL", "IM_INDIVIDUAL_COILS", "IM_WASTED_SPARK", "IM_TWO_COILS" #define IGNITION_PIN_COUNT 12 #define ignitionDwellForCrankingMs_offset 100 @@ -856,7 +855,6 @@ #define ignitionPins9_offset 644 #define ignitionRpmBins_offset 17376 #define ignitionTable_offset 16288 -#define ignitionTpsBins_offset 3800 #define ignMathCalculateAtIndex_offset 1488 #define INDICATOR_NAME_AC_SWITCH "AC switch" #define INDICATOR_NAME_BRAKE_DOWN "brake: down" @@ -1169,7 +1167,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 1538310286 +#define SIGNATURE_HASH 1697619300 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1480,7 +1478,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.09.12.kin.1538310286" +#define TS_SIGNATURE "rusEFI 2020.09.12.kin.1697619300" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 6bb653a9aa..9416b8f3b0 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 07:36:48 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3159,11 +3159,7 @@ struct engine_configuration_s { /** * offset 3288 */ - uint8_t unused3288[512]; - /** - * offset 3800 - */ - float ignitionTpsBins[IGN_TPS_COUNT]; + uint8_t unused3288[576]; /** * offset 3864 */ @@ -3698,4 +3694,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 07:36:48 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 1480095b94..ac33ca3930 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 07:36:48 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index a26a0f9a12..da133d4931 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 07:36:48 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index 8cae318173..66b888e362 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 07:36:48 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index d7870cb9e8..ca54af85f8 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 00:22:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Sep 12 07:36:48 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index fc3124fb4e..27bd004348 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -831,7 +831,6 @@ #define idleVeBins_offset 6608 #define IGN_LOAD_COUNT 16 #define IGN_RPM_COUNT 16 -#define IGN_TPS_COUNT 16 #define ignition_mode_e_auto_enum "IM_ONE_COIL", "IM_INDIVIDUAL_COILS", "IM_WASTED_SPARK", "IM_TWO_COILS" #define IGNITION_PIN_COUNT 12 #define ignitionDwellForCrankingMs_offset 100 @@ -856,7 +855,6 @@ #define ignitionPins9_offset 644 #define ignitionRpmBins_offset 17376 #define ignitionTable_offset 16288 -#define ignitionTpsBins_offset 3800 #define ignMathCalculateAtIndex_offset 1488 #define INDICATOR_NAME_AC_SWITCH "AC switch" #define INDICATOR_NAME_BRAKE_DOWN "brake: down" @@ -1169,7 +1167,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 2959866634 +#define SIGNATURE_HASH 2398398176 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1480,7 +1478,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.09.12.all.2959866634" +#define TS_SIGNATURE "rusEFI 2020.09.12.all.2398398176" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 29424ce330..ebd4141a06 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 2959866634 -#define TS_SIGNATURE "rusEFI 2020.09.12.all.2959866634" +#define SIGNATURE_HASH 2398398176 +#define TS_SIGNATURE "rusEFI 2020.09.12.all.2398398176" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index c865cf4a8a..73982e8058 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 401644849 -#define TS_SIGNATURE "rusEFI 2020.09.12.frankenso_na6.401644849" +#define SIGNATURE_HASH 695189723 +#define TS_SIGNATURE "rusEFI 2020.09.12.frankenso_na6.695189723" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 3ab8d13eb6..c907d02e82 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 1538310286 -#define TS_SIGNATURE "rusEFI 2020.09.12.kin.1538310286" +#define SIGNATURE_HASH 1697619300 +#define TS_SIGNATURE "rusEFI 2020.09.12.kin.1697619300" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index f49d224571..20194135f9 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 2710462368 -#define TS_SIGNATURE "rusEFI 2020.09.12.mre_f4.2710462368" +#define SIGNATURE_HASH 2668692042 +#define TS_SIGNATURE "rusEFI 2020.09.12.mre_f4.2668692042" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index ebe39fb3a9..23fdd35be8 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 2710462368 -#define TS_SIGNATURE "rusEFI 2020.09.12.mre_f7.2710462368" +#define SIGNATURE_HASH 2668692042 +#define TS_SIGNATURE "rusEFI 2020.09.12.mre_f7.2668692042" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 904a608030..226db9892a 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 88347257 -#define TS_SIGNATURE "rusEFI 2020.09.12.prometheus_405.88347257" +#define SIGNATURE_HASH 1004228499 +#define TS_SIGNATURE "rusEFI 2020.09.12.prometheus_405.1004228499" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 1bb127f362..677dcf790d 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 88347257 -#define TS_SIGNATURE "rusEFI 2020.09.12.prometheus_469.88347257" +#define SIGNATURE_HASH 1004228499 +#define TS_SIGNATURE "rusEFI 2020.09.12.prometheus_469.1004228499" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index e3a487ef68..2e44a81069 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 1404706842 -#define TS_SIGNATURE "rusEFI 2020.09.12.proteus_f4.1404706842" +#define SIGNATURE_HASH 1831173616 +#define TS_SIGNATURE "rusEFI 2020.09.12.proteus_f4.1831173616" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 72b07213d5..37467d04eb 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.09.12 -#define SIGNATURE_HASH 1404706842 -#define TS_SIGNATURE "rusEFI 2020.09.12.proteus_f7.1404706842" +#define SIGNATURE_HASH 1831173616 +#define TS_SIGNATURE "rusEFI 2020.09.12.proteus_f7.1831173616" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 5b37b7b12b2d57d769ecd94c75cf5576d7d746c9..cae02be428ca5c1ce3906664b2f1c9b1c0f29be6 100644 GIT binary patch delta 238269 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 delta 238424 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 - +