diff --git a/firmware/console_util/datalogging.c b/firmware/console_util/datalogging.c index 47ee0f2ed2..43d95201b9 100644 --- a/firmware/console_util/datalogging.c +++ b/firmware/console_util/datalogging.c @@ -88,7 +88,7 @@ static bool validateBuffer(Logging *logging, uint32_t extraLen, const char *text void append(Logging *logging, const char *text) { efiAssertVoid(text != NULL, "append NULL"); - uint32_t extraLen = strlen(text); + uint32_t extraLen = efiStrlen(text); int isError = validateBuffer(logging, extraLen, text); if (isError) { return; @@ -108,7 +108,7 @@ void appendFast(Logging *logging, const char *text) { // c = *s++; // *logging->linePointer++ = c; // } while (c != '\0'); - int extraLen = strlen(text); + int extraLen = efiStrlen(text); strcpy(logging->linePointer, text); logging->linePointer += extraLen; } @@ -281,9 +281,9 @@ static void printWithLength(char *line) { * When we work with actual hardware, it is faster to invoke 'chSequentialStreamWrite' for the * whole buffer then to invoke 'chSequentialStreamPut' once per character. */ - int len = strlen(line); + int len = efiStrlen(line); strcpy(header, "line:"); - char *p = header + strlen(header); + char *p = header + efiStrlen(header); p = itoa10(p, len); *p++ = ':'; *p++ = '\0'; @@ -365,11 +365,11 @@ void scheduleIntValue(Logging *logging, const char *msg, int value) { void scheduleLogging(Logging *logging) { // this could be done without locking - int newLength = strlen(logging->buffer); + int newLength = efiStrlen(logging->buffer); bool alreadyLocked = lockOutputBuffer(); // I hope this is fast enough to operate under sys lock - int curLength = strlen(pendingBuffer); + int curLength = efiStrlen(pendingBuffer); if (curLength + newLength >= DL_OUTPUT_BUFFER) { /** * if no one is consuming the data we have to drop it @@ -407,7 +407,7 @@ void printPending(void) { pendingBuffer[0] = 0; // reset pending buffer unlockOutputBuffer(); - if (strlen(outputBuffer) > 0) { + if (efiStrlen(outputBuffer) > 0) { printWithLength(outputBuffer); } } diff --git a/firmware/controllers/lcd_controller.cpp b/firmware/controllers/lcd_controller.cpp index ec47891070..f6086acf49 100644 --- a/firmware/controllers/lcd_controller.cpp +++ b/firmware/controllers/lcd_controller.cpp @@ -23,7 +23,7 @@ extern engine_configuration_s *engineConfiguration; #define NUMBER_OF_DIFFERENT_LINES 4 char * appendStr(char *ptr, const char *suffix) { - for (uint32_t i = 0; i < strlen(suffix); i++) { + for (uint32_t i = 0; i < efiStrlen(suffix); i++) { *ptr++ = suffix[i]; } return ptr; diff --git a/firmware/controllers/trigger/trigger_mazda.cpp b/firmware/controllers/trigger/trigger_mazda.cpp index f73d23e78e..25a9de2585 100644 --- a/firmware/controllers/trigger/trigger_mazda.cpp +++ b/firmware/controllers/trigger/trigger_mazda.cpp @@ -129,6 +129,6 @@ void configureMazdaProtegeLx(trigger_shape_s *s) { // s->shaftPositionEventCount = 2 + 8; - s->shaftPositionEventCount = 8; + s->shaftPositionEventCount = s->getSize(); s->isSynchronizationNeeded = false; } diff --git a/firmware/controllers/trigger/trigger_mitsubishi.cpp b/firmware/controllers/trigger/trigger_mitsubishi.cpp index 649a05eeb9..fc735d8b44 100644 --- a/firmware/controllers/trigger/trigger_mitsubishi.cpp +++ b/firmware/controllers/trigger/trigger_mitsubishi.cpp @@ -11,7 +11,6 @@ void configureFordAspireTriggerShape(trigger_shape_s * s) { s->isSynchronizationNeeded = false; s->reset(FOUR_STROKE_CAM_SENSOR); - s->shaftPositionEventCount = 10; float x = 121.90; float y = 110.86; @@ -27,6 +26,8 @@ void configureFordAspireTriggerShape(trigger_shape_s * s) { s->addEvent(x + 360 + y, T_SECONDARY, TV_HIGH); s->addEvent(x + 540, T_SECONDARY, TV_LOW); s->addEvent(720, T_PRIMARY, TV_LOW); + + s->shaftPositionEventCount = s->getSize(); } void initializeMitsubishi4g18(trigger_shape_s *s) { diff --git a/firmware/util/efilib.cpp b/firmware/util/efilib.cpp index d18095a972..6e6c4f47f6 100644 --- a/firmware/util/efilib.cpp +++ b/firmware/util/efilib.cpp @@ -49,9 +49,13 @@ float maxF(float i1, float i2) { return i1 > i2 ? i1 : i2; } +int efiStrlen(const char *param) { + return strlen(param); +} + int indexOf(const char *string, char ch) { // todo: there should be a standard function for this - int len = strlen(string); + int len = efiStrlen(string); for (int i = 0; i < len; i++) { if (string[i] == ch) { return i; diff --git a/firmware/util/efilib.h b/firmware/util/efilib.h index 83efc50ae7..9ab2dc6736 100644 --- a/firmware/util/efilib.h +++ b/firmware/util/efilib.h @@ -33,6 +33,7 @@ extern "C" const char * boolToString(bool value); +int efiStrlen(const char *param); int indexOf(const char *string, char ch); float atoff(const char *string); int atoi(const char *string); diff --git a/firmware/util/histogram.c b/firmware/util/histogram.c index b4fa5d76bf..d520c161d5 100644 --- a/firmware/util/histogram.c +++ b/firmware/util/histogram.c @@ -82,9 +82,9 @@ int histogramGetIndex(int64_t value) { * @brief Reset histogram_s to orignal state */ void initHistogram(histogram_s *h, const char *name) { - if(strlen(name) > sizeof(h->name) - 1) { + if (efiStrlen(name) > sizeof(h->name) - 1) { firmwareError("Histogram name [%s] too long", name); - } + } strcpy(h->name, name); h->total_value = 0; h->total_count = 0; @@ -99,7 +99,7 @@ void hsAdd(histogram_s *h, int64_t value) { int count = 1; h->total_value += value; h->total_count += count; - efiAssertVoid(index < BOUND_LENGTH, "histogram issue" ); + efiAssertVoid(index < BOUND_LENGTH, "histogram issue"); h->values[index] += count; } @@ -112,18 +112,18 @@ int hsReport(histogram_s *h, int* report) { int index = 0; if (h->total_count <= 5) { - for (int j = 0; j < BOUND_LENGTH; j++) { + for (int j = 0; j < BOUND_LENGTH; j++) { for (int k = 0; k < h->values[j]; k++) { report[index++] = (bounds[j] + bounds[j + 1]) / 2; } - } + } return index; } int minIndex = 0; while (h->values[minIndex] == 0) { minIndex++; - } + } report[index++] = h->values[minIndex]; int64_t acc = 0; @@ -133,10 +133,10 @@ int hsReport(histogram_s *h, int* report) { // Always drop at least 1 'non-confident' sample... if (k == 0) { k = 1; - } + } if (k == h->total_count) { k = h->total_count - 1; - } + } // 'k' is desired number of samples. while (acc + h->values[minIndex] < k) acc += h->values[minIndex++]; @@ -148,7 +148,7 @@ int hsReport(histogram_s *h, int* report) { float d = bounds[minIndex]; if (acc != k) d += (bounds[minIndex + 1] - 1 - bounds[minIndex]) * (k - acc) / h->values[minIndex]; - report[index++] = (int)d; + report[index++] = (int) d; } int maxIndex = BOUND_LENGTH - 1; diff --git a/unit_tests/efifeatures.h b/unit_tests/efifeatures.h index 810cff8dc0..3698196c90 100644 --- a/unit_tests/efifeatures.h +++ b/unit_tests/efifeatures.h @@ -19,6 +19,7 @@ #define EFI_SUPPORT_NISSAN_PRIMERA TRUE #define EFI_SIGNAL_EXECUTOR_ONE_TIMER TRUE +#define EFI_SIGNAL_EXECUTOR_SLEEP FALSE #define EFI_SHAFT_POSITION_INPUT TRUE #define EFI_ENGINE_CONTROL TRUE