From 9c95f8c015ba479308cab9cc361f05a527947d2f Mon Sep 17 00:00:00 2001 From: NotaRobotexe Date: Fri, 19 Jul 2019 18:34:46 +0200 Subject: [PATCH] sheet menu --- Firmware/menu.cpp | 37 ++++++++++++++++++ Firmware/menu.h | 2 + Firmware/ultralcd.cpp | 87 +++++++++++++++++++++++++++++++++++++++---- 3 files changed, 119 insertions(+), 7 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 096838cb6..9b9d01dbc 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -196,6 +196,28 @@ void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) buffer.c[index + 7] = '\0'; } +//! @brief Format sheet name in select menu +//! +//! @param[in] sheet_E Sheet in EEPROM +//! @param[out] buffer for formatted output +void menu_format_sheet_select_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) +{ + uint_least8_t index = sprintf_P(buffer.c, PSTR("%.10S ["), _T(MSG_SHEET)); + eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7); + buffer.c[index + 7] = ']'; + //index += 7; + buffer.c[index + 8] = '\0'; +} + +static void menu_draw_item_select_sheet_E(char type_char, const Sheet &sheet) +{ + lcd_set_cursor(0, menu_row); + SheetFormatBuffer buffer; + menu_format_sheet_select_E(sheet, buffer); + lcd_printf_P(PSTR("%c%-18.18s%c"), menu_selection_mark(), buffer.c, type_char); +} + + static void menu_draw_item_puts_E(char type_char, const Sheet &sheet) { lcd_set_cursor(0, menu_row); @@ -269,6 +291,21 @@ uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu) return 0; } +uint8_t menu_item_submenu_select_sheet_E(const Sheet &sheet, menu_func_t submenu) +{ + if (menu_item == menu_line) + { + if (lcd_draw_update) menu_draw_item_select_sheet_E(LCD_STR_ARROW_RIGHT[0], sheet); + if (menu_clicked && (lcd_encoder == menu_item)) + { + menu_submenu(submenu); + return menu_item_ret(); + } + } + menu_item++; + return 0; +} + uint8_t menu_item_back_P(const char* str) { if (menu_item == menu_line) diff --git a/Firmware/menu.h b/Firmware/menu.h index a4cb30104..d9bbf876c 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -103,6 +103,8 @@ extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu); #define MENU_ITEM_SUBMENU_E(sheet, submenu) do { if (menu_item_submenu_E(sheet, submenu)) return; } while (0) extern uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu); +#define MENU_ITEM_SUBMENU_SELECT_SHEET_E(sheet, submenu) do { if (menu_item_submenu_select_sheet_E(sheet, submenu)) return; } while (0) +extern uint8_t menu_item_submenu_select_sheet_E(const Sheet &sheet, menu_func_t submenu); #define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0) extern uint8_t menu_item_back_P(const char* str); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index ee9c6c2b6..5ab59e96c 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -257,6 +257,7 @@ static void lcd_connect_printer(); void lcd_finishstatus(); static void lcd_sdcard_menu(); +static void lcd_sheet_menu(); #ifdef DELTA_CALIBRATION_MENU static void lcd_delta_calibrate_menu(); @@ -5517,15 +5518,41 @@ SETTINGS_VERSION; MENU_END(); } +//TODO: ---------- HW menu void lcd_hw_setup_menu(void) // can not be "static" { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(bSettings?MSG_SETTINGS:MSG_BACK)); // i.e. default menu-item / menu-item after checking mismatch -if(!farm_mode) + +MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[0], lcd_sheet_menu); +MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[1], lcd_sheet_menu); +MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[2], lcd_sheet_menu); + +char buffer[] = "work cunt"; +//strncpy(buffer,_i("Sheet"),sizeof(buffer)); +//strncpy(buffer,_i(" "),sizeof(buffer)); +//strncpy(buffer,EEPROM_Sheets_base->s[0].name,sizeof(buffer)); + +//const char* menu = EEPROM_Sheets_base->s[0].name.c_str(); + +//const char *b = new char(buffer); +//const char *b = const char *b = new char(buffer);(buffer); +//printf_P(_N("UVLO - end %d\n"), _millis() - time_start); +//SERIAL_ECHOPGM(buffer); +//SERIAL_ECHOPGM(reinterpret_cast(buffer)); +//SERIAL_ECHOPGM("lakdjushasdjaljsdakjsdn"); +//char* p = &buffer[0]; + +//MENU_ITEM_SUBMENU_P(reinterpret_cast(p),lcd_sheet_menu); + +//delete(b); + +if(!farm_mode){ SETTINGS_NOZZLE; // ... a sem prijdou 'plechy' if(!farm_mode) MENU_ITEM_SUBMENU_P(_i("Checks"), lcd_checking_menu); +} MENU_END(); } @@ -6500,14 +6527,14 @@ static void lcd_select_sheet_2_menu() change_sheet(2); } -static void lcd_select_sheet_menu() +static void lcd_select_sheet_menu() //TODO: -----------------sheet menu { - MENU_BEGIN(); + /*MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_BACK)); MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[0], lcd_select_sheet_0_menu); MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[1], lcd_select_sheet_1_menu); MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[2], lcd_select_sheet_2_menu); - MENU_END(); + MENU_END();*/ } static void lcd_rename_sheet_menu() @@ -6554,13 +6581,59 @@ static void lcd_rename_sheet_menu() } } +static void lcd_reset_sheet() +{ + struct MenuData + { + bool initialized; + uint8_t selected; + char name[sizeof(Sheet::name)]; + }; + static_assert(sizeof(menu_data)>= sizeof(MenuData),"MenuData doesn't fit into menu_data"); + MenuData* menuData = (MenuData*)&(menu_data[0]); + + if (!menuData->initialized) + { + eeprom_read_block(menuData->name, EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].name, sizeof(Sheet::name)); + lcd_encoder = menuData->name[0]; + menuData->initialized = true; + } + if (lcd_encoder < '\x20') lcd_encoder = '\x20'; + if (lcd_encoder > '\x7F') lcd_encoder = '\x7F'; + + menuData->name[menuData->selected] = lcd_encoder; + lcd_set_cursor(0,0); + for (uint_least8_t i = 0; i < sizeof(Sheet::name); ++i) + { + lcd_putc(menuData->name[i]); + } + lcd_set_cursor(menuData->selected, 1); + lcd_putc('^'); + if (lcd_clicked()) + { + if ((menuData->selected + 1u) < sizeof(Sheet::name)) + { + lcd_encoder = menuData->name[++(menuData->selected)]; + } + else + { + eeprom_update_block(menuData->name, + EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].name, + sizeof(Sheet::name)); + menu_back(); + } + } +} + static void lcd_sheet_menu() { MENU_BEGIN(); - MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_BACK_P(_T(MSG_HW_SETUP)); + //if() MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); //// c=18 - MENU_ITEM_SUBMENU_P(_i("Rename"), lcd_rename_sheet_menu); //// c=18 MENU_ITEM_SUBMENU_P(_T(MSG_V2_CALIBRATION), lcd_v2_calibration); + MENU_ITEM_SUBMENU_P(_i("Rename"), lcd_rename_sheet_menu); //// c=18 + MENU_ITEM_SUBMENU_P(_i("Reset"), lcd_reset_sheet); //// c=18 MENU_END(); } @@ -6700,7 +6773,7 @@ static void lcd_main_menu() } - if(!isPrintPaused)MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); + if(!isPrintPaused)MENU_ITEM_SUBMENU_SELECT_SHEET_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); if (!is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal)) {