From b21455e1781eb9b72e645334d5b4c216d227beec Mon Sep 17 00:00:00 2001 From: rusefillc Date: Tue, 8 Aug 2023 23:02:20 -0400 Subject: [PATCH] CLI encapsulation preparing for libfirmware move --- firmware/console/eficonsole.cpp | 4 ++++ firmware/util/cli_registry.cpp | 9 +++++++-- firmware/util/cli_registry.h | 1 + unit_tests/global_mocks.cpp | 2 ++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/firmware/console/eficonsole.cpp b/firmware/console/eficonsole.cpp index ece3a832c4..3c5e27f643 100644 --- a/firmware/console/eficonsole.cpp +++ b/firmware/console/eficonsole.cpp @@ -208,6 +208,10 @@ void onCliDuplicateError(const char *token) { firmwareError(ObdCode::CUSTOM_SAME_TWICE, "Same action twice [%s]", token); } +void onCliOverflowError() { + firmwareError(ObdCode::CUSTOM_CONSOLE_TOO_MANY, "Too many console actions"); +} + void initializeConsole() { initConsoleLogic(); diff --git a/firmware/util/cli_registry.cpp b/firmware/util/cli_registry.cpp index bc270c5f50..f85649ed75 100644 --- a/firmware/util/cli_registry.cpp +++ b/firmware/util/cli_registry.cpp @@ -14,9 +14,10 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#include "pch.h" #include #include +#include +#include #include "efiprintf.h" #include "efistringutil.h" #include "cli_registry.h" @@ -58,7 +59,11 @@ static void doAddAction(const char *token, action_type_e type, Void callback, vo } } - efiAssertVoid(ObdCode::CUSTOM_CONSOLE_TOO_MANY, consoleActionCount < CONSOLE_MAX_ACTIONS, "Too many console actions"); + if (consoleActionCount >= CONSOLE_MAX_ACTIONS) { + onCliOverflowError(); + return; + } + TokenCallback *current = &consoleActions[consoleActionCount++]; current->token = token; current->parameterType = type; diff --git a/firmware/util/cli_registry.h b/firmware/util/cli_registry.h index f4da7d9085..c120943a42 100644 --- a/firmware/util/cli_registry.h +++ b/firmware/util/cli_registry.h @@ -105,6 +105,7 @@ void addConsoleActionSSSSS(const char *token, VoidCharPtrCharPtrCharPtrCharPtrCh void onCliCaseError(const char *token); void onCliDuplicateError(const char *token); +void onCliOverflowError(); #ifdef __cplusplus } diff --git a/unit_tests/global_mocks.cpp b/unit_tests/global_mocks.cpp index d9da4f67f1..df4bd84d49 100644 --- a/unit_tests/global_mocks.cpp +++ b/unit_tests/global_mocks.cpp @@ -34,3 +34,5 @@ void onCliCaseError(const char *token) { void onCliDuplicateError(const char *token) { } +void onCliOverflowError() { +}