From 54f2ba3fc4f0e19b4db99932c5d966521e39a7e1 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 7 Jan 2015 08:03:48 -0600 Subject: [PATCH] auto-sync --- firmware/controllers/engine_controller.cpp | 3 + firmware/controllers/lcd_controller.cpp | 74 +++++++++++++++++++--- firmware/controllers/lcd_controller.h | 1 + 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 4c0c6ceb43..16f4ba544c 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -54,6 +54,7 @@ #include "engine.h" #include "pin_repository.h" #include "pwm_generator.h" +#include "lcd_controller.h" extern OutputPin outputs[IO_PIN_COUNT]; extern pin_output_mode_e *pinDefaultState[IO_PIN_COUNT]; @@ -410,4 +411,6 @@ void initEngineContoller(Engine *engine) { addConsoleActionI("get_int", getInt); initFsioImpl(engine); + + initLcdController(); } diff --git a/firmware/controllers/lcd_controller.cpp b/firmware/controllers/lcd_controller.cpp index 8d9cb02e27..88d83f4ea1 100644 --- a/firmware/controllers/lcd_controller.cpp +++ b/firmware/controllers/lcd_controller.cpp @@ -23,6 +23,30 @@ EXTERN_ENGINE ; +static MenuItem ROOT(NULL, NULL); + +static MenuTree tree(&ROOT); + +static MenuItem miRpm(tree.root, LL_RPM); +static MenuItem miSensors(tree.root, "sensors"); +static MenuItem miTrigger(tree.root, "trigger"); +static MenuItem miBench(tree.root, "bench test"); +static MenuItem miAbout(tree.root, "about"); + +static MenuItem miTestFan(&miAbout, "test fan"); +static MenuItem miTestFuelPump(&miAbout, "test pump"); +static MenuItem miTestSpark1(&miAbout, "test spark1"); +static MenuItem miTestSpark2(&miAbout, "test spark2"); +static MenuItem miTestSpark3(&miAbout, "test spark3"); +static MenuItem miTestSpark4(&miAbout, "test spark4"); +static MenuItem miTestInj1(&miAbout, "test injector1"); +static MenuItem miTestInj2(&miAbout, "test injector2"); +static MenuItem miTestInj3(&miAbout, "test injector3"); +static MenuItem miTestInj4(&miAbout, "test injector4"); + +static MenuItem miVersion(&miAbout, LL_VERSION); +static MenuItem miConfig(&miAbout, LL_CONFIG); + #define DISP_LINES (engineConfiguration->HD44780height - 1) static int infoIndex = 0; @@ -45,6 +69,10 @@ char * appendStr(char *ptr, const char *suffix) { return ptr; } +void initLcdController(void) { + tree.init(&miRpm, 3); +} + static char * prepareVBattMapLine(engine_configuration_s *engineConfiguration, char *buffer) { char *ptr = buffer; *ptr++ = 'V'; @@ -156,20 +184,50 @@ static void showLine(lcd_line_e line) { } void updateHD44780lcd(Engine *engine) { - for (int i = infoIndex; i < infoIndex + DISP_LINES; i++) { - lcd_HD44780_set_position(i - infoIndex, 0); - - lcd_HD44780_print_char(cursorY == i ? '*' : ' '); - - showLine((lcd_line_e) i); - + MenuItem *p = tree.topVisible; + int count = 0; + for (; count < tree.linesCount && p != NULL; count++) { + lcd_HD44780_set_position(count, 0); + char firstChar; + if (p == tree.current) { + firstChar = p->firstChild == NULL ? '*' : '>'; + } else { + firstChar = ' '; + } + lcd_HD44780_print_char(firstChar); + if (p->lcdLine == LL_STRING) { + lcd_HD44780_print_string(p->text); + } else { + showLine(p->lcdLine); + } int column = getCurrentHD44780column(); - for (int r = column; r < 20; r++) { lcd_HD44780_print_char(' '); } + p = p->next; } + for(; count < tree.linesCount && p != NULL; count++) { + lcd_HD44780_set_position(count, 0); + for (int r = 0; r < 20; r++) { + lcd_HD44780_print_char(' '); + } + } + +// for (int i = infoIndex; i < infoIndex + DISP_LINES; i++) { +// lcd_HD44780_set_position(i - infoIndex, 0); +// +// lcd_HD44780_print_char(cursorY == i ? '*' : ' '); +// +// showLine((lcd_line_e) i); +// +// int column = getCurrentHD44780column(); +// +// for (int r = column; r < 20; r++) { +// lcd_HD44780_print_char(' '); +// } +// } + // lcd_HD44780_set_position(0, 0); // bool_t isEven = getTimeNowSeconds() % 2 == 0; // diff --git a/firmware/controllers/lcd_controller.h b/firmware/controllers/lcd_controller.h index 28d8e24cff..5a1d3f78d1 100644 --- a/firmware/controllers/lcd_controller.h +++ b/firmware/controllers/lcd_controller.h @@ -14,6 +14,7 @@ #define TOTAL_OPTIONS 6 +void initLcdController(void); void updateHD44780lcd(Engine *engine); #endif /* LCD_CONTROLLER_H_ */