diff --git a/firmware/controllers/algo/obd_error_codes.h b/firmware/controllers/algo/obd_error_codes.h index 92dd57942d..5c76927fab 100644 --- a/firmware/controllers/algo/obd_error_codes.h +++ b/firmware/controllers/algo/obd_error_codes.h @@ -2072,7 +2072,7 @@ typedef enum { CUSTOM_ERR_6706 = 6706, CUSTOM_ERR_TIMER_TEST_CALLBACK_NOT_HAPPENED = 6707, CUSTOM_ERR_TIMER_TEST_CALLBACK_WRONG_TIME = 6708, - CUSTOM_ERR_PIN_COUNT_TOO_LARGE = 6709, + CUSTOM_ERR_6709 = 6709, CUSTOM_DUTY_INVALID = 6710, CUSTOM_DUTY_TOO_HIGH = 6711, CUSTOM_ERR_PWM_STATE_ASSERT = 6712, diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index dc0797cca5..01446a9d0d 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -52,18 +52,20 @@ EnginePins::EnginePins() { dizzyOutput.name = PROTOCOL_DIZZY_NAME; tachOut.name = PROTOCOL_TACH_NAME; - efiAssertVoid(CUSTOM_ERR_PIN_COUNT_TOO_LARGE, (sizeof(sparkNames) / sizeof(char*)) >= IGNITION_PIN_COUNT, "spark pin count"); + static_assert(efi::size(sparkNames) >= IGNITION_PIN_COUNT, "Too many ignition pins"); for (int i = 0; i < IGNITION_PIN_COUNT;i++) { enginePins.coils[i].name = sparkNames[i]; enginePins.coils[i].shortName = sparkShortNames[i]; } - efiAssertVoid(CUSTOM_ERR_PIN_COUNT_TOO_LARGE, (sizeof(injectorNames) / sizeof(char*)) >= INJECTION_PIN_COUNT, "inj pin count"); + + static_assert(efi::size(injectorNames) >= INJECTION_PIN_COUNT, "Too many injection pins"); for (int i = 0; i < INJECTION_PIN_COUNT;i++) { enginePins.injectors[i].injectorIndex = i; enginePins.injectors[i].name = injectorNames[i]; enginePins.injectors[i].shortName = injectorShortNames[i]; } - efiAssertVoid(CUSTOM_ERR_PIN_COUNT_TOO_LARGE, (sizeof(auxValveShortNames) / sizeof(char*)) >= AUX_DIGITAL_VALVE_COUNT, "aux pin count"); + + static_assert(efi::size(auxValveShortNames) >= AUX_DIGITAL_VALVE_COUNT, "Too many aux valve pins"); for (int i = 0; i < AUX_DIGITAL_VALVE_COUNT;i++) { enginePins.auxValve[i].name = auxValveShortNames[i]; } diff --git a/firmware/util/efilib.h b/firmware/util/efilib.h index 9706e396ea..620117ed22 100644 --- a/firmware/util/efilib.h +++ b/firmware/util/efilib.h @@ -74,6 +74,17 @@ float expf_taylor(float x); #ifdef __cplusplus } + +// C++ helpers go here +namespace efi +{ +template +constexpr size_t size(const T (&)[N]) +{ + return N; +} +} // namespace efi + #endif /* __cplusplus */ #endif /* EFILIB_H_ */