diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/nhd0420.c b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/nhd0420.c index 3623698..6b4d906 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/nhd0420.c +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/nhd0420.c @@ -407,6 +407,8 @@ ErrorStatus setCursorToPosition(const struct DisplayDevice* self, unsigned int r static ErrorStatus write(const struct DisplayDevice* self, const char* buffer, size_t length, size_t row, size_t column) { + ///TODO REMOVE +// volatile int i; ErrorStatus returnValue = SUCCESS; if (self->initialized) { @@ -418,6 +420,8 @@ static ErrorStatus write(const struct DisplayDevice* self, const char* buffer, s // Set cursor on display returnValue = NHD0420_setCursorToPosition((const struct NHD0420*)self, row, column); +// for (i = 0; i < 3000; i++); + if (returnValue == SUCCESS) { // Send one byte at a time (display requirement) @@ -427,6 +431,7 @@ static ErrorStatus write(const struct DisplayDevice* self, const char* buffer, s returnValue = NHD0420_sendData((const struct NHD0420*)self, &buffer[loopcounter], 1); } } +// for (i = 0; i < 1000; i++); } else { diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Makefile b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Makefile index e1b00e0..faada97 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Makefile +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Makefile @@ -3,10 +3,14 @@ RELEASE_PRODUCT = \""S0\"" RELEASE_MAJOR = 0 RELEASE_MINOR = 9 RELEASE_BRANCH = 0 -RELEASE_PATCH = 3 +RELEASE_PATCH = 4 +# Define the platform to use PLATFORM_OLIMEX_STM32_H107 = OLI_STM32_H107 +# Define language possibilities +LANGUAGE_ENGLISH = 0 +LANGUAGE_FRENCH = 1 export RELEASE_DEFINES = \ @@ -18,6 +22,9 @@ export RELEASE_DEFINES = \ export PLATFORM = -D$(PLATFORM_OLIMEX_STM32_H107) +export LANGUAGE = -DLANGUAGE=$(LANGUAGE_ENGLISH) +# export LANGUAGE = -DLANGUAGE=$(LANGUAGE_FRENCH) + export ADDITIONAL_SWITCHES = \ -DENABLE_SERIAL_LOGGING diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/buglist.txt b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/buglist.txt index a19c7c1..3171298 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/buglist.txt +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/buglist.txt @@ -7,4 +7,5 @@ FIXED -- PIN change verification not functional \ No newline at end of file +- PIN change verification not functional +- Multi-Language support added to menu. All strings/messages outsourced to dedicated file. MakeFile adapted \ No newline at end of file diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/Makefile b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/Makefile index 3fb849c..25a5ed5 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/Makefile +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/Makefile @@ -76,7 +76,7 @@ OLI_STM32_H107: export OBJ_DIR := obj_release/ OLI_STM32_H107: export OBJECTS := $(OBJECTS_GEN) OLI_STM32_H107: export OBJECTS_MAIN := $(OBJECTS_MAIN) OLI_STM32_H107: export CROSS_COMPILE := arm-none-eabi- -OLI_STM32_H107: export CCFLAGS := -c -O2 -Wall -Werror -g -lc -lm -fno-common -mcpu=cortex-m3 -mthumb $(PLATFORM) $(RELEASE_DEFINES) $(INCLUDES) +OLI_STM32_H107: export CCFLAGS := -c -O2 -Wall -Werror -g -lc -lm -fno-common -mcpu=cortex-m3 -mthumb $(PLATFORM) $(RELEASE_DEFINES) $(LANGUAGE) $(INCLUDES) OLI_STM32_H107: export ASFLAGS := -g -mapcs-32 OLI_STM32_H107: export LDFLAGS := -g -nostartfiles -mcpu=cortex-m3 -mthumb -T$(LINKER_SCRIPTS_DIR)/$(LINKER_SCRIPT) -Wl,-Map=hsb_mrts_OLI_STM32_H107.map OLI_STM32_H107: export LDARCHIVES := -L. -L$(STM32_STDPERIPH_ROOT) -L$(PLATFORM_DIR) -L$(HAL_DIR) -lhsb_mrts_OLI_STM32_H107 -lPlatform -lHAL -lSTM_StdPeriph diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/Display.h b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/Display.h index a72aea4..885c504 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/Display.h +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/Display.h @@ -261,6 +261,26 @@ extern ErrorStatus Display_backspace(struct Display* self); extern ErrorStatus Display_write(struct Display* self, const char* buffer, size_t row, size_t column); +/** ---------------------------------------------------------------------------- + * Display_writeCentered + * Puts a string on the specified row of the display in centered mode + * + * @param self The display object + * @param buffer String/message to write + * @param row The row to put the message to + * + * @return ErrorStatus SUCCESS if putting message to display was + * successful + * ERROR otherwise, especially + * - Message too long + * - Row outside display boundaries + * + * @todo + * ----------------------------------------------------------------------------- + */ +extern ErrorStatus Display_writeCentered(struct Display* self, const char* buffer, unsigned int row); + + /** ---------------------------------------------------------------------------- * Display_feedRefreshCounter * Feeds the refresh counter for display content diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/MenuText.h b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/MenuText.h index 38d2ed1..fd99b80 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/MenuText.h +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/inc/MenuText.h @@ -38,7 +38,319 @@ // ----------------------------------------------------------------------------- #define MENUTEXT_NUMBER_OF_LANGUAGES (2) -#define MENUTEXT_ENGLISH (0) + +// DEFINE STRING LENGTH FOR DIFFERENT ENTRIES +#define MENUTEXT_ROW1_POPUP_MAX_LENGTH (17) +#define MENUTEXT_POPUP_MESSAGE_LENGTH (21) + +// Repairscreen string length +#define MENUTEXT_REPAIRSCREEN_LENGTH (7) + +#define MENUTEXT_PRESET_MAX_LENGTH (7) + +#define MENUTEXT_CHANGEPIN_MAX_LENGTH (15) + + +// ----------------------- +// WARNINGS +// ----------------------- +static const char MenuText_WARNING[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_ROW1_POPUP_MAX_LENGTH] = +{ + { + "!!WARNING!!" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_WARNING_COVER_OPEN[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "COVER OPEN" + }, + { + //FRENCH TBW + } +}; + + +// ----------------------- +// ERRORS +// ----------------------- +static const char MenuText_ERROR[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_ROW1_POPUP_MAX_LENGTH] = +{ + { + "!!ERROR!!" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_ERROR_COVER_OPEN[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "COVER OPEN" + }, + { + //FRENCH TBW + } +}; + + +static const char MenuText_ERROR_PROCESS_FAILED[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "PROCESS FAILED" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_ERROR_CRC_PIN[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "PIN CRC ERROR" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_ERROR_CRC_PARAMETERS[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "PARAMETERS CRC ERROR" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_ERROR_CRC_PRESETS[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "PRESETS CRC ERROR" + }, + { + //FRENCH TBW + } +}; + +// ----------------------- +// Common screen messages +// ----------------------- + +static const char MenuText_X_CONTINUE[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "Hit X to continue" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_REPAIR_SCREEN[MENUTEXT_NUMBER_OF_LANGUAGES][4][MENUTEXT_REPAIRSCREEN_LENGTH] = +{ + { + "total", // Indicates the total repair time + "remain", // Indicates the remaining repair time + "R", // Row identifier. DO NOT USE MORE THAN ONE LETTER! The number of the row (1,2,3) is attached dynamically + "ERROR" // Error identifier in case a ROW is in error-state. Will be written instead of the current voltage + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_REPAIR_SCREEN_INIT[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_ROW1_POPUP_MAX_LENGTH] = +{ + { + "Initialising" // Indicates start of a repair + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_PAUSE[MENUTEXT_NUMBER_OF_LANGUAGES][5][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "REPAIR BUSY", + "Hit X to PAUSE", + "!!PAUSE!!", + "Hit ENT to continue", + "Hit X to RESET" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_FINISH[MENUTEXT_NUMBER_OF_LANGUAGES][2][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "REPAIR FINISHED", + "Hit ENT to continue", + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_PRINT_PRESET[MENUTEXT_NUMBER_OF_LANGUAGES][5][MENUTEXT_PRESET_MAX_LENGTH] = +{ + { + "Preset", + "info", + "Start:", + "Time:", + "Volt:" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_CHANGE_PIN[MENUTEXT_NUMBER_OF_LANGUAGES][2][MENUTEXT_CHANGEPIN_MAX_LENGTH] = +{ + { + " New PIN:", + " Repeat PIN:" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_INTERLOCK_STATUS[MENUTEXT_NUMBER_OF_LANGUAGES][3][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "Cover Interlock is", + "closed", + "open" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_CONFIRM_PIN[MENUTEXT_NUMBER_OF_LANGUAGES][2][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "PIN OK", + "PIN DENIED" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_CONFIRM_NEW_PIN[MENUTEXT_NUMBER_OF_LANGUAGES][2][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "New PIN accepted", + "New PIN denied" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_SAFE_PRESET[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "Preset saved" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_SELECT_PRESET[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH - 3] = +{ + { + "Selected preset:" + }, + { + //FRENCH TBW + } +}; + + +static const char MenuText_SAFE_CONSTANTS[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "Constants saved" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_INSERT_PIN[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "Insert PIN" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_VOLTAGE_IN_HEADER[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_ROW1_POPUP_MAX_LENGTH] = +{ + { + "Voltage input" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_VOLTAGE_OUT_HEADER[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_ROW1_POPUP_MAX_LENGTH] = +{ + { + "Voltage output" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_VOLTAGE_ROW[MENUTEXT_NUMBER_OF_LANGUAGES][5] = +{ + { + "Row" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_CONSTANTS_HEADER[MENUTEXT_NUMBER_OF_LANGUAGES][MENUTEXT_ROW1_POPUP_MAX_LENGTH] = +{ + { + "PID constants" + }, + { + //FRENCH TBW + } +}; + +static const char MenuText_VOLTAGE_OUT_CLEANUP[MENUTEXT_NUMBER_OF_LANGUAGES][2][MENUTEXT_POPUP_MESSAGE_LENGTH] = +{ + { + "All rows reset to 0V", + "Press X to continue" + }, + { + //FRENCH TBW + } +}; // ----------------------- // OPERATOR MENU diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/Display.c b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/Display.c index a6839e4..41e8f12 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/Display.c +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/Display.c @@ -232,6 +232,69 @@ ErrorStatus Display_write(struct Display* self, const char* buffer, size_t row, } +ErrorStatus Display_writeCentered(struct Display* self, const char* buffer, unsigned int row) +{ + ErrorStatus returnValue = SUCCESS; + + if (self->initialized) + { + int length = 0; + int column; + // Prior to any action on the display memory, perform necessary checkings + if (returnValue == SUCCESS) + { + // Check that the row coordinate does not exceed the display boundary + if (row - 1 >= self->displayDevice->parameters.numberOfRows) + { + returnValue = ERROR; + } + } + + if (returnValue == SUCCESS) + { + length = strlen(buffer); + // Check that the length request does not exceed the display boundary + // This is checked in combination with the column coordinate + // numberOfColumns - column >= length + // must be valid in order to put the requested message on display + if (length > self->displayDevice->parameters.numberOfColumns ) + { + returnValue = ERROR; + } + } + + if (returnValue == SUCCESS) + { + // Calculate the column to start writing for a centered string + // simply put, the length of the row minus the length of the string divided by two + column = (self->displayDevice->parameters.numberOfColumns - length) / 2; + // In case of an uneven string length, add one column + column += ((self->displayDevice->parameters.numberOfColumns - length) % 2); + // Add one column because the driver should start at column 1 (human readable) + column += 1; + + } + + if (returnValue == SUCCESS) + { + int loopCounter; + for (loopCounter = 0; loopCounter < length; loopCounter++) + { + DisplayContent_updateCharacter(&self->displayContent, (row - 1), (column - 1) + loopCounter, buffer[loopCounter]); + } + + xSemaphoreGive(self->displayWriteRequest); + + } + } + else + { + returnValue = ERROR; + } + return returnValue; + } + + void Display_feedRefreshCounter(struct Display* self) { if (self->initialized) diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/hsb-mrts.c b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/hsb-mrts.c index 8c7439d..29f09a9 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/hsb-mrts.c +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/hsb-mrts.c @@ -96,7 +96,7 @@ ErrorStatus hsb_generateStartScreen(struct Display* Display) Version_getInstance()->minor, Version_getInstance()->branch, Version_getInstance()->patch); - Display_write(mainDisplay, buffer, 3, 4); + Display_writeCentered(mainDisplay, buffer, 3); } else { diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/repairMenu.c b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/repairMenu.c index 03ec113..3f24164 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/repairMenu.c +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/repairMenu.c @@ -70,6 +70,13 @@ #define REPAIRMENU_POPUPSCREEN_TIME_MS (1000) + +#ifdef LANGUAGE + #if ((LANGUAGE >= MENUTEXT_NUMBER_OF_LANGUAGES) || (LANGUAGE < 0)) + #error "LANGUAGE INDEX OUT OF BOUNDS"; + #endif +#endif + // ----------------------------------------------------------------------------- // Type definitions // ----------------------------------------------------------------------------- @@ -80,7 +87,7 @@ // File-scope variables // ----------------------------------------------------------------------------- - +static int languageIndex = LANGUAGE; // ----------------------------------------------------------------------------- // Function declarations @@ -125,7 +132,6 @@ static void repairMenu_configPID(struct MenuCore* self); static void repairMenu_configConfirmPIDKp(struct MenuCore* self); static void repairMenu_configConfirmPIDKi(struct MenuCore* self); static void repairMenu_configConfirmPIDKd(struct MenuCore* self); -static void repairMenu_printConfigPreset(struct MenuCore* self); static void repairMenu_printPINVerification(struct MenuCore* self); static void repairMenu_printVoltageOutput(struct MenuCore* self); static void repairMenu_printPIDConstants(struct MenuCore* self); @@ -231,7 +237,7 @@ void repairMenu_interlockWarning(struct RepairMenu* self, T_INTERLOCK_ID interlo if (interlockID == COMMON_INTERLOCK) { - snprintf(self->menuCore->warningMessage, sizeof(self->menuCore->warningMessage) / sizeof(self->menuCore->warningMessage[0]), "COVER OPEN"); + snprintf(self->menuCore->warningMessage, sizeof(self->menuCore->warningMessage) / sizeof(self->menuCore->warningMessage[0]), MenuText_WARNING_COVER_OPEN[languageIndex]); } } @@ -242,7 +248,7 @@ void repairMenu_interlockFailed(struct RepairMenu* self, T_INTERLOCK_ID interloc if (interlockID == COMMON_INTERLOCK) { - snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), "COVER OPEN"); + snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), MenuText_ERROR_COVER_OPEN[languageIndex]); } } @@ -250,7 +256,7 @@ void repairMenu_interlockFailed(struct RepairMenu* self, T_INTERLOCK_ID interloc void repairMenu_processFailed(struct RepairMenu* self) { MenuCore_changeState(self->menuCore, RM_ERROR_STATE); - snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), "PROCESS FAILED"); + snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), MenuText_ERROR_PROCESS_FAILED[languageIndex]); } @@ -264,15 +270,15 @@ void repairMenu_printCRCFailure(struct RepairMenu* self, T_ErrorCode errorCode) MenuCore_changeState(self->menuCore, RM_ERROR_STATE); if (errorCode == ERROR_CRC_PIN) { - snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), "PIN CRC ERROR"); + snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), MenuText_ERROR_CRC_PIN[languageIndex]); } else if (errorCode == ERROR_CRC_PARAMETERS) { - snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), "PARAMETERS CRC ERROR"); + snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), MenuText_ERROR_CRC_PARAMETERS[languageIndex]); } else if (errorCode == ERROR_CRC_PRESETS) { - snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), "PRESETS CRC ERROR"); + snprintf(self->menuCore->errorMessage, sizeof(self->menuCore->errorMessage) / sizeof(self->menuCore->errorMessage[0]), MenuText_ERROR_CRC_PRESETS[languageIndex]); } } @@ -296,17 +302,17 @@ static int repairMenu_getValueFromInsertString(struct MenuCore* self) static void repairMenu_printError(struct MenuCore* self) { - Display_write(self->display, "!!ERROR!!", 1, 6); - Display_write(self->display, self->errorMessage, 2, 1 + ((self->display->displayDevice->parameters.numberOfColumns - strlen(self->errorMessage)) / 2)); - Display_write(self->display, "Hit X to continue", 4, 2); + Display_writeCentered(self->display, MenuText_ERROR[languageIndex], 1); + Display_writeCentered(self->display, self->errorMessage, 2); + Display_writeCentered(self->display, MenuText_X_CONTINUE[languageIndex], 4); } static void repairMenu_printWarning(struct MenuCore* self) { - Display_write(self->display, "!!WARNING!!", 1, 5); - Display_write(self->display, self->warningMessage, 2, 1 + ((self->display->displayDevice->parameters.numberOfColumns - strlen(self->warningMessage)) / 2)); - Display_write(self->display, "Hit X to continue", 4, 2); + Display_writeCentered(self->display, MenuText_WARNING[languageIndex], 1); + Display_writeCentered(self->display, self->warningMessage, 2); + Display_writeCentered(self->display, MenuText_X_CONTINUE[languageIndex], 4); } @@ -330,12 +336,12 @@ static void repairMenu_printRepair(struct MenuCore* self) struct Time totalTime; RTC_calculateTimeFromSeconds(repairProcess_getTotalRepairtime(repairProcess), &totalTime); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%02d:%02d:%02d total", totalTime.hours, totalTime.minutes, totalTime.seconds); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%02d:%02d:%02d %s", totalTime.hours, totalTime.minutes, totalTime.seconds, MenuText_REPAIR_SCREEN[languageIndex][0]); Display_write(self->display, buffer, 1, 4); struct Time remainingTime; RTC_calculateTimeFromSeconds(repairProcess_getRemainingRepairTime(repairProcess), &remainingTime); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%02d:%02d:%02d remain", remainingTime.hours, remainingTime.minutes, remainingTime.seconds); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%02d:%02d:%02d %s", remainingTime.hours, remainingTime.minutes, remainingTime.seconds, MenuText_REPAIR_SCREEN[languageIndex][1]); Display_write(self->display, buffer, 2, 4); // Regulation is unique for each row @@ -346,7 +352,7 @@ static void repairMenu_printRepair(struct MenuCore* self) const struct RepairProcessRow* row; row = repairProcess_getRowInformation(repairProcess, loopCounter); - snprintf (buffer, sizeof(buffer) / sizeof(buffer[0]), "R%d", loopCounter + 1); + snprintf (buffer, sizeof(buffer) / sizeof(buffer[0]), "%1s%d", MenuText_REPAIR_SCREEN[languageIndex][2], loopCounter + 1); Display_write(self->display, buffer, 3, ((loopCounter * (self->display->displayDevice->parameters.numberOfColumns / REPAIRPROCESS_NUMBER_OF_ROWS) + loopCounter) + (self->display->displayDevice->parameters.numberOfColumns / REPAIRPROCESS_NUMBER_OF_ROWS) / strlen(buffer))); if (!row->errorData.rowHasError) @@ -357,7 +363,7 @@ static void repairMenu_printRepair(struct MenuCore* self) } else { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "ERROR "); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s ", MenuText_REPAIR_SCREEN[languageIndex][3]); Display_write(self->display, buffer, 4, (loopCounter + (loopCounter * (self->display->displayDevice->parameters.numberOfColumns / REPAIRPROCESS_NUMBER_OF_ROWS)) + (self->display->displayDevice->parameters.numberOfColumns / REPAIRPROCESS_NUMBER_OF_ROWS) / strlen(buffer))); } } @@ -365,31 +371,30 @@ static void repairMenu_printRepair(struct MenuCore* self) } else { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Initialising"); - Display_write(self->display, buffer, 1, 6); + Display_writeCentered(self->display, MenuText_REPAIR_SCREEN_INIT[languageIndex], 1); } } static void repairMenu_printAskPause(struct MenuCore* self) { - Display_write(self->display, "REPAIR BUSY", 2, 6); - Display_write(self->display, "Hit X to PAUSE", 3, 2); + Display_writeCentered(self->display, MenuText_PAUSE[languageIndex][0], 2); + Display_writeCentered(self->display, MenuText_PAUSE[languageIndex][1], 3); } static void repairMenu_printPause(struct MenuCore* self) { - Display_write(self->display, "!!PAUSE!!", 2, 6); - Display_write(self->display, "Hit ENT to continue", 3, 2); - Display_write(self->display, "Hit X to RESET", 4, 2); + Display_writeCentered(self->display, MenuText_PAUSE[languageIndex][2], 2); + Display_writeCentered(self->display, MenuText_PAUSE[languageIndex][3], 3); + Display_writeCentered(self->display, MenuText_PAUSE[languageIndex][4], 4); } static void repairMenu_printFinish(struct MenuCore* self) { - Display_write(self->display, "REPAIR FINISHED", 2, 3); - Display_write(self->display, "Hit ENT to continue", 4, 2); + Display_writeCentered(self->display, MenuText_FINISH[languageIndex][0], 2); + Display_writeCentered(self->display, MenuText_FINISH[languageIndex][1], 4); } @@ -399,27 +404,27 @@ static void repairMenu_printPreset(struct MenuCore* self) int loopCounter; char buffer[self->display->displayDevice->parameters.numberOfColumns]; // Print the preset information of the current preset under the cursor, NOT the preset that is currently selected - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Preset %d info", self->selectionIndex); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s %d %s", MenuText_PRINT_PRESET[languageIndex][0], self->selectionIndex, MenuText_PRINT_PRESET[languageIndex][1]); // Always print Row1 (index0), ignoring the scrolling index Display_write(self->display, buffer, 1, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Start:"); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s", MenuText_PRINT_PRESET[languageIndex][2]); Display_write(self->display, buffer, 2, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Time:"); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s", MenuText_PRINT_PRESET[languageIndex][3]); Display_write(self->display, buffer, 3, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Volt:"); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s", MenuText_PRINT_PRESET[languageIndex][4]); Display_write(self->display, buffer, 4, 1); for (loopCounter = 0; loopCounter < RepairPresets_getPreset(self->selectionIndex)->numberOfStages; loopCounter++) { snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5dm", (RepairPresets_getPreset(self->selectionIndex)->preset[loopCounter].softstartDuration / 60)); - Display_write(self->display, buffer, 2, 8 + loopCounter * 7); + Display_write(self->display, buffer, 2, MENUTEXT_PRESET_MAX_LENGTH + 1 + loopCounter * 7); snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5dm", (RepairPresets_getPreset(self->selectionIndex)->preset[loopCounter].duration / 60)); - Display_write(self->display, buffer, 3, 8 + loopCounter * 7); + Display_write(self->display, buffer, 3, MENUTEXT_PRESET_MAX_LENGTH + 1 + loopCounter * 7); snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5dV", RepairPresets_getPreset(self->selectionIndex)->preset[loopCounter].voltage); - Display_write(self->display, buffer, 4, 8 + loopCounter * 7); + Display_write(self->display, buffer, 4, MENUTEXT_PRESET_MAX_LENGTH + 1 + loopCounter * 7); } } @@ -435,10 +440,8 @@ static void repairMenu_prepareAdminPinVerification(struct MenuCore* self) static void repairMenu_printChangePinScreen(struct MenuCore* self) { - char buffer[self->display->displayDevice->parameters.numberOfColumns]; char pin[PIN_NUMBER_OF_DIGITS + 1]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), " New PIN:"); - Display_write(self->display, buffer, 3, 1); + Display_write(self->display, MenuText_CHANGE_PIN[languageIndex][0], 3, 1); int numberOfDigits = strlen(self->insertString); @@ -459,14 +462,13 @@ static void repairMenu_printChangePinScreen(struct MenuCore* self) if (self->menuState == RM_ADMIN_CHANGEPIN_FIRST_INSERT) { - Display_write(self->display, pin, 3, 14); + Display_write(self->display, pin, 3, MENUTEXT_CHANGEPIN_MAX_LENGTH); } else if (self->menuState == RM_ADMIN_CHANGEPIN_SECOND_INSERT) { - Display_write(self->display, "****", 3, 14); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), " Repeat PIN:"); - Display_write(self->display, buffer, 4, 1); - Display_write(self->display, pin, 4, 14); + Display_write(self->display, "****", 3, MENUTEXT_CHANGEPIN_MAX_LENGTH); + Display_write(self->display, MenuText_CHANGE_PIN[languageIndex][1], 4, 1); + Display_write(self->display, pin, 4, MENUTEXT_CHANGEPIN_MAX_LENGTH); } } @@ -474,27 +476,22 @@ static void repairMenu_printChangePinScreen(struct MenuCore* self) static void repairMenu_printIOInterlockStatus(struct MenuCore* self) { - char buffer[self->display->displayDevice->parameters.numberOfColumns]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Cover Interlock is"); - Display_write(self->display, buffer, 2, 2); + Display_writeCentered(self->display, MenuText_INTERLOCK_STATUS[languageIndex][0], 2); if (Interlock_isClosed(interlock)) { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "closed"); - Display_write(self->display, buffer, 3, 8); + Display_writeCentered(self->display, MenuText_INTERLOCK_STATUS[languageIndex][1], 3); } else { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), " open "); - Display_write(self->display, buffer, 3, 8); + Display_writeCentered(self->display, MenuText_INTERLOCK_STATUS[languageIndex][2], 3); } } static void repairMenu_confirmAdminPin(struct MenuCore* self) { - char buffer[20]; char pin[PIN_NUMBER_OF_DIGITS]; int loopcounter; @@ -505,17 +502,15 @@ static void repairMenu_confirmAdminPin(struct MenuCore* self) if (PIN_isOK(DeviceParameters_getPIN(), pin)) { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "PIN OK"); Display_clearScreen(self->display); - Display_write(self->display, buffer, 3, 8); + Display_writeCentered(self->display, MenuText_CONFIRM_PIN[languageIndex][0], 3); vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); MenuCore_changeState(self, RM_ADMINMENU); } else { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "PIN DENIED"); Display_clearScreen(self->display); - Display_write(self->display, buffer, 3, 6); + Display_writeCentered(self->display, MenuText_CONFIRM_PIN[languageIndex][1], 3); vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); MenuCore_changeState(self, RM_MAINMENU); } @@ -551,21 +546,19 @@ static void repairMenu_configConfirmSecondPin(struct MenuCore* self) { pin[loopcounter] = self->insertString[loopcounter] - 48; } - char buffer[20]; + if (PIN_changePinSecondInsert(DeviceParameters_getPIN(), pin) == SUCCESS) { DeviceParameters_writePIN(DeviceParameters_getPIN()); DeviceParameters_saveParameters(); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "New PIN accepted"); Display_clearScreen(self->display); - Display_write(self->display, buffer, 3, 3); + Display_writeCentered(self->display, MenuText_CONFIRM_NEW_PIN[languageIndex][0], 3); } else { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "New PIN denied"); Display_clearScreen(self->display); - Display_write(self->display, buffer, 3, 4); + Display_writeCentered(self->display, MenuText_CONFIRM_NEW_PIN[languageIndex][1], 3); } vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); MenuCore_changeState(self, RM_ADMINMENU); @@ -754,9 +747,7 @@ static void repairMenu_configConfirmPreset(struct MenuCore* self) MenuCore_changeState(self, RM_ADMIN_PRESET_CONFIG_SELECT); Display_clearScreen(self->display); - char buffer[20]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Preset %d saved", self->selectionIndex); - Display_write(self->display, buffer, 3, 4); + Display_writeCentered(self->display, MenuText_SAFE_PRESET[languageIndex], 3); vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); } @@ -801,9 +792,7 @@ static void repairMenu_configConfirmPIDKd(struct MenuCore* self) MenuCore_changeState(self, RM_ADMINMENU); Display_clearScreen(self->display); - char buffer[20]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Constants saved"); - Display_write(self->display, buffer, 3, 3); + Display_writeCentered(self->display, MenuText_SAFE_CONSTANTS[languageIndex], 3); vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); } @@ -811,55 +800,25 @@ static void repairMenu_configConfirmPIDKd(struct MenuCore* self) static void repairMenu_printAdminVoltageInput(struct MenuCore* self) { char buffer[self->display->displayDevice->parameters.numberOfColumns + 1]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Voltage input"); - Display_write(self->display, buffer, 1, 1); + + Display_write(self->display, MenuText_VOLTAGE_IN_HEADER[languageIndex], 1, 1); if (PCBA_getInstance()->pcba != PCBA_Tesla) { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Row1: %5dV | %4Xx", ADConverter_getInputVoltage(adcRow1), ADConverter_getInputConverterValue(adcRow1)); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s1: %5dV|%4Xx", MenuText_VOLTAGE_ROW[languageIndex], ADConverter_getInputVoltage(adcRow1), ADConverter_getInputConverterValue(adcRow1)); Display_write(self->display, buffer, 2, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Row3: %5dV | %4Xx", ADConverter_getInputVoltage(adcRow3), ADConverter_getInputConverterValue(adcRow3)); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s3: %5dV|%4Xx", MenuText_VOLTAGE_ROW[languageIndex], ADConverter_getInputVoltage(adcRow3), ADConverter_getInputConverterValue(adcRow3)); Display_write(self->display, buffer, 4, 1); } - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Row2: %5dV | %4Xx", ADConverter_getInputVoltage(adcRow2), ADConverter_getInputConverterValue(adcRow2)); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s2: %5dV|%4Xx", MenuText_VOLTAGE_ROW[languageIndex], ADConverter_getInputVoltage(adcRow2), ADConverter_getInputConverterValue(adcRow2)); Display_write(self->display, buffer, 3, 1); } -static void repairMenu_printConfigPreset(struct MenuCore* self) -{ - int loopCounter; - char buffer[self->display->displayDevice->parameters.numberOfColumns]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Preset %d info", self->selectionIndex); - // Always print Row1 (index0), ignoring the scrolling index - Display_write(self->display, buffer, 1, 1); - - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Start:"); - Display_write(self->display, buffer, 2, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Time:"); - Display_write(self->display, buffer, 3, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Volt:"); - Display_write(self->display, buffer, 4, 1); - - for (loopCounter = 0; loopCounter < RepairPresets_getPreset(self->selectionIndex)->numberOfStages; loopCounter++) - { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5dm", (RepairPresets_getPreset(self->selectionIndex)->preset[loopCounter].softstartDuration / 60)); - Display_write(self->display, buffer, 2, 8 + loopCounter * 7); - - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5dm", (RepairPresets_getPreset(self->selectionIndex)->preset[loopCounter].duration / 60)); - Display_write(self->display, buffer, 3, 8 + loopCounter * 7); - - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5dV", RepairPresets_getPreset(self->selectionIndex)->preset[loopCounter].voltage); - Display_write(self->display, buffer, 4, 8 + loopCounter * 7); - } -} - - static void repairMenu_printPINVerification(struct MenuCore* self) { - char buffer[self->display->displayDevice->parameters.numberOfColumns]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Insert PIN"); - Display_write(self->display, buffer, 3, 6); + char buffer[PIN_NUMBER_OF_DIGITS + 1]; + Display_writeCentered(self->display, MenuText_INSERT_PIN[languageIndex], 3); int numberOfDigits = strlen(self->insertString); int loopcounter; @@ -876,7 +835,7 @@ static void repairMenu_printPINVerification(struct MenuCore* self) } buffer[PIN_NUMBER_OF_DIGITS] = '\0'; - Display_write(self->display, buffer, 4, 9); + Display_writeCentered(self->display, buffer, 4); } @@ -884,18 +843,17 @@ static void repairMenu_printPINVerification(struct MenuCore* self) static void repairMenu_printVoltageOutput(struct MenuCore* self) { char buffer[self->display->displayDevice->parameters.numberOfColumns]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Set voltage out"); - // Always print Row1 (index0), ignoring the scrolling index - Display_write(self->display, buffer, 1, 1); + + Display_write(self->display, MenuText_VOLTAGE_OUT_HEADER[languageIndex], 1, 1); if (PCBA_getInstance()->pcba != PCBA_Tesla) { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "R1: %5dV | %5dV", (unsigned int)DAConverter_getCurrentValue(dacRow1), ADConverter_getInputVoltage(adcRow1)); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s1: %5dV|%5dV", MenuText_VOLTAGE_ROW[languageIndex], (unsigned int)DAConverter_getCurrentValue(dacRow1), ADConverter_getInputVoltage(adcRow1)); Display_write(self->display, buffer, 2, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "R3: %5dV | %5dV", (unsigned int)DAConverter_getCurrentValue(dacRow3), ADConverter_getInputVoltage(adcRow3)); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s3: %5dV|%5dV", MenuText_VOLTAGE_ROW[languageIndex], (unsigned int)DAConverter_getCurrentValue(dacRow3), ADConverter_getInputVoltage(adcRow3)); Display_write(self->display, buffer, 4, 1); } - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "R2: %5dV | %5dV", (unsigned int)DAConverter_getCurrentValue(dacRow2), ADConverter_getInputVoltage(adcRow2)); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s2: %5dV|%5dV", MenuText_VOLTAGE_ROW[languageIndex], (unsigned int)DAConverter_getCurrentValue(dacRow2), ADConverter_getInputVoltage(adcRow2)); Display_write(self->display, buffer, 3, 1); } @@ -903,9 +861,9 @@ static void repairMenu_printVoltageOutput(struct MenuCore* self) static void repairMenu_printPIDConstants(struct MenuCore* self) { char buffer[self->display->displayDevice->parameters.numberOfColumns]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "PID constants"); + // Always print Row1 (index0), ignoring the scrolling index - Display_write(self->display, buffer, 1, 1); + Display_write(self->display, MenuText_CONSTANTS_HEADER[languageIndex], 1, 1); snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Kp: %5d", DeviceParameters_getPIDParameters()->Kp); Display_write(self->display, buffer, 2, 1); @@ -918,20 +876,19 @@ static void repairMenu_printPIDConstants(struct MenuCore* self) static void repairMenu_printInfo(struct MenuCore* self) { - Display_write(mainDisplay, PCBA_getInstance()->name, 3, 2); + Display_writeCentered(mainDisplay, PCBA_getInstance()->name, 3); char buffer[20]; snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "SW V. %d.%d.%d.%d", Version_getInstance()->major, Version_getInstance()->minor, Version_getInstance()->branch, Version_getInstance()->patch); - Display_write(mainDisplay, buffer, 4, 4); + Display_writeCentered(mainDisplay, buffer, 4); } static void repairMenu_confirmCalibrationPin(struct MenuCore* self) { - char buffer[20]; char pin[PIN_NUMBER_OF_DIGITS]; int loopcounter; @@ -942,9 +899,8 @@ static void repairMenu_confirmCalibrationPin(struct MenuCore* self) if (PIN_isOK(DeviceParameters_getPIN(), pin)) { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "PIN OK"); Display_clearScreen(self->display); - Display_write(self->display, buffer, 3, 8); + Display_writeCentered(self->display, MenuText_CONFIRM_PIN[languageIndex][0], 3); vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); if (PCBA_getInstance()->pcba == PCBA_CathodeMCP) { @@ -957,9 +913,8 @@ static void repairMenu_confirmCalibrationPin(struct MenuCore* self) } else { - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "PIN DENIED"); Display_clearScreen(self->display); - Display_write(self->display, buffer, 3, 6); + Display_writeCentered(self->display, MenuText_CONFIRM_PIN[languageIndex][1], 3); vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); MenuCore_changeState(self, RM_MAINMENU); } @@ -991,8 +946,8 @@ static void repairMenu_selectPreset(struct MenuCore* self) Display_clearScreen(self->display); char buffer[20]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Preset %d selected", self->selectionIndex); - Display_write(self->display, buffer, 3, 2); + snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%s %d", MenuText_SELECT_PRESET[languageIndex], self->selectionIndex); + Display_writeCentered(self->display, buffer, 3); vTaskDelay(REPAIRMENU_POPUPSCREEN_TIME_MS); } @@ -1207,7 +1162,7 @@ void repairMenu_menuStateHandle(struct MenuCore* self) else if (self->menuState == RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART) { - repairMenu_printConfigPreset(self); + repairMenu_printPreset(self); char buffer[7]; // Remove leading 0 from string if necessary @@ -1221,16 +1176,17 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5sm", self->insertString); - Display_write(self->display, buffer, 2, 8); + Display_write(self->display, buffer, 2, MENUTEXT_PRESET_MAX_LENGTH + 1); vTaskDelay(2); - Display_setCursorToPosition(self->display, 2, 12); + Display_setCursorToPosition(self->display, 2, MENUTEXT_PRESET_MAX_LENGTH + 1 + 5); vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } else if (self->menuState == RM_ADMIN_PRESET_CONFIG_FIRST_DURATION) { - repairMenu_printConfigPreset(self); +// repairMenu_printConfigPreset(self); + repairMenu_printPreset(self); char buffer[7]; // Remove leading 0 from string if necessary @@ -1244,16 +1200,17 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5sm", self->insertString); - Display_write(self->display, buffer, 3, 8); + Display_write(self->display, buffer, 3, MENUTEXT_PRESET_MAX_LENGTH + 1); vTaskDelay(2); - Display_setCursorToPosition(self->display, 3, 12); + Display_setCursorToPosition(self->display, 3, MENUTEXT_PRESET_MAX_LENGTH + 1 + 5); vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } else if (self->menuState == RM_ADMIN_PRESET_CONFIG_FIRST_VOLTAGE) { - repairMenu_printConfigPreset(self); +// repairMenu_printConfigPreset(self); + repairMenu_printPreset(self); char buffer[7]; // Remove leading 0 from string if necessary @@ -1280,13 +1237,16 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5s", self->insertString); - Display_write(self->display, buffer, 4, 8); - Display_setCursorToPosition(self->display, 4, 12); + Display_write(self->display, buffer, 4, MENUTEXT_PRESET_MAX_LENGTH + 1); + vTaskDelay(2); + Display_setCursorToPosition(self->display, 4, MENUTEXT_PRESET_MAX_LENGTH + 5); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } else if (self->menuState == RM_ADMIN_PRESET_CONFIG_SECOND_SOFTSTART) { - repairMenu_printConfigPreset(self); + // repairMenu_printConfigPreset(self); + repairMenu_printPreset(self); char buffer[7]; // Remove leading 0 from string if necessary @@ -1300,14 +1260,17 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5s", self->insertString); - Display_write(self->display, buffer, 2, 15); - Display_setCursorToPosition(self->display, 2, 19); + Display_write(self->display, buffer, 2, 2 * MENUTEXT_PRESET_MAX_LENGTH + 1); + vTaskDelay(2); + Display_setCursorToPosition(self->display, 2, 2 * MENUTEXT_PRESET_MAX_LENGTH + 5); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } else if (self->menuState == RM_ADMIN_PRESET_CONFIG_SECOND_DURATION) { - repairMenu_printConfigPreset(self); + // repairMenu_printConfigPreset(self); + repairMenu_printPreset(self); char buffer[7]; // Remove leading 0 from string if necessary @@ -1321,14 +1284,17 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5s", self->insertString); - Display_write(self->display, buffer, 3, 15); - Display_setCursorToPosition(self->display, 3, 19); + Display_write(self->display, buffer, 3, 2 * MENUTEXT_PRESET_MAX_LENGTH + 1); + vTaskDelay(2); + Display_setCursorToPosition(self->display, 3, 2 * MENUTEXT_PRESET_MAX_LENGTH + 5); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } else if (self->menuState == RM_ADMIN_PRESET_CONFIG_SECOND_VOLTAGE) { - repairMenu_printConfigPreset(self); + // repairMenu_printConfigPreset(self); + repairMenu_printPreset(self); char buffer[7]; // Remove leading 0 from string if necessary @@ -1358,8 +1324,10 @@ void repairMenu_menuStateHandle(struct MenuCore* self) snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5s", self->insertString); - Display_write(self->display, buffer, 4, 15); - Display_setCursorToPosition(self->display, 4, 19); + Display_write(self->display, buffer, 4, 2 * MENUTEXT_PRESET_MAX_LENGTH + 1); + vTaskDelay(2); + Display_setCursorToPosition(self->display, 4, 2 * MENUTEXT_PRESET_MAX_LENGTH + 5); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } @@ -1378,10 +1346,14 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } } + vTaskDelay(2); snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5s", self->insertString); Display_write(self->display, buffer, 2, 5); + vTaskDelay(2); Display_setCursorToPosition(self->display, 2, 9); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); + vTaskDelay(2); } else if (self->menuState == RM_ADMIN_PID_CONFIG_KI) @@ -1399,10 +1371,14 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } } + vTaskDelay(2); snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5s", self->insertString); Display_write(self->display, buffer, 3, 5); + vTaskDelay(2); Display_setCursorToPosition(self->display, 3, 9); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); + vTaskDelay(2); } else if (self->menuState == RM_ADMIN_PID_CONFIG_KD) @@ -1420,10 +1396,14 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } } + vTaskDelay(2); snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5s", self->insertString); Display_write(self->display, buffer, 4, 5); + vTaskDelay(2); Display_setCursorToPosition(self->display, 4, 9); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); + vTaskDelay(2); } else if (self->menuState == RM_CALIBRATIONMENU_PIN_VERIFICATION) @@ -1460,8 +1440,10 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5sV", self->insertString); - Display_write(self->display, buffer, 2, 5); - Display_setCursorToPosition(self->display, 2, 9); + Display_write(self->display, buffer, 2, 7); + vTaskDelay(2); + Display_setCursorToPosition(self->display, 2, 11); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } @@ -1494,8 +1476,10 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5sV", self->insertString); - Display_write(self->display, buffer, 3, 5); - Display_setCursorToPosition(self->display, 3, 9); + Display_write(self->display, buffer, 3, 7); + vTaskDelay(2); + Display_setCursorToPosition(self->display, 3, 11); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } @@ -1528,8 +1512,10 @@ void repairMenu_menuStateHandle(struct MenuCore* self) } snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "%5sV", self->insertString); - Display_write(self->display, buffer, 4, 5); - Display_setCursorToPosition(self->display, 4, 9); + Display_write(self->display, buffer, 4, 7); + vTaskDelay(2); + Display_setCursorToPosition(self->display, 4, 11); + vTaskDelay(2); Display_setBlinkingCursorState(self->display, ON); } @@ -1542,11 +1528,9 @@ void repairMenu_menuStateHandle(struct MenuCore* self) Power6V5Supply_off(); - char buffer[21]; - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "All rows reset to 0V"); - Display_write(self->display, buffer, 3, 1); - snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "Press X to continue"); - Display_write(self->display, buffer, 4, 1); + Display_writeCentered(self->display, MenuText_VOLTAGE_OUT_CLEANUP[languageIndex][0], 3); + Display_writeCentered(self->display, MenuText_VOLTAGE_OUT_CLEANUP[languageIndex][1], 4); + } } @@ -1571,14 +1555,14 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) if (PCBA_getInstance()->pcba == PCBA_CathodeMCP) { // For Cathode/MCP PCBA, the type of repair must be selected first - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[MENUTEXT_ENGLISH][1], RM_REPAIR_CATHODEMCP_SELECT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[languageIndex][1], RM_REPAIR_CATHODEMCP_SELECT, NULL); } else { - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[MENUTEXT_ENGLISH][1], RM_REPAIRMENU, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[languageIndex][1], RM_REPAIRMENU, NULL); } - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[MENUTEXT_ENGLISH][2], RM_ADMINMENU_PIN_VERIFICATION, repairMenu_prepareAdminPinVerification); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[MENUTEXT_ENGLISH][3], RM_CALIBRATIONMENU_PIN_VERIFICATION, repairMenu_prepareAdminPinVerification); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[languageIndex][2], RM_ADMINMENU_PIN_VERIFICATION, repairMenu_prepareAdminPinVerification); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_MAINMENU], MenuText_MAINMENU[languageIndex][3], RM_CALIBRATIONMENU_PIN_VERIFICATION, repairMenu_prepareAdminPinVerification); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_MAINMENU], 'U', PRESSED); MenuElements_addKeyAction_SCROLLDOWN(&menuCore->menuArray[RM_MAINMENU], 'D', PRESSED); MenuElements_addKeyAction_SELECT(&menuCore->menuArray[RM_MAINMENU], 'E', PRESSED); @@ -1596,9 +1580,9 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], MENU_HAS_CURSOR, 3); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], MenuText_CATHODEMCP_SELECT[MENUTEXT_ENGLISH][0], RM_REPAIR_CATHODEMCP_SELECT, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], MenuText_CATHODEMCP_SELECT[MENUTEXT_ENGLISH][1], RM_REPAIRMENU, repairMenu_selectCathodeRepair); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], MenuText_CATHODEMCP_SELECT[MENUTEXT_ENGLISH][2], RM_REPAIRMENU, repairMenu_selectMCPRepair); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], MenuText_CATHODEMCP_SELECT[languageIndex][0], RM_REPAIR_CATHODEMCP_SELECT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], MenuText_CATHODEMCP_SELECT[languageIndex][1], RM_REPAIRMENU, repairMenu_selectCathodeRepair); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], MenuText_CATHODEMCP_SELECT[languageIndex][2], RM_REPAIRMENU, repairMenu_selectMCPRepair); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], 'U', PRESSED); MenuElements_addKeyAction_SCROLLDOWN(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], 'D', PRESSED); MenuElements_addKeyAction_SELECT(&menuCore->menuArray[RM_REPAIR_CATHODEMCP_SELECT], 'E', PRESSED); @@ -1618,9 +1602,9 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_REPAIRMENU], MENU_HAS_CURSOR, 4); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIRMENU], MenuText_REPAIRMENU[MENUTEXT_ENGLISH][0], RM_REPAIRMENU, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIRMENU], MenuText_REPAIRMENU[MENUTEXT_ENGLISH][1], RM_PRESETMENU, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIRMENU], MenuText_REPAIRMENU[MENUTEXT_ENGLISH][2], RM_START_REPAIR, repairMenu_startRepairProcess); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIRMENU], MenuText_REPAIRMENU[languageIndex][0], RM_REPAIRMENU, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIRMENU], MenuText_REPAIRMENU[languageIndex][1], RM_PRESETMENU, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_REPAIRMENU], MenuText_REPAIRMENU[languageIndex][2], RM_START_REPAIR, repairMenu_startRepairProcess); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_REPAIRMENU], 'U', PRESSED); MenuElements_addKeyAction_SCROLLDOWN(&menuCore->menuArray[RM_REPAIRMENU], 'D', PRESSED); MenuElements_addKeyAction_SELECT(&menuCore->menuArray[RM_REPAIRMENU], 'E', PRESSED); @@ -1648,16 +1632,16 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_PRESETMENU], MENU_HAS_CURSOR, 10); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][0], RM_PRESETMENU, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][1], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][2], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][3], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][4], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][5], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][6], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][7], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][8], RM_REPAIRMENU, repairMenu_selectPreset); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[MENUTEXT_ENGLISH][9], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][0], RM_PRESETMENU, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][1], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][2], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][3], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][4], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][5], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][6], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][7], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][8], RM_REPAIRMENU, repairMenu_selectPreset); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_PRESETMENU], MenuText_PRESETMENU[languageIndex][9], RM_REPAIRMENU, repairMenu_selectPreset); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_PRESETMENU], 'U', PRESSED); MenuElements_addKeyAction_SCROLLDOWN(&menuCore->menuArray[RM_PRESETMENU], 'D', PRESSED); MenuElements_addKeyAction_SELECT(&menuCore->menuArray[RM_PRESETMENU], 'E', PRESSED); @@ -1720,9 +1704,9 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], MENU_HAS_CURSOR, 3); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], MenuText_ADMIN_CATHODEMCP_SELECT[MENUTEXT_ENGLISH][0], RM_ADMIN_CATHODEMCP_SELECT, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], MenuText_ADMIN_CATHODEMCP_SELECT[MENUTEXT_ENGLISH][1], RM_ADMIN_PRESET_CONFIG_SELECT, repairMenu_selectCathodeRepair); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], MenuText_ADMIN_CATHODEMCP_SELECT[MENUTEXT_ENGLISH][2], RM_ADMIN_PRESET_CONFIG_SELECT, repairMenu_selectMCPRepair); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], MenuText_ADMIN_CATHODEMCP_SELECT[languageIndex][0], RM_ADMIN_CATHODEMCP_SELECT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], MenuText_ADMIN_CATHODEMCP_SELECT[languageIndex][1], RM_ADMIN_PRESET_CONFIG_SELECT, repairMenu_selectCathodeRepair); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], MenuText_ADMIN_CATHODEMCP_SELECT[languageIndex][2], RM_ADMIN_PRESET_CONFIG_SELECT, repairMenu_selectMCPRepair); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], 'U', PRESSED); MenuElements_addKeyAction_SCROLLDOWN(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], 'D', PRESSED); MenuElements_addKeyAction_SELECT(&menuCore->menuArray[RM_ADMIN_CATHODEMCP_SELECT], 'E', PRESSED); @@ -1740,19 +1724,19 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMINMENU], MENU_HAS_CURSOR, 6); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[MENUTEXT_ENGLISH][0], RM_ADMINMENU, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[MENUTEXT_ENGLISH][1], RM_ADMIN_CHANGEPIN_FIRST_INSERT, repairMenu_configPinChange); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[MENUTEXT_ENGLISH][2], RM_ADMIN_IOCONTROL, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[languageIndex][0], RM_ADMINMENU, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[languageIndex][1], RM_ADMIN_CHANGEPIN_FIRST_INSERT, repairMenu_configPinChange); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[languageIndex][2], RM_ADMIN_IOCONTROL, NULL); if (PCBA_getInstance()->pcba == PCBA_CathodeMCP) { - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[MENUTEXT_ENGLISH][3], RM_ADMIN_CATHODEMCP_SELECT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[languageIndex][3], RM_ADMIN_CATHODEMCP_SELECT, NULL); } else { - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[MENUTEXT_ENGLISH][3], RM_ADMIN_PRESET_CONFIG_SELECT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[languageIndex][3], RM_ADMIN_PRESET_CONFIG_SELECT, NULL); } - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[MENUTEXT_ENGLISH][4], RM_ADMIN_PID_CONFIG_KP, repairMenu_configPID); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[MENUTEXT_ENGLISH][5], RM_ADMIN_INFO, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[languageIndex][4], RM_ADMIN_PID_CONFIG_KP, repairMenu_configPID); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMINMENU], MenuText_ADMINMENU[languageIndex][5], RM_ADMIN_INFO, NULL); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_ADMINMENU], 'U', PRESSED); MenuElements_addKeyAction_SCROLLDOWN(&menuCore->menuArray[RM_ADMINMENU], 'D', PRESSED); MenuElements_addKeyAction_SELECT(&menuCore->menuArray[RM_ADMINMENU], 'E', PRESSED); @@ -1768,7 +1752,7 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_FIRST_INSERT], MENU_HAS_NO_CURSOR, 5); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_FIRST_INSERT], MenuText_ADMINCHANGEPINMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_CHANGEPIN_FIRST_INSERT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_FIRST_INSERT], MenuText_ADMINCHANGEPINMENU[languageIndex][0], RM_ADMIN_CHANGEPIN_FIRST_INSERT, NULL); MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_FIRST_INSERT], 'X', PRESSED, RM_ADMINMENU); MenuElements_addKeyAction_DIGITINSERT(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_FIRST_INSERT], '0', PRESSED, 4); MenuElements_addKeyAction_DIGITINSERT(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_FIRST_INSERT], '1', PRESSED, 4); @@ -1784,7 +1768,7 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) MenuElements_addKeyAction_DIGITINSERTCONFIRM(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_FIRST_INSERT], 'E', PRESSED, repairMenu_configConfirmFirstPin); MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_SECOND_INSERT], MENU_HAS_NO_CURSOR, 5); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_SECOND_INSERT], MenuText_ADMINCHANGEPINMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_CHANGEPIN_SECOND_INSERT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_SECOND_INSERT], MenuText_ADMINCHANGEPINMENU[languageIndex][0], RM_ADMIN_CHANGEPIN_SECOND_INSERT, NULL); MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_SECOND_INSERT], 'X', PRESSED, RM_ADMINMENU); MenuElements_addKeyAction_DIGITINSERT(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_SECOND_INSERT], '0', PRESSED, 4); MenuElements_addKeyAction_DIGITINSERT(&menuCore->menuArray[RM_ADMIN_CHANGEPIN_SECOND_INSERT], '1', PRESSED, 4); @@ -1818,21 +1802,21 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) { MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MENU_HAS_CURSOR, 5); } - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_IOCONTROL, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[MENUTEXT_ENGLISH][1], RM_ADMIN_IO_INTERLOCK, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[MENUTEXT_ENGLISH][2], RM_ADMIN_IO_SOLENOID, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[MENUTEXT_ENGLISH][3], RM_ADMIN_IO_VOLTAGE_IN, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[languageIndex][0], RM_ADMIN_IOCONTROL, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[languageIndex][1], RM_ADMIN_IO_INTERLOCK, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[languageIndex][2], RM_ADMIN_IO_SOLENOID, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[languageIndex][3], RM_ADMIN_IO_VOLTAGE_IN, NULL); if (PCBA_getInstance()->pcba == PCBA_Tesla) { - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[MENUTEXT_ENGLISH][4], RM_ADMIN_IOCONTROL_VOLTAGE_OUT_CHANNEL2, repairMenu_configVoltageOutput); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[languageIndex][4], RM_ADMIN_IOCONTROL_VOLTAGE_OUT_CHANNEL2, repairMenu_configVoltageOutput); } else { - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[MENUTEXT_ENGLISH][4], RM_ADMIN_IOCONTROL_VOLTAGE_OUT_CHANNEL1, repairMenu_configVoltageOutput); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[languageIndex][4], RM_ADMIN_IOCONTROL_VOLTAGE_OUT_CHANNEL1, repairMenu_configVoltageOutput); } if (PCBA_getInstance()->pcba == PCBA_Tesla) { - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[MENUTEXT_ENGLISH][5], RM_ADMIN_IO_TESLAGUN, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOMAINMENU[languageIndex][5], RM_ADMIN_IO_TESLAGUN, NULL); } MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_ADMIN_IOCONTROL], 'X', PRESSED, RM_ADMINMENU); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_ADMIN_IOCONTROL], 'U', PRESSED); @@ -1855,7 +1839,7 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_IO_INTERLOCK], MENU_HAS_NO_CURSOR, 4); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOINTERLOCKMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_IO_INTERLOCK, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IOCONTROL], MenuText_ADMINIOINTERLOCKMENU[languageIndex][0], RM_ADMIN_IO_INTERLOCK, NULL); MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_ADMIN_IO_INTERLOCK], 'X', PRESSED, RM_ADMIN_IOCONTROL); /* ------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -1867,8 +1851,8 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], MENU_HAS_NO_CURSOR, 4); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], MenuText_ADMINSOLENOIDMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_IO_SOLENOID, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], MenuText_ADMINSOLENOIDMENU[MENUTEXT_ENGLISH][1], RM_ADMIN_IO_SOLENOID, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], MenuText_ADMINSOLENOIDMENU[languageIndex][0], RM_ADMIN_IO_SOLENOID, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], MenuText_ADMINSOLENOIDMENU[languageIndex][1], RM_ADMIN_IO_SOLENOID, NULL); MenuElements_addKeyAction_EXECUTEFUNCTION(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], '0', PRESSED, repairMenu_solenoidUnlock); MenuElements_addKeyAction_EXECUTEFUNCTION(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], '0', RELEASED, repairMenu_solenoidLock); MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_ADMIN_IO_SOLENOID], 'X', PRESSED, RM_ADMIN_IOCONTROL); @@ -1980,8 +1964,8 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) if (PCBA_getInstance()->pcba == PCBA_Tesla) { MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], MENU_HAS_NO_CURSOR, 4); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], MenuText_ADMINTESLAGUNMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_IO_TESLAGUN, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], MenuText_ADMINTESLAGUNMENU[MENUTEXT_ENGLISH][1], RM_ADMIN_IO_TESLAGUN, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], MenuText_ADMINTESLAGUNMENU[languageIndex][0], RM_ADMIN_IO_TESLAGUN, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], MenuText_ADMINTESLAGUNMENU[languageIndex][1], RM_ADMIN_IO_TESLAGUN, NULL); MenuElements_addKeyAction_EXECUTEFUNCTION(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], '0', PRESSED, repairMenu_teslagunRelease); MenuElements_addKeyAction_EXECUTEFUNCTION(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], '0', RELEASED, repairMenu_teslagunBlock); MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_ADMIN_IO_TESLAGUN], 'X', PRESSED, RM_ADMIN_IOCONTROL); @@ -1994,16 +1978,16 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MENU_HAS_CURSOR, 10); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_PRESET_CONFIG_SELECT, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][1], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][2], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][3], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][4], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][5], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][6], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][7], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][8], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[MENUTEXT_ENGLISH][9], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][0], RM_ADMIN_PRESET_CONFIG_SELECT, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][1], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][2], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][3], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][4], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][5], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][6], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][7], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][8], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], MenuText_ADMINPRESETCONFIGSELECTMENU[languageIndex][9], RM_ADMIN_PRESET_CONFIG_FIRST_SOFTSTART, repairMenu_configPresetFirstSoftstart); MenuElements_addKeyAction_SCROLLUP(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], 'U', PRESSED); MenuElements_addKeyAction_SCROLLDOWN(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], 'D', PRESSED); MenuElements_addKeyAction_SELECT(&menuCore->menuArray[RM_ADMIN_PRESET_CONFIG_SELECT], 'E', PRESSED); @@ -2196,7 +2180,7 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) * ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ MenuElements_createMenuPage(&menuCore->menuArray[RM_ADMIN_INFO], MENU_HAS_NO_CURSOR, 5); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_INFO], MenuText_ADMININFOMENU[MENUTEXT_ENGLISH][0], RM_ADMIN_INFO, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_ADMIN_INFO], MenuText_ADMININFOMENU[languageIndex][0], RM_ADMIN_INFO, NULL); MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_ADMIN_INFO], 'X', PRESSED, RM_ADMINMENU); @@ -2228,8 +2212,8 @@ void repairMenu_createMenuEntries(struct MenuCore* menuCore) MenuElements_createMenuPage(&menuCore->menuArray[RM_CALIBRATIONMENU], MENU_HAS_NO_CURSOR, 2); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_CALIBRATIONMENU], MenuText_CALIBRATIONMENU[MENUTEXT_ENGLISH][0], RM_CALIBRATIONMENU, NULL); - MenuElements_addMenuPageRow(&menuCore->menuArray[RM_CALIBRATIONMENU], MenuText_CALIBRATIONMENU[MENUTEXT_ENGLISH][1], RM_CALIBRATIONMENU, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_CALIBRATIONMENU], MenuText_CALIBRATIONMENU[languageIndex][0], RM_CALIBRATIONMENU, NULL); + MenuElements_addMenuPageRow(&menuCore->menuArray[RM_CALIBRATIONMENU], MenuText_CALIBRATIONMENU[languageIndex][1], RM_CALIBRATIONMENU, NULL); MenuElements_addKeyAction_GOTOSTATE(&menuCore->menuArray[RM_CALIBRATIONMENU], 'X', PRESSED, RM_MAINMENU);