✨ TFT 320x240 portrait (#25207)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
parent
58f64eaeba
commit
99d1b04a1f
|
@ -324,7 +324,7 @@
|
||||||
#define IS_ULTIPANEL 1
|
#define IS_ULTIPANEL 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TFT Compatibility
|
// TFT Legacy Compatibility
|
||||||
#if ANY(FSMC_GRAPHICAL_TFT, SPI_GRAPHICAL_TFT, TFT_320x240, TFT_480x320, TFT_320x240_SPI, TFT_480x320_SPI, TFT_LVGL_UI_FSMC, TFT_LVGL_UI_SPI)
|
#if ANY(FSMC_GRAPHICAL_TFT, SPI_GRAPHICAL_TFT, TFT_320x240, TFT_480x320, TFT_320x240_SPI, TFT_480x320_SPI, TFT_LVGL_UI_FSMC, TFT_LVGL_UI_SPI)
|
||||||
#define IS_LEGACY_TFT 1
|
#define IS_LEGACY_TFT 1
|
||||||
#define TFT_GENERIC
|
#define TFT_GENERIC
|
||||||
|
@ -1525,30 +1525,6 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(TFT_RES_320x240)
|
|
||||||
#define TFT_WIDTH 320
|
|
||||||
#define TFT_HEIGHT 240
|
|
||||||
#define GRAPHICAL_TFT_UPSCALE 2
|
|
||||||
#elif ENABLED(TFT_RES_480x272)
|
|
||||||
#define TFT_WIDTH 480
|
|
||||||
#define TFT_HEIGHT 272
|
|
||||||
#define GRAPHICAL_TFT_UPSCALE 2
|
|
||||||
#elif ENABLED(TFT_RES_480x320)
|
|
||||||
#define TFT_WIDTH 480
|
|
||||||
#define TFT_HEIGHT 320
|
|
||||||
#define GRAPHICAL_TFT_UPSCALE 3
|
|
||||||
#elif ENABLED(TFT_RES_1024x600)
|
|
||||||
#define TFT_WIDTH 1024
|
|
||||||
#define TFT_HEIGHT 600
|
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
|
||||||
#define GRAPHICAL_TFT_UPSCALE 6
|
|
||||||
#define TFT_PIXEL_OFFSET_X 120
|
|
||||||
#else
|
|
||||||
#define GRAPHICAL_TFT_UPSCALE 8
|
|
||||||
#define TFT_PIXEL_OFFSET_X 0
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// FSMC/SPI TFT Panels using standard HAL/tft/tft_(fsmc|spi|ltdc).h
|
// FSMC/SPI TFT Panels using standard HAL/tft/tft_(fsmc|spi|ltdc).h
|
||||||
#if ENABLED(TFT_INTERFACE_FSMC)
|
#if ENABLED(TFT_INTERFACE_FSMC)
|
||||||
#define HAS_FSMC_TFT 1
|
#define HAS_FSMC_TFT 1
|
||||||
|
@ -1573,8 +1549,62 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Set TFT_COLOR_UI_PORTRAIT flag, if needed
|
||||||
|
#if defined(TFT_ROTATION) && (HAS_SPI_TFT || HAS_FSMC_TFT || HAS_LTDC_TFT)
|
||||||
|
#define _CMP_TFT_ROTATE_90 90
|
||||||
|
#define _CMP_TFT_ROTATE_270 270
|
||||||
|
#define _CMP_TFT_ROTATE_90_MIRROR_X 90
|
||||||
|
#define _CMP_TFT_ROTATE_90_MIRROR_Y 90
|
||||||
|
#define _CMP_TFT_ROTATE_270_MIRROR_X 270
|
||||||
|
#define _CMP_TFT_ROTATE_270_MIRROR_Y 270
|
||||||
|
#define _ISROT(N) || (_CAT(_CMP_, TFT_ROTATION) == N)
|
||||||
|
#define ISROT(V...) (0 MAP(_ISROT, V))
|
||||||
|
|
||||||
|
#if ISROT(90, 270)
|
||||||
|
#define TFT_COLOR_UI_PORTRAIT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef _CMP_TFT_ROTATE_90
|
||||||
|
#undef _CMP_TFT_ROTATE_270
|
||||||
|
#undef _CMP_TFT_ROTATE_90_MIRROR_X
|
||||||
|
#undef _CMP_TFT_ROTATE_90_MIRROR_Y
|
||||||
|
#undef _CMP_TFT_ROTATE_270_MIRROR_X
|
||||||
|
#undef _CMP_TFT_ROTATE_270_MIRROR_Y
|
||||||
|
#undef _ISROT
|
||||||
|
#undef ISROT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(TFT_RES_320x240)
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
#define TFT_WIDTH 240
|
||||||
|
#define TFT_HEIGHT 320
|
||||||
|
#else
|
||||||
|
#define TFT_WIDTH 320
|
||||||
|
#define TFT_HEIGHT 240
|
||||||
|
#endif
|
||||||
|
#define GRAPHICAL_TFT_UPSCALE 2
|
||||||
|
#elif ENABLED(TFT_RES_480x272)
|
||||||
|
#define TFT_WIDTH 480
|
||||||
|
#define TFT_HEIGHT 272
|
||||||
|
#define GRAPHICAL_TFT_UPSCALE 2
|
||||||
|
#elif ENABLED(TFT_RES_480x320)
|
||||||
|
#define TFT_WIDTH 480
|
||||||
|
#define TFT_HEIGHT 320
|
||||||
|
#define GRAPHICAL_TFT_UPSCALE 3
|
||||||
|
#elif ENABLED(TFT_RES_1024x600)
|
||||||
|
#define TFT_WIDTH 1024
|
||||||
|
#define TFT_HEIGHT 600
|
||||||
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
|
#define GRAPHICAL_TFT_UPSCALE 6
|
||||||
|
#define TFT_PIXEL_OFFSET_X 120
|
||||||
|
#else
|
||||||
|
#define GRAPHICAL_TFT_UPSCALE 8
|
||||||
|
#define TFT_PIXEL_OFFSET_X 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ENABLED(TFT_COLOR_UI)
|
#if ENABLED(TFT_COLOR_UI)
|
||||||
#if TFT_HEIGHT == 240
|
#if (TFT_WIDTH == 320 && TFT_HEIGHT == 240) || (TFT_WIDTH == 240 && TFT_HEIGHT == 320)
|
||||||
#if ENABLED(TFT_INTERFACE_SPI)
|
#if ENABLED(TFT_INTERFACE_SPI)
|
||||||
#define TFT_320x240_SPI
|
#define TFT_320x240_SPI
|
||||||
#elif ENABLED(TFT_INTERFACE_FSMC)
|
#elif ENABLED(TFT_INTERFACE_FSMC)
|
||||||
|
@ -1612,6 +1642,8 @@
|
||||||
#endif
|
#endif
|
||||||
#if ANY(HAS_UI_320x240, HAS_UI_480x320, HAS_UI_480x272)
|
#if ANY(HAS_UI_320x240, HAS_UI_480x320, HAS_UI_480x272)
|
||||||
#define LCD_HEIGHT TERN(TOUCH_SCREEN, 6, 7) // Fewer lines with touch buttons onscreen
|
#define LCD_HEIGHT TERN(TOUCH_SCREEN, 6, 7) // Fewer lines with touch buttons onscreen
|
||||||
|
#elif HAS_UI_240x320
|
||||||
|
#define LCD_HEIGHT TERN(TOUCH_SCREEN, 8, 6) // Fewer lines with touch buttons onscreen
|
||||||
#elif HAS_UI_1024x600
|
#elif HAS_UI_1024x600
|
||||||
#define LCD_HEIGHT TERN(TOUCH_SCREEN, 12, 13) // Fewer lines with touch buttons onscreen
|
#define LCD_HEIGHT TERN(TOUCH_SCREEN, 12, 13) // Fewer lines with touch buttons onscreen
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -37,22 +37,6 @@
|
||||||
#define ENDIAN_COLOR(C) (C)
|
#define ENDIAN_COLOR(C) (C)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_UI_320x240
|
|
||||||
#define TFT_WIDTH 320
|
|
||||||
#define TFT_HEIGHT 240
|
|
||||||
#elif HAS_UI_480x320
|
|
||||||
#define TFT_WIDTH 480
|
|
||||||
#define TFT_HEIGHT 320
|
|
||||||
#elif HAS_UI_480x272
|
|
||||||
#define TFT_WIDTH 480
|
|
||||||
#define TFT_HEIGHT 272
|
|
||||||
#elif HAS_UI_1024x600
|
|
||||||
#define TFT_WIDTH 1024
|
|
||||||
#define TFT_HEIGHT 600
|
|
||||||
#else
|
|
||||||
#error "Unsupported display resolution!"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef TFT_BUFFER_SIZE
|
#ifndef TFT_BUFFER_SIZE
|
||||||
#ifdef STM32F103xB
|
#ifdef STM32F103xB
|
||||||
#define TFT_BUFFER_SIZE 1024
|
#define TFT_BUFFER_SIZE 1024
|
||||||
|
|
|
@ -37,5 +37,4 @@ extern const uint8_t SYMBOLS_FONT_NAME[];
|
||||||
extern const uint8_t EXTRA_FONT_NAME[];
|
extern const uint8_t EXTRA_FONT_NAME[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif // HAS_GRAPHICAL_TFT
|
#endif // HAS_GRAPHICAL_TFT
|
||||||
|
|
|
@ -700,12 +700,12 @@ static void moveAxis(const AxisEnum axis, const int8_t direction) {
|
||||||
probe.offset.z = new_offs;
|
probe.offset.z = new_offs;
|
||||||
else
|
else
|
||||||
TERN(BABYSTEP_HOTEND_Z_OFFSET, hotend_offset[active_extruder].z = new_offs, NOOP);
|
TERN(BABYSTEP_HOTEND_Z_OFFSET, hotend_offset[active_extruder].z = new_offs, NOOP);
|
||||||
drawMessage(""); // clear the error
|
drawMessage(F("")); // clear the error
|
||||||
drawAxisValue(axis);
|
drawAxisValue(axis);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
drawMessage(GET_TEXT_F(MSG_LCD_SOFT_ENDSTOPS));
|
drawMessage(GET_TEXT_F(MSG_LCD_SOFT_ENDSTOPS));
|
||||||
}
|
|
||||||
#elif HAS_BED_PROBE
|
#elif HAS_BED_PROBE
|
||||||
// only change probe.offset.z
|
// only change probe.offset.z
|
||||||
probe.offset.z += diff;
|
probe.offset.z += diff;
|
||||||
|
@ -717,9 +717,9 @@ static void moveAxis(const AxisEnum axis, const int8_t direction) {
|
||||||
current_position[axis] = Z_PROBE_OFFSET_RANGE_MAX;
|
current_position[axis] = Z_PROBE_OFFSET_RANGE_MAX;
|
||||||
drawMessage(GET_TEXT_F(MSG_LCD_SOFT_ENDSTOPS));
|
drawMessage(GET_TEXT_F(MSG_LCD_SOFT_ENDSTOPS));
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
drawMessage(""); // clear the error
|
drawMessage(F("")); // clear the error
|
||||||
}
|
|
||||||
drawAxisValue(axis);
|
drawAxisValue(axis);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
|
@ -765,10 +765,8 @@ static void z_minus() { moveAxis(Z_AXIS, -1); }
|
||||||
|
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
static void e_select() {
|
static void e_select() {
|
||||||
motionAxisState.e_selection++;
|
if (++motionAxisState.e_selection >= EXTRUDERS)
|
||||||
if (motionAxisState.e_selection >= EXTRUDERS) {
|
|
||||||
motionAxisState.e_selection = 0;
|
motionAxisState.e_selection = 0;
|
||||||
}
|
|
||||||
|
|
||||||
quick_feedback();
|
quick_feedback();
|
||||||
drawCurESelection();
|
drawCurESelection();
|
||||||
|
@ -810,8 +808,8 @@ static void disable_steppers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) {
|
static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) {
|
||||||
uint16_t width = Images[imgBtn52Rounded].width;
|
uint16_t width = Images[imgBtn52Rounded].width,
|
||||||
uint16_t height = Images[imgBtn52Rounded].height;
|
height = Images[imgBtn52Rounded].height;
|
||||||
|
|
||||||
if (!enabled) bgColor = COLOR_CONTROL_DISABLED;
|
if (!enabled) bgColor = COLOR_CONTROL_DISABLED;
|
||||||
|
|
||||||
|
|
|
@ -35,15 +35,15 @@
|
||||||
#define MENU_ITEM_ICON_Y 5
|
#define MENU_ITEM_ICON_Y 5
|
||||||
#define MENU_ITEM_ICON_SPACE 42
|
#define MENU_ITEM_ICON_SPACE 42
|
||||||
|
|
||||||
|
#define MENU_ITEM_HEIGHT 43
|
||||||
|
#define MENU_LINE_HEIGHT (MENU_ITEM_HEIGHT + 2)
|
||||||
|
|
||||||
#if (TFT_FONT == NOTOSANS) || (TFT_FONT == HELVETICA)
|
#if (TFT_FONT == NOTOSANS) || (TFT_FONT == HELVETICA)
|
||||||
#define FONT_SIZE 19
|
#define FONT_SIZE 19
|
||||||
#elif TFT_FONT == UNIFONT
|
#elif TFT_FONT == UNIFONT
|
||||||
#define FONT_SIZE 20
|
#define FONT_SIZE 20
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MENU_ITEM_HEIGHT 43
|
|
||||||
#define FONT_LINE_HEIGHT 34
|
#define FONT_LINE_HEIGHT 34
|
||||||
|
|
||||||
#define MENU_LINE_HEIGHT (MENU_ITEM_HEIGHT + 2)
|
|
||||||
|
|
||||||
#include "tft_font.h"
|
#include "tft_font.h"
|
||||||
|
|
|
@ -49,9 +49,11 @@ void MarlinUI::tft_idle() {
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
if (TERN0(HAS_TOUCH_SLEEP, lcd_sleep_task())) return;
|
if (TERN0(HAS_TOUCH_SLEEP, lcd_sleep_task())) return;
|
||||||
if (draw_menu_navigation) {
|
if (draw_menu_navigation) {
|
||||||
add_control(48, 206, PAGE_UP, imgPageUp, encoderTopLine > 0);
|
constexpr uint16_t cx = TERN(TFT_COLOR_UI_PORTRAIT, 16, 48),
|
||||||
add_control(240, 206, PAGE_DOWN, imgPageDown, encoderTopLine + LCD_HEIGHT < screen_items);
|
cy = TERN(TFT_COLOR_UI_PORTRAIT, 286, 206);
|
||||||
add_control(144, 206, BACK, imgBack);
|
add_control(cx, cy, PAGE_UP, imgPageUp, encoderTopLine > 0);
|
||||||
|
add_control(cx + 192, cy, PAGE_DOWN, imgPageDown, encoderTopLine + LCD_HEIGHT < screen_items);
|
||||||
|
add_control(cx + 96, cy, BACK, imgBack);
|
||||||
draw_menu_navigation = false;
|
draw_menu_navigation = false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -97,19 +99,19 @@ void MarlinUI::draw_kill_screen() {
|
||||||
tft.queue.reset();
|
tft.queue.reset();
|
||||||
tft.fill(0, 0, TFT_WIDTH, TFT_HEIGHT, COLOR_KILL_SCREEN_BG);
|
tft.fill(0, 0, TFT_WIDTH, TFT_HEIGHT, COLOR_KILL_SCREEN_BG);
|
||||||
|
|
||||||
tft.canvas(0, 60, TFT_WIDTH, 24);
|
tft.canvas(0, 60, TFT_WIDTH, FONT_LINE_HEIGHT);
|
||||||
tft.set_background(COLOR_KILL_SCREEN_BG);
|
tft.set_background(COLOR_KILL_SCREEN_BG);
|
||||||
tft_string.set(status_message);
|
tft_string.set(status_message);
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
tft.add_text(tft_string.center(TFT_WIDTH), 0, COLOR_KILL_SCREEN_TEXT, tft_string);
|
tft.add_text(tft_string.center(TFT_WIDTH), 0, COLOR_KILL_SCREEN_TEXT, tft_string);
|
||||||
|
|
||||||
tft.canvas(0, 120, TFT_WIDTH, 24);
|
tft.canvas(0, 120, TFT_WIDTH, FONT_LINE_HEIGHT);
|
||||||
tft.set_background(COLOR_KILL_SCREEN_BG);
|
tft.set_background(COLOR_KILL_SCREEN_BG);
|
||||||
tft_string.set(GET_TEXT(MSG_HALTED));
|
tft_string.set(GET_TEXT(MSG_HALTED));
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
tft.add_text(tft_string.center(TFT_WIDTH), 0, COLOR_KILL_SCREEN_TEXT, tft_string);
|
tft.add_text(tft_string.center(TFT_WIDTH), 0, COLOR_KILL_SCREEN_TEXT, tft_string);
|
||||||
|
|
||||||
tft.canvas(0, 160, TFT_WIDTH, 24);
|
tft.canvas(0, 160, TFT_WIDTH, FONT_LINE_HEIGHT);
|
||||||
tft.set_background(COLOR_KILL_SCREEN_BG);
|
tft.set_background(COLOR_KILL_SCREEN_BG);
|
||||||
tft_string.set(GET_TEXT(MSG_PLEASE_RESET));
|
tft_string.set(GET_TEXT(MSG_PLEASE_RESET));
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
|
@ -185,13 +187,13 @@ void draw_heater_status(uint16_t x, uint16_t y, const int8_t Heater) {
|
||||||
tft_string.set(i16tostr3rj(currentTemperature));
|
tft_string.set(i16tostr3rj(currentTemperature));
|
||||||
tft_string.add(LCD_STR_DEGREE);
|
tft_string.add(LCD_STR_DEGREE);
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
tft.add_text(tft_string.center(64) + 2, 69 + tft_string.vcenter(24), Color, tft_string);
|
tft.add_text(tft_string.center(64) + 2, 69 + tft_string.vcenter(FONT_LINE_HEIGHT), Color, tft_string);
|
||||||
|
|
||||||
if (targetTemperature >= 0) {
|
if (targetTemperature >= 0) {
|
||||||
tft_string.set(i16tostr3rj(targetTemperature));
|
tft_string.set(i16tostr3rj(targetTemperature));
|
||||||
tft_string.add(LCD_STR_DEGREE);
|
tft_string.add(LCD_STR_DEGREE);
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
tft.add_text(tft_string.center(64) + 2, 5 + tft_string.vcenter(24), Color, tft_string);
|
tft.add_text(tft_string.center(64) + 2, 5 + tft_string.vcenter(FONT_LINE_HEIGHT), Color, tft_string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +216,7 @@ void draw_fan_status(uint16_t x, uint16_t y, const bool blink) {
|
||||||
|
|
||||||
tft_string.set(ui8tostr4pctrj(thermalManager.fan_speed[0]));
|
tft_string.set(ui8tostr4pctrj(thermalManager.fan_speed[0]));
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
tft.add_text(tft_string.center(64) + 6, 69 + tft_string.vcenter(24), COLOR_FAN, tft_string);
|
tft.add_text(tft_string.center(64) + 6, 69 + tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_FAN, tft_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarlinUI::draw_status_screen() {
|
void MarlinUI::draw_status_screen() {
|
||||||
|
@ -226,7 +228,7 @@ void MarlinUI::draw_status_screen() {
|
||||||
uint16_t i, x, y = TFT_STATUS_TOP_Y;
|
uint16_t i, x, y = TFT_STATUS_TOP_Y;
|
||||||
|
|
||||||
for (i = 0 ; i < ITEMS_COUNT; i++) {
|
for (i = 0 ; i < ITEMS_COUNT; i++) {
|
||||||
x = (320 / ITEMS_COUNT - 64) / 2 + (320 * i / ITEMS_COUNT);
|
x = (TFT_WIDTH / ITEMS_COUNT - 64) / 2 + (TFT_WIDTH * i / ITEMS_COUNT);
|
||||||
switch (i) {
|
switch (i) {
|
||||||
#ifdef ITEM_E0
|
#ifdef ITEM_E0
|
||||||
case ITEM_E0: draw_heater_status(x, y, H_E0); break;
|
case ITEM_E0: draw_heater_status(x, y, H_E0); break;
|
||||||
|
@ -253,33 +255,60 @@ void MarlinUI::draw_status_screen() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// coordinates
|
// coordinates
|
||||||
tft.canvas(4, 103, 312, 24);
|
tft.canvas(4, 103,
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
232, FONT_LINE_HEIGHT * 2
|
||||||
|
#else
|
||||||
|
312, FONT_LINE_HEIGHT
|
||||||
|
#endif
|
||||||
|
);
|
||||||
tft.set_background(COLOR_BACKGROUND);
|
tft.set_background(COLOR_BACKGROUND);
|
||||||
tft.add_rectangle(0, 0, 312, 24, COLOR_AXIS_HOMED);
|
tft.add_rectangle(0, 0,
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
232, FONT_LINE_HEIGHT * 2
|
||||||
|
#else
|
||||||
|
312, FONT_LINE_HEIGHT
|
||||||
|
#endif
|
||||||
|
, COLOR_AXIS_HOMED
|
||||||
|
);
|
||||||
|
|
||||||
if (TERN0(LCD_SHOW_E_TOTAL, printingIsActive())) {
|
if (TERN0(LCD_SHOW_E_TOTAL, printingIsActive())) {
|
||||||
#if ENABLED(LCD_SHOW_E_TOTAL)
|
#if ENABLED(LCD_SHOW_E_TOTAL)
|
||||||
tft.add_text( 10, tft_string.vcenter(24), COLOR_AXIS_HOMED , "E");
|
tft.add_text( 10, tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_AXIS_HOMED , "E");
|
||||||
const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm
|
const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm
|
||||||
tft_string.set(ftostr4sign(e_move_accumulator / escale));
|
tft_string.set(ftostr4sign(e_move_accumulator / escale));
|
||||||
tft_string.add(escale == 10 ? 'c' : 'm');
|
tft_string.add(escale == 10 ? 'c' : 'm');
|
||||||
tft_string.add('m');
|
tft_string.add('m');
|
||||||
tft.add_text(127 - tft_string.width(), tft_string.vcenter(24), COLOR_AXIS_HOMED, tft_string);
|
tft.add_text(127 - tft_string.width(), tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_AXIS_HOMED, tft_string);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tft.add_text( 10, tft_string.vcenter(24), COLOR_AXIS_HOMED , "X");
|
tft.add_text(TERN(TFT_COLOR_UI_PORTRAIT, 32, 10), tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_AXIS_HOMED , "X");
|
||||||
const bool nhx = axis_should_home(X_AXIS);
|
const bool nhx = axis_should_home(X_AXIS);
|
||||||
tft_string.set(blink && nhx ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x)));
|
tft_string.set(blink && nhx ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x)));
|
||||||
tft.add_text( 68 - tft_string.width(), tft_string.vcenter(24), nhx ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string);
|
tft.add_text(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
32 - tft_string.width() / 2, FONT_LINE_HEIGHT + tft_string.vcenter(FONT_LINE_HEIGHT),
|
||||||
|
#else
|
||||||
|
68 - tft_string.width(), tft_string.vcenter(FONT_LINE_HEIGHT),
|
||||||
|
#endif
|
||||||
|
nhx ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string
|
||||||
|
);
|
||||||
|
|
||||||
tft.add_text(127, tft_string.vcenter(24), COLOR_AXIS_HOMED , "Y");
|
tft.add_text(TERN(TFT_COLOR_UI_PORTRAIT, 110, 127), tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_AXIS_HOMED , "Y");
|
||||||
const bool nhy = axis_should_home(Y_AXIS);
|
const bool nhy = axis_should_home(Y_AXIS);
|
||||||
tft_string.set(blink && nhy ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y)));
|
tft_string.set(blink && nhy ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y)));
|
||||||
tft.add_text(185 - tft_string.width(), tft_string.vcenter(24), nhy ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string);
|
tft.add_text(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
110 - tft_string.width() / 2, FONT_LINE_HEIGHT + tft_string.vcenter(FONT_LINE_HEIGHT),
|
||||||
|
#else
|
||||||
|
185 - tft_string.width(), tft_string.vcenter(FONT_LINE_HEIGHT),
|
||||||
|
#endif
|
||||||
|
nhy ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
tft.add_text(219, tft_string.vcenter(24), COLOR_AXIS_HOMED , "Z");
|
tft.add_text(TERN(TFT_COLOR_UI_PORTRAIT, 192, 219), tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_AXIS_HOMED , "Z");
|
||||||
const bool nhz = axis_should_home(Z_AXIS);
|
const bool nhz = axis_should_home(Z_AXIS);
|
||||||
uint16_t offset = 25;
|
uint16_t offset = 25;
|
||||||
if (blink && nhz)
|
if (blink && nhz)
|
||||||
|
@ -293,61 +322,138 @@ void MarlinUI::draw_status_screen() {
|
||||||
tft_string.set(ftostr52sp(z));
|
tft_string.set(ftostr52sp(z));
|
||||||
offset -= tft_string.width();
|
offset -= tft_string.width();
|
||||||
}
|
}
|
||||||
tft.add_text(301 - tft_string.width() - offset, tft_string.vcenter(24), nhz ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string);
|
tft.add_text(
|
||||||
TERN_(TOUCH_SCREEN, touch.add_control(MOVE_AXIS, 0, 103, 312, 24));
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
192 - tft_string.width() / 2, FONT_LINE_HEIGHT + tft_string.vcenter(FONT_LINE_HEIGHT),
|
||||||
|
#else
|
||||||
|
301 - tft_string.width() - offset, tft_string.vcenter(FONT_LINE_HEIGHT),
|
||||||
|
#endif
|
||||||
|
nhz ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string);
|
||||||
|
TERN_(TOUCH_SCREEN, touch.add_control(MOVE_AXIS, 0, 103,
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
232, FONT_LINE_HEIGHT * 2
|
||||||
|
#else
|
||||||
|
312, FONT_LINE_HEIGHT
|
||||||
|
#endif
|
||||||
|
));
|
||||||
|
|
||||||
// feed rate
|
// feed rate
|
||||||
tft.canvas(70, 136, 84, 32);
|
tft.canvas(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
30, 172, 80
|
||||||
|
#else
|
||||||
|
70, 136, 84
|
||||||
|
#endif
|
||||||
|
, 32
|
||||||
|
);
|
||||||
tft.set_background(COLOR_BACKGROUND);
|
tft.set_background(COLOR_BACKGROUND);
|
||||||
uint16_t color = feedrate_percentage == 100 ? COLOR_RATE_100 : COLOR_RATE_ALTERED;
|
uint16_t color = feedrate_percentage == 100 ? COLOR_RATE_100 : COLOR_RATE_ALTERED;
|
||||||
tft.add_image(0, 0, imgFeedRate, color);
|
tft.add_image(0, 0, imgFeedRate, color);
|
||||||
tft_string.set(i16tostr3rj(feedrate_percentage));
|
tft_string.set(i16tostr3rj(feedrate_percentage));
|
||||||
tft_string.add('%');
|
tft_string.add('%');
|
||||||
tft.add_text(32, tft_string.vcenter(30), color , tft_string);
|
tft.add_text(32, tft_string.vcenter(30), color , tft_string);
|
||||||
TERN_(TOUCH_SCREEN, touch.add_control(FEEDRATE, 70, 136, 84, 32));
|
TERN_(TOUCH_SCREEN, touch.add_control(FEEDRATE,
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
30, 172, 80
|
||||||
|
#else
|
||||||
|
70, 136, 84
|
||||||
|
#endif
|
||||||
|
, 32
|
||||||
|
));
|
||||||
|
|
||||||
// flow rate
|
// flow rate
|
||||||
tft.canvas(170, 136, 84, 32);
|
tft.canvas(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
140, 172, 80
|
||||||
|
#else
|
||||||
|
170, 136, 84
|
||||||
|
#endif
|
||||||
|
, 32
|
||||||
|
);
|
||||||
tft.set_background(COLOR_BACKGROUND);
|
tft.set_background(COLOR_BACKGROUND);
|
||||||
color = planner.flow_percentage[0] == 100 ? COLOR_RATE_100 : COLOR_RATE_ALTERED;
|
color = planner.flow_percentage[0] == 100 ? COLOR_RATE_100 : COLOR_RATE_ALTERED;
|
||||||
tft.add_image(0, 0, imgFlowRate, color);
|
tft.add_image(0, 0, imgFlowRate, color);
|
||||||
tft_string.set(i16tostr3rj(planner.flow_percentage[active_extruder]));
|
tft_string.set(i16tostr3rj(planner.flow_percentage[active_extruder]));
|
||||||
tft_string.add('%');
|
tft_string.add('%');
|
||||||
tft.add_text(32, tft_string.vcenter(30), color , tft_string);
|
tft.add_text(32, tft_string.vcenter(30), color , tft_string);
|
||||||
TERN_(TOUCH_SCREEN, touch.add_control(FLOWRATE, 170, 136, 84, 32, active_extruder));
|
TERN_(TOUCH_SCREEN, touch.add_control(FLOWRATE,
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
140, 172, 80
|
||||||
|
#else
|
||||||
|
170, 136, 84
|
||||||
|
#endif
|
||||||
|
, 32, active_extruder
|
||||||
|
));
|
||||||
|
|
||||||
// print duration
|
// print duration
|
||||||
char buffer[14];
|
char buffer[14];
|
||||||
duration_t elapsed = print_job_timer.duration();
|
duration_t elapsed = print_job_timer.duration();
|
||||||
elapsed.toDigital(buffer);
|
elapsed.toDigital(buffer);
|
||||||
|
|
||||||
tft.canvas(96, 173, 128, 24);
|
tft.canvas(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
56, 256, 128
|
||||||
|
#else
|
||||||
|
96, 173, 128
|
||||||
|
#endif
|
||||||
|
, FONT_LINE_HEIGHT
|
||||||
|
);
|
||||||
tft.set_background(COLOR_BACKGROUND);
|
tft.set_background(COLOR_BACKGROUND);
|
||||||
tft_string.set(buffer);
|
tft_string.set(buffer);
|
||||||
tft.add_text(tft_string.center(128), tft_string.vcenter(24), COLOR_PRINT_TIME, tft_string);
|
tft.add_text(tft_string.center(128), tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_PRINT_TIME, tft_string);
|
||||||
|
|
||||||
// progress bar
|
// progress bar
|
||||||
const uint8_t progress = ui.get_progress_percent();
|
const uint8_t progress = ui.get_progress_percent();
|
||||||
tft.canvas(4, 198, 312, 9);
|
tft.canvas(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
4, 278, 232
|
||||||
|
#else
|
||||||
|
4, 198, 312
|
||||||
|
#endif
|
||||||
|
, 9
|
||||||
|
);
|
||||||
tft.set_background(COLOR_PROGRESS_BG);
|
tft.set_background(COLOR_PROGRESS_BG);
|
||||||
tft.add_rectangle(0, 0, 312, 9, COLOR_PROGRESS_FRAME);
|
tft.add_rectangle(0, 0,
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
232, 9
|
||||||
|
#else
|
||||||
|
312, 9
|
||||||
|
#endif
|
||||||
|
, COLOR_PROGRESS_FRAME
|
||||||
|
);
|
||||||
if (progress)
|
if (progress)
|
||||||
tft.add_bar(1, 1, (310 * progress) / 100, 7, COLOR_PROGRESS_BAR);
|
tft.add_bar(1, 1, ((TFT_WIDTH - 10) * progress) / 100, 7, COLOR_PROGRESS_BAR);
|
||||||
|
|
||||||
// status message
|
// status message
|
||||||
tft.canvas(0, 212, 320, 24);
|
tft.canvas(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
0, 296, 240
|
||||||
|
#else
|
||||||
|
0, 212, 320
|
||||||
|
#endif
|
||||||
|
, FONT_LINE_HEIGHT
|
||||||
|
);
|
||||||
tft.set_background(COLOR_BACKGROUND);
|
tft.set_background(COLOR_BACKGROUND);
|
||||||
tft_string.set(status_message);
|
tft_string.set(status_message);
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
tft.add_text(tft_string.center(TFT_WIDTH), tft_string.vcenter(24), COLOR_STATUS_MESSAGE, tft_string);
|
tft.add_text(tft_string.center(TFT_WIDTH), tft_string.vcenter(FONT_LINE_HEIGHT), COLOR_STATUS_MESSAGE, tft_string);
|
||||||
|
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
add_control(256, 130, menu_main, imgSettings);
|
{
|
||||||
|
add_control(
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
176, 210
|
||||||
|
#else
|
||||||
|
256, 130
|
||||||
|
#endif
|
||||||
|
, menu_main, imgSettings
|
||||||
|
);
|
||||||
#if ENABLED(SDSUPPORT)
|
#if ENABLED(SDSUPPORT)
|
||||||
const bool cm = card.isMounted(), pa = printingIsActive();
|
const bool cm = card.isMounted(), pa = printingIsActive();
|
||||||
add_control(0, 130, menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, cm && pa ? COLOR_BUSY : COLOR_CONTROL_DISABLED);
|
add_control(0, TERN(TFT_COLOR_UI_PORTRAIT, 210, 130), menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, cm && pa ? COLOR_BUSY : COLOR_CONTROL_DISABLED);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
} // (sublime)
|
||||||
|
#endif // TOUCH_SCREEN
|
||||||
}
|
}
|
||||||
|
|
||||||
// Low-level draw_edit_screen can be used to draw an edit screen from anyplace
|
// Low-level draw_edit_screen can be used to draw an edit screen from anyplace
|
||||||
|
@ -412,9 +518,9 @@ void MenuEditItemBase::draw_edit_screen(FSTR_P const fstr, const char * const va
|
||||||
|
|
||||||
void TFT::draw_edit_screen_buttons() {
|
void TFT::draw_edit_screen_buttons() {
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
add_control(32, TFT_HEIGHT - 64, DECREASE, imgDecrease);
|
add_control(TERN(TFT_COLOR_UI_PORTRAIT, 16, 32), TFT_HEIGHT - 64, DECREASE, imgDecrease);
|
||||||
add_control(224, TFT_HEIGHT - 64, INCREASE, imgIncrease);
|
add_control(TERN(TFT_COLOR_UI_PORTRAIT, 172, 224), TFT_HEIGHT - 64, INCREASE, imgIncrease);
|
||||||
add_control(128, TFT_HEIGHT - 64, CLICK, imgConfirm);
|
add_control(TERN(TFT_COLOR_UI_PORTRAIT, 96, 128), TFT_HEIGHT - 64, CLICK, imgConfirm);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,8 +549,8 @@ void MenuItem_confirm::draw_select_screen(FSTR_P const yes, FSTR_P const no, con
|
||||||
tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
|
tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
|
||||||
}
|
}
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
if (no) add_control( 48, TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL);
|
if (no) add_control(TERN(TFT_COLOR_UI_PORTRAIT, 32, 48), TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL);
|
||||||
if (yes) add_control(208, TFT_HEIGHT - 64, CONFIRM, imgConfirm, true, yesno ? COLOR_CONTROL_CONFIRM : HALF(COLOR_CONTROL_CONFIRM));
|
if (yes) add_control(TERN(TFT_COLOR_UI_PORTRAIT, 172, 208), TFT_HEIGHT - 64, CONFIRM, imgConfirm, true, yesno ? COLOR_CONTROL_CONFIRM : HALF(COLOR_CONTROL_CONFIRM));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -625,9 +731,16 @@ static void drawCurESelection() {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drawMessage(PGM_P const msg) {
|
static void drawMessage(PGM_P const msg) {
|
||||||
tft.canvas(X_MARGIN, TFT_HEIGHT - Y_MARGIN - 29, (TFT_WIDTH / 2) - (BTN_WIDTH / 2) - X_MARGIN, 20);
|
tft.canvas(X_MARGIN,
|
||||||
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
|
TFT_HEIGHT - 2 * BTN_HEIGHT, TFT_WIDTH - X_MARGIN
|
||||||
|
#else
|
||||||
|
TFT_HEIGHT - Y_MARGIN - 29, (TFT_WIDTH / 2) - (BTN_WIDTH / 2) - X_MARGIN
|
||||||
|
#endif
|
||||||
|
, FONT_LINE_HEIGHT
|
||||||
|
);
|
||||||
tft.set_background(COLOR_BACKGROUND);
|
tft.set_background(COLOR_BACKGROUND);
|
||||||
tft.add_text(0, 0, COLOR_YELLOW, msg);
|
tft.add_text(0, 0, COLOR_STATUS_MESSAGE, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drawMessage(FSTR_P const fmsg) { drawMessage(FTOP(fmsg)); }
|
static void drawMessage(FSTR_P const fmsg) { drawMessage(FTOP(fmsg)); }
|
||||||
|
@ -646,7 +759,7 @@ static void drawAxisValue(const AxisEnum axis) {
|
||||||
case E_AXIS: pos = motionAxisState.eValuePos; color = E_BTN_COLOR; break;
|
case E_AXIS: pos = motionAxisState.eValuePos; color = E_BTN_COLOR; break;
|
||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
tft.canvas(pos.x, pos.y, BTN_WIDTH + X_MARGIN, 20);
|
tft.canvas(pos.x, pos.y, BTN_WIDTH + X_MARGIN, FONT_LINE_HEIGHT);
|
||||||
tft.set_background(COLOR_BACKGROUND);
|
tft.set_background(COLOR_BACKGROUND);
|
||||||
tft_string.set(ftostr52sp(value));
|
tft_string.set(ftostr52sp(value));
|
||||||
tft.add_text(0, 0, color, tft_string);
|
tft.add_text(0, 0, color, tft_string);
|
||||||
|
@ -745,10 +858,8 @@ static void z_minus() { moveAxis(Z_AXIS, -1); }
|
||||||
|
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
static void e_select() {
|
static void e_select() {
|
||||||
motionAxisState.e_selection++;
|
if (++motionAxisState.e_selection >= EXTRUDERS)
|
||||||
if (motionAxisState.e_selection >= EXTRUDERS) {
|
|
||||||
motionAxisState.e_selection = 0;
|
motionAxisState.e_selection = 0;
|
||||||
}
|
|
||||||
|
|
||||||
quick_feedback();
|
quick_feedback();
|
||||||
drawCurESelection();
|
drawCurESelection();
|
||||||
|
@ -773,16 +884,17 @@ static void z_minus() { moveAxis(Z_AXIS, -1); }
|
||||||
quick_feedback();
|
quick_feedback();
|
||||||
drawCurStepValue();
|
drawCurStepValue();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if BOTH(HAS_BED_PROBE, TOUCH_SCREEN)
|
#if HAS_BED_PROBE
|
||||||
static void z_select() {
|
static void z_select() {
|
||||||
motionAxisState.z_selection *= -1;
|
motionAxisState.z_selection *= -1;
|
||||||
quick_feedback();
|
quick_feedback();
|
||||||
drawCurZSelection();
|
drawCurZSelection();
|
||||||
drawAxisValue(Z_AXIS);
|
drawAxisValue(Z_AXIS);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif // TOUCH_SCREEN
|
||||||
|
|
||||||
static void disable_steppers() {
|
static void disable_steppers() {
|
||||||
quick_feedback();
|
quick_feedback();
|
||||||
|
@ -805,12 +917,12 @@ static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage
|
||||||
tft_string.trim();
|
tft_string.trim();
|
||||||
tft.add_text(tft_string.center(width), height / 2 - tft_string.font_height() / 2, bgColor, tft_string);
|
tft.add_text(tft_string.center(width), height / 2 - tft_string.font_height() / 2, bgColor, tft_string);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
tft.add_image(0, 0, img, bgColor, COLOR_BACKGROUND, COLOR_DARKGREY);
|
tft.add_image(0, 0, img, bgColor, COLOR_BACKGROUND, COLOR_DARKGREY);
|
||||||
}
|
|
||||||
|
|
||||||
TERN_(HAS_TFT_XPT2046, if (enabled) touch.add_control(BUTTON, x, y, width, height, data));
|
TERN_(HAS_TFT_XPT2046, if (enabled) touch.add_control(BUTTON, x, y, width, height, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarlinUI::move_axis_screen() {
|
void MarlinUI::move_axis_screen() {
|
||||||
// Reset
|
// Reset
|
||||||
defer_status_screen(true);
|
defer_status_screen(true);
|
||||||
|
@ -827,93 +939,187 @@ void MarlinUI::move_axis_screen() {
|
||||||
if (busy && ENABLED(BABYSTEP_ZPROBE_OFFSET))
|
if (busy && ENABLED(BABYSTEP_ZPROBE_OFFSET))
|
||||||
motionAxisState.z_selection = Z_SELECTION_Z_PROBE;
|
motionAxisState.z_selection = Z_SELECTION_Z_PROBE;
|
||||||
|
|
||||||
// ROW 1 -> E- Y- CurY Z+
|
#if ENABLED(TFT_COLOR_UI_PORTRAIT)
|
||||||
int x = X_MARGIN, y = Y_MARGIN, spacing = 0;
|
|
||||||
|
|
||||||
drawBtn(x, y, "E+", (intptr_t)e_plus, imgUp, E_BTN_COLOR, !busy);
|
// ROW 1 -> E+ Y+ Z+
|
||||||
|
int x = X_MARGIN, y = Y_MARGIN, spacing = 0;
|
||||||
|
|
||||||
spacing = (TFT_WIDTH - X_MARGIN * 2 - 3 * BTN_WIDTH) / 2;
|
drawBtn(x, y, "E+", (intptr_t)e_plus, imgUp, E_BTN_COLOR, !busy);
|
||||||
x += BTN_WIDTH + spacing;
|
|
||||||
uint16_t yplus_x = x;
|
|
||||||
drawBtn(x, y, "Y+", (intptr_t)y_plus, imgUp, Y_BTN_COLOR, !busy);
|
|
||||||
|
|
||||||
// Cur Y
|
spacing = (TFT_WIDTH - X_MARGIN * 2 - 3 * BTN_WIDTH) / 2;
|
||||||
x += BTN_WIDTH;
|
x += BTN_WIDTH + spacing;
|
||||||
motionAxisState.yValuePos.x = x + 2;
|
uint16_t yplus_x = x;
|
||||||
motionAxisState.yValuePos.y = y;
|
drawBtn(x, y, "Y+", (intptr_t)y_plus, imgUp, Y_BTN_COLOR, !busy);
|
||||||
drawAxisValue(Y_AXIS);
|
|
||||||
|
|
||||||
x += spacing;
|
x += BTN_WIDTH + spacing;
|
||||||
drawBtn(x, y, "Z+", (intptr_t)z_plus, imgUp, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step
|
uint16_t zplus_x = x;
|
||||||
|
drawBtn(x, y, "Z+", (intptr_t)z_plus, imgUp, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step
|
||||||
|
|
||||||
// ROW 2 -> "Ex" X- HOME X+ "Z"
|
// ROW 2 -> "Ex" CurY "Z"
|
||||||
y += BTN_HEIGHT + (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3;
|
x = X_MARGIN;
|
||||||
x = X_MARGIN;
|
y += BTN_HEIGHT + 2;
|
||||||
spacing = (TFT_WIDTH - X_MARGIN * 2 - 5 * BTN_WIDTH) / 4;
|
|
||||||
|
|
||||||
motionAxisState.eNamePos.x = x;
|
motionAxisState.eNamePos.x = x;
|
||||||
motionAxisState.eNamePos.y = y;
|
motionAxisState.eNamePos.y = y;
|
||||||
drawCurESelection();
|
drawCurESelection();
|
||||||
TERN_(HAS_TFT_XPT2046, if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, BTN_HEIGHT, (intptr_t)e_select));
|
TERN_(HAS_TFT_XPT2046, if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, BTN_HEIGHT, (intptr_t)e_select));
|
||||||
|
|
||||||
x += BTN_WIDTH + spacing;
|
motionAxisState.yValuePos.x = yplus_x;
|
||||||
drawBtn(x, y, "X-", (intptr_t)x_minus, imgLeft, X_BTN_COLOR, !busy);
|
motionAxisState.yValuePos.y = y;
|
||||||
|
drawAxisValue(Y_AXIS);
|
||||||
|
|
||||||
x += BTN_WIDTH + spacing; //imgHome is 64x64
|
motionAxisState.zTypePos.x = zplus_x;
|
||||||
TERN_(HAS_TFT_XPT2046, add_control(TFT_WIDTH / 2 - Images[imgHome].width / 2, y - (Images[imgHome].width - BTN_HEIGHT) / 2, BUTTON, (intptr_t)do_home, imgHome, !busy));
|
motionAxisState.zTypePos.y = y;
|
||||||
|
drawCurZSelection();
|
||||||
|
|
||||||
x += BTN_WIDTH + spacing;
|
// ROW 3 -> X- HOME X+
|
||||||
uint16_t xplus_x = x;
|
y += (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3 - 2;
|
||||||
drawBtn(x, y, "X+", (intptr_t)x_plus, imgRight, X_BTN_COLOR, !busy);
|
x = X_MARGIN;
|
||||||
|
|
||||||
x += BTN_WIDTH + spacing;
|
drawBtn(x, y, "X-", (intptr_t)x_minus, imgLeft, X_BTN_COLOR, !busy);
|
||||||
motionAxisState.zTypePos.x = x;
|
|
||||||
motionAxisState.zTypePos.y = y;
|
|
||||||
drawCurZSelection();
|
|
||||||
#if BOTH(HAS_BED_PROBE, TOUCH_SCREEN)
|
|
||||||
if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, 34 * 2, (intptr_t)z_select);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ROW 3 -> E- CurX Y- Z-
|
TERN_(HAS_TFT_XPT2046, add_control(TFT_WIDTH / 2 - Images[imgHome].width / 2, y - (Images[imgHome].width - BTN_HEIGHT) / 2, BUTTON, (intptr_t)do_home, imgHome, !busy));
|
||||||
y += BTN_HEIGHT + (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3;
|
|
||||||
x = X_MARGIN;
|
|
||||||
spacing = (TFT_WIDTH - X_MARGIN * 2 - 3 * BTN_WIDTH) / 2;
|
|
||||||
|
|
||||||
drawBtn(x, y, "E-", (intptr_t)e_minus, imgDown, E_BTN_COLOR, !busy);
|
drawBtn(zplus_x, y, "X+", (intptr_t)x_plus, imgRight, X_BTN_COLOR, !busy);
|
||||||
|
|
||||||
// Cur E
|
#if BOTH(HAS_BED_PROBE, TOUCH_SCREEN)
|
||||||
motionAxisState.eValuePos.x = x;
|
if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, 34 * 2, (intptr_t)z_select);
|
||||||
motionAxisState.eValuePos.y = y + BTN_HEIGHT + 2;
|
#endif
|
||||||
drawAxisValue(E_AXIS);
|
|
||||||
|
|
||||||
// Cur X
|
// ROW 4 -> Cur X
|
||||||
motionAxisState.xValuePos.x = BTN_WIDTH + (TFT_WIDTH - X_MARGIN * 2 - 5 * BTN_WIDTH) / 4; //X- pos
|
y += BTN_HEIGHT + 2;
|
||||||
motionAxisState.xValuePos.y = y - 10;
|
|
||||||
drawAxisValue(X_AXIS);
|
|
||||||
|
|
||||||
x += BTN_WIDTH + spacing;
|
motionAxisState.xValuePos.x = x;
|
||||||
drawBtn(x, y, "Y-", (intptr_t)y_minus, imgDown, Y_BTN_COLOR, !busy);
|
motionAxisState.xValuePos.y = y;
|
||||||
|
drawAxisValue(X_AXIS);
|
||||||
|
|
||||||
x += BTN_WIDTH + spacing;
|
// ROW 5 -> E- CurX Y- Z-
|
||||||
drawBtn(x, y, "Z-", (intptr_t)z_minus, imgDown, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step
|
y += (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3 - 2;
|
||||||
|
x = X_MARGIN;
|
||||||
|
|
||||||
// Cur Z
|
drawBtn(x, y, "E-", (intptr_t)e_minus, imgDown, E_BTN_COLOR, !busy);
|
||||||
motionAxisState.zValuePos.x = x;
|
|
||||||
motionAxisState.zValuePos.y = y + BTN_HEIGHT + 2;
|
|
||||||
drawAxisValue(Z_AXIS);
|
|
||||||
|
|
||||||
// ROW 4 -> step_size disable steppers back
|
// Cur E
|
||||||
y = TFT_HEIGHT - Y_MARGIN - BTN_HEIGHT; //
|
motionAxisState.eValuePos.x = x;
|
||||||
x = xplus_x - CUR_STEP_VALUE_WIDTH - 10;
|
motionAxisState.eValuePos.y = y + BTN_HEIGHT + 2;
|
||||||
motionAxisState.stepValuePos.x = yplus_x + BTN_WIDTH - CUR_STEP_VALUE_WIDTH;
|
drawAxisValue(E_AXIS);
|
||||||
motionAxisState.stepValuePos.y = TFT_HEIGHT - Y_MARGIN - BTN_HEIGHT;
|
|
||||||
if (!busy) {
|
|
||||||
drawCurStepValue();
|
|
||||||
TERN_(HAS_TFT_XPT2046, touch.add_control(BUTTON, motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, BTN_HEIGHT, (intptr_t)step_size));
|
|
||||||
}
|
|
||||||
|
|
||||||
// aligned with x+
|
x += BTN_WIDTH + spacing;
|
||||||
drawBtn(xplus_x, y, "off", (intptr_t)disable_steppers, imgCancel, COLOR_WHITE, !busy);
|
drawBtn(x, y, "Y-", (intptr_t)y_minus, imgDown, Y_BTN_COLOR, !busy);
|
||||||
|
|
||||||
|
x += BTN_WIDTH + spacing;
|
||||||
|
drawBtn(x, y, "Z-", (intptr_t)z_minus, imgDown, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step
|
||||||
|
|
||||||
|
// Cur Z
|
||||||
|
motionAxisState.zValuePos.x = x;
|
||||||
|
motionAxisState.zValuePos.y = y + BTN_HEIGHT + 2;
|
||||||
|
drawAxisValue(Z_AXIS);
|
||||||
|
|
||||||
|
// ROW 6 -> step_size disable steppers back
|
||||||
|
y = TFT_HEIGHT - Y_MARGIN - BTN_HEIGHT; //
|
||||||
|
x = zplus_x - CUR_STEP_VALUE_WIDTH - 10;
|
||||||
|
motionAxisState.stepValuePos.x = X_MARGIN + BTN_WIDTH - CUR_STEP_VALUE_WIDTH;
|
||||||
|
motionAxisState.stepValuePos.y = TFT_HEIGHT - Y_MARGIN - BTN_HEIGHT;
|
||||||
|
|
||||||
|
if (!busy) {
|
||||||
|
drawCurStepValue();
|
||||||
|
TERN_(HAS_TFT_XPT2046, touch.add_control(BUTTON, motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, BTN_HEIGHT, (intptr_t)step_size));
|
||||||
|
}
|
||||||
|
|
||||||
|
// aligned with x+
|
||||||
|
drawBtn(yplus_x, y, "off", (intptr_t)disable_steppers, imgCancel, COLOR_WHITE, !busy);
|
||||||
|
|
||||||
|
#else // !TFT_COLOR_UI_PORTRAIT
|
||||||
|
|
||||||
|
// ROW 1 -> E+ Y+ CurY Z+
|
||||||
|
int x = X_MARGIN, y = Y_MARGIN, spacing = 0;
|
||||||
|
|
||||||
|
drawBtn(x, y, "E+", (intptr_t)e_plus, imgUp, E_BTN_COLOR, !busy);
|
||||||
|
|
||||||
|
spacing = (TFT_WIDTH - X_MARGIN * 2 - 3 * BTN_WIDTH) / 2;
|
||||||
|
x += BTN_WIDTH + spacing;
|
||||||
|
uint16_t yplus_x = x;
|
||||||
|
drawBtn(x, y, "Y+", (intptr_t)y_plus, imgUp, Y_BTN_COLOR, !busy);
|
||||||
|
|
||||||
|
// Cur Y
|
||||||
|
x += BTN_WIDTH;
|
||||||
|
motionAxisState.yValuePos.x = x + 2;
|
||||||
|
motionAxisState.yValuePos.y = y;
|
||||||
|
drawAxisValue(Y_AXIS);
|
||||||
|
|
||||||
|
x += spacing;
|
||||||
|
drawBtn(x, y, "Z+", (intptr_t)z_plus, imgUp, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step
|
||||||
|
|
||||||
|
// ROW 2 -> "Ex" X- HOME X+ "Z"
|
||||||
|
y += BTN_HEIGHT + (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3;
|
||||||
|
x = X_MARGIN;
|
||||||
|
spacing = (TFT_WIDTH - X_MARGIN * 2 - 5 * BTN_WIDTH) / 4;
|
||||||
|
|
||||||
|
motionAxisState.eNamePos.x = x;
|
||||||
|
motionAxisState.eNamePos.y = y;
|
||||||
|
drawCurESelection();
|
||||||
|
TERN_(HAS_TFT_XPT2046, if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, BTN_HEIGHT, (intptr_t)e_select));
|
||||||
|
|
||||||
|
x += BTN_WIDTH + spacing;
|
||||||
|
drawBtn(x, y, "X-", (intptr_t)x_minus, imgLeft, X_BTN_COLOR, !busy);
|
||||||
|
|
||||||
|
x += BTN_WIDTH + spacing; //imgHome is 64x64
|
||||||
|
TERN_(HAS_TFT_XPT2046, add_control(TFT_WIDTH / 2 - Images[imgHome].width / 2, y - (Images[imgHome].width - BTN_HEIGHT) / 2, BUTTON, (intptr_t)do_home, imgHome, !busy));
|
||||||
|
|
||||||
|
x += BTN_WIDTH + spacing;
|
||||||
|
uint16_t xplus_x = x;
|
||||||
|
drawBtn(x, y, "X+", (intptr_t)x_plus, imgRight, X_BTN_COLOR, !busy);
|
||||||
|
|
||||||
|
x += BTN_WIDTH + spacing;
|
||||||
|
motionAxisState.zTypePos.x = x;
|
||||||
|
motionAxisState.zTypePos.y = y;
|
||||||
|
drawCurZSelection();
|
||||||
|
#if BOTH(HAS_BED_PROBE, TOUCH_SCREEN)
|
||||||
|
if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, 34 * 2, (intptr_t)z_select);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ROW 3 -> E- CurX Y- Z-
|
||||||
|
y += BTN_HEIGHT + (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3;
|
||||||
|
x = X_MARGIN;
|
||||||
|
spacing = (TFT_WIDTH - X_MARGIN * 2 - 3 * BTN_WIDTH) / 2;
|
||||||
|
|
||||||
|
drawBtn(x, y, "E-", (intptr_t)e_minus, imgDown, E_BTN_COLOR, !busy);
|
||||||
|
|
||||||
|
// Cur E
|
||||||
|
motionAxisState.eValuePos.x = x;
|
||||||
|
motionAxisState.eValuePos.y = y + BTN_HEIGHT + 2;
|
||||||
|
drawAxisValue(E_AXIS);
|
||||||
|
|
||||||
|
// Cur X
|
||||||
|
motionAxisState.xValuePos.x = BTN_WIDTH + (TFT_WIDTH - X_MARGIN * 2 - 5 * BTN_WIDTH) / 4; //X- pos
|
||||||
|
motionAxisState.xValuePos.y = y - 10;
|
||||||
|
drawAxisValue(X_AXIS);
|
||||||
|
|
||||||
|
x += BTN_WIDTH + spacing;
|
||||||
|
drawBtn(x, y, "Y-", (intptr_t)y_minus, imgDown, Y_BTN_COLOR, !busy);
|
||||||
|
|
||||||
|
x += BTN_WIDTH + spacing;
|
||||||
|
drawBtn(x, y, "Z-", (intptr_t)z_minus, imgDown, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step
|
||||||
|
|
||||||
|
// Cur Z
|
||||||
|
motionAxisState.zValuePos.x = x;
|
||||||
|
motionAxisState.zValuePos.y = y + BTN_HEIGHT + 2;
|
||||||
|
drawAxisValue(Z_AXIS);
|
||||||
|
|
||||||
|
// ROW 4 -> step_size disable steppers back
|
||||||
|
y = TFT_HEIGHT - Y_MARGIN - BTN_HEIGHT; //
|
||||||
|
x = xplus_x - CUR_STEP_VALUE_WIDTH - 10;
|
||||||
|
motionAxisState.stepValuePos.x = yplus_x + BTN_WIDTH - CUR_STEP_VALUE_WIDTH;
|
||||||
|
motionAxisState.stepValuePos.y = TFT_HEIGHT - Y_MARGIN - BTN_HEIGHT;
|
||||||
|
if (!busy) {
|
||||||
|
drawCurStepValue();
|
||||||
|
TERN_(HAS_TFT_XPT2046, touch.add_control(BUTTON, motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, BTN_HEIGHT, (intptr_t)step_size));
|
||||||
|
}
|
||||||
|
|
||||||
|
// aligned with x+
|
||||||
|
drawBtn(xplus_x, y, "off", (intptr_t)disable_steppers, imgCancel, COLOR_WHITE, !busy);
|
||||||
|
|
||||||
|
#endif // !TFT_COLOR_UI_PORTRAIT
|
||||||
|
|
||||||
TERN_(HAS_TFT_XPT2046, add_control(TFT_WIDTH - X_MARGIN - BTN_WIDTH, y, BACK, imgBack));
|
TERN_(HAS_TFT_XPT2046, add_control(TFT_WIDTH - X_MARGIN - BTN_WIDTH, y, BACK, imgBack));
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,4 +44,6 @@
|
||||||
#define FONT_SIZE 10
|
#define FONT_SIZE 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define FONT_LINE_HEIGHT 24
|
||||||
|
|
||||||
#include "tft_font.h"
|
#include "tft_font.h"
|
||||||
|
|
|
@ -746,10 +746,8 @@ static void z_minus() { moveAxis(Z_AXIS, -1); }
|
||||||
|
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
static void e_select() {
|
static void e_select() {
|
||||||
motionAxisState.e_selection++;
|
if (++motionAxisState.e_selection >= EXTRUDERS)
|
||||||
if (motionAxisState.e_selection >= EXTRUDERS) {
|
|
||||||
motionAxisState.e_selection = 0;
|
motionAxisState.e_selection = 0;
|
||||||
}
|
|
||||||
|
|
||||||
quick_feedback();
|
quick_feedback();
|
||||||
drawCurESelection();
|
drawCurESelection();
|
||||||
|
@ -791,8 +789,8 @@ static void disable_steppers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) {
|
static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) {
|
||||||
uint16_t width = Images[imgBtn52Rounded].width;
|
uint16_t width = Images[imgBtn52Rounded].width,
|
||||||
uint16_t height = Images[imgBtn52Rounded].height;
|
height = Images[imgBtn52Rounded].height;
|
||||||
|
|
||||||
if (!enabled) bgColor = COLOR_CONTROL_DISABLED;
|
if (!enabled) bgColor = COLOR_CONTROL_DISABLED;
|
||||||
|
|
||||||
|
|
|
@ -49,19 +49,14 @@
|
||||||
#define TFT_MIRROR_X (TFT_INVERT_Y)
|
#define TFT_MIRROR_X (TFT_INVERT_Y)
|
||||||
#define TFT_MIRROR_Y (TFT_INVERT_X)
|
#define TFT_MIRROR_Y (TFT_INVERT_X)
|
||||||
|
|
||||||
#define TFT_ROTATE_90_MIRROR_X (TFT_ROTATE_90 ^ TFT_INVERT_Y)
|
#define TFT_ROTATE_90_MIRROR_X (TFT_ROTATE_90 ^ TFT_MIRROR_X)
|
||||||
#define TFT_ROTATE_90_MIRROR_Y (TFT_ROTATE_90 ^ TFT_INVERT_X)
|
#define TFT_ROTATE_90_MIRROR_Y (TFT_ROTATE_90 ^ TFT_MIRROR_Y)
|
||||||
|
|
||||||
#define TFT_ROTATE_180_MIRROR_X (TFT_ROTATE_180 ^ TFT_INVERT_Y)
|
#define TFT_ROTATE_180_MIRROR_X (TFT_ROTATE_180 ^ TFT_MIRROR_X)
|
||||||
#define TFT_ROTATE_180_MIRROR_Y (TFT_ROTATE_180 ^ TFT_INVERT_X)
|
#define TFT_ROTATE_180_MIRROR_Y (TFT_ROTATE_180 ^ TFT_MIRROR_Y)
|
||||||
|
|
||||||
#define TFT_ROTATE_270_MIRROR_X (TFT_ROTATE_270 ^ TFT_INVERT_Y)
|
#define TFT_ROTATE_270_MIRROR_X (TFT_ROTATE_270 ^ TFT_MIRROR_X)
|
||||||
#define TFT_ROTATE_270_MIRROR_Y (TFT_ROTATE_270 ^ TFT_INVERT_X)
|
#define TFT_ROTATE_270_MIRROR_Y (TFT_ROTATE_270 ^ TFT_MIRROR_Y)
|
||||||
|
|
||||||
// TFT_ROTATION is user configurable
|
|
||||||
#ifndef TFT_ROTATION
|
|
||||||
#define TFT_ROTATION TFT_NO_ROTATION
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// TFT_ORIENTATION is the "sum" of TFT_DEFAULT_ORIENTATION plus user TFT_ROTATION
|
// TFT_ORIENTATION is the "sum" of TFT_DEFAULT_ORIENTATION plus user TFT_ROTATION
|
||||||
#define TFT_ORIENTATION ((TFT_DEFAULT_ORIENTATION) ^ (TFT_ROTATION))
|
#define TFT_ORIENTATION ((TFT_DEFAULT_ORIENTATION) ^ (TFT_ROTATION))
|
||||||
|
|
|
@ -149,26 +149,27 @@
|
||||||
* If the screen stays white, disable 'LCD_RESET_PIN'
|
* If the screen stays white, disable 'LCD_RESET_PIN'
|
||||||
* to let the bootloader init the screen.
|
* to let the bootloader init the screen.
|
||||||
*/
|
*/
|
||||||
#if EITHER(HAS_FSMC_GRAPHICAL_TFT, TFT_320x240)
|
#if HAS_FSMC_TFT
|
||||||
#define FSMC_CS_PIN PD7 // NE4
|
|
||||||
#define FSMC_RS_PIN PD11 // A0
|
|
||||||
|
|
||||||
#define TFT_CS_PIN FSMC_CS_PIN
|
#define TFT_CS_PIN PD7 // NE4
|
||||||
#define TFT_RS_PIN FSMC_RS_PIN
|
#define TFT_RS_PIN PD11 // A0
|
||||||
|
#define LCD_RESET_PIN PC6 // FSMC_RST
|
||||||
|
#define LCD_BACKLIGHT_PIN PD13
|
||||||
|
|
||||||
|
#define FSMC_CS_PIN TFT_CS_PIN // NE4
|
||||||
|
#define FSMC_RS_PIN TFT_RS_PIN // A0
|
||||||
|
|
||||||
#define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT
|
#define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT
|
||||||
#define FSMC_DMA_DEV DMA2
|
#define FSMC_DMA_DEV DMA2
|
||||||
#define FSMC_DMA_CHANNEL DMA_CH5
|
#define FSMC_DMA_CHANNEL DMA_CH5
|
||||||
|
|
||||||
#define LCD_RESET_PIN PC6 // FSMC_RST
|
#if NEED_TOUCH_PINS
|
||||||
#define LCD_BACKLIGHT_PIN PD13
|
#define TOUCH_CS_PIN PC2 // SPI2_NSS
|
||||||
#endif
|
#define TOUCH_SCK_PIN PB13 // SPI2_SCK
|
||||||
|
#define TOUCH_MISO_PIN PB14 // SPI2_MISO
|
||||||
|
#define TOUCH_MOSI_PIN PB15 // SPI2_MOSI
|
||||||
|
#endif
|
||||||
|
|
||||||
#if BOTH(NEED_TOUCH_PINS, HAS_FSMC_GRAPHICAL_TFT) || ENABLED(TFT_320x240)
|
|
||||||
#define TOUCH_CS_PIN PC2 // SPI2_NSS
|
|
||||||
#define TOUCH_SCK_PIN PB13 // SPI2_SCK
|
|
||||||
#define TOUCH_MISO_PIN PB14 // SPI2_MISO
|
|
||||||
#define TOUCH_MOSI_PIN PB15 // SPI2_MOSI
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(TFT_320x240) // TFT32/28
|
#if ENABLED(TFT_320x240) // TFT32/28
|
||||||
|
|
|
@ -40,11 +40,10 @@ exec_test $1 $2 "MKS Robin v2 nano LVGL SPI w/ WiFi" "$3"
|
||||||
# (Robin v2 nano has no FSMC interface)
|
# (Robin v2 nano has no FSMC interface)
|
||||||
#
|
#
|
||||||
use_example_configs Mks/Robin
|
use_example_configs Mks/Robin
|
||||||
opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2
|
opt_set MOTHERBOARD BOARD_MKS_ROBIN_NANO_V2 TFT_ROTATION TFT_ROTATE_90
|
||||||
opt_disable TFT_INTERFACE_FSMC TFT_RES_320x240
|
opt_disable TFT_INTERFACE_FSMC
|
||||||
opt_enable TFT_INTERFACE_SPI TFT_RES_480x320
|
opt_enable TFT_INTERFACE_SPI BINARY_FILE_TRANSFER
|
||||||
opt_enable BINARY_FILE_TRANSFER
|
exec_test $1 $2 "MKS Robin v2 nano New Color UI 240x320 SPI + BINARY_FILE_TRANSFER" "$3"
|
||||||
exec_test $1 $2 "MKS Robin v2 nano New Color UI 480x320 SPI + BINARY_FILE_TRANSFER" "$3"
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# MKS Robin v2 nano LVGL SPI + TMC
|
# MKS Robin v2 nano LVGL SPI + TMC
|
||||||
|
|
Loading…
Reference in a new issue