Skip to content

Commit

Permalink
🎨 Fix and improve FTDI Eve Touch UI (MarlinFirmware#22223)
Browse files Browse the repository at this point in the history
  • Loading branch information
marciot authored and ptoal committed Dec 16, 2021
1 parent 7891652 commit 6b4c8ab
Show file tree
Hide file tree
Showing 16 changed files with 543 additions and 281 deletions.
105 changes: 105 additions & 0 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/screens.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/*************
* screens.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/>. *
****************************************************************************/

/********************************* DL CACHE SLOTS ******************************/

// In order to reduce SPI traffic, we cache display lists (DL) in RAMG. This
// is done using the CLCD::DLCache class, which takes a unique ID for each
// cache location. These IDs are defined here:

enum {
STATUS_SCREEN_CACHE,
MENU_SCREEN_CACHE,
TUNE_SCREEN_CACHE,
ALERT_BOX_CACHE,
SPINNER_CACHE,
ADVANCED_SETTINGS_SCREEN_CACHE,
TEMPERATURE_SCREEN_CACHE,
STEPS_SCREEN_CACHE,
MAX_FEEDRATE_SCREEN_CACHE,
MAX_VELOCITY_SCREEN_CACHE,
MAX_ACCELERATION_SCREEN_CACHE,
DEFAULT_ACCELERATION_SCREEN_CACHE,
FLOW_PERCENT_SCREEN_CACHE,
ZOFFSET_SCREEN_CACHE,
STEPPER_CURRENT_SCREEN_CACHE,
STEPPER_BUMP_SENSITIVITY_SCREEN_CACHE,
PRINTING_SCREEN_CACHE,
FILES_SCREEN_CACHE,
INTERFACE_SETTINGS_SCREEN_CACHE,
INTERFACE_SOUNDS_SCREEN_CACHE,
LOCK_SCREEN_CACHE,
DISPLAY_TIMINGS_SCREEN_CACHE
};

// To save MCU RAM, the status message is "baked" in to the status screen
// cache, so we reserve a large chunk of memory for the DL cache

#define STATUS_SCREEN_DL_SIZE 4096
#define ALERT_BOX_DL_SIZE 3072
#define SPINNER_DL_SIZE 3072
#define FILE_SCREEN_DL_SIZE 4160
#define PRINTING_SCREEN_DL_SIZE 2048

/************************* MENU SCREEN DECLARATIONS *************************/

#include "../generic/base_screen.h"
#include "../generic/base_numeric_adjustment_screen.h"
#include "../generic/dialog_box_base_class.h"
#include "../generic/boot_screen.h"
#include "../generic/about_screen.h"
#include "../generic/kill_screen.h"
#include "../generic/alert_dialog_box.h"
#include "../generic/spinner_dialog_box.h"
#include "../generic/restore_failsafe_dialog_box.h"
#include "../generic/save_settings_dialog_box.h"
#include "../generic/confirm_start_print_dialog_box.h"
#include "../generic/confirm_abort_print_dialog_box.h"
#include "../generic/confirm_user_request_alert_box.h"
#include "../generic/touch_calibration_screen.h"
#include "../generic/move_axis_screen.h"
#include "../generic/steps_screen.h"
#include "../generic/feedrate_percent_screen.h"
#include "../generic/max_velocity_screen.h"
#include "../generic/max_acceleration_screen.h"
#include "../generic/default_acceleration_screen.h"
#include "../generic/temperature_screen.h"
#include "../generic/interface_sounds_screen.h"
#include "../generic/interface_settings_screen.h"
#include "../generic/lock_screen.h"
#include "../generic/endstop_state_screen.h"
#include "../generic/display_tuning_screen.h"
#include "../generic/media_player_screen.h"
#include "../generic/statistics_screen.h"
#include "../generic/stepper_current_screen.h"
#include "../generic/stepper_bump_sensitivity_screen.h"
#include "../generic/leveling_menu.h"
#include "../generic/z_offset_screen.h"
#include "../generic/files_screen.h"

#include "bio_status_screen.h"
#include "bio_main_menu.h"
#include "bio_tune_menu.h"
#include "bio_advanced_settings.h"
#include "bio_printing_dialog_box.h"
#include "bio_confirm_home_xyz.h"
#include "bio_confirm_home_e.h"
Original file line number Diff line number Diff line change
Expand Up @@ -84,16 +84,6 @@ void PreheatTimerScreen::draw_interaction_buttons(draw_mode_t what) {
void PreheatTimerScreen::draw_adjuster(draw_mode_t what, uint8_t tag, progmem_str label, float value, int16_t x, int16_t y, int16_t w, int16_t h) {
#define SUB_COLS 9
#define SUB_ROWS 2
#define SUB_GRID_W(W) ((W)*w/SUB_COLS)
#define SUB_GRID_H(H) ((H)*h/SUB_ROWS)
#define SUB_GRID_X(X) (SUB_GRID_W((X)-1) + x)
#define SUB_GRID_Y(Y) (SUB_GRID_H((Y)-1) + y)
#define SUB_X(X) (SUB_GRID_X(X) + MARGIN_L)
#define SUB_Y(Y) (SUB_GRID_Y(Y) + MARGIN_T)
#define SUB_W(W) (SUB_GRID_W(W) - MARGIN_L - MARGIN_R)
#define SUB_H(H) (SUB_GRID_H(H) - MARGIN_T - MARGIN_B)
#define SUB_POS(X,Y) SUB_X(X), SUB_Y(Y)
#define SUB_SIZE(W,H) SUB_W(W), SUB_H(H)

CommandProcessor cmd;
cmd.tag(0)
Expand Down
135 changes: 135 additions & 0 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/screens.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
/*************
* screens.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


/********************************* DL CACHE SLOTS ******************************/

// In order to reduce SPI traffic, we cache display lists (DL) in RAMG. This
// is done using the CLCD::DLCache class, which takes a unique ID for each
// cache location. These IDs are defined here:

enum {
STATUS_SCREEN_CACHE,
MENU_SCREEN_CACHE,
TUNE_SCREEN_CACHE,
ALERT_BOX_CACHE,
SPINNER_CACHE,
ADVANCED_SETTINGS_SCREEN_CACHE,
MOVE_AXIS_SCREEN_CACHE,
TEMPERATURE_SCREEN_CACHE,
STEPS_SCREEN_CACHE,
MAX_FEEDRATE_SCREEN_CACHE,
MAX_VELOCITY_SCREEN_CACHE,
MAX_ACCELERATION_SCREEN_CACHE,
DEFAULT_ACCELERATION_SCREEN_CACHE,
FLOW_PERCENT_SCREEN_CACHE,
LEVELING_SCREEN_CACHE,
ZOFFSET_SCREEN_CACHE,
BED_MESH_VIEW_SCREEN_CACHE,
BED_MESH_EDIT_SCREEN_CACHE,
STEPPER_CURRENT_SCREEN_CACHE,
#if HAS_JUNCTION_DEVIATION
JUNC_DEV_SCREEN_CACHE,
#else
JERK_SCREEN_CACHE,
#endif
CASE_LIGHT_SCREEN_CACHE,
FILAMENT_MENU_CACHE,
LINEAR_ADVANCE_SCREEN_CACHE,
PREHEAT_MENU_CACHE,
PREHEAT_TIMER_SCREEN_CACHE,
LOAD_CHOCOLATE_SCREEN_CACHE,
MOVE_XYZ_SCREEN_CACHE,
MOVE_E_SCREEN_CACHE,
FILES_SCREEN_CACHE,
INTERFACE_SETTINGS_SCREEN_CACHE,
INTERFACE_SOUNDS_SCREEN_CACHE,
LOCK_SCREEN_CACHE,
DISPLAY_TIMINGS_SCREEN_CACHE
};

// To save MCU RAM, the status message is "baked" in to the status screen
// cache, so we reserve a large chunk of memory for the DL cache

#define STATUS_SCREEN_DL_SIZE 4096
#define ALERT_BOX_DL_SIZE 3072
#define SPINNER_DL_SIZE 3072
#define FILE_SCREEN_DL_SIZE 4160
#define PRINTING_SCREEN_DL_SIZE 2048

/************************* MENU SCREEN DECLARATIONS *************************/

#include "../generic/base_screen.h"
#include "../generic/base_numeric_adjustment_screen.h"
#include "../generic/dialog_box_base_class.h"
#include "../generic/boot_screen.h"
#include "../generic/about_screen.h"
#include "../generic/kill_screen.h"
#include "../generic/alert_dialog_box.h"
#include "../generic/spinner_dialog_box.h"
#include "../generic/restore_failsafe_dialog_box.h"
#include "../generic/save_settings_dialog_box.h"
#include "../generic/confirm_start_print_dialog_box.h"
#include "../generic/confirm_abort_print_dialog_box.h"
#include "../generic/confirm_user_request_alert_box.h"
#include "../generic/touch_calibration_screen.h"
#include "../generic/move_axis_screen.h"
#include "../generic/steps_screen.h"
#include "../generic/feedrate_percent_screen.h"
#include "../generic/max_velocity_screen.h"
#include "../generic/max_acceleration_screen.h"
#include "../generic/default_acceleration_screen.h"
#include "../generic/temperature_screen.h"
#include "../generic/interface_sounds_screen.h"
#include "../generic/interface_settings_screen.h"
#include "../generic/lock_screen.h"
#include "../generic/endstop_state_screen.h"
#include "../generic/display_tuning_screen.h"
#include "../generic/statistics_screen.h"
#include "../generic/stepper_current_screen.h"
#include "../generic/leveling_menu.h"
#include "../generic/z_offset_screen.h"
#include "../generic/bed_mesh_base.h"
#include "../generic/bed_mesh_view_screen.h"
#include "../generic/bed_mesh_edit_screen.h"
#include "../generic/case_light_screen.h"
#include "../generic/linear_advance_screen.h"
#include "../generic/files_screen.h"
#include "../generic/move_axis_screen.h"
#include "../generic/flow_percent_screen.h"
#include "../generic/tune_menu.h"
#if HAS_JUNCTION_DEVIATION
#include "../generic/junction_deviation_screen.h"
#else
#include "../generic/jerk_screen.h"
#endif

#include "status_screen.h"
#include "main_menu.h"
#include "advanced_settings_menu.h"
#include "preheat_menu.h"
#include "preheat_screen.h"
#include "load_chocolate.h"
#include "move_xyz_screen.h"
#include "move_e_screen.h"
27 changes: 13 additions & 14 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,24 +45,23 @@ namespace ExtUI {
}

void onMediaInserted() {
if (AT_SCREEN(StatusScreen))
StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_INSERTED));
sound.play(media_inserted, PLAY_ASYNCHRONOUS);
#if ENABLED(SDSUPPORT)
sound.play(media_inserted, PLAY_ASYNCHRONOUS);
StatusScreen::onMediaInserted();
#endif
}

void onMediaRemoved() {
if (isPrintingFromMedia()) {
stopPrint();
InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_FAILED);
}
else
sound.play(media_removed, PLAY_ASYNCHRONOUS);

if (AT_SCREEN(StatusScreen) || isPrintingFromMedia())
StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_REMOVED));

#if ENABLED(SDSUPPORT)
if (AT_SCREEN(FilesScreen)) GOTO_SCREEN(StatusScreen);
if (isPrintingFromMedia()) {
stopPrint();
InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_FAILED);
}
else
sound.play(media_removed, PLAY_ASYNCHRONOUS);

StatusScreen::onMediaRemoved();
FilesScreen::onMediaRemoved();
#endif
}

Expand Down
14 changes: 8 additions & 6 deletions Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,20 +91,22 @@ void AboutScreen::onRedraw(draw_mode_t) {
draw_text_box(cmd, FW_INFO_POS, about_str, OPT_CENTER, font_medium);
draw_text_box(cmd, INSET_POS(LICENSE_POS), GET_TEXT_F(MSG_LICENSE), OPT_CENTER, font_tiny);

cmd.font(font_medium)
.colors(normal_btn)
.tag(2).button(STATS_POS, GET_TEXT_F(MSG_INFO_STATS_MENU))
.colors(action_btn)
cmd.font(font_medium);
#if ENABLED(PRINTCOUNTER) && defined(FTDI_STATISTICS_SCREEN)
cmd.colors(normal_btn)
.tag(2).button(STATS_POS, GET_TEXT_F(MSG_INFO_STATS_MENU));
#endif
cmd.colors(action_btn)
.tag(1).button(BACK_POS, GET_TEXT_F(MSG_BACK));
}

bool AboutScreen::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1: GOTO_PREVIOUS(); break;
#if ENABLED(PRINTCOUNTER)
#if ENABLED(PRINTCOUNTER) && defined(FTDI_STATISTICS_SCREEN)
case 2: GOTO_SCREEN(StatisticsScreen); break;
#endif
#if ENABLED(TOUCH_UI_DEVELOPER_MENU)
#if ENABLED(TOUCH_UI_DEVELOPER_MENU) && defined(FTDI_DEVELOPER_MENU)
case 3: GOTO_SCREEN(DeveloperMenu); break;
#endif
default: return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ constexpr static ChangeFilamentScreenData &mydata = screen_data.ChangeFilamentSc

/****************** COLOR SCALE ***********************/

uint32_t getWarmColor(uint16_t temp, uint16_t cool, uint16_t low, uint16_t med, uint16_t high) {
uint32_t ChangeFilamentScreen::getWarmColor(uint16_t temp, uint16_t cool, uint16_t low, uint16_t med, uint16_t high) {
rgb_t R0, R1, mix;

float t;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ class ChangeFilamentScreen : public BaseScreen, public CachedScreen<CHANGE_FILAM
static uint8_t getSoftenTemp();
static ExtUI::extruder_t getExtruder();
static void drawTempGradient(uint16_t x, uint16_t y, uint16_t w, uint16_t h);
static uint32_t getTempColor(uint32_t temp);
static void doPurge();
public:
static uint32_t getWarmColor(uint16_t temp, uint16_t cool, uint16_t low, uint16_t med, uint16_t high);
static void onEntry();
static void onExit();
static void onRedraw(draw_mode_t);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,4 +262,8 @@ void FilesScreen::onIdle() {
#endif
}

void FilesScreen::onMediaRemoved() {
if (AT_SCREEN(FilesScreen)) GOTO_SCREEN(StatusScreen);
}

#endif // FTDI_FILES_SCREEN
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,5 @@ class FilesScreen : public BaseScreen, public CachedScreen<FILES_SCREEN_CACHE, F
static void onRedraw(draw_mode_t);
static bool onTouchEnd(uint8_t tag);
static void onIdle();
static void onMediaRemoved();
};
Loading

0 comments on commit 6b4c8ab

Please sign in to comment.