Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes and enhancements to FTDI Eve Touch UI #22189

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/*********************************
* cocoa_press/leveling_menu.cpp *
*********************************/

/****************************************************************************
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* To view a copy of the GNU General Public License, go to the following *
* location: <https://www.gnu.org/licenses/>. *
****************************************************************************/

#include "../config.h"
#include "../screens.h"

#ifdef COCOA_LEVELING_MENU

#if BOTH(HAS_BED_PROBE,BLTOUCH)
#include "../../../../feature/bltouch.h"
#endif

using namespace FTDI;
using namespace ExtUI;
using namespace Theme;

#define GRID_ROWS 5
#define GRID_COLS 3
#define BED_MESH_TITLE_POS BTN_POS(1,1), BTN_SIZE(3,1)
#define PROBE_BED_POS BTN_POS(1,2), BTN_SIZE(1,1)
#define SHOW_MESH_POS BTN_POS(2,2), BTN_SIZE(1,1)
#define EDIT_MESH_POS BTN_POS(3,2), BTN_SIZE(1,1)
#define BLTOUCH_TITLE_POS BTN_POS(1,3), BTN_SIZE(3,1)
#define BLTOUCH_RESET_POS BTN_POS(1,4), BTN_SIZE(1,1)
#define BLTOUCH_TEST_POS BTN_POS(2,4), BTN_SIZE(1,1)
#define BACK_POS BTN_POS(1,5), BTN_SIZE(3,1)

void LevelingMenu::onRedraw(draw_mode_t what) {
if (what & BACKGROUND) {
CommandProcessor cmd;
cmd.cmd(CLEAR_COLOR_RGB(Theme::bg_color))
.cmd(CLEAR(true,true,true))
.tag(0);
}

if (what & FOREGROUND) {
CommandProcessor cmd;
cmd.font(font_large)
.cmd(COLOR_RGB(bg_text_enabled))
.text(BED_MESH_TITLE_POS, GET_TEXT_F(MSG_BED_LEVELING))
.text(BLTOUCH_TITLE_POS, GET_TEXT_F(MSG_BLTOUCH))
.font(font_medium).colors(normal_btn)
.tag(2).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
.enabled(ENABLED(HAS_MESH))
.tag(3).button(SHOW_MESH_POS, GET_TEXT_F(MSG_SHOW_MESH))
.enabled(ENABLED(HAS_MESH))
.tag(4).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
#undef GRID_COLS
#define GRID_COLS 2
.tag(5).button(BLTOUCH_RESET_POS, GET_TEXT_F(MSG_BLTOUCH_RESET))
.tag(6).button(BLTOUCH_TEST_POS, GET_TEXT_F(MSG_BLTOUCH_SELFTEST))
#undef GRID_COLS
#define GRID_COLS 3
.colors(action_btn)
.tag(1).button(BACK_POS, GET_TEXT_F(MSG_BACK));
}
}

bool LevelingMenu::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1: GOTO_PREVIOUS(); break;
case 2: BedMeshViewScreen::doProbe(); break;
case 3: BedMeshViewScreen::show(); break;
case 4: BedMeshEditScreen::show(); break;
case 5: injectCommands_P(PSTR("M280 P0 S60")); break;
case 6: SpinnerDialogBox::enqueueAndWait_P(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break;
default: return false;
}
return true;
}

#endif // COCOA_LEVELING_MENU
32 changes: 32 additions & 0 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*******************************
* cocoa_press/leveling_menu.h *
******************************/

/****************************************************************************
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* To view a copy of the GNU General Public License, go to the following *
* location: <https://www.gnu.org/licenses/>. *
****************************************************************************/

#pragma once

#define COCOA_LEVELING_MENU
#define COCOA_LEVELING_MENU_CLASS LevelingMenu

class LevelingMenu : public BaseScreen, public CachedScreen<LEVELING_SCREEN_CACHE> {
public:
static void onRedraw(draw_mode_t);
static bool onTouchEnd(uint8_t tag);
};
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ bool MainMenu::onTouchEnd(uint8_t tag) {
case 8: GOTO_SCREEN(AdvancedSettingsMenu); break;
case 9: injectCommands_P(PSTR("M84")); break;
#if HAS_LEVELING
case 10: GOTO_SCREEN(LevelingMenu); break;
case 10: GOTO_SCREEN(LevelingMenu); break;
#endif
case 11: GOTO_SCREEN(AboutScreen); break;
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,4 +132,3 @@ bool LevelingMenu::onTouchEnd(uint8_t tag) {
}

#endif // FTDI_LEVELING_MENU

33 changes: 29 additions & 4 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,28 +34,53 @@
* Formats a temperature string (e.g. "100°C")
*/
void format_temp(char *str, const_celsius_float_t t1) {
sprintf_P(str, PSTR("%3d" S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C));
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
char num1[7];
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
sprintf_P(str, PSTR("%s" S_FMT), num1, GET_TEXT(MSG_UNITS_C));
#else
sprintf_P(str, PSTR("%3d" S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C));
#endif
}

/**
* Formats a temperature string for an idle heater (e.g. "100 °C / idle")
*/
void format_temp_and_idle(char *str, const_celsius_float_t t1) {
sprintf_P(str, PSTR("%3d" S_FMT " / " S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
char num1[7];
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
sprintf_P(str, PSTR("%s" S_FMT " / " S_FMT), num1, GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
#else
sprintf_P(str, PSTR("%3d" S_FMT " / " S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
#endif
}

/**
* Formats a temperature string for an active heater (e.g. "100 / 200°C")
*/
void format_temp_and_temp(char *str, const_celsius_float_t t1, const_celsius_float_t t2) {
sprintf_P(str, PSTR("%3d / %3d" S_FMT), ROUND(t1), ROUND(t2), GET_TEXT(MSG_UNITS_C));
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
char num1[7], num2[7];
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
dtostrf(t2, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num2);
sprintf_P(str, PSTR("%s / %s" S_FMT), num1, num2, GET_TEXT(MSG_UNITS_C));
#else
sprintf_P(str, PSTR("%3d / %3d" S_FMT), ROUND(t1), ROUND(t2), GET_TEXT(MSG_UNITS_C));
#endif
}

/**
* Formats a temperature string for a material (e.g. "100°C (PLA)")
*/
void format_temp_and_material(char *str, const_celsius_float_t t1, const char *material) {
sprintf_P(str, PSTR("%3d" S_FMT " (" S_FMT ")"), ROUND(t1), GET_TEXT(MSG_UNITS_C), material);
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
char num1[7];
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
sprintf_P(str, PSTR("%s" S_FMT " (" S_FMT ")"), num1, GET_TEXT(MSG_UNITS_C), material);
#else
sprintf_P(str, PSTR("%3d" S_FMT " (" S_FMT ")"), ROUND(t1), GET_TEXT(MSG_UNITS_C), material);
#endif
}

/**
Expand Down
26 changes: 18 additions & 8 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/z_offset_screen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,14 @@ constexpr static ZOffsetScreenData &mydata = screen_data.ZOffsetScreen;

void ZOffsetScreen::onEntry() {
mydata.z = SHEET_THICKNESS;
mydata.softEndstopState = getSoftEndstopState();
BaseNumericAdjustmentScreen::onEntry();
if (wizardRunning())
setSoftEndstopState(false);
}

void ZOffsetScreen::onExit() {
setSoftEndstopState(mydata.softEndstopState);
}

void ZOffsetScreen::onRedraw(draw_mode_t what) {
Expand All @@ -50,17 +57,13 @@ void ZOffsetScreen::onRedraw(draw_mode_t what) {
}

void ZOffsetScreen::move(float mm, int16_t steps) {
// We can't store state after the call to the AlertBox, so
// check whether the current position equal mydata.z in order
// to know whether the user started the wizard.
if (getAxisPosition_mm(Z) == mydata.z) {
// In the wizard
if (wizardRunning()) {
mydata.z += mm;
setAxisPosition_mm(mydata.z, Z);
}
else {
// Otherwise doing a manual adjustment, possibly during a print.
babystepAxis_steps(steps, Z);
TERN(BABYSTEPPING, babystepAxis_steps(steps, Z), UNUSED(steps));
}
}

Expand All @@ -84,9 +87,16 @@ void ZOffsetScreen::runWizard() {
AlertDialogBox::show(PSTR("After the printer finishes homing, adjust the Z Offset so that a sheet of paper can pass between the nozzle and bed with slight resistance."));
}

bool ZOffsetScreen::wizardRunning() {
// We can't store state after the call to the AlertBox, so
// check whether the current Z position equals mydata.z in order
// to know whether the user started the wizard.
return getAxisPosition_mm(Z) == mydata.z;
}

bool ZOffsetScreen::onTouchHeld(uint8_t tag) {
const int16_t steps = mmToWholeSteps(getIncrement(), Z);
const float increment = mmFromWholeSteps(steps, Z);
const int16_t steps = TERN(BABYSTEPPING, mmToWholeSteps(getIncrement(), Z), 0);
const float increment = TERN(BABYSTEPPING, mmFromWholeSteps(steps, Z), getIncrement());
switch (tag) {
case 2: runWizard(); break;
case 4: UI_DECREMENT(ZOffset_mm); move(-increment, -steps); break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,17 @@

struct ZOffsetScreenData : public BaseNumericAdjustmentScreenData {
float z;
bool softEndstopState;
};

class ZOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<ZOFFSET_SCREEN_CACHE> {
private:
static void move(float mm, int16_t steps);
static void runWizard();
static bool wizardRunning();
public:
static void onEntry();
static void onExit();
static void onRedraw(draw_mode_t);
static bool onTouchHeld(uint8_t tag);
};
1 change: 1 addition & 0 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ SCREEN_TABLE {
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_MENU)
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_SCREEN)
DECL_SCREEN_IF_INCLUDED(COCOA_LOAD_CHOCOLATE_SCREEN)
DECL_SCREEN_IF_INCLUDED(COCOA_LEVELING_MENU)
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_XYZ_SCREEN)
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_E_SCREEN)
};
Expand Down
5 changes: 4 additions & 1 deletion Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ enum {
#include "cocoa_press/load_chocolate.h"
#include "cocoa_press/move_xyz_screen.h"
#include "cocoa_press/move_e_screen.h"
#include "cocoa_press/leveling_menu.h"

#else
#include "generic/status_screen.h"
Expand Down Expand Up @@ -206,7 +207,9 @@ enum {
#endif

#if HAS_LEVELING
#include "generic/leveling_menu.h"
#if DISABLED(TOUCH_UI_COCOA_PRESS)
#include "generic/leveling_menu.h"
#endif
#if HAS_BED_PROBE
#include "generic/z_offset_screen.h"
#endif
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/colors.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ namespace Theme {

constexpr uint32_t bed_mesh_lines_rgb = accent_color_6;
constexpr uint32_t bed_mesh_shadow_rgb = 0x444444;
#define BED_MESH_POINTS_GRAY
#else
constexpr uint32_t theme_darkest = gray_color_1;
constexpr uint32_t theme_dark = gray_color_2;
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/lcd/extui/ui_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1033,10 +1033,10 @@ namespace ExtUI {
}

bool isPrintingFromMediaPaused() {
return TERN0(SDSUPPORT, isPrintingFromMedia() && printingIsPaused());
return TERN0(SDSUPPORT, IS_SD_PAUSED());
}

bool isPrintingFromMedia() { return IS_SD_PRINTING(); }
bool isPrintingFromMedia() { return TERN0(SDSUPPORT, IS_SD_PRINTING() || IS_SD_PAUSED()); }

bool isPrinting() {
return commandsInQueue() || isPrintingFromMedia() || printJobOngoing() || printingIsPaused();
Expand Down