Browse Source

sheet menu

NotaRobotexe 4 years ago
parent
commit
9c95f8c015
3 changed files with 119 additions and 7 deletions
  1. 37 0
      Firmware/menu.cpp
  2. 2 0
      Firmware/menu.h
  3. 80 7
      Firmware/ultralcd.cpp

+ 37 - 0
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)

+ 2 - 0
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);

+ 80 - 7
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<const char*>(buffer));
+//SERIAL_ECHOPGM("lakdjushasdjaljsdakjsdn");
+//char* p = &buffer[0];
+
+//MENU_ITEM_SUBMENU_P(reinterpret_cast<const char*>(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))
   {