Merge pull request #1045 from XPila/MK3

Menu lcd_adjust_bed fixed + status screen redesign
This commit is contained in:
PavelSindler 2018-08-21 11:42:59 +02:00 committed by GitHub
commit 9fe27c108d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 712 additions and 710 deletions

View File

@ -315,9 +315,6 @@ void save_statistics(unsigned long _total_filament_used, unsigned long _total_pr
extern unsigned int heating_status;
extern unsigned int status_number;
extern unsigned int heating_status_counter;
extern bool custom_message;
extern unsigned int custom_message_type;
extern unsigned int custom_message_state;
extern char snmm_filaments_used;
extern unsigned long PingTime;
extern unsigned long NcTime;
@ -364,7 +361,7 @@ extern uint8_t print_percent_done_silent;
extern uint32_t print_time_remaining_silent;
#define PRINT_TIME_REMAINING_INIT 0xffffffff
#define PRINT_PERCENT_DONE_INIT 0xff
#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == 4) || saved_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL) || card.paused || mmu_print_saved)
#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CUSTOM_MSG_TYPE_TEMCAL) || saved_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL) || card.paused || mmu_print_saved)
extern void calculate_extruder_multipliers();
@ -419,7 +416,7 @@ extern void print_mesh_bed_leveling_table();
//estimated time to end of the print
extern uint16_t print_time_remaining();
extern uint8_t print_percent_done();
extern uint8_t calc_percent_done();
#ifdef HOST_KEEPALIVE_FEATURE

View File

@ -353,12 +353,13 @@ unsigned int status_number = 0;
unsigned long total_filament_used;
unsigned int heating_status;
unsigned int heating_status_counter;
bool custom_message;
bool loading_flag = false;
unsigned int custom_message_type;
unsigned int custom_message_state;
char snmm_filaments_used = 0;
bool fan_state[2];
int fan_edge_counter[2];
int fan_speed[2];
@ -2843,6 +2844,14 @@ void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, long home_
#endif
}
void adjust_bed_reset()
{
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR, 0);
}
bool gcode_M45(bool onlyZ, int8_t verbosity_level)
{
@ -3149,8 +3158,7 @@ void gcode_M600(bool automatic, float x_position, float y_position, float z_shif
enquecommand(cmd);
lcd_setstatuspgm(_T(WELCOME_MSG));
custom_message = false;
custom_message_type = 0;
custom_message_type = CUSTOM_MSG_TYPE_STATUS;
}
@ -3164,8 +3172,7 @@ void gcode_M701()
else
{
enable_z();
custom_message = true;
custom_message_type = 2;
custom_message_type = CUSTOM_MSG_TYPE_F_LOAD;
#ifdef FILAMENT_SENSOR
fsensor_oq_meassure_start(40);
@ -3207,8 +3214,7 @@ void gcode_M701()
lcd_setstatuspgm(_T(WELCOME_MSG));
disable_z();
loading_flag = false;
custom_message = false;
custom_message_type = 0;
custom_message_type = CUSTOM_MSG_TYPE_STATUS;
#ifdef FILAMENT_SENSOR
fsensor_oq_meassure_stop();
@ -4043,10 +4049,9 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
// setTargetHotend(200, 0);
setTargetBed(70 + (start_temp - 30));
custom_message = true;
custom_message_type = 4;
custom_message_type = CUSTOM_MSG_TYPE_TEMCAL;
custom_message_state = 1;
custom_message = _T(MSG_TEMP_CALIBRATION);
lcd_setstatuspgm(_T(MSG_TEMP_CALIBRATION));
current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
current_position[X_AXIS] = PINDA_PREHEAT_X;
@ -4146,10 +4151,9 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
break;
}
puts_P(_N("PINDA probe calibration start"));
custom_message = true;
custom_message_type = 4;
custom_message_type = CUSTOM_MSG_TYPE_TEMCAL;
custom_message_state = 1;
custom_message = _T(MSG_TEMP_CALIBRATION);
lcd_setstatuspgm(_T(MSG_TEMP_CALIBRATION));
current_position[X_AXIS] = PINDA_PREHEAT_X;
current_position[Y_AXIS] = PINDA_PREHEAT_Y;
current_position[Z_AXIS] = PINDA_PREHEAT_Z;
@ -4215,8 +4219,7 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
}
custom_message_type = 0;
custom_message = false;
custom_message_type = CUSTOM_MSG_TYPE_STATUS;
eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 1);
puts_P(_N("Temperature calibration done."));
@ -4350,11 +4353,9 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
break;
}
// Save custom message state, set a new custom message state to display: Calibrating point 9.
bool custom_message_old = custom_message;
unsigned int custom_message_type_old = custom_message_type;
unsigned int custom_message_state_old = custom_message_state;
custom_message = true;
custom_message_type = 1;
custom_message_type = CUSTOM_MSG_TYPE_MESHBL;
custom_message_state = (MESH_MEAS_NUM_X_POINTS * MESH_MEAS_NUM_Y_POINTS) + 10;
lcd_update(1);
@ -4586,7 +4587,6 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
KEEPALIVE_STATE(NOT_BUSY);
// Restore custom message state
lcd_setstatuspgm(_T(WELCOME_MSG));
custom_message = custom_message_old;
custom_message_type = custom_message_type_old;
custom_message_state = custom_message_state_old;
mesh_bed_leveling_flag = false;
@ -6803,8 +6803,9 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
if (mmu_enabled)
{
printf_P(PSTR("T code: %d \n"), tmp_extruder);
mmu_printf_P(PSTR("T%d\n"), tmp_extruder);
//printf_P(PSTR("T code: %d \n"), tmp_extruder);
//mmu_printf_P(PSTR("T%d\n"), tmp_extruder);
mmu_command(MMU_CMD_T0 + tmp_extruder);
manage_response(true, true);
@ -7427,6 +7428,7 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
handle_status_leds();
#endif
check_axes_activity();
// mmu_loop();
}
void kill(const char *full_screen_message, unsigned char id)
@ -7796,11 +7798,9 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
enquecommand_front_P((PSTR("G1 Z5")));
return;
}
bool custom_message_old = custom_message;
unsigned int custom_message_type_old = custom_message_type;
unsigned int custom_message_state_old = custom_message_state;
custom_message = true;
custom_message_type = 1;
custom_message_type = CUSTOM_MSG_TYPE_MESHBL;
custom_message_state = (x_points_num * y_points_num) + 10;
lcd_update(1);
@ -7950,8 +7950,7 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
void temp_compensation_start() {
custom_message = true;
custom_message_type = 5;
custom_message_type = CUSTOM_MSG_TYPE_TEMPRE;
custom_message_state = PINDA_HEAT_T + 1;
lcd_update(2);
if (degHotend(active_extruder) > EXTRUDE_MINTEMP) {
@ -7972,9 +7971,8 @@ void temp_compensation_start() {
if (custom_message_state == 99 || custom_message_state == 9) lcd_update(2); //force whole display redraw if number of digits changed
else lcd_update(1);
}
custom_message_type = 0;
custom_message_type = CUSTOM_MSG_TYPE_STATUS;
custom_message_state = 0;
custom_message = false;
}
void temp_compensation_apply() {
@ -8821,7 +8819,7 @@ uint16_t print_time_remaining() {
return print_t;
}
uint8_t print_percent_done()
uint8_t calc_percent_done()
{
//in case that we have information from M73 gcode return percentage counted by slicer, else return percentage counted as byte_printed/filesize
uint8_t percent_done = 0;

View File

@ -538,7 +538,10 @@ int lcd_printf_P(const char* format, ...)
return ret;
}
void lcd_space(uint8_t n)
{
while (n--) lcd_putc(' ');
}
void lcd_print(const char* s)

View File

@ -50,6 +50,7 @@ extern int lcd_putc(int c);
extern int lcd_puts_P(const char* str);
extern int lcd_puts_at_P(uint8_t c, uint8_t r, const char* str);
extern int lcd_printf_P(const char* format, ...);
extern void lcd_space(uint8_t n);
extern void lcd_printNumber(unsigned long n, uint8_t base);
extern void lcd_printFloat(double number, uint8_t digits);

View File

@ -28,6 +28,9 @@ uint8_t menu_top = 0;
uint8_t menu_clicked = 0;
uint8_t menu_entering = 0;
uint8_t menu_leaving = 0;
menu_func_t menu_menu = 0;
@ -76,12 +79,22 @@ void menu_end(void)
void menu_back(void)
{
if (menu_depth > 0) {
if (menu_depth > 0)
{
menu_depth--;
menu_goto(menu_stack[menu_depth].menu, menu_stack[menu_depth].position, true, true);
}
}
void menu_back_no_reset(void)
{
if (menu_depth > 0)
{
menu_depth--;
menu_goto(menu_stack[menu_depth].menu, menu_stack[menu_depth].position, true, false);
}
}
void menu_back_if_clicked(void)
{
if (lcd_clicked())
@ -107,6 +120,16 @@ void menu_submenu(menu_func_t submenu)
}
}
void menu_submenu_no_reset(menu_func_t submenu)
{
if (menu_depth <= MENU_DEPTH_MAX)
{
menu_stack[menu_depth].menu = menu_menu;
menu_stack[menu_depth++].position = lcd_encoder;
menu_goto(submenu, 0, true, false);
}
}
uint8_t menu_item_ret(void)
{
lcd_beeper_quick_feedback();
@ -295,7 +318,7 @@ void _menu_edit_int3(void)
if (LCD_CLICKED)
{
*((int*)(_md->editValue)) = (int)lcd_encoder;
menu_back();
menu_back_no_reset();
}
}
@ -311,7 +334,7 @@ uint8_t menu_item_edit_int3(const char* str, int16_t* pval, int16_t min_val, int
}
if (menu_clicked && (lcd_encoder == menu_item))
{
menu_submenu(_menu_edit_int3);
menu_submenu_no_reset(_menu_edit_int3);
_md->editLabel = str;
_md->editValue = pval;
_md->minEditValue = min_val;

View File

@ -6,6 +6,7 @@
#define MENU_DEPTH_MAX 4
#define MENU_DATA_SIZE 32
#define MENU_DATA_EDIT_SIZE 12
//Function pointer to menu functions.
typedef void (*menu_func_t)(void);
@ -25,12 +26,15 @@ extern uint8_t menu_depth;
extern uint8_t menu_line;
extern uint8_t menu_item;
extern uint8_t menu_row;
;
//scroll offset in the current menu
extern uint8_t menu_top;
extern uint8_t menu_clicked;
extern uint8_t menu_entering;
extern uint8_t menu_leaving;
//function pointer to the currently active menu
extern menu_func_t menu_menu;
@ -46,12 +50,16 @@ extern void menu_end(void);
extern void menu_back(void);
extern void menu_back_no_reset(void);
extern void menu_back_if_clicked(void);
extern void menu_back_if_clicked_fb(void);
extern void menu_submenu(menu_func_t submenu);
extern void menu_submenu_no_reset(menu_func_t submenu);
extern uint8_t menu_item_ret(void);
//extern int menu_draw_item_printf_P(char type_char, const char* format, ...);

View File

@ -26,8 +26,12 @@ extern char choose_extruder_menu();
bool mmu_enabled = false;
bool mmu_ready = false;
int8_t mmu_state = 0;
uint8_t mmu_cmd = 0;
uint8_t mmu_extruder = 0;
uint8_t tmp_extruder = 0;
@ -38,6 +42,9 @@ int16_t mmu_version = -1;
int16_t mmu_buildnr = -1;
uint32_t mmu_last_request = 0;
uint32_t mmu_last_response = 0;
//clear rx buffer
void mmu_clr_rx_buf(void)
@ -49,7 +56,9 @@ void mmu_clr_rx_buf(void)
int mmu_puts_P(const char* str)
{
mmu_clr_rx_buf(); //clear rx buffer
return fputs_P(str, uart2io); //send command
int r = fputs_P(str, uart2io); //send command
mmu_last_request = millis();
return r;
}
//send command - printf
@ -60,19 +69,24 @@ int mmu_printf_P(const char* format, ...)
mmu_clr_rx_buf(); //clear rx buffer
int r = vfprintf_P(uart2io, format, args); //send command
va_end(args);
mmu_last_request = millis();
return r;
}
//check 'ok' response
int8_t mmu_rx_ok(void)
{
return uart2_rx_str_P(PSTR("ok\n"));
int8_t res = uart2_rx_str_P(PSTR("ok\n"));
if (res == 1) mmu_last_response = millis();
return res;
}
//check 'start' response
int8_t mmu_rx_start(void)
{
return uart2_rx_str_P(PSTR("start\n"));
int8_t res = uart2_rx_str_P(PSTR("start\n"));
if (res == 1) mmu_last_response = millis();
return res;
}
//initialize mmu2 unit - first part - should be done at begining of startup process
@ -138,6 +152,50 @@ void mmu_loop(void)
mmu_state = 1;
}
return;
case 1:
if (mmu_cmd) //command request ?
{
if ((mmu_cmd >= MMU_CMD_T0) && (mmu_cmd <= MMU_CMD_T4))
{
int extruder = mmu_cmd - MMU_CMD_T0;
printf_P(PSTR("MMU <= 'T%d'\n"), extruder);
mmu_printf_P(PSTR("T%d\n"), extruder);
mmu_state = 3; // wait for response
}
mmu_cmd = 0;
}
else if ((mmu_last_response + 1000) < millis()) //request every 1s
{
puts_P(PSTR("MMU <= 'P0'"));
mmu_puts_P(PSTR("P0\n")); //send 'read finda' request
mmu_state = 2;
}
return;
case 2: //response to command P0
if (mmu_rx_ok() > 0)
{
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
printf_P(PSTR("MMU => '%dok'\n"), mmu_finda);
mmu_state = 1;
mmu_ready = true;
}
else if ((mmu_last_request + 30000) < millis())
{ //resend request after timeout (30s)
mmu_state = 1;
}
return;
case 3: //response to commands T0-T4
if (mmu_rx_ok() > 0)
{
printf_P(PSTR("MMU => 'ok'\n"), mmu_finda);
mmu_ready = true;
mmu_state = 1;
}
else if ((mmu_last_request + 30000) < millis())
{ //resend request after timeout (30s)
mmu_state = 1;
}
return;
}
}
@ -162,9 +220,26 @@ int8_t mmu_set_filament_type(uint8_t extruder, uint8_t filament)
return timeout?1:0;
}
bool mmu_get_response(bool timeout)
void mmu_command(uint8_t cmd)
{
printf_P(PSTR("mmu_get_response - begin\n"));
mmu_cmd = cmd;
mmu_ready = false;
}
bool mmu_get_response(void)
{
KEEPALIVE_STATE(IN_PROCESS);
while (!mmu_ready)
{
mmu_loop();
if (mmu_state != 3)
break;
}
bool ret = mmu_ready;
mmu_ready = false;
return ret;
/* printf_P(PSTR("mmu_get_response - begin\n"));
//waits for "ok" from mmu
//function returns true if "ok" was received
//if timeout is set to true function return false if there is no "ok" received before timeout
@ -182,7 +257,7 @@ bool mmu_get_response(bool timeout)
}
}
printf_P(PSTR("mmu_get_response - end %d\n"), response?1:0);
return response;
return response;*/
}
@ -197,7 +272,7 @@ void manage_response(bool move_axes, bool turn_off_nozzle)
float y_position_bckp = current_position[Y_AXIS];
while(!response)
{
response = mmu_get_response(true); //wait for "ok" from mmu
response = mmu_get_response(); //wait for "ok" from mmu
if (!response) { //no "ok" was received in reserved time frame, user will fix the issue on mmu unit
if (!mmu_print_saved) { //first occurence, we are saving current position, park print head in certain position and disable nozzle heater
if (lcd_update_enabled) {
@ -306,8 +381,10 @@ void mmu_M600_load_filament(bool automatic)
lcd_print(" ");
lcd_print(tmp_extruder + 1);
snmm_filaments_used |= (1 << tmp_extruder); //for stop print
printf_P(PSTR("T code: %d \n"), tmp_extruder);
mmu_printf_P(PSTR("T%d\n"), tmp_extruder);
// printf_P(PSTR("T code: %d \n"), tmp_extruder);
// mmu_printf_P(PSTR("T%d\n"), tmp_extruder);
mmu_command(MMU_CMD_T0 + tmp_extruder);
manage_response(false, true);
mmu_extruder = tmp_extruder; //filament change is finished

View File

@ -17,6 +17,13 @@ extern int16_t mmu_version;
extern int16_t mmu_buildnr;
#define MMU_CMD_NONE 0
#define MMU_CMD_T0 0x10
#define MMU_CMD_T1 0x11
#define MMU_CMD_T2 0x12
#define MMU_CMD_T3 0x13
#define MMU_CMD_T4 0x14
extern int mmu_puts_P(const char* str);
extern int mmu_printf_P(const char* format, ...);
@ -33,8 +40,9 @@ extern void mmu_reset(void);
extern int8_t mmu_set_filament_type(uint8_t extruder, uint8_t filament);
extern void mmu_command(uint8_t cmd);
extern bool mmu_get_response(bool timeout);
extern bool mmu_get_response(void);
extern void manage_response(bool move_axes, bool turn_off_nozzle);

View File

@ -230,15 +230,15 @@ void checkHitEndstops()
SERIAL_ECHORPGM(_T(MSG_ENDSTOPS_HIT));
if(endstop_x_hit) {
SERIAL_ECHOPAIR(" X:",(float)endstops_trigsteps[X_AXIS]/axis_steps_per_unit[X_AXIS]);
LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT), PSTR("X")));
// LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT), PSTR("X")));
}
if(endstop_y_hit) {
SERIAL_ECHOPAIR(" Y:",(float)endstops_trigsteps[Y_AXIS]/axis_steps_per_unit[Y_AXIS]);
LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT), PSTR("Y")));
// LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT), PSTR("Y")));
}
if(endstop_z_hit) {
SERIAL_ECHOPAIR(" Z:",(float)endstops_trigsteps[Z_AXIS]/axis_steps_per_unit[Z_AXIS]);
LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT),PSTR("Z")));
// LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT),PSTR("Z")));
}
SERIAL_ECHOLN("");
endstop_x_hit=false;

File diff suppressed because it is too large Load Diff

View File

@ -13,100 +13,108 @@ extern void menu_lcd_longpress_func(void);
extern void menu_lcd_charsetup_func(void);
extern void menu_lcd_lcdupdate_func(void);
// Call with a false parameter to suppress the LCD update from various places like the planner or the temp control.
void ultralcd_init();
void lcd_setstatus(const char* message);
void lcd_setstatuspgm(const char* message);
void lcd_setalertstatuspgm(const char* message);
void lcd_reset_alert_level();
uint8_t get_message_level();
void lcd_adjust_z();
void lcd_pick_babystep();
void lcd_alright();
void EEPROM_save_B(int pos, int* value);
void EEPROM_read_B(int pos, int* value);
void lcd_wait_interact();
void lcd_change_filament();
void lcd_loading_filament();
void lcd_change_success();
void lcd_loading_color();
void lcd_sdcard_stop();
void lcd_sdcard_pause();
void lcd_print_stop();
void prusa_statistics(int _message, uint8_t _col_nr = 0);
void lcd_confirm_print();
unsigned char lcd_choose_color();
// Call with a false parameter to suppress the LCD update from various places like the planner or the temp control.
void ultralcd_init();
void lcd_setstatus(const char* message);
void lcd_setstatuspgm(const char* message);
void lcd_setalertstatuspgm(const char* message);
void lcd_reset_alert_level();
uint8_t get_message_level();
void lcd_adjust_z();
void lcd_pick_babystep();
void lcd_alright();
void EEPROM_save_B(int pos, int* value);
void EEPROM_read_B(int pos, int* value);
void lcd_wait_interact();
void lcd_change_filament();
void lcd_loading_filament();
void lcd_change_success();
void lcd_loading_color();
void lcd_sdcard_stop();
void lcd_sdcard_pause();
void lcd_print_stop();
void prusa_statistics(int _message, uint8_t _col_nr = 0);
void lcd_confirm_print();
unsigned char lcd_choose_color();
//void lcd_mylang();
extern bool lcd_selftest();
extern bool lcd_selftest();
void lcd_menu_statistics();
void lcd_menu_statistics();
extern const char* lcd_display_message_fullscreen_P(const char *msg, uint8_t &nlines);
extern const char* lcd_display_message_fullscreen_P(const char *msg);
extern void lcd_wait_for_click();
extern void lcd_show_fullscreen_message_and_wait_P(const char *msg);
// 0: no, 1: yes, -1: timeouted
extern int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true, bool default_yes = false);
extern int8_t lcd_show_multiscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true, bool default_yes = false);
// Ask the user to move the Z axis up to the end stoppers and let
// the user confirm that it has been done.
#ifndef TMC2130
extern bool lcd_calibrate_z_end_stop_manual(bool only_z);
#endif
extern void lcd_wait_for_click();
extern void lcd_show_fullscreen_message_and_wait_P(const char *msg);
// 0: no, 1: yes, -1: timeouted
extern int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true, bool default_yes = false);
extern int8_t lcd_show_multiscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true, bool default_yes = false);
// Ask the user to move the Z axis up to the end stoppers and let
// the user confirm that it has been done.
// Show the result of the calibration process on the LCD screen.
extern void lcd_bed_calibration_show_result(uint8_t result, uint8_t point_too_far_mask);
#ifndef TMC2130
extern bool lcd_calibrate_z_end_stop_manual(bool only_z);
#endif
extern void lcd_diag_show_end_stops();
// Show the result of the calibration process on the LCD screen.
extern void lcd_bed_calibration_show_result(uint8_t result, uint8_t point_too_far_mask);
extern void lcd_diag_show_end_stops();
#define LCD_MESSAGEPGM(x) lcd_setstatuspgm(PSTR(x))
#define LCD_ALERTMESSAGEPGM(x) lcd_setalertstatuspgm(PSTR(x))
#define LCD_MESSAGERPGM(x) lcd_setstatuspgm((x))
#define LCD_ALERTMESSAGERPGM(x) lcd_setalertstatuspgm((x))
#define LCD_MESSAGEPGM(x) lcd_setstatuspgm(PSTR(x))
#define LCD_ALERTMESSAGEPGM(x) lcd_setalertstatuspgm(PSTR(x))
#define LCD_MESSAGERPGM(x) lcd_setstatuspgm((x))
#define LCD_ALERTMESSAGERPGM(x) lcd_setalertstatuspgm((x))
// To be used in lcd_commands_type.
#define LCD_COMMAND_IDLE 0
#define LCD_COMMAND_LOAD_FILAMENT 1
#define LCD_COMMAND_STOP_PRINT 2
#define LCD_COMMAND_FARM_MODE_CONFIRM 4
#define LCD_COMMAND_LONG_PAUSE 5
#define LCD_COMMAND_LONG_PAUSE_RESUME 6
#define LCD_COMMAND_PID_EXTRUDER 7
#define LCD_COMMAND_V2_CAL 8
extern int lcd_commands_type;
#define CUSTOM_MSG_TYPE_STATUS 0 // status message from lcd_status_message variable
#define CUSTOM_MSG_TYPE_MESHBL 1 // Mesh bed leveling in progress
#define CUSTOM_MSG_TYPE_F_LOAD 2 // Loading filament in progress
#define CUSTOM_MSG_TYPE_PIDCAL 3 // PID tuning in progress
#define CUSTOM_MSG_TYPE_TEMCAL 4 // PINDA temp calibration
#define CUSTOM_MSG_TYPE_TEMPRE 5 // Temp compensation preheat
extern unsigned int custom_message_type;
extern unsigned int custom_message_state;
extern uint8_t farm_mode;
extern int farm_no;
extern int farm_timer;
extern int farm_status;
#ifdef TMC2130
#define SILENT_MODE_NORMAL 0
#define SILENT_MODE_STEALTH 1
#define SILENT_MODE_OFF SILENT_MODE_NORMAL
#else
#define SILENT_MODE_POWER 0
#define SILENT_MODE_SILENT 1
#define SILENT_MODE_AUTO 2
#define SILENT_MODE_OFF SILENT_MODE_POWER
#endif
extern int8_t SilentModeMenu;
extern bool cancel_heatup;
extern bool isPrintPaused;
// To be used in lcd_commands_type.
#define LCD_COMMAND_IDLE 0
#define LCD_COMMAND_LOAD_FILAMENT 1
#define LCD_COMMAND_STOP_PRINT 2
#define LCD_COMMAND_FARM_MODE_CONFIRM 4
#define LCD_COMMAND_LONG_PAUSE 5
#define LCD_COMMAND_LONG_PAUSE_RESUME 6
#define LCD_COMMAND_PID_EXTRUDER 7
#define LCD_COMMAND_V2_CAL 8
extern int lcd_commands_type;
extern uint8_t farm_mode;
extern int farm_no;
extern int farm_timer;
extern int farm_status;
#ifdef TMC2130
#define SILENT_MODE_NORMAL 0
#define SILENT_MODE_STEALTH 1
#define SILENT_MODE_OFF SILENT_MODE_NORMAL
#else
#define SILENT_MODE_POWER 0
#define SILENT_MODE_SILENT 1
#define SILENT_MODE_AUTO 2
#define SILENT_MODE_OFF SILENT_MODE_POWER
#endif
extern int8_t SilentModeMenu;
extern bool cancel_heatup;
extern bool isPrintPaused;
void lcd_ignore_click(bool b=true);
void lcd_commands();
void lcd_ignore_click(bool b=true);
void lcd_commands();
void change_extr(int extr);
@ -132,7 +140,6 @@ void lcd_farm_sdcard_menu_w();
void lcd_wait_for_heater();
void lcd_wait_for_cool_down();
void adjust_bed_reset();
void lcd_extr_cal_reset();
void lcd_temp_cal_show_result(bool result);
@ -150,8 +157,8 @@ void lcd_temp_calibration_set();
void display_loading();
#if !SDSORT_USES_RAM
void lcd_set_degree();
void lcd_set_progress();
void lcd_set_degree();
void lcd_set_progress();
#endif
void lcd_language();