diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 272cbcfe..6893fa75 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -308,7 +308,7 @@ unsigned long t_fan_rising_edge = millis(); bool mesh_bed_leveling_flag = false; bool mesh_bed_run_from_menu = false; -unsigned char lang_selected = 0; +//unsigned char lang_selected = 0; int8_t FarmMode = 0; bool prusa_sd_card_upload = false; @@ -915,8 +915,8 @@ void factory_reset() void show_fw_version_warnings() { if (FW_DEV_VERSION == FW_VERSION_GOLD || FW_DEV_VERSION == FW_VERSION_RC) return; switch (FW_DEV_VERSION) { - case(FW_VERSION_ALPHA): lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_ALPHA); break; - case(FW_VERSION_BETA): lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_BETA); break; + case(FW_VERSION_ALPHA): lcd_show_fullscreen_message_and_wait_P(_i("You are using firmware alpha version. This is development version. Using this version is not recommended and may cause printer damage.")); break;////MSG_FW_VERSION_ALPHA c=20 r=8 + case(FW_VERSION_BETA): lcd_show_fullscreen_message_and_wait_P(_i("You are using firmware beta version. This is development version. Using this version is not recommended and may cause printer damage.")); break;////MSG_FW_VERSION_BETA c=20 r=8 case(FW_VERSION_DEVEL): case(FW_VERSION_DEBUG): lcd_update_enable(false); @@ -931,7 +931,7 @@ void show_fw_version_warnings() { lcd_print_at_PGM(0, 3, PSTR(FW_REPOSITORY)); lcd_wait_for_click(); break; - default: lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_UNKNOWN); break; + default: lcd_show_fullscreen_message_and_wait_P(_i("WARNING: This is an unofficial, unsupported build. Use at your own risk!")); break;////MSG_FW_VERSION_UNKNOWN c=20 r=8 } lcd_update_enable(true); } @@ -1026,9 +1026,9 @@ void setup() #ifdef STRING_VERSION_CONFIG_H #ifdef STRING_CONFIG_H_AUTHOR SERIAL_ECHO_START; - SERIAL_ECHORPGM(MSG_CONFIGURATION_VER); + SERIAL_ECHORPGM(_i(" Last Updated: "));////MSG_CONFIGURATION_VER c=0 r=0 SERIAL_ECHOPGM(STRING_VERSION_CONFIG_H); - SERIAL_ECHORPGM(MSG_AUTHOR); + SERIAL_ECHORPGM(_n(" | Author: "));////MSG_AUTHOR c=0 r=0 SERIAL_ECHOLNPGM(STRING_CONFIG_H_AUTHOR); SERIAL_ECHOPGM("Compiled: "); SERIAL_ECHOLNPGM(__DATE__); @@ -1036,9 +1036,9 @@ void setup() #endif SERIAL_ECHO_START; - SERIAL_ECHORPGM(MSG_FREE_MEMORY); + SERIAL_ECHORPGM(_i(" Free Memory: "));////MSG_FREE_MEMORY c=0 r=0 SERIAL_ECHO(freeMemory()); - SERIAL_ECHORPGM(MSG_PLANNER_BUFFER_BYTES); + SERIAL_ECHORPGM(_i(" PlannerBufferBytes: "));////MSG_PLANNER_BUFFER_BYTES c=0 r=0 SERIAL_ECHOLN((int)sizeof(block_t)*BLOCK_BUFFER_SIZE); //lcd_update_enable(false); // why do we need this?? - andre // loads data from EEPROM if available else uses defaults (and resets step acceleration rate) @@ -1309,15 +1309,15 @@ void setup() //if motherboard or printer type was changed inform user as it can indicate flashing wrong firmware version //if user confirms with knob, new hw version (printer and/or motherboard) is written to eeprom and message will be not shown next time case(0b01): - lcd_show_fullscreen_message_and_wait_P(MSG_CHANGED_MOTHERBOARD); + lcd_show_fullscreen_message_and_wait_P(_i("Warning: motherboard type changed.")); ////MSG_CHANGED_MOTHERBOARD c=20 r=4 eeprom_write_word((uint16_t*)EEPROM_BOARD_TYPE, MOTHERBOARD); break; case(0b10): - lcd_show_fullscreen_message_and_wait_P(MSG_CHANGED_PRINTER); + lcd_show_fullscreen_message_and_wait_P(_i("Warning: printer type changed.")); ////MSG_CHANGED_PRINTER c=20 r=4 eeprom_write_word((uint16_t*)EEPROM_PRINTER_TYPE, PRINTER_TYPE); break; case(0b11): - lcd_show_fullscreen_message_and_wait_P(MSG_CHANGED_BOTH); + lcd_show_fullscreen_message_and_wait_P(_i("Warning: both printer type and motherboard type changed.")); ////MSG_CHANGED_BOTH c=20 r=4 eeprom_write_word((uint16_t*)EEPROM_PRINTER_TYPE, PRINTER_TYPE); eeprom_write_word((uint16_t*)EEPROM_BOARD_TYPE, MOTHERBOARD); break; @@ -1325,7 +1325,7 @@ void setup() } if (!previous_settings_retrieved) { - lcd_show_fullscreen_message_and_wait_P(MSG_DEFAULT_SETTINGS_LOADED); //if EEPROM version or printer type was changed, inform user that default setting were loaded + lcd_show_fullscreen_message_and_wait_P(_i("Old settings found. Default PID, Esteps etc. will be set.")); //if EEPROM version or printer type was changed, inform user that default setting were loaded////MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 erase_eeprom_section(EEPROM_OFFSET, 156); //erase M500 part of eeprom } if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 1) { @@ -1346,7 +1346,7 @@ void setup() lcd_update_enable(true); } else if (calibration_status() == CALIBRATION_STATUS_CALIBRATED && temp_cal_active == true && calibration_status_pinda() == false) { - //lcd_show_fullscreen_message_and_wait_P(MSG_PINDA_NOT_CALIBRATED); + //lcd_show_fullscreen_message_and_wait_P(_i("Temperature calibration has not been run yet"));////MSG_PINDA_NOT_CALIBRATED c=20 r=4 lcd_update_enable(true); } else if (calibration_status() == CALIBRATION_STATUS_Z_CALIBRATION) { @@ -1357,7 +1357,7 @@ void setup() #if !defined (DEBUG_DISABLE_FORCE_SELFTEST) && defined (TMC2130) if (force_selftest_if_fw_version() && calibration_status() < CALIBRATION_STATUS_ASSEMBLED) { - lcd_show_fullscreen_message_and_wait_P(MSG_FORCE_SELFTEST); + lcd_show_fullscreen_message_and_wait_P(_i("Selftest will be run to calibrate accurate sensorless rehoming."));////MSG_FORCE_SELFTEST c=20 r=8 update_current_firmware_version_to_eeprom(); lcd_selftest(); } @@ -2454,7 +2454,7 @@ void gcode_M114() SERIAL_PROTOCOLPGM(" E:"); SERIAL_PROTOCOL(current_position[E_AXIS]); - SERIAL_PROTOCOLRPGM(MSG_COUNT_X); + SERIAL_PROTOCOLRPGM(_n(" Count X: "));////MSG_COUNT_X c=0 r=0 SERIAL_PROTOCOL(float(st_get_position(X_AXIS)) / axis_steps_per_unit[X_AXIS]); SERIAL_PROTOCOLPGM(" Y:"); SERIAL_PROTOCOL(float(st_get_position(Y_AXIS)) / axis_steps_per_unit[Y_AXIS]); @@ -2934,7 +2934,7 @@ void process_commands() codenum = 0; if(code_seen('P')) codenum = code_value(); // milliseconds to wait if(code_seen('S')) codenum = code_value() * 1000; // seconds to wait - if(codenum != 0) LCD_MESSAGERPGM(MSG_DWELL); + if(codenum != 0) LCD_MESSAGERPGM(_i("Sleep..."));////MSG_DWELL c=0 r=0 st_synchronize(); codenum += millis(); // keep track of when we started waiting previous_millis_cmd = millis(); @@ -3464,7 +3464,7 @@ void process_commands() enquecommand_front_P((PSTR("G28 W0"))); break; } - lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CAL_WARNING); + lcd_show_fullscreen_message_and_wait_P(_i("Stable ambient temperature 21-26C is needed a rigid stand is required."));////MSG_TEMP_CAL_WARNING c=20 r=4 bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false); if (result) @@ -3949,11 +3949,11 @@ void process_commands() break; } if (MESH_HOME_Z_SEARCH - current_position[Z_AXIS] < 0.1f) { - kill_message = MSG_BED_LEVELING_FAILED_PROBE_DISCONNECTED; + kill_message = _i("Bed leveling failed. Sensor disconnected or cable broken. Waiting for reset.");////MSG_BED_LEVELING_FAILED_PROBE_DISCONNECTED c=20 r=4 break; } if (has_z && fabs(z0 - current_position[Z_AXIS]) > Z_CALIBRATION_THRESHOLD) { //if we have data from z calibration, max. allowed difference is 1mm for each point - kill_message = MSG_BED_LEVELING_FAILED_POINT_HIGH; + kill_message = _i("Bed leveling failed. Sensor triggered too high. Waiting for reset.");////MSG_BED_LEVELING_FAILED_POINT_HIGH c=20 r=4 break; } #ifdef SUPPORT_VERBOSITY @@ -4277,7 +4277,7 @@ void process_commands() if (!hasP && !hasS && *src != '\0') { lcd_setstatus(src); } else { - LCD_MESSAGERPGM(MSG_USERWAIT); + LCD_MESSAGERPGM(_i("Wait for user..."));////MSG_USERWAIT c=0 r=0 } lcd_ignore_click(); //call lcd_ignore_click aslo for else ??? @@ -4305,14 +4305,14 @@ void process_commands() KEEPALIVE_STATE(IN_HANDLER); } if (IS_SD_PRINTING) - LCD_MESSAGERPGM(MSG_RESUMING); + LCD_MESSAGERPGM(_i("Resuming print"));////MSG_RESUMING c=0 r=0 else LCD_MESSAGERPGM(WELCOME_MSG); } break; #endif case 17: - LCD_MESSAGERPGM(MSG_NO_MOVE); + LCD_MESSAGERPGM(_i("No move."));////MSG_NO_MOVE c=0 r=0 enable_x(); enable_y(); enable_z(); @@ -4323,9 +4323,9 @@ void process_commands() #ifdef SDSUPPORT case 20: // M20 - list SD card - SERIAL_PROTOCOLLNRPGM(MSG_BEGIN_FILE_LIST); + SERIAL_PROTOCOLLNRPGM(_i("Begin file list"));////MSG_BEGIN_FILE_LIST c=0 r=0 card.ls(); - SERIAL_PROTOCOLLNRPGM(MSG_END_FILE_LIST); + SERIAL_PROTOCOLLNRPGM(_i("End file list"));////MSG_END_FILE_LIST c=0 r=0 break; case 21: // M21 - init SD card @@ -4864,7 +4864,7 @@ Sigma_Exit: } #else SERIAL_ERROR_START; - SERIAL_ERRORLNRPGM(MSG_ERR_NO_THERMISTORS); + SERIAL_ERRORLNRPGM(_i("No thermistors - no temperature"));////MSG_ERR_NO_THERMISTORS c=0 r=0 #endif SERIAL_PROTOCOLPGM(" @:"); @@ -5215,10 +5215,10 @@ Sigma_Exit: enable_endstops(true) ; break; case 119: // M119 - SERIAL_PROTOCOLRPGM(MSG_M119_REPORT); + SERIAL_PROTOCOLRPGM(_i("Reporting endstop status"));////MSG_M119_REPORT c=0 r=0 SERIAL_PROTOCOLLN(""); #if defined(X_MIN_PIN) && X_MIN_PIN > -1 - SERIAL_PROTOCOLRPGM(MSG_X_MIN); + SERIAL_PROTOCOLRPGM(_n("x_min: "));////MSG_X_MIN c=0 r=0 if(READ(X_MIN_PIN)^X_MIN_ENDSTOP_INVERTING){ SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT); }else{ @@ -5227,7 +5227,7 @@ Sigma_Exit: SERIAL_PROTOCOLLN(""); #endif #if defined(X_MAX_PIN) && X_MAX_PIN > -1 - SERIAL_PROTOCOLRPGM(MSG_X_MAX); + SERIAL_PROTOCOLRPGM(_n("x_max: "));////MSG_X_MAX c=0 r=0 if(READ(X_MAX_PIN)^X_MAX_ENDSTOP_INVERTING){ SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT); }else{ @@ -5236,7 +5236,7 @@ Sigma_Exit: SERIAL_PROTOCOLLN(""); #endif #if defined(Y_MIN_PIN) && Y_MIN_PIN > -1 - SERIAL_PROTOCOLRPGM(MSG_Y_MIN); + SERIAL_PROTOCOLRPGM(_n("y_min: "));////MSG_Y_MIN c=0 r=0 if(READ(Y_MIN_PIN)^Y_MIN_ENDSTOP_INVERTING){ SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT); }else{ @@ -5245,7 +5245,7 @@ Sigma_Exit: SERIAL_PROTOCOLLN(""); #endif #if defined(Y_MAX_PIN) && Y_MAX_PIN > -1 - SERIAL_PROTOCOLRPGM(MSG_Y_MAX); + SERIAL_PROTOCOLRPGM(_n("y_max: "));////MSG_Y_MAX c=0 r=0 if(READ(Y_MAX_PIN)^Y_MAX_ENDSTOP_INVERTING){ SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT); }else{ @@ -5296,7 +5296,7 @@ Sigma_Exit: tmp_extruder = code_value(); if(tmp_extruder >= EXTRUDERS) { SERIAL_ECHO_START; - SERIAL_ECHO(MSG_M200_INVALID_EXTRUDER); + SERIAL_ECHO(_i("M200 Invalid extruder "));////MSG_M200_INVALID_EXTRUDER c=0 r=0 break; } } @@ -5943,7 +5943,7 @@ Sigma_Exit: delay_keep_alive(4); if (millis() > waiting_start_time + (unsigned long)M600_TIMEOUT * 1000) { - lcd_display_message_fullscreen_P(MSG_PRESS_TO_PREHEAT); + lcd_display_message_fullscreen_P(_i("Press knob to preheat nozzle and continue."));////MSG_PRESS_TO_PREHEAT c=20 r=4 wait_for_user_state = 1; setTargetHotend(0, 0); setTargetHotend(0, 1); @@ -6083,8 +6083,8 @@ Sigma_Exit: WRITE(BEEPER, LOW); KEEPALIVE_STATE(PAUSED_FOR_USER); - lcd_change_fil_state = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_UNLOAD_SUCCESSFUL, false, true); - if (lcd_change_fil_state == 0) lcd_show_fullscreen_message_and_wait_P(MSG_CHECK_IDLER); + lcd_change_fil_state = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Was filament unload successful?"), false, true);////MSG_UNLOAD_SUCCESSFUL c=20 r=2 + if (lcd_change_fil_state == 0) lcd_show_fullscreen_message_and_wait_P(_i("Please open idler and remove filament manually."));////MSG_CHECK_IDLER c=20 r=4 //lcd_return_to_status(); lcd_update_enable(true); @@ -6729,7 +6729,7 @@ Sigma_Exit: SERIAL_ECHO_START; SERIAL_ECHOPGM("T"); SERIAL_PROTOCOLLN((int)tmp_extruder); - SERIAL_ECHOLNRPGM(MSG_INVALID_EXTRUDER); + SERIAL_ECHOLNRPGM(_n("Invalid extruder"));////MSG_INVALID_EXTRUDER c=0 r=0 } else { boolean make_move = false; @@ -6761,7 +6761,7 @@ Sigma_Exit: } #endif SERIAL_ECHO_START; - SERIAL_ECHORPGM(MSG_ACTIVE_EXTRUDER); + SERIAL_ECHORPGM(_n("Active Extruder: "));////MSG_ACTIVE_EXTRUDER c=0 r=0 SERIAL_PROTOCOLLN((int)active_extruder); } @@ -6831,7 +6831,7 @@ void FlushSerialRequestResend() { //char cmdbuffer[bufindr][100]="Resend:"; MYSERIAL.flush(); - SERIAL_PROTOCOLRPGM(MSG_RESEND); + SERIAL_PROTOCOLRPGM(_i("Resend: "));////MSG_RESEND c=0 r=0 SERIAL_PROTOCOLLN(gcode_LastN + 1); previous_millis_cmd = millis(); SERIAL_PROTOCOLLNRPGM(MSG_OK); @@ -7152,7 +7152,7 @@ static void handleSafetyTimer() { setTargetBed(0); setTargetHotend(0, 0); - lcd_show_fullscreen_message_and_wait_P(MSG_BED_HEATING_SAFETY_DISABLED); + lcd_show_fullscreen_message_and_wait_P(_i("Heating disabled by safety timer."));////MSG_BED_HEATING_SAFETY_DISABLED c=0 r=0 } } #endif //SAFETYTIMER @@ -7308,12 +7308,12 @@ void kill(const char *full_screen_message, unsigned char id) pinMode(PS_ON_PIN,INPUT); #endif SERIAL_ERROR_START; - SERIAL_ERRORLNRPGM(MSG_ERR_KILLED); + SERIAL_ERRORLNRPGM(_i("Printer halted. kill() called!"));////MSG_ERR_KILLED c=0 r=0 if (full_screen_message != NULL) { SERIAL_ERRORLNRPGM(full_screen_message); lcd_display_message_fullscreen_P(full_screen_message); } else { - LCD_ALERTMESSAGERPGM(MSG_KILLED); + LCD_ALERTMESSAGERPGM(_i("KILLED. "));////MSG_KILLED c=0 r=0 } // FMC small patch to update the LCD before ending @@ -7426,19 +7426,19 @@ bool setTargetedHotend(int code){ SERIAL_ECHO_START; switch(code){ case 104: - SERIAL_ECHORPGM(MSG_M104_INVALID_EXTRUDER); + SERIAL_ECHORPGM(_i("M104 Invalid extruder "));////MSG_M104_INVALID_EXTRUDER c=0 r=0 break; case 105: - SERIAL_ECHO(MSG_M105_INVALID_EXTRUDER); + SERIAL_ECHO(_i("M105 Invalid extruder "));////MSG_M105_INVALID_EXTRUDER c=0 r=0 break; case 109: - SERIAL_ECHO(MSG_M109_INVALID_EXTRUDER); + SERIAL_ECHO(_i("M109 Invalid extruder "));////MSG_M109_INVALID_EXTRUDER c=0 r=0 break; case 218: - SERIAL_ECHO(MSG_M218_INVALID_EXTRUDER); + SERIAL_ECHO(_i("M218 Invalid extruder "));////MSG_M218_INVALID_EXTRUDER c=0 r=0 break; case 221: - SERIAL_ECHO(MSG_M221_INVALID_EXTRUDER); + SERIAL_ECHO(_i("M221 Invalid extruder "));////MSG_M221_INVALID_EXTRUDER c=0 r=0 break; } SERIAL_PROTOCOLLN((int)tmp_extruder); @@ -8209,7 +8209,7 @@ void recover_print(uint8_t automatic) { char cmd[30]; lcd_update_enable(true); lcd_update(2); - lcd_setstatuspgm(MSG_RECOVERING_PRINT); + lcd_setstatuspgm(_i("Recovering print "));////MSG_RECOVERING_PRINT c=20 r=1 recover_machine_state_after_power_panic(); diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index 740a9cc6..5569cf88 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -94,7 +94,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m if (!dir.open(parent, lfilename, O_READ)) { if (lsAction == LS_SerialPrint) { //SERIAL_ECHO_START(); - //SERIAL_ECHOPGM(MSG_SD_CANT_OPEN_SUBDIR); + //SERIAL_ECHOPGM(_i("Cannot open subdir"));////MSG_SD_CANT_OPEN_SUBDIR c=0 r=0 //SERIAL_ECHOLN(lfilename); } } @@ -183,23 +183,23 @@ void CardReader::initsd() { //if (!card.init(SPI_HALF_SPEED,SDSS)) SERIAL_ECHO_START; - SERIAL_ECHOLNRPGM(MSG_SD_INIT_FAIL); + SERIAL_ECHOLNRPGM(_i("SD init fail"));////MSG_SD_INIT_FAIL c=0 r=0 } else if (!volume.init(&card)) { SERIAL_ERROR_START; - SERIAL_ERRORLNRPGM(MSG_SD_VOL_INIT_FAIL); + SERIAL_ERRORLNRPGM(_i("volume.init failed"));////MSG_SD_VOL_INIT_FAIL c=0 r=0 } else if (!root.openRoot(&volume)) { SERIAL_ERROR_START; - SERIAL_ERRORLNRPGM(MSG_SD_OPENROOT_FAIL); + SERIAL_ERRORLNRPGM(_i("openRoot failed"));////MSG_SD_OPENROOT_FAIL c=0 r=0 } else { cardOK = true; SERIAL_ECHO_START; - SERIAL_ECHOLNRPGM(MSG_SD_CARD_OK); + SERIAL_ECHOLNRPGM(_i("SD card ok"));////MSG_SD_CARD_OK c=0 r=0 } workDir=root; curDir=&root; @@ -392,13 +392,13 @@ void CardReader::openFile(char* name,bool read, bool replace_current/*=true*/) if (file.open(curDir, fname, O_READ)) { filesize = file.fileSize(); - SERIAL_PROTOCOLRPGM(MSG_SD_FILE_OPENED); + SERIAL_PROTOCOLRPGM(_i("File opened: "));////MSG_SD_FILE_OPENED c=0 r=0 SERIAL_PROTOCOL(fname); - SERIAL_PROTOCOLRPGM(MSG_SD_SIZE); + SERIAL_PROTOCOLRPGM(_n(" Size: "));////MSG_SD_SIZE c=0 r=0 SERIAL_PROTOCOLLN(filesize); sdpos = 0; - SERIAL_PROTOCOLLNRPGM(MSG_SD_FILE_SELECTED); + SERIAL_PROTOCOLLNRPGM(_i("File selected"));////MSG_SD_FILE_SELECTED c=0 r=0 getfilename(0, fname); lcd_setstatus(longFilename[0] ? longFilename : fname); lcd_setstatus("SD-PRINTING "); @@ -421,7 +421,7 @@ void CardReader::openFile(char* name,bool read, bool replace_current/*=true*/) else { saving = true; - SERIAL_PROTOCOLRPGM(MSG_SD_WRITE_TO_FILE); + SERIAL_PROTOCOLRPGM(_i("Writing to file: "));////MSG_SD_WRITE_TO_FILE c=0 r=0 SERIAL_PROTOCOLLN(name); lcd_setstatus(fname); } @@ -513,7 +513,7 @@ void CardReader::getStatus() if(sdprinting){ SERIAL_PROTOCOL(longFilename); SERIAL_PROTOCOLPGM("\n"); - SERIAL_PROTOCOLRPGM(MSG_SD_PRINTING_BYTE); + SERIAL_PROTOCOLRPGM(_i("SD printing byte "));////MSG_SD_PRINTING_BYTE c=0 r=0 SERIAL_PROTOCOL(sdpos); SERIAL_PROTOCOLPGM("/"); SERIAL_PROTOCOLLN(filesize); @@ -673,7 +673,7 @@ void CardReader::chdir(const char * relpath) if(!newfile.open(*parent,relpath, O_READ)) { SERIAL_ECHO_START; - SERIAL_ECHORPGM(MSG_SD_CANT_ENTER_SUBDIR); + SERIAL_ECHORPGM(_i("Cannot enter subdir: "));////MSG_SD_CANT_ENTER_SUBDIR c=0 r=0 SERIAL_ECHOLN(relpath); } else @@ -748,14 +748,14 @@ void CardReader::presort() { // Never sort more than the max allowed // If you use folders to organize, 20 may be enough if (fileCnt > SDSORT_LIMIT) { - lcd_show_fullscreen_message_and_wait_P(MSG_FILE_CNT); + lcd_show_fullscreen_message_and_wait_P(_i("Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."));////MSG_FILE_CNT c=20 r=4 fileCnt = SDSORT_LIMIT; } lcd_implementation_clear(); #if !SDSORT_USES_RAM lcd_set_progress(); #endif - lcd_print_at_PGM(0, 1, MSG_SORTING); + lcd_print_at_PGM(0, 1, _i("Sorting files"));////MSG_SORTING c=20 r=1 // Sort order is always needed. May be static or dynamic. #if SDSORT_DYNAMIC_RAM diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp index 7daec45b..65c59198 100644 --- a/Firmware/cmdqueue.cpp +++ b/Firmware/cmdqueue.cpp @@ -425,7 +425,7 @@ void get_command() // M110 - set current line number. // Line numbers not sent in succession. SERIAL_ERROR_START; - SERIAL_ERRORRPGM(MSG_ERR_LINE_NO); + SERIAL_ERRORRPGM(_n("Line Number is not Last Line Number+1, Last Line: "));////MSG_ERR_LINE_NO c=0 r=0 SERIAL_ERRORLN(gcode_LastN); //Serial.println(gcode_N); FlushSerialRequestResend(); @@ -441,7 +441,7 @@ void get_command() checksum = checksum^(*p++); if (int(strtol(strchr_pointer+1, NULL, 10)) != int(checksum)) { SERIAL_ERROR_START; - SERIAL_ERRORRPGM(MSG_ERR_CHECKSUM_MISMATCH); + SERIAL_ERRORRPGM(_i("checksum mismatch, Last Line: "));////MSG_ERR_CHECKSUM_MISMATCH c=0 r=0 SERIAL_ERRORLN(gcode_LastN); FlushSerialRequestResend(); serial_count = 0; @@ -453,7 +453,7 @@ void get_command() else { SERIAL_ERROR_START; - SERIAL_ERRORRPGM(MSG_ERR_NO_CHECKSUM); + SERIAL_ERRORRPGM(_i("No Checksum with line number, Last Line: "));////MSG_ERR_NO_CHECKSUM c=0 r=0 SERIAL_ERRORLN(gcode_LastN); FlushSerialRequestResend(); serial_count = 0; @@ -470,7 +470,7 @@ void get_command() { SERIAL_ERROR_START; - SERIAL_ERRORRPGM(MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM); + SERIAL_ERRORRPGM(_n("No Line Number with checksum, Last Line: "));////MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM c=0 r=0 SERIAL_ERRORLN(gcode_LastN); serial_count = 0; return; @@ -580,7 +580,7 @@ void get_command() serial_count >= (MAX_CMD_SIZE - 1) || n==-1) { if(card.eof()){ - SERIAL_PROTOCOLLNRPGM(MSG_FILE_PRINTED); + SERIAL_PROTOCOLLNRPGM(_n("Done printing file"));////MSG_FILE_PRINTED c=0 r=0 stoptime=millis(); char time[30]; unsigned long t=(stoptime-starttime-pause_time)/1000; diff --git a/Firmware/config.h b/Firmware/config.h index e6430ee6..1a2b1ebd 100644 --- a/Firmware/config.h +++ b/Firmware/config.h @@ -18,4 +18,10 @@ #define TMC2130_SPCR SPI_SPCR(TMC2130_SPI_RATE, 1, 1, 1, 0) #define TMC2130_SPSR SPI_SPSR(TMC2130_SPI_RATE) +//LANG - Multi-language support +#define LANG_MODE 0 // primary language only +//#define LANG_MODE 1 // sec. language support +#define LANG_SIZE_RESERVED 0x3000 // reserved space for secondary language (12kb) + + #endif //_CONFIG_H diff --git a/Firmware/language.c b/Firmware/language.c new file mode 100644 index 00000000..d992b87e --- /dev/null +++ b/Firmware/language.c @@ -0,0 +1,63 @@ +//language.c +#include "language.h" +#include +#include + + +// Currectly active language selection. +unsigned char lang_selected = 0; + +#if (LANG_MODE == 0) //primary language only +#else //(LANG_MODE == 0) +//reserved xx kbytes for secondary language table +static const char _SEC_LANG[LANG_SIZE_RESERVED] PROGMEM_I2 = "_SEC_LANG"; +#endif //(LANG_MODE == 0) + +//lang_table_t structure - 16byte header +typedef struct +{ + struct + { + uint32_t magic; + uint16_t size; + uint16_t count; + uint16_t checksum; + uint16_t reserved0; + uint32_t reserved1; + } header; + uint16_t table[]; +} lang_table_t; + +//lang_table pointer +lang_table_t* lang_table = 0; + + +const char* lang_get_translation(const char* s) +{ + if (lang_selected == 0) return s + 2; //primary language selected + if (lang_table == 0) return s + 2; //sec. lang table not found + uint16_t ui = pgm_read_word(((uint16_t*)s)); //read string id + if (ui == 0xffff) return s + 2; //translation not found + ui = pgm_read_word(((uint16_t*)(((char*)lang_table + 16 + ui*2)))); //read relative offset + return (const char*)((char*)lang_table + ui + 16); //return calculated pointer +} + +const char* lang_select(unsigned char lang) +{ +#if (LANG_MODE == 0) //primary language only + return 0; +#else //(LANG_MODE == 0) + if (lang == 0) //primary language + { + lang_table = 0; + lang_selected = 0; + return; + } + uint16_t ui = (uint16_t)&_SEC_LANG; //pointer to _SEC_LANG reserved space + ui += 0x0100; //add 1 page + ui &= 0xff00; //align to page + 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 + 16); //return calculated pointer +#endif //(LANG_MODE == 0) +} \ No newline at end of file diff --git a/Firmware/language.h b/Firmware/language.h index cff631d8..add874d6 100644 --- a/Firmware/language.h +++ b/Firmware/language.h @@ -1,6 +1,9 @@ +//language.h #ifndef LANGUAGE_H #define LANGUAGE_H +#include "config.h" + #define PROTOCOL_VERSION "1.0" #ifdef CUSTOM_MENDEL_NAME @@ -9,8 +12,6 @@ #define MACHINE_NAME "Mendel" #endif - - #ifndef MACHINE_UUID #define MACHINE_UUID "00000000-0000-0000-0000-000000000000" #endif @@ -20,14 +21,67 @@ #define STRINGIFY_(n) #n #define STRINGIFY(n) STRINGIFY_(n) +#if (LANG_MODE == 0) +//#define _i PSTR +//#define _I(s) (__extension__({static const char __c[] __attribute__((section("Txt_i"))) = s; &__c[0];})) +#endif //(LANG_MODE == 0) -// Common serial messages -#define MSG_MARLIN "Marlin" +//section progmem0 will be used for localized translated strings +#define PROGMEM_I2 __attribute__((section(".progmem0"))) +//section progmem1 will be used for localized strings in english +#define PROGMEM_I1 __attribute__((section(".progmem1"))) +//section progmem2 will be used for not localized strings in english +#define PROGMEM_N1 __attribute__((section(".progmem2"))) -// Serial Console Messages (do not translate those!) +#if (LANG_MODE == 0) //primary language only +#define _I(s) (__extension__({static const char __c[] PROGMEM_I1 = s; &__c[0];})) +#define ISTR(s) s +#define _i(s) _I(s) +#define _T(s) s +#else //(LANG_MODE == 0) +#define _I(s) (__extension__({static const char __c[] PROGMEM_I1 = "\xff\xff"s; &__c[0];})) +#define ISTR(s) "\xff\xff"s +#define _i(s) lang_get_translation(_I(s)) +#define _T(s) lang_get_translation(s) +#endif //(LANG_MODE == 0) +#define _N(s) (__extension__({static const char __c[] PROGMEM_N1 = s; &__c[0];})) +#define _n(s) _N(s) -// LCD Menu Messages -#include "language_all.h" +// Language indices into their particular symbol tables. +#define LANG_ID_EN 0 +#define LANG_ID_CZ 1 +// Language is not defined and it shall be selected from the menu. +#define LANG_ID_FORCE_SELECTION 254 +// Language is not defined on a virgin RAMBo board. +#define LANG_ID_UNDEFINED 255 + +// Default language ID, if no language is selected. +#define LANG_ID_DEFAULT LANG_ID_CZ + +// Number of languages available in the language table. +#define LANG_NUM 2 + + +#if defined(__cplusplus) +extern "C" { +#endif //defined(__cplusplus) + +// Currectly active language selection. +extern unsigned char lang_selected; + +extern const char* lang_get_translation(const char* s); +extern const char* lang_select(unsigned char lang); + +#if defined(__cplusplus) +} +#endif //defined(__cplusplus) + +#define CAT2(_s1, _s2) _s1 +#define CAT4(_s1, _s2, _s3, _s4) _s1 +#define MSG_LANGUAGE_NAME_EXPLICIT(i) ((i==0)?PSTR("ENG"):PSTR("CZE")) + +#include "messages.h" #endif //__LANGUAGE_H + diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index cadd28de..80b5642a 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -2197,7 +2197,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level lcd_printPGM(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2); if (iteration > 0) { - lcd_print_at_PGM(0, next_line + 1, MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION); + lcd_print_at_PGM(0, next_line + 1, _i("Iteration "));////MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION c=20 r=0 lcd_implementation_print(int(iteration + 1)); } #endif /* MESH_BED_CALIBRATION_SHOW_LCD */ @@ -2455,7 +2455,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 #ifdef MESH_BED_CALIBRATION_SHOW_LCD uint8_t next_line; - lcd_display_message_fullscreen_P(MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1, next_line); + lcd_display_message_fullscreen_P(_i("Improving bed calibration point"), next_line);////MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1 c=60 r=0 if (next_line > 3) next_line = 3; #endif /* MESH_BED_CALIBRATION_SHOW_LCD */ @@ -2468,7 +2468,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 // Print the decrasing ID of the measurement point. #ifdef MESH_BED_CALIBRATION_SHOW_LCD lcd_implementation_print_at(0, next_line, mesh_point+1); - lcd_printPGM(MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2); + lcd_printPGM(_i(" of 4"));////MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 r=0 #endif /* MESH_BED_CALIBRATION_SHOW_LCD */ // Move up. diff --git a/Firmware/messages.c b/Firmware/messages.c new file mode 100644 index 00000000..25603435 --- /dev/null +++ b/Firmware/messages.c @@ -0,0 +1,120 @@ +//messages.c +#include "language.h" + +//this is because we need include Configuration_prusa.h (CUSTOM_MENDEL_NAME) +#define bool char +#define true 1 +#define false 0 +#include "Configuration_prusa.h" + +//internationalized messages +const char MSG_ALL[] PROGMEM_I1 = ISTR("All"); ////c=19 r=1 +const char MSG_AUTO_HOME[] PROGMEM_I1 = ISTR("Auto home"); ////c=0 r=0 +const char MSG_AUTO_MODE_ON[] PROGMEM_I1 = ISTR("Mode [auto power]"); ////c=0 r=0 +const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); ////c=0 r=0 +const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."); ////c=20 r=12 +const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); ////c=0 r=0 +const char MSG_BED_DONE[] PROGMEM_I1 = ISTR("Bed done"); ////c=0 r=0 +const char MSG_BED_HEATING[] PROGMEM_I1 = ISTR("Bed Heating"); ////c=0 r=0 +const char MSG_BED_LEVELING_FAILED_POINT_LOW[] PROGMEM_I1 = ISTR("Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."); ////c=20 r=4 +const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[] PROGMEM_I1 = ISTR("XYZ calibration failed. Please consult the manual."); ////c=20 r=8 +const char MSG_CALIBRATE_Z_AUTO[] PROGMEM_I1 = ISTR("Calibrating Z"); ////c=20 r=2 +const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); ////c=0 r=0 +const char MSG_CONFIRM_NOZZLE_CLEAN[] PROGMEM_I1 = ISTR("Please clean the nozzle for calibration. Click when done."); ////c=20 r=8 +const char MSG_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////c=0 r=0 +const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1 +const char MSG_CRASHDETECT_NA[] PROGMEM_I1 = ISTR("Crash det. [N/A]"); ////c=0 r=0 +const char MSG_CRASHDETECT_OFF[] PROGMEM_I1 = ISTR("Crash det. [off]"); ////c=0 r=0 +const char MSG_CRASHDETECT_ON[] PROGMEM_I1 = ISTR("Crash det. [on]"); ////c=0 r=0 +const char MSG_ENDSTOP_HIT[] PROGMEM_I1 = ISTR("TRIGGERED"); ////c=0 r=0 +const char MSG_ENDSTOP_OPEN[] PROGMEM_I1 = ISTR("open"); ////c=0 r=0 +const char MSG_ENDSTOPS_HIT[] PROGMEM_I1 = ISTR("endstops hit: "); ////c=0 r=0 +const char MSG_Enqueing[] PROGMEM_I1 = ISTR("enqueing \""); ////c=0 r=0 +const char MSG_ERR_STOPPED[] PROGMEM_I1 = ISTR("Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"); ////c=0 r=0 +const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////c=0 r=0 +const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1 +const char MSG_FAN_SPEED[] PROGMEM_I1 = ISTR("Fan speed"); ////c=14 r=0 +const char MSG_FILAMENT_CLEAN[] PROGMEM_I1 = ISTR("Filament extruding & with correct color?"); ////c=20 r=2 +const char MSG_FILAMENT_LOADING_T0[] PROGMEM_I1 = ISTR("Insert filament into extruder 1. Click when done."); ////c=20 r=4 +const char MSG_FILAMENT_LOADING_T1[] PROGMEM_I1 = ISTR("Insert filament into extruder 2. Click when done."); ////c=20 r=4 +const char MSG_FILAMENT_LOADING_T2[] PROGMEM_I1 = ISTR("Insert filament into extruder 3. Click when done."); ////c=20 r=4 +const char MSG_FILAMENT_LOADING_T3[] PROGMEM_I1 = ISTR("Insert filament into extruder 4. Click when done."); ////c=20 r=4 +const char MSG_FILAMENTCHANGE[] PROGMEM_I1 = ISTR("Change filament"); ////c=0 r=0 +const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[] PROGMEM_I1 = ISTR("Searching bed calibration point"); ////c=60 r=0 +const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[] PROGMEM_I1 = ISTR(" of 4"); ////c=14 r=0 +const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20 r=1 +const char MSG_FOLLOW_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8 +const char MSG_FSENS_AUTOLOAD_NA[] PROGMEM_I1 = ISTR("F. autoload [N/A]"); ////c=17 r=1 +const char MSG_FSENSOR_OFF[] PROGMEM_I1 = ISTR("Fil. sensor [off]"); ////c=0 r=0 +const char MSG_FSENSOR_ON[] PROGMEM_I1 = ISTR("Fil. sensor [on]"); ////c=0 r=0 +const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); ////c=0 r=0 +const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20 r=0 +const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); ////c=0 r=0 +const char MSG_CHOOSE_EXTRUDER[] PROGMEM_I1 = ISTR("Choose extruder:"); ////c=20 r=1 +const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); ////c=17 r=0 +const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20 r=0 +const char MSG_M117_V2_CALIBRATION[] PROGMEM_I1 = ISTR("M117 First layer cal."); ////c=25 r=1 +const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); ////c=0 r=0 +const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[] PROGMEM_I1 = ISTR("Measuring reference height of calibration point"); ////c=60 r=0 +const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[] PROGMEM_I1 = ISTR(" of 9"); ////c=14 r=0 +const char MSG_MENU_CALIBRATION[] PROGMEM_I1 = ISTR("Calibration"); ////c=0 r=0 +const char MSG_NO[] PROGMEM_I1 = ISTR("No"); ////c=0 r=0 +const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); ////c=0 r=0 +const char MSG_OK[] PROGMEM_I1 = ISTR("ok"); ////c=0 r=0 +const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=8 +const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=4 +const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20 r=0 +const char MSG_POWERUP[] PROGMEM_I1 = ISTR("PowerUp"); ////c=0 r=0 +const char MSG_PREHEAT_NOZZLE[] PROGMEM_I1 = ISTR("Preheat the nozzle!"); ////c=20 r=0 +const char MSG_PRESS_TO_UNLOAD[] PROGMEM_I1 = ISTR("Please press the knob to unload filament"); ////c=20 r=4 +const char MSG_PRINT_ABORTED[] PROGMEM_I1 = ISTR("Print aborted"); ////c=20 r=0 +const char MSG_PULL_OUT_FILAMENT[] PROGMEM_I1 = ISTR("Please pull out filament immediately"); ////c=20 r=4 +const char MSG_RECOVER_PRINT[] PROGMEM_I1 = ISTR("Blackout occurred. Recover print?"); ////c=20 r=2 +const char MSG_REFRESH[] PROGMEM_I1 = ISTR("\xF8" "Refresh"); ////c=0 r=0 +const char MSG_REMOVE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please remove steel sheet from heatbed."); ////c=20 r=4 +const char MSG_SD_ERR_WRITE_TO_FILE[] PROGMEM_I1 = ISTR("error writing to file"); ////c=0 r=0 +const char MSG_SD_OPEN_FILE_FAIL[] PROGMEM_I1 = ISTR("open failed, File: "); ////c=0 r=0 +const char MSG_SD_WORKDIR_FAIL[] PROGMEM_I1 = ISTR("workDir open failed"); ////c=0 r=0 +const char MSG_SELFTEST_COOLING_FAN[] PROGMEM_I1 = ISTR("Front print fan?"); ////c=20 r=0 +const char MSG_SELFTEST_EXTRUDER_FAN[] PROGMEM_I1 = ISTR("Left hotend fan?"); ////c=20 r=0 +const char MSG_SELFTEST_FAILED[] PROGMEM_I1 = ISTR("Selftest failed "); ////c=20 r=0 +const char MSG_SELFTEST_FAN[] PROGMEM_I1 = ISTR("Fan test"); ////c=20 r=0 +const char MSG_SELFTEST_FAN_NO[] PROGMEM_I1 = ISTR("Not spinning"); ////c=19 r=0 +const char MSG_SELFTEST_FAN_YES[] PROGMEM_I1 = ISTR("Spinning"); ////c=19 r=0 +const char MSG_SELFTEST_CHECK_BED[] PROGMEM_I1 = ISTR("Checking bed "); ////c=20 r=0 +const char MSG_SELFTEST_CHECK_FSENSOR[] PROGMEM_I1 = ISTR("Checking sensors "); ////c=20 r=0 +const char MSG_SELFTEST_MOTOR[] PROGMEM_I1 = ISTR("Motor"); ////c=0 r=0 +const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////c=0 r=0 +const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////c=0 r=0 +const char MSG_SILENT_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [high power]"); ////c=0 r=0 +const char MSG_SILENT_MODE_ON[] PROGMEM_I1 = ISTR("Mode [silent]"); ////c=0 r=0 +const char MSG_STEALTH_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [Normal]"); ////c=0 r=0 +const char MSG_STEALTH_MODE_ON[] PROGMEM_I1 = ISTR("Mode [Stealth]"); ////c=0 r=0 +const char MSG_STEEL_SHEET_CHECK[] PROGMEM_I1 = ISTR("Is steel sheet on heatbed?"); ////c=20 r=2 +const char MSG_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////c=0 r=0 +const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED. "); ////c=0 r=0 +const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal. "); ////c=20 r=1 +const char MSG_TEMP_CALIBRATION_DONE[] PROGMEM_I1 = ISTR("Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."); ////c=20 r=12 +const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////c=17 r=0 +const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20 r=1 +const char MSG_WATCH[] PROGMEM_I1 = ISTR("Info screen"); ////c=0 r=0 +const char MSG_WIZARD_CALIBRATION_FAILED[] PROGMEM_I1 = ISTR("Please check our handbook and fix the problem. Then resume the Wizard by rebooting the printer."); ////c=20 r=8 +const char MSG_WIZARD_DONE[] PROGMEM_I1 = ISTR("All is done. Happy printing!"); ////c=20 r=8 +const char MSG_WIZARD_HEATING[] PROGMEM_I1 = ISTR("Preheating nozzle. Please wait."); ////c=20 r=3 +const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard from Calibration -> Wizard."); ////c=20 r=8 +const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); ////c=0 r=0 +const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " ready."); ////c=20 r=0 +//not internationalized messages +const char MSG_BROWNOUT_RESET[] PROGMEM_N1 = " Brown out Reset"; ////c=0 r=0 +const char MSG_EXTERNAL_RESET[] PROGMEM_N1 = " External Reset"; ////c=0 r=0 +const char MSG_FILE_SAVED[] PROGMEM_N1 = "Done saving file."; ////c=0 r=0 +const char MSG_OFF[] PROGMEM_N1 = "Off"; ////c=0 r=0 +const char MSG_ON[] PROGMEM_N1 = "On "; ////c=0 r=0 +const char MSG_POSITION_UNKNOWN[] PROGMEM_N1 = "Home X/Y before Z"; ////c=0 r=0 +const char MSG_SOFTWARE_RESET[] PROGMEM_N1 = " Software Reset"; ////c=0 r=0 +const char MSG_UNKNOWN_COMMAND[] PROGMEM_N1 = "Unknown command: \""; ////c=0 r=0 +const char MSG_WATCHDOG_RESET[] PROGMEM_N1 = " Watchdog Reset"; ////c=0 r=0 +const char MSG_Z_MAX[] PROGMEM_N1 = "z_max: "; ////c=0 r=0 +const char MSG_Z_MIN[] PROGMEM_N1 = "z_min: "; ////c=0 r=0 +const char MSG_ZPROBE_OUT[] PROGMEM_N1 = "Z probe out. bed"; ////c=0 r=0 +const char MSG_ZPROBE_ZOFFSET[] PROGMEM_N1 = "Z Offset"; ////c=0 r=0 diff --git a/Firmware/messages.h b/Firmware/messages.h new file mode 100644 index 00000000..3b2c4bff --- /dev/null +++ b/Firmware/messages.h @@ -0,0 +1,117 @@ +//messages.h + +// Common serial messages +#define MSG_MARLIN "Marlin" + +// LCD Menu Messages +//internationalized messages +extern const char MSG_ALL[]; +extern const char MSG_AUTO_HOME[]; +extern const char MSG_AUTO_MODE_ON[]; +extern const char MSG_BABYSTEP_Z[]; +extern const char MSG_BABYSTEP_Z_NOT_SET[]; +extern const char MSG_BED[]; +extern const char MSG_BED_DONE[]; +extern const char MSG_BED_HEATING[]; +extern const char MSG_BED_LEVELING_FAILED_POINT_LOW[]; +extern const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[]; +extern const char MSG_CALIBRATE_Z_AUTO[]; +extern const char MSG_CARD_MENU[]; +extern const char MSG_CONFIRM_NOZZLE_CLEAN[]; +extern const char MSG_COOLDOWN[]; +extern const char MSG_CRASH_DETECTED[]; +extern const char MSG_CRASHDETECT_NA[]; +extern const char MSG_CRASHDETECT_OFF[]; +extern const char MSG_CRASHDETECT_ON[]; +extern const char MSG_ENDSTOP_HIT[]; +extern const char MSG_ENDSTOP_OPEN[]; +extern const char MSG_ENDSTOPS_HIT[]; +extern const char MSG_Enqueing[]; +extern const char MSG_ERR_STOPPED[]; +extern const char MSG_ERROR[]; +extern const char MSG_EXTRUDER[]; +extern const char MSG_FAN_SPEED[]; +extern const char MSG_FILAMENT_CLEAN[]; +extern const char MSG_FILAMENT_LOADING_T0[]; +extern const char MSG_FILAMENT_LOADING_T1[]; +extern const char MSG_FILAMENT_LOADING_T2[]; +extern const char MSG_FILAMENT_LOADING_T3[]; +extern const char MSG_FILAMENTCHANGE[]; +extern const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[]; +extern const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[]; +extern const char MSG_FINISHING_MOVEMENTS[]; +extern const char MSG_FOLLOW_CALIBRATION_FLOW[]; +extern const char MSG_FSENS_AUTOLOAD_NA[]; +extern const char MSG_FSENSOR_OFF[]; +extern const char MSG_FSENSOR_ON[]; +extern const char MSG_HEATING[]; +extern const char MSG_HEATING_COMPLETE[]; +extern const char MSG_HOMEYZ[]; +extern const char MSG_CHOOSE_EXTRUDER[]; +extern const char MSG_LOAD_FILAMENT[]; +extern const char MSG_LOADING_FILAMENT[]; +extern const char MSG_M117_V2_CALIBRATION[]; +extern const char MSG_MAIN[]; +extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[]; +extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[]; +extern const char MSG_MENU_CALIBRATION[]; +extern const char MSG_NO[]; +extern const char MSG_NOZZLE[]; +extern const char MSG_OK[]; +extern const char MSG_PAPER[]; +extern const char MSG_PLACE_STEEL_SHEET[]; +extern const char MSG_PLEASE_WAIT[]; +extern const char MSG_POWERUP[]; +extern const char MSG_PREHEAT_NOZZLE[]; +extern const char MSG_PRESS_TO_UNLOAD[]; +extern const char MSG_PRINT_ABORTED[]; +extern const char MSG_PULL_OUT_FILAMENT[]; +extern const char MSG_RECOVER_PRINT[]; +extern const char MSG_REFRESH[]; +extern const char MSG_REMOVE_STEEL_SHEET[]; +extern const char MSG_SD_ERR_WRITE_TO_FILE[]; +extern const char MSG_SD_OPEN_FILE_FAIL[]; +extern const char MSG_SD_WORKDIR_FAIL[]; +extern const char MSG_SELFTEST_COOLING_FAN[]; +extern const char MSG_SELFTEST_EXTRUDER_FAN[]; +extern const char MSG_SELFTEST_FAILED[]; +extern const char MSG_SELFTEST_FAN[]; +extern const char MSG_SELFTEST_FAN_NO[]; +extern const char MSG_SELFTEST_FAN_YES[]; +extern const char MSG_SELFTEST_CHECK_BED[]; +extern const char MSG_SELFTEST_CHECK_FSENSOR[]; +extern const char MSG_SELFTEST_MOTOR[]; +extern const char MSG_SELFTEST_WIRINGERROR[]; +extern const char MSG_SETTINGS[]; +extern const char MSG_SILENT_MODE_OFF[]; +extern const char MSG_SILENT_MODE_ON[]; +extern const char MSG_STEALTH_MODE_OFF[]; +extern const char MSG_STEALTH_MODE_ON[]; +extern const char MSG_STEEL_SHEET_CHECK[]; +extern const char MSG_STOP_PRINT[]; +extern const char MSG_STOPPED[]; +extern const char MSG_TEMP_CALIBRATION[]; +extern const char MSG_TEMP_CALIBRATION_DONE[]; +extern const char MSG_UNLOAD_FILAMENT[]; +extern const char MSG_UNLOADING_FILAMENT[]; +extern const char MSG_WATCH[]; +extern const char MSG_WIZARD_CALIBRATION_FAILED[]; +extern const char MSG_WIZARD_DONE[]; +extern const char MSG_WIZARD_HEATING[]; +extern const char MSG_WIZARD_QUIT[]; +extern const char MSG_YES[]; +extern const char WELCOME_MSG[]; +//not internationalized messages +extern const char MSG_BROWNOUT_RESET[]; +extern const char MSG_EXTERNAL_RESET[]; +extern const char MSG_FILE_SAVED[]; +extern const char MSG_OFF[]; +extern const char MSG_ON[]; +extern const char MSG_POSITION_UNKNOWN[]; +extern const char MSG_SOFTWARE_RESET[]; +extern const char MSG_UNKNOWN_COMMAND[]; +extern const char MSG_WATCHDOG_RESET[]; +extern const char MSG_Z_MAX[]; +extern const char MSG_Z_MIN[]; +extern const char MSG_ZPROBE_OUT[]; +extern const char MSG_ZPROBE_ZOFFSET[]; diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp index b2f85074..a2c8f9c2 100644 --- a/Firmware/planner.cpp +++ b/Firmware/planner.cpp @@ -742,7 +742,7 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate de_float = 0; #endif SERIAL_ECHO_START; - SERIAL_ECHOLNRPGM(MSG_ERR_COLD_EXTRUDE_STOP); + SERIAL_ECHOLNRPGM(_i(" cold extrusion prevented"));////MSG_ERR_COLD_EXTRUDE_STOP c=0 r=0 } #ifdef PREVENT_LENGTHY_EXTRUDE @@ -754,7 +754,7 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate de_float = 0; #endif SERIAL_ECHO_START; - SERIAL_ECHOLNRPGM(MSG_ERR_LONG_EXTRUDE_STOP); + SERIAL_ECHOLNRPGM(_n(" too long extrusion prevented"));////MSG_ERR_LONG_EXTRUDE_STOP c=0 r=0 } #endif } diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index 99358989..623c4bc7 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -342,7 +342,7 @@ FORCE_INLINE unsigned short calc_timer(uint16_t step_rate) { timer = (unsigned short)pgm_read_word_near(table_address); timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3); } - if(timer < 100) { timer = 100; MYSERIAL.print(MSG_STEPPER_TOO_HIGH); MYSERIAL.println(step_rate); }//(20kHz this should never happen) + if(timer < 100) { timer = 100; MYSERIAL.print(_i("Steprate too high: ")); MYSERIAL.println(step_rate); }//(20kHz this should never happen)////MSG_STEPPER_TOO_HIGH c=0 r=0 return timer; } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f190149e..2c7f5ec5 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -604,7 +604,7 @@ static void lcd_status_screen() /*if (farm_mode && !printer_connected) { lcd.setCursor(0, 3); - lcd_printPGM(MSG_PRINTER_DISCONNECTED); + lcd_printPGM(_i("Printer disconnected"));////MSG_PRINTER_DISCONNECTED c=20 r=1 }*/ @@ -639,7 +639,7 @@ void lcd_commands() } } if (lcd_commands_step == 1 && !blocks_queued() && !homing_flag) { - lcd_setstatuspgm(MSG_PRINT_PAUSED); + lcd_setstatuspgm(_i("Print paused"));////MSG_PRINT_PAUSED c=20 r=1 isPrintPaused = true; long_pause(); lcd_commands_type = 0; @@ -703,7 +703,7 @@ void lcd_commands() strcat(cmd1, ftostr32(pause_lastpos[Y_AXIS])); enquecommand(cmd1); - lcd_setstatuspgm(MSG_RESUMING_PRINT); + lcd_setstatuspgm(_i("Resuming print"));////MSG_RESUMING_PRINT c=20 r=1 lcd_commands_step = 3; } } @@ -1363,13 +1363,13 @@ void lcd_commands() strcpy(cmd1, "M303 E0 S"); strcat(cmd1, ftostr3(pid_temp)); enquecommand(cmd1); - lcd_setstatuspgm(MSG_PID_RUNNING); + lcd_setstatuspgm(_i("PID cal. "));////MSG_PID_RUNNING c=20 r=1 lcd_commands_step = 2; } if (lcd_commands_step == 2 && pid_tuning_finished) { //saving to eeprom pid_tuning_finished = false; custom_message_state = 0; - lcd_setstatuspgm(MSG_PID_FINISHED); + lcd_setstatuspgm(_i("PID cal. finished"));////MSG_PID_FINISHED c=20 r=1 if (_Kp != 0 || _Ki != 0 || _Kd != 0) { strcpy(cmd1, "M301 P"); strcat(cmd1, ftostr32(_Kp)); @@ -1534,7 +1534,7 @@ static void lcd_menu_extruder_info() // Display Nozzle fan RPM lcd.setCursor(0, 0); - lcd_printPGM(MSG_INFO_NOZZLE_FAN); + lcd_printPGM(_i("Nozzle FAN:"));////MSG_INFO_NOZZLE_FAN c=11 r=1 lcd.setCursor(11, 0); lcd.print(" "); @@ -1546,7 +1546,7 @@ static void lcd_menu_extruder_info() #if (defined(TACH_1)) lcd.setCursor(0, 1); - lcd_printPGM(MSG_INFO_PRINT_FAN); + lcd_printPGM(_i("Print FAN: "));////MSG_INFO_PRINT_FAN c=11 r=1 lcd.setCursor(11, 1); lcd.print(" "); @@ -1817,15 +1817,15 @@ static void lcd_support_menu() MENU_ITEM(back, PSTR("FW - " FW_version), 0); }*/ - MENU_ITEM(back, MSG_PRUSA3D, 0); - MENU_ITEM(back, MSG_PRUSA3D_FORUM, 0); - MENU_ITEM(back, MSG_PRUSA3D_HOWTO, 0); + MENU_ITEM(back, _i("prusa3d.com"), 0);////MSG_PRUSA3D c=0 r=0 + MENU_ITEM(back, _i("forum.prusa3d.com"), 0);////MSG_PRUSA3D_FORUM c=0 r=0 + MENU_ITEM(back, _i("howto.prusa3d.com"), 0);////MSG_PRUSA3D_HOWTO c=0 r=0 MENU_ITEM(back, PSTR("------------"), 0); MENU_ITEM(back, PSTR(FILAMENT_SIZE), 0); MENU_ITEM(back, PSTR(ELECTRONICS),0); MENU_ITEM(back, PSTR(NOZZLE_TYPE),0); MENU_ITEM(back, PSTR("------------"), 0); - MENU_ITEM(back, MSG_DATE, 0); + MENU_ITEM(back, _i("Date:"), 0);////MSG_DATE c=17 r=1 MENU_ITEM(back, PSTR(__DATE__), 0); // Show the FlashAir IP address, if the card is available. @@ -1836,17 +1836,17 @@ static void lcd_support_menu() } #ifndef MK1BP MENU_ITEM(back, PSTR("------------"), 0); - MENU_ITEM(submenu, MSG_XYZ_DETAILS, lcd_menu_xyz_y_min); - MENU_ITEM(submenu, MSG_INFO_EXTRUDER, lcd_menu_extruder_info); + MENU_ITEM(submenu, _i("XYZ cal. details"), lcd_menu_xyz_y_min);////MSG_XYZ_DETAILS c=19 r=1 + MENU_ITEM(submenu, _i("Extruder info"), lcd_menu_extruder_info);////MSG_INFO_EXTRUDER c=15 r=1 #ifdef TMC2130 - MENU_ITEM(submenu, MSG_MENU_BELT_STATUS, lcd_menu_belt_status); + MENU_ITEM(submenu, _i("Belt status"), lcd_menu_belt_status);////MSG_MENU_BELT_STATUS c=15 r=1 #endif //TMC2130 - MENU_ITEM(submenu, MSG_MENU_TEMPERATURES, lcd_menu_temperatures); + MENU_ITEM(submenu, _i("Temperatures"), lcd_menu_temperatures);////MSG_MENU_TEMPERATURES c=15 r=1 #if defined (VOLT_BED_PIN) || defined (VOLT_PWR_PIN) - MENU_ITEM(submenu, MSG_MENU_VOLTAGES, lcd_menu_voltages); + MENU_ITEM(submenu, _i("Voltages"), lcd_menu_voltages);////MSG_MENU_VOLTAGES c=15 r=1 #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN #ifdef DEBUG_BUILD @@ -1897,7 +1897,7 @@ void lcd_change_filament() { lcd.setCursor(0, 1); - lcd_printPGM(MSG_CHANGING_FILAMENT); + lcd_printPGM(_i("Changing filament!"));////MSG_CHANGING_FILAMENT c=20 r=0 } @@ -1909,12 +1909,12 @@ void lcd_wait_interact() { lcd.setCursor(0, 1); #ifdef SNMM - lcd_printPGM(MSG_PREPARE_FILAMENT); + lcd_printPGM(_i("Prepare new filament"));////MSG_PREPARE_FILAMENT c=20 r=1 #else - lcd_printPGM(MSG_INSERT_FILAMENT); + lcd_printPGM(_i("Insert filament"));////MSG_INSERT_FILAMENT c=20 r=0 #endif lcd.setCursor(0, 2); - lcd_printPGM(MSG_PRESS); + lcd_printPGM(_i("and press the knob"));////MSG_PRESS c=20 r=0 } @@ -1925,7 +1925,7 @@ void lcd_change_success() { lcd.setCursor(0, 2); - lcd_printPGM(MSG_CHANGE_SUCCESS); + lcd_printPGM(_i("Change success!"));////MSG_CHANGE_SUCCESS c=0 r=0 } @@ -1937,7 +1937,7 @@ void lcd_loading_color() { lcd.setCursor(0, 0); - lcd_printPGM(MSG_LOADING_COLOR); + lcd_printPGM(_i("Loading color"));////MSG_LOADING_COLOR c=0 r=0 lcd.setCursor(0, 2); lcd_printPGM(MSG_PLEASE_WAIT); @@ -2004,7 +2004,7 @@ void lcd_alright() { lcd.setCursor(0, 0); - lcd_printPGM(MSG_CORRECTLY); + lcd_printPGM(_i("Changed correctly?"));////MSG_CORRECTLY c=20 r=0 lcd.setCursor(1, 1); @@ -2012,11 +2012,11 @@ void lcd_alright() { lcd.setCursor(1, 2); - lcd_printPGM(MSG_NOT_LOADED); + lcd_printPGM(_i("Filament not loaded"));////MSG_NOT_LOADED c=19 r=0 lcd.setCursor(1, 3); - lcd_printPGM(MSG_NOT_COLOR); + lcd_printPGM(_i("Color not correct"));////MSG_NOT_COLOR c=0 r=0 lcd.setCursor(0, 1); @@ -2087,7 +2087,7 @@ static void lcd_menu_AutoLoadFilament() if (degHotend0() > EXTRUDE_MINTEMP) { uint8_t nlines; - lcd_display_message_fullscreen_nonBlocking_P(MSG_AUTOLOADING_ENABLED,nlines); + lcd_display_message_fullscreen_nonBlocking_P(_i("Autoloading filament is active, just press the knob and insert filament..."),nlines);////MSG_AUTOLOADING_ENABLED c=20 r=4 } else { @@ -2140,7 +2140,7 @@ void lcd_menu_statistics() int _s = _t - ((_h * 3600) + (_m * 60)); lcd.setCursor(0, 0); - lcd_printPGM(MSG_STATS_FILAMENTUSED); + lcd_printPGM(_i("Filament used: "));////MSG_STATS_FILAMENTUSED c=20 r=0 lcd.setCursor(6, 1); lcd.print(itostr3(_met)); @@ -2149,7 +2149,7 @@ void lcd_menu_statistics() lcd.print("cm"); lcd.setCursor(0, 2); - lcd_printPGM(MSG_STATS_PRINTTIME); + lcd_printPGM(_i("Print time: "));////MSG_STATS_PRINTTIME c=20 r=0 lcd.setCursor(8, 3); lcd.print(itostr2(_h)); @@ -2184,7 +2184,7 @@ void lcd_menu_statistics() lcd_implementation_clear(); lcd.setCursor(0, 0); - lcd_printPGM(MSG_STATS_TOTALFILAMENT); + lcd_printPGM(_i("Total filament :"));////MSG_STATS_TOTALFILAMENT c=20 r=0 lcd.setCursor(17 - strlen(ftostr32ns(_filament_m)), 1); lcd.print(ftostr32ns(_filament_m)); @@ -2201,7 +2201,7 @@ void lcd_menu_statistics() lcd.print("m"); lcd.setCursor(0, 2); - lcd_printPGM(MSG_STATS_TOTALPRINTTIME);; + lcd_printPGM(_i("Total print time :"));;////MSG_STATS_TOTALPRINTTIME c=20 r=0 lcd.setCursor(18, 3); lcd.print("m"); @@ -2304,10 +2304,10 @@ static void lcd_move_e() static void lcd_menu_xyz_y_min() { lcd.setCursor(0,0); - lcd_printPGM(MSG_Y_DISTANCE_FROM_MIN); + lcd_printPGM(_i("Y distance from min:"));////MSG_Y_DISTANCE_FROM_MIN c=20 r=1 lcd_print_at_PGM(0, 1, separator); - lcd_print_at_PGM(0, 2, MSG_LEFT); - lcd_print_at_PGM(0, 3, MSG_RIGHT); + lcd_print_at_PGM(0, 2, _i("Left:"));////MSG_LEFT c=12 r=1 + lcd_print_at_PGM(0, 3, _i("Right:"));////MSG_RIGHT c=12 r=1 float distanceMin[2]; count_xyz_details(distanceMin); @@ -2333,18 +2333,18 @@ static void lcd_menu_xyz_skew() angleDiff = eeprom_read_float((float*)(EEPROM_XYZ_CAL_SKEW)); lcd.setCursor(0,0); - lcd_printPGM(MSG_MEASURED_SKEW); + lcd_printPGM(_i("Measured skew:"));////MSG_MEASURED_SKEW c=15 r=1 if (angleDiff < 100) { lcd.setCursor(15, 0); lcd.print(angleDiff * 180 / M_PI); lcd.print(LCD_STR_DEGREE); }else lcd_print_at_PGM(16, 0, PSTR("N/A")); lcd_print_at_PGM(0, 1, separator); - lcd_print_at_PGM(0, 2, MSG_SLIGHT_SKEW); + lcd_print_at_PGM(0, 2, _i("Slight skew:"));////MSG_SLIGHT_SKEW c=15 r=1 lcd_print_at_PGM(15, 2, PSTR("")); lcd.print(bed_skew_angle_mild * 180 / M_PI); lcd.print(LCD_STR_DEGREE); - lcd_print_at_PGM(0, 3, MSG_SEVERE_SKEW); + lcd_print_at_PGM(0, 3, _i("Severe skew:"));////MSG_SEVERE_SKEW c=15 r=1 lcd_print_at_PGM(15, 3, PSTR("")); lcd.print(bed_skew_angle_extreme * 180 / M_PI); lcd.print(LCD_STR_DEGREE); @@ -2360,7 +2360,7 @@ static void lcd_menu_xyz_skew() static void lcd_menu_xyz_offset() { lcd.setCursor(0,0); - lcd_printPGM(MSG_MEASURED_OFFSET); + lcd_printPGM(_i("[0;0] point offset"));////MSG_MEASURED_OFFSET c=0 r=0 lcd_print_at_PGM(0, 1, separator); lcd_print_at_PGM(0, 2, PSTR("X")); lcd_print_at_PGM(0, 3, PSTR("Y")); @@ -2479,13 +2479,13 @@ static void _lcd_babystep(int axis, const char *msg) } static void lcd_babystep_x() { - _lcd_babystep(X_AXIS, (MSG_BABYSTEPPING_X)); + _lcd_babystep(X_AXIS, (_i("Babystepping X")));////MSG_BABYSTEPPING_X c=0 r=0 } static void lcd_babystep_y() { - _lcd_babystep(Y_AXIS, (MSG_BABYSTEPPING_Y)); + _lcd_babystep(Y_AXIS, (_i("Babystepping Y")));////MSG_BABYSTEPPING_Y c=0 r=0 } static void lcd_babystep_z() { - _lcd_babystep(Z_AXIS, (MSG_BABYSTEPPING_Z)); + _lcd_babystep(Z_AXIS, (_i("Adjusting Z")));////MSG_BABYSTEPPING_Z c=20 r=0 } static void lcd_adjust_bed(); @@ -2561,11 +2561,11 @@ static void lcd_adjust_bed() START_MENU(); MENU_ITEM(back, MSG_SETTINGS, 0); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_LEFT, &menuData.adjustBed.left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_RIGHT, &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT, &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR, &menuData.adjustBed.rear2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); - MENU_ITEM(function, MSG_BED_CORRECTION_RESET, lcd_adjust_bed_reset); + MENU_ITEM_EDIT(int3, _i("Left side [um]"), &menuData.adjustBed.left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_LEFT c=14 r=1 + MENU_ITEM_EDIT(int3, _i("Right side[um]"), &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_RIGHT c=14 r=1 + MENU_ITEM_EDIT(int3, _i("Front side[um]"), &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_FRONT c=14 r=1 + MENU_ITEM_EDIT(int3, _i("Rear side [um]"), &menuData.adjustBed.rear2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_REAR c=14 r=1 + MENU_ITEM(function, _i("Reset"), lcd_adjust_bed_reset);////MSG_BED_CORRECTION_RESET c=0 r=0 END_MENU(); } @@ -2573,7 +2573,7 @@ void pid_extruder() { lcd_implementation_clear(); lcd.setCursor(1, 0); - lcd_printPGM(MSG_SET_TEMPERATURE); + lcd_printPGM(_i("Set temperature:"));////MSG_SET_TEMPERATURE c=19 r=1 pid_temp += int(encoderPosition); if (pid_temp > HEATER_0_MAXTEMP) pid_temp = HEATER_0_MAXTEMP; if (pid_temp < HEATER_0_MINTEMP) pid_temp = HEATER_0_MINTEMP; @@ -2598,7 +2598,7 @@ void lcd_adjust_z() { lcd_implementation_clear(); lcd.setCursor(0, 0); - lcd_printPGM(MSG_ADJUSTZ); + lcd_printPGM(_i("Auto adjust Z?"));////MSG_ADJUSTZ c=0 r=0 lcd.setCursor(1, 1); lcd_printPGM(MSG_YES); @@ -2681,7 +2681,7 @@ bool lcd_wait_for_pinda(float temp) { bool target_temp_reached = true; while (current_temperature_pinda > temp){ - lcd_display_message_fullscreen_P(MSG_WAITING_TEMP_PINDA); + lcd_display_message_fullscreen_P(_i("Waiting for PINDA probe cooling"));////MSG_WAITING_TEMP_PINDA c=20 r=3 lcd.setCursor(0, 4); lcd.print(LCD_STR_THERMOMETER[0]); @@ -2717,7 +2717,7 @@ void lcd_wait_for_cool_down() { setTargetHotend(0,0); setTargetBed(0); while ((degHotend(0)>MAX_HOTEND_TEMP_CALIBRATION) || (degBed() > MAX_BED_TEMP_CALIBRATION)) { - lcd_display_message_fullscreen_P(MSG_WAITING_TEMP); + lcd_display_message_fullscreen_P(_i("Waiting for nozzle and bed cooling"));////MSG_WAITING_TEMP c=20 r=3 lcd.setCursor(0, 4); lcd.print(LCD_STR_THERMOMETER[0]); @@ -2754,7 +2754,7 @@ bool lcd_calibrate_z_end_stop_manual(bool only_z) // Until confirmed by the confirmation dialog. for (;;) { unsigned long previous_millis_cmd = millis(); - const char *msg = only_z ? MSG_MOVE_CARRIAGE_TO_THE_TOP_Z : MSG_MOVE_CARRIAGE_TO_THE_TOP; + const char *msg = only_z ? _i("Calibrating Z. Rotate the knob to move the Z carriage up to the end stoppers. Click when done.") : _i("Calibrating XYZ. Rotate the knob to move the Z carriage up to the end stoppers. Click when done.");////MSG_MOVE_CARRIAGE_TO_THE_TOP c=20 r=8////MSG_MOVE_CARRIAGE_TO_THE_TOP_Z c=20 r=8 const char *msg_next = lcd_display_message_fullscreen_P(msg); const bool multi_screen = msg_next != NULL; unsigned long previous_millis_msg = millis(); @@ -2801,7 +2801,7 @@ bool lcd_calibrate_z_end_stop_manual(bool only_z) // Let the user confirm, that the Z carriage is at the top end stoppers. - int8_t result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_CONFIRM_CARRIAGE_AT_THE_TOP, false); + int8_t result = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Are left and right Z~carriages all up?"), false);////MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2 if (result == -1) goto canceled; else if (result == 1) @@ -3117,31 +3117,31 @@ void lcd_bed_calibration_show_result(BedSkewOffsetDetectionResultType result, ui { const char *msg = NULL; if (result == BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND) { - lcd_show_fullscreen_message_and_wait_P(MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND); + lcd_show_fullscreen_message_and_wait_P(_i("XYZ calibration failed. Bed calibration point was not found."));////MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND c=20 r=8 } else if (result == BED_SKEW_OFFSET_DETECTION_FITTING_FAILED) { if (point_too_far_mask == 0) msg = MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED; else if (point_too_far_mask == 2 || point_too_far_mask == 7) // Only the center point or all the three front points. - msg = MSG_BED_SKEW_OFFSET_DETECTION_FAILED_FRONT_BOTH_FAR; + msg = _i("XYZ calibration failed. Front calibration points not reachable.");////MSG_BED_SKEW_OFFSET_DETECTION_FAILED_FRONT_BOTH_FAR c=20 r=8 else if (point_too_far_mask & 1 == 0) // The right and maybe the center point out of reach. - msg = MSG_BED_SKEW_OFFSET_DETECTION_FAILED_FRONT_RIGHT_FAR; + msg = _i("XYZ calibration failed. Right front calibration point not reachable.");////MSG_BED_SKEW_OFFSET_DETECTION_FAILED_FRONT_RIGHT_FAR c=20 r=8 else // The left and maybe the center point out of reach. - msg = MSG_BED_SKEW_OFFSET_DETECTION_FAILED_FRONT_LEFT_FAR; + msg = _i("XYZ calibration failed. Left front calibration point not reachable.");////MSG_BED_SKEW_OFFSET_DETECTION_FAILED_FRONT_LEFT_FAR c=20 r=8 lcd_show_fullscreen_message_and_wait_P(msg); } else { if (point_too_far_mask != 0) { if (point_too_far_mask == 2 || point_too_far_mask == 7) // Only the center point or all the three front points. - msg = MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_BOTH_FAR; + msg = _i("XYZ calibration compromised. Front calibration points not reachable.");////MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_BOTH_FAR c=20 r=8 else if (point_too_far_mask & 1 == 0) // The right and maybe the center point out of reach. - msg = MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_RIGHT_FAR; + msg = _i("XYZ calibration compromised. Right front calibration point not reachable.");////MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_RIGHT_FAR c=20 r=8 else // The left and maybe the center point out of reach. - msg = MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_LEFT_FAR; + msg = _i("XYZ calibration compromised. Left front calibration point not reachable.");////MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_LEFT_FAR c=20 r=8 lcd_show_fullscreen_message_and_wait_P(msg); } if (point_too_far_mask == 0 || result > 0) { @@ -3151,13 +3151,13 @@ void lcd_bed_calibration_show_result(BedSkewOffsetDetectionResultType result, ui msg = MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED; break; case BED_SKEW_OFFSET_DETECTION_PERFECT: - msg = MSG_BED_SKEW_OFFSET_DETECTION_PERFECT; + msg = _i("XYZ calibration ok. X/Y axes are perpendicular. Congratulations!");////MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8 break; case BED_SKEW_OFFSET_DETECTION_SKEW_MILD: - msg = MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD; + msg = _i("XYZ calibration all right. X/Y axes are slightly skewed. Good job!");////MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD c=20 r=8 break; case BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME: - msg = MSG_BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME; + msg = _i("XYZ calibration all right. Skew will be corrected automatically.");////MSG_BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME c=20 r=8 break; } lcd_show_fullscreen_message_and_wait_P(msg); @@ -3187,7 +3187,7 @@ void lcd_temp_cal_show_result(bool result) { else { eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 0); SERIAL_ECHOLNPGM("Temperature calibration failed. Continue with pressing the knob."); - lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CAL_FAILED); + lcd_show_fullscreen_message_and_wait_P(_i("Temperature calibration failed"));////MSG_TEMP_CAL_FAILED c=20 r=8 temp_cal_active = false; eeprom_update_byte((unsigned char *)EEPROM_TEMP_CAL_ACTIVE, 0); } @@ -3461,7 +3461,7 @@ void lcd_pick_babystep(){ lcd.setCursor(0, 0); - lcd_printPGM(MSG_PICK_Z); + lcd_printPGM(_i("Pick print"));////MSG_PICK_Z c=0 r=0 lcd.setCursor(3, 2); @@ -3555,10 +3555,10 @@ void lcd_move_menu_axis() { START_MENU(); MENU_ITEM(back, MSG_SETTINGS, 0); - MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x); - MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y); - MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z); - MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e); + MENU_ITEM(submenu, _i("Move X"), lcd_move_x);////MSG_MOVE_X c=0 r=0 + MENU_ITEM(submenu, _i("Move Y"), lcd_move_y);////MSG_MOVE_Y c=0 r=0 + MENU_ITEM(submenu, _i("Move Z"), lcd_move_z);////MSG_MOVE_Z c=0 r=0 + MENU_ITEM(submenu, _i("Extruder"), lcd_move_e);////MSG_MOVE_E c=0 r=0 END_MENU(); } @@ -3611,7 +3611,7 @@ static void lcd_crash_mode_info() static uint32_t tim = 0; if ((tim + 1000) < millis()) { - fputs_P(MSG_CRASH_DET_ONLY_IN_NORMAL, lcdout); + fputs_P(_i("Crash detection canbe turned on only inNormal mode"), lcdout);////MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4 tim = millis(); } if (lcd_clicked()) @@ -3624,7 +3624,7 @@ static void lcd_crash_mode_info2() static uint32_t tim = 0; if ((tim + 1000) < millis()) { - fputs_P(MSG_CRASH_DET_STEALTH_FORCE_OFF, lcdout); + fputs_P(_i("WARNING:Crash detectiondisabled inStealth mode"), lcdout);////MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4 tim = millis(); } if (lcd_clicked()) @@ -3635,12 +3635,12 @@ static void lcd_crash_mode_info2() #ifdef PAT9125 static void lcd_filament_autoload_info() { - lcd_show_fullscreen_message_and_wait_P(MSG_AUTOLOADING_ONLY_IF_FSENS_ON); + lcd_show_fullscreen_message_and_wait_P(_i("Autoloading filament available only when filament sensor is turned on..."));////MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4 } static void lcd_fsensor_fail() { - lcd_show_fullscreen_message_and_wait_P(MSG_FSENS_NOT_RESPONDING); + lcd_show_fullscreen_message_and_wait_P(_i("ERROR: Filament sensor is not responding, please check connection."));////MSG_FSENS_NOT_RESPONDING c=20 r=4 } #endif //PAT9125 @@ -3782,7 +3782,7 @@ void lcd_pinda_calibration_menu() { START_MENU(); MENU_ITEM(back, MSG_MENU_CALIBRATION, 0); - MENU_ITEM(submenu, MSG_CALIBRATE_PINDA, lcd_calibrate_pinda); + MENU_ITEM(submenu, _i("Calibrate"), lcd_calibrate_pinda);////MSG_CALIBRATE_PINDA c=17 r=1 END_MENU(); } @@ -3823,12 +3823,12 @@ void lcd_calibrate_pinda() { float e_steps_per_unit; float feedrate = (180 / axis_steps_per_unit[E_AXIS]) * 1; //3 //initial automatic extrusion feedrate (depends on current value of axis_steps_per_unit to avoid too fast extrusion) float e_shift_calibration = (axis_steps_per_unit[E_AXIS] > 180 ) ? ((180 / axis_steps_per_unit[E_AXIS]) * 70): 70; //length of initial automatic extrusion sequence - const char *msg_e_cal_knob = MSG_E_CAL_KNOB; + const char *msg_e_cal_knob = _i("Rotate knob until mark reaches extruder body. Click when done.");////MSG_E_CAL_KNOB c=20 r=8 const char *msg_next_e_cal_knob = lcd_display_message_fullscreen_P(msg_e_cal_knob); const bool multi_screen = msg_next_e_cal_knob != NULL; unsigned long msg_millis; - lcd_show_fullscreen_message_and_wait_P(MSG_MARK_FIL); + lcd_show_fullscreen_message_and_wait_P(_i("Mark filament 100mm from extruder body. Click when done."));////MSG_MARK_FIL c=20 r=8 lcd_implementation_clear(); @@ -3878,7 +3878,7 @@ void lcd_calibrate_pinda() { //lcd_implementation_drawedit(PSTR("Result"), ftostr31(axis_steps_per_unit[E_AXIS])); //delay_keep_alive(2000); delay_keep_alive(500); - lcd_show_fullscreen_message_and_wait_P(MSG_CLEAN_NOZZLE_E); + lcd_show_fullscreen_message_and_wait_P(_i("E calibration finished. Please clean the nozzle. Click when done."));////MSG_CLEAN_NOZZLE_E c=20 r=8 lcd_update_enable(true); lcdDrawUpdate = 2; @@ -3912,12 +3912,12 @@ void lcd_toshiba_flash_air_compatibility_toggle() } void lcd_v2_calibration() { - bool loaded = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_PLA_FILAMENT_LOADED, false, true); + bool loaded = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is PLA filament loaded?"), false, true);////MSG_PLA_FILAMENT_LOADED c=20 r=2 if (loaded) { lcd_commands_type = LCD_COMMAND_V2_CAL; } else { - lcd_display_message_fullscreen_P(MSG_PLEASE_LOAD_PLA); + lcd_display_message_fullscreen_P(_i("Please load PLA filament first."));////MSG_PLEASE_LOAD_PLA c=20 r=4 for (int i = 0; i < 20; i++) { //wait max. 2s delay_keep_alive(100); if (lcd_clicked()) { @@ -3935,7 +3935,7 @@ void lcd_v2_calibration() { void lcd_wizard() { bool result = true; if (calibration_status() != CALIBRATION_STATUS_ASSEMBLED) { - result = lcd_show_multiscreen_message_yes_no_and_wait_P(MSG_WIZARD_RERUN, false, false); + result = lcd_show_multiscreen_message_yes_no_and_wait_P(_i("Running Wizard will delete current calibration results and start from the beginning. Continue?"), false, false);////MSG_WIZARD_RERUN c=20 r=7 } if (result) { calibration_status_store(CALIBRATION_STATUS_ASSEMBLED); @@ -3956,7 +3956,7 @@ void lcd_wizard(int state) { while (!end) { switch (state) { case 0: // run wizard? - wizard_event = lcd_show_multiscreen_message_yes_no_and_wait_P(MSG_WIZARD_WELCOME, false, true); + wizard_event = lcd_show_multiscreen_message_yes_no_and_wait_P(_i("Hi, I am your Original Prusa i3 printer. Would you like me to guide you through the setup process?"), false, true);////MSG_WIZARD_WELCOME c=20 r=7 if (wizard_event) { state = 1; eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); @@ -3977,7 +3977,7 @@ void lcd_wizard(int state) { } break; case 2: //selftest - lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_SELFTEST); + lcd_show_fullscreen_message_and_wait_P(_i("First, I will run the selftest to check most common assembly problems."));////MSG_WIZARD_SELFTEST c=20 r=8 wizard_event = lcd_selftest(); if (wizard_event) { calibration_status_store(CALIBRATION_STATUS_XYZ_CALIBRATION); @@ -3986,13 +3986,13 @@ void lcd_wizard(int state) { else end = true; break; case 3: //xyz cal. - lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_XYZ_CAL); + lcd_show_fullscreen_message_and_wait_P(_i("I will run xyz calibration now. It will take approx. 12 mins."));////MSG_WIZARD_XYZ_CAL c=20 r=8 wizard_event = gcode_M45(false, 0); if (wizard_event) state = 5; else end = true; break; case 4: //z cal. - lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_Z_CAL); + lcd_show_fullscreen_message_and_wait_P(_i("I will run z calibration now."));////MSG_WIZARD_Z_CAL c=20 r=8 wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false); if (!wizard_event) lcd_show_fullscreen_message_and_wait_P(MSG_PLACE_STEEL_SHEET); wizard_event = gcode_M45(true, 0); @@ -4003,14 +4003,14 @@ void lcd_wizard(int state) { //start to preheat nozzle and bed to save some time later setTargetHotend(PLA_PREHEAT_HOTEND_TEMP, 0); setTargetBed(PLA_PREHEAT_HPB_TEMP); - wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_WIZARD_FILAMENT_LOADED, false); + wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is filament loaded?"), false);////MSG_WIZARD_FILAMENT_LOADED c=20 r=2 if (wizard_event) state = 8; else state = 6; break; case 6: //waiting for preheat nozzle for PLA; #ifndef SNMM - lcd_display_message_fullscreen_P(MSG_WIZARD_WILL_PREHEAT); + lcd_display_message_fullscreen_P(_i("Now I will preheat nozzle for PLA."));////MSG_WIZARD_WILL_PREHEAT c=20 r=4 current_position[Z_AXIS] = 100; //move in z axis to make space for loading filament plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 60, active_extruder); delay_keep_alive(2000); @@ -4034,7 +4034,7 @@ void lcd_wizard(int state) { #ifdef PAT9125 fsensor_block(); #endif //PAT9125 - lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_LOAD_FILAMENT); + lcd_show_fullscreen_message_and_wait_P(_i("Please insert PLA filament to the extruder, then press knob to load it."));////MSG_WIZARD_LOAD_FILAMENT c=20 r=8 lcd_update_enable(false); lcd_implementation_clear(); lcd_print_at_PGM(0, 2, MSG_LOADING_FILAMENT); @@ -4048,20 +4048,20 @@ void lcd_wizard(int state) { state = 9; break; case 8: - wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_WIZARD_PLA_FILAMENT, false, true); + wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is it PLA filament?"), false, true);////MSG_WIZARD_PLA_FILAMENT c=20 r=2 if (wizard_event) state = 9; else end = true; break; case 9: - lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_V2_CAL); - lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_V2_CAL_2); + lcd_show_fullscreen_message_and_wait_P(_i("Now I will calibrate distance between tip of the nozzle and heatbed surface."));////MSG_WIZARD_V2_CAL c=20 r=8 + lcd_show_fullscreen_message_and_wait_P(_i("I will start to print line and you will gradually lower the nozzle by rotating the knob, until you reach optimal height. Check the pictures in our handbook in chapter Calibration."));////MSG_WIZARD_V2_CAL_2 c=20 r=12 lcd_commands_type = LCD_COMMAND_V2_CAL; end = true; break; case 10: //repeat first layer cal.? - wizard_event = lcd_show_multiscreen_message_yes_no_and_wait_P(MSG_WIZARD_REPEAT_V2_CAL, false); + wizard_event = lcd_show_multiscreen_message_yes_no_and_wait_P(_i("Do you want to repeat last step to readjust distance between nozzle and heatbed?"), false);////MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 if (wizard_event) { - lcd_show_fullscreen_message_and_wait_P(MSG_WIZARD_CLEAN_HEATBED); + lcd_show_fullscreen_message_and_wait_P(_i("Please clean heatbed and then press the knob."));////MSG_WIZARD_CLEAN_HEATBED c=20 r=8 state = 9; } else { @@ -4097,7 +4097,7 @@ void lcd_wizard(int state) { msg = MSG_WIZARD_CALIBRATION_FAILED; break; case 8: - msg = MSG_WIZARD_INSERT_CORRECT_FILAMENT; + msg = _i("Please load PLA filament and then resume Wizard by rebooting the printer.");////MSG_WIZARD_INSERT_CORRECT_FILAMENT c=20 r=8 break; case 9: break; //exit wizard for v2 calibration, which is implemted in lcd_commands (we need lcd_update running) case 11: //we are finished @@ -4127,14 +4127,14 @@ static void lcd_settings_menu() MENU_ITEM(back, MSG_MAIN, lcd_settings_menu_back); - MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu); + MENU_ITEM(submenu, _i("Temperature"), lcd_control_temperature_menu);////MSG_TEMPERATURE c=0 r=0 if (!homing_flag) { - MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu_1mm); + MENU_ITEM(submenu, _i("Move axis"), lcd_move_menu_1mm);////MSG_MOVE_AXIS c=0 r=0 } if (!isPrintPaused) { - MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84")); + MENU_ITEM(gcode, _i("Disable steppers"), PSTR("M84"));////MSG_DISABLE_STEPPERS c=0 r=0 } #ifndef TMC2130 if (!farm_mode) { //dont show in menu if we are in farm mode @@ -4152,7 +4152,7 @@ static void lcd_settings_menu() if (FSensorStateMenu == 0) { if (fsensor_not_responding){ // Filament sensor not working - MENU_ITEM(function, MSG_FSENSOR_NA, lcd_fsensor_state_set); + MENU_ITEM(function, _i("Fil. sensor [N/A]"), lcd_fsensor_state_set);////MSG_FSENSOR_NA c=0 r=0 MENU_ITEM(function, MSG_FSENS_AUTOLOAD_NA, lcd_fsensor_fail); } else{ @@ -4165,10 +4165,10 @@ static void lcd_settings_menu() MENU_ITEM(function, MSG_FSENSOR_ON, lcd_fsensor_state_set); if ((filament_autoload_enabled == true)) { - MENU_ITEM(function, MSG_FSENS_AUTOLOAD_ON, lcd_set_filament_autoload); + MENU_ITEM(function, _i("F. autoload [on]"), lcd_set_filament_autoload);////MSG_FSENS_AUTOLOAD_ON c=17 r=1 } else { - MENU_ITEM(function, MSG_FSENS_AUTOLOAD_OFF, lcd_set_filament_autoload); + MENU_ITEM(function, _i("F. autoload [off]"), lcd_set_filament_autoload);////MSG_FSENS_AUTOLOAD_OFF c=17 r=1 } } @@ -4176,10 +4176,10 @@ static void lcd_settings_menu() #endif //PAT9125 if (fans_check_enabled == true) { - MENU_ITEM(function, MSG_FANS_CHECK_ON, lcd_set_fan_check); + MENU_ITEM(function, _i("Fans check [on]"), lcd_set_fan_check);////MSG_FANS_CHECK_ON c=17 r=1 } else { - MENU_ITEM(function, MSG_FANS_CHECK_OFF, lcd_set_fan_check); + MENU_ITEM(function, _i("Fans check [off]"), lcd_set_fan_check);////MSG_FANS_CHECK_OFF c=17 r=1 } #ifdef TMC2130 @@ -4195,21 +4195,21 @@ static void lcd_settings_menu() } else MENU_ITEM(submenu, MSG_CRASHDETECT_NA, lcd_crash_mode_info); } - MENU_ITEM_EDIT(wfac, MSG_EXTRUDER_CORRECTION, &tmc2130_wave_fac[E_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX); + MENU_ITEM_EDIT(wfac, _i("E-correct"), &tmc2130_wave_fac[E_AXIS], TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX);////MSG_EXTRUDER_CORRECTION c=9 r=0 #endif //TMC2130 if (temp_cal_active == false) { - MENU_ITEM(function, MSG_TEMP_CALIBRATION_OFF, lcd_temp_calibration_set); + MENU_ITEM(function, _i("Temp. cal. [off]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_OFF c=20 r=1 } else { - MENU_ITEM(function, MSG_TEMP_CALIBRATION_ON, lcd_temp_calibration_set); + MENU_ITEM(function, _i("Temp. cal. [on]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_ON c=20 r=1 } #ifdef HAS_SECOND_SERIAL_PORT if (selectedSerialPort == 0) { - MENU_ITEM(function, MSG_SECOND_SERIAL_OFF, lcd_second_serial_set); + MENU_ITEM(function, _i("RPi port [off]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_OFF c=17 r=1 } else { - MENU_ITEM(function, MSG_SECOND_SERIAL_ON, lcd_second_serial_set); + MENU_ITEM(function, _i("RPi port [on]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_ON c=17 r=1 } #endif //HAS_SECOND_SERIAL @@ -4217,12 +4217,12 @@ static void lcd_settings_menu() { MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z); } - MENU_ITEM(submenu, MSG_LANGUAGE_SELECT, lcd_language_menu); + MENU_ITEM(submenu, _i("Select language"), lcd_language_menu);////MSG_LANGUAGE_SELECT c=0 r=0 if (card.ToshibaFlashAir_isEnabled()) { - MENU_ITEM(function, MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON, lcd_toshiba_flash_air_compatibility_toggle); + MENU_ITEM(function, _i("SD card [FlshAir]"), lcd_toshiba_flash_air_compatibility_toggle);////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1 } else { - MENU_ITEM(function, MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF, lcd_toshiba_flash_air_compatibility_toggle); + MENU_ITEM(function, _i("SD card [normal]"), lcd_toshiba_flash_air_compatibility_toggle);////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1 } #ifdef SDCARD_SORT_ALPHA @@ -4230,9 +4230,9 @@ static void lcd_settings_menu() uint8_t sdSort; EEPROM_read(EEPROM_SD_SORT, (uint8_t*)&sdSort, sizeof(sdSort)); switch (sdSort) { - case SD_SORT_TIME: MENU_ITEM(function, MSG_SORT_TIME, lcd_sort_type_set); break; - case SD_SORT_ALPHA: MENU_ITEM(function, MSG_SORT_ALPHA, lcd_sort_type_set); break; - default: MENU_ITEM(function, MSG_SORT_NONE, lcd_sort_type_set); + case SD_SORT_TIME: MENU_ITEM(function, _i("Sort: [Time]"), lcd_sort_type_set); break;////MSG_SORT_TIME c=17 r=1 + case SD_SORT_ALPHA: MENU_ITEM(function, _i("Sort: [Alphabet]"), lcd_sort_type_set); break;////MSG_SORT_ALPHA c=17 r=1 + default: MENU_ITEM(function, _i("Sort: [None]"), lcd_sort_type_set);////MSG_SORT_NONE c=17 r=1 } } #endif // SDCARD_SORT_ALPHA @@ -4488,37 +4488,37 @@ static void lcd_calibration_menu() MENU_ITEM(back, MSG_MAIN, 0); if (!isPrintPaused) { - MENU_ITEM(function, MSG_WIZARD, lcd_wizard); - MENU_ITEM(submenu, MSG_V2_CALIBRATION, lcd_v2_calibration); + MENU_ITEM(function, _i("Wizard"), lcd_wizard);////MSG_WIZARD c=17 r=1 + MENU_ITEM(submenu, _i("First layer cal."), lcd_v2_calibration);////MSG_V2_CALIBRATION c=17 r=1 MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28 W")); - MENU_ITEM(function, MSG_SELFTEST, lcd_selftest_v); + MENU_ITEM(function, _i("Selftest "), lcd_selftest_v);////MSG_SELFTEST c=0 r=0 #ifdef MK1BP // MK1 // "Calibrate Z" MENU_ITEM(gcode, MSG_HOMEYZ, PSTR("G28 Z")); #else //MK1BP // MK2 - MENU_ITEM(function, MSG_CALIBRATE_BED, lcd_mesh_calibration); + MENU_ITEM(function, _i("Calibrate XYZ"), lcd_mesh_calibration);////MSG_CALIBRATE_BED c=0 r=0 // "Calibrate Z" with storing the reference values to EEPROM. MENU_ITEM(submenu, MSG_HOMEYZ, lcd_mesh_calibration_z); #ifndef SNMM - //MENU_ITEM(function, MSG_CALIBRATE_E, lcd_calibrate_extruder); + //MENU_ITEM(function, _i("Calibrate E"), lcd_calibrate_extruder);////MSG_CALIBRATE_E c=20 r=1 #endif // "Mesh Bed Leveling" - MENU_ITEM(submenu, MSG_MESH_BED_LEVELING, lcd_mesh_bedleveling); + MENU_ITEM(submenu, _i("Mesh Bed Leveling"), lcd_mesh_bedleveling);////MSG_MESH_BED_LEVELING c=0 r=0 #endif //MK1BP - MENU_ITEM(submenu, MSG_BED_CORRECTION_MENU, lcd_adjust_bed); - MENU_ITEM(submenu, MSG_PID_EXTRUDER, pid_extruder); - MENU_ITEM(submenu, MSG_SHOW_END_STOPS, menu_show_end_stops); + MENU_ITEM(submenu, _i("Bed level correct"), lcd_adjust_bed);////MSG_BED_CORRECTION_MENU c=0 r=0 + MENU_ITEM(submenu, _i("PID calibration"), pid_extruder);////MSG_PID_EXTRUDER c=17 r=1 + MENU_ITEM(submenu, _i("Show end stops"), menu_show_end_stops);////MSG_SHOW_END_STOPS c=17 r=1 #ifndef MK1BP - MENU_ITEM(gcode, MSG_CALIBRATE_BED_RESET, PSTR("M44")); + MENU_ITEM(gcode, _i("Reset XYZ calibr."), PSTR("M44"));////MSG_CALIBRATE_BED_RESET c=0 r=0 #endif //MK1BP #ifndef SNMM //MENU_ITEM(function, MSG_RESET_CALIBRATE_E, lcd_extr_cal_reset); #endif #ifndef MK1BP - MENU_ITEM(submenu, MSG_CALIBRATION_PINDA_MENU, lcd_pinda_calibration_menu); + MENU_ITEM(submenu, _i("Temp. calibration"), lcd_pinda_calibration_menu);////MSG_CALIBRATION_PINDA_MENU c=17 r=1 #endif //MK1BP } @@ -4827,8 +4827,8 @@ static char snmm_stop_print_menu() { //menu for choosing which filaments will be lcd_print_at_PGM(0,0,MSG_UNLOAD_FILAMENT); lcd.print(":"); lcd.setCursor(0, 1); lcd.print(">"); lcd_print_at_PGM(1,1,MSG_ALL); - lcd_print_at_PGM(1,2,MSG_USED); - lcd_print_at_PGM(1,3,MSG_CURRENT); + lcd_print_at_PGM(1,2,_i("Used during print"));////MSG_USED c=19 r=1 + lcd_print_at_PGM(1,3,_i("Current"));////MSG_CURRENT c=19 r=1 char cursor_pos = 1; int enc_dif = 0; KEEPALIVE_STATE(PAUSED_FOR_USER); @@ -5361,11 +5361,11 @@ static void fil_load_menu() { START_MENU(); MENU_ITEM(back, MSG_MAIN, 0); - MENU_ITEM(function, MSG_LOAD_ALL, load_all); - MENU_ITEM(function, MSG_LOAD_FILAMENT_1, extr_adj_0); - MENU_ITEM(function, MSG_LOAD_FILAMENT_2, extr_adj_1); - MENU_ITEM(function, MSG_LOAD_FILAMENT_3, extr_adj_2); - MENU_ITEM(function, MSG_LOAD_FILAMENT_4, extr_adj_3); + MENU_ITEM(function, _i("Load all"), load_all);////MSG_LOAD_ALL c=0 r=0 + MENU_ITEM(function, _i("Load filament 1"), extr_adj_0);////MSG_LOAD_FILAMENT_1 c=17 r=0 + MENU_ITEM(function, _i("Load filament 2"), extr_adj_1);////MSG_LOAD_FILAMENT_2 c=17 r=0 + MENU_ITEM(function, _i("Load filament 3"), extr_adj_2);////MSG_LOAD_FILAMENT_3 c=17 r=0 + MENU_ITEM(function, _i("Load filament 4"), extr_adj_3);////MSG_LOAD_FILAMENT_4 c=17 r=0 END_MENU(); } @@ -5374,11 +5374,11 @@ static void fil_unload_menu() { START_MENU(); MENU_ITEM(back, MSG_MAIN, 0); - MENU_ITEM(function, MSG_UNLOAD_ALL, extr_unload_all); - MENU_ITEM(function, MSG_UNLOAD_FILAMENT_1, extr_unload_0); - MENU_ITEM(function, MSG_UNLOAD_FILAMENT_2, extr_unload_1); - MENU_ITEM(function, MSG_UNLOAD_FILAMENT_3, extr_unload_2); - MENU_ITEM(function, MSG_UNLOAD_FILAMENT_4, extr_unload_3); + MENU_ITEM(function, _i("Unload all"), extr_unload_all);////MSG_UNLOAD_ALL c=0 r=0 + MENU_ITEM(function, _i("Unload filament 1"), extr_unload_0);////MSG_UNLOAD_FILAMENT_1 c=17 r=0 + MENU_ITEM(function, _i("Unload filament 2"), extr_unload_1);////MSG_UNLOAD_FILAMENT_2 c=17 r=0 + MENU_ITEM(function, _i("Unload filament 3"), extr_unload_2);////MSG_UNLOAD_FILAMENT_3 c=17 r=0 + MENU_ITEM(function, _i("Unload filament 4"), extr_unload_3);////MSG_UNLOAD_FILAMENT_4 c=17 r=0 END_MENU(); } @@ -5386,10 +5386,10 @@ static void fil_unload_menu() static void change_extr_menu(){ START_MENU(); MENU_ITEM(back, MSG_MAIN, 0); - MENU_ITEM(function, MSG_EXTRUDER_1, extr_change_0); - MENU_ITEM(function, MSG_EXTRUDER_2, extr_change_1); - MENU_ITEM(function, MSG_EXTRUDER_3, extr_change_2); - MENU_ITEM(function, MSG_EXTRUDER_4, extr_change_3); + MENU_ITEM(function, _i("Extruder 1"), extr_change_0);////MSG_EXTRUDER_1 c=17 r=1 + MENU_ITEM(function, _i("Extruder 2"), extr_change_1);////MSG_EXTRUDER_2 c=17 r=1 + MENU_ITEM(function, _i("Extruder 3"), extr_change_2);////MSG_EXTRUDER_3 c=17 r=1 + MENU_ITEM(function, _i("Extruder 4"), extr_change_3);////MSG_EXTRUDER_4 c=17 r=1 END_MENU(); } @@ -5707,10 +5707,10 @@ static void lcd_main_menu() if ( moves_planned() || IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL)) { - MENU_ITEM(submenu, MSG_TUNE, lcd_tune_menu); + MENU_ITEM(submenu, _i("Tune"), lcd_tune_menu);////MSG_TUNE c=0 r=0 } else { - MENU_ITEM(submenu, MSG_PREHEAT, lcd_preheat_menu); + MENU_ITEM(submenu, _i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT c=0 r=0 } #ifdef SDSUPPORT @@ -5721,11 +5721,11 @@ static void lcd_main_menu() if (mesh_bed_leveling_flag == false && homing_flag == false) { if (card.sdprinting) { - MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause); + MENU_ITEM(function, _i("Pause print"), lcd_sdcard_pause);////MSG_PAUSE_PRINT c=0 r=0 } else { - MENU_ITEM(function, MSG_RESUME_PRINT, lcd_sdcard_resume); + MENU_ITEM(function, _i("Resume print"), lcd_sdcard_resume);////MSG_RESUME_PRINT c=0 r=0 } MENU_ITEM(submenu, MSG_STOP_PRINT, lcd_sdcard_stop); } @@ -5741,15 +5741,15 @@ static void lcd_main_menu() /*else*/ MENU_ITEM(submenu, MSG_CARD_MENU, lcd_sdcard_menu); } #if SDCARDDETECT < 1 - MENU_ITEM(gcode, MSG_CNG_SDCARD, PSTR("M21")); // SD-card changed by user + MENU_ITEM(gcode, _i("Change SD card"), PSTR("M21")); // SD-card changed by user////MSG_CNG_SDCARD c=0 r=0 #endif } } else { - MENU_ITEM(submenu, MSG_NO_CARD, lcd_sdcard_menu); + MENU_ITEM(submenu, _i("No SD card"), lcd_sdcard_menu);////MSG_NO_CARD c=0 r=0 #if SDCARDDETECT < 1 - MENU_ITEM(gcode, MSG_INIT_SDCARD, PSTR("M21")); // Manually initialize the SD-card via user interface + MENU_ITEM(gcode, _i("Init. SD card"), PSTR("M21")); // Manually initialize the SD-card via user interface////MSG_INIT_SDCARD c=0 r=0 #endif } #endif @@ -5767,7 +5767,7 @@ static void lcd_main_menu() #ifndef SNMM #ifdef PAT9125 if ( ((filament_autoload_enabled == true) && (fsensor_enabled == true))) - MENU_ITEM(submenu, MSG_AUTOLOAD_FILAMENT, lcd_menu_AutoLoadFilament); + MENU_ITEM(submenu, _i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=17 r=0 else #endif //PAT9125 MENU_ITEM(function, MSG_LOAD_FILAMENT, lcd_LoadFilament); @@ -5776,7 +5776,7 @@ static void lcd_main_menu() #ifdef SNMM MENU_ITEM(submenu, MSG_LOAD_FILAMENT, fil_load_menu); MENU_ITEM(submenu, MSG_UNLOAD_FILAMENT, fil_unload_menu); - MENU_ITEM(submenu, MSG_CHANGE_EXTR, change_extr_menu); + MENU_ITEM(submenu, _i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1 #endif MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu); if(!isPrintPaused) MENU_ITEM(submenu, MSG_MENU_CALIBRATION, lcd_calibration_menu); @@ -5788,14 +5788,14 @@ static void lcd_main_menu() if (!is_usb_printing && (lcd_commands_type != LCD_COMMAND_V2_CAL)) { - MENU_ITEM(submenu, MSG_STATISTICS, lcd_menu_statistics); + MENU_ITEM(submenu, _i("Statistics "), lcd_menu_statistics);////MSG_STATISTICS c=0 r=0 } #if defined(TMC2130) || defined(PAT9125) MENU_ITEM(submenu, PSTR("Fail stats"), lcd_menu_fails_stats); #endif - MENU_ITEM(submenu, MSG_SUPPORT, lcd_support_menu); + MENU_ITEM(submenu, _i("Support"), lcd_support_menu);////MSG_SUPPORT c=0 r=0 END_MENU(); @@ -5806,7 +5806,7 @@ void stack_error() { WRITE(BEEPER, HIGH); delay(1000); WRITE(BEEPER, LOW); - lcd_display_message_fullscreen_P(MSG_STACK_ERROR); + lcd_display_message_fullscreen_P(_i("Error - static memory has been overwritten"));////MSG_STACK_ERROR c=20 r=4 //err_triggered = 1; while (1) delay_keep_alive(1000); } @@ -5889,13 +5889,13 @@ static void lcd_tune_menu() START_MENU(); MENU_ITEM(back, MSG_MAIN, 0); //1 - MENU_ITEM_EDIT(int3, MSG_SPEED, &feedmultiply, 10, 999);//2 + MENU_ITEM_EDIT(int3, _i("Speed"), &feedmultiply, 10, 999);//2////MSG_SPEED c=0 r=0 MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);//3 MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 10);//4 MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255);//5 - MENU_ITEM_EDIT(int3, MSG_FLOW, &extrudemultiply, 10, 999);//6 + MENU_ITEM_EDIT(int3, _i("Flow"), &extrudemultiply, 10, 999);//6////MSG_FLOW c=0 r=0 #ifdef FILAMENTCHANGEENABLE MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_colorprint_change);//7 #endif @@ -5958,10 +5958,10 @@ static void lcd_control_temperature_menu() MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10); #endif #if TEMP_SENSOR_1 != 0 - MENU_ITEM_EDIT(int3, MSG_NOZZLE1, &target_temperature[1], 0, HEATER_1_MAXTEMP - 10); + MENU_ITEM_EDIT(int3, _i("Nozzle2"), &target_temperature[1], 0, HEATER_1_MAXTEMP - 10);////MSG_NOZZLE1 c=0 r=0 #endif #if TEMP_SENSOR_2 != 0 - MENU_ITEM_EDIT(int3, MSG_NOZZLE2, &target_temperature[2], 0, HEATER_2_MAXTEMP - 10); + MENU_ITEM_EDIT(int3, _i("Nozzle3"), &target_temperature[2], 0, HEATER_2_MAXTEMP - 10);////MSG_NOZZLE2 c=0 r=0 #endif #if TEMP_SENSOR_BED != 0 MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 3); @@ -5969,9 +5969,9 @@ static void lcd_control_temperature_menu() MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255); #if defined AUTOTEMP && (TEMP_SENSOR_0 != 0) MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &autotemp_enabled); - MENU_ITEM_EDIT(float3, MSG_MIN, &autotemp_min, 0, HEATER_0_MAXTEMP - 10); - MENU_ITEM_EDIT(float3, MSG_MAX, &autotemp_max, 0, HEATER_0_MAXTEMP - 10); - MENU_ITEM_EDIT(float32, MSG_FACTOR, &autotemp_factor, 0.0, 1.0); + MENU_ITEM_EDIT(float3, _i(" MENU_ITEM_EDIT(float3, MSG_MIN, &autotemp_min, 0, HEATER_0_MAXTEMP - 10);02 Min"), &autotemp_min, 0, HEATER_0_MAXTEMP - 10);////MSG_MIN c=0 r=0 + MENU_ITEM_EDIT(float3, _i(" MENU_ITEM_EDIT(float3, MSG_MAX, &autotemp_max, 0, HEATER_0_MAXTEMP - 10);02 Max"), &autotemp_max, 0, HEATER_0_MAXTEMP - 10);////MSG_MAX c=0 r=0 + MENU_ITEM_EDIT(float32, _i(" MENU_ITEM_EDIT(float32, MSG_FACTOR, &autotemp_factor, 0.0, 1.0);02 Fact"), &autotemp_factor, 0.0, 1.0);////MSG_FACTOR c=0 r=0 #endif END_MENU(); @@ -6275,7 +6275,7 @@ char *wfac_to_str5(const uint8_t &x) conv[0] = '['; ftostr43(((float)((uint16_t)x + 1000) / 1000), 1); } - else strcpy_P(conv, MSG_EXTRUDER_CORRECTION_OFF); + else strcpy_P(conv, _i(" [off"));////MSG_EXTRUDER_CORRECTION_OFF c=6 r=0 conv[6] = ']'; conv[7] = ' '; conv[8] = 0; @@ -6305,7 +6305,7 @@ bool lcd_selftest() bool _result = true; lcd_wait_for_cool_down(); lcd_implementation_clear(); - lcd.setCursor(0, 0); lcd_printPGM(MSG_SELFTEST_START); + lcd.setCursor(0, 0); lcd_printPGM(_i("Self test start "));////MSG_SELFTEST_START c=20 r=0 #ifdef TMC2130 FORCE_HIGH_POWER_START; #endif // TMC2130 @@ -6468,7 +6468,7 @@ bool lcd_selftest() if (_result) { - LCD_ALERTMESSAGERPGM(MSG_SELFTEST_OK); + LCD_ALERTMESSAGERPGM(_i("Self test OK"));////MSG_SELFTEST_OK c=0 r=0 } else { @@ -6900,27 +6900,27 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char * lcd_implementation_clear(); lcd.setCursor(0, 0); - lcd_printPGM(MSG_SELFTEST_ERROR); + lcd_printPGM(_i("Selftest error !"));////MSG_SELFTEST_ERROR c=0 r=0 lcd.setCursor(0, 1); - lcd_printPGM(MSG_SELFTEST_PLEASECHECK); + lcd_printPGM(_i("Please check :"));////MSG_SELFTEST_PLEASECHECK c=0 r=0 switch (_error_no) { case 1: lcd.setCursor(0, 2); - lcd_printPGM(MSG_SELFTEST_HEATERTHERMISTOR); + lcd_printPGM(_i("Heater/Thermistor"));////MSG_SELFTEST_HEATERTHERMISTOR c=0 r=0 lcd.setCursor(0, 3); - lcd_printPGM(MSG_SELFTEST_NOTCONNECTED); + lcd_printPGM(_i("Not connected"));////MSG_SELFTEST_NOTCONNECTED c=0 r=0 break; case 2: lcd.setCursor(0, 2); - lcd_printPGM(MSG_SELFTEST_BEDHEATER); + lcd_printPGM(_i("Bed / Heater"));////MSG_SELFTEST_BEDHEATER c=0 r=0 lcd.setCursor(0, 3); lcd_printPGM(MSG_SELFTEST_WIRINGERROR); break; case 3: lcd.setCursor(0, 2); - lcd_printPGM(MSG_SELFTEST_ENDSTOPS); + lcd_printPGM(_i("Endstops"));////MSG_SELFTEST_ENDSTOPS c=0 r=0 lcd.setCursor(0, 3); lcd_printPGM(MSG_SELFTEST_WIRINGERROR); lcd.setCursor(17, 3); @@ -6932,13 +6932,13 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char * lcd.setCursor(18, 2); lcd.print(_error_1); lcd.setCursor(0, 3); - lcd_printPGM(MSG_SELFTEST_ENDSTOP); + lcd_printPGM(_i("Endstop"));////MSG_SELFTEST_ENDSTOP c=0 r=0 lcd.setCursor(18, 3); lcd.print(_error_2); break; case 5: lcd.setCursor(0, 2); - lcd_printPGM(MSG_SELFTEST_ENDSTOP_NOTHIT); + lcd_printPGM(_i("Endstop not hit"));////MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 lcd.setCursor(0, 3); lcd_printPGM(MSG_SELFTEST_MOTOR); lcd.setCursor(18, 3); @@ -6962,7 +6962,7 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char * break; case 8: lcd.setCursor(0, 2); - lcd_printPGM(MSG_LOOSE_PULLEY); + lcd_printPGM(_i("Loose pulley"));////MSG_LOOSE_PULLEY c=20 r=1 lcd.setCursor(0, 3); lcd_printPGM(MSG_SELFTEST_MOTOR); lcd.setCursor(18, 3); @@ -6970,23 +6970,23 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char * break; case 9: lcd.setCursor(0, 2); - lcd_printPGM(MSG_SELFTEST_AXIS_LENGTH); + lcd_printPGM(_i("Axis length"));////MSG_SELFTEST_AXIS_LENGTH c=0 r=0 lcd.setCursor(0, 3); - lcd_printPGM(MSG_SELFTEST_AXIS); + lcd_printPGM(_i("Axis"));////MSG_SELFTEST_AXIS c=0 r=0 lcd.setCursor(18, 3); lcd.print(_error_1); break; case 10: lcd.setCursor(0, 2); - lcd_printPGM(MSG_SELFTEST_FANS); + lcd_printPGM(_i("Front/left fans"));////MSG_SELFTEST_FANS c=0 r=0 lcd.setCursor(0, 3); - lcd_printPGM(MSG_SELFTEST_SWAPPED); + lcd_printPGM(_i("Swapped"));////MSG_SELFTEST_SWAPPED c=0 r=0 lcd.setCursor(18, 3); lcd.print(_error_1); break; case 11: lcd.setCursor(0, 2); - lcd_printPGM(MSG_FILAMENT_SENSOR); + lcd_printPGM(_i("Filament sensor"));////MSG_FILAMENT_SENSOR c=20 r=0 lcd.setCursor(0, 3); lcd_printPGM(MSG_SELFTEST_WIRINGERROR); break; @@ -7189,16 +7189,16 @@ static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bo if (_step == -1) lcd_printPGM(MSG_SELFTEST_FAN); if (_step == 0) lcd_printPGM(MSG_SELFTEST_FAN); if (_step == 1) lcd_printPGM(MSG_SELFTEST_FAN); - if (_step == 2) lcd_printPGM(MSG_SELFTEST_CHECK_ENDSTOPS); - if (_step == 3) lcd_printPGM(MSG_SELFTEST_CHECK_HOTEND); - if (_step == 4) lcd_printPGM(MSG_SELFTEST_CHECK_X); - if (_step == 5) lcd_printPGM(MSG_SELFTEST_CHECK_Y); - if (_step == 6) lcd_printPGM(MSG_SELFTEST_CHECK_Z); + if (_step == 2) lcd_printPGM(_i("Checking endstops"));////MSG_SELFTEST_CHECK_ENDSTOPS c=20 r=0 + if (_step == 3) lcd_printPGM(_i("Checking hotend "));////MSG_SELFTEST_CHECK_HOTEND c=20 r=0 + if (_step == 4) lcd_printPGM(_i("Checking X axis "));////MSG_SELFTEST_CHECK_X c=20 r=0 + if (_step == 5) lcd_printPGM(_i("Checking Y axis "));////MSG_SELFTEST_CHECK_Y c=20 r=0 + if (_step == 6) lcd_printPGM(_i("Checking Z axis "));////MSG_SELFTEST_CHECK_Z c=20 r=0 if (_step == 7) lcd_printPGM(MSG_SELFTEST_CHECK_BED); if (_step == 8) lcd_printPGM(MSG_SELFTEST_CHECK_BED); if (_step == 9) lcd_printPGM(MSG_SELFTEST_CHECK_FSENSOR); if (_step == 10) lcd_printPGM(MSG_SELFTEST_CHECK_FSENSOR); - if (_step == 11) lcd_printPGM(MSG_SELFTEST_CHECK_ALLCORRECT); + if (_step == 11) lcd_printPGM(_i("All correct "));////MSG_SELFTEST_CHECK_ALLCORRECT c=20 r=0 if (_step == 12) lcd_printPGM(MSG_SELFTEST_FAILED); if (_step == 13) lcd_printPGM(PSTR("Calibrating home")); @@ -7207,16 +7207,16 @@ static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bo if ((_step >= -1) && (_step <= 1)) { //SERIAL_ECHOLNPGM("Fan test"); - lcd_print_at_PGM(0, 2, MSG_SELFTEST_EXTRUDER_FAN_SPEED); + lcd_print_at_PGM(0, 2, _i("Extruder fan:"));////MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18 r=0 lcd.setCursor(18, 2); (_step < 0) ? lcd.print(_indicator) : lcd.print("OK"); - lcd_print_at_PGM(0, 3, MSG_SELFTEST_PRINT_FAN_SPEED); + lcd_print_at_PGM(0, 3, _i("Print fan:"));////MSG_SELFTEST_PRINT_FAN_SPEED c=18 r=0 lcd.setCursor(18, 3); (_step < 1) ? lcd.print(_indicator) : lcd.print("OK"); } else if (_step >= 9 && _step <= 10) { - lcd_print_at_PGM(0, 2, MSG_SELFTEST_FILAMENT_SENSOR); + lcd_print_at_PGM(0, 2, _i("Filament sensor:"));////MSG_SELFTEST_FILAMENT_SENSOR c=18 r=0 lcd.setCursor(18, 2); (_step == 9) ? lcd.print(_indicator) : lcd.print("OK"); } @@ -7359,7 +7359,7 @@ static void menu_action_sdfile(const char* filename, char* longFilename) } if (!check_file(filename)) { - result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILE_INCOMPLETE, false, false); + result = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("File incomplete. Continue anyway?"), false, false);////MSG_FILE_INCOMPLETE c=20 r=2 lcd_update_enable(true); } if (result) { @@ -7513,13 +7513,13 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) if (lcd_oldcardstatus) { card.initsd(); - LCD_MESSAGERPGM(MSG_SD_INSERTED); + LCD_MESSAGERPGM(_i("Card inserted"));////MSG_SD_INSERTED c=0 r=0 //get_description(); } else { card.release(); - LCD_MESSAGERPGM(MSG_SD_REMOVED); + LCD_MESSAGERPGM(_i("Card removed"));////MSG_SD_REMOVED c=0 r=0 } } #endif//CARDINSERTED diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index cfffeb36..42d96c02 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/Firmware/ultralcd_implementation_hitachi_HD44780.h @@ -968,7 +968,7 @@ if (print_sd_status) lcd.setCursor(0, 3); lcd_printPGM(PSTR(" ")); lcd.setCursor(0, 3); - lcd_printPGM(MSG_HOMEYZ_PROGRESS); + lcd_printPGM(_i("Calibrating Z"));////MSG_HOMEYZ_PROGRESS c=0 r=0 lcd_printPGM(PSTR(" : ")); lcd.print(custom_message_state-10); } @@ -986,7 +986,7 @@ if (print_sd_status) lcd.setCursor(0, 3); lcd_printPGM(PSTR(" ")); lcd.setCursor(0, 3); - lcd_printPGM(MSG_HOMEYZ_DONE); + lcd_printPGM(_i("Calibration done"));////MSG_HOMEYZ_DONE c=0 r=0 custom_message_state--; } } @@ -1020,7 +1020,7 @@ if (print_sd_status) // temp compensation preheat if (custom_message_type == 5) { lcd.setCursor(0, 3); - lcd_printPGM(MSG_PINDA_PREHEAT); + lcd_printPGM(_i("PINDA Heating"));////MSG_PINDA_PREHEAT c=20 r=1 if (custom_message_state <= PINDA_HEAT_T) { lcd_printPGM(PSTR(": ")); lcd.print(custom_message_state); //seconds diff --git a/Firmware/util.cpp b/Firmware/util.cpp index ce0421a5..3258a0c0 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -289,11 +289,11 @@ bool show_upgrade_dialog_if_version_newer(const char *version_string) } if (upgrade) { - lcd_display_message_fullscreen_P(MSG_NEW_FIRMWARE_AVAILABLE); + lcd_display_message_fullscreen_P(_i("New firmware version available:"));////MSG_NEW_FIRMWARE_AVAILABLE c=20 r=2 lcd_print_at_PGM(0, 2, PSTR("")); for (const char *c = version_string; ! is_whitespace_or_nl_or_eol(*c); ++ c) lcd_implementation_write(*c); - lcd_print_at_PGM(0, 3, MSG_NEW_FIRMWARE_PLEASE_UPGRADE); + lcd_print_at_PGM(0, 3, _i("Please upgrade."));////MSG_NEW_FIRMWARE_PLEASE_UPGRADE c=20 r=0 tone(BEEPER, 1000); delay_keep_alive(50); noTone(BEEPER); diff --git a/Firmware/langtool.php b/lang_backup/langtool.php similarity index 100% rename from Firmware/langtool.php rename to lang_backup/langtool.php diff --git a/Firmware/langtool.pl b/lang_backup/langtool.pl old mode 100755 new mode 100644 similarity index 100% rename from Firmware/langtool.pl rename to lang_backup/langtool.pl diff --git a/lang_backup/language.h b/lang_backup/language.h new file mode 100644 index 00000000..366397c6 --- /dev/null +++ b/lang_backup/language.h @@ -0,0 +1,34 @@ +#ifndef LANGUAGE_H +#define LANGUAGE_H + +#define PROTOCOL_VERSION "1.0" + +#ifdef CUSTOM_MENDEL_NAME + // #define CUSTOM_MENDEL_NAME CUSTOM_MENDEL_NAME +#else + #define MACHINE_NAME "Mendel" +#endif + +#define _i PSTR +#define _n PSTR + +#ifndef MACHINE_UUID + #define MACHINE_UUID "00000000-0000-0000-0000-000000000000" +#endif + +#define MSG_FW_VERSION "Firmware" + +#define STRINGIFY_(n) #n +#define STRINGIFY(n) STRINGIFY_(n) + + +// Common serial messages +#define MSG_MARLIN "Marlin" + +// Serial Console Messages (do not translate those!) + + +// LCD Menu Messages +#include "language_all.h" + +#endif //__LANGUAGE_H diff --git a/Firmware/language_all.cpp b/lang_backup/language_all.cpp similarity index 100% rename from Firmware/language_all.cpp rename to lang_backup/language_all.cpp diff --git a/Firmware/language_all.h b/lang_backup/language_all.h similarity index 100% rename from Firmware/language_all.h rename to lang_backup/language_all.h diff --git a/Firmware/language_common.h b/lang_backup/language_common.h similarity index 100% rename from Firmware/language_common.h rename to lang_backup/language_common.h diff --git a/Firmware/language_cz.h b/lang_backup/language_cz.h similarity index 100% rename from Firmware/language_cz.h rename to lang_backup/language_cz.h diff --git a/Firmware/language_de.h b/lang_backup/language_de.h similarity index 100% rename from Firmware/language_de.h rename to lang_backup/language_de.h diff --git a/Firmware/language_en.h b/lang_backup/language_en.h similarity index 100% rename from Firmware/language_en.h rename to lang_backup/language_en.h diff --git a/Firmware/language_es.h b/lang_backup/language_es.h similarity index 100% rename from Firmware/language_es.h rename to lang_backup/language_es.h diff --git a/Firmware/language_it.h b/lang_backup/language_it.h similarity index 100% rename from Firmware/language_it.h rename to lang_backup/language_it.h diff --git a/Firmware/language_pl.h b/lang_backup/language_pl.h similarity index 100% rename from Firmware/language_pl.h rename to lang_backup/language_pl.h