Apply TERN to compact code (#17619)

This commit is contained in:
Scott Lahteine
2020-04-22 16:35:03 -05:00
committed by GitHub
parent 88bdd26c99
commit 6d90d1e1f5
162 changed files with 1493 additions and 3530 deletions

View File

@ -802,7 +802,7 @@ void MarlinUI::draw_status_screen() {
#else // HOTENDS <= 2 && (HOTENDS <= 1 || !HAS_HEATED_BED)
#if DUAL_MIXING_EXTRUDER
#if HAS_DUAL_MIXING
// Two-component mix / gradient instead of XY
@ -822,13 +822,9 @@ void MarlinUI::draw_status_screen() {
sprintf_P(mixer_messages, PSTR("%s %d;%d%% "), mix_label, int(mixer.mix[0]), int(mixer.mix[1]));
lcd_put_u8str(mixer_messages);
#else // !DUAL_MIXING_EXTRUDER
#else // !HAS_DUAL_MIXING
if (true
#if ENABLED(LCD_SHOW_E_TOTAL)
&& !printingIsActive()
#endif
) {
if (TERN1(LCD_SHOW_E_TOTAL, !printingIsActive())) {
const xy_pos_t lpos = current_position.asLogical();
_draw_axis_value(X_AXIS, ftostr4sign(lpos.x), blink);
lcd_put_wchar(' ');
@ -843,7 +839,7 @@ void MarlinUI::draw_status_screen() {
#endif
}
#endif // !DUAL_MIXING_EXTRUDER
#endif // !HAS_DUAL_MIXING
#endif // HOTENDS <= 2 && (HOTENDS <= 1 || !HAS_HEATED_BED)
@ -1073,46 +1069,22 @@ void MarlinUI::draw_status_screen() {
static uint8_t ledsprev = 0;
uint8_t leds = 0;
#if HAS_HEATED_BED
if (thermalManager.degTargetBed() > 0) leds |= LED_A;
#endif
#if HAS_HOTEND
if (thermalManager.degTargetHotend(0) > 0) leds |= LED_B;
#endif
if (TERN0(HAS_HEATED_BED, thermalManager.degTargetBed() > 0)) leds |= LED_A;
if (TERN0(HAS_HOTEND, thermalManager.degTargetHotend(0) > 0)) leds |= LED_B;
#if FAN_COUNT > 0
if (0
#if HAS_FAN0
|| thermalManager.fan_speed[0]
#endif
#if HAS_FAN1
|| thermalManager.fan_speed[1]
#endif
#if HAS_FAN2
|| thermalManager.fan_speed[2]
#endif
#if HAS_FAN3
|| thermalManager.fan_speed[3]
#endif
#if HAS_FAN4
|| thermalManager.fan_speed[4]
#endif
#if HAS_FAN5
|| thermalManager.fan_speed[5]
#endif
#if HAS_FAN6
|| thermalManager.fan_speed[6]
#endif
#if HAS_FAN7
|| thermalManager.fan_speed[7]
#endif
if ( TERN0(HAS_FAN0, thermalManager.fan_speed[0])
|| TERN0(HAS_FAN1, thermalManager.fan_speed[1])
|| TERN0(HAS_FAN2, thermalManager.fan_speed[2])
|| TERN0(HAS_FAN3, thermalManager.fan_speed[3])
|| TERN0(HAS_FAN4, thermalManager.fan_speed[4])
|| TERN0(HAS_FAN5, thermalManager.fan_speed[5])
|| TERN0(HAS_FAN6, thermalManager.fan_speed[6])
|| TERN0(HAS_FAN7, thermalManager.fan_speed[7])
) leds |= LED_C;
#endif // FAN_COUNT > 0
#if HAS_MULTI_HOTEND
if (thermalManager.degTargetHotend(1) > 0) leds |= LED_C;
#endif
if (TERN0(HAS_MULTI_HOTEND, thermalManager.degTargetHotend(1) > 0)) leds |= LED_C;
if (leds != ledsprev) {
lcd.setBacklight(leds);

View File

@ -1731,16 +1731,36 @@
#endif
#endif
#define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE))
#define DO_DRAW_HOTENDS (HOTENDS > 0)
#define DO_DRAW_BED (HAS_HEATED_BED && HOTENDS <= 4)
#define DO_DRAW_CUTTER (HAS_CUTTER && !DO_DRAW_BED)
#define DO_DRAW_CHAMBER (HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4)
#define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES))
#define ANIM_HOTEND (HOTENDS && ENABLED(STATUS_HOTEND_ANIM))
#define ANIM_BED (DO_DRAW_BED && ENABLED(STATUS_BED_ANIM))
#define ANIM_CHAMBER (DO_DRAW_CHAMBER && ENABLED(STATUS_CHAMBER_ANIM))
#define ANIM_CUTTER (DO_DRAW_CUTTER && ENABLED(STATUS_CUTTER_ANIM))
#define ANIM_HBCC (ANIM_HOTEND || ANIM_BED || ANIM_CHAMBER || ANIM_CUTTER)
#if STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE)
#define DO_DRAW_LOGO 1
#endif
#if HOTENDS > 0
#define DO_DRAW_HOTENDS 1
#endif
#if HAS_HEATED_BED && HOTENDS <= 4
#define DO_DRAW_BED 1
#endif
#if HAS_CUTTER && !DO_DRAW_BED
#define DO_DRAW_CUTTER 1
#endif
#if HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4
#define DO_DRAW_CHAMBER 1
#endif
#if HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES)
#define DO_DRAW_FAN 1
#endif
#if HOTENDS && ENABLED(STATUS_HOTEND_ANIM)
#define ANIM_HOTEND 1
#endif
#if DO_DRAW_BED && ENABLED(STATUS_BED_ANIM)
#define ANIM_BED 1
#endif
#if DO_DRAW_CHAMBER && ENABLED(STATUS_CHAMBER_ANIM)
#define ANIM_CHAMBER 1
#endif
#if DO_DRAW_CUTTER && ENABLED(STATUS_CUTTER_ANIM)
#define ANIM_CUTTER 1
#endif
#if ANIM_HOTEND || ANIM_BED || ANIM_CHAMBER || ANIM_CUTTER
#define ANIM_HBCC 1
#endif

View File

@ -56,7 +56,7 @@
#include "../../module/printcounter.h"
#endif
#if DUAL_MIXING_EXTRUDER
#if HAS_DUAL_MIXING
#include "../../feature/mixing.h"
#endif
@ -365,15 +365,11 @@ void MarlinUI::draw_status_screen() {
#if ANIM_HOTEND
HOTEND_LOOP() if (thermalManager.isHeatingHotend(e)) SBI(new_bits, HEATBIT_HOTEND + e);
#endif
#if ANIM_BED
if (thermalManager.isHeatingBed()) SBI(new_bits, HEATBIT_BED);
#endif
if (TERN0(ANIM_BED, thermalManager.isHeatingBed())) SBI(new_bits, HEATBIT_BED);
#if DO_DRAW_CHAMBER && HAS_HEATED_CHAMBER
if (thermalManager.isHeatingChamber()) SBI(new_bits, HEATBIT_CHAMBER);
#endif
#if ANIM_CUTTER
if (cutter.enabled()) SBI(new_bits, HEATBIT_CUTTER);
#endif
if (TERN0(ANIM_CUTTER, cutter.enabled())) SBI(new_bits, HEATBIT_CUTTER);
heat_bits = new_bits;
#endif
@ -555,14 +551,10 @@ void MarlinUI::draw_status_screen() {
#endif
// Heated Bed
#if DO_DRAW_BED
_draw_bed_status(blink);
#endif
TERN_(DO_DRAW_BED, _draw_bed_status(blink));
// Heated Chamber
#if DO_DRAW_CHAMBER
_draw_chamber_status();
#endif
TERN_(DO_DRAW_CHAMBER, _draw_chamber_status());
// Fan, if a bitmap was provided
#if DO_DRAW_FAN
@ -695,7 +687,7 @@ void MarlinUI::draw_status_screen() {
u8g.setColorIndex(0); // white on black
#endif
#if DUAL_MIXING_EXTRUDER
#if HAS_DUAL_MIXING
// Two-component mix / gradient instead of XY

View File

@ -537,14 +537,9 @@ void ST7920_Lite_Status_Screen::draw_heat_icon(const bool whichIcon, const bool
static struct {
bool E1_show_target : 1;
bool E2_show_target : 1;
#if HAS_HEATED_BED
bool bed_show_target : 1;
#endif
TERN_(HAS_HEATED_BED, bool bed_show_target : 1);
} display_state = {
true, true
#if HAS_HEATED_BED
, true
#endif
true, true, TERN_(HAS_HEATED_BED, true)
};
void ST7920_Lite_Status_Screen::draw_temps(uint8_t line, const int16_t temp, const int16_t target, bool showTarget, bool targetStateChange) {
@ -672,11 +667,7 @@ void ST7920_Lite_Status_Screen::draw_position(const xyze_pos_t &pos, const bool
// If position is unknown, flash the labels.
const unsigned char alt_label = position_known ? 0 : (ui.get_blink() ? ' ' : 0);
if (true
#if ENABLED(LCD_SHOW_E_TOTAL)
&& !printingIsActive()
#endif
) {
if (TERN1(LCD_SHOW_E_TOTAL, !printingIsActive())) {
write_byte(alt_label ? alt_label : 'X');
write_str(dtostrf(pos.x, -4, 0, str), 4);
@ -712,13 +703,8 @@ bool ST7920_Lite_Status_Screen::indicators_changed() {
#endif
static uint16_t last_checksum = 0;
const uint16_t checksum = blink ^ feedrate_perc ^ fs ^ extruder_1_target
#if HOTENDS > 1
^ extruder_2_target
#endif
#if HAS_HEATED_BED
^ bed_target
#endif
;
^ TERN0(HAS_MULTI_HOTEND, extruder_2_target)
^ TERN0(HAS_HEATED_BED, bed_target);
if (last_checksum == checksum) return false;
last_checksum = checksum;
return true;
@ -741,12 +727,8 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) {
#endif
draw_extruder_1_temp(extruder_1_temp, extruder_1_target, forceUpdate);
#if HAS_MULTI_HOTEND
draw_extruder_2_temp(extruder_2_temp, extruder_2_target, forceUpdate);
#endif
#if HAS_HEATED_BED
draw_bed_temp(bed_temp, bed_target, forceUpdate);
#endif
TERN_(HAS_MULTI_HOTEND, draw_extruder_2_temp(extruder_2_temp, extruder_2_target, forceUpdate));
TERN_(HAS_HEATED_BED, draw_bed_temp(bed_temp, bed_target, forceUpdate));
uint16_t spd = thermalManager.fan_speed[0];
@ -761,9 +743,7 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) {
// Update the fan and bed animations
if (spd) draw_fan_icon(blink);
#if HAS_HEATED_BED
draw_heat_icon(bed_target > 0 && blink, bed_target > 0);
#endif
TERN_(HAS_HEATED_BED, draw_heat_icon(bed_target > 0 && blink, bed_target > 0));
}
}
@ -813,9 +793,7 @@ void ST7920_Lite_Status_Screen::update_status_or_position(bool forceUpdate) {
* If STATUS_EXPIRE_SECONDS is zero, only the status is shown.
*/
if (forceUpdate || status_changed()) {
#if ENABLED(STATUS_MESSAGE_SCROLLING)
ui.status_scroll_offset = 0;
#endif
TERN_(STATUS_MESSAGE_SCROLLING, ui.status_scroll_offset = 0);
#if STATUS_EXPIRE_SECONDS
countdown = ui.status_message[0] ? STATUS_EXPIRE_SECONDS : 0;
#endif
@ -823,26 +801,20 @@ void ST7920_Lite_Status_Screen::update_status_or_position(bool forceUpdate) {
blink_changed(); // Clear changed flag
}
#if !STATUS_EXPIRE_SECONDS
#if ENABLED(STATUS_MESSAGE_SCROLLING)
else if (blink_changed())
draw_status_message();
#endif
else if (TERN0(STATUS_MESSAGE_SCROLLING, blink_changed()))
draw_status_message();
#else
else if (blink_changed()) {
if (countdown > 1) {
countdown--;
#if ENABLED(STATUS_MESSAGE_SCROLLING)
draw_status_message();
#endif
TERN_(STATUS_MESSAGE_SCROLLING, draw_status_message());
}
else if (countdown > 0) {
if (position_changed()) {
countdown--;
forceUpdate = true;
}
#if ENABLED(STATUS_MESSAGE_SCROLLING)
draw_status_message();
#endif
TERN_(STATUS_MESSAGE_SCROLLING, draw_status_message());
}
}

View File

@ -227,9 +227,7 @@ bool MarlinUI::detected() { return true; }
}
void MarlinUI::show_bootscreen() {
#if ENABLED(SHOW_CUSTOM_BOOTSCREEN)
show_custom_bootscreen();
#endif
TERN_(SHOW_CUSTOM_BOOTSCREEN, show_custom_bootscreen());
show_marlin_bootscreen();
}
@ -267,17 +265,11 @@ void MarlinUI::init_lcd() {
WRITE(LCD_BACKLIGHT_PIN, HIGH);
#endif
#if HAS_LCD_CONTRAST
refresh_contrast();
#endif
TERN_(HAS_LCD_CONTRAST, refresh_contrast());
#if ENABLED(LCD_SCREEN_ROT_90)
u8g.setRot90();
#elif ENABLED(LCD_SCREEN_ROT_180)
u8g.setRot180();
#elif ENABLED(LCD_SCREEN_ROT_270)
u8g.setRot270();
#endif
TERN_(LCD_SCREEN_ROT_90, u8g.setRot90());
TERN_(LCD_SCREEN_ROT_180, u8g.setRot180());
TERN_(LCD_SCREEN_ROT_270, u8g.setRot270());
#endif // !MKS_LCD12864B
@ -286,9 +278,7 @@ void MarlinUI::init_lcd() {
// The kill screen is displayed for unrecoverable conditions
void MarlinUI::draw_kill_screen() {
#if ENABLED(LIGHTWEIGHT_UI)
ST7920_Lite_Status_Screen::clear_text_buffer();
#endif
TERN_(LIGHTWEIGHT_UI, ST7920_Lite_Status_Screen::clear_text_buffer());
const u8g_uint_t h4 = u8g.getHeight() / 4;
u8g.firstPage();
do {

View File

@ -734,9 +734,7 @@ void DGUSScreenVariableHandler::HandleSettings(DGUS_VP_Variable &var, void *val_
switch (value) {
default: break;
case 1:
#if ENABLED(PRINTCOUNTER)
print_job_timer.initStats();
#endif
TERN_(PRINTCOUNTER, print_job_timer.initStats());
queue.enqueue_now_P(PSTR("M502\nM500"));
break;
case 2: queue.enqueue_now_P(PSTR("M501")); break;
@ -958,17 +956,13 @@ void DGUSScreenVariableHandler::HandleHeaterControl(DGUS_VP_Variable &var, void
#if HOTENDS >= 1
case VP_E0_BED_PREHEAT:
thermalManager.setTargetHotend(e_temp, 0);
#if HAS_HEATED_BED
thermalManager.setTargetBed(bed_temp);
#endif
TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(bed_temp));
break;
#endif
#if HOTENDS >= 2
case VP_E1_BED_PREHEAT:
thermalManager.setTargetHotend(e_temp, 1);
#if HAS_HEATED_BED
thermalManager.setTargetBed(bed_temp);
#endif
TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(bed_temp));
break;
#endif
}
@ -1002,9 +996,7 @@ void DGUSScreenVariableHandler::HandleHeaterControl(DGUS_VP_Variable &var, void
#endif
break;
case 1: // Load ABS
#if ENABLED(PREHEAT_2_TEMP_HOTEND)
e_temp = PREHEAT_2_TEMP_HOTEND;
#endif
TERN_(PREHEAT_2_TEMP_HOTEND, e_temp = PREHEAT_2_TEMP_HOTEND);
break;
case 2: // Load PET
#ifdef PREHEAT_3_TEMP_HOTEND
@ -1227,9 +1219,8 @@ bool DGUSScreenVariableHandler::loop() {
#if ENABLED(SHOW_BOOTSCREEN)
static bool booted = false;
#if ENABLED(POWER_LOSS_RECOVERY)
if (!booted && recovery.valid()) booted = true;
#endif
if (!booted && TERN0(POWER_LOSS_RECOVERY, recovery.valid()))
booted = true;
if (!booted && ELAPSED(ms, BOOTSCREEN_TIMEOUT)) {
booted = true;
GotoScreen(DGUSLCD_SCREEN_MAIN);

View File

@ -453,9 +453,7 @@ bool UIFlashStorage::is_present = false;
if (nBytes != write_page_size)
break;
#if ENABLED(EXTENSIBLE_UI)
ExtUI::yield();
#endif
TERN_(EXTENSIBLE_UI, ExtUI::yield());
}
SERIAL_ECHOLNPGM("DONE");
@ -493,9 +491,7 @@ bool UIFlashStorage::is_present = false;
addr += nBytes;
if (nBytes != write_page_size) break;
#if ENABLED(EXTENSIBLE_UI)
ExtUI::yield();
#endif
TERN_(EXTENSIBLE_UI, ExtUI::yield());
};
if (verifyOk) {

View File

@ -922,9 +922,8 @@ template <class T> bool CLCD::CommandFifo::_write_unaligned(T data, uint16_t len
uint32_t command_read_ptr;
#if ENABLED(TOUCH_UI_DEBUG)
if (command_write_ptr == 0xFFFFFFFFul) {
SERIAL_ECHO_MSG("Attempt to write to FIFO before CommandFifo::Cmd_Start().");
}
if (command_write_ptr == 0xFFFFFFFFul)
SERIAL_ECHO_MSG("Attempt to write to FIFO before CommandFifo::Cmd_Start().");
#endif
/* Wait until there is enough space in the circular buffer for the transfer */
@ -1160,24 +1159,15 @@ void CLCD::default_display_orientation() {
// processor to do this since it will also update the transform matrices.
if (FTDI::ftdi_chip >= 810) {
CommandFifo cmd;
cmd.setrotate(0
#if ENABLED(TOUCH_UI_MIRRORED)
+ 4
#endif
#if ENABLED(TOUCH_UI_PORTRAIT)
+ 2
#endif
#if ENABLED(TOUCH_UI_INVERTED)
+ 1
#endif
cmd.setrotate(
ENABLED(TOUCH_UI_MIRRORED) * 4
+ ENABLED(TOUCH_UI_PORTRAIT) * 2
+ ENABLED(TOUCH_UI_INVERTED) * 1
);
cmd.execute();
}
else {
#if ENABLED(TOUCH_UI_INVERTED)
mem_write_32(REG::ROTATE, 1);
#endif
}
else
TERN_(TOUCH_UI_INVERTED, mem_write_32(REG::ROTATE, 1));
#elif ANY(TOUCH_UI_PORTRAIT, TOUCH_UI_MIRRORED)
#error "PORTRAIT or MIRRORED orientation not supported on the FT800."
#elif ENABLED(TOUCH_UI_INVERTED)

View File

@ -206,14 +206,58 @@
// Define macros for compatibility
#define _CAT(a, ...) a ## __VA_ARGS__
#define SWITCH_ENABLED_ 1
#define ENABLED(b) _CAT(SWITCH_ENABLED_, b)
#define DISABLED(b) !ENABLED(b)
#define ANY(A,B) (ENABLED(A) || ENABLED(B))
#define EITHER(A,B) (ENABLED(A) || ENABLED(B))
#define BOTH(A,B) (ENABLED(A) && ENABLED(B))
#define NONE(A,B) (DISABLED(A) && DISABLED(B))
#define _CAT(a,V...) a##V
#define CAT(a,V...) _CAT(a,V)
#define FIRST(a,...) a
#define SECOND(a,b,...) b
#define THIRD(a,b,c,...) c
#define IS_PROBE(V...) SECOND(V, 0) // Get the second item passed, or 0
#define PROBE() ~, 1 // Second item will be 1 if this is passed
#define _NOT_0 PROBE()
#define NOT(x) IS_PROBE(_CAT(_NOT_, x)) // NOT('0') gets '1'. Anything else gets '0'.
#define _BOOL(x) NOT(NOT(x)) // NOT('0') gets '0'. Anything else gets '1'.
#define _DO_1(W,C,A) (_##W##_1(A))
#define _DO_2(W,C,A,B) (_##W##_1(A) C _##W##_1(B))
#define _DO_3(W,C,A,V...) (_##W##_1(A) C _DO_2(W,C,V))
#define _DO_4(W,C,A,V...) (_##W##_1(A) C _DO_3(W,C,V))
#define _DO_5(W,C,A,V...) (_##W##_1(A) C _DO_4(W,C,V))
#define _DO_6(W,C,A,V...) (_##W##_1(A) C _DO_5(W,C,V))
#define _DO_7(W,C,A,V...) (_##W##_1(A) C _DO_6(W,C,V))
#define _DO_8(W,C,A,V...) (_##W##_1(A) C _DO_7(W,C,V))
#define _DO_9(W,C,A,V...) (_##W##_1(A) C _DO_8(W,C,V))
#define _DO_10(W,C,A,V...) (_##W##_1(A) C _DO_9(W,C,V))
#define _DO_11(W,C,A,V...) (_##W##_1(A) C _DO_10(W,C,V))
#define _DO_12(W,C,A,V...) (_##W##_1(A) C _DO_11(W,C,V))
#define __DO_N(W,C,N,V...) _DO_##N(W,C,V)
#define _DO_N(W,C,N,V...) __DO_N(W,C,N,V)
#define DO(W,C,V...) _DO_N(W,C,NUM_ARGS(V),V)
#define _ISENA_ ~,1
#define _ISENA_1 ~,1
#define _ISENA_0x1 ~,1
#define _ISENA_true ~,1
#define _ISENA(V...) IS_PROBE(V)
#define _ENA_1(O) _ISENA(CAT(_IS,CAT(ENA_, O)))
#define _DIS_1(O) NOT(_ENA_1(O))
#define ENABLED(V...) DO(ENA,&&,V)
#define DISABLED(V...) DO(DIS,&&,V)
#define TERN(O,A,B) _TERN(_ENA_1(O),B,A) // OPTION converted to '0' or '1'
#define TERN0(O,A) _TERN(_ENA_1(O),0,A) // OPTION converted to A or '0'
#define TERN1(O,A) _TERN(_ENA_1(O),1,A) // OPTION converted to A or '1'
#define TERN_(O,A) _TERN(_ENA_1(O),,A) // OPTION converted to A or '<nul>'
#define _TERN(E,V...) __TERN(_CAT(T_,E),V) // Prepend 'T_' to get 'T_0' or 'T_1'
#define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1'
#define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B.
#define ANY(V...) !DISABLED(V)
#define NONE(V...) DISABLED(V)
#define ALL(V...) ENABLED(V)
#define BOTH(V1,V2) ALL(V1,V2)
#define EITHER(V1,V2) ANY(V1,V2)
// Remove compiler warning on an unused variable
#ifndef UNUSED

View File

@ -78,9 +78,7 @@ void BaseScreen::onIdle() {
}
void BaseScreen::reset_menu_timeout() {
#if LCD_TIMEOUT_TO_STATUS
last_interaction = millis();
#endif
TERN_(LCD_TIMEOUT_TO_STATUS, last_interaction = millis());
}
#if LCD_TIMEOUT_TO_STATUS

View File

@ -198,16 +198,14 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
void StatusScreen::draw_syringe(draw_mode_t what) {
int16_t x, y, h, v;
#ifdef E_MAX_POS
const float fill_level = 1.0 - min(1.0, max(0.0, getAxisPosition_mm(E0) / E_MAX_POS));
#else
const float fill_level = 0.75;
#endif
const bool e_homed = (true
#if ENABLED(TOUCH_UI_LULZBOT_BIO)
&& isAxisPositionKnown(E0)
const float fill_level = (
#ifdef E_MAX_POS
1.0 - min(1.0, max(0.0, getAxisPosition_mm(E0) / E_MAX_POS))
#else
0.75
#endif
);
const bool e_homed = TERN0(TOUCH_UI_LULZBOT_BIO, isAxisPositionKnown(E0));
CommandProcessor cmd;
PolyUI ui(cmd, what);
@ -237,12 +235,8 @@ void StatusScreen::draw_syringe(draw_mode_t what) {
}
void StatusScreen::draw_arrows(draw_mode_t what) {
const bool e_homed = (true
#if ENABLED(TOUCH_UI_LULZBOT_BIO)
&& isAxisPositionKnown(E0)
#endif
);
const bool z_homed = isAxisPositionKnown(Z);
const bool e_homed = TERN1(TOUCH_UI_LULZBOT_BIO, isAxisPositionKnown(E0)),
z_homed = isAxisPositionKnown(Z);
CommandProcessor cmd;
PolyUI ui(cmd, what);
@ -299,12 +293,8 @@ void StatusScreen::draw_fine_motion(draw_mode_t what) {
}
void StatusScreen::draw_overlay_icons(draw_mode_t what) {
const bool e_homed = (true
#if ENABLED(TOUCH_UI_LULZBOT_BIO)
&& isAxisPositionKnown(E0)
#endif
);
const bool z_homed = isAxisPositionKnown(Z);
const bool e_homed = TERN1(TOUCH_UI_LULZBOT_BIO, isAxisPositionKnown(E0)),
z_homed = isAxisPositionKnown(Z);
CommandProcessor cmd;
PolyUI ui(cmd, what);

View File

@ -50,11 +50,7 @@ void TuneMenu::onRedraw(draw_mode_t what) {
.font(font_medium)
.enabled( isPrinting()).tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(MSG_PRINT_SPEED))
.tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(MSG_BED_TEMPERATURE))
.enabled(
#if ENABLED(BABYSTEPPING)
true
#endif
)
.enabled(TERN_(BABYSTEPPING, true))
.tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(MSG_NUDGE_NOZZLE))
.enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(MSG_MOVE_TO_HOME))
.enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_RAISE_PLUNGER))

View File

@ -89,11 +89,7 @@ void FilesScreen::drawFileButton(const char* filename, uint8_t tag, bool is_dir,
cmd.cmd(MACRO(0));
}
#endif
cmd.text (BTN_POS(1,header_h+line), BTN_SIZE(6,1), filename, OPT_CENTERY
#if ENABLED(SCROLL_LONG_FILENAMES)
| OPT_NOFIT
#endif
);
cmd.text (BTN_POS(1,header_h+line), BTN_SIZE(6,1), filename, OPT_CENTERY | TERN0(SCROLL_LONG_FILENAMES, OPT_NOFIT));
if (is_dir) {
cmd.text(BTN_POS(1,header_h+line), BTN_SIZE(6,1), F("> "), OPT_CENTERY | OPT_RIGHTX);
}

View File

@ -252,9 +252,7 @@ void InterfaceSettingsScreen::loadSettings(const char *buff) {
for(uint8_t i = 0; i < InterfaceSoundsScreen::NUM_EVENTS; i++)
InterfaceSoundsScreen::event_sounds[i] = eeprom.event_sounds[i];
#if ENABLED(TOUCH_UI_DEVELOPER_MENU)
StressTestScreen::startupCheck();
#endif
TERN_(TOUCH_UI_DEVELOPER_MENU, StressTestScreen::startupCheck());
}
#ifdef ARCHIM2_SPI_FLASH_EEPROM_BACKUP_SIZE

View File

@ -97,12 +97,8 @@ bool TemperatureScreen::onTouchHeld(uint8_t tag) {
case 30:
#define _HOTEND_OFF(N) setTargetTemp_celsius(0,E##N);
REPEAT(HOTENDS, _HOTEND_OFF);
#if HAS_HEATED_BED
setTargetTemp_celsius(0,BED);
#endif
#if HAS_HEATED_CHAMBER
setTargetTemp_celsius(0,CHAMBER);
#endif
TERN_(HAS_HEATED_BED, setTargetTemp_celsius(0,BED));
TERN_(HAS_HEATED_CHAMBER, setTargetTemp_celsius(0,CHAMBER));
#if FAN_COUNT > 0
setTargetFan_percent(0,FAN0);
#endif

View File

@ -109,12 +109,8 @@
namespace ExtUI {
static struct {
uint8_t printer_killed : 1;
#if ENABLED(JOYSTICK)
uint8_t jogging : 1;
#endif
#if ENABLED(SDSUPPORT)
uint8_t was_sd_printing : 1;
#endif
TERN_(JOYSTICK, uint8_t jogging : 1);
TERN_(SDSUPPORT, uint8_t was_sd_printing : 1);
} flags;
#ifdef __SAM3X8E__
@ -192,9 +188,7 @@ namespace ExtUI {
case CHAMBER: return; // Chamber has no idle timer
#endif
default:
#if HAS_HOTEND
thermalManager.reset_hotend_idle_timer(heater - H0);
#endif
TERN_(HAS_HOTEND, thermalManager.reset_hotend_idle_timer(heater - H0));
break;
}
#else
@ -251,9 +245,7 @@ namespace ExtUI {
bool isHeaterIdle(const heater_t heater) {
#if HEATER_IDLE_HANDLER
switch (heater) {
#if HAS_HEATED_BED
case BED: return thermalManager.bed_idle.timed_out;
#endif
TERN_(HAS_HEATED_BED, case BED: return thermalManager.bed_idle.timed_out);
#if HAS_HEATED_CHAMBER
case CHAMBER: return false; // Chamber has no idle timer
#endif
@ -278,12 +270,8 @@ namespace ExtUI {
float getActualTemp_celsius(const heater_t heater) {
switch (heater) {
#if HAS_HEATED_BED
case BED: return GET_TEMP_ADJUSTMENT(thermalManager.degBed());
#endif
#if HAS_HEATED_CHAMBER
case CHAMBER: return GET_TEMP_ADJUSTMENT(thermalManager.degChamber());
#endif
TERN_(HAS_HEATED_BED, case BED: return GET_TEMP_ADJUSTMENT(thermalManager.degBed()));
TERN_(HAS_HEATED_CHAMBER, case CHAMBER: return GET_TEMP_ADJUSTMENT(thermalManager.degChamber()));
default: return GET_TEMP_ADJUSTMENT(thermalManager.degHotend(heater - H0));
}
}
@ -294,12 +282,8 @@ namespace ExtUI {
float getTargetTemp_celsius(const heater_t heater) {
switch (heater) {
#if HAS_HEATED_BED
case BED: return GET_TEMP_ADJUSTMENT(thermalManager.degTargetBed());
#endif
#if HAS_HEATED_CHAMBER
case CHAMBER: return GET_TEMP_ADJUSTMENT(thermalManager.degTargetChamber());
#endif
TERN_(HAS_HEATED_BED, case BED: return GET_TEMP_ADJUSTMENT(thermalManager.degTargetBed()));
TERN_(HAS_HEATED_CHAMBER, case CHAMBER: return GET_TEMP_ADJUSTMENT(thermalManager.degTargetChamber()));
default: return GET_TEMP_ADJUSTMENT(thermalManager.degTargetHotend(heater - H0));
}
}
@ -356,28 +340,16 @@ namespace ExtUI {
#if HAS_SOFTWARE_ENDSTOPS
if (soft_endstops_enabled) switch (axis) {
case X_AXIS:
#if ENABLED(MIN_SOFTWARE_ENDSTOP_X)
min = soft_endstop.min.x;
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_X)
max = soft_endstop.max.x;
#endif
TERN_(MIN_SOFTWARE_ENDSTOP_X, min = soft_endstop.min.x);
TERN_(MAX_SOFTWARE_ENDSTOP_X, max = soft_endstop.max.x);
break;
case Y_AXIS:
#if ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
min = soft_endstop.min.y;
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
max = soft_endstop.max.y;
#endif
TERN_(MIN_SOFTWARE_ENDSTOP_Y, min = soft_endstop.min.y);
TERN_(MAX_SOFTWARE_ENDSTOP_Y, max = soft_endstop.max.y);
break;
case Z_AXIS:
#if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
min = soft_endstop.min.z;
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
max = soft_endstop.max.z;
#endif
TERN_(MIN_SOFTWARE_ENDSTOP_Z, min = soft_endstop.min.z);
TERN_(MAX_SOFTWARE_ENDSTOP_Z, max = soft_endstop.max.z);
default: break;
}
#endif // HAS_SOFTWARE_ENDSTOPS
@ -541,15 +513,9 @@ namespace ExtUI {
int getTMCBumpSensitivity(const axis_t axis) {
switch (axis) {
#if X_SENSORLESS
case X: return stepperX.homing_threshold();
#endif
#if Y_SENSORLESS
case Y: return stepperY.homing_threshold();
#endif
#if Z_SENSORLESS
case Z: return stepperZ.homing_threshold();
#endif
TERN_(X_SENSORLESS, case X: return stepperX.homing_threshold());
TERN_(Y_SENSORLESS, case Y: return stepperY.homing_threshold());
TERN_(Z_SENSORLESS, case Z: return stepperZ.homing_threshold());
default: return 0;
}
}
@ -673,9 +639,7 @@ namespace ExtUI {
void setJunctionDeviation_mm(const float value) {
planner.junction_deviation_mm = constrain(value, 0.01, 0.3);
#if ENABLED(LIN_ADVANCE)
planner.recalculate_max_e_jerk();
#endif
TERN_(LIN_ADVANCE, planner.recalculate_max_e_jerk());
}
#else
@ -871,9 +835,7 @@ namespace ExtUI {
void setMeshPoint(const xy_uint8_t &pos, const float zoff) {
if (WITHIN(pos.x, 0, GRID_MAX_POINTS_X) && WITHIN(pos.y, 0, GRID_MAX_POINTS_Y)) {
Z_VALUES(pos.x, pos.y) = zoff;
#if ENABLED(ABL_BILINEAR_SUBDIVISION)
bed_level_virt_interpolate();
#endif
TERN_(ABL_BILINEAR_SUBDIVISION, bed_level_virt_interpolate());
}
}
#endif
@ -1020,9 +982,7 @@ namespace ExtUI {
}
void setUserConfirmed() {
#if HAS_RESUME_CONTINUE
wait_for_user = false;
#endif
TERN_(HAS_RESUME_CONTINUE, wait_for_user = false);
}
void printFile(const char *filename) {

View File

@ -51,21 +51,9 @@ namespace ExtUI {
while (!ScreenHandler.loop()); // Wait while anything is left to be sent
}
void onMediaInserted() {
#if ENABLED(SDSUPPORT)
ScreenHandler.SDCardInserted();
#endif
}
void onMediaError() {
#if ENABLED(SDSUPPORT)
ScreenHandler.SDCardError();
#endif
}
void onMediaRemoved() {
#if ENABLED(SDSUPPORT)
ScreenHandler.SDCardRemoved();
#endif
}
void onMediaInserted() { TERN_(SDSUPPORT, ScreenHandler.SDCardInserted()); }
void onMediaError() { TERN_(SDSUPPORT, ScreenHandler.SDCardError()); }
void onMediaRemoved() { TERN_(SDSUPPORT, ScreenHandler.SDCardRemoved()); }
void onPlayTone(const uint16_t frequency, const uint16_t duration) {}
void onPrintTimerStarted() {}

View File

@ -53,18 +53,10 @@
// Pool game data to save SRAM
union MarlinGameData {
#if ENABLED(MARLIN_BRICKOUT)
brickout_data_t brickout;
#endif
#if ENABLED(MARLIN_INVADERS)
invaders_data_t invaders;
#endif
#if ENABLED(MARLIN_SNAKE)
snake_data_t snake;
#endif
#if ENABLED(MARLIN_MAZE)
maze_data_t maze;
#endif
TERN_(MARLIN_BRICKOUT, brickout_data_t brickout);
TERN_(MARLIN_INVADERS, invaders_data_t invaders);
TERN_(MARLIN_SNAKE, snake_data_t snake);
TERN_(MARLIN_MAZE, maze_data_t maze);
};
extern MarlinGameData marlin_game_data;

View File

@ -141,9 +141,7 @@ void MenuItem_gcode::action(PGM_P const, PGM_P const pgcode) { queue.inject_P(pg
* MenuItem_int3::draw(encoderLine == _thisItemNr, _lcdLineNr, plabel, &feedrate_percentage, 10, 999)
*/
void MenuEditItemBase::edit_screen(strfunc_t strfunc, loadfunc_t loadfunc) {
#if ENABLED(TOUCH_BUTTONS)
ui.repeat_delay = BUTTON_DELAY_EDIT;
#endif
TERN_(TOUCH_BUTTONS, ui.repeat_delay = BUTTON_DELAY_EDIT);
if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
if (int32_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue;
if (ui.should_draw())
@ -222,13 +220,9 @@ bool printer_busy() {
void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, const uint8_t top/*=0*/, const uint8_t items/*=0*/) {
if (currentScreen != screen) {
#if ENABLED(TOUCH_BUTTONS)
repeat_delay = BUTTON_DELAY_MENU;
#endif
TERN_(TOUCH_BUTTONS, repeat_delay = BUTTON_DELAY_MENU);
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
progress_reset();
#endif
TERN_(LCD_SET_PROGRESS_MANUALLY, progress_reset());
#if BOTH(DOUBLECLICK_FOR_Z_BABYSTEPPING, BABYSTEPPING)
static millis_t doubleclick_expire_ms = 0;
@ -275,9 +269,7 @@ void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, co
screen_items = items;
if (screen == status_screen) {
defer_status_screen(false);
#if ENABLED(AUTO_BED_LEVELING_UBL)
ubl.lcd_map_control = false;
#endif
TERN_(AUTO_BED_LEVELING_UBL, ubl.lcd_map_control = false);
screen_history_depth = 0;
}
@ -294,13 +286,9 @@ void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, co
refresh(LCDVIEW_CALL_REDRAW_NEXT);
screen_changed = true;
#if HAS_GRAPHICAL_LCD
drawing_screen = false;
#endif
TERN_(HAS_GRAPHICAL_LCD, drawing_screen = false);
#if HAS_LCD_MENU
encoder_direction_normal();
#endif
TERN_(HAS_LCD_MENU, encoder_direction_normal());
set_selection(false);
}
@ -400,10 +388,10 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
babystep.add_steps(Z_AXIS, babystep_increment);
if (do_probe) probe.offset.z = new_offs;
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
else hotend_offset[active_extruder].z = new_offs;
#endif
if (do_probe)
probe.offset.z = new_offs;
else
TERN(BABYSTEP_HOTEND_Z_OFFSET, hotend_offset[active_extruder].z = new_offs, NOOP);
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
@ -415,9 +403,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
#endif
if (do_probe) {
MenuEditItemBase::draw_edit_screen(GET_TEXT(MSG_ZPROBE_ZOFFSET), BABYSTEP_TO_STR(probe.offset.z));
#if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY)
_lcd_zoffset_overlay_gfx(probe.offset.z);
#endif
TERN_(BABYSTEP_ZPROBE_GFX_OVERLAY, _lcd_zoffset_overlay_gfx(probe.offset.z));
}
}
}
@ -427,16 +413,12 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
#if ENABLED(EEPROM_SETTINGS)
void lcd_store_settings() {
const bool saved = settings.save();
#if HAS_BUZZER
ui.completion_feedback(saved);
#endif
TERN_(HAS_BUZZER, ui.completion_feedback(saved));
UNUSED(saved);
}
void lcd_load_settings() {
const bool loaded = settings.load();
#if HAS_BUZZER
ui.completion_feedback(loaded);
#endif
TERN_(HAS_BUZZER, ui.completion_feedback(loaded));
UNUSED(loaded);
}
#endif

View File

@ -576,9 +576,7 @@ void menu_advanced_settings() {
//
const bool new_state = !settings.sd_update_status(),
didset = settings.set_sd_update_status(new_state);
#if HAS_BUZZER
ui.completion_feedback(didset);
#endif
TERN_(HAS_BUZZER, ui.completion_feedback(didset));
ui.return_to_status();
if (new_state) LCD_MESSAGEPGM(MSG_RESET_PRINTER); else ui.reset_status();
});
@ -589,9 +587,7 @@ void menu_advanced_settings() {
MSG_BUTTON_INIT, MSG_BUTTON_CANCEL,
[]{
const bool inited = settings.init_eeprom();
#if HAS_BUZZER
ui.completion_feedback(inited);
#endif
TERN_(HAS_BUZZER, ui.completion_feedback(inited));
UNUSED(inited);
},
ui.goto_previous_screen,

View File

@ -70,11 +70,7 @@ static inline void _lcd_goto_next_corner() {
}
line_to_current_position(manual_feedrate_mm_s.x);
line_to_z(LEVEL_CORNERS_HEIGHT);
if (++bed_corner > (3
#if ENABLED(LEVEL_CENTER_TOO)
+ 1
#endif
)) bed_corner = 0;
if (++bed_corner > 3 + ENABLED(LEVEL_CENTER_TOO)) bed_corner = 0;
}
static inline void _lcd_level_bed_corners_homing() {
@ -86,9 +82,7 @@ static inline void _lcd_level_bed_corners_homing() {
GET_TEXT(MSG_BUTTON_NEXT), GET_TEXT(MSG_BUTTON_DONE),
_lcd_goto_next_corner,
[]{
#if HAS_LEVELING
set_bed_leveling_enabled(leveling_was_active);
#endif
TERN_(HAS_LEVELING, set_bed_leveling_enabled(leveling_was_active));
ui.goto_previous_screen_no_defer();
},
GET_TEXT(

View File

@ -75,9 +75,7 @@
ui.synchronize(GET_TEXT(MSG_LEVEL_BED_DONE));
#endif
ui.goto_previous_screen_no_defer();
#if HAS_BUZZER
ui.completion_feedback();
#endif
TERN_(HAS_BUZZER, ui.completion_feedback());
}
if (ui.should_draw()) MenuItem_static::draw(LCD_HEIGHT >= 4, GET_TEXT(MSG_LEVEL_BED_DONE));
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);

View File

@ -44,9 +44,7 @@ static void lcd_cancel_object_confirm() {
MenuItem_confirm::confirm_screen(
[]{
cancelable.cancel_object(MenuItemBase::itemIndex - 1);
#if HAS_BUZZER
ui.completion_feedback();
#endif
TERN_(HAS_BUZZER, ui.completion_feedback());
ui.goto_previous_screen();
},
ui.goto_previous_screen,

View File

@ -421,9 +421,7 @@ void menu_configuration() {
if (!busy)
ACTION_ITEM(MSG_RESTORE_DEFAULTS, []{
settings.reset();
#if HAS_BUZZER
ui.completion_feedback();
#endif
TERN_(HAS_BUZZER, ui.completion_feedback());
});
END_MENU();

View File

@ -42,9 +42,7 @@ void _lcd_user_gcode(PGM_P const cmd) {
#if ENABLED(USER_SCRIPT_AUDIBLE_FEEDBACK) && HAS_BUZZER
ui.completion_feedback();
#endif
#if ENABLED(USER_SCRIPT_RETURN)
ui.return_to_status();
#endif
TERN_(USER_SCRIPT_RETURN, ui.return_to_status());
}
void menu_user() {

View File

@ -62,12 +62,8 @@ void _man_probe_pt(const xy_pos_t &xy) {
float lcd_probe_pt(const xy_pos_t &xy) {
_man_probe_pt(xy);
ui.defer_status_screen();
#if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Delta Calibration in progress"), CONTINUE_STR);
#endif
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("Delta Calibration in progress"));
#endif
TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Delta Calibration in progress"), CONTINUE_STR));
TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(PSTR("Delta Calibration in progress")));
wait_for_user_response();
ui.goto_previous_screen_no_defer();
return current_position.z;
@ -102,9 +98,7 @@ void _man_probe_pt(const xy_pos_t &xy) {
void lcd_delta_settings() {
auto _recalc_delta_settings = []{
#if HAS_LEVELING
reset_bed_level(); // After changing kinematics bed-level data is no longer valid
#endif
TERN_(HAS_LEVELING, reset_bed_level()); // After changing kinematics bed-level data is no longer valid
recalc_delta_settings();
};
START_MENU();

View File

@ -39,8 +39,12 @@
#include "game/game.h"
#endif
#define MACHINE_CAN_STOP (EITHER(SDSUPPORT, HOST_PROMPT_SUPPORT) || defined(ACTION_ON_CANCEL))
#define MACHINE_CAN_PAUSE (ANY(SDSUPPORT, HOST_PROMPT_SUPPORT, PARK_HEAD_ON_PAUSE) || defined(ACTION_ON_PAUSE))
#if EITHER(SDSUPPORT, HOST_PROMPT_SUPPORT) || defined(ACTION_ON_CANCEL)
#define MACHINE_CAN_STOP 1
#endif
#if ANY(SDSUPPORT, HOST_PROMPT_SUPPORT, PARK_HEAD_ON_PAUSE) || defined(ACTION_ON_PAUSE)
#define MACHINE_CAN_PAUSE 1
#endif
#if ENABLED(PRUSA_MMU2)
#include "../../lcd/menu/menu_mmu2.h"
@ -140,9 +144,8 @@ void menu_main() {
#endif // !HAS_ENCODER_WHEEL && SDSUPPORT
#if MACHINE_CAN_PAUSE
if (printingIsPaused()) ACTION_ITEM(MSG_RESUME_PRINT, ui.resume_print);
#endif
if (TERN0(MACHINE_CAN_PAUSE, printingIsPaused()))
ACTION_ITEM(MSG_RESUME_PRINT, ui.resume_print);
SUBMENU(MSG_MOTION, menu_motion);
}
@ -236,9 +239,7 @@ void menu_main() {
#if HAS_SERVICE_INTERVALS
static auto _service_reset = [](const int index) {
print_job_timer.resetServiceInterval(index);
#if HAS_BUZZER
ui.completion_feedback();
#endif
TERN_(HAS_BUZZER, ui.completion_feedback());
ui.reset_status();
ui.return_to_status();
};

View File

@ -113,9 +113,7 @@ class MenuItem_sdfolder : public MenuItem_sdbase {
encoderTopLine = 0;
ui.encoderPosition = 2 * (ENCODER_STEPS_PER_MENU_ITEM);
ui.screen_changed = true;
#if HAS_GRAPHICAL_LCD
ui.drawing_screen = false;
#endif
TERN_(HAS_GRAPHICAL_LCD, ui.drawing_screen = false);
ui.refresh();
}
};

View File

@ -33,7 +33,7 @@
#include "../../feature/mixing.h"
#define CHANNEL_MIX_EDITING !DUAL_MIXING_EXTRUDER
#define CHANNEL_MIX_EDITING !HAS_DUAL_MIXING
#if ENABLED(GRADIENT_MIX)
@ -120,7 +120,7 @@
static uint8_t v_index;
#if DUAL_MIXING_EXTRUDER
#if HAS_DUAL_MIXING
void _lcd_draw_mix(const uint8_t y) {
char tmp[20]; // "100%_100%"
sprintf_P(tmp, PSTR("%3d%% %3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
@ -131,9 +131,7 @@ static uint8_t v_index;
void _lcd_mixer_select_vtool() {
mixer.T(v_index);
#if DUAL_MIXING_EXTRUDER
_lcd_draw_mix(LCD_HEIGHT - 1);
#endif
TERN_(HAS_DUAL_MIXING, _lcd_draw_mix(LCD_HEIGHT - 1));
}
#if CHANNEL_MIX_EDITING
@ -156,7 +154,7 @@ void _lcd_mixer_select_vtool() {
void lcd_mixer_mix_edit() {
#if DUAL_MIXING_EXTRUDER && !CHANNEL_MIX_EDITING
#if HAS_DUAL_MIXING && !CHANNEL_MIX_EDITING
// Adjust 2-channel mix from the encoder
if (ui.encoderPosition != 0) {
@ -194,7 +192,7 @@ void lcd_mixer_mix_edit() {
#endif
}
#if DUAL_MIXING_EXTRUDER
#if HAS_DUAL_MIXING
//
// Toggle Dual-Mix
@ -240,12 +238,12 @@ void menu_mixer() {
v_index = mixer.get_current_vtool();
EDIT_ITEM(uint8, MSG_ACTIVE_VTOOL, &v_index, 0, MIXING_VIRTUAL_TOOLS - 1, _lcd_mixer_select_vtool
#if DUAL_MIXING_EXTRUDER
#if HAS_DUAL_MIXING
, true
#endif
);
#if DUAL_MIXING_EXTRUDER
#if HAS_DUAL_MIXING
{
char tmp[10];
SUBMENU(MSG_MIX, lcd_mixer_mix_edit);

View File

@ -86,28 +86,16 @@ static void _lcd_move_xyz(PGM_P const name, const AxisEnum axis) {
#if HAS_SOFTWARE_ENDSTOPS
if (soft_endstops_enabled) switch (axis) {
case X_AXIS:
#if ENABLED(MIN_SOFTWARE_ENDSTOP_X)
min = soft_endstop.min.x;
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_X)
max = soft_endstop.max.x;
#endif
TERN_(MIN_SOFTWARE_ENDSTOP_X, min = soft_endstop.min.x);
TERN_(MAX_SOFTWARE_ENDSTOP_X, max = soft_endstop.max.x);
break;
case Y_AXIS:
#if ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
min = soft_endstop.min.y;
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
max = soft_endstop.max.y;
#endif
TERN_(MIN_SOFTWARE_ENDSTOP_Y, min = soft_endstop.min.y);
TERN_(MAX_SOFTWARE_ENDSTOP_Y, max = soft_endstop.max.y);
break;
case Z_AXIS:
#if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
min = soft_endstop.min.z;
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
max = soft_endstop.max.z;
#endif
TERN_(MIN_SOFTWARE_ENDSTOP_Z, min = soft_endstop.min.z);
TERN_(MAX_SOFTWARE_ENDSTOP_Z, max = soft_endstop.max.z);
default: break;
}
#endif // HAS_SOFTWARE_ENDSTOPS
@ -230,9 +218,7 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
case Y_AXIS: STATIC_ITEM(MSG_MOVE_Y, SS_CENTER|SS_INVERT); break;
case Z_AXIS: STATIC_ITEM(MSG_MOVE_Z, SS_CENTER|SS_INVERT); break;
default:
#if ENABLED(MANUAL_E_MOVES_RELATIVE)
manual_move_e_origin = current_position.e;
#endif
TERN_(MANUAL_E_MOVES_RELATIVE, manual_move_e_origin = current_position.e);
STATIC_ITEM(MSG_MOVE_E, SS_CENTER|SS_INVERT);
break;
}
@ -275,20 +261,12 @@ void menu_move() {
EDIT_ITEM(bool, MSG_LCD_SOFT_ENDSTOPS, &soft_endstops_enabled);
#endif
if (
if (true
#if IS_KINEMATIC || ENABLED(NO_MOTION_BEFORE_HOMING)
all_axes_homed()
#else
true
&& all_axes_homed()
#endif
) {
if (
#if ENABLED(DELTA)
current_position.z <= delta_clip_start_height
#else
true
#endif
) {
if (TERN1(DELTA, current_position.z <= delta_clip_start_height)) {
SUBMENU(MSG_MOVE_X, []{ _menu_move_distance(X_AXIS, lcd_move_x); });
SUBMENU(MSG_MOVE_Y, []{ _menu_move_distance(Y_AXIS, lcd_move_y); });
}

View File

@ -113,9 +113,7 @@ void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb
#endif
LOOP_S_L_N(n, 1, HOTENDS) PREHEAT_ITEMS(1,n);
ACTION_ITEM(MSG_PREHEAT_1_ALL, []() {
#if HAS_HEATED_BED
_preheat_bed(0);
#endif
TERN_(HAS_HEATED_BED, _preheat_bed(0));
HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], e);
});
#endif // HAS_MULTI_HOTEND
@ -141,9 +139,7 @@ void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb
#endif
LOOP_S_L_N(n, 1, HOTENDS) PREHEAT_ITEMS(2,n);
ACTION_ITEM(MSG_PREHEAT_2_ALL, []() {
#if HAS_HEATED_BED
_preheat_bed(1);
#endif
TERN_(HAS_HEATED_BED, _preheat_bed(1));
HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], e);
});
#endif // HAS_MULTI_HOTEND
@ -284,9 +280,7 @@ void menu_temperature() {
//
bool has_heat = false;
HOTEND_LOOP() if (thermalManager.temp_hotend[HOTEND_INDEX].target) { has_heat = true; break; }
#if HAS_HEATED_BED
if (thermalManager.temp_bed.target) has_heat = true;
#endif
if (TERN0(HAS_HEATED_BED, thermalManager.temp_bed.target)) has_heat = true;
if (has_heat) ACTION_ITEM(MSG_COOLDOWN, lcd_cooldown);
#endif // HAS_TEMP_HOTEND

View File

@ -67,18 +67,10 @@
const float spm = planner.steps_to_mm[axis];
MenuEditItemBase::draw_edit_screen(msg, BABYSTEP_TO_STR(spm * babystep.accum));
#if ENABLED(BABYSTEP_DISPLAY_TOTAL)
const bool in_view = (true
#if HAS_GRAPHICAL_LCD
&& PAGE_CONTAINS(LCD_PIXEL_HEIGHT - MENU_FONT_HEIGHT, LCD_PIXEL_HEIGHT - 1)
#endif
);
const bool in_view = TERN1(HAS_GRAPHICAL_LCD, PAGE_CONTAINS(LCD_PIXEL_HEIGHT - MENU_FONT_HEIGHT, LCD_PIXEL_HEIGHT - 1));
if (in_view) {
#if HAS_GRAPHICAL_LCD
ui.set_font(FONT_MENU);
lcd_moveto(0, LCD_PIXEL_HEIGHT - MENU_FONT_DESCENT);
#else
lcd_moveto(0, LCD_HEIGHT - 1);
#endif
TERN_(HAS_GRAPHICAL_LCD, ui.set_font(FONT_MENU));
lcd_moveto(0, TERN(HAS_GRAPHICAL_LCD, LCD_PIXEL_HEIGHT - MENU_FONT_DESCENT, LCD_HEIGHT - 1));
lcd_put_u8str_P(GET_TEXT(MSG_BABYSTEP_TOTAL));
lcd_put_wchar(':');
lcd_put_u8str(BABYSTEP_TO_STR(spm * babystep.axis_total[BS_TOTAL_IND(axis)]));

View File

@ -68,9 +68,7 @@ static void _lcd_mesh_fine_tune(PGM_P const msg) {
if (ui.should_draw()) {
MenuEditItemBase::draw_edit_screen(msg, ftostr43sign(mesh_edit_value));
#if ENABLED(MESH_EDIT_GFX_OVERLAY)
_lcd_zoffset_overlay_gfx(mesh_edit_value);
#endif
TERN_(MESH_EDIT_GFX_OVERLAY, _lcd_zoffset_overlay_gfx(mesh_edit_value));
}
}

View File

@ -348,9 +348,7 @@ void MarlinUI::init() {
update_buttons();
#if HAS_ENCODER_ACTION
encoderDiff = 0;
#endif
TERN_(HAS_ENCODER_ACTION, encoderDiff = 0);
}
bool MarlinUI::get_blink() {
@ -487,9 +485,7 @@ bool MarlinUI::get_blink() {
void MarlinUI::status_screen() {
#if HAS_LCD_MENU
ENCODER_RATE_MULTIPLY(false);
#endif
TERN_(HAS_LCD_MENU, ENCODER_RATE_MULTIPLY(false));
#if ENABLED(LCD_PROGRESS_BAR)
@ -590,9 +586,7 @@ void MarlinUI::status_screen() {
void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
init();
status_printf_P(1, PSTR(S_FMT ": " S_FMT), lcd_error, lcd_component);
#if HAS_LCD_MENU
return_to_status();
#endif
TERN_(HAS_LCD_MENU, return_to_status());
// RED ALERT. RED ALERT.
#ifdef LED_BACKLIGHT_TIMEOUT
@ -608,9 +602,7 @@ void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
#if HAS_LCD_MENU
refresh();
#endif
TERN_(HAS_LCD_MENU, refresh());
#if HAS_ENCODER_ACTION
if (clear_buttons) buttons = 0;
@ -777,16 +769,12 @@ void MarlinUI::update() {
if (ELAPSED(ms, next_button_update_ms)) {
encoderDiff = (ENCODER_STEPS_PER_MENU_ITEM) * (ENCODER_PULSES_PER_STEP) * encoderDirection;
if (touch_buttons & EN_A) encoderDiff *= -1;
#if ENABLED(AUTO_BED_LEVELING_UBL)
if (external_control) ubl.encoder_diff = encoderDiff;
#endif
TERN_(AUTO_BED_LEVELING_UBL, if (external_control) ubl.encoder_diff = encoderDiff);
next_button_update_ms = ms + repeat_delay; // Assume the repeat delay
if (!wait_for_unclick) {
next_button_update_ms += 250; // Longer delay on first press
wait_for_unclick = true; // Avoid Back/Select click while repeating
#if HAS_BUZZER
buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ);
#endif
TERN_(HAS_BUZZER, buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ));
}
}
}
@ -813,11 +801,7 @@ void MarlinUI::update() {
#endif // HAS_LCD_MENU
if (ELAPSED(ms, next_lcd_update_ms)
#if HAS_GRAPHICAL_LCD
|| drawing_screen
#endif
) {
if (ELAPSED(ms, next_lcd_update_ms) || TERN0(HAS_GRAPHICAL_LCD, drawing_screen)) {
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL;
@ -825,25 +809,18 @@ void MarlinUI::update() {
if (on_status_screen()) next_lcd_update_ms += (LCD_UPDATE_INTERVAL) * 2;
#if HAS_ENCODER_ACTION
touch_buttons = touch.read_buttons();
#endif
TERN_(HAS_ENCODER_ACTION, touch_buttons = touch.read_buttons());
#endif
#if ENABLED(LCD_HAS_STATUS_INDICATORS)
update_indicators();
#endif
TERN_(LCD_HAS_STATUS_INDICATORS, update_indicators());
#if HAS_ENCODER_ACTION
#if HAS_SLOW_BUTTONS
slow_buttons = read_slow_buttons(); // Buttons that take too long to read in interrupt context
#endif
TERN_(HAS_SLOW_BUTTONS, slow_buttons = read_slow_buttons()); // Buttons that take too long to read in interrupt context
#if ENABLED(REPRAPWORLD_KEYPAD)
if (handle_keypad()) RESET_STATUS_TIMEOUT();
#endif
if (TERN0(REPRAPWORLD_KEYPAD, handle_keypad()))
RESET_STATUS_TIMEOUT();
const float abs_diff = ABS(encoderDiff);
const bool encoderPastThreshold = (abs_diff >= (ENCODER_PULSES_PER_STEP));
@ -943,9 +920,7 @@ void MarlinUI::update() {
break;
} // switch
#if HAS_ADC_BUTTONS
keypad_buttons = 0;
#endif
TERN_(HAS_ADC_BUTTONS, keypad_buttons = 0);
#if HAS_GRAPHICAL_LCD
@ -984,9 +959,7 @@ void MarlinUI::update() {
#endif
#if HAS_LCD_MENU
lcd_clicked = false;
#endif
TERN_(HAS_LCD_MENU, lcd_clicked = false);
// Keeping track of the longest time for an individual LCD update.
// Used to do screen throttling when the planner starts to fill up.
@ -1229,9 +1202,7 @@ void MarlinUI::update() {
case encrot3: ENCODER_SPIN(encrot2, encrot0); break;
}
if (external_control) {
#if ENABLED(AUTO_BED_LEVELING_UBL)
ubl.encoder_diff = encoderDiff; // Make encoder rotation available to UBL G29 mesh editing.
#endif
TERN_(AUTO_BED_LEVELING_UBL, ubl.encoder_diff = encoderDiff); // Make encoder rotation available to UBL G29 mesh editing.
encoderDiff = 0; // Hide the encoder event from the current screen handler.
}
lastEncoderBits = enc;
@ -1294,9 +1265,7 @@ void MarlinUI::update() {
status_scroll_offset = 0;
#endif
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onStatusChanged(status_message);
#endif
TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(status_message));
}
bool MarlinUI::has_status() { return (status_message[0] != '\0'); }
@ -1304,9 +1273,7 @@ void MarlinUI::update() {
void MarlinUI::set_status(const char * const message, const bool persist) {
if (alert_level) return;
#if ENABLED(HOST_PROMPT_SUPPORT)
host_action_notify(message);
#endif
TERN_(HOST_PROMPT_SUPPORT, host_action_notify(message));
// Here we have a problem. The message is encoded in UTF8, so
// arbitrarily cutting it will be a problem. We MUST be sure
@ -1347,9 +1314,7 @@ void MarlinUI::update() {
if (level < alert_level) return;
alert_level = level;
#if ENABLED(HOST_PROMPT_SUPPORT)
host_action_notify(message);
#endif
TERN_(HOST_PROMPT_SUPPORT, host_action_notify(message));
// Since the message is encoded in UTF8 it must
// only be cut on a character boundary.
@ -1374,9 +1339,7 @@ void MarlinUI::update() {
void MarlinUI::set_alert_status_P(PGM_P const message) {
set_status_P(message, 1);
#if HAS_LCD_MENU
return_to_status();
#endif
TERN_(HAS_LCD_MENU, return_to_status());
}
PGM_P print_paused = GET_TEXT(MSG_PRINT_PAUSED);
@ -1436,14 +1399,10 @@ void MarlinUI::update() {
#ifdef ACTION_ON_CANCEL
host_action_cancel();
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_open(PROMPT_INFO, PSTR("UI Aborted"), DISMISS_STR);
#endif
TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, PSTR("UI Aborted"), DISMISS_STR));
print_job_timer.stop();
set_status_P(GET_TEXT(MSG_PRINT_ABORTED));
#if HAS_LCD_MENU
return_to_status();
#endif
TERN_(HAS_LCD_MENU, return_to_status());
}
#if ANY(PARK_HEAD_ON_PAUSE, SDSUPPORT)
@ -1456,16 +1415,12 @@ void MarlinUI::update() {
defer_status_screen();
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_open(PROMPT_PAUSE_RESUME, PSTR("UI Pause"), PSTR("Resume"));
#endif
TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_PAUSE_RESUME, PSTR("UI Pause"), PSTR("Resume")));
set_status_P(print_paused);
#if ENABLED(PARK_HEAD_ON_PAUSE)
#if HAS_SPI_LCD
lcd_pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); // Show message immediately to let user know about pause in progress
#endif
TERN_(HAS_SPI_LCD, lcd_pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT)); // Show message immediately to let user know about pause in progress
queue.inject_P(PSTR("M25 P\nM24"));
#elif ENABLED(SDSUPPORT)
queue.inject_P(PSTR("M25"));
@ -1476,9 +1431,7 @@ void MarlinUI::update() {
void MarlinUI::resume_print() {
reset_status();
#if ENABLED(PARK_HEAD_ON_PAUSE)
wait_for_heatup = wait_for_user = false;
#endif
TERN_(PARK_HEAD_ON_PAUSE, wait_for_heatup = wait_for_user = false);
if (IS_SD_PAUSED()) queue.inject_P(M24_STR);
#ifdef ACTION_ON_RESUME
host_action_resume();
@ -1543,30 +1496,22 @@ void MarlinUI::update() {
void MarlinUI::media_changed(const uint8_t old_status, const uint8_t status) {
if (old_status == status) {
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onMediaError(); // Failed to mount/unmount
#endif
TERN_(EXTENSIBLE_UI, ExtUI::onMediaError()); // Failed to mount/unmount
return;
}
if (status) {
if (old_status < 2) {
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onMediaInserted(); // ExtUI response
#endif
TERN_(EXTENSIBLE_UI, ExtUI::onMediaInserted()); // ExtUI response
set_status_P(GET_TEXT(MSG_MEDIA_INSERTED));
}
}
else {
if (old_status < 2) {
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onMediaRemoved(); // ExtUI response
#endif
TERN_(EXTENSIBLE_UI, ExtUI::onMediaRemoved()); // ExtUI response
#if PIN_EXISTS(SD_DETECT)
set_status_P(GET_TEXT(MSG_MEDIA_REMOVED));
#if HAS_LCD_MENU
return_to_status();
#endif
TERN_(HAS_LCD_MENU, return_to_status());
#endif
}
}
@ -1581,9 +1526,7 @@ void MarlinUI::update() {
const millis_t ms = millis();
#endif
#if HAS_SPI_LCD
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL; // Delay LCD update for SD activity
#endif
TERN_(HAS_SPI_LCD, next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL); // Delay LCD update for SD activity
#ifdef LED_BACKLIGHT_TIMEOUT
leds.reset_timeout(ms);

View File

@ -41,7 +41,9 @@
#endif
// I2C buttons must be read in the main thread
#define HAS_SLOW_BUTTONS EITHER(LCD_I2C_VIKI, LCD_I2C_PANELOLU2)
#if EITHER(LCD_I2C_VIKI, LCD_I2C_PANELOLU2)
#define HAS_SLOW_BUTTONS 1
#endif
#if HAS_SPI_LCD
@ -64,11 +66,7 @@
uint8_t get_ADC_keyValue();
#endif
#if ENABLED(TOUCH_BUTTONS)
#define LCD_UPDATE_INTERVAL 50
#else
#define LCD_UPDATE_INTERVAL 100
#endif
#define LCD_UPDATE_INTERVAL TERN(TOUCH_BUTTONS, 50, 100)
#if HAS_LCD_MENU
@ -207,12 +205,12 @@
#define BL_DW 4 // Down
#define BL_RI 3 // Right
#define BL_ST 2 // Red Button
#define B_LE (_BV(BL_LE))
#define B_UP (_BV(BL_UP))
#define B_MI (_BV(BL_MI))
#define B_DW (_BV(BL_DW))
#define B_RI (_BV(BL_RI))
#define B_ST (_BV(BL_ST))
#define B_LE _BV(BL_LE)
#define B_UP _BV(BL_UP)
#define B_MI _BV(BL_MI)
#define B_DW _BV(BL_DW)
#define B_RI _BV(BL_RI)
#define B_ST _BV(BL_ST)
#ifndef BUTTON_CLICK
#define BUTTON_CLICK() (buttons & (B_MI|B_ST))
@ -258,9 +256,7 @@ class MarlinUI {
public:
MarlinUI() {
#if HAS_LCD_MENU
currentScreen = status_screen;
#endif
TERN_(HAS_LCD_MENU, currentScreen = status_screen);
}
#if HAS_BUZZER
@ -530,9 +526,7 @@ public:
#if ENABLED(G26_MESH_VALIDATION)
FORCE_INLINE static void chirp() {
#if HAS_BUZZER
buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ);
#endif
TERN_(HAS_BUZZER, buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ));
}
#endif
@ -605,15 +599,11 @@ public:
}
FORCE_INLINE static void encoder_direction_menus() {
#if ENABLED(REVERSE_MENU_DIRECTION)
encoderDirection = -(ENCODERBASE);
#endif
TERN_(REVERSE_MENU_DIRECTION, encoderDirection = -(ENCODERBASE));
}
FORCE_INLINE static void encoder_direction_select() {
#if ENABLED(REVERSE_SELECT_DIRECTION)
encoderDirection = -(ENCODERBASE);
#endif
TERN_(REVERSE_SELECT_DIRECTION, encoderDirection = -(ENCODERBASE));
}
#else