New ML support - menu tunning, startup

+config headers (bool - true/false replaced with 0/1)
+fixed include hierarchy
+removed comments
This commit is contained in:
Robert Pelnar 2018-06-10 16:04:32 +02:00
parent f098707021
commit fcfb4cdcae
9 changed files with 113 additions and 95 deletions

View File

@ -402,9 +402,9 @@ your extruder heater takes 2 minutes to hit the target on heating.
// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins. // The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. #define X_MAX_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. #define Y_MAX_ENDSTOP_INVERTING 0 // set to 1 to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. #define Z_MAX_ENDSTOP_INVERTING 1 // set to 1 to invert the logic of the endstop.
//#define DISABLE_MAX_ENDSTOPS //#define DISABLE_MAX_ENDSTOPS
//#define DISABLE_MIN_ENDSTOPS //#define DISABLE_MIN_ENDSTOPS
@ -420,11 +420,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
#define E_ENABLE_ON 0 // For all extruders #define E_ENABLE_ON 0 // For all extruders
// Disables axis when it's not being used. // Disables axis when it's not being used.
#define DISABLE_X false #define DISABLE_X 0
#define DISABLE_Y false #define DISABLE_Y 0
#define DISABLE_Z false #define DISABLE_Z 0
#define DISABLE_E false // For all extruders #define DISABLE_E 0// For all extruders
#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled #define DISABLE_INACTIVE_EXTRUDER 1 //disable only inactive extruders and keep active extruder enabled
// ENDSTOP SETTINGS: // ENDSTOP SETTINGS:
@ -434,11 +434,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
#define Z_HOME_DIR -1 #define Z_HOME_DIR -1
#ifdef DEBUG_DISABLE_SWLIMITS #ifdef DEBUG_DISABLE_SWLIMITS
#define min_software_endstops false #define min_software_endstops 0
#define max_software_endstops false #define max_software_endstops 0
#else #else
#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS. #define min_software_endstops 1 // If true, axis won't move to coordinates less than HOME_POS.
#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below. #define max_software_endstops 1 // If true, axis won't move to coordinates greater than the defined lengths below.
#endif //DEBUG_DISABLE_SWLIMITS #endif //DEBUG_DISABLE_SWLIMITS

View File

@ -143,7 +143,7 @@
//#define Y_DUAL_STEPPER_DRIVERS //#define Y_DUAL_STEPPER_DRIVERS
// Define if the two Y drives need to rotate in opposite directions // Define if the two Y drives need to rotate in opposite directions
#define INVERT_Y2_VS_Y_DIR true #define INVERT_Y2_VS_Y_DIR 1
#ifdef Y_DUAL_STEPPER_DRIVERS #ifdef Y_DUAL_STEPPER_DRIVERS
#undef EXTRUDERS #undef EXTRUDERS
@ -160,13 +160,13 @@
#define Z_HOME_RETRACT_MM 2 #define Z_HOME_RETRACT_MM 2
//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially. //#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
#define AXIS_RELATIVE_MODES {false, false, false, false} #define AXIS_RELATIVE_MODES {0, 0, 0, 0}
#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step). Toshiba steppers are 4x slower, but Prusa3D does not use those. #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step). Toshiba steppers are 4x slower, but Prusa3D does not use those.
//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step. //By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false #define INVERT_X_STEP_PIN 0
#define INVERT_Y_STEP_PIN false #define INVERT_Y_STEP_PIN 0
#define INVERT_Z_STEP_PIN false #define INVERT_Z_STEP_PIN 0
#define INVERT_E_STEP_PIN false #define INVERT_E_STEP_PIN 0
//default stepper release if idle //default stepper release if idle
#define DEFAULT_STEPPER_DEACTIVE_TIME 60 #define DEFAULT_STEPPER_DEACTIVE_TIME 60
@ -206,7 +206,7 @@
//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/ //#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again #define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers? #define SD_FINISHED_STEPPERRELEASE 1 //if sd support and the file is finished: disable steppers?
#define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place. #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
#define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order. #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
@ -241,7 +241,7 @@
// SD Card Sorting options // SD Card Sorting options
// In current firmware Prusa Firmware version, // In current firmware Prusa Firmware version,
// SDSORT_CACHE_NAMES and SDSORT_DYNAMIC_RAM is not supported and must be set to false. // SDSORT_CACHE_NAMES and SDSORT_DYNAMIC_RAM is not supported and must be set to 0.
#ifdef SDCARD_SORT_ALPHA #ifdef SDCARD_SORT_ALPHA
#define SD_SORT_TIME 0 #define SD_SORT_TIME 0
#define SD_SORT_ALPHA 1 #define SD_SORT_ALPHA 1
@ -249,11 +249,11 @@
#define SDSORT_LIMIT 100 // Maximum number of sorted items (10-256). #define SDSORT_LIMIT 100 // Maximum number of sorted items (10-256).
#define FOLDER_SORTING -1 // -1=above 0=none 1=below #define FOLDER_SORTING -1 // -1=above 0=none 1=below
#define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code. #define SDSORT_GCODE 0 // Allow turning sorting on/off with LCD and M34 g-code.
#define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting. #define SDSORT_USES_RAM 0 // Pre-allocate a static array for faster pre-sorting.
#define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.) #define SDSORT_USES_STACK 0 // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
#define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option. #define SDSORT_CACHE_NAMES 0 // Keep sorted items in RAM longer for speedy performance. Most expensive option.
#define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! #define SDSORT_DYNAMIC_RAM 0 // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
#endif #endif
#if defined(SDCARD_SORT_ALPHA) #if defined(SDCARD_SORT_ALPHA)
@ -283,7 +283,7 @@
#define BABYSTEPPING #define BABYSTEPPING
#ifdef BABYSTEPPING #ifdef BABYSTEPPING
#define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
#define BABYSTEP_INVERT_Z false //true for inverse movements in Z #define BABYSTEP_INVERT_Z 0 //1 for inverse movements in Z
#define BABYSTEP_Z_MULTIPLICATOR 2 //faster z movements #define BABYSTEP_Z_MULTIPLICATOR 2 //faster z movements
#ifdef COREXY #ifdef COREXY

View File

@ -616,7 +616,6 @@ void servo_init()
#endif #endif
} }
static void lcd_language_menu();
void stop_and_save_print_to_ram(float z_move, float e_move); void stop_and_save_print_to_ram(float z_move, float e_move);
void restore_print_from_ram_and_continue(float e_move); void restore_print_from_ram_and_continue(float e_move);
@ -760,7 +759,7 @@ void factory_reset(char level, bool quiet)
WRITE(BEEPER, HIGH); WRITE(BEEPER, HIGH);
_delay_ms(100); _delay_ms(100);
WRITE(BEEPER, LOW); WRITE(BEEPER, LOW);
eeprom_update_byte((unsigned char*)EEPROM_LANG, LANG_ID_FORCE_SELECTION); lang_reset();
break; break;
//Level 1: Reset statistics //Level 1: Reset statistics
@ -791,12 +790,11 @@ void factory_reset(char level, bool quiet)
//lcd_print_at_PGM(1,2,PSTR("Shipping prep")); //lcd_print_at_PGM(1,2,PSTR("Shipping prep"));
// Force language selection at the next boot up. // Force language selection at the next boot up.
eeprom_update_byte((unsigned char*)EEPROM_LANG, LANG_ID_FORCE_SELECTION); lang_reset();
// Force the "Follow calibration flow" message at the next boot up. // Force the "Follow calibration flow" message at the next boot up.
calibration_status_store(CALIBRATION_STATUS_Z_CALIBRATION); calibration_status_store(CALIBRATION_STATUS_Z_CALIBRATION);
eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); //run wizard eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); //run wizard
farm_no = 0; farm_no = 0;
//*** MaR::180501_01
farm_mode = false; farm_mode = false;
eeprom_update_byte((uint8_t*)EEPROM_FARM_MODE, farm_mode); eeprom_update_byte((uint8_t*)EEPROM_FARM_MODE, farm_mode);
EEPROM_save_B(EEPROM_FARM_NUMBER, &farm_no); EEPROM_save_B(EEPROM_FARM_NUMBER, &farm_no);
@ -992,12 +990,12 @@ void erase_eeprom_section(uint16_t offset, uint16_t bytes)
for (int i = offset; i < (offset+bytes); i++) eeprom_write_byte((uint8_t*)i, 0xFF); for (int i = offset; i < (offset+bytes); i++) eeprom_write_byte((uint8_t*)i, 0xFF);
} }
#include "bootapp.h"
#ifdef W25X20CL #ifdef W25X20CL
// language upgrade from external flash #include "bootapp.h" //bootloader support
// language update from external flash
#define LANGBOOT_BLOCKSIZE 0x1000 #define LANGBOOT_BLOCKSIZE 0x1000
#define LANGBOOT_RAMBUFFER 0x0800 #define LANGBOOT_RAMBUFFER 0x0800
@ -1095,15 +1093,16 @@ void setup()
lcd_splash(); lcd_splash();
#ifdef W25X20CL
if (w25x20cl_init()) if (w25x20cl_init())
update_sec_lang_from_external_flash(); update_sec_lang_from_external_flash();
else else
kill(_i("External SPI flash W25X20CL not responding.")); kill(_i("External SPI flash W25X20CL not responding."));
#endif //W25X20CL
setup_killpin(); setup_killpin();
setup_powerhold(); setup_powerhold();
//*** MaR::180501_02b
farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE); farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE);
EEPROM_read_B(EEPROM_FARM_NUMBER, &farm_no); EEPROM_read_B(EEPROM_FARM_NUMBER, &farm_no);
if ((farm_mode == 0xFF && farm_no == 0) || ((uint16_t)farm_no == 0xFFFF)) if ((farm_mode == 0xFF && farm_no == 0) || ((uint16_t)farm_no == 0xFFFF))
@ -1389,7 +1388,6 @@ void setup()
#if defined(Z_AXIS_ALWAYS_ON) #if defined(Z_AXIS_ALWAYS_ON)
enable_z(); enable_z();
#endif #endif
//*** MaR::180501_02
farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE); farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE);
EEPROM_read_B(EEPROM_FARM_NUMBER, &farm_no); EEPROM_read_B(EEPROM_FARM_NUMBER, &farm_no);
if ((farm_mode == 0xFF && farm_no == 0) || (farm_no == 0xFFFF)) farm_mode = false; //if farm_mode has not been stored to eeprom yet and farm number is set to zero or EEPROM is fresh, deactivate farm mode if ((farm_mode == 0xFF && farm_no == 0) || (farm_no == 0xFFFF)) farm_mode = false; //if farm_mode has not been stored to eeprom yet and farm number is set to zero or EEPROM is fresh, deactivate farm mode
@ -1495,7 +1493,9 @@ void setup()
list_sec_lang_from_external_flash(); list_sec_lang_from_external_flash();
#endif //DEBUG_W25X20CL #endif //DEBUG_W25X20CL
lang_select(eeprom_read_byte((uint8_t*)EEPROM_LANG)); // lang_reset();
if (!lang_select(eeprom_read_byte((uint8_t*)EEPROM_LANG)))
lcd_language();
#ifdef DEBUG_SEC_LANG #ifdef DEBUG_SEC_LANG
@ -3229,7 +3229,7 @@ void process_commands()
SERIAL_PROTOCOLLN(FILAMENT_SIZE "-" ELECTRONICS "-" NOZZLE_TYPE ); SERIAL_PROTOCOLLN(FILAMENT_SIZE "-" ELECTRONICS "-" NOZZLE_TYPE );
} else if(code_seen("Lang")) { } else if(code_seen("Lang")) {
eeprom_update_byte((unsigned char*)EEPROM_LANG, LANG_ID_FORCE_SELECTION); lang_reset();
} else if(code_seen("Lz")) { } else if(code_seen("Lz")) {
EEPROM_save_B(EEPROM_BABYSTEP_Z,0); EEPROM_save_B(EEPROM_BABYSTEP_Z,0);
@ -6017,7 +6017,7 @@ Sigma_Exit:
break; break;
case 509: //M509 Force language selection case 509: //M509 Force language selection
{ {
eeprom_update_byte((unsigned char*)EEPROM_LANG, LANG_ID_FORCE_SELECTION); lang_reset();
SERIAL_ECHO_START; SERIAL_ECHO_START;
SERIAL_PROTOCOLPGM(("LANG SEL FORCED")); SERIAL_PROTOCOLPGM(("LANG SEL FORCED"));
} }

View File

@ -1,8 +1,10 @@
//language.c //language.c
#include "language.h" #include "language.h"
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include "bootapp.h" #include "bootapp.h"
#include "Configuration.h"
#ifdef W25X20CL #ifdef W25X20CL
#include "w25x20cl.h" #include "w25x20cl.h"
@ -44,34 +46,32 @@ uint8_t lang_select(uint8_t lang)
if (lang == LANG_ID_PRI) //primary language if (lang == LANG_ID_PRI) //primary language
{ {
lang_table = 0; lang_table = 0;
lang_selected = 0; lang_selected = lang;
return 1;
} }
#ifdef W25X20CL #ifdef W25X20CL
if (lang_get_code(lang) == lang_get_code(LANG_ID_SEC)) lang = LANG_ID_SEC;
if (lang == LANG_ID_SEC) //current secondary language if (lang == LANG_ID_SEC) //current secondary language
{ {
uint16_t ui = _SEC_LANG_TABLE; //table pointer if (pgm_read_dword(((uint32_t*)_SEC_LANG_TABLE)) == LANG_MAGIC) //magic valid
if (pgm_read_dword(((uint32_t*)(ui + 0))) != LANG_MAGIC) return 0; //magic not valid {
lang_table = ui; // set table pointer lang_table = _SEC_LANG_TABLE; // set table pointer
lang_selected = 1; // set language id lang_selected = lang; // set language id
return 1; }
} }
#else //W25X20CL #else //W25X20CL
#endif //W25X20CL #endif //W25X20CL
/* if (lang_selected == lang)
uint16_t ui = (uint16_t)&_SEC_LANG; //pointer to _SEC_LANG reserved space {
ui += 0x00ff; //add 1 page eeprom_update_byte((unsigned char*)EEPROM_LANG, lang_selected);
ui &= 0xff00; //align to page return 1;
lang_table = ui; //set table pointer }
ui = pgm_read_word(((uint16_t*)(((char*)lang_table + 16)))); //read relative offset of first string (language name)
return (const char*)((char*)lang_table + ui); //return calculated pointer
*/
return 0; return 0;
} }
uint8_t lang_get_count() uint8_t lang_get_count()
{ {
#ifdef W25X20CL #ifdef W25X20CL
W25X20CL_SPI_ENTER();
uint8_t count = 2; //count = 1+n (primary + secondary + all in xflash) uint8_t count = 2; //count = 1+n (primary + secondary + all in xflash)
uint32_t addr = 0x00000; //start of xflash uint32_t addr = 0x00000; //start of xflash
lang_table_header_t header; //table header structure lang_table_header_t header; //table header structure
@ -98,11 +98,11 @@ uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* off
if (offset) *offset = ui; if (offset) *offset = ui;
return (header == LANG_MAGIC)?1:0; //return 1 if magic valid return (header == LANG_MAGIC)?1:0; //return 1 if magic valid
} }
W25X20CL_SPI_ENTER();
uint32_t addr = 0x00000; //start of xflash uint32_t addr = 0x00000; //start of xflash
lang--; lang--;
while (1) while (1)
{ {
W25X20CL_SPI_ENTER();
w25x20cl_rd_data(addr, header, sizeof(lang_table_header_t)); //read table header from xflash w25x20cl_rd_data(addr, header, sizeof(lang_table_header_t)); //read table header from xflash
if (header->magic != LANG_MAGIC) break; //break if not valid if (header->magic != LANG_MAGIC) break; //break if not valid
if (offset) *offset = addr; if (offset) *offset = addr;
@ -124,6 +124,7 @@ uint16_t lang_get_code(uint8_t lang)
if (pgm_read_dword(((uint32_t*)(ui + 0))) != LANG_MAGIC) return LANG_CODE_XX; //magic not valid if (pgm_read_dword(((uint32_t*)(ui + 0))) != LANG_MAGIC) return LANG_CODE_XX; //magic not valid
return pgm_read_word(((uint32_t*)(ui + 10))); //return lang code from progmem return pgm_read_word(((uint32_t*)(ui + 10))); //return lang code from progmem
} }
W25X20CL_SPI_ENTER();
uint32_t addr = 0x00000; //start of xflash uint32_t addr = 0x00000; //start of xflash
lang_table_header_t header; //table header structure lang_table_header_t header; //table header structure
lang--; lang--;
@ -160,6 +161,18 @@ const char* lang_get_name_by_code(uint16_t code)
return _n("??"); return _n("??");
} }
void lang_reset(void)
{
lang_selected = 0;
eeprom_update_byte((unsigned char*)EEPROM_LANG, LANG_ID_FORCE_SELECTION);
}
uint8_t lang_is_selected(void)
{
uint8_t lang_eeprom = eeprom_read_byte((unsigned char*)EEPROM_LANG);
return (lang_eeprom != LANG_ID_FORCE_SELECTION) && (lang_eeprom == lang_selected);
}
#ifdef DEBUG_SEC_LANG #ifdef DEBUG_SEC_LANG
const char* lang_get_sec_lang_str_by_id(uint16_t id) const char* lang_get_sec_lang_str_by_id(uint16_t id)
{ {

View File

@ -100,14 +100,20 @@ extern const char* lang_get_translation(const char* s);
#define _SEC_LANG_TABLE ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00) #define _SEC_LANG_TABLE ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00)
#endif //(LANG_MODE != 0) #endif //(LANG_MODE != 0)
//selects //selects language, eeprom is updated in case of success
extern uint8_t lang_select(uint8_t lang); extern uint8_t lang_select(uint8_t lang);
//returns total number of languages (primary + all in xflash)
//get total number of languages (primary + all in xflash) extern uint8_t lang_get_count(void);
extern uint8_t lang_get_count(); //reads lang table header and offset in xflash or progmem
extern uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* offset); extern uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* offset);
//reads lang code from xflash or progmem
extern uint16_t lang_get_code(uint8_t lang); extern uint16_t lang_get_code(uint8_t lang);
//returns localized language name (text for menu item)
extern const char* lang_get_name_by_code(uint16_t code); extern const char* lang_get_name_by_code(uint16_t code);
//reset language to "LANG_ID_FORCE_SELECTION", epprom is updated
extern void lang_reset(void);
//returns 1 if language is selected
extern uint8_t lang_is_selected(void);
#ifdef DEBUG_SEC_LANG #ifdef DEBUG_SEC_LANG
extern const char* lang_get_sec_lang_str_by_id(uint16_t id); extern const char* lang_get_sec_lang_str_by_id(uint16_t id);

View File

@ -1457,7 +1457,6 @@ void digitalPotWrite(int address, int value) // From Arduino DigitalPotControl e
#endif #endif
} }
//*** MaR::180416_03
void EEPROM_read_st(int pos, uint8_t* value, uint8_t size) void EEPROM_read_st(int pos, uint8_t* value, uint8_t size)
{ {
do do

View File

@ -1,7 +1,8 @@
#ifndef THERMISTORTABLES_H_ #ifndef THERMISTORTABLES_H_
#define THERMISTORTABLES_H_ #define THERMISTORTABLES_H_
#include "Marlin.h" #include "Configuration_adv.h"
#include <avr/pgmspace.h>
#define OVERSAMPLENR 16 #define OVERSAMPLENR 16

View File

@ -214,7 +214,6 @@ static void lcd_prepare_menu();
//static void lcd_move_menu(); //static void lcd_move_menu();
static void lcd_settings_menu(); static void lcd_settings_menu();
static void lcd_calibration_menu(); static void lcd_calibration_menu();
static void lcd_language_menu();
static void lcd_control_temperature_menu(); static void lcd_control_temperature_menu();
static void lcd_control_temperature_preheat_pla_settings_menu(); static void lcd_control_temperature_preheat_pla_settings_menu();
static void lcd_control_temperature_preheat_abs_settings_menu(); static void lcd_control_temperature_preheat_abs_settings_menu();
@ -3680,22 +3679,6 @@ static void lcd_crash_mode_set()
#endif //TMC2130 #endif //TMC2130
static void lcd_set_lang(unsigned char lang)
{
if (lang > LANG_ID_SEC)
{
if (!lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Copy selected language from XFLASH?"), false, true))
{
lcd_return_to_status();
lcd_update_enable(true);
return;
}
lang_boot_update_start(lang);
}
if (lang_select(lang))
eeprom_update_byte((unsigned char*)EEPROM_LANG, lang);
}
#ifdef PAT9125 #ifdef PAT9125
static void lcd_fsensor_state_set() static void lcd_fsensor_state_set()
{ {
@ -3727,13 +3710,10 @@ void lcd_set_progress() {
static void lcd_language_menu() static void lcd_language_menu()
{ {
START_MENU(); START_MENU();
// if (langsel == LANGSEL_OFF) if (lang_is_selected()) MENU_ITEM(back, _T(MSG_SETTINGS), 0);
// MENU_ITEM(back, _T(MSG_SETTINGS), 0);
// else if (langsel == LANGSEL_ACTIVE)
MENU_ITEM(back, _T(MSG_WATCH), 0);
MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(0)), 0); MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(0)), 0);
// MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(1)), 1); // MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(1)), 1);
for (int i = 2; i < lang_get_count(); i++) //skip seconday language - solved in menu_action_setlang for (int i = 2; i < lang_get_count(); i++) //skip seconday language - solved in lang_select
MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(i)), i); MENU_ITEM(setlang, lang_get_name_by_code(lang_get_code(i)), i);
END_MENU(); END_MENU();
} }
@ -3929,6 +3909,26 @@ void lcd_wizard() {
} }
} }
void lcd_language()
{
lcd_update_enable(true);
lcd_implementation_clear();
lcd_goto_menu(lcd_language_menu);
lcd_timeoutToStatus = -1; //infinite timeout
lcdDrawUpdate = 2;
while ((currentMenu != lcd_status_screen) && (!lang_is_selected()))
{
delay(50);
lcd_update();
manage_heater();
manage_inactivity(true);
}
if (lang_is_selected())
lcd_return_to_status();
else
lang_select(LANG_ID_PRI);
}
void lcd_wizard(int state) { void lcd_wizard(int state) {
bool end = false; bool end = false;
@ -4167,7 +4167,6 @@ static void lcd_settings_menu()
#ifdef TMC2130 #ifdef TMC2130
if(!farm_mode) if(!farm_mode)
{ {
//*** MaR::180416_01a
if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set); if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set);
else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set); else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set);
if (SilentModeMenu == SILENT_MODE_NORMAL) if (SilentModeMenu == SILENT_MODE_NORMAL)
@ -5725,7 +5724,6 @@ static void lcd_tune_menu()
#ifdef TMC2130 #ifdef TMC2130
if(!farm_mode) if(!farm_mode)
{ {
//*** MaR::180416_01b
if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set); if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set);
else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set); else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set);
@ -6551,7 +6549,6 @@ static bool lcd_selfcheck_pulleys(int axis)
st_current_set(0, 850); //set motor current higher st_current_set(0, 850); //set motor current higher
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 200, active_extruder); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], 200, active_extruder);
st_synchronize(); st_synchronize();
//*** MaR::180416_02
if (SilentModeMenu != SILENT_MODE_OFF) st_current_set(0, tmp_motor[0]); //set back to normal operation currents if (SilentModeMenu != SILENT_MODE_OFF) st_current_set(0, tmp_motor[0]); //set back to normal operation currents
else st_current_set(0, tmp_motor_loud[0]); //set motor current back else st_current_set(0, tmp_motor_loud[0]); //set motor current back
current_position[axis] = current_position[axis] - move; current_position[axis] = current_position[axis] - move;
@ -7118,18 +7115,16 @@ static void menu_action_gcode(const char* pgcode) {
static void menu_action_setlang(unsigned char lang) static void menu_action_setlang(unsigned char lang)
{ {
if (lang <= LANG_ID_SEC) if (!lang_select(lang))
{ {
lcd_set_lang(lang); if (lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Copy selected language from XFLASH?"), false, true))
return; lang_boot_update_start(lang);
lcd_update_enable(true);
lcd_implementation_clear();
lcd_goto_menu(lcd_language_menu);
lcd_timeoutToStatus = -1; //infinite timeout
lcdDrawUpdate = 2;
} }
uint16_t code = lang_get_code(lang);
if (code == lang_get_code(1))
{
lcd_set_lang(1);
return;
}
lcd_set_lang(lang);
} }
static void menu_action_function(menuFunc_t data) { static void menu_action_function(menuFunc_t data) {

View File

@ -6,6 +6,8 @@
#ifdef ULTRA_LCD #ifdef ULTRA_LCD
static void lcd_language_menu();
void lcd_update(uint8_t lcdDrawUpdateOverride = 0); void lcd_update(uint8_t lcdDrawUpdateOverride = 0);
// Call with a false parameter to suppress the LCD update from various places like the planner or the temp control. // Call with a false parameter to suppress the LCD update from various places like the planner or the temp control.
void lcd_update_enable(bool enable); void lcd_update_enable(bool enable);
@ -299,6 +301,8 @@ void display_loading();
void lcd_set_progress(); void lcd_set_progress();
#endif #endif
void lcd_language();
void lcd_wizard(); void lcd_wizard();
void lcd_wizard(int state); void lcd_wizard(int state);