From d8ed74904559aa8bdccc8b68acbccfbf1bf779d3 Mon Sep 17 00:00:00 2001
From: makerbase <4164049@qq.com>
Date: Mon, 21 Sep 2020 09:55:02 +0800
Subject: [PATCH] Add MKS Robin E3P, improve LVGL UI (#19442)
---
Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp | 2 +
Marlin/src/MarlinCore.cpp | 11 +
Marlin/src/core/boards.h | 73 +-
.../lcd/extui/lib/mks_ui/SPIFlashStorage.cpp | 2 +
Marlin/src/lcd/extui/lib/mks_ui/SPI_TFT.cpp | 5 +-
.../src/lcd/extui/lib/mks_ui/draw_about.cpp | 41 +-
.../lib/mks_ui/draw_acceleration_settings.cpp | 322 ++-
.../lib/mks_ui/draw_advance_settings.cpp | 234 +-
.../draw_auto_level_offset_settings.cpp | 203 ++
.../mks_ui/draw_auto_level_offset_settings.h | 33 +
.../extui/lib/mks_ui/draw_baby_stepping.cpp | 352 +++
.../lcd/extui/lib/mks_ui/draw_baby_stepping.h | 36 +
.../extui/lib/mks_ui/draw_change_speed.cpp | 83 +-
.../src/lcd/extui/lib/mks_ui/draw_dialog.cpp | 455 +++-
Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.h | 5 +
.../extui/lib/mks_ui/draw_eeprom_settings.cpp | 139 +-
.../lib/mks_ui/draw_encoder_settings.cpp | 172 ++
.../extui/lib/mks_ui/draw_encoder_settings.h | 33 +
.../lcd/extui/lib/mks_ui/draw_extrusion.cpp | 97 +-
Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp | 56 +-
.../extui/lib/mks_ui/draw_filament_change.cpp | 270 +++
.../extui/lib/mks_ui/draw_filament_change.h | 36 +
.../lib/mks_ui/draw_filament_settings.cpp | 329 +++
.../extui/lib/mks_ui/draw_filament_settings.h | 33 +
Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp | 137 +-
.../draw_homing_sensitivity_settings.cpp | 262 +++
.../mks_ui/draw_homing_sensitivity_settings.h | 33 +
.../extui/lib/mks_ui/draw_jerk_settings.cpp | 150 +-
.../lcd/extui/lib/mks_ui/draw_keyboard.cpp | 286 +++
.../src/lcd/extui/lib/mks_ui/draw_keyboard.h | 33 +
.../lcd/extui/lib/mks_ui/draw_language.cpp | 136 +-
.../extui/lib/mks_ui/draw_level_settings.cpp | 261 +++
.../extui/lib/mks_ui/draw_level_settings.h | 33 +
.../extui/lib/mks_ui/draw_machine_para.cpp | 114 +-
.../lib/mks_ui/draw_machine_settings.cpp | 81 +-
.../lcd/extui/lib/mks_ui/draw_manuaLevel.cpp | 69 +-
.../mks_ui/draw_manual_level_pos_settings.cpp | 459 ++++
.../mks_ui/draw_manual_level_pos_settings.h | 33 +
.../lib/mks_ui/draw_max_feedrate_settings.cpp | 212 +-
.../extui/lib/mks_ui/draw_motor_settings.cpp | 160 +-
.../lcd/extui/lib/mks_ui/draw_move_motor.cpp | 87 +-
.../lcd/extui/lib/mks_ui/draw_number_key.cpp | 291 ++-
.../lcd/extui/lib/mks_ui/draw_operation.cpp | 261 ++-
.../extui/lib/mks_ui/draw_pause_position.cpp | 120 +-
.../src/lcd/extui/lib/mks_ui/draw_preHeat.cpp | 97 +-
.../lcd/extui/lib/mks_ui/draw_print_file.cpp | 103 +-
.../lcd/extui/lib/mks_ui/draw_print_file.h | 3 +-
.../lcd/extui/lib/mks_ui/draw_printing.cpp | 195 +-
.../lcd/extui/lib/mks_ui/draw_ready_print.cpp | 122 +-
Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp | 249 ++-
.../extui/lib/mks_ui/draw_step_settings.cpp | 216 +-
.../lib/mks_ui/draw_tmc_current_settings.cpp | 389 ++--
.../mks_ui/draw_tmc_step_mode_settings.cpp | 456 ++--
Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp | 171 +-
Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp | 495 +++--
Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h | 168 +-
Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.cpp | 222 ++
Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.h | 38 +
.../lcd/extui/lib/mks_ui/draw_wifi_list.cpp | 235 ++
.../src/lcd/extui/lib/mks_ui/draw_wifi_list.h | 76 +
.../extui/lib/mks_ui/draw_wifi_settings.cpp | 299 +++
.../lcd/extui/lib/mks_ui/draw_wifi_settings.h | 36 +
.../lcd/extui/lib/mks_ui/draw_wifi_tips.cpp | 85 +
.../src/lcd/extui/lib/mks_ui/draw_wifi_tips.h | 51 +
.../src/lcd/extui/lib/mks_ui/irq_overrid.cpp | 69 +
.../extui/lib/mks_ui/mks_hardware_test.cpp | 100 +-
.../src/lcd/extui/lib/mks_ui/pic_manager.cpp | 174 +-
Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h | 13 +-
.../extui/lib/mks_ui/printer_operation.cpp | 44 +-
.../lcd/extui/lib/mks_ui/tft_Language_en.h | 54 +-
.../lcd/extui/lib/mks_ui/tft_Language_fr.h | 5 -
.../lcd/extui/lib/mks_ui/tft_Language_it.h | 5 -
.../lcd/extui/lib/mks_ui/tft_Language_ru.h | 5 -
.../lcd/extui/lib/mks_ui/tft_Language_s_cn.h | 52 +-
.../lcd/extui/lib/mks_ui/tft_Language_sp.h | 5 -
.../lcd/extui/lib/mks_ui/tft_Language_t_cn.h | 51 +-
.../lib/mks_ui/tft_lvgl_configuration.cpp | 880 +++++---
.../extui/lib/mks_ui/tft_lvgl_configuration.h | 51 +-
.../extui/lib/mks_ui/tft_multi_language.cpp | 291 +--
.../lcd/extui/lib/mks_ui/tft_multi_language.h | 75 +-
.../src/lcd/extui/lib/mks_ui/wifiSerial.cpp | 120 +
Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.h | 102 +
.../src/lcd/extui/lib/mks_ui/wifi_module.cpp | 1927 +++++++++++++++++
Marlin/src/lcd/extui/lib/mks_ui/wifi_module.h | 202 ++
.../src/lcd/extui/lib/mks_ui/wifi_upload.cpp | 847 ++++++++
Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.h | 74 +
Marlin/src/module/stepper.h | 14 +-
Marlin/src/pins/pins.h | 2 +
Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h | 377 ++++
Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h | 38 +-
.../src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 48 +-
.../PlatformIO/ldscripts/mks_robin_e3p.ld | 14 +
.../share/PlatformIO/scripts/mks_robin_e3p.py | 40 +
platformio.ini | 18 +-
94 files changed, 12673 insertions(+), 2970 deletions(-)
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/irq_overrid.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/wifi_module.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/wifi_module.h
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.cpp
create mode 100644 Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.h
create mode 100644 Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h
create mode 100644 buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld
create mode 100644 buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
diff --git a/Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp b/Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp
index bc1b012dc7..069be7ad54 100644
--- a/Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp
+++ b/Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp
@@ -201,6 +201,8 @@ uint32_t TFT_FSMC::GetID() {
id = ReadID(LCD_READ_ID);
if ((id & 0xFFFF) == 0 || (id & 0xFFFF) == 0xFFFF)
id = ReadID(LCD_READ_ID4);
+ if ((id & 0xFF00) == 0 && (id & 0xFF) != 0)
+ id = ReadID(LCD_READ_ID4);
return id;
}
diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp
index 2927a3e40b..22935c1460 100644
--- a/Marlin/src/MarlinCore.cpp
+++ b/Marlin/src/MarlinCore.cpp
@@ -796,6 +796,10 @@ void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr
UNUSED(lcd_component);
#endif
+ #if HAS_TFT_LVGL_UI
+ lv_draw_error_message(lcd_error);
+ #endif
+
#ifdef ACTION_ON_KILL
host_action_kill();
#endif
@@ -920,6 +924,13 @@ void setup() {
SERIAL_ECHO_MSG("start");
#endif
+ #if BOTH(HAS_TFT_LVGL_UI, USE_WIFI_FUNCTION)
+ mks_esp_wifi_init();
+ WIFISERIAL.begin(WIFI_BAUDRATE);
+ serial_connect_timeout = millis() + 1000UL;
+ while (/*!WIFISERIAL && */PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
+ #endif
+
SETUP_RUN(HAL_init());
#if HAS_L64XX
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index 581c801feb..293c6a5230 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -282,42 +282,43 @@
// STM32 ARM Cortex-M3
//
-#define BOARD_STM32F103RE 4000 // STM32F103RE Libmaple-based STM32F1 controller
-#define BOARD_MALYAN_M200 4001 // STM32C8T6 Libmaple-based STM32F1 controller
-#define BOARD_MALYAN_M200_V2 4002 // STM32F070CB STM32F0 controller
-#define BOARD_STM3R_MINI 4003 // STM32F103RE Libmaple-based STM32F1 controller
-#define BOARD_GTM32_PRO_VB 4004 // STM32F103VET6 controller
-#define BOARD_MORPHEUS 4005 // STM32F103C8 / STM32F103CB Libmaple-based STM32F1 controller
-#define BOARD_CHITU3D 4006 // Chitu3D (STM32F103RET6)
-#define BOARD_MKS_ROBIN 4007 // MKS Robin (STM32F103ZET6)
-#define BOARD_MKS_ROBIN_MINI 4008 // MKS Robin Mini (STM32F103VET6)
-#define BOARD_MKS_ROBIN_NANO 4009 // MKS Robin Nano (STM32F103VET6)
-#define BOARD_MKS_ROBIN_NANO_V2 4010 // MKS Robin Nano V2 (STM32F103VET6)
-#define BOARD_MKS_ROBIN_LITE 4011 // MKS Robin Lite/Lite2 (STM32F103RCT6)
-#define BOARD_MKS_ROBIN_LITE3 4012 // MKS Robin Lite3 (STM32F103RCT6)
-#define BOARD_MKS_ROBIN_PRO 4013 // MKS Robin Pro (STM32F103ZET6)
-#define BOARD_BTT_SKR_MINI_V1_1 4014 // BigTreeTech SKR Mini v1.1 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V1_0 4015 // BigTreeTech SKR Mini E3 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V1_2 4016 // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V2_0 4017 // BigTreeTech SKR Mini E3 V2.0 (STM32F103RC)
-#define BOARD_BTT_SKR_E3_DIP 4018 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE)
-#define BOARD_JGAURORA_A5S_A1 4019 // JGAurora A5S A1 (STM32F103ZET6)
-#define BOARD_FYSETC_AIO_II 4020 // FYSETC AIO_II
-#define BOARD_FYSETC_CHEETAH 4021 // FYSETC Cheetah
-#define BOARD_FYSETC_CHEETAH_V12 4022 // FYSETC Cheetah V1.2
-#define BOARD_LONGER3D_LK 4023 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6
-#define BOARD_GTM32_MINI 4024 // STM32F103VET6 controller
-#define BOARD_GTM32_MINI_A30 4025 // STM32F103VET6 controller
-#define BOARD_GTM32_REV_B 4026 // STM32F103VET6 controller
-#define BOARD_MKS_ROBIN_E3D 4027 // MKS Robin E3D (STM32F103RCT6)
-#define BOARD_MKS_ROBIN_E3 4028 // MKS Robin E3 (STM32F103RCT6)
-#define BOARD_MALYAN_M300 4029 // STM32F070-based delta
-#define BOARD_CCROBOT_MEEB_3DP 4030 // ccrobot-online.com MEEB_3DP (STM32F103RC)
-#define BOARD_CHITU3D_V5 4031 // Chitu3D TronXY X5SA V5 Board
-#define BOARD_CHITU3D_V6 4032 // Chitu3D TronXY X5SA V5 Board
-#define BOARD_CREALITY_V4 4033 // Creality v4.x (STM32F103RE)
-#define BOARD_CREALITY_V427 4034 // Creality v4.2.7 (STM32F103RE)
-#define BOARD_TRIGORILLA_PRO 4035 // Trigorilla Pro (STM32F103ZET6)
+#define BOARD_MALYAN_M200_V2 4000 // STM32F070CB STM32F0 controller
+#define BOARD_MALYAN_M300 4001 // STM32F070-based delta
+#define BOARD_STM32F103RE 4002 // STM32F103RE Libmaple-based STM32F1 controller
+#define BOARD_MALYAN_M200 4003 // STM32C8T6 Libmaple-based STM32F1 controller
+#define BOARD_STM3R_MINI 4004 // STM32F103RE Libmaple-based STM32F1 controller
+#define BOARD_GTM32_PRO_VB 4005 // STM32F103VET6 controller
+#define BOARD_GTM32_MINI 4006 // STM32F103VET6 controller
+#define BOARD_GTM32_MINI_A30 4007 // STM32F103VET6 controller
+#define BOARD_GTM32_REV_B 4008 // STM32F103VET6 controller
+#define BOARD_MORPHEUS 4009 // STM32F103C8 / STM32F103CB Libmaple-based STM32F1 controller
+#define BOARD_CHITU3D 4010 // Chitu3D (STM32F103RET6)
+#define BOARD_MKS_ROBIN 4011 // MKS Robin (STM32F103ZET6)
+#define BOARD_MKS_ROBIN_MINI 4012 // MKS Robin Mini (STM32F103VET6)
+#define BOARD_MKS_ROBIN_NANO 4013 // MKS Robin Nano (STM32F103VET6)
+#define BOARD_MKS_ROBIN_NANO_V2 4014 // MKS Robin Nano V2 (STM32F103VET6)
+#define BOARD_MKS_ROBIN_LITE 4015 // MKS Robin Lite/Lite2 (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_LITE3 4016 // MKS Robin Lite3 (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_PRO 4017 // MKS Robin Pro (STM32F103ZET6)
+#define BOARD_MKS_ROBIN_E3 4018 // MKS Robin E3 (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_E3D 4019 // MKS Robin E3D (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_E3P 4020 // MKS Robin E3p (STM32F103VET6)
+#define BOARD_BTT_SKR_MINI_V1_1 4021 // BigTreeTech SKR Mini v1.1 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V1_0 4022 // BigTreeTech SKR Mini E3 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V1_2 4023 // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V2_0 4024 // BigTreeTech SKR Mini E3 V2.0 (STM32F103RC)
+#define BOARD_BTT_SKR_E3_DIP 4025 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE)
+#define BOARD_JGAURORA_A5S_A1 4026 // JGAurora A5S A1 (STM32F103ZET6)
+#define BOARD_FYSETC_AIO_II 4027 // FYSETC AIO_II
+#define BOARD_FYSETC_CHEETAH 4028 // FYSETC Cheetah
+#define BOARD_FYSETC_CHEETAH_V12 4029 // FYSETC Cheetah V1.2
+#define BOARD_LONGER3D_LK 4030 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6
+#define BOARD_CCROBOT_MEEB_3DP 4031 // ccrobot-online.com MEEB_3DP (STM32F103RC)
+#define BOARD_CHITU3D_V5 4032 // Chitu3D TronXY X5SA V5 Board
+#define BOARD_CHITU3D_V6 4033 // Chitu3D TronXY X5SA V5 Board
+#define BOARD_CREALITY_V4 4034 // Creality v4.x (STM32F103RE)
+#define BOARD_CREALITY_V427 4035 // Creality v4.2.7 (STM32F103RE)
+#define BOARD_TRIGORILLA_PRO 4036 // Trigorilla Pro (STM32F103ZET6)
//
// ARM Cortex-M4F
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/SPIFlashStorage.cpp b/Marlin/src/lcd/extui/lib/mks_ui/SPIFlashStorage.cpp
index ad116d5045..3f57124451 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/SPIFlashStorage.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/SPIFlashStorage.cpp
@@ -27,6 +27,8 @@
#include "../../../../inc/MarlinConfig.h"
#include "SPIFlashStorage.h"
+extern W25QXXFlash W25QXX;
+
uint8_t SPIFlashStorage::m_pageData[SPI_FLASH_PageSize];
uint32_t SPIFlashStorage::m_currentPage;
uint16_t SPIFlashStorage::m_pageDataUsed;
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/SPI_TFT.cpp b/Marlin/src/lcd/extui/lib/mks_ui/SPI_TFT.cpp
index ea94d6c1a5..351d033d01 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/SPI_TFT.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/SPI_TFT.cpp
@@ -26,6 +26,7 @@
#include "SPI_TFT.h"
#include "pic_manager.h"
+#include "tft_lvgl_configuration.h"
#include "../../../../inc/MarlinConfig.h"
@@ -74,6 +75,7 @@ void TFT::SetWindows(uint16_t x, uint16_t y, uint16_t with, uint16_t height) {
}
void TFT::LCD_init() {
+ TFT_BLK_L;
TFT_RST_H;
delay(150);
TFT_RST_L;
@@ -92,8 +94,7 @@ void TFT::LCD_init() {
LCD_WR_DATA(0x96);
LCD_WR_REG(0x36);
- LCD_WR_DATA(0x28);
-
+ LCD_WR_DATA(0x28 + TERN0(GRAPHICAL_TFT_ROTATE_180, 0x80));
LCD_WR_REG(0x3A);
LCD_WR_DATA(0x55);
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp
index e2df14a36b..34b7427860 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp
@@ -33,8 +33,9 @@
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
-static lv_obj_t * fw_type, *board, *fw_version;
+static lv_obj_t * fw_type, *board; //*fw_version;
#define ID_A_RETURN 1
@@ -73,17 +74,18 @@ void lv_draw_about(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
// Create an Image button
buttonBack = lv_imgbtn_create(scr, NULL);
#if 1
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_A_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_A_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
#endif
lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
@@ -97,30 +99,27 @@ void lv_draw_about(void) {
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
- fw_version = lv_label_create(scr, NULL);
- lv_obj_set_style(fw_version, &tft_style_label_rel);
- lv_label_set_text(fw_version, SHORT_BUILD_VERSION);
- lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60);
+ //fw_version = lv_label_create(scr, NULL);
+ //lv_obj_set_style(fw_version, &tft_style_label_rel);
+ //lv_label_set_text(fw_version, SHORT_BUILD_VERSION);
+ //lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60);
fw_type = lv_label_create(scr, NULL);
lv_obj_set_style(fw_type, &tft_style_label_rel);
- lv_label_set_text(fw_type,
- #if MB(MKS_ROBIN_PRO)
- "Firmware: Robin_Pro35"
- #elif MB(MKS_ROBIN_NANO, MKS_ROBIN_NANO_V2)
- "Firmware: Robin_Nano35"
- #else
- CUSTOM_MACHINE_NAME
- #endif
- );
+ lv_label_set_text(fw_type, "Firmware: Marlin " SHORT_BUILD_VERSION);
lv_obj_align(fw_type, NULL, LV_ALIGN_CENTER, 0, -20);
board = lv_label_create(scr, NULL);
lv_obj_set_style(board, &tft_style_label_rel);
lv_label_set_text(board, "Board: " BOARD_INFO_NAME);
- lv_obj_align(board, NULL, LV_ALIGN_CENTER, 0, 20);
+ lv_obj_align(board, NULL, LV_ALIGN_CENTER, 0, -60);
}
-void lv_clear_about() { lv_obj_del(scr); }
+void lv_clear_about() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_acceleration_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_acceleration_settings.cpp
index b6906a6dfe..a30c99dba0 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_acceleration_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_acceleration_settings.cpp
@@ -29,6 +29,7 @@
#include "../../../../MarlinCore.h"
#include "../../../../module/planner.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_ACCE_RETURN 1
@@ -160,14 +161,14 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_acceleration_settings(void) {
lv_obj_t *buttonBack = NULL, *label_Back = NULL, *buttonTurnPage = NULL, *labelTurnPage = NULL;
- lv_obj_t *buttonPrintText = NULL, *labelPrintText = NULL, *buttonPrintValue = NULL, *labelPrintValue = NULL;
- lv_obj_t *buttonRetraText = NULL, *labelRetraText = NULL, *buttonRetraValue = NULL, *labelRetraValue = NULL;
- lv_obj_t *buttonTravelText = NULL, *labelTravelText = NULL, *buttonTravelValue = NULL, *labelTravelValue = NULL;
- lv_obj_t *buttonXText = NULL, *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
- lv_obj_t *buttonYText = NULL, *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
- lv_obj_t *buttonZText = NULL, *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
- lv_obj_t *buttonE0Text = NULL, *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
- lv_obj_t *buttonE1Text = NULL, *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
+ lv_obj_t *labelPrintText = NULL, *buttonPrintValue = NULL, *labelPrintValue = NULL;
+ lv_obj_t *labelRetraText = NULL, *buttonRetraValue = NULL, *labelRetraValue = NULL;
+ lv_obj_t *labelTravelText = NULL, *buttonTravelValue = NULL, *labelTravelValue = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
+ lv_obj_t *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ACCELERATION_UI) {
disp_state_stack._disp_index++;
@@ -188,231 +189,202 @@ void lv_draw_acceleration_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- // LV_IMG_DECLARE(bmp_para_arrow);
- LV_IMG_DECLARE(bmp_para_bank);
-
if (uiCfg.para_ui_page != 1) {
- buttonPrintText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonPrintText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonPrintText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonPrintText, event_handler);
- lv_btn_set_style(buttonPrintText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonPrintText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonPrintText, LV_LAYOUT_OFF);
- labelPrintText = lv_label_create(buttonPrintText, NULL); /*Add a label to the button*/
-
- buttonPrintValue = lv_imgbtn_create(scr, NULL);
+
+ labelPrintText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelPrintText, &tft_style_label_rel);
+ lv_obj_set_pos(labelPrintText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelPrintText, machine_menu.PrintAcceleration);
+
+ buttonPrintValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonPrintValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonPrintValue, event_handler, ID_ACCE_PRINT, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonPrintValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonPrintValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonPrintValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonPrintValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonPrintValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonPrintValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonPrintValue, event_handler, ID_ACCE_PRINT, NULL, 0);
+ lv_btn_set_style(buttonPrintValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonPrintValue, LV_BTN_STYLE_PR, &style_para_value);
labelPrintValue = lv_label_create(buttonPrintValue, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonRetraText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonRetraText, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonRetraText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonRetraText, event_handler);
- lv_btn_set_style(buttonRetraText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonRetraText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonRetraText, LV_LAYOUT_OFF);
- labelRetraText = lv_label_create(buttonRetraText, NULL); /*Add a label to the button*/
+ labelRetraText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelRetraText, &tft_style_label_rel);
+ lv_obj_set_pos(labelRetraText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelRetraText, machine_menu.RetractAcceleration);
- buttonRetraValue = lv_imgbtn_create(scr, NULL);
+ buttonRetraValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonRetraValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonRetraValue, event_handler, ID_ACCE_RETRA, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonRetraValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonRetraValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonRetraValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonRetraValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonRetraValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonRetraValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonRetraValue, event_handler, ID_ACCE_RETRA, NULL, 0);
+ lv_btn_set_style(buttonRetraValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonRetraValue, LV_BTN_STYLE_PR, &style_para_value);
labelRetraValue = lv_label_create(buttonRetraValue, NULL);
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
- buttonTravelText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonTravelText, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonTravelText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonTravelText, event_handler);
- lv_btn_set_style(buttonTravelText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonTravelText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonTravelText, LV_LAYOUT_OFF);
- labelTravelText = lv_label_create(buttonTravelText, NULL); /*Add a label to the button*/
+ labelTravelText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelTravelText, &tft_style_label_rel);
+ lv_obj_set_pos(labelTravelText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelTravelText, machine_menu.TravelAcceleration);
- buttonTravelValue = lv_imgbtn_create(scr, NULL);
+ buttonTravelValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonTravelValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonTravelValue, event_handler, ID_ACCE_TRAVEL, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonTravelValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonTravelValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonTravelValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonTravelValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonTravelValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonTravelValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonTravelValue, event_handler, ID_ACCE_TRAVEL, NULL, 0);
+ lv_btn_set_style(buttonTravelValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonTravelValue, LV_BTN_STYLE_PR, &style_para_value);
labelTravelValue = lv_label_create(buttonTravelValue, NULL);
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
- buttonXText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y * 4); /*Set its position*/
- lv_obj_set_size(buttonXText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonXText, event_handler);
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonXText, LV_LAYOUT_OFF);
- labelXText = lv_label_create(buttonXText, NULL); /*Add a label to the button*/
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelXText, machine_menu.X_Acceleration);
- buttonXValue = lv_imgbtn_create(scr, NULL);
+ buttonXValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_ACCE_X, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonXValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_ACCE_X, NULL, 0);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
labelXValue = lv_label_create(buttonXValue, NULL);
line4 = lv_line_create(scr, NULL);
lv_ex_line(line4, line_points[3]);
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_DOWN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_DOWN, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonPrintValue);
+ lv_group_add_obj(g, buttonRetraValue);
+ lv_group_add_obj(g, buttonTravelValue);
+ lv_group_add_obj(g, buttonXValue);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
}
else {
- buttonYText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonYText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonYText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonYText, event_handler);
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonYText, LV_LAYOUT_OFF);
- labelYText = lv_label_create(buttonYText, NULL); /*Add a label to the button*/
-
- buttonYValue = lv_imgbtn_create(scr, NULL);
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelYText, machine_menu.Y_Acceleration);
+
+ buttonYValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonYValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
labelYValue = lv_label_create(buttonYValue, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonZText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonZText, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonZText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonZText, event_handler);
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonZText, LV_LAYOUT_OFF);
- labelZText = lv_label_create(buttonZText, NULL); /*Add a label to the button*/
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelZText, machine_menu.Z_Acceleration);
- buttonZValue = lv_imgbtn_create(scr, NULL);
+ buttonZValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_ACCE_Z, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonZValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE); lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_ACCE_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
labelZValue = lv_label_create(buttonZValue, NULL);
+
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
- buttonE0Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonE0Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE0Text, event_handler);
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE0Text, LV_LAYOUT_OFF);
- labelE0Text = lv_label_create(buttonE0Text, NULL); /*Add a label to the button*/
+ labelE0Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE0Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelE0Text, machine_menu.E0_Acceleration);
- buttonE0Value = lv_imgbtn_create(scr, NULL);
+ buttonE0Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE0Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_ACCE_E0, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonE0Value, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonE0Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE); lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+ lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_ACCE_E0, NULL, 0);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_PR, &style_para_value);
labelE0Value = lv_label_create(buttonE0Value, NULL);
+
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
- buttonE1Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE1Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4); /*Set its position*/
- lv_obj_set_size(buttonE1Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE1Text, event_handler);
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE1Text, LV_LAYOUT_OFF);
- labelE1Text = lv_label_create(buttonE1Text, NULL); /*Add a label to the button*/
+ labelE1Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE1Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE1Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelE1Text, machine_menu.E1_Acceleration);
- buttonE1Value = lv_imgbtn_create(scr, NULL);
+ buttonE1Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE1Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_ACCE_E1, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonE1Value, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonE1Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE); lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+ lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_ACCE_E1, NULL, 0);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_PR, &style_para_value);
labelE1Value = lv_label_create(buttonE1Value, NULL);
+
line4 = lv_line_create(scr, NULL);
lv_ex_line(line4, line_points[3]);
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_UP, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_UP, NULL, 0);
+ //lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ //lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+ //lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
+ //lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonYValue);
+ lv_group_add_obj(g, buttonZValue);
+ lv_group_add_obj(g, buttonE0Value);
+ lv_group_add_obj(g, buttonE1Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
}
+ //lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
+ //lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
+ //labelTurnPage = lv_label_create(buttonTurnPage, NULL);
lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
- lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonTurnPage, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
labelTurnPage = lv_label_create(buttonTurnPage, NULL);
- buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ACCE_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
-
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ACCE_RETURN, NULL, 0);
+ //lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ //lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+ //lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ //lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
- lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
label_Back = lv_label_create(buttonBack, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
+ //lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ //lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
if (gCfgItems.multiple_language != 0) {
if (uiCfg.para_ui_page != 1) {
- lv_label_set_text(labelPrintText, machine_menu.PrintAcceleration);
- lv_obj_align(labelPrintText, buttonPrintText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelRetraText, machine_menu.RetractAcceleration);
- lv_obj_align(labelRetraText, buttonRetraText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelTravelText, machine_menu.TravelAcceleration);
- lv_obj_align(labelTravelText, buttonTravelText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelXText, machine_menu.X_Acceleration);
- lv_obj_align(labelXText, buttonXText, LV_ALIGN_IN_LEFT_MID, 0, 0);
lv_label_set_text(labelTurnPage, machine_menu.next);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -438,17 +410,6 @@ void lv_draw_acceleration_settings(void) {
lv_obj_align(labelXValue, buttonXValue, LV_ALIGN_CENTER, 0, 0);
}
else {
- lv_label_set_text(labelYText, machine_menu.Y_Acceleration);
- lv_obj_align(labelYText, buttonYText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelZText, machine_menu.Z_Acceleration);
- lv_obj_align(labelZText, buttonZText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelE0Text, machine_menu.E0_Acceleration);
- lv_obj_align(labelE0Text, buttonE0Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelE1Text, machine_menu.E1_Acceleration);
- lv_obj_align(labelE1Text, buttonE1Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
lv_label_set_text(labelTurnPage, machine_menu.previous);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -478,6 +439,11 @@ void lv_draw_acceleration_settings(void) {
}
}
-void lv_clear_acceleration_settings() { lv_obj_del(scr); }
+void lv_clear_acceleration_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_advance_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_advance_settings.cpp
index 7d3eab436b..5b1b241716 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_advance_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_advance_settings.cpp
@@ -28,11 +28,18 @@
#include "../../../../MarlinCore.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
-#define ID_ADVANCE_RETURN 1
-#define ID_PAUSE_POS 2
-#define ID_PAUSE_POS_ARROW 3
+#define ID_ADVANCE_RETURN 1
+#define ID_PAUSE_POS 2
+#define ID_PAUSE_POS_ARROW 3
+#define ID_WIFI_PARA 4
+#define ID_WIFI_PARA_ARROW 5
+#define ID_FILAMENT_SETTINGS 6
+#define ID_FILAMENT_SETTINGS_ARROW 7
+#define ID_ENCODER_SETTINGS 8
+#define ID_ENCODER_SETTINGS_ARROW 9
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
@@ -63,13 +70,79 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
lv_draw_pause_position();
}
break;
+ case ID_FILAMENT_SETTINGS:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_advance_settings();
+ lv_draw_filament_settings();
+ }
+ break;
+ case ID_FILAMENT_SETTINGS_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_advance_settings();
+ lv_draw_filament_settings();
+ }
+ break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case ID_WIFI_PARA:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_advance_settings();
+ lv_draw_wifi_settings();
+ }
+ break;
+ case ID_WIFI_PARA_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_advance_settings();
+ lv_draw_wifi_settings();
+ }
+ break;
+ #endif
+ #if HAS_ROTARY_ENCODER
+ case ID_ENCODER_SETTINGS:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_advance_settings();
+ lv_draw_encoder_settings();
+ }
+ break;
+ case ID_ENCODER_SETTINGS_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_advance_settings();
+ lv_draw_encoder_settings();
+ }
+ break;
+ #endif
}
}
void lv_draw_advance_settings(void) {
lv_obj_t *buttonBack, *label_Back;
lv_obj_t *buttonPausePos, *labelPausePos, *buttonPausePosNarrow;
- lv_obj_t * line1;
+ lv_obj_t *buttonFilamentSettings, *labelFilamentSettings, *buttonFilamentSettingsNarrow;
+ lv_obj_t * line1,* line2;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_obj_t *buttonWifiSet,*labelWifiSet,*buttonWifiSetNarrow;
+ #endif
+ #if HAS_ROTARY_ENCODER
+ lv_obj_t *buttonEcoder,*labelEcoder,*buttonEcoderNarrow;
+ #endif
+
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ADVANCED_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = ADVANCED_UI;
@@ -89,24 +162,24 @@ void lv_draw_advance_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- LV_IMG_DECLARE(bmp_para_arrow);
-
- buttonPausePos = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonPausePos, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonPausePos, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ buttonPausePos = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonPausePos, PARA_UI_POS_X, PARA_UI_POS_Y);
+ lv_obj_set_size(buttonPausePos, PARA_UI_SIZE_X, PARA_UI_SIZE_Y);
//lv_obj_set_event_cb(buttonMachine, event_handler);
lv_obj_set_event_cb_mks(buttonPausePos, event_handler, ID_PAUSE_POS, NULL, 0);
- lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_PR, &tft_style_label_pre);
lv_btn_set_layout(buttonPausePos, LV_LAYOUT_OFF);
- labelPausePos = lv_label_create(buttonPausePos, NULL); /*Add a label to the button*/
+ labelPausePos = lv_label_create(buttonPausePos, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonPausePos);
+ #endif
buttonPausePosNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonPausePosNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonPausePosNarrow, event_handler, ID_PAUSE_POS_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonPausePosNarrow, event_handler, ID_PAUSE_POS_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonPausePosNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPausePosNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonPausePosNarrow, LV_LAYOUT_OFF);
@@ -114,13 +187,117 @@ void lv_draw_advance_settings(void) {
line1 = lv_line_create(lv_scr_act(), NULL);
lv_ex_line(line1, line_points[0]);
+ buttonFilamentSettings = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonFilamentSettings, PARA_UI_POS_X, PARA_UI_POS_Y*2);
+ lv_obj_set_size(buttonFilamentSettings, PARA_UI_SIZE_X, PARA_UI_SIZE_Y);
+ lv_obj_set_event_cb_mks(buttonFilamentSettings, event_handler, ID_FILAMENT_SETTINGS, NULL, 0);
+ lv_btn_set_style(buttonFilamentSettings, LV_BTN_STYLE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonFilamentSettings, LV_BTN_STYLE_PR, &tft_style_label_pre);
+ lv_btn_set_layout(buttonFilamentSettings, LV_LAYOUT_OFF);
+ labelFilamentSettings = lv_label_create(buttonFilamentSettings, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonFilamentSettings);
+ #endif
+
+ buttonFilamentSettingsNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonFilamentSettingsNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y*2 + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonFilamentSettingsNarrow, event_handler, ID_FILAMENT_SETTINGS_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonFilamentSettingsNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonFilamentSettingsNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonFilamentSettingsNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonFilamentSettingsNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonFilamentSettingsNarrow, LV_LAYOUT_OFF);
+
+ line2 = lv_line_create(lv_scr_act(), NULL);
+ lv_ex_line(line2, line_points[1]);
+
+ #if ENABLED(USE_WIFI_FUNCTION)
+
+ buttonWifiSet = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonWifiSet, PARA_UI_POS_X,PARA_UI_POS_Y*3);
+ lv_obj_set_size(buttonWifiSet, PARA_UI_SIZE_X,PARA_UI_SIZE_Y);
+ lv_obj_set_event_cb_mks(buttonWifiSet, event_handler,ID_WIFI_PARA,NULL,0);
+ lv_btn_set_style(buttonWifiSet, LV_BTN_STYLE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonWifiSet, LV_BTN_STYLE_PR, &tft_style_label_pre);
+ lv_btn_set_layout(buttonWifiSet, LV_LAYOUT_OFF);
+ labelWifiSet = lv_label_create(buttonWifiSet, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonWifiSet);
+ #endif
+
+ buttonWifiSetNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonWifiSetNarrow,PARA_UI_POS_X+PARA_UI_SIZE_X,PARA_UI_POS_Y*3+PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonWifiSetNarrow, event_handler,ID_WIFI_PARA_ARROW, NULL,0);
+ lv_imgbtn_set_src(buttonWifiSetNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonWifiSetNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonWifiSetNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonWifiSetNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonWifiSetNarrow, LV_LAYOUT_OFF);
+
+ lv_obj_t * line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3,line_points[2]);
+
+ #if HAS_ROTARY_ENCODER
+ buttonEcoder = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonEcoder, PARA_UI_POS_X,PARA_UI_POS_Y*4);
+ lv_obj_set_size(buttonEcoder, PARA_UI_SIZE_X,PARA_UI_SIZE_Y);
+ lv_obj_set_event_cb_mks(buttonEcoder, event_handler,ID_ENCODER_SETTINGS,NULL,0);
+ lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_PR, &tft_style_label_pre);
+ lv_btn_set_layout(buttonEcoder, LV_LAYOUT_OFF);
+ labelEcoder = lv_label_create(buttonEcoder, NULL);
+
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonEcoder);
+
+ buttonEcoderNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonEcoderNarrow,PARA_UI_POS_X+PARA_UI_SIZE_X,PARA_UI_POS_Y*4+PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonEcoderNarrow, event_handler,ID_ENCODER_SETTINGS_ARROW, NULL,0);
+ lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonEcoderNarrow, LV_LAYOUT_OFF);
+
+ lv_obj_t * line4 = lv_line_create(scr, NULL);
+ lv_ex_line(line4,line_points[3]);
+ #endif
+
+ #elif HAS_ROTARY_ENCODER
+ buttonEcoder = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonEcoder, PARA_UI_POS_X,PARA_UI_POS_Y*3);
+ lv_obj_set_size(buttonEcoder, PARA_UI_SIZE_X,PARA_UI_SIZE_Y);
+ lv_obj_set_event_cb_mks(buttonEcoder, event_handler,ID_ENCODER_SETTINGS,NULL,0);
+ lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_PR, &tft_style_label_pre);
+ lv_btn_set_layout(buttonEcoder, LV_LAYOUT_OFF);
+ labelEcoder = lv_label_create(buttonEcoder, NULL);
+
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonEcoder);
+
+ buttonEcoderNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonEcoderNarrow,PARA_UI_POS_X+PARA_UI_SIZE_X,PARA_UI_POS_Y*3+PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonEcoderNarrow, event_handler,ID_ENCODER_SETTINGS_ARROW, NULL,0);
+ lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonEcoderNarrow, LV_LAYOUT_OFF);
+
+ lv_obj_t * line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3,line_points[2]);
+ #endif
+
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ADVANCE_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ADVANCE_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
label_Back = lv_label_create(buttonBack, NULL);
@@ -131,10 +308,27 @@ void lv_draw_advance_settings(void) {
lv_label_set_text(labelPausePos, machine_menu.PausePosition);
lv_obj_align(labelPausePos, buttonPausePos, LV_ALIGN_IN_LEFT_MID, 0, 0);
+
+ lv_label_set_text(labelFilamentSettings, machine_menu.FilamentConf);
+ lv_obj_align(labelFilamentSettings, buttonFilamentSettings, LV_ALIGN_IN_LEFT_MID, 0, 0);
+
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_label_set_text(labelWifiSet, machine_menu.WifiSettings);
+ lv_obj_align(labelWifiSet, buttonWifiSet, LV_ALIGN_IN_LEFT_MID,0, 0);
+ #endif
+ #if HAS_ROTARY_ENCODER
+ lv_label_set_text(labelEcoder, machine_menu.EncoderSettings);
+ lv_obj_align(labelEcoder, buttonEcoder, LV_ALIGN_IN_LEFT_MID,0, 0);
+ #endif
}
}
-void lv_clear_advance_settings() { lv_obj_del(scr); }
+void lv_clear_advance_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.cpp
new file mode 100644
index 0000000000..bb6b45aebe
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.cpp
@@ -0,0 +1,203 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if BOTH(HAS_TFT_LVGL_UI, HAS_BED_PROBE)
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/planner.h"
+#include "../../../../module/probe.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+#define ID_OFFSET_RETURN 1
+#define ID_OFFSET_X 2
+#define ID_OFFSET_Y 3
+#define ID_OFFSET_Z 4
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_OFFSET_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_auto_level_offset_settings();
+ draw_return_ui();
+ }
+ break;
+ case ID_OFFSET_X:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = x_offset;
+ lv_clear_auto_level_offset_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_OFFSET_Y:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = y_offset;
+ lv_clear_auto_level_offset_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_OFFSET_Z:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = z_offset;
+ lv_clear_auto_level_offset_settings();
+ lv_draw_number_key();
+ }
+ break;
+ }
+}
+
+void lv_draw_auto_level_offset_settings(void) {
+ lv_obj_t *buttonBack = NULL, *label_Back = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL;
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != NOZZLE_PROBE_OFFSET_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = NOZZLE_PROBE_OFFSET_UI;
+ }
+ disp_state = NOZZLE_PROBE_OFFSET_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, machine_menu.OffsetConfTitle);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelXText, machine_menu.Xoffset);
+
+ buttonXValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_OFFSET_X, NULL, 0);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelXValue = lv_label_create(buttonXValue, NULL);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelYText, machine_menu.Yoffset);
+
+ buttonYValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_OFFSET_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelYValue = lv_label_create(buttonYValue, NULL);
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelZText, machine_menu.Zoffset);
+
+ buttonZValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_OFFSET_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelZValue = lv_label_create(buttonZValue, NULL);
+
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_OFFSET_RETURN, NULL, 0);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonXValue);
+ lv_group_add_obj(g, buttonYValue);
+ lv_group_add_obj(g, buttonZValue);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+
+ if (gCfgItems.multiple_language != 0) {
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%.1f"), TERN(HAS_PROBE_XY_OFFSET, probe.offset.x, 0));
+ lv_label_set_text(labelXValue, public_buf_l);
+ lv_obj_align(labelXValue, buttonXValue, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%.1f"), TERN(HAS_PROBE_XY_OFFSET, probe.offset.y, 0));
+ lv_label_set_text(labelYValue, public_buf_l);
+ lv_obj_align(labelYValue, buttonYValue, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%.1f"), probe.offset.z);
+ lv_label_set_text(labelZValue, public_buf_l);
+ lv_obj_align(labelZValue, buttonZValue, LV_ALIGN_CENTER, 0, 0);
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+ }
+}
+
+void lv_clear_auto_level_offset_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // HAS_TFT_LVGL_UI && HAS_BED_PROBE
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.h
new file mode 100644
index 0000000000..688cd205d0
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_auto_level_offset_settings(void);
+extern void lv_clear_auto_level_offset_settings();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.cpp
new file mode 100644
index 0000000000..70564c036c
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.cpp
@@ -0,0 +1,352 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../gcode/queue.h"
+#include "../../../../gcode/gcode.h"
+
+#if HAS_BED_PROBE
+ #include "../../../../module/probe.h"
+#endif
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+static lv_obj_t *labelV, *buttonV, * zOffsetText;
+
+#define ID_BABY_STEP_X_P 1
+#define ID_BABY_STEP_X_N 2
+#define ID_BABY_STEP_Y_P 3
+#define ID_BABY_STEP_Y_N 4
+#define ID_BABY_STEP_Z_P 5
+#define ID_BABY_STEP_Z_N 6
+#define ID_BABY_STEP_DIST 7
+#define ID_BABY_STEP_RETURN 8
+
+static float babystep_dist=0.01;
+static uint8_t has_adjust_z = 0;
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ char baby_buf[30]={0};
+ switch (obj->mks_obj_id) {
+ case ID_BABY_STEP_X_P:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ ZERO(baby_buf);
+ sprintf_P(baby_buf, PSTR("M290 X%.3f"),babystep_dist);
+ gcode.process_subcommands_now_P(PSTR(baby_buf));
+ has_adjust_z = 1;
+ }
+ break;
+ case ID_BABY_STEP_X_N:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ ZERO(baby_buf);
+ sprintf_P(baby_buf, PSTR("M290 X%.3f"),((float)0 - babystep_dist));
+ gcode.process_subcommands_now_P(PSTR(baby_buf));
+ has_adjust_z = 1;
+ }
+ break;
+ case ID_BABY_STEP_Y_P:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ ZERO(baby_buf);
+ sprintf_P(baby_buf, PSTR("M290 Y%.3f"), babystep_dist);
+ gcode.process_subcommands_now_P(PSTR(baby_buf));
+ has_adjust_z = 1;
+ }
+ break;
+ case ID_BABY_STEP_Y_N:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ ZERO(baby_buf);
+ sprintf_P(baby_buf, PSTR("M290 Y%.3f"),((float)0 - babystep_dist));
+ gcode.process_subcommands_now_P(PSTR(baby_buf));
+ has_adjust_z = 1;
+ }
+ break;
+ case ID_BABY_STEP_Z_P:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ ZERO(baby_buf);
+ sprintf_P(baby_buf, PSTR("M290 Z%.3f"), babystep_dist);
+ gcode.process_subcommands_now_P(PSTR(baby_buf));
+ has_adjust_z = 1;
+ }
+ break;
+ case ID_BABY_STEP_Z_N:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ ZERO(baby_buf);
+ sprintf_P(baby_buf, PSTR("M290 Z%.3f"),((float)0 - babystep_dist));
+ gcode.process_subcommands_now_P(PSTR(baby_buf));
+ has_adjust_z = 1;
+ }
+ break;
+ case ID_BABY_STEP_DIST:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (abs((int)(100 * babystep_dist)) == 1)
+ babystep_dist = 0.05;
+ else if (abs((int)(100 * babystep_dist)) == 5)
+ babystep_dist = 0.1;
+ else
+ babystep_dist = 0.01;
+ disp_baby_step_dist();
+ }
+
+ break;
+ case ID_BABY_STEP_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (has_adjust_z == 1) {
+ gcode.process_subcommands_now_P(PSTR("M500"));
+ has_adjust_z = 0;
+ }
+ clear_cur_ui();
+ draw_return_ui();
+ }
+ break;
+ }
+}
+
+void lv_draw_baby_stepping(void) {
+ lv_obj_t *buttonXI, *buttonXD, *buttonYI, *buttonYD, *buttonZI, *buttonZD, *buttonBack;
+
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != BABY_STEP_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = BABY_STEP_UI;
+ }
+ disp_state = BABY_STEP_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, creat_title_text());
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ // Create an Image button
+ buttonXI = lv_imgbtn_create(scr, NULL);
+ buttonXD = lv_imgbtn_create(scr, NULL);
+ buttonYI = lv_imgbtn_create(scr, NULL);
+ buttonYD = lv_imgbtn_create(scr, NULL);
+ buttonZI = lv_imgbtn_create(scr, NULL);
+ buttonZD = lv_imgbtn_create(scr, NULL);
+ buttonV = lv_imgbtn_create(scr, NULL);
+ buttonBack = lv_imgbtn_create(scr, NULL);
+
+ lv_obj_set_event_cb_mks(buttonXI, event_handler, ID_BABY_STEP_X_P, NULL, 0);
+ lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_REL, "F:/bmp_xAdd.bin");
+ lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_PR, "F:/bmp_xAdd.bin");
+ lv_imgbtn_set_style(buttonXI, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonXI, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ #if 1
+ lv_obj_set_event_cb_mks(buttonXD, event_handler, ID_BABY_STEP_X_N, NULL, 0);
+ lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_REL, "F:/bmp_xDec.bin");
+ lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_PR, "F:/bmp_xDec.bin");
+ lv_imgbtn_set_style(buttonXD, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonXD, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonYI, event_handler, ID_BABY_STEP_Y_P, NULL, 0);
+ lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_REL, "F:/bmp_yAdd.bin");
+ lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_PR, "F:/bmp_yAdd.bin");
+ lv_imgbtn_set_style(buttonYI, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonYI, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonYD, event_handler, ID_BABY_STEP_Y_N, NULL, 0);
+ lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_REL, "F:/bmp_yDec.bin");
+ lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_PR, "F:/bmp_yDec.bin");
+ lv_imgbtn_set_style(buttonYD, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonYD, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonZI, event_handler, ID_BABY_STEP_Z_P, NULL, 0);
+ lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_REL, "F:/bmp_zAdd.bin");
+ lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_PR, "F:/bmp_zAdd.bin");
+ lv_imgbtn_set_style(buttonZI, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonZI, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonZD, event_handler, ID_BABY_STEP_Z_N, NULL, 0);
+ lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_REL, "F:/bmp_zDec.bin");
+ lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_PR, "F:/bmp_zDec.bin");
+ lv_imgbtn_set_style(buttonZD, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonZD, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonV, event_handler, ID_BABY_STEP_DIST, NULL, 0);
+ lv_imgbtn_set_style(buttonV, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonV, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_BABY_STEP_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ #endif // if 1
+ lv_obj_set_pos(buttonXI, INTERVAL_V, titleHeight);
+ lv_obj_set_pos(buttonYI, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
+ lv_obj_set_pos(buttonZI, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
+ lv_obj_set_pos(buttonV, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
+ lv_obj_set_pos(buttonXD, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonYD, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonZD, BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+
+ // Create labels on the image buttons
+ lv_btn_set_layout(buttonXI, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonXD, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonYI, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonYD, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonZI, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonZD, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonV, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+
+ lv_obj_t *labelXI = lv_label_create(buttonXI, NULL);
+ lv_obj_t *labelXD = lv_label_create(buttonXD, NULL);
+ lv_obj_t *labelYI = lv_label_create(buttonYI, NULL);
+ lv_obj_t *labelYD = lv_label_create(buttonYD, NULL);
+ lv_obj_t *labelZI = lv_label_create(buttonZI, NULL);
+ lv_obj_t *labelZD = lv_label_create(buttonZD, NULL);
+ labelV = lv_label_create(buttonV, NULL);
+ lv_obj_t *label_Back = lv_label_create(buttonBack, NULL);
+
+ if (gCfgItems.multiple_language != 0) {
+ lv_label_set_text(labelXI, move_menu.x_add);
+ lv_obj_align(labelXI, buttonXI, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(labelXD, move_menu.x_dec);
+ lv_obj_align(labelXD, buttonXD, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(labelYI, move_menu.y_add);
+ lv_obj_align(labelYI, buttonYI, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(labelYD, move_menu.y_dec);
+ lv_obj_align(labelYD, buttonYD, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(labelZI, move_menu.z_add);
+ lv_obj_align(labelZI, buttonZI, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(labelZD, move_menu.z_dec);
+ lv_obj_align(labelZD, buttonZD, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonXI);
+ lv_group_add_obj(g, buttonXD);
+ lv_group_add_obj(g, buttonYI);
+ lv_group_add_obj(g, buttonYD);
+ lv_group_add_obj(g, buttonZI);
+ lv_group_add_obj(g, buttonZD);
+ lv_group_add_obj(g, buttonV);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+
+ disp_baby_step_dist();
+
+ zOffsetText = lv_label_create(scr, NULL);
+ lv_obj_set_style(zOffsetText, &tft_style_label_rel);
+ lv_obj_set_pos(zOffsetText, 290, TITLE_YPOS);
+ disp_z_offset_value();
+}
+
+void disp_baby_step_dist() {
+ // char buf[30] = {0};
+
+ if ((int)(100 * babystep_dist) == 1) {
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, "F:/bmp_baby_move0_01.bin");
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, "F:/bmp_baby_move0_01.bin");
+ }
+ else if ((int)(100 * babystep_dist) == 5) {
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, "F:/bmp_baby_move0_05.bin");
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, "F:/bmp_baby_move0_05.bin");
+ }
+ else if ((int)(100 * babystep_dist) == 10) {
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, "F:/bmp_baby_move0_1.bin");
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, "F:/bmp_baby_move0_1.bin");
+ }
+ if (gCfgItems.multiple_language != 0) {
+ if ((int)(100 * babystep_dist) == 1) {
+ lv_label_set_text(labelV, move_menu.step_001mm);
+ lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
+ else if ((int)(100 * babystep_dist) == 5) {
+ lv_label_set_text(labelV, move_menu.step_005mm);
+ lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
+ else if ((int)(100 * babystep_dist) == 10) {
+ lv_label_set_text(labelV, move_menu.step_01mm);
+ lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
+ }
+}
+
+void disp_z_offset_value() {
+ char buf[20];
+
+ ZERO(buf);
+ sprintf_P(buf, PSTR("offset Z: %.3f"), (double)TERN(HAS_BED_PROBE, probe.offset.z, 0));
+ lv_label_set_text(zOffsetText, buf);
+}
+
+void lv_clear_baby_stepping() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.h
new file mode 100644
index 0000000000..333ba2d597
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_baby_stepping.h
@@ -0,0 +1,36 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_baby_stepping(void);
+extern void lv_clear_baby_stepping();
+extern void disp_baby_step_dist();
+extern void disp_z_offset_value();
+
+//extern void disp_temp_ready_print();
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp
index cc3f847bce..c60000afae 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp
@@ -34,9 +34,10 @@
#include "../../../../module/temperature.h"
#include "../../../../module/planner.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
-static lv_obj_t * labelStep, *buttonStep, *buttonMov, *buttonExt;
-static lv_obj_t * labelMov, *labelExt;
+static lv_obj_t *labelStep, *buttonStep, *buttonMov, *buttonExt;
+static lv_obj_t *labelMov, *labelExt;
static lv_obj_t * printSpeedText;
#define ID_C_ADD 1
@@ -175,7 +176,6 @@ void lv_draw_change_speed(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
// Create an Image button
buttonAdd = lv_imgbtn_create(scr, NULL);
@@ -185,38 +185,34 @@ void lv_draw_change_speed(void) {
buttonStep = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_C_ADD, "bmp_Add.bin", 0);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_C_ADD, NULL, 0);
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, "F:/bmp_Add.bin");
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, "F:/bmp_Add.bin");
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
#if 1
- lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_C_DEC, "bmp_Dec.bin", 0);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_C_DEC, NULL, 0);
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, "F:/bmp_Dec.bin");
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, "F:/bmp_Dec.bin");
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, NULL, 0);
lv_imgbtn_set_style(buttonMov, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonMov, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, NULL, 0);
lv_imgbtn_set_style(buttonExt, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonExt, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_C_STEP, NULL, 0);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_C_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_C_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
@@ -253,6 +249,17 @@ void lv_draw_change_speed(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonAdd);
+ lv_group_add_obj(g, buttonDec);
+ lv_group_add_obj(g, buttonMov);
+ lv_group_add_obj(g, buttonExt);
+ lv_group_add_obj(g, buttonStep);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+
disp_speed_type();
disp_speed_step();
@@ -262,13 +269,18 @@ void lv_draw_change_speed(void) {
}
void disp_speed_step() {
- if (uiCfg.stepPrintSpeed == 1)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_C_STEP, "bmp_step1_percent.bin", 0);
- else if (uiCfg.stepPrintSpeed == 5)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_C_STEP, "bmp_step5_percent.bin", 0);
- else if (uiCfg.stepPrintSpeed == 10)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_C_STEP, "bmp_step10_percent.bin", 0);
-
+ if (uiCfg.stepPrintSpeed == 1) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step1_percent.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step1_percent.bin");
+ }
+ else if (uiCfg.stepPrintSpeed == 5) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step5_percent.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step5_percent.bin");
+ }
+ else if (uiCfg.stepPrintSpeed == 10) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step10_percent.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step10_percent.bin");
+ }
if (gCfgItems.multiple_language != 0) {
if (uiCfg.stepPrintSpeed == 1) {
lv_label_set_text(labelStep, speed_menu.step_1percent);
@@ -309,13 +321,17 @@ void disp_print_speed() {
void disp_speed_type() {
switch (speedType) {
case 1:
- lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_extruct_sel.bin", 0);
- lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_mov_changeSpeed.bin", 0);
+ lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_REL, "F:/bmp_mov_changeSpeed.bin");
+ lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_PR, "F:/bmp_mov_changeSpeed.bin");
+ lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_REL, "F:/bmp_extruct_sel.bin");
+ lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_PR, "F:/bmp_extruct_sel.bin");
break;
default:
- lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_speed_extruct.bin", 0);
- lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_mov_sel.bin", 0);
+ lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_REL, "F:/bmp_mov_sel.bin");
+ lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_PR, "F:/bmp_mov_sel.bin");
+ lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_REL, "F:/bmp_speed_extruct.bin");
+ lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_PR, "F:/bmp_speed_extruct.bin");
break;
}
lv_obj_refresh_ext_draw_pad(buttonExt);
@@ -330,6 +346,11 @@ void disp_speed_type() {
}
}
-void lv_clear_change_speed() { lv_obj_del(scr); }
+void lv_clear_change_speed() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp
index 3b4fc8d207..c848323010 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp
@@ -41,6 +41,7 @@
#include "../../../../gcode/queue.h"
#include "../../../../module/temperature.h"
#include "../../../../module/planner.h"
+#include "../../../../gcode/gcode.h"
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h"
@@ -51,20 +52,25 @@
#endif
#include "../../../../gcode/gcode.h"
-#include "pic_manager.h"
-
+extern lv_group_t * g;
static lv_obj_t * scr;
+static lv_obj_t * tempText1;
+static lv_obj_t * filament_bar;
+
extern uint8_t sel_id;
extern uint8_t once_flag;
extern uint8_t gcode_preview_over;
-uint8_t DialogType;
+extern int upload_result ;
+extern uint32_t upload_time;
+extern uint32_t upload_size;
+extern uint8_t temperature_change_frequency;
static void btn_ok_event_cb(lv_obj_t * btn, lv_event_t event) {
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- if (DialogType == DIALOG_TYPE_PRINT_FILE) {
+ if (uiCfg.dialogType == DIALOG_TYPE_PRINT_FILE) {
#if HAS_GCODE_PREVIEW
preview_gcode_prehandle(list_file.file_name[sel_id]);
#endif
@@ -108,7 +114,8 @@ static void btn_ok_event_cb(lv_obj_t * btn, lv_event_t event) {
}
#endif
}
- else if (DialogType == DIALOG_TYPE_STOP) {
+ else if (uiCfg.dialogType == DIALOG_TYPE_STOP) {
+ wait_for_heatup = false;
stop_print_time();
lv_clear_dialog();
lv_draw_ready_print();
@@ -130,40 +137,57 @@ static void btn_ok_event_cb(lv_obj_t * btn, lv_event_t event) {
//queue.inject_P(PSTR("G91\nG1 Z10\nG90\nG28 X0 Y0\nM84\nM107"));
#endif
}
- else if (DialogType == DIALOG_TYPE_FINISH_PRINT) {
+ else if (uiCfg.dialogType == DIALOG_TYPE_FINISH_PRINT) {
clear_cur_ui();
lv_draw_ready_print();
}
#if ENABLED(ADVANCED_PAUSE_FEATURE)
- else if (DialogType == DIALOG_PAUSE_MESSAGE_WAITING
- || DialogType == DIALOG_PAUSE_MESSAGE_INSERT
- || DialogType == DIALOG_PAUSE_MESSAGE_HEAT
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_WAITING
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_INSERT
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEAT
) {
wait_for_user = false;
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE;
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
clear_cur_ui();
draw_return_ui();
}
#endif
- else if (DialogType == DIALOG_STORE_EEPROM_TIPS) {
+ else if (uiCfg.dialogType == DIALOG_STORE_EEPROM_TIPS) {
gcode.process_subcommands_now_P(PSTR("M500"));
clear_cur_ui();
draw_return_ui();
}
- else if (DialogType == DIALOG_READ_EEPROM_TIPS) {
+ else if (uiCfg.dialogType == DIALOG_READ_EEPROM_TIPS) {
gcode.process_subcommands_now_P(PSTR("M501"));
clear_cur_ui();
draw_return_ui();
}
- else if (DialogType == DIALOG_REVERT_EEPROM_TIPS) {
+ else if (uiCfg.dialogType == DIALOG_REVERT_EEPROM_TIPS) {
gcode.process_subcommands_now_P(PSTR("M502"));
clear_cur_ui();
draw_return_ui();
}
+ else if (uiCfg.dialogType == DIALOG_WIFI_CONFIG_TIPS) {
+ uiCfg.configWifi = 1;
+ clear_cur_ui();
+ draw_return_ui();
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED) {
+ uiCfg.filament_heat_completed_load = 1;
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED) {
+ uiCfg.filament_heat_completed_unload = 1;
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_COMPLETED
+ || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED
+ ) {
+ clear_cur_ui();
+ draw_return_ui();
+ }
}
}
@@ -172,11 +196,35 @@ static void btn_cancel_event_cb(lv_obj_t * btn, lv_event_t event) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
+ if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
#if ENABLED(ADVANCED_PAUSE_FEATURE)
pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT;
#endif
}
+ else if ((uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT)
+ || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT)
+ || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED)
+ || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED)
+ ) {
+ thermalManager.temp_hotend[uiCfg.curSprayerChoose].target= uiCfg.desireSprayerTempBak;
+ clear_cur_ui();
+ draw_return_ui();
+ }
+ else if ((uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING)
+ || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING)
+ ) {
+ queue.enqueue_one_P(PSTR("M410"));
+ uiCfg.filament_rate = 0;
+ uiCfg.filament_loading_completed = 0;
+ uiCfg.filament_unloading_completed = 0;
+ uiCfg.filament_loading_time_flg = 0;
+ uiCfg.filament_loading_time_cnt = 0;
+ uiCfg.filament_unloading_time_flg = 0;
+ uiCfg.filament_unloading_time_cnt = 0;
+ thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = uiCfg.desireSprayerTempBak;
+ clear_cur_ui();
+ draw_return_ui();
+ }
else {
clear_cur_ui();
draw_return_ui();
@@ -186,13 +234,15 @@ static void btn_cancel_event_cb(lv_obj_t * btn, lv_event_t event) {
void lv_draw_dialog(uint8_t type) {
+ lv_obj_t * btnOk = NULL;
+ lv_obj_t * btnCancel = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != DIALOG_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = DIALOG_UI;
}
disp_state = DIALOG_UI;
- DialogType = type;
+ uiCfg.dialogType = type;
scr = lv_obj_create(NULL, NULL);
@@ -208,7 +258,6 @@ void lv_draw_dialog(uint8_t type) {
lv_refr_now(lv_refr_get_disp_refreshing());
- //LV_IMG_DECLARE(bmp_pic);
static lv_style_t style_btn_rel; // A variable to store the released style
lv_style_copy(&style_btn_rel, &lv_style_plain); // Initialize from a built-in style
@@ -231,60 +280,151 @@ void lv_draw_dialog(uint8_t type) {
style_btn_pr.text.color = lv_color_hex3(0xBCD);
style_btn_pr.text.font = &TERN(HAS_SPI_FLASH_FONT, gb2312_puhui32, lv_font_roboto_22);
- lv_obj_t * labelDialog = lv_label_create(scr, NULL);
+ lv_obj_t *labelDialog = lv_label_create(scr, NULL);
lv_obj_set_style(labelDialog, &tft_style_label_rel);
- if (DialogType == DIALOG_TYPE_FINISH_PRINT || DialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
- lv_obj_t * btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
- lv_obj_set_pos(btnOk, BTN_OK_X + 90, BTN_OK_Y); // Set its position
- lv_obj_set_size(btnOk, 100, 50); // Set its size
- lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
- lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
- lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
- lv_obj_t * labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
- lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
+ if (uiCfg.dialogType == DIALOG_TYPE_FINISH_PRINT || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
+ btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
+ lv_obj_set_pos(btnOk, BTN_OK_X + 90, BTN_OK_Y); // Set its position
+ lv_obj_set_size(btnOk, 100, 50); // Set its size
+ lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
+ lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
+ lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
+ lv_obj_t *labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
+ lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_WAITING
- || DialogType == DIALOG_PAUSE_MESSAGE_INSERT
- || DialogType == DIALOG_PAUSE_MESSAGE_HEAT
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_WAITING
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_INSERT
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEAT
) {
- lv_obj_t * btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
+ btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
lv_obj_set_pos(btnOk, BTN_OK_X + 90, BTN_OK_Y); // Set its position
lv_obj_set_size(btnOk, 100, 50); // Set its size
lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
- lv_obj_t * labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
+ lv_obj_t *labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_PAUSING
- || DialogType == DIALOG_PAUSE_MESSAGE_CHANGING
- || DialogType == DIALOG_PAUSE_MESSAGE_UNLOAD
- || DialogType == DIALOG_PAUSE_MESSAGE_LOAD
- || DialogType == DIALOG_PAUSE_MESSAGE_PURGE
- || DialogType == DIALOG_PAUSE_MESSAGE_RESUME
- || DialogType == DIALOG_PAUSE_MESSAGE_HEATING
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PAUSING
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_CHANGING
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_UNLOAD
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_LOAD
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PURGE
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME
+ || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEATING
) {
// nothing to do
}
+ else if (uiCfg.dialogType == WIFI_ENABLE_TIPS) {
+ btnCancel = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
+ lv_obj_set_size(btnCancel, 100, 50);
+ lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
+ lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
+ lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
+ }
+ else if (uiCfg.dialogType == DIALOG_TRANSFER_NO_DEVICE) {
+ btnCancel = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
+ lv_obj_set_size(btnCancel, 100, 50);
+ lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
+ lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
+ lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
+ }
+ #if ENABLED(USE_WIFI_FUNCTION)
+ else if (uiCfg.dialogType == DIALOG_TYPE_UPLOAD_FILE) {
+ if (upload_result == 2) {
+ btnCancel = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
+ lv_obj_set_size(btnCancel, 100, 50);
+ lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
+ lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
+ lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
+ }
+ else if (upload_result == 3) {
+ btnOk = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(btnOk, BTN_OK_X+90, BTN_OK_Y);
+ lv_obj_set_size(btnOk, 100, 50);
+ lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
+ lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel);
+ lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr);
+ lv_obj_t *labelOk = lv_label_create(btnOk, NULL);
+ lv_label_set_text(labelOk, print_file_dialog_menu.confirm);
+ }
+ }
+ #endif //USE_WIFI_FUNCTION
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT
+ || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT
+ ) {
+ btnCancel = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
+ lv_obj_set_size(btnCancel, 100, 50);
+ lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
+ lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
+ lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
+
+ tempText1 = lv_label_create(scr, NULL);
+ lv_obj_set_style(tempText1, &tft_style_label_rel);
+ filament_sprayer_temp();
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_COMPLETED
+ || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED
+ ) {
+ btnOk = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(btnOk, BTN_OK_X+90, BTN_OK_Y);
+ lv_obj_set_size(btnOk, 100, 50);
+ lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
+ lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel);
+ lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr);
+ lv_obj_t *labelOk = lv_label_create(btnOk, NULL);
+ lv_label_set_text(labelOk, print_file_dialog_menu.confirm);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING
+ || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING
+ ) {
+ btnCancel = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
+ lv_obj_set_size(btnCancel, 100, 50);
+ lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
+ lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
+ lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
+ lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
+
+ filament_bar = lv_bar_create(scr, NULL);
+ lv_obj_set_pos(filament_bar, (TFT_WIDTH-400)/2, ((TFT_HEIGHT - titleHeight)-40)/2);
+ lv_obj_set_size(filament_bar, 400, 25);
+ lv_bar_set_style(filament_bar, LV_BAR_STYLE_INDIC, &lv_bar_style_indic);
+ lv_bar_set_anim_time(filament_bar, 1000);
+ lv_bar_set_value(filament_bar, 0, LV_ANIM_ON);
+ }
else {
- lv_obj_t * btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
+ btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
lv_obj_set_pos(btnOk, BTN_OK_X, BTN_OK_Y); // Set its position
lv_obj_set_size(btnOk, 100, 50); // Set its size
lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
- lv_obj_t * labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
+ lv_obj_t *labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
- lv_obj_t * btnCancel = lv_btn_create(scr, NULL); // Add a button the current screen
+ btnCancel = lv_btn_create(scr, NULL); // Add a button the current screen
lv_obj_set_pos(btnCancel, BTN_CANCEL_X, BTN_CANCEL_Y); // Set its position
lv_obj_set_size(btnCancel, 100, 50); // Set its size
lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
- lv_obj_t * labelCancel = lv_label_create(btnCancel, NULL); // Add a label to the button
+ lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL); // Add a label to the button
- if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
+ if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
lv_label_set_text(labelOk, pause_msg_menu.purgeMore); // Set the labels text
lv_label_set_text(labelCancel, pause_msg_menu.continuePrint);
}
@@ -293,82 +433,271 @@ void lv_draw_dialog(uint8_t type) {
lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
}
}
- if (DialogType == DIALOG_TYPE_PRINT_FILE) {
+ if (uiCfg.dialogType == DIALOG_TYPE_PRINT_FILE) {
lv_label_set_text(labelDialog, print_file_dialog_menu.print_file);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
- lv_obj_t * labelFile = lv_label_create(scr, NULL);
+ lv_obj_t *labelFile = lv_label_create(scr, NULL);
lv_obj_set_style(labelFile, &tft_style_label_rel);
lv_label_set_text(labelFile, list_file.long_name[sel_id]);
lv_obj_align(labelFile, NULL, LV_ALIGN_CENTER, 0, -60);
}
- else if (DialogType == DIALOG_TYPE_STOP) {
+ else if (uiCfg.dialogType == DIALOG_TYPE_STOP) {
lv_label_set_text(labelDialog, print_file_dialog_menu.cancle_print);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_TYPE_FINISH_PRINT) {
+ else if (uiCfg.dialogType == DIALOG_TYPE_FINISH_PRINT) {
lv_label_set_text(labelDialog, print_file_dialog_menu.print_finish);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_PAUSING) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PAUSING) {
lv_label_set_text(labelDialog, pause_msg_menu.pausing);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_CHANGING) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_CHANGING) {
lv_label_set_text(labelDialog, pause_msg_menu.changing);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_UNLOAD) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_UNLOAD) {
lv_label_set_text(labelDialog, pause_msg_menu.unload);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_WAITING) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_WAITING) {
lv_label_set_text(labelDialog, pause_msg_menu.waiting);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_INSERT) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_INSERT) {
lv_label_set_text(labelDialog, pause_msg_menu.insert);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_LOAD) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_LOAD) {
lv_label_set_text(labelDialog, pause_msg_menu.load);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_PURGE) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PURGE) {
lv_label_set_text(labelDialog, pause_msg_menu.purge);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
lv_label_set_text(labelDialog, pause_msg_menu.resume);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_HEAT) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEAT) {
lv_label_set_text(labelDialog, pause_msg_menu.heat);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_HEATING) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEATING) {
lv_label_set_text(labelDialog, pause_msg_menu.heating);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
+ else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
lv_label_set_text(labelDialog, pause_msg_menu.option);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_STORE_EEPROM_TIPS) {
+ else if (uiCfg.dialogType == DIALOG_STORE_EEPROM_TIPS) {
lv_label_set_text(labelDialog, eeprom_menu.storeTips);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_READ_EEPROM_TIPS) {
+ else if (uiCfg.dialogType == DIALOG_READ_EEPROM_TIPS) {
lv_label_set_text(labelDialog, eeprom_menu.readTips);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
- else if (DialogType == DIALOG_REVERT_EEPROM_TIPS) {
+ else if (uiCfg.dialogType == DIALOG_REVERT_EEPROM_TIPS) {
lv_label_set_text(labelDialog, eeprom_menu.revertTips);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
+ else if (uiCfg.dialogType == DIALOG_WIFI_CONFIG_TIPS) {
+ lv_label_set_text(labelDialog, machine_menu.wifiConfigTips);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == WIFI_ENABLE_TIPS) {
+ lv_label_set_text(labelDialog, print_file_dialog_menu.wifi_enable_tips);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == DIALOG_TRANSFER_NO_DEVICE) {
+ lv_label_set_text(labelDialog, DIALOG_UPDATE_NO_DEVICE_EN);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ #if ENABLED(USE_WIFI_FUNCTION)
+ else if (uiCfg.dialogType == DIALOG_TYPE_UPLOAD_FILE) {
+ if (upload_result == 1) {
+ lv_label_set_text(labelDialog, DIALOG_UPLOAD_ING_EN);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (upload_result == 2) {
+ lv_label_set_text(labelDialog, DIALOG_UPLOAD_ERROR_EN);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (upload_result == 3) {
+ char buf[200];
+ int _index = 0;
+
+ ZERO(buf);
+
+ strcpy(buf, DIALOG_UPLOAD_FINISH_EN);
+ _index = strlen(buf);
+ buf[_index] = '\n';
+ _index++;
+ strcat(buf, DIALOG_UPLOAD_SIZE_EN);
+
+ _index = strlen(buf);
+ buf[_index] = ':';
+ _index++;
+ sprintf(&buf[_index], " %d KBytes\n", (int)(upload_size / 1024));
+
+ strcat(buf, DIALOG_UPLOAD_TIME_EN);
+ _index = strlen(buf);
+ buf[_index] = ':';
+ _index++;
+ sprintf(&buf[_index], " %d s\n", (int)upload_time);
+
+ strcat(buf, DIALOG_UPLOAD_SPEED_EN);
+ _index = strlen(buf);
+ buf[_index] = ':';
+ _index++;
+ sprintf(&buf[_index], " %d KBytes/s\n", (int)(upload_size / upload_time / 1024));
+
+ lv_label_set_text(labelDialog, buf);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+
+ }
+ }
+ #endif //USE_WIFI_FUNCTION
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_load_heat);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_load_heat_confirm);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_unload_heat);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_unload_heat_confirm);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_COMPLETED) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_load_completed);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_unload_completed);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_loading);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -70);
+ }
+ else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING) {
+ lv_label_set_text(labelDialog, filament_menu.filament_dialog_unloading);
+ lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -70);
+ }
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ if (btnOk) lv_group_add_obj(g, btnOk);
+ if (btnCancel) lv_group_add_obj(g, btnCancel);
+ }
+ #endif
+}
+
+void filament_sprayer_temp() {
+ char buf[20] = {0};
+
+ public_buf_l[0] = '\0';
+
+ if (uiCfg.curSprayerChoose < 1)
+ strcat(public_buf_l, preheat_menu.ext1);
+ else
+ strcat(public_buf_l, preheat_menu.ext2);
+ sprintf(buf, preheat_menu.value_state, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target);
+
+ strcat_P(public_buf_l, PSTR(": "));
+ strcat(public_buf_l, buf);
+ lv_label_set_text(tempText1, public_buf_l);
+ lv_obj_align(tempText1, NULL, LV_ALIGN_CENTER, 0, -50);
+}
+
+void filament_dialog_handle() {
+ if ((temperature_change_frequency == 1)
+ && ((uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT)
+ || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT))
+ ) {
+ filament_sprayer_temp();
+ temperature_change_frequency = 0;
+ }
+ if (uiCfg.filament_heat_completed_load == 1) {
+ uiCfg.filament_heat_completed_load = 0;
+ lv_clear_dialog();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_LOADING);
+ planner.synchronize();
+ uiCfg.filament_loading_time_flg = 1;
+ uiCfg.filament_loading_time_cnt = 0;
+ ZERO(public_buf_m);
+ sprintf_P(public_buf_m,PSTR("T%d\nG91\nG1 E%d F%d\nG90"),uiCfg.curSprayerChoose,gCfgItems.filamentchange_load_length,gCfgItems.filamentchange_load_speed);
+ queue.inject_P(PSTR(public_buf_m));
+ //gcode.process_subcommands_now_P(PSTR(public_buf_m));
+ }
+ if (uiCfg.filament_heat_completed_unload == 1) {
+ uiCfg.filament_heat_completed_unload = 0;
+ lv_clear_dialog();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_UNLOADING);
+ planner.synchronize();
+ uiCfg.filament_unloading_time_flg = 1;
+ uiCfg.filament_unloading_time_cnt = 0;
+ ZERO(public_buf_m);
+ sprintf_P(public_buf_m,PSTR("T%d\nG91\nG1 E-%d F%d\nG90"),uiCfg.curSprayerChoose,gCfgItems.filamentchange_unload_length,gCfgItems.filamentchange_unload_speed);
+ queue.inject_P(PSTR(public_buf_m));
+ }
+
+ if (((abs((int)((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius - gCfgItems.filament_limit_temper)) <= 1)
+ || ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius > gCfgItems.filament_limit_temper))
+ && (uiCfg.filament_load_heat_flg == 1)
+ ) {
+ uiCfg.filament_load_heat_flg = 0;
+ lv_clear_dialog();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED);
+ }
+
+ if (uiCfg.filament_loading_completed == 1) {
+ uiCfg.filament_rate = 0;
+ uiCfg.filament_loading_completed = 0;
+ lv_clear_dialog();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_LOAD_COMPLETED);
+ }
+ if (((abs((int)((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius - gCfgItems.filament_limit_temper)) <= 1)
+ || ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius > gCfgItems.filament_limit_temper))
+ && (uiCfg.filament_unload_heat_flg == 1)
+ ) {
+ uiCfg.filament_unload_heat_flg = 0;
+ lv_clear_dialog();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED);
+ }
+
+ if (uiCfg.filament_unloading_completed == 1) {
+ uiCfg.filament_rate = 0;
+ uiCfg.filament_unloading_completed = 0;
+ lv_clear_dialog();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED);
+ }
+
+ if ( uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING
+ || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING
+ ) lv_filament_setbar();
}
-void lv_clear_dialog() { lv_obj_del(scr); }
+void lv_filament_setbar() {
+ lv_bar_set_value(filament_bar, uiCfg.filament_rate, LV_ANIM_ON);
+}
+
+void lv_clear_dialog() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.h
index f08c7b779a..dc5adc5ad6 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.h
@@ -69,6 +69,8 @@
#define DIALOG_READ_EEPROM_TIPS 33
#define DIALOG_REVERT_EEPROM_TIPS 34
+#define DIALOG_WIFI_CONFIG_TIPS 35
+#define DIALOG_TRANSFER_NO_DEVICE 36
#define BTN_OK_X 100
#define BTN_OK_Y 180
#define BTN_CANCEL_X 280
@@ -76,6 +78,9 @@
extern void lv_draw_dialog(uint8_t type);
extern void lv_clear_dialog();
+extern void filament_sprayer_temp();
+extern void filament_dialog_handle();
+extern void lv_filament_setbar();
//extern void disp_temp_ready_print();
#ifdef __cplusplus
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_eeprom_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_eeprom_settings.cpp
index f340ca4632..ca7d2d1e31 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_eeprom_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_eeprom_settings.cpp
@@ -28,6 +28,7 @@
#include "../../../../MarlinCore.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_EEPROM_RETURN 1
@@ -48,26 +49,25 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
draw_return_ui();
}
break;
+ case ID_EEPROM_STORE:
+ if (event == LV_EVENT_CLICKED) {
- #if 0
- case ID_EEPROM_STORE:
- if (event == LV_EVENT_CLICKED) {
-
- }
- else if (event == LV_EVENT_RELEASED) {
- lv_clear_eeprom_settings();
- lv_draw_dialog(DIALOG_STORE_EEPROM_TIPS);
- }
- break;
- case ID_EEPROM_STORE_ARROW:
- if (event == LV_EVENT_CLICKED) {
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_eeprom_settings();
+ lv_draw_dialog(DIALOG_STORE_EEPROM_TIPS);
+ }
+ break;
+ case ID_EEPROM_STORE_ARROW:
+ if (event == LV_EVENT_CLICKED) {
- }
- else if (event == LV_EVENT_RELEASED) {
- lv_clear_eeprom_settings();
- lv_draw_dialog(DIALOG_STORE_EEPROM_TIPS);
- }
- break;
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_eeprom_settings();
+ lv_draw_dialog(DIALOG_STORE_EEPROM_TIPS);
+ }
+ break;
+ #if 0
case ID_EEPROM_READ:
if (event == LV_EVENT_CLICKED) {
@@ -111,10 +111,10 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_eeprom_settings(void) {
lv_obj_t *buttonBack, *label_Back;
- //lv_obj_t *buttonStore,*labelStore,*buttonStoreNarrow;
+ lv_obj_t *buttonStore,*labelStore,*buttonStoreNarrow;
//lv_obj_t *buttonRead,*labelRead,*buttonReadNarrow;
lv_obj_t *buttonRevert, *labelRevert, *buttonRevertNarrow;
- lv_obj_t * line1; // * line2,* line3;
+ lv_obj_t * line1, * line2; //* line3;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != EEPROM_SETTINGS_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = EEPROM_SETTINGS_UI;
@@ -134,53 +134,6 @@ void lv_draw_eeprom_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- LV_IMG_DECLARE(bmp_para_arrow);
- #if 0
- buttonStore = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonStore, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonStore, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- //lv_obj_set_event_cb(buttonMachine, event_handler);
- lv_obj_set_event_cb_mks(buttonStore, event_handler, ID_EEPROM_STORE, NULL, 0);
- lv_btn_set_style(buttonStore, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonStore, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonStore, LV_LAYOUT_OFF);
- labelStore = lv_label_create(buttonStore, NULL); /*Add a label to the button*/
-
- buttonStoreNarrow = lv_imgbtn_create(scr, NULL);
- lv_obj_set_pos(buttonStoreNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonStoreNarrow, event_handler, ID_EEPROM_STORE_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonStoreNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonStoreNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
- lv_imgbtn_set_style(buttonStoreNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonStoreNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_btn_set_layout(buttonStoreNarrow, LV_LAYOUT_OFF);
-
- line1 = lv_line_create(scr, NULL);
- lv_ex_line(line1, line_points[0]);
-
- buttonRead = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonRead, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonRead, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- //lv_obj_set_event_cb(buttonMotor, event_handler);
- lv_obj_set_event_cb_mks(buttonRead, event_handler, ID_EEPROM_READ, NULL, 0);
- lv_btn_set_style(buttonRead, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonRead, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonRead, LV_LAYOUT_OFF);
- labelRead = lv_label_create(buttonRead, NULL); /*Add a label to the button*/
-
- buttonReadNarrow = lv_imgbtn_create(scr, NULL);
- lv_obj_set_pos(buttonReadNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 2 + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonReadNarrow, event_handler, ID_EEPROM_READ_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonReadNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonReadNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
- lv_imgbtn_set_style(buttonReadNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonReadNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_btn_set_layout(buttonReadNarrow, LV_LAYOUT_OFF);
-
- line2 = lv_line_create(scr, NULL);
- lv_ex_line(line2, line_points[1]);
- #endif // if 0
buttonRevert = lv_btn_create(scr, NULL); /*Add a button the current screen*/
lv_obj_set_pos(buttonRevert, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
lv_obj_set_size(buttonRevert, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
@@ -193,9 +146,9 @@ void lv_draw_eeprom_settings(void) {
buttonRevertNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonRevertNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonRevertNarrow, event_handler, ID_EEPROM_REVERT_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonRevertNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonRevertNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonRevertNarrow, event_handler, ID_EEPROM_REVERT_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonRevertNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonRevertNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonRevertNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonRevertNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonRevertNarrow, LV_LAYOUT_OFF);
@@ -205,10 +158,32 @@ void lv_draw_eeprom_settings(void) {
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
+ buttonStore = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonStore, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
+ lv_obj_set_size(buttonStore, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ //lv_obj_set_event_cb(buttonMotor, event_handler);
+ lv_obj_set_event_cb_mks(buttonStore, event_handler, ID_EEPROM_STORE, NULL, 0);
+ lv_btn_set_style(buttonStore, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
+ lv_btn_set_style(buttonStore, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_layout(buttonStore, LV_LAYOUT_OFF);
+ labelStore = lv_label_create(buttonStore, NULL); /*Add a label to the button*/
+
+ buttonStoreNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonStoreNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 2 + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonStoreNarrow, event_handler, ID_EEPROM_STORE_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonStoreNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonStoreNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonStoreNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonStoreNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonStoreNarrow, LV_LAYOUT_OFF);
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_EEPROM_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_EEPROM_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
@@ -220,8 +195,8 @@ void lv_draw_eeprom_settings(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
- //lv_label_set_text(labelStore, eeprom_menu.store);
- //lv_obj_align(labelStore, buttonStore, LV_ALIGN_IN_LEFT_MID,0, 0);
+ lv_label_set_text(labelStore, eeprom_menu.store);
+ lv_obj_align(labelStore, buttonStore, LV_ALIGN_IN_LEFT_MID,0, 0);
//lv_label_set_text(labelRead, eeprom_menu.read);
//lv_obj_align(labelRead, buttonRead, LV_ALIGN_IN_LEFT_MID,0, 0);
@@ -229,9 +204,21 @@ void lv_draw_eeprom_settings(void) {
lv_label_set_text(labelRevert, eeprom_menu.revert);
lv_obj_align(labelRevert, buttonRevert, LV_ALIGN_IN_LEFT_MID, 0, 0);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonRevert);
+ lv_group_add_obj(g, buttonStore);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_eeprom_settings() { lv_obj_del(scr); }
+void lv_clear_eeprom_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.cpp
new file mode 100644
index 0000000000..0ad2bb5f1d
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.cpp
@@ -0,0 +1,172 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/planner.h"
+#include "../../../../module/stepper/indirection.h"
+#include "../../../../feature/tmc_util.h"
+#include "../../../../gcode/gcode.h"
+#include "../../../../module/planner.h"
+
+#if BUTTONS_EXIST(EN1, EN2)
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+static lv_obj_t * buttonEncoderState = NULL;
+static lv_obj_t *labelEncoderState = NULL;
+
+#define ID_ENCODER_RETURN 1
+#define ID_ENCODER_STATE 2
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_ENCODER_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_encoder_settings();
+ draw_return_ui();
+ }
+ break;
+ case ID_ENCODER_STATE:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (gCfgItems.encoder_enable) {
+ gCfgItems.encoder_enable = false;
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ lv_label_set_text(labelEncoderState, machine_menu.disable);
+ update_spi_flash();
+ }
+ else {
+ gCfgItems.encoder_enable = true;
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ lv_label_set_text(labelEncoderState, machine_menu.enable);
+ update_spi_flash();
+ }
+ }
+ break;
+ }
+}
+
+void lv_draw_encoder_settings(void) {
+ lv_obj_t *buttonBack = NULL, *label_Back = NULL;
+ lv_obj_t *labelEncoderTips = NULL;
+
+ lv_obj_t * line1 = NULL;
+
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ENCODER_SETTINGS_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = ENCODER_SETTINGS_UI;
+ }
+ disp_state = ENCODER_SETTINGS_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, machine_menu.EncoderConfTitle);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ labelEncoderTips = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelEncoderTips, &tft_style_label_rel);
+ lv_obj_set_pos(labelEncoderTips, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelEncoderTips, machine_menu.EncoderConfText);
+
+ buttonEncoderState = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonEncoderState, PARA_UI_STATE_POS_X, PARA_UI_POS_Y + PARA_UI_STATE_V);
+ if (gCfgItems.encoder_enable) {
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonEncoderState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ }
+
+ lv_obj_set_event_cb_mks(buttonEncoderState, event_handler, ID_ENCODER_STATE, NULL, 0);
+
+ lv_imgbtn_set_style(buttonEncoderState, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonEncoderState, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonEncoderState, LV_LAYOUT_OFF);
+ labelEncoderState = lv_label_create(buttonEncoderState, NULL);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ buttonBack = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ENCODER_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ if (gCfgItems.encoder_enable) {
+ lv_label_set_text(labelEncoderState, machine_menu.enable);
+ lv_obj_align(labelEncoderState, buttonEncoderState, LV_ALIGN_CENTER, 0, 0);
+ }
+ else {
+ lv_label_set_text(labelEncoderState, machine_menu.disable);
+ lv_obj_align(labelEncoderState, buttonEncoderState, LV_ALIGN_CENTER, 0, 0);
+ }
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonEncoderState);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+}
+
+void lv_clear_encoder_settings() {
+ #if HAS_ROTARY_ENCODER
+ lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // BUTTONS_EXIST(EN1, EN2)
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.h
new file mode 100644
index 0000000000..62892a6ec1
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_encoder_settings.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_encoder_settings(void);
+extern void lv_clear_encoder_settings();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp
index 9f5977d70c..543202067f 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp
@@ -35,10 +35,11 @@
#include "../../../../gcode/queue.h"
static lv_obj_t * scr;
+extern lv_group_t* g;
static lv_obj_t * buttoType, *buttonStep, *buttonSpeed;
-static lv_obj_t * labelType;
-static lv_obj_t * labelStep;
-static lv_obj_t * labelSpeed;
+static lv_obj_t *labelType;
+static lv_obj_t *labelStep;
+static lv_obj_t *labelSpeed;
static lv_obj_t * tempText;
static lv_obj_t * ExtruText;
@@ -171,8 +172,6 @@ void lv_draw_extrusion(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
// Create image buttons
buttonAdd = lv_imgbtn_create(scr, NULL);
buttonDec = lv_imgbtn_create(scr, NULL);
@@ -181,37 +180,35 @@ void lv_draw_extrusion(void) {
buttonSpeed = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_E_ADD, "bmp_in.bin", 0);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_E_ADD, NULL, 0);
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, "F:/bmp_in.bin");
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, "F:/bmp_in.bin");
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
+
#if 1
- lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_E_DEC, "bmp_out.bin", 0);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_E_DEC, NULL, 0);
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, "F:/bmp_out.bin");
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, "F:/bmp_out.bin");
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttoType, event_handler, ID_E_TYPE, NULL, 0);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_E_STEP, NULL, 0);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_E_SPEED, NULL, 0);
lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_E_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_E_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
@@ -249,6 +246,17 @@ void lv_draw_extrusion(void) {
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonAdd);
+ lv_group_add_obj(g, buttonDec);
+ lv_group_add_obj(g, buttoType);
+ lv_group_add_obj(g, buttonStep);
+ lv_group_add_obj(g, buttonSpeed);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+
disp_ext_type();
disp_ext_step();
disp_ext_speed();
@@ -264,14 +272,16 @@ void lv_draw_extrusion(void) {
void disp_ext_type() {
if (uiCfg.curSprayerChoose == 1) {
- lv_obj_set_event_cb_mks(buttoType, event_handler, ID_E_TYPE, "bmp_extru2.bin", 0);
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, "F:/bmp_extru2.bin");
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, "F:/bmp_extru2.bin");
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, extrude_menu.ext2);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
else {
- lv_obj_set_event_cb_mks(buttoType, event_handler, ID_E_TYPE, "bmp_extru1.bin", 0);
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, "F:/bmp_extru1.bin");
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, "F:/bmp_extru1.bin");
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, extrude_menu.ext1);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@@ -280,12 +290,18 @@ void disp_ext_type() {
}
void disp_ext_speed() {
- if (uiCfg.extruSpeed == 20)
- lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_E_SPEED, "bmp_speed_high.bin", 0);
- else if (uiCfg.extruSpeed == 1)
- lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_E_SPEED, "bmp_speed_slow.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_E_SPEED, "bmp_speed_normal.bin", 0);
+ if (uiCfg.extruSpeed == 20) {
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, "F:/bmp_speed_high.bin");
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, "F:/bmp_speed_high.bin");
+ }
+ else if (uiCfg.extruSpeed == 1) {
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, "F:/bmp_speed_slow.bin");
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, "F:/bmp_speed_slow.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, "F:/bmp_speed_normal.bin");
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, "F:/bmp_speed_normal.bin");
+ }
if (gCfgItems.multiple_language != 0) {
if (uiCfg.extruSpeed == 20) {
@@ -348,12 +364,18 @@ void disp_extru_amount() {
}
void disp_ext_step() {
- if (uiCfg.extruStep == 1)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_E_STEP, "bmp_step1_mm.bin", 0);
- else if (uiCfg.extruStep == 5)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_E_STEP, "bmp_step5_mm.bin", 0);
- else if (uiCfg.extruStep == 10)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_E_STEP, "bmp_step10_mm.bin", 0);
+ if (uiCfg.extruStep == 1) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step1_mm.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step1_mm.bin");
+ }
+ else if (uiCfg.extruStep == 5) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step5_mm.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step5_mm.bin");
+ }
+ else if (uiCfg.extruStep == 10) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step10_mm.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step10_mm.bin");
+ }
if (gCfgItems.multiple_language != 0) {
if (uiCfg.extruStep == 1) {
@@ -371,6 +393,11 @@ void disp_ext_step() {
}
}
-void lv_clear_extrusion() { lv_obj_del(scr); }
+void lv_clear_extrusion() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp
index e1975aca7e..8cdc14964f 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp
@@ -35,6 +35,7 @@
#include "../../../../gcode/queue.h"
#include "../../../../gcode/gcode.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
static lv_obj_t * fanText;
@@ -138,8 +139,6 @@ void lv_draw_fan(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
// Create an Image button
buttonAdd = lv_imgbtn_create(scr, NULL);
buttonDec = lv_imgbtn_create(scr, NULL);
@@ -148,41 +147,41 @@ void lv_draw_fan(void) {
buttonOff = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_F_ADD, "bmp_Add.bin", 0);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_F_ADD, NULL, 0);
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, "F:/bmp_Add.bin");
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, "F:/bmp_Add.bin");
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
#if 1
- lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_F_DEC, "bmp_Dec.bin", 0);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_F_DEC, NULL, 0);
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, "F:/bmp_Dec.bin");
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, "F:/bmp_Dec.bin");
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonHigh, event_handler,ID_F_HIGH,"bmp_speed255.bin",0);
- lv_imgbtn_set_src(buttonHigh, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonHigh, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonHigh, event_handler,ID_F_HIGH, NULL,0);
+ lv_imgbtn_set_src(buttonHigh, LV_BTN_STATE_REL, "F:/bmp_speed255.bin");
+ lv_imgbtn_set_src(buttonHigh, LV_BTN_STATE_PR, "F:/bmp_speed255.bin");
lv_imgbtn_set_style(buttonHigh, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonHigh, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonMid, event_handler,ID_F_MID,"bmp_speed127.bin",0);
- lv_imgbtn_set_src(buttonMid, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonMid, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonMid, event_handler,ID_F_MID, NULL,0);
+ lv_imgbtn_set_src(buttonMid, LV_BTN_STATE_REL, "F:/bmp_speed127.bin");
+ lv_imgbtn_set_src(buttonMid, LV_BTN_STATE_PR, "F:/bmp_speed127.bin");
lv_imgbtn_set_style(buttonMid, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonMid, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonOff, event_handler,ID_F_OFF,"bmp_speed0.bin",0);
- lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonOff, event_handler,ID_F_OFF, NULL,0);
+ lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_REL, "F:/bmp_speed0.bin");
+ lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_PR, "F:/bmp_speed0.bin");
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler,ID_F_RETURN,"bmp_return.bin",0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler,ID_F_RETURN, NULL,0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
@@ -229,6 +228,16 @@ void lv_draw_fan(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonAdd);
+ lv_group_add_obj(g, buttonDec);
+ lv_group_add_obj(g, buttonHigh);
+ lv_group_add_obj(g, buttonMid);
+ lv_group_add_obj(g, buttonOff);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
fanText = lv_label_create(scr, NULL);
lv_obj_set_style(fanText, &tft_style_label_rel);
@@ -246,6 +255,11 @@ void disp_fan_value() {
lv_obj_align(fanText, NULL, LV_ALIGN_CENTER, 0, -65);
}
-void lv_clear_fan() { lv_obj_del(scr); }
+void lv_clear_fan() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.cpp
new file mode 100644
index 0000000000..83f9e53677
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.cpp
@@ -0,0 +1,270 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/temperature.h"
+#include "../../../../gcode/queue.h"
+#include "../../../../gcode/gcode.h"
+#include "../../../../module/motion.h"
+#include "../../../../module/planner.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+static lv_obj_t *buttoType;
+static lv_obj_t *labelType;
+static lv_obj_t * tempText1;
+
+#define ID_FILAMNT_IN 1
+#define ID_FILAMNT_OUT 2
+#define ID_FILAMNT_TYPE 3
+#define ID_FILAMNT_RETURN 4
+
+extern feedRate_t feedrate_mm_s;
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_FILAMNT_IN:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.filament_load_heat_flg = 1;
+ if ((abs(thermalManager.temp_hotend[uiCfg.curSprayerChoose].target - thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius) <= 1)
+ || (gCfgItems.filament_limit_temper <= thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius)) {
+ lv_clear_filament_change();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED);
+ }
+ else {
+ lv_clear_filament_change();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_LOAD_HEAT);
+ if (thermalManager.temp_hotend[uiCfg.curSprayerChoose].target < gCfgItems.filament_limit_temper) {
+ thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = gCfgItems.filament_limit_temper;
+ thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
+ }
+ }
+ }
+ break;
+ case ID_FILAMNT_OUT:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.filament_unload_heat_flg=1;
+ if ((thermalManager.temp_hotend[uiCfg.curSprayerChoose].target > 0)
+ && ((abs((int)((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target - thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius)) <= 1)
+ || ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius >= gCfgItems.filament_limit_temper))
+ ) {
+ lv_clear_filament_change();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED);
+ }
+ else {
+ lv_clear_filament_change();
+ lv_draw_dialog(DIALOG_TYPE_FILAMENT_UNLOAD_HEAT);
+ if (thermalManager.temp_hotend[uiCfg.curSprayerChoose].target < gCfgItems.filament_limit_temper) {
+ thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = gCfgItems.filament_limit_temper;
+ thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
+ }
+ filament_sprayer_temp();
+ }
+ }
+ break;
+ case ID_FILAMNT_TYPE:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ #if HAS_MULTI_EXTRUDER
+ if (uiCfg.curSprayerChoose == 0)
+ uiCfg.curSprayerChoose = 1;
+ else if (uiCfg.curSprayerChoose == 1)
+ uiCfg.curSprayerChoose = 0;
+ #endif
+ disp_filament_type();
+ }
+ break;
+ case ID_FILAMNT_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ #if HAS_MULTI_EXTRUDER
+ if (uiCfg.print_state != IDLE && uiCfg.print_state != REPRINTED)
+ gcode.process_subcommands_now_P(uiCfg.curSprayerChoose_bak == 1 ? PSTR("T1") : PSTR("T0"));
+ #endif
+ feedrate_mm_s = (float)uiCfg.moveSpeed_bak;
+ if (uiCfg.print_state == PAUSED)
+ planner.set_e_position_mm((destination.e = current_position.e = uiCfg.current_e_position_bak));
+ //current_position.e = destination.e = uiCfg.current_e_position_bak;
+ thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = uiCfg.desireSprayerTempBak;
+
+ clear_cur_ui();
+ draw_return_ui();
+ }
+ break;
+ }
+}
+
+void lv_draw_filament_change(void) {
+ lv_obj_t *buttonIn, *buttonOut;
+ lv_obj_t *buttonBack;
+
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != FILAMENTCHANGE_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = FILAMENTCHANGE_UI;
+ }
+ disp_state = FILAMENTCHANGE_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, creat_title_text());
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ // Create an Image button
+ buttonIn = lv_imgbtn_create(scr, NULL);
+ buttonOut = lv_imgbtn_create(scr, NULL);
+ buttoType = lv_imgbtn_create(scr, NULL);
+ buttonBack = lv_imgbtn_create(scr, NULL);
+
+ lv_obj_set_event_cb_mks(buttonIn, event_handler, ID_FILAMNT_IN, NULL, 0);
+ lv_imgbtn_set_src(buttonIn, LV_BTN_STATE_REL, "F:/bmp_in.bin");
+ lv_imgbtn_set_src(buttonIn, LV_BTN_STATE_PR, "F:/bmp_in.bin");
+ lv_imgbtn_set_style(buttonIn, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonIn, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_obj_clear_protect(buttonIn, LV_PROTECT_FOLLOW);
+
+ lv_obj_set_event_cb_mks(buttonOut, event_handler, ID_FILAMNT_OUT, NULL, 0);
+ lv_imgbtn_set_src(buttonOut, LV_BTN_STATE_REL, "F:/bmp_out.bin");
+ lv_imgbtn_set_src(buttonOut, LV_BTN_STATE_PR, "F:/bmp_out.bin");
+ lv_imgbtn_set_style(buttonOut, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonOut, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttoType, event_handler, ID_FILAMNT_TYPE, NULL, 0);
+ lv_imgbtn_set_style(buttoType, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttoType, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_FILAMNT_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_pos(buttonIn, INTERVAL_V, titleHeight);
+ lv_obj_set_pos(buttonOut, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
+ lv_obj_set_pos(buttoType, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+
+ // Create labels on the image buttons
+ lv_btn_set_layout(buttonIn, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonOut, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttoType, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+
+ lv_obj_t *labelIn = lv_label_create(buttonIn, NULL);
+ lv_obj_t *labelOut = lv_label_create(buttonOut, NULL);
+ labelType = lv_label_create(buttoType, NULL);
+ lv_obj_t *label_Back = lv_label_create(buttonBack, NULL);
+
+ if (gCfgItems.multiple_language != 0) {
+ lv_label_set_text(labelIn, filament_menu.in);
+ lv_obj_align(labelIn, buttonIn, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(labelOut, filament_menu.out);
+ lv_obj_align(labelOut, buttonOut, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonIn);
+ lv_group_add_obj(g, buttonOut);
+ lv_group_add_obj(g, buttoType);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+
+ disp_filament_type();
+
+ tempText1 = lv_label_create(scr, NULL);
+ lv_obj_set_style(tempText1, &tft_style_label_rel);
+ disp_filament_temp();
+}
+
+void disp_filament_type() {
+ if (uiCfg.curSprayerChoose == 1) {
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, "F:/bmp_extru2.bin");
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, "F:/bmp_extru2.bin");
+ if (gCfgItems.multiple_language != 0) {
+ lv_label_set_text(labelType, preheat_menu.ext2);
+ lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
+ }
+ else {
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, "F:/bmp_extru1.bin");
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, "F:/bmp_extru1.bin");
+ if (gCfgItems.multiple_language != 0) {
+ lv_label_set_text(labelType, preheat_menu.ext1);
+ lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
+ }
+}
+
+void disp_filament_temp() {
+ char buf[20] = {0};
+
+ public_buf_l[0] = '\0';
+
+ if (uiCfg.curSprayerChoose < 1)
+ strcat(public_buf_l, preheat_menu.ext1);
+ else
+ strcat(public_buf_l, preheat_menu.ext2);
+ sprintf(buf, preheat_menu.value_state, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target);
+
+ strcat_P(public_buf_l, PSTR(": "));
+ strcat(public_buf_l, buf);
+ lv_label_set_text(tempText1, public_buf_l);
+ lv_obj_align(tempText1, NULL, LV_ALIGN_CENTER, 0, -50);
+}
+
+void lv_clear_filament_change() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.h
new file mode 100644
index 0000000000..b0068f7f0f
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_change.h
@@ -0,0 +1,36 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_filament_change(void);
+extern void lv_clear_filament_change();
+extern void disp_filament_type();
+extern void disp_filament_temp();
+
+//extern void disp_temp_ready_print();
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.cpp
new file mode 100644
index 0000000000..06ab35f3f0
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.cpp
@@ -0,0 +1,329 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/planner.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+#define ID_FILAMENT_SET_RETURN 1
+#define ID_FILAMENT_SET_IN_LENGTH 2
+#define ID_FILAMENT_SET_IN_SPEED 3
+#define ID_FILAMENT_SET_OUT_LENGTH 4
+#define ID_FILAMENT_SET_OUT_SPEED 5
+#define ID_FILAMENT_SET_TEMP 6
+#define ID_FILAMENT_SET_DOWN 12
+#define ID_FILAMENT_SET_UP 13
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_FILAMENT_SET_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 0;
+ lv_clear_filament_settings();
+ draw_return_ui();
+ }
+ break;
+ case ID_FILAMENT_SET_IN_LENGTH:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = load_length;
+ lv_clear_filament_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_FILAMENT_SET_IN_SPEED:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = load_speed;
+ lv_clear_filament_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_FILAMENT_SET_OUT_LENGTH:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = unload_length;
+ lv_clear_filament_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_FILAMENT_SET_OUT_SPEED:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = unload_speed;
+ lv_clear_filament_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_FILAMENT_SET_TEMP:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = filament_temp;
+ lv_clear_filament_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_FILAMENT_SET_UP:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 0;
+ lv_clear_filament_settings();
+ lv_draw_filament_settings();
+ }
+ break;
+ case ID_FILAMENT_SET_DOWN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 1;
+ lv_clear_filament_settings();
+ lv_draw_filament_settings();
+ }
+ break;
+ }
+}
+
+void lv_draw_filament_settings(void) {
+ lv_obj_t *buttonBack = NULL, *label_Back = NULL, *buttonTurnPage = NULL, *labelTurnPage = NULL;
+ lv_obj_t *labelInLengthText = NULL, *buttonInLengthValue = NULL, *labelInLengthValue = NULL;
+ lv_obj_t *labelInSpeedText = NULL, *buttonInSpeedValue = NULL, *labelInSpeedValue = NULL;
+ lv_obj_t *labelOutLengthText = NULL, *buttonOutLengthValue = NULL, *labelOutLengthValue = NULL;
+ lv_obj_t *labelOutSpeedText = NULL, *buttonOutSpeedValue = NULL, *labelOutSpeedValue = NULL;
+ lv_obj_t *labelTemperText = NULL, *buttonTemperValue = NULL, *labelTemperValue = NULL;
+ lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != FILAMENT_SETTINGS_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = FILAMENT_SETTINGS_UI;
+ }
+ disp_state = FILAMENT_SETTINGS_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, machine_menu.FilamentConfTitle);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ if (uiCfg.para_ui_page != 1) {
+ labelInLengthText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelInLengthText, &tft_style_label_rel);
+ lv_obj_set_pos(labelInLengthText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelInLengthText, machine_menu.InLength);
+
+ buttonInLengthValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonInLengthValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonInLengthValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonInLengthValue, event_handler, ID_FILAMENT_SET_IN_LENGTH, NULL, 0);
+ lv_btn_set_style(buttonInLengthValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonInLengthValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelInLengthValue = lv_label_create(buttonInLengthValue, NULL);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ labelInSpeedText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelInSpeedText, &tft_style_label_rel);
+ lv_obj_set_pos(labelInSpeedText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelInSpeedText, machine_menu.InSpeed);
+
+ buttonInSpeedValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonInSpeedValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonInSpeedValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonInSpeedValue, event_handler, ID_FILAMENT_SET_IN_SPEED, NULL, 0);
+ lv_btn_set_style(buttonInSpeedValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonInSpeedValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelInSpeedValue = lv_label_create(buttonInSpeedValue, NULL);
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+
+ labelOutLengthText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelOutLengthText, &tft_style_label_rel);
+ lv_obj_set_pos(labelOutLengthText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 6);
+ lv_label_set_text(labelOutLengthText, machine_menu.OutLength);
+
+ buttonOutLengthValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonOutLengthValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonOutLengthValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonOutLengthValue, event_handler, ID_FILAMENT_SET_OUT_LENGTH, NULL, 0);
+ lv_btn_set_style(buttonOutLengthValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonOutLengthValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelOutLengthValue = lv_label_create(buttonOutLengthValue, NULL);
+
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+
+ labelOutSpeedText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelOutSpeedText, &tft_style_label_rel);
+ lv_obj_set_pos(labelOutSpeedText, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelOutSpeedText, machine_menu.OutSpeed);
+
+ buttonOutSpeedValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonOutSpeedValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonOutSpeedValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonOutSpeedValue, event_handler, ID_FILAMENT_SET_OUT_SPEED, NULL, 0);
+ lv_btn_set_style(buttonOutSpeedValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonOutSpeedValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelOutSpeedValue = lv_label_create(buttonOutSpeedValue, NULL);
+
+ line4 = lv_line_create(scr, NULL);
+ lv_ex_line(line4, line_points[3]);
+
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_FILAMENT_SET_DOWN, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonInLengthValue);
+ lv_group_add_obj(g, buttonInSpeedValue);
+ lv_group_add_obj(g, buttonOutLengthValue);
+ lv_group_add_obj(g, buttonOutSpeedValue);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
+ }
+ else {
+ labelTemperText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelTemperText, &tft_style_label_rel);
+ lv_obj_set_pos(labelTemperText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelTemperText, machine_menu.FilamentTemperature);
+
+ buttonTemperValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonTemperValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonTemperValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonTemperValue, event_handler, ID_FILAMENT_SET_TEMP, NULL, 0);
+ lv_btn_set_style(buttonTemperValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonTemperValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelTemperValue = lv_label_create(buttonTemperValue, NULL);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_FILAMENT_SET_UP, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonTemperValue);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
+ }
+
+ lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
+ lv_obj_set_size(buttonTurnPage, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ labelTurnPage = lv_label_create(buttonTurnPage, NULL);
+
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_FILAMENT_SET_RETURN, NULL, 0);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
+ if (gCfgItems.multiple_language != 0) {
+ if (uiCfg.para_ui_page != 1) {
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.filamentchange_load_length);
+ lv_label_set_text(labelInLengthValue, public_buf_l);
+ lv_obj_align(labelInLengthValue, buttonInLengthValue, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.filamentchange_load_speed);
+ lv_label_set_text(labelInSpeedValue, public_buf_l);
+ lv_obj_align(labelInSpeedValue, buttonInSpeedValue, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.filamentchange_unload_length);
+ lv_label_set_text(labelOutLengthValue, public_buf_l);
+ lv_obj_align(labelOutLengthValue, buttonOutLengthValue, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.filamentchange_unload_speed);
+ lv_label_set_text(labelOutSpeedValue, public_buf_l);
+ lv_obj_align(labelOutSpeedValue, buttonOutSpeedValue, LV_ALIGN_CENTER, 0, 0);
+
+ lv_label_set_text(labelTurnPage, machine_menu.next);
+ lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
+ }
+ else {
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.filament_limit_temper);
+ lv_label_set_text(labelTemperValue, public_buf_l);
+ lv_obj_align(labelTemperValue, buttonTemperValue, LV_ALIGN_CENTER, 0, 0);
+
+ lv_label_set_text(labelTurnPage, machine_menu.previous);
+ lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
+ }
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+ }
+}
+
+void lv_clear_filament_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.h
new file mode 100644
index 0000000000..a5ae542895
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_filament_settings.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_filament_settings(void);
+extern void lv_clear_filament_settings();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp
index 595d1078c7..22e05f0e00 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp
@@ -34,6 +34,7 @@
#include "draw_ui.h"
#include "../../../../gcode/queue.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_H_ALL 1
@@ -92,7 +93,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_home();
lv_draw_tool();
}
break;
@@ -125,128 +126,93 @@ void lv_draw_home(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
- /*Create an Image button*/
- //buttonWifi = lv_imgbtn_create(scr, NULL);
- buttonHomeAll = lv_imgbtn_create(scr, NULL);
- buttonHomeX = lv_imgbtn_create(scr, NULL);
+ // Create image buttons
+ //buttonWifi = lv_imgbtn_create(scr, NULL);
+ buttonHomeAll = lv_imgbtn_create(scr, NULL);
+ buttonHomeX = lv_imgbtn_create(scr, NULL);
//buttonContinue = lv_imgbtn_create(scr, NULL);
- buttonHomeY = lv_imgbtn_create(scr, NULL);
- buttonHomeZ = lv_imgbtn_create(scr, NULL);
- buttonBack = lv_imgbtn_create(scr, NULL);
- buttonOffAll = lv_imgbtn_create(scr, NULL);
- buttonOffXY = lv_imgbtn_create(scr, NULL);
-
- //lv_obj_set_event_cb_mks(buttonWifi, event_handler,ID_S_WIFI,"bmp_Wifi.bin",0);
- //lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_REL, &tft_style_label_rel);
- //lv_obj_clear_protect(buttonWifi, LV_PROTECT_FOLLOW);
+ buttonHomeY = lv_imgbtn_create(scr, NULL);
+ buttonHomeZ = lv_imgbtn_create(scr, NULL);
+ buttonOffAll = lv_imgbtn_create(scr, NULL);
+ buttonOffXY = lv_imgbtn_create(scr, NULL);
+ buttonBack = lv_imgbtn_create(scr, NULL);
+
#if 1
- lv_obj_set_event_cb_mks(buttonHomeAll, event_handler,ID_H_ALL,"bmp_zero.bin",0);
- lv_imgbtn_set_src(buttonHomeAll, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonHomeAll, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonHomeAll, event_handler,ID_H_ALL, NULL,0);
+ lv_imgbtn_set_src(buttonHomeAll, LV_BTN_STATE_REL, "F:/bmp_zeroAll.bin");
+ lv_imgbtn_set_src(buttonHomeAll, LV_BTN_STATE_PR, "F:/bmp_zeroAll.bin");
lv_imgbtn_set_style(buttonHomeAll, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonHomeAll, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonHomeX, event_handler, ID_H_X, "bmp_zeroX.bin", 0);
- lv_imgbtn_set_src(buttonHomeX, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonHomeX, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonHomeX, event_handler, ID_H_X, NULL, 0);
+ lv_imgbtn_set_src(buttonHomeX, LV_BTN_STATE_REL, "F:/bmp_zeroX.bin");
+ lv_imgbtn_set_src(buttonHomeX, LV_BTN_STATE_PR, "F:/bmp_zeroX.bin");
lv_imgbtn_set_style(buttonHomeX, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonHomeX, LV_BTN_STATE_REL, &tft_style_label_rel);
- //lv_obj_set_event_cb_mks(buttonContinue, event_handler,ID_S_CONTINUE,"bmp_Breakpoint.bin",0);
- //lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonHomeY, event_handler, ID_H_Y, "bmp_zeroY.bin", 0);
- lv_imgbtn_set_src(buttonHomeY, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonHomeY, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonHomeY, event_handler, ID_H_Y, NULL, 0);
+ lv_imgbtn_set_src(buttonHomeY, LV_BTN_STATE_REL, "F:/bmp_zeroY.bin");
+ lv_imgbtn_set_src(buttonHomeY, LV_BTN_STATE_PR, "F:/bmp_zeroY.bin");
lv_imgbtn_set_style(buttonHomeY, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonHomeY, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonHomeZ, event_handler, ID_H_Z, "bmp_zeroZ.bin", 0);
- lv_imgbtn_set_src(buttonHomeZ, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonHomeZ, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonHomeZ, event_handler, ID_H_Z, NULL, 0);
+ lv_imgbtn_set_src(buttonHomeZ, LV_BTN_STATE_REL, "F:/bmp_zeroZ.bin");
+ lv_imgbtn_set_src(buttonHomeZ, LV_BTN_STATE_PR, "F:/bmp_zeroZ.bin");
lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonOffAll, event_handler,ID_H_OFF_ALL,"bmp_function1.bin",0);
- lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonOffAll, event_handler,ID_H_OFF_ALL, NULL,0);
+ lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_REL, "F:/bmp_function1.bin");
+ lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_PR, "F:/bmp_function1.bin");
lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonOffXY, event_handler,ID_H_OFF_XY,"bmp_function1.bin",0);
- lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonOffXY, event_handler,ID_H_OFF_XY, NULL,0);
+ lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_REL, "F:/bmp_function1.bin");
+ lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_PR, "F:/bmp_function1.bin");
lv_imgbtn_set_style(buttonOffXY, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonOffXY, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler,ID_H_RETURN,"bmp_return.bin",0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler,ID_H_RETURN, NULL,0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
- /*lv_obj_set_pos(buttonWifi, INTERVAL_V, titleHeight);
- lv_obj_set_pos(buttonFan, BTN_X_PIXEL+INTERVAL_V*2, titleHeight);
- lv_obj_set_pos(buttonAbout, BTN_X_PIXEL*2+INTERVAL_V*3, titleHeight);
- lv_obj_set_pos(buttonContinue, BTN_X_PIXEL*3+INTERVAL_V*4, titleHeight);
- lv_obj_set_pos(buMotorOff, INTERVAL_V, BTN_Y_PIXEL+INTERVAL_H+titleHeight);
- lv_obj_set_pos(buttonLanguage, BTN_X_PIXEL+INTERVAL_V*2, BTN_Y_PIXEL+INTERVAL_H+titleHeight);
- lv_obj_set_pos(buttonBack, BTN_X_PIXEL*3+INTERVAL_V*4, BTN_Y_PIXEL+INTERVAL_H+titleHeight);*/
-
- //lv_obj_set_pos(buttonWifi, INTERVAL_V, titleHeight);
+ lv_obj_set_pos(buttonHomeAll, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonHomeX, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonHomeY, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
- //lv_obj_set_pos(buttonContinue,BTN_X_PIXEL*3+INTERVAL_V*4,titleHeight);
lv_obj_set_pos(buttonHomeZ, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
- lv_obj_set_pos(buttonHomeAll, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonOffAll, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonOffXY, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
- /*Create a label on the Image button*/
- //lv_btn_set_layout(buttonWifi, LV_LAYOUT_OFF);
+ // Create labels on the image buttons
lv_btn_set_layout(buttonHomeAll, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHomeX, LV_LAYOUT_OFF);
- //lv_btn_set_layout(buttonContinue, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHomeY, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHomeZ, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOffAll, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOffXY, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
- //lv_obj_t * labelWifi= lv_label_create(buttonWifi, NULL);
- lv_obj_t * labelHomeAll = lv_label_create(buttonHomeAll, NULL);
- lv_obj_t * labelHomeX = lv_label_create(buttonHomeX, NULL);
- //lv_obj_t * label_Continue = lv_label_create(buttonContinue, NULL);
- lv_obj_t * labelHomeY = lv_label_create(buttonHomeY, NULL);
- lv_obj_t * labelHomeZ = lv_label_create(buttonHomeZ, NULL);
- lv_obj_t * labelOffAll = lv_label_create(buttonOffAll, NULL);
- lv_obj_t * labelOffXY = lv_label_create(buttonOffXY, NULL);
- lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
-
+ lv_obj_t *labelHomeAll = lv_label_create(buttonHomeAll, NULL);
+ lv_obj_t *labelHomeX = lv_label_create(buttonHomeX, NULL);
+ lv_obj_t *labelHomeY = lv_label_create(buttonHomeY, NULL);
+ lv_obj_t *labelHomeZ = lv_label_create(buttonHomeZ, NULL);
+ lv_obj_t *labelOffAll = lv_label_create(buttonOffAll, NULL);
+ lv_obj_t *labelOffXY = lv_label_create(buttonOffXY, NULL);
+ lv_obj_t *label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
- //lv_label_set_text(labelWifi, set_menu.wifi);
- //lv_obj_align(labelWifi, buttonWifi, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
-
lv_label_set_text(labelHomeAll, home_menu.home_all);
lv_obj_align(labelHomeAll, buttonHomeAll, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelHomeX, home_menu.home_x);
lv_obj_align(labelHomeX, buttonHomeX, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- //lv_label_set_text(label_Continue, set_menu.breakpoint);
- //lv_obj_align(label_Continue, buttonContinue, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
-
lv_label_set_text(labelHomeY, home_menu.home_y);
lv_obj_align(labelHomeY, buttonHomeY, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@@ -262,8 +228,25 @@ void lv_draw_home(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonHomeAll);
+ lv_group_add_obj(g, buttonHomeX);
+ lv_group_add_obj(g, buttonHomeY);
+ lv_group_add_obj(g, buttonHomeZ);
+ lv_group_add_obj(g, buttonOffAll);
+ lv_group_add_obj(g, buttonOffXY);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_home() { lv_obj_del(scr); }
+void lv_clear_home() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.cpp
new file mode 100644
index 0000000000..d22eeb157e
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.cpp
@@ -0,0 +1,262 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/planner.h"
+#include "../../../../module/probe.h"
+
+#if USE_SENSORLESS
+#include "../../../../module/stepper/indirection.h"
+#include "../../../../feature/tmc_util.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+#define ID_SENSITIVITY_RETURN 1
+#define ID_SENSITIVITY_X 2
+#define ID_SENSITIVITY_Y 3
+#define ID_SENSITIVITY_Z 4
+#define ID_SENSITIVITY_Z2 5
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_SENSITIVITY_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_homing_sensitivity_settings();
+ draw_return_ui();
+ }
+ break;
+ case ID_SENSITIVITY_X:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = x_sensitivity;
+ lv_clear_homing_sensitivity_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_SENSITIVITY_Y:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = y_sensitivity;
+ lv_clear_homing_sensitivity_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_SENSITIVITY_Z:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = z_sensitivity;
+ lv_clear_homing_sensitivity_settings();
+ lv_draw_number_key();
+ }
+ break;
+ #if Z2_SENSORLESS
+ case ID_SENSITIVITY_Z2:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = z2_sensitivity;
+ lv_clear_homing_sensitivity_settings();
+ lv_draw_number_key();
+ }
+ break;
+ #endif
+ }
+}
+
+void lv_draw_homing_sensitivity_settings(void) {
+ lv_obj_t *buttonBack = NULL, *label_Back = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL;
+ #if Z2_SENSORLESS
+ lv_obj_t *labelZ2Text = NULL, *buttonZ2Value = NULL, *labelZ2Value = NULL;
+ lv_obj_t * line4 = NULL;
+ #endif
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != HOMING_SENSITIVITY_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = HOMING_SENSITIVITY_UI;
+ }
+ disp_state = HOMING_SENSITIVITY_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, machine_menu.HomingSensitivityConfTitle);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelXText, machine_menu.X_Sensitivity);
+
+ buttonXValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_SENSITIVITY_X, NULL, 0);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelXValue = lv_label_create(buttonXValue, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonXValue);
+ #endif
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelYText, machine_menu.Y_Sensitivity);
+
+ buttonYValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_SENSITIVITY_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelYValue = lv_label_create(buttonYValue, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonYValue);
+ #endif
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelZText, machine_menu.Z_Sensitivity);
+
+ buttonZValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_SENSITIVITY_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelZValue = lv_label_create(buttonZValue, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable == true) lv_group_add_obj(g, buttonZValue);
+ #endif
+
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+
+ #if Z2_SENSORLESS
+ labelZ2Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZ2Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelZ2Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelZ2Text, machine_menu.Z2_Sensitivity);
+
+ buttonZ2Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonZ2Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonZ2Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZ2Value, event_handler, ID_SENSITIVITY_Z2, NULL, 0);
+ lv_btn_set_style(buttonZ2Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZ2Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelZ2Value = lv_label_create(buttonZ2Value, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonZ2Value);
+ #endif
+
+ line4 = lv_line_create(scr, NULL);
+ lv_ex_line(line4, line_points[3]);
+ #endif
+
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_SENSITIVITY_RETURN, NULL, 0);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
+ if (gCfgItems.multiple_language != 0) {
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), TERN(X_SENSORLESS, stepperX.homing_threshold(), 0));
+ lv_label_set_text(labelXValue, public_buf_l);
+ lv_obj_align(labelXValue, buttonXValue, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), TERN(Y_SENSORLESS, stepperY.homing_threshold(), 0));
+ lv_label_set_text(labelYValue, public_buf_l);
+ lv_obj_align(labelYValue, buttonYValue, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), TERN(Z_SENSORLESS, stepperZ.homing_threshold(), 0));
+ lv_label_set_text(labelZValue, public_buf_l);
+ lv_obj_align(labelZValue, buttonZValue, LV_ALIGN_CENTER, 0, 0);
+
+ #if Z2_SENSORLESS
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), TERN(Z2_SENSORLESS, stepperZ2.homing_threshold(), 0));
+ lv_label_set_text(labelZ2Value, public_buf_l);
+ lv_obj_align(labelZ2Value, buttonZ2Value, LV_ALIGN_CENTER, 0, 0);
+ #endif
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+ }
+}
+
+void lv_clear_homing_sensitivity_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // USE_SENSORLESS
+
+#endif // HAS_TFT_LVGL_UI && USE_SENSORLESS
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.h
new file mode 100644
index 0000000000..0c554702b1
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_homing_sensitivity_settings.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_homing_sensitivity_settings(void);
+extern void lv_clear_homing_sensitivity_settings();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_jerk_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_jerk_settings.cpp
index a552762cf3..8c359233e6 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_jerk_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_jerk_settings.cpp
@@ -29,6 +29,7 @@
#include "../../../../MarlinCore.h"
#include "../../../../module/planner.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_JERK_RETURN 1
@@ -93,10 +94,10 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_jerk_settings(void) {
lv_obj_t *buttonBack = NULL, *label_Back = NULL;
- lv_obj_t *buttonXText = NULL, *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
- lv_obj_t *buttonYText = NULL, *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
- lv_obj_t *buttonZText = NULL, *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
- lv_obj_t *buttonEText = NULL, *labelEText = NULL, *buttonEValue = NULL, *labelEValue = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t *labelEText = NULL, *buttonEValue = NULL, *labelEValue = NULL;
lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != JERK_UI) {
disp_state_stack._disp_index++;
@@ -117,109 +118,89 @@ void lv_draw_jerk_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- // LV_IMG_DECLARE(bmp_para_arrow);
- LV_IMG_DECLARE(bmp_para_bank);
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelXText, machine_menu.X_Jerk);
- buttonXText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonXText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonXText, event_handler);
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonXText, LV_LAYOUT_OFF);
- labelXText = lv_label_create(buttonXText, NULL); /*Add a label to the button*/
-
- buttonXValue = lv_imgbtn_create(scr, NULL);
+ buttonXValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_JERK_X, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonXValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_JERK_X, NULL, 0);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
labelXValue = lv_label_create(buttonXValue, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonYText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonYText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonYText, event_handler);
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonYText, LV_LAYOUT_OFF);
- labelYText = lv_label_create(buttonYText, NULL); /*Add a label to the button*/
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelYText, machine_menu.Y_Jerk);
- buttonYValue = lv_imgbtn_create(scr, NULL);
+ buttonYValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_JERK_Y, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonYValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_JERK_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
labelYValue = lv_label_create(buttonYValue, NULL);
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
- buttonZText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonZText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonZText, event_handler);
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonZText, LV_LAYOUT_OFF);
- labelZText = lv_label_create(buttonZText, NULL); /*Add a label to the button*/
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelZText, machine_menu.Z_Jerk);
- buttonZValue = lv_imgbtn_create(scr, NULL);
+ buttonZValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_JERK_Z, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonZValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_JERK_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
labelZValue = lv_label_create(buttonZValue, NULL);
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
- buttonEText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonEText, PARA_UI_POS_X, PARA_UI_POS_Y * 4); /*Set its position*/
- lv_obj_set_size(buttonEText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonEText, event_handler);
- lv_btn_set_style(buttonEText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonEText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonEText, LV_LAYOUT_OFF);
- labelEText = lv_label_create(buttonEText, NULL); /*Add a label to the button*/
+ labelEText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelEText, &tft_style_label_rel);
+ lv_obj_set_pos(labelEText, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelEText, machine_menu.E_Jerk);
- buttonEValue = lv_imgbtn_create(scr, NULL);
+ buttonEValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonEValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonEValue, event_handler, ID_JERK_E, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonEValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonEValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonEValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonEValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonEValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonEValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonEValue, event_handler, ID_JERK_E, NULL, 0);
+ lv_btn_set_style(buttonEValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonEValue, LV_BTN_STYLE_PR, &style_para_value);
labelEValue = lv_label_create(buttonEValue, NULL);
line4 = lv_line_create(scr, NULL);
lv_ex_line(line4, line_points[3]);
- buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_JERK_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_JERK_RETURN, NULL, 0);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
- lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
label_Back = lv_label_create(buttonBack, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable == true) {
+ lv_group_add_obj(g, buttonXValue);
+ lv_group_add_obj(g, buttonYValue);
+ lv_group_add_obj(g, buttonZValue);
+ lv_group_add_obj(g, buttonEValue);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+
if (gCfgItems.multiple_language != 0) {
ZERO(public_buf_l);
sprintf_P(public_buf_l, PSTR("%.1f"), planner.max_jerk[X_AXIS]);
@@ -241,23 +222,16 @@ void lv_draw_jerk_settings(void) {
lv_label_set_text(labelEValue, public_buf_l);
lv_obj_align(labelEValue, buttonEValue, LV_ALIGN_CENTER, 0, 0);
- lv_label_set_text(labelXText, machine_menu.X_Jerk);
- lv_obj_align(labelXText, buttonXText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelYText, machine_menu.Y_Jerk);
- lv_obj_align(labelYText, buttonYText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelZText, machine_menu.Z_Jerk);
- lv_obj_align(labelZText, buttonZText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelEText, machine_menu.E_Jerk);
- lv_obj_align(labelEText, buttonEText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
}
}
-void lv_clear_jerk_settings() { lv_obj_del(scr); }
+void lv_clear_jerk_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI && HAS_CLASSIC_JERK
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.cpp
new file mode 100644
index 0000000000..f126ffe1dd
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.cpp
@@ -0,0 +1,286 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../../Configuration.h"
+#include "../../../../MarlinCore.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+#define LV_KB_CTRL_BTN_FLAGS (LV_BTNM_CTRL_NO_REPEAT | LV_BTNM_CTRL_CLICK_TRIG)
+
+static const char * kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", LV_SYMBOL_BACKSPACE, "\n",
+ "ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", LV_SYMBOL_NEW_LINE, "\n",
+ "_", "-", "z", "x", "c", "v", "b", "n", "m", ".", ",", ":", "\n",
+ LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
+
+static const lv_btnm_ctrl_t kb_ctrl_lc_map[] = {
+ LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
+ LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
+
+static const char * kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", LV_SYMBOL_BACKSPACE, "\n",
+ "abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", LV_SYMBOL_NEW_LINE, "\n",
+ "_", "-", "Z", "X", "C", "V", "B", "N", "M", ".", ",", ":", "\n",
+ LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
+
+static const lv_btnm_ctrl_t kb_ctrl_uc_map[] = {
+ LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
+ LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
+
+static const char * kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", LV_SYMBOL_BACKSPACE, "\n",
+ "abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n",
+ "\\", "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n",
+ LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
+
+static const lv_btnm_ctrl_t kb_ctrl_spec_map[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+ LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
+
+static const lv_btnm_ctrl_t kb_ctrl_num_map[] = {
+ 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+ 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+ 1, 1, 1, 2,
+ 1, 1, 1, 1, 1};
+
+static void lv_kb_event_cb(lv_obj_t * kb, lv_event_t event) {
+ //LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
+ if (event != LV_EVENT_VALUE_CHANGED) return;
+
+ lv_kb_ext_t * ext = (lv_kb_ext_t * )lv_obj_get_ext_attr(kb);
+ const uint16_t btn_id = lv_btnm_get_active_btn(kb);
+ if (btn_id == LV_BTNM_BTN_NONE) return;
+ if (lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_HIDDEN | LV_BTNM_CTRL_INACTIVE)) return;
+ if (lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_NO_REPEAT) && event == LV_EVENT_LONG_PRESSED_REPEAT) return;
+
+ const char * txt = lv_btnm_get_active_btn_text(kb);
+ if (txt == NULL) return;
+
+ // Do the corresponding action according to the text of the button
+ if (strcmp(txt, "abc") == 0) {
+ lv_btnm_set_map(kb, kb_map_lc);
+ lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map);
+ return;
+ }
+ else if (strcmp(txt, "ABC") == 0) {
+ lv_btnm_set_map(kb, kb_map_uc);
+ lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
+ return;
+ }
+ else if (strcmp(txt, "1#") == 0) {
+ lv_btnm_set_map(kb, kb_map_spec);
+ lv_btnm_set_ctrl_map(kb, kb_ctrl_spec_map);
+ return;
+ }
+ else if (strcmp(txt, LV_SYMBOL_CLOSE) == 0) {
+ if (kb->event_cb != lv_kb_def_event_cb) {
+ //lv_res_t res = lv_event_send(kb, LV_EVENT_CANCEL, NULL);
+ //if (res != LV_RES_OK) return;
+ lv_clear_keyboard();
+ draw_return_ui();
+ }
+ else {
+ lv_kb_set_ta(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
+ lv_obj_del(kb);
+ return;
+ }
+ return;
+ }
+ else if (strcmp(txt, LV_SYMBOL_OK) == 0) {
+ if (kb->event_cb != lv_kb_def_event_cb) {
+ //lv_res_t res = lv_event_send(kb, LV_EVENT_APPLY, NULL);
+ //if (res != LV_RES_OK) return;
+ const char * ret_ta_txt = lv_ta_get_text(ext->ta);
+ switch (keyboard_value) {
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case wifiName:
+ memcpy(uiCfg.wifi_name,ret_ta_txt,sizeof(uiCfg.wifi_name));
+ lv_clear_keyboard();
+ draw_return_ui();
+ break;
+ case wifiPassWord:
+ memcpy(uiCfg.wifi_key,ret_ta_txt,sizeof(uiCfg.wifi_name));
+ lv_clear_keyboard();
+ draw_return_ui();
+ break;
+ case wifiConfig:
+ memset((void *)uiCfg.wifi_name, 0, sizeof(uiCfg.wifi_name));
+ memcpy((void *)uiCfg.wifi_name, wifi_list.wifiName[wifi_list.nameIndex], 32);
+
+ memset((void *)uiCfg.wifi_key, 0, sizeof(uiCfg.wifi_key));
+ memcpy((void *)uiCfg.wifi_key, ret_ta_txt, sizeof(uiCfg.wifi_key));
+
+ gCfgItems.wifi_mode_sel = STA_MODEL;
+
+ package_to_wifi(WIFI_PARA_SET, (char *)0, 0);
+
+ memset(public_buf_l,0,sizeof(public_buf_l));
+
+ public_buf_l[0] = 0xA5;
+ public_buf_l[1] = 0x09;
+ public_buf_l[2] = 0x01;
+ public_buf_l[3] = 0x00;
+ public_buf_l[4] = 0x01;
+ public_buf_l[5] = 0xFC;
+ public_buf_l[6] = 0x00;
+ raw_send_to_wifi(public_buf_l, 6);
+
+ last_disp_state = KEY_BOARD_UI;
+ lv_clear_keyboard();
+ wifi_tips_type = TIPS_TYPE_JOINING;
+ lv_draw_wifi_tips();
+ break;
+ #endif // USE_WIFI_FUNCTION
+ case gcodeCommand:
+ uint8_t buf[100];
+ strncpy((char *)buf,ret_ta_txt,sizeof(buf));
+ update_gcode_command(AUTO_LEVELING_COMMAND_ADDR,buf);
+ lv_clear_keyboard();
+ draw_return_ui();
+ break;
+ default: break;
+ }
+ }
+ else {
+ lv_kb_set_ta(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
+ }
+ return;
+ }
+
+ /*Add the characters to the text area if set*/
+ if (ext->ta == NULL) return;
+
+ if (strcmp(txt, "Enter") == 0 || strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
+ lv_ta_add_char(ext->ta, '\n');
+ else if (strcmp(txt, LV_SYMBOL_LEFT) == 0)
+ lv_ta_cursor_left(ext->ta);
+ else if (strcmp(txt, LV_SYMBOL_RIGHT) == 0)
+ lv_ta_cursor_right(ext->ta);
+ else if (strcmp(txt, LV_SYMBOL_BACKSPACE) == 0)
+ lv_ta_del_char(ext->ta);
+ else if (strcmp(txt, "+/-") == 0) {
+ uint16_t cur = lv_ta_get_cursor_pos(ext->ta);
+ const char * ta_txt = lv_ta_get_text(ext->ta);
+ if (ta_txt[0] == '-') {
+ lv_ta_set_cursor_pos(ext->ta, 1);
+ lv_ta_del_char(ext->ta);
+ lv_ta_add_char(ext->ta, '+');
+ lv_ta_set_cursor_pos(ext->ta, cur);
+ }
+ else if (ta_txt[0] == '+') {
+ lv_ta_set_cursor_pos(ext->ta, 1);
+ lv_ta_del_char(ext->ta);
+ lv_ta_add_char(ext->ta, '-');
+ lv_ta_set_cursor_pos(ext->ta, cur);
+ }
+ else {
+ lv_ta_set_cursor_pos(ext->ta, 0);
+ lv_ta_add_char(ext->ta, '-');
+ lv_ta_set_cursor_pos(ext->ta, cur + 1);
+ }
+ }
+ else {
+ lv_ta_add_text(ext->ta, txt);
+ }
+}
+
+void lv_draw_keyboard() {
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != KEY_BOARD_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = KEY_BOARD_UI;
+ }
+ disp_state = KEY_BOARD_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ /*Create styles for the keyboard*/
+ static lv_style_t rel_style, pr_style;
+
+ lv_style_copy(&rel_style, &lv_style_btn_rel);
+ rel_style.body.radius = 0;
+ rel_style.body.border.width = 1;
+ rel_style.body.main_color = lv_color_make(0xa9, 0x62, 0x1d);
+ rel_style.body.grad_color = lv_color_make(0xa7, 0x59, 0x0e);
+
+ lv_style_copy(&pr_style, &lv_style_btn_pr);
+ pr_style.body.radius = 0;
+ pr_style.body.border.width = 1;
+ pr_style.body.main_color = lv_color_make(0x72, 0x42, 0x15);
+ pr_style.body.grad_color = lv_color_make(0x6a, 0x3a, 0x0c);
+
+ /*Create a keyboard and apply the styles*/
+ lv_obj_t *kb = lv_kb_create(scr, NULL);
+ lv_obj_set_event_cb(kb, lv_kb_event_cb);
+ lv_kb_set_cursor_manage(kb, true);
+ lv_kb_set_style(kb, LV_KB_STYLE_BG, &lv_style_transp_tight);
+ lv_kb_set_style(kb, LV_KB_STYLE_BTN_REL, &rel_style);
+ lv_kb_set_style(kb, LV_KB_STYLE_BTN_PR, &pr_style);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ //lv_group_add_obj(g, kb);
+ //lv_group_set_editing(g, true);
+ }
+ #endif
+
+ /*Create a text area. The keyboard will write here*/
+ lv_obj_t *ta = lv_ta_create(scr, NULL);
+ lv_obj_align(ta, NULL, LV_ALIGN_IN_TOP_MID, 0, 10);
+ if (keyboard_value == gcodeCommand) {
+ get_gcode_command(AUTO_LEVELING_COMMAND_ADDR,(uint8_t *)public_buf_m);
+ public_buf_m[sizeof(public_buf_m)-1] = 0;
+ lv_ta_set_text(ta, public_buf_m);
+ }
+ else {
+ lv_ta_set_text(ta, "");
+ }
+
+ /*Assign the text area to the keyboard*/
+ lv_kb_set_ta(kb, ta);
+}
+
+void lv_clear_keyboard() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) { /* lv_group_remove_all_objs(g); */ }
+ #endif
+ lv_obj_del(scr);
+}
+
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.h
new file mode 100644
index 0000000000..0013dc4030
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_keyboard.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_keyboard();
+extern void lv_clear_keyboard();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp
index 9029f6868c..3e4ad06477 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp
@@ -49,6 +49,7 @@
static void disp_language(uint8_t language, uint8_t state);
+extern lv_group_t * g;
static lv_obj_t * scr;
static lv_obj_t *buttonCN, *buttonT_CN, *buttonEN, *buttonRU;
static lv_obj_t *buttonES, *buttonFR, *buttonIT, *buttonBack;
@@ -61,9 +62,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
- lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_simplified_cn_sel.bin", 0);
+ lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, "F:/bmp_simplified_cn_sel.bin");
+ lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, "F:/bmp_simplified_cn_sel.bin");
+ lv_obj_refresh_ext_draw_pad(buttonCN);
gCfgItems.language = LANG_SIMPLE_CHINESE;
- gCfg_to_spiFlah();
+ update_spi_flash();
disp_language_init();
}
break;
@@ -73,9 +76,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
- lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_traditional_cn_sel.bin", 0);
+ lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, "F:/bmp_traditional_cn_sel.bin");
+ lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, "F:/bmp_traditional_cn_sel.bin");
+ lv_obj_refresh_ext_draw_pad(buttonT_CN);
gCfgItems.language = LANG_COMPLEX_CHINESE;
- gCfg_to_spiFlah();
+ update_spi_flash();
disp_language_init();
}
break;
@@ -85,9 +90,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
- lv_obj_set_event_cb_mks(buttonEN, event_handler, ID_EN, "bmp_english_sel.bin", 0);
+ lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_REL, "F:/bmp_english_sel.bin");
+ lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_PR, "F:/bmp_english_sel.bin");
+ lv_obj_refresh_ext_draw_pad(buttonEN);
gCfgItems.language = LANG_ENGLISH;
- gCfg_to_spiFlah();
+ update_spi_flash();
disp_language_init();
}
break;
@@ -97,9 +104,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
- lv_obj_set_event_cb_mks(buttonRU, event_handler, ID_RU, "bmp_russian_sel.bin", 0);
+ lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_REL, "F:/bmp_russian_sel.bin");
+ lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_PR, "F:/bmp_russian_sel.bin");
+ lv_obj_refresh_ext_draw_pad(buttonRU);
gCfgItems.language = LANG_RUSSIAN;
- gCfg_to_spiFlah();
+ update_spi_flash();
disp_language_init();
}
break;
@@ -109,9 +118,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
- lv_obj_set_event_cb_mks(buttonES, event_handler, ID_ES, "bmp_spanish_sel.bin", 0);
+ lv_imgbtn_set_src(buttonES, LV_BTN_STATE_REL, "F:/bmp_spanish_sel.bin");
+ lv_imgbtn_set_src(buttonES, LV_BTN_STATE_PR, "F:/bmp_spanish_sel.bin");
+ lv_obj_refresh_ext_draw_pad(buttonES);
gCfgItems.language = LANG_SPANISH;
- gCfg_to_spiFlah();
+ update_spi_flash();
disp_language_init();
}
break;
@@ -121,9 +132,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
- lv_obj_set_event_cb_mks(buttonFR, event_handler, ID_FR, "bmp_french_sel.bin", 0);
+ lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_REL, "F:/bmp_french_sel.bin");
+ lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_PR, "F:/bmp_french_sel.bin");
+ lv_obj_refresh_ext_draw_pad(buttonFR);
gCfgItems.language = LANG_FRENCH;
- gCfg_to_spiFlah();
+ update_spi_flash();
disp_language_init();
}
break;
@@ -133,9 +146,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
- lv_obj_set_event_cb_mks(buttonIT, event_handler, ID_FR, "bmp_italy_sel.bin", 0);
+ lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_REL, "F:/bmp_italy_sel.bin");
+ lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_PR, "F:/bmp_italy_sel.bin");
+ lv_obj_refresh_ext_draw_pad(buttonIT);
gCfgItems.language = LANG_ITALY;
- gCfg_to_spiFlah();
+ update_spi_flash();
disp_language_init();
}
break;
@@ -154,8 +169,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
buttonFR = NULL;
buttonIT = NULL;
buttonBack = NULL;
-
- lv_obj_del(scr);
+ lv_clear_language();
lv_draw_set();
}
break;
@@ -172,42 +186,42 @@ static void disp_language(uint8_t language, uint8_t state) {
switch (language) {
case LANG_SIMPLE_CHINESE:
id = ID_CN;
- strcpy_P(public_buf_l, PSTR("bmp_simplified_cn"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_simplified_cn"));
obj = buttonCN;
break;
case LANG_COMPLEX_CHINESE:
id = ID_T_CN;
- strcpy_P(public_buf_l, PSTR("bmp_traditional_cn"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_traditional_cn"));
obj = buttonT_CN;
break;
case LANG_ENGLISH:
id = ID_EN;
- strcpy_P(public_buf_l, PSTR("bmp_english"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_english"));
obj = buttonEN;
break;
case LANG_RUSSIAN:
id = ID_RU;
- strcpy_P(public_buf_l, PSTR("bmp_russian"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_russian"));
obj = buttonRU;
break;
case LANG_SPANISH:
id = ID_ES;
- strcpy_P(public_buf_l, PSTR("bmp_spanish"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_spanish"));
obj = buttonES;
break;
case LANG_FRENCH:
id = ID_FR;
- strcpy_P(public_buf_l, PSTR("bmp_french"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_french"));
obj = buttonFR;
break;
case LANG_ITALY:
id = ID_IT;
- strcpy_P(public_buf_l, PSTR("bmp_italy"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_italy"));
obj = buttonIT;
break;
default:
id = ID_CN;
- strcpy_P(public_buf_l, PSTR("bmp_simplified_cn"));
+ strcpy_P(public_buf_l, PSTR("F:/bmp_simplified_cn"));
obj = buttonCN;
break;
}
@@ -216,7 +230,9 @@ static void disp_language(uint8_t language, uint8_t state) {
strcat_P(public_buf_l, PSTR(".bin"));
- lv_obj_set_event_cb_mks(obj, event_handler, id, public_buf_l, 0);
+ lv_obj_set_event_cb_mks(obj, event_handler, id, NULL, 0);
+ lv_imgbtn_set_src(obj, LV_BTN_STATE_REL, public_buf_l);
+ lv_imgbtn_set_src(obj, LV_BTN_STATE_PR, public_buf_l);
if (state == UNSELECTED) lv_obj_refresh_ext_draw_pad(obj);
}
@@ -244,8 +260,6 @@ void lv_draw_language(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
// Create image buttons
buttonCN = lv_imgbtn_create(scr, NULL);
buttonT_CN = lv_imgbtn_create(scr, NULL);
@@ -256,52 +270,53 @@ void lv_draw_language(void) {
buttonIT = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_simplified_cn.bin", 0);
- lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, NULL, 0);
+ lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, "F:/bmp_simplified_cn.bin");
+ lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, "F:/bmp_simplified_cn.bin");
lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_obj_clear_protect(buttonCN, LV_PROTECT_FOLLOW);
+
#if 1
- lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_traditional_cn.bin", 0);
- lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, NULL, 0);
+ lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, "F:/bmp_traditional_cn.bin");
+ lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, "F:/bmp_traditional_cn.bin");
lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonEN, event_handler, ID_EN, "bmp_english.bin", 0);
- lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonEN, event_handler, ID_EN, NULL, 0);
+ lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_REL, "F:/bmp_english.bin");
+ lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_PR, "F:/bmp_english.bin");
lv_imgbtn_set_style(buttonEN, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonEN, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonRU, event_handler, ID_RU, "bmp_russian.bin", 0);
- lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonRU, event_handler, ID_RU, NULL, 0);
+ lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_REL, "F:/bmp_russian.bin");
+ lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_PR, "F:/bmp_russian.bin");
lv_imgbtn_set_style(buttonRU, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonRU, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonES, event_handler, ID_ES, "bmp_spanish.bin", 0);
- lv_imgbtn_set_src(buttonES, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonES, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonES, event_handler, ID_ES, NULL, 0);
+ lv_imgbtn_set_src(buttonES, LV_BTN_STATE_REL, "F:/bmp_spanish.bin");
+ lv_imgbtn_set_src(buttonES, LV_BTN_STATE_PR, "F:/bmp_spanish.bin");
lv_imgbtn_set_style(buttonES, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonES, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonFR, event_handler, ID_FR, "bmp_french.bin", 0);
- lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonFR, event_handler, ID_FR, NULL, 0);
+ lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_REL, "F:/bmp_french.bin");
+ lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_PR, "F:/bmp_french.bin");
lv_imgbtn_set_style(buttonFR, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonFR, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonIT, event_handler, ID_IT, "bmp_italy.bin", 0);
- lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonIT, event_handler, ID_IT, NULL, 0);
+ lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_REL, "F:/bmp_italy.bin");
+ lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_PR, "F:/bmp_italy.bin");
lv_imgbtn_set_style(buttonIT, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonIT, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_L_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_L_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
@@ -362,8 +377,25 @@ void lv_draw_language(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonCN);
+ lv_group_add_obj(g, buttonT_CN);
+ lv_group_add_obj(g, buttonEN);
+ lv_group_add_obj(g, buttonRU);
+ lv_group_add_obj(g, buttonES);
+ lv_group_add_obj(g, buttonFR);
+ lv_group_add_obj(g, buttonIT);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_language() { lv_obj_del(scr); }
+void lv_clear_language() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.cpp
new file mode 100644
index 0000000000..0e0283d32a
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.cpp
@@ -0,0 +1,261 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+#define ID_LEVEL_RETURN 1
+#define ID_LEVEL_POSITION 2
+#define ID_LEVEL_POSITION_ARROW 3
+#define ID_LEVEL_COMMAND 4
+#define ID_LEVEL_COMMAND_ARROW 5
+#define ID_LEVEL_ZOFFSET 6
+#define ID_LEVEL_ZOFFSET_ARROW 7
+
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_LEVEL_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_level_settings();
+ draw_return_ui();
+ }
+ break;
+ case ID_LEVEL_POSITION:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_level_settings();
+ lv_draw_manual_level_pos_settings();
+ }
+ break;
+ case ID_LEVEL_POSITION_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_level_settings();
+ lv_draw_manual_level_pos_settings();
+ }
+ break;
+ case ID_LEVEL_COMMAND:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ keyboard_value = gcodeCommand;
+ lv_clear_level_settings();
+ lv_draw_keyboard();
+ }
+ break;
+ case ID_LEVEL_COMMAND_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ keyboard_value = gcodeCommand;
+ lv_clear_level_settings();
+ lv_draw_keyboard();
+ }
+ break;
+ #if HAS_BED_PROBE
+ case ID_LEVEL_ZOFFSET:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_level_settings();
+ lv_draw_auto_level_offset_settings();
+ }
+ break;
+ case ID_LEVEL_ZOFFSET_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_level_settings();
+ lv_draw_auto_level_offset_settings();
+ }
+ break;
+ #endif
+ }
+}
+
+void lv_draw_level_settings(void) {
+ lv_obj_t *buttonBack, *label_Back;
+ lv_obj_t *buttonPosition, *labelPosition, *buttonPositionNarrow;
+ lv_obj_t *buttonCommand, *labelCommand, *buttonCommandNarrow;
+ #if HAS_BED_PROBE
+ lv_obj_t *buttonZoffset, *labelZoffset, *buttonZoffsetNarrow;
+ lv_obj_t * line3;
+ #endif
+ lv_obj_t * line1, * line2;
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != LEVELING_PARA_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = LEVELING_PARA_UI;
+ }
+ disp_state = LEVELING_PARA_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, machine_menu.LevelingParaConfTitle);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+
+ buttonPosition = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonPosition, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
+ lv_obj_set_size(buttonPosition, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ lv_obj_set_event_cb_mks(buttonPosition, event_handler, ID_LEVEL_POSITION, NULL, 0);
+ lv_btn_set_style(buttonPosition, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
+ lv_btn_set_style(buttonPosition, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_layout(buttonPosition, LV_LAYOUT_OFF);
+ labelPosition = lv_label_create(buttonPosition, NULL); /*Add a label to the button*/
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonPosition);
+ #endif
+
+ buttonPositionNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonPositionNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonPositionNarrow, event_handler, ID_LEVEL_POSITION_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonPositionNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonPositionNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonPositionNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonPositionNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonPositionNarrow, LV_LAYOUT_OFF);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ buttonCommand = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonCommand, PARA_UI_POS_X, PARA_UI_POS_Y * 2);
+ lv_obj_set_size(buttonCommand, PARA_UI_SIZE_X, PARA_UI_SIZE_Y);
+ lv_obj_set_event_cb_mks(buttonCommand, event_handler, ID_LEVEL_COMMAND, NULL, 0);
+ lv_btn_set_style(buttonCommand, LV_BTN_STYLE_REL, &tft_style_label_rel);
+ lv_btn_set_style(buttonCommand, LV_BTN_STYLE_PR, &tft_style_label_pre);
+ lv_btn_set_layout(buttonCommand, LV_LAYOUT_OFF);
+ labelCommand = lv_label_create(buttonCommand, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonCommand);
+ #endif
+
+ buttonCommandNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonCommandNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 2 + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonCommandNarrow, event_handler, ID_LEVEL_COMMAND_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonCommandNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonCommandNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonCommandNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonCommandNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonCommandNarrow, LV_LAYOUT_OFF);
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+
+ #if HAS_BED_PROBE
+
+ buttonZoffset = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonZoffset, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
+ lv_obj_set_size(buttonZoffset, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ lv_obj_set_event_cb_mks(buttonZoffset, event_handler, ID_LEVEL_ZOFFSET, NULL, 0);
+ lv_btn_set_style(buttonZoffset, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
+ lv_btn_set_style(buttonZoffset, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_layout(buttonZoffset, LV_LAYOUT_OFF);
+ labelZoffset = lv_label_create(buttonZoffset, NULL); /*Add a label to the button*/
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonZoffset);
+ #endif
+
+ buttonZoffsetNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonZoffsetNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 3 + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonZoffsetNarrow, event_handler, ID_LEVEL_ZOFFSET_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonZoffsetNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonZoffsetNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonZoffsetNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonZoffsetNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonZoffsetNarrow, LV_LAYOUT_OFF);
+
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+
+ #endif // HAS_BED_PROBE
+
+ buttonBack = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_LEVEL_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ if (gCfgItems.multiple_language != 0) {
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+
+ lv_label_set_text(labelPosition, machine_menu.LevelingManuPosConf);
+ lv_obj_align(labelPosition, buttonPosition, LV_ALIGN_IN_LEFT_MID, 0, 0);
+
+ lv_label_set_text(labelCommand, machine_menu.LevelingAutoCommandConf);
+ lv_obj_align(labelCommand, buttonCommand, LV_ALIGN_IN_LEFT_MID, 0, 0);
+ #if HAS_BED_PROBE
+ lv_label_set_text(labelZoffset, machine_menu.LevelingAutoZoffsetConf);
+ lv_obj_align(labelZoffset, buttonZoffset, LV_ALIGN_IN_LEFT_MID, 0, 0);
+ #endif
+ }
+
+}
+
+void lv_clear_level_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.h
new file mode 100644
index 0000000000..ce290172b6
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_level_settings.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_level_settings(void);
+extern void lv_clear_level_settings();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_para.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_para.cpp
index d441f2ac51..9f03793c24 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_para.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_para.cpp
@@ -28,6 +28,7 @@
#include "../../../../MarlinCore.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_PARA_RETURN 1
@@ -35,8 +36,10 @@ static lv_obj_t * scr;
#define ID_PARA_MACHINE_ARROW 3
#define ID_PARA_MOTOR 4
#define ID_PARA_MOTOR_ARROW 5
-#define ID_PARA_ADVANCE 6
-#define ID_PARA_ADVANCE_ARROW 7
+#define ID_PARA_LEVEL 6
+#define ID_PARA_LEVEL_ARROW 7
+#define ID_PARA_ADVANCE 8
+#define ID_PARA_ADVANCE_ARROW 9
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
@@ -85,6 +88,24 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
lv_draw_motor_settings();
}
break;
+ case ID_PARA_LEVEL:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_machine_para();
+ lv_draw_level_settings();
+ }
+ break;
+ case ID_PARA_LEVEL_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_machine_para();
+ lv_draw_level_settings();
+ }
+ break;
case ID_PARA_ADVANCE:
if (event == LV_EVENT_CLICKED) {
@@ -110,8 +131,9 @@ void lv_draw_machine_para(void) {
lv_obj_t *buttonBack, *label_Back;
lv_obj_t *buttonMachine, *labelMachine, *buttonMachineNarrow;
lv_obj_t *buttonMotor, *labelMotor, *buttonMotorNarrow;
+ lv_obj_t *buttonLevel, *labelLevel, *buttonLevelNarrow;
lv_obj_t *buttonAdvance, *labelAdvance, *buttonAdvanceNarrow;
- lv_obj_t * line1, * line2, * line3;
+ lv_obj_t * line1, * line2, * line3, * line4;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != MACHINE_PARA_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = MACHINE_PARA_UI;
@@ -131,9 +153,6 @@ void lv_draw_machine_para(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- LV_IMG_DECLARE(bmp_para_arrow);
-
buttonMachine = lv_btn_create(scr, NULL); /*Add a button the current screen*/
lv_obj_set_pos(buttonMachine, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
lv_obj_set_size(buttonMachine, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
@@ -146,9 +165,9 @@ void lv_draw_machine_para(void) {
buttonMachineNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonMachineNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonMachineNarrow, event_handler, ID_PARA_MACHINE_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonMachineNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonMachineNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonMachineNarrow, event_handler, ID_PARA_MACHINE_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonMachineNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonMachineNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonMachineNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonMachineNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonMachineNarrow, LV_LAYOUT_OFF);
@@ -168,9 +187,9 @@ void lv_draw_machine_para(void) {
buttonMotorNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonMotorNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 2 + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonMotorNarrow, event_handler, ID_PARA_MOTOR_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonMotorNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonMotorNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonMotorNarrow, event_handler, ID_PARA_MOTOR_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonMotorNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonMotorNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonMotorNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonMotorNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonMotorNarrow, LV_LAYOUT_OFF);
@@ -178,8 +197,30 @@ void lv_draw_machine_para(void) {
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
+ buttonLevel = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonLevel, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
+ lv_obj_set_size(buttonLevel, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ //lv_obj_set_event_cb(buttonMotor, event_handler);
+ lv_obj_set_event_cb_mks(buttonLevel, event_handler, ID_PARA_LEVEL, NULL, 0);
+ lv_btn_set_style(buttonLevel, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
+ lv_btn_set_style(buttonLevel, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_layout(buttonLevel, LV_LAYOUT_OFF);
+ labelLevel = lv_label_create(buttonLevel, NULL); /*Add a label to the button*/
+
+ buttonLevelNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonLevelNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 3 + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonLevelNarrow, event_handler, ID_PARA_LEVEL_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonLevelNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonLevelNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonLevelNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonLevelNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonLevelNarrow, LV_LAYOUT_OFF);
+
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+
buttonAdvance = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonAdvance, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
+ lv_obj_set_pos(buttonAdvance, PARA_UI_POS_X, PARA_UI_POS_Y * 4); /*Set its position*/
lv_obj_set_size(buttonAdvance, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
//lv_obj_set_event_cb(buttonMotor, event_handler);
lv_obj_set_event_cb_mks(buttonAdvance, event_handler, ID_PARA_ADVANCE, NULL, 0);
@@ -189,44 +230,61 @@ void lv_draw_machine_para(void) {
labelAdvance = lv_label_create(buttonAdvance, NULL); /*Add a label to the button*/
buttonAdvanceNarrow = lv_imgbtn_create(scr, NULL);
- lv_obj_set_pos(buttonAdvanceNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 3 + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonAdvanceNarrow, event_handler, ID_PARA_ADVANCE_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonAdvanceNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonAdvanceNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_pos(buttonAdvanceNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 4 + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonAdvanceNarrow, event_handler, ID_PARA_ADVANCE_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonAdvanceNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonAdvanceNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonAdvanceNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonAdvanceNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonAdvanceNarrow, LV_LAYOUT_OFF);
- line3 = lv_line_create(scr, NULL);
- lv_ex_line(line3, line_points[2]);
+ line4 = lv_line_create(scr, NULL);
+ lv_ex_line(line4, line_points[3]);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_PARA_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_PARA_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(label_Back, common_menu.text_back);
- lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, -2);
lv_label_set_text(labelMachine, MachinePara_menu.MachineSetting);
- lv_obj_align(labelMachine, buttonMachine, LV_ALIGN_IN_LEFT_MID, 0, 0);
+ lv_obj_align(labelMachine, buttonMachine, LV_ALIGN_IN_LEFT_MID, 0, -3);
lv_label_set_text(labelMotor, MachinePara_menu.MotorSetting);
- lv_obj_align(labelMotor, buttonMotor, LV_ALIGN_IN_LEFT_MID, 0, 0);
+ lv_obj_align(labelMotor, buttonMotor, LV_ALIGN_IN_LEFT_MID, 0, -3);
+
+ lv_label_set_text(labelLevel, MachinePara_menu.leveling);
+ lv_obj_align(labelLevel, buttonLevel, LV_ALIGN_IN_LEFT_MID, 0, -3);
lv_label_set_text(labelAdvance, MachinePara_menu.AdvanceSetting);
- lv_obj_align(labelAdvance, buttonAdvance, LV_ALIGN_IN_LEFT_MID, 0, 0);
+ lv_obj_align(labelAdvance, buttonAdvance, LV_ALIGN_IN_LEFT_MID, 0, -3);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonMachine);
+ lv_group_add_obj(g, buttonMotor);
+ lv_group_add_obj(g, buttonLevel);
+ lv_group_add_obj(g, buttonAdvance);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_machine_para() { lv_obj_del(scr); }
+void lv_clear_machine_para() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_settings.cpp
index 88a66c6599..0cf5bbaf7f 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_machine_settings.cpp
@@ -28,6 +28,7 @@
#include "../../../../MarlinCore.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_MACHINE_RETURN 1
@@ -138,24 +139,21 @@ void lv_draw_machine_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- LV_IMG_DECLARE(bmp_para_arrow);
-
- buttonAcceleration = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonAcceleration, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonAcceleration, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ buttonAcceleration = lv_btn_create(scr, NULL); // Add a button the current screen
+ lv_obj_set_pos(buttonAcceleration, PARA_UI_POS_X, PARA_UI_POS_Y); // Set its position
+ lv_obj_set_size(buttonAcceleration, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); // Set its size
//lv_obj_set_event_cb(buttonMachine, event_handler);
lv_obj_set_event_cb_mks(buttonAcceleration, event_handler, ID_MACHINE_ACCELERATION, NULL, 0);
- lv_btn_set_style(buttonAcceleration, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonAcceleration, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_style(buttonAcceleration, LV_BTN_STYLE_REL, &tft_style_label_rel); // Set the button's released style
+ lv_btn_set_style(buttonAcceleration, LV_BTN_STYLE_PR, &tft_style_label_pre); // Set the button's pressed style
lv_btn_set_layout(buttonAcceleration, LV_LAYOUT_OFF);
- labelAcceleration = lv_label_create(buttonAcceleration, NULL); /*Add a label to the button*/
+ labelAcceleration = lv_label_create(buttonAcceleration, NULL); // Add a label to the button
buttonAccelerationNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonAccelerationNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonAccelerationNarrow, event_handler, ID_MACHINE_ACCELERATION_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonAccelerationNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonAccelerationNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonAccelerationNarrow, event_handler, ID_MACHINE_ACCELERATION_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonAccelerationNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonAccelerationNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonAccelerationNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonAccelerationNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonAccelerationNarrow, LV_LAYOUT_OFF);
@@ -163,21 +161,21 @@ void lv_draw_machine_settings(void) {
line1 = lv_line_create(lv_scr_act(), NULL);
lv_ex_line(line1, line_points[0]);
- buttonMaxFeedrate = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonMaxFeedrate, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonMaxFeedrate, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ buttonMaxFeedrate = lv_btn_create(scr, NULL); // Add a button the current screen
+ lv_obj_set_pos(buttonMaxFeedrate, PARA_UI_POS_X, PARA_UI_POS_Y * 2); // Set its position
+ lv_obj_set_size(buttonMaxFeedrate, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); // Set its size
//lv_obj_set_event_cb(buttonMachine, event_handler);
lv_obj_set_event_cb_mks(buttonMaxFeedrate, event_handler, ID_MACHINE_FEEDRATE, NULL, 0);
- lv_btn_set_style(buttonMaxFeedrate, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonMaxFeedrate, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_style(buttonMaxFeedrate, LV_BTN_STYLE_REL, &tft_style_label_rel); // Set the button's released style
+ lv_btn_set_style(buttonMaxFeedrate, LV_BTN_STYLE_PR, &tft_style_label_pre); // Set the button's pressed style
lv_btn_set_layout(buttonMaxFeedrate, LV_LAYOUT_OFF);
- labelMaxFeedrate = lv_label_create(buttonMaxFeedrate, NULL); /*Add a label to the button*/
+ labelMaxFeedrate = lv_label_create(buttonMaxFeedrate, NULL); // Add a label to the button
buttonMaxFeedrateNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonMaxFeedrateNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 2 + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonMaxFeedrateNarrow, event_handler, ID_MACHINE_FEEDRATE_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonMaxFeedrateNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonMaxFeedrateNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonMaxFeedrateNarrow, event_handler, ID_MACHINE_FEEDRATE_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonMaxFeedrateNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonMaxFeedrateNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonMaxFeedrateNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonMaxFeedrateNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonMaxFeedrateNarrow, LV_LAYOUT_OFF);
@@ -186,21 +184,21 @@ void lv_draw_machine_settings(void) {
lv_ex_line(line2, line_points[1]);
#if HAS_CLASSIC_JERK
- buttonJerk = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonJerk, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonJerk, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ buttonJerk = lv_btn_create(scr, NULL); // Add a button the current screen
+ lv_obj_set_pos(buttonJerk, PARA_UI_POS_X, PARA_UI_POS_Y * 3); // Set its position
+ lv_obj_set_size(buttonJerk, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); // Set its size
//lv_obj_set_event_cb(buttonMotor, event_handler);
lv_obj_set_event_cb_mks(buttonJerk, event_handler, ID_MACHINE_JERK, NULL, 0);
- lv_btn_set_style(buttonJerk, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonJerk, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_style(buttonJerk, LV_BTN_STYLE_REL, &tft_style_label_rel); // Set the button's released style
+ lv_btn_set_style(buttonJerk, LV_BTN_STYLE_PR, &tft_style_label_pre); // Set the button's pressed style
lv_btn_set_layout(buttonJerk, LV_LAYOUT_OFF);
- labelJerk = lv_label_create(buttonJerk, NULL); /*Add a label to the button*/
+ labelJerk = lv_label_create(buttonJerk, NULL); // Add a label to the button
buttonJerkNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonJerkNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 3 + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonJerkNarrow, event_handler, ID_MACHINE_JERK_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonJerkNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonJerkNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonJerkNarrow, event_handler, ID_MACHINE_JERK_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonJerkNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonJerkNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonJerkNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonJerkNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonJerkNarrow, LV_LAYOUT_OFF);
@@ -210,9 +208,9 @@ void lv_draw_machine_settings(void) {
#endif
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MACHINE_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MACHINE_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
@@ -234,8 +232,23 @@ void lv_draw_machine_settings(void) {
lv_obj_align(labelJerk, buttonJerk, LV_ALIGN_IN_LEFT_MID, 0, 0);
#endif
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonAcceleration);
+ lv_group_add_obj(g, buttonMaxFeedrate);
+ #if HAS_CLASSIC_JERK
+ lv_group_add_obj(g, buttonJerk);
+ #endif
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_machine_settings() { lv_obj_del(scr); }
+void lv_clear_machine_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp
index 6530b1554c..3d68019b35 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp
@@ -32,7 +32,7 @@
#include "draw_ui.h"
#include "../../../../gcode/queue.h"
-//static lv_obj_t *buttonMoveZ,*buttonTest,*buttonZ0,*buttonStop,*buttonReturn;
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_M_POINT1 1
@@ -59,7 +59,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
queue.enqueue_now_P(PSTR("G1 Z10"));
ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), X_MIN_POS + 30, Y_MIN_POS + 30);
+ sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), (int)gCfgItems.levelingPos[0][0], (int)gCfgItems.levelingPos[0][1]);
queue.enqueue_one_now(public_buf_l);
queue.enqueue_now_P(PSTR("G1 Z0"));
}
@@ -79,7 +79,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
queue.enqueue_now_P(PSTR("G1 Z10"));
ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), X_MAX_POS - 30, Y_MIN_POS + 30);
+ sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), (int)gCfgItems.levelingPos[1][0], (int)gCfgItems.levelingPos[1][1]);
queue.enqueue_one_now(public_buf_l);
queue.enqueue_now_P(PSTR("G1 Z0"));
}
@@ -99,7 +99,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
queue.enqueue_now_P(PSTR("G1 Z10"));
ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), X_MAX_POS - 30, Y_MAX_POS - 30);
+ sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), (int)gCfgItems.levelingPos[2][0], (int)gCfgItems.levelingPos[2][1]);
queue.enqueue_one_now(public_buf_l);
queue.enqueue_now_P(PSTR("G1 Z0"));
}
@@ -120,7 +120,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
queue.enqueue_now_P(PSTR("G1 Z10"));
ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), X_MIN_POS + 30, Y_MAX_POS - 30);
+ sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), (int)gCfgItems.levelingPos[3][0], (int)gCfgItems.levelingPos[3][1]);
queue.enqueue_one_now(public_buf_l);
queue.enqueue_now_P(PSTR("G1 Z0"));
}
@@ -140,7 +140,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
queue.enqueue_now_P(PSTR("G1 Z10"));
ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), X_BED_SIZE / 2, Y_BED_SIZE / 2);
+ sprintf_P(public_buf_l, PSTR("G1 X%d Y%d"), (int)gCfgItems.levelingPos[4][0], (int)gCfgItems.levelingPos[4][1]);
queue.enqueue_one_now(public_buf_l);
queue.enqueue_now_P(PSTR("G1 Z0"));
}
@@ -159,7 +159,6 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
}
-
void lv_draw_manualLevel(void) {
lv_obj_t *buttonPoint1, *buttonPoint2, *buttonPoint3, *buttonPoint4, *buttonPoint5;
lv_obj_t *buttonBack;
@@ -185,8 +184,6 @@ void lv_draw_manualLevel(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
// Create an Image button
buttonPoint1 = lv_imgbtn_create(scr, NULL);
buttonPoint2 = lv_imgbtn_create(scr, NULL);
@@ -195,40 +192,41 @@ void lv_draw_manualLevel(void) {
buttonPoint5 = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonPoint1, event_handler, ID_M_POINT1, "bmp_leveling1.bin", 0);
- lv_imgbtn_set_src(buttonPoint1, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPoint1, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonPoint1, event_handler, ID_M_POINT1, NULL, 0);
+ lv_imgbtn_set_src(buttonPoint1, LV_BTN_STATE_REL, "F:/bmp_leveling1.bin");
+ lv_imgbtn_set_src(buttonPoint1, LV_BTN_STATE_PR, "F:/bmp_leveling1.bin");
lv_imgbtn_set_style(buttonPoint1, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPoint1, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_obj_clear_protect(buttonPoint1, LV_PROTECT_FOLLOW);
+
#if 1
- lv_obj_set_event_cb_mks(buttonPoint2, event_handler, ID_M_POINT2, "bmp_leveling2.bin", 0);
- lv_imgbtn_set_src(buttonPoint2, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPoint2, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonPoint2, event_handler, ID_M_POINT2, NULL, 0);
+ lv_imgbtn_set_src(buttonPoint2, LV_BTN_STATE_REL, "F:/bmp_leveling2.bin");
+ lv_imgbtn_set_src(buttonPoint2, LV_BTN_STATE_PR, "F:/bmp_leveling2.bin");
lv_imgbtn_set_style(buttonPoint2, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPoint2, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonPoint3, event_handler, ID_M_POINT3, "bmp_leveling3.bin", 0);
- lv_imgbtn_set_src(buttonPoint3, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPoint3, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonPoint3, event_handler, ID_M_POINT3, NULL, 0);
+ lv_imgbtn_set_src(buttonPoint3, LV_BTN_STATE_REL, "F:/bmp_leveling3.bin");
+ lv_imgbtn_set_src(buttonPoint3, LV_BTN_STATE_PR, "F:/bmp_leveling3.bin");
lv_imgbtn_set_style(buttonPoint3, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPoint3, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonPoint4, event_handler, ID_M_POINT4, "bmp_leveling4.bin", 0);
- lv_imgbtn_set_src(buttonPoint4, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPoint4, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonPoint4, event_handler, ID_M_POINT4, NULL, 0);
+ lv_imgbtn_set_src(buttonPoint4, LV_BTN_STATE_REL, "F:/bmp_leveling4.bin");
+ lv_imgbtn_set_src(buttonPoint4, LV_BTN_STATE_PR, "F:/bmp_leveling4.bin");
lv_imgbtn_set_style(buttonPoint4, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPoint4, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonPoint5, event_handler, ID_M_POINT5, "bmp_leveling5.bin", 0);
- lv_imgbtn_set_src(buttonPoint5, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPoint5, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonPoint5, event_handler, ID_M_POINT5, NULL, 0);
+ lv_imgbtn_set_src(buttonPoint5, LV_BTN_STATE_REL, "F:/bmp_leveling5.bin");
+ lv_imgbtn_set_src(buttonPoint5, LV_BTN_STATE_PR, "F:/bmp_leveling5.bin");
lv_imgbtn_set_style(buttonPoint5, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPoint5, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MANUAL_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MANUAL_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
@@ -274,8 +272,23 @@ void lv_draw_manualLevel(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonPoint1);
+ lv_group_add_obj(g, buttonPoint2);
+ lv_group_add_obj(g, buttonPoint3);
+ lv_group_add_obj(g, buttonPoint4);
+ lv_group_add_obj(g, buttonPoint5);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_manualLevel() { lv_obj_del(scr); }
+void lv_clear_manualLevel() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.cpp
new file mode 100644
index 0000000000..9b7200b5a9
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.cpp
@@ -0,0 +1,459 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/planner.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+#define ID_MANUAL_POS_RETURN 1
+#define ID_MANUAL_POS_X1 2
+#define ID_MANUAL_POS_Y1 3
+#define ID_MANUAL_POS_X2 4
+#define ID_MANUAL_POS_Y2 5
+#define ID_MANUAL_POS_X3 6
+#define ID_MANUAL_POS_Y3 7
+#define ID_MANUAL_POS_X4 8
+#define ID_MANUAL_POS_Y4 9
+#define ID_MANUAL_POS_X5 10
+#define ID_MANUAL_POS_Y5 11
+#define ID_MANUAL_POS_DOWN 12
+#define ID_MANUAL_POS_UP 13
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_MANUAL_POS_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 0;
+ lv_clear_manual_level_pos_settings();
+ draw_return_ui();
+ }
+ break;
+ case ID_MANUAL_POS_X1:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_x1;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_Y1:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_y1;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_X2:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_x2;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_Y2:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_y2;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_X3:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_x3;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_Y3:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_y3;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_X4:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_x4;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_Y4:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_y4;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_X5:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_y5;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_Y5:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = level_pos_y5;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_number_key();
+ }
+ break;
+ case ID_MANUAL_POS_UP:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 0;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_manual_level_pos_settings();
+ }
+ break;
+ case ID_MANUAL_POS_DOWN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 1;
+ lv_clear_manual_level_pos_settings();
+ lv_draw_manual_level_pos_settings();
+ }
+ break;
+ }
+}
+
+void lv_draw_manual_level_pos_settings(void) {
+ lv_obj_t *buttonBack = NULL, *label_Back = NULL, *buttonTurnPage = NULL, *labelTurnPage = NULL;
+ lv_obj_t *labelPoint1Text = NULL, *buttonX1Value = NULL, *labelX1Value = NULL;
+ lv_obj_t *buttonY1Value = NULL, *labelY1Value = NULL;
+ lv_obj_t *labelPoint2Text = NULL, *buttonX2Value = NULL, *labelX2Value = NULL;
+ lv_obj_t *buttonY2Value = NULL, *labelY2Value = NULL;
+ lv_obj_t *labelPoint3Text = NULL, *buttonX3Value = NULL, *labelX3Value = NULL;
+ lv_obj_t *buttonY3Value = NULL, *labelY3Value = NULL;
+ lv_obj_t *labelPoint4Text = NULL, *buttonX4Value = NULL, *labelX4Value = NULL;
+ lv_obj_t *buttonY4Value = NULL, *labelY4Value = NULL;
+ lv_obj_t *labelPoint5Text = NULL, *buttonX5Value = NULL, *labelX5Value = NULL;
+ lv_obj_t *buttonY5Value = NULL, *labelY5Value = NULL;
+ lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != MANUAL_LEVELING_POSIGION_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = MANUAL_LEVELING_POSIGION_UI;
+ }
+ disp_state = MANUAL_LEVELING_POSIGION_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+ lv_label_set_text(title, machine_menu.LevelingParaConfTitle);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ if (uiCfg.para_ui_page != 1) {
+ labelPoint1Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelPoint1Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelPoint1Text, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelPoint1Text, leveling_menu.position1);
+
+ buttonX1Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonX1Value, PARA_UI_VALUE_POS_X_2, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonX1Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonX1Value, event_handler, ID_MANUAL_POS_X1, NULL, 0);
+ lv_btn_set_style(buttonX1Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonX1Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelX1Value = lv_label_create(buttonX1Value, NULL);
+
+ buttonY1Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonY1Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonY1Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonY1Value, event_handler, ID_MANUAL_POS_Y1, NULL, 0);
+ lv_btn_set_style(buttonY1Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonY1Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelY1Value = lv_label_create(buttonY1Value, NULL);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ labelPoint2Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelPoint2Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelPoint2Text, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelPoint2Text, leveling_menu.position2);
+
+ buttonX2Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonX2Value, PARA_UI_VALUE_POS_X_2, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonX2Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonX2Value, event_handler, ID_MANUAL_POS_X2, NULL, 0);
+ lv_btn_set_style(buttonX2Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonX2Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelX2Value = lv_label_create(buttonX2Value, NULL);
+
+ buttonY2Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonY2Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonY2Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonY2Value, event_handler, ID_MANUAL_POS_Y2, NULL, 0);
+ lv_btn_set_style(buttonY2Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonY2Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelY2Value = lv_label_create(buttonY2Value, NULL);
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+
+ labelPoint3Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelPoint3Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelPoint3Text, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelPoint3Text, leveling_menu.position3);
+
+ buttonX3Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonX3Value, PARA_UI_VALUE_POS_X_2, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonX3Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonX3Value, event_handler, ID_MANUAL_POS_X3, NULL, 0);
+ lv_btn_set_style(buttonX3Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonX3Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelX3Value = lv_label_create(buttonX3Value, NULL);
+
+ buttonY3Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonY3Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonY3Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonY3Value, event_handler, ID_MANUAL_POS_Y3, NULL, 0);
+ lv_btn_set_style(buttonY3Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonY3Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelY3Value = lv_label_create(buttonY3Value, NULL);
+
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+
+ labelPoint4Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelPoint4Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelPoint4Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelPoint4Text, leveling_menu.position4);
+
+ buttonX4Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonX4Value, PARA_UI_VALUE_POS_X_2, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonX4Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonX4Value, event_handler, ID_MANUAL_POS_X4, NULL, 0);
+ lv_btn_set_style(buttonX4Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonX4Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelX4Value = lv_label_create(buttonX4Value, NULL);
+
+ buttonY4Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonY4Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonY4Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonY4Value, event_handler, ID_MANUAL_POS_Y4, NULL, 0);
+ lv_btn_set_style(buttonY4Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonY4Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelY4Value = lv_label_create(buttonY4Value, NULL);
+
+ line4 = lv_line_create(scr, NULL);
+ lv_ex_line(line4, line_points[3]);
+
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_MANUAL_POS_DOWN, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonX1Value);
+ lv_group_add_obj(g, buttonY1Value);
+ lv_group_add_obj(g, buttonX2Value);
+ lv_group_add_obj(g, buttonY2Value);
+ lv_group_add_obj(g, buttonX3Value);
+ lv_group_add_obj(g, buttonY3Value);
+ lv_group_add_obj(g, buttonX4Value);
+ lv_group_add_obj(g, buttonY4Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
+ }
+ else {
+ labelPoint5Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelPoint5Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelPoint5Text, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelPoint5Text, leveling_menu.position5);
+
+ buttonX5Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonX5Value, PARA_UI_VALUE_POS_X_2, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonX5Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonX5Value, event_handler, ID_MANUAL_POS_X5, NULL, 0);
+ lv_btn_set_style(buttonX5Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonX5Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelX5Value = lv_label_create(buttonX5Value, NULL);
+
+ buttonY5Value = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonY5Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+ lv_obj_set_size(buttonY5Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonY5Value, event_handler, ID_MANUAL_POS_Y5, NULL, 0);
+ lv_btn_set_style(buttonY5Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonY5Value, LV_BTN_STYLE_PR, &style_para_value);
+ labelY5Value = lv_label_create(buttonY5Value, NULL);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1, line_points[0]);
+
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_MANUAL_POS_UP, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonX5Value);
+ lv_group_add_obj(g, buttonY5Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
+ }
+
+ lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
+ lv_obj_set_size(buttonTurnPage, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ labelTurnPage = lv_label_create(buttonTurnPage, NULL);
+
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MANUAL_POS_RETURN, NULL, 0);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
+ if (gCfgItems.multiple_language != 0) {
+ if (uiCfg.para_ui_page != 1) {
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[0][0]);
+ lv_label_set_text(labelX1Value, public_buf_l);
+ lv_obj_align(labelX1Value, buttonX1Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[0][1]);
+ lv_label_set_text(labelY1Value, public_buf_l);
+ lv_obj_align(labelY1Value, buttonY1Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[1][0]);
+ lv_label_set_text(labelX2Value, public_buf_l);
+ lv_obj_align(labelX2Value, buttonX2Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[1][1]);
+ lv_label_set_text(labelY2Value, public_buf_l);
+ lv_obj_align(labelY2Value, buttonY2Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[2][0]);
+ lv_label_set_text(labelX3Value, public_buf_l);
+ lv_obj_align(labelX3Value, buttonX3Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[2][1]);
+ lv_label_set_text(labelY3Value, public_buf_l);
+ lv_obj_align(labelY3Value, buttonY3Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[3][0]);
+ lv_label_set_text(labelX4Value, public_buf_l);
+ lv_obj_align(labelX4Value, buttonX4Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[3][1]);
+ lv_label_set_text(labelY4Value, public_buf_l);
+ lv_obj_align(labelY4Value, buttonY4Value, LV_ALIGN_CENTER, 0, 0);
+
+ lv_label_set_text(labelTurnPage, machine_menu.next);
+ lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
+ }
+ else {
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[4][0]);
+ lv_label_set_text(labelX5Value, public_buf_l);
+ lv_obj_align(labelX5Value, buttonX5Value, LV_ALIGN_CENTER, 0, 0);
+
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%d"), gCfgItems.levelingPos[4][1]);
+ lv_label_set_text(labelY5Value, public_buf_l);
+ lv_obj_align(labelY5Value, buttonY5Value, LV_ALIGN_CENTER, 0, 0);
+
+ lv_label_set_text(labelTurnPage, machine_menu.previous);
+ lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
+ }
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+ }
+}
+
+void lv_clear_manual_level_pos_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.h
new file mode 100644
index 0000000000..8e89ecf559
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_manual_level_pos_settings.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_manual_level_pos_settings(void);
+extern void lv_clear_manual_level_pos_settings();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_max_feedrate_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_max_feedrate_settings.cpp
index c78c6f5bb8..e82124f705 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_max_feedrate_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_max_feedrate_settings.cpp
@@ -29,6 +29,7 @@
#include "../../../../MarlinCore.h"
#include "../../../../module/planner.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_FEED_RETURN 1
@@ -127,11 +128,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_max_feedrate_settings(void) {
lv_obj_t *buttonBack = NULL, *label_Back = NULL, *buttonTurnPage = NULL, *labelTurnPage = NULL;
- lv_obj_t *buttonXText = NULL, *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
- lv_obj_t *buttonYText = NULL, *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
- lv_obj_t *buttonZText = NULL, *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
- lv_obj_t *buttonE0Text = NULL, *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
- lv_obj_t *buttonE1Text = NULL, *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
+ lv_obj_t *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != MAXFEEDRATE_UI) {
disp_state_stack._disp_index++;
@@ -152,166 +153,139 @@ void lv_draw_max_feedrate_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- // LV_IMG_DECLARE(bmp_para_arrow);
- LV_IMG_DECLARE(bmp_para_bank);
-
if (uiCfg.para_ui_page != 1) {
- buttonXText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonXText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonXText, event_handler);
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonXText, LV_LAYOUT_OFF);
- labelXText = lv_label_create(buttonXText, NULL); /*Add a label to the button*/
-
- buttonXValue = lv_imgbtn_create(scr, NULL);
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelXText, machine_menu.XMaxFeedRate);
+
+ buttonXValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_FEED_X, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_REL, &style_para_value_rel);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_FEED_X, NULL, 0);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
lv_btn_set_layout(buttonXValue, LV_LAYOUT_OFF);
labelXValue = lv_label_create(buttonXValue, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonYText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonYText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonYText, event_handler);
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonYText, LV_LAYOUT_OFF);
- labelYText = lv_label_create(buttonYText, NULL); /*Add a label to the button*/
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelYText, machine_menu.YMaxFeedRate);
- buttonYValue = lv_imgbtn_create(scr, NULL);
+ buttonYValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_FEED_Y, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_REL, &style_para_value_rel);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_FEED_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
lv_btn_set_layout(buttonYValue, LV_LAYOUT_OFF);
labelYValue = lv_label_create(buttonYValue, NULL);
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
- buttonZText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonZText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonZText, event_handler);
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonZText, LV_LAYOUT_OFF);
- labelZText = lv_label_create(buttonZText, NULL); /*Add a label to the button*/
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelZText, machine_menu.ZMaxFeedRate);
- buttonZValue = lv_imgbtn_create(scr, NULL);
+ buttonZValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_FEED_Z, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_REL, &style_para_value_rel);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_FEED_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
lv_btn_set_layout(buttonZValue, LV_LAYOUT_OFF);
labelZValue = lv_label_create(buttonZValue, NULL);
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
- buttonE0Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4); /*Set its position*/
- lv_obj_set_size(buttonE0Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE0Text, event_handler);
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE0Text, LV_LAYOUT_OFF);
- labelE0Text = lv_label_create(buttonE0Text, NULL); /*Add a label to the button*/
+ labelE0Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE0Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelE0Text, machine_menu.E0MaxFeedRate);
- buttonE0Value = lv_imgbtn_create(scr, NULL);
+ buttonE0Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE0Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_FEED_E0, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_REL, &style_para_value_rel);
+ lv_obj_set_size(buttonE0Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_FEED_E0, NULL, 0);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_PR, &style_para_value);
lv_btn_set_layout(buttonE0Value, LV_LAYOUT_OFF);
labelE0Value = lv_label_create(buttonE0Value, NULL);
line4 = lv_line_create(scr, NULL);
lv_ex_line(line4, line_points[3]);
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_FEED_DOWN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_FEED_DOWN, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonXValue);
+ lv_group_add_obj(g, buttonYValue);
+ lv_group_add_obj(g, buttonZValue);
+ lv_group_add_obj(g, buttonE0Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
}
else {
- buttonE1Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE1Text, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonE1Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE1Text, event_handler);
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE1Text, LV_LAYOUT_OFF);
- labelE1Text = lv_label_create(buttonE1Text, NULL); /*Add a label to the button*/
-
- buttonE1Value = lv_imgbtn_create(scr, NULL);
+ labelE1Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE1Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE1Text, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelE1Text, machine_menu.E1MaxFeedRate);
+
+ buttonE1Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE1Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_FEED_E1, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_REL, &style_para_value_rel);
+ lv_obj_set_size(buttonE1Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_FEED_E1, NULL, 0);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_PR, &style_para_value);
lv_btn_set_layout(buttonE1Value, LV_LAYOUT_OFF);
labelE1Value = lv_label_create(buttonE1Value, NULL);
+
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_FEED_UP, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_FEED_UP, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonE1Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
}
lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
- lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonTurnPage, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
labelTurnPage = lv_label_create(buttonTurnPage, NULL);
-
- buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_FEED_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
-
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_FEED_RETURN, NULL, 0);
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
- lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
label_Back = lv_label_create(buttonBack, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
if (gCfgItems.multiple_language != 0) {
if (uiCfg.para_ui_page != 1) {
- lv_label_set_text(labelXText, machine_menu.XMaxFeedRate);
- lv_obj_align(labelXText, buttonXText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelYText, machine_menu.YMaxFeedRate);
- lv_obj_align(labelYText, buttonYText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelZText, machine_menu.ZMaxFeedRate);
- lv_obj_align(labelZText, buttonZText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelE0Text, machine_menu.E0MaxFeedRate);
- lv_obj_align(labelE0Text, buttonE0Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
lv_label_set_text(labelTurnPage, machine_menu.next);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -337,9 +311,6 @@ void lv_draw_max_feedrate_settings(void) {
lv_obj_align(labelE0Value, buttonE0Value, LV_ALIGN_CENTER, 0, 0);
}
else {
- lv_label_set_text(labelE1Text, machine_menu.E1MaxFeedRate);
- lv_obj_align(labelE1Text, buttonE1Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
lv_label_set_text(labelTurnPage, machine_menu.previous);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -354,6 +325,11 @@ void lv_draw_max_feedrate_settings(void) {
}
}
-void lv_clear_max_feedrate_settings() { lv_obj_del(scr); }
+void lv_clear_max_feedrate_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_motor_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_motor_settings.cpp
index 7da477bd51..f6568df143 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_motor_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_motor_settings.cpp
@@ -28,6 +28,7 @@
#include "../../../../MarlinCore.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_MOTOR_RETURN 1
@@ -37,6 +38,8 @@ static lv_obj_t * scr;
#define ID_MOTOR_TMC_CURRENT_ARROW 5
#define ID_MOTOR_STEP_MODE 6
#define ID_MOTOR_STEP_MODE_ARROW 7
+#define ID_HOME_SENSE 8
+#define ID_HOME_SENSE_ARROW 9
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
@@ -67,6 +70,26 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
lv_draw_step_settings();
}
break;
+ #if USE_SENSORLESS
+ case ID_HOME_SENSE:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_motor_settings();
+ lv_draw_homing_sensitivity_settings();
+ }
+ break;
+ case ID_HOME_SENSE_ARROW:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_motor_settings();
+ lv_draw_homing_sensitivity_settings();
+ }
+ break;
+ #endif
#if HAS_TRINAMIC_CONFIG
case ID_MOTOR_TMC_CURRENT:
if (event == LV_EVENT_CLICKED) {
@@ -113,15 +136,27 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_motor_settings(void) {
lv_obj_t *buttonBack, *label_Back;
lv_obj_t *buttonSteps, *labelSteps, *buttonStepsNarrow;
+ lv_obj_t * line1;
+ #if USE_SENSORLESS
+ lv_obj_t *buttonSensitivity, *labelSensitivity, *buttonSensitivityNarrow;
+ lv_obj_t * line2;
+ #endif
#if HAS_TRINAMIC_CONFIG
+ #if USE_SENSORLESS
+ lv_obj_t * line3;
+ #else
+ lv_obj_t * line2;
+ #endif
lv_obj_t *buttonTMCcurrent, *labelTMCcurrent, *buttonTMCcurrentNarrow;
- lv_obj_t * line2;
#if HAS_STEALTHCHOP
+ #if USE_SENSORLESS
+ lv_obj_t * line4;
+ #else
+ lv_obj_t * line3;
+ #endif
lv_obj_t *buttonStepMode, *labelStepMode, *buttonStepModeNarrow;
- lv_obj_t * line3;
#endif
#endif
- lv_obj_t * line1;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != MOTOR_SETTINGS_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = MOTOR_SETTINGS_UI;
@@ -141,9 +176,6 @@ void lv_draw_motor_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- LV_IMG_DECLARE(bmp_para_arrow);
-
buttonSteps = lv_btn_create(scr, NULL); /*Add a button the current screen*/
lv_obj_set_pos(buttonSteps, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
lv_obj_set_size(buttonSteps, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
@@ -154,20 +186,54 @@ void lv_draw_motor_settings(void) {
lv_btn_set_layout(buttonSteps, LV_LAYOUT_OFF);
labelSteps = lv_label_create(buttonSteps, NULL); /*Add a label to the button*/
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonSteps);
+ #endif
+
buttonStepsNarrow = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonStepsNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonStepsNarrow, event_handler, ID_MOTOR_STEPS_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonStepsNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonStepsNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_event_cb_mks(buttonStepsNarrow, event_handler, ID_MOTOR_STEPS_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonStepsNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonStepsNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonStepsNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonStepsNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonStepsNarrow, LV_LAYOUT_OFF);
- line1 = lv_line_create(lv_scr_act(), NULL);
+ line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
+
+ #if USE_SENSORLESS
+ buttonSensitivity = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonSensitivity, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
+ lv_obj_set_size(buttonSensitivity, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
+ //lv_obj_set_event_cb(buttonMachine, event_handler);
+ lv_obj_set_event_cb_mks(buttonSensitivity, event_handler, ID_HOME_SENSE, NULL, 0);
+ lv_btn_set_style(buttonSensitivity, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
+ lv_btn_set_style(buttonSensitivity, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_layout(buttonSensitivity, LV_LAYOUT_OFF);
+ labelSensitivity = lv_label_create(buttonSensitivity, NULL); /*Add a label to the button*/
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonSensitivity);
+ #endif
+
+ buttonSensitivityNarrow = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonSensitivityNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 2 + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonSensitivityNarrow, event_handler, ID_HOME_SENSE_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonSensitivityNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonSensitivityNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_style(buttonSensitivityNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonSensitivityNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonSensitivityNarrow, LV_LAYOUT_OFF);
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+ #endif
+
+
#if HAS_TRINAMIC_CONFIG
buttonTMCcurrent = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonTMCcurrent, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
+ lv_obj_set_pos(buttonTMCcurrent, PARA_UI_POS_X, TERN(USE_SENSORLESS, PARA_UI_POS_Y * 3, PARA_UI_POS_Y * 2));
lv_obj_set_size(buttonTMCcurrent, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
//lv_obj_set_event_cb(buttonMachine, event_handler);
lv_obj_set_event_cb_mks(buttonTMCcurrent, event_handler, ID_MOTOR_TMC_CURRENT, NULL, 0);
@@ -175,61 +241,86 @@ void lv_draw_motor_settings(void) {
lv_btn_set_style(buttonTMCcurrent, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
lv_btn_set_layout(buttonTMCcurrent, LV_LAYOUT_OFF);
labelTMCcurrent = lv_label_create(buttonTMCcurrent, NULL); /*Add a label to the button*/
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonTMCcurrent);
+ #endif
buttonTMCcurrentNarrow = lv_imgbtn_create(scr, NULL);
- lv_obj_set_pos(buttonTMCcurrentNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 2 + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonTMCcurrentNarrow, event_handler, ID_MOTOR_TMC_CURRENT_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonTMCcurrentNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonTMCcurrentNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_pos(buttonTMCcurrentNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, TERN(USE_SENSORLESS, PARA_UI_POS_Y * 3, PARA_UI_POS_Y * 2) + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonTMCcurrentNarrow, event_handler, ID_MOTOR_TMC_CURRENT_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonTMCcurrentNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonTMCcurrentNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonTMCcurrentNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonTMCcurrentNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonTMCcurrentNarrow, LV_LAYOUT_OFF);
-
- line2 = lv_line_create(lv_scr_act(), NULL);
- lv_ex_line(line2, line_points[1]);
+ #if USE_SENSORLESS
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+ #else
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2, line_points[1]);
+ #endif
#if HAS_STEALTHCHOP
buttonStepMode = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonStepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
+ lv_obj_set_pos(buttonStepMode, PARA_UI_POS_X, TERN(USE_SENSORLESS, PARA_UI_POS_Y * 4, PARA_UI_POS_Y * 3));
lv_obj_set_size(buttonStepMode, PARA_UI_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- //lv_obj_set_event_cb(buttonMachine, event_handler);
lv_obj_set_event_cb_mks(buttonStepMode, event_handler, ID_MOTOR_STEP_MODE, NULL, 0);
lv_btn_set_style(buttonStepMode, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
lv_btn_set_style(buttonStepMode, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
lv_btn_set_layout(buttonStepMode, LV_LAYOUT_OFF);
labelStepMode = lv_label_create(buttonStepMode, NULL); /*Add a label to the button*/
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonStepMode);
+ #endif
+
buttonStepModeNarrow = lv_imgbtn_create(scr, NULL);
- lv_obj_set_pos(buttonStepModeNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y * 3 + PARA_UI_ARROW_V);
- lv_obj_set_event_cb_mks(buttonStepModeNarrow, event_handler, ID_MOTOR_STEP_MODE_ARROW, "bmp_arrow.bin", 0);
- lv_imgbtn_set_src(buttonStepModeNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
- lv_imgbtn_set_src(buttonStepModeNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+ lv_obj_set_pos(buttonStepModeNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, TERN(USE_SENSORLESS, PARA_UI_POS_Y * 4, PARA_UI_POS_Y * 3) + PARA_UI_ARROW_V);
+ lv_obj_set_event_cb_mks(buttonStepModeNarrow, event_handler, ID_MOTOR_STEP_MODE_ARROW, NULL, 0);
+ lv_imgbtn_set_src(buttonStepModeNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+ lv_imgbtn_set_src(buttonStepModeNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
lv_imgbtn_set_style(buttonStepModeNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonStepModeNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonStepModeNarrow, LV_LAYOUT_OFF);
- line3 = lv_line_create(lv_scr_act(), NULL);
- lv_ex_line(line3, line_points[2]);
- #endif
+ #if USE_SENSORLESS
+ line4 = lv_line_create(scr, NULL);
+ lv_ex_line(line4, line_points[3]);
+ #else
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3, line_points[2]);
+ #endif
+
+ #endif // HAS_STEALTHCHOP
+
#endif // HAS_TRINAMIC_CONFIG
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MOTOR_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MOTOR_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
-
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
label_Back = lv_label_create(buttonBack, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
lv_label_set_text(labelSteps, machine_menu.StepsConf);
lv_obj_align(labelSteps, buttonSteps, LV_ALIGN_IN_LEFT_MID, 0, 0);
+
+ #if USE_SENSORLESS
+ lv_label_set_text(labelSensitivity, machine_menu.HomingSensitivityConf);
+ lv_obj_align(labelSensitivity, buttonSensitivity, LV_ALIGN_IN_LEFT_MID, 0, 0);
+ #endif
#if HAS_TRINAMIC_CONFIG
lv_label_set_text(labelTMCcurrent, machine_menu.TMCcurrentConf);
lv_obj_align(labelTMCcurrent, buttonTMCcurrent, LV_ALIGN_IN_LEFT_MID, 0, 0);
@@ -242,6 +333,11 @@ void lv_draw_motor_settings(void) {
}
-void lv_clear_motor_settings() { lv_obj_del(scr); }
+void lv_clear_motor_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp
index 24abadb57c..a6c0c0551a 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp
@@ -32,6 +32,7 @@
#include "draw_ui.h"
#include "../../../../gcode/queue.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
static lv_obj_t *labelV, *buttonV;
@@ -179,8 +180,6 @@ void lv_draw_move_motor(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
// Create an Image button
buttonXI = lv_imgbtn_create(scr, NULL);
buttonXD = lv_imgbtn_create(scr, NULL);
@@ -191,55 +190,56 @@ void lv_draw_move_motor(void) {
buttonV = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonXI, event_handler, ID_M_X_P, "bmp_xAdd.bin", 0);
- lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonXI, event_handler, ID_M_X_P, NULL, 0);
+ lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_REL, "F:/bmp_xAdd.bin");
+ lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_PR, "F:/bmp_xAdd.bin");
lv_imgbtn_set_style(buttonXI, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonXI, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_obj_clear_protect(buttonXI, LV_PROTECT_FOLLOW);
+
#if 1
- lv_obj_set_event_cb_mks(buttonXD, event_handler, ID_M_X_N, "bmp_xDec.bin", 0);
- lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonXD, event_handler, ID_M_X_N, NULL, 0);
+ lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_REL, "F:/bmp_xDec.bin");
+ lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_PR, "F:/bmp_xDec.bin");
lv_imgbtn_set_style(buttonXD, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonXD, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonYI, event_handler, ID_M_Y_P, "bmp_yAdd.bin", 0);
- lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonYI, event_handler, ID_M_Y_P, NULL, 0);
+ lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_REL, "F:/bmp_yAdd.bin");
+ lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_PR, "F:/bmp_yAdd.bin");
lv_imgbtn_set_style(buttonYI, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonYI, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonYD, event_handler, ID_M_Y_N, "bmp_yDec.bin", 0);
- lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonYD, event_handler, ID_M_Y_N, NULL, 0);
+ lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_REL, "F:/bmp_yDec.bin");
+ lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_PR, "F:/bmp_yDec.bin");
lv_imgbtn_set_style(buttonYD, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonYD, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonZI, event_handler, ID_M_Z_P, "bmp_zAdd.bin", 0);
- lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonZI, event_handler, ID_M_Z_P, NULL, 0);
+ lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_REL, "F:/bmp_zAdd.bin");
+ lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_PR, "F:/bmp_zAdd.bin");
lv_imgbtn_set_style(buttonZI, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonZI, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonZD, event_handler, ID_M_Z_N, "bmp_zDec.bin", 0);
- lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonZD, event_handler, ID_M_Z_N, NULL, 0);
+ lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_REL, "F:/bmp_zDec.bin");
+ lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_PR, "F:/bmp_zDec.bin");
lv_imgbtn_set_style(buttonZD, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonZD, LV_BTN_STATE_REL, &tft_style_label_rel);
//lv_obj_set_event_cb_mks(buttonV, event_handler,ID_T_MORE,"bmp_More.bin",0);
- lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonV, event_handler, ID_M_STEP, NULL, 0);
lv_imgbtn_set_style(buttonV, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonV, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_M_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_M_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif // if 1
+
lv_obj_set_pos(buttonXI, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonYI, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonZI, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
@@ -290,6 +290,18 @@ void lv_draw_move_motor(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonXI);
+ lv_group_add_obj(g, buttonXD);
+ lv_group_add_obj(g, buttonYI);
+ lv_group_add_obj(g, buttonYD);
+ lv_group_add_obj(g, buttonZI);
+ lv_group_add_obj(g, buttonZD);
+ lv_group_add_obj(g, buttonV);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
disp_move_dist();
}
@@ -297,12 +309,18 @@ void lv_draw_move_motor(void) {
void disp_move_dist() {
// char buf[30] = {0};
- if ((int)(10 * uiCfg.move_dist) == 1)
- lv_obj_set_event_cb_mks(buttonV, event_handler, ID_M_STEP, "bmp_step_move0_1.bin", 0);
- else if ((int)(10 * uiCfg.move_dist) == 10)
- lv_obj_set_event_cb_mks(buttonV, event_handler, ID_M_STEP, "bmp_step_move1.bin", 0);
- else if ((int)(10 * uiCfg.move_dist) == 100)
- lv_obj_set_event_cb_mks(buttonV, event_handler, ID_M_STEP, "bmp_step_move10.bin", 0);
+ if ((int)(10 * uiCfg.move_dist) == 1) {
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, "F:/bmp_step_move0_1.bin");
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, "F:/bmp_step_move0_1.bin");
+ }
+ else if ((int)(10 * uiCfg.move_dist) == 10) {
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, "F:/bmp_step_move1.bin");
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, "F:/bmp_step_move1.bin");
+ }
+ else if ((int)(10 * uiCfg.move_dist) == 100) {
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, "F:/bmp_step_move10.bin");
+ lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, "F:/bmp_step_move10.bin");
+ }
if (gCfgItems.multiple_language != 0) {
if ((int)(10 * uiCfg.move_dist) == 1) {
lv_label_set_text(labelV, move_menu.step_01mm);
@@ -319,6 +337,11 @@ void disp_move_dist() {
}
}
-void lv_clear_move_motor() { lv_obj_del(scr); }
+void lv_clear_move_motor() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_number_key.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_number_key.cpp
index 2fe32b04c9..4842776304 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_number_key.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_number_key.cpp
@@ -47,6 +47,11 @@
#include "../../../../feature/tmc_util.h"
#endif
+#if HAS_BED_PROBE
+ #include "../../../../module/probe.h"
+#endif
+
+extern lv_group_t * g;
static lv_obj_t * scr;
static lv_obj_t *buttonValue = NULL;
static lv_obj_t *labelValue = NULL;
@@ -77,113 +82,92 @@ static void disp_key_value() {
float milliamps;
#endif
+ ZERO(public_buf_m);
+
switch (value) {
case PrintAcceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.acceleration);
break;
case RetractAcceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.retract_acceleration);
break;
case TravelAcceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.travel_acceleration);
break;
case XAcceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%d"), (int)planner.settings.max_acceleration_mm_per_s2[X_AXIS]);
break;
case YAcceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%d"), (int)planner.settings.max_acceleration_mm_per_s2[Y_AXIS]);
break;
case ZAcceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%d"), (int)planner.settings.max_acceleration_mm_per_s2[Z_AXIS]);
break;
case E0Acceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%d"), (int)planner.settings.max_acceleration_mm_per_s2[E_AXIS]);
break;
case E1Acceleration:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%d"), (int)planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(1)]);
break;
case XMaxFeedRate:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.max_feedrate_mm_s[X_AXIS]);
break;
case YMaxFeedRate:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.max_feedrate_mm_s[Y_AXIS]);
break;
case ZMaxFeedRate:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.max_feedrate_mm_s[Z_AXIS]);
break;
case E0MaxFeedRate:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.max_feedrate_mm_s[E_AXIS]);
break;
case E1MaxFeedRate:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.max_feedrate_mm_s[E_AXIS_N(1)]);
break;
case XJerk:
#if HAS_CLASSIC_JERK
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.max_jerk[X_AXIS]);
#endif
break;
case YJerk:
#if HAS_CLASSIC_JERK
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.max_jerk[Y_AXIS]);
#endif
break;
case ZJerk:
#if HAS_CLASSIC_JERK
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.max_jerk[Z_AXIS]);
#endif
break;
case EJerk:
#if HAS_CLASSIC_JERK
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.max_jerk[E_AXIS]);
#endif
break;
case Xstep:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.axis_steps_per_mm[X_AXIS]);
break;
case Ystep:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.axis_steps_per_mm[Y_AXIS]);
break;
case Zstep:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.axis_steps_per_mm[Z_AXIS]);
break;
case E0step:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.axis_steps_per_mm[E_AXIS]);
break;
case E1step:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), planner.settings.axis_steps_per_mm[E_AXIS_N(1)]);
break;
case Xcurrent:
#if AXIS_IS_TMC(X)
- ZERO(public_buf_m);
milliamps = stepperX.getMilliamps();
sprintf_P(public_buf_m, PSTR("%.1f"), milliamps);
#endif
@@ -191,7 +175,6 @@ static void disp_key_value() {
case Ycurrent:
#if AXIS_IS_TMC(Y)
- ZERO(public_buf_m);
milliamps = stepperY.getMilliamps();
sprintf_P(public_buf_m, PSTR("%.1f"), milliamps);
#endif
@@ -199,7 +182,6 @@ static void disp_key_value() {
case Zcurrent:
#if AXIS_IS_TMC(Z)
- ZERO(public_buf_m);
milliamps = stepperZ.getMilliamps();
sprintf_P(public_buf_m, PSTR("%.1f"), milliamps);
#endif
@@ -207,7 +189,6 @@ static void disp_key_value() {
case E0current:
#if AXIS_IS_TMC(E0)
- ZERO(public_buf_m);
milliamps = stepperE0.getMilliamps();
sprintf_P(public_buf_m, PSTR("%.1f"), milliamps);
#endif
@@ -215,24 +196,100 @@ static void disp_key_value() {
case E1current:
#if AXIS_IS_TMC(E1)
- ZERO(public_buf_m);
milliamps = stepperE1.getMilliamps();
sprintf_P(public_buf_m, PSTR("%.1f"), milliamps);
#endif
break;
case pause_pos_x:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), gCfgItems.pausePosX);
break;
case pause_pos_y:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), gCfgItems.pausePosY);
break;
case pause_pos_z:
- ZERO(public_buf_m);
sprintf_P(public_buf_m, PSTR("%.1f"), gCfgItems.pausePosZ);
break;
+ case level_pos_x1:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[0][0]);
+ break;
+ case level_pos_y1:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[0][1]);
+ break;
+ case level_pos_x2:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[1][0]);
+ break;
+ case level_pos_y2:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[1][1]);
+ break;
+ case level_pos_x3:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[2][0]);
+ break;
+ case level_pos_y3:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[2][1]);
+ break;
+ case level_pos_x4:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[3][0]);
+ break;
+ case level_pos_y4:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[3][1]);
+ break;
+ case level_pos_x5:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[4][0]);
+ break;
+ case level_pos_y5:
+ sprintf_P(public_buf_m, PSTR("%d"), (int)gCfgItems.levelingPos[4][1]);
+ break;
+ #if HAS_BED_PROBE
+ case x_offset:
+ #if HAS_PROBE_XY_OFFSET
+ sprintf_P(public_buf_m, PSTR("%.1f"), probe.offset.x);
+ #endif
+ break;
+ case y_offset:
+ #if HAS_PROBE_XY_OFFSET
+ sprintf_P(public_buf_m, PSTR("%.1f"), probe.offset.y);
+ #endif
+ break;
+ case z_offset:
+ sprintf_P(public_buf_m, PSTR("%.1f"), probe.offset.z);
+ break;
+ #endif
+ case load_length:
+ sprintf_P(public_buf_m, PSTR("%d"), gCfgItems.filamentchange_load_length);
+ break;
+ case load_speed:
+ sprintf_P(public_buf_m, PSTR("%d"), gCfgItems.filamentchange_load_speed);
+ break;
+ case unload_length:
+ sprintf_P(public_buf_m, PSTR("%d"), gCfgItems.filamentchange_unload_length);
+ break;
+ case unload_speed:
+ sprintf_P(public_buf_m, PSTR("%d"), gCfgItems.filamentchange_unload_speed);
+ break;
+ case filament_temp:
+ sprintf_P(public_buf_m, PSTR("%d"), gCfgItems.filament_limit_temper);
+ break;
+ case x_sensitivity:
+ #if X_SENSORLESS
+ sprintf_P(public_buf_m, PSTR("%d"), TERN(X_SENSORLESS, stepperX.homing_threshold(), 0));
+ #endif
+ break;
+ case y_sensitivity:
+ #if Y_SENSORLESS
+ sprintf_P(public_buf_m, PSTR("%d"), TERN(Y_SENSORLESS, stepperY.homing_threshold(), 0));
+ #endif
+ break;
+ case z_sensitivity:
+ #if Z_SENSORLESS
+ sprintf_P(public_buf_m, PSTR("%d"), TERN(Z_SENSORLESS, stepperZ.homing_threshold(), 0));
+ #endif
+ break;
+ case z2_sensitivity:
+ #if Z2_SENSORLESS
+ sprintf_P(public_buf_m, PSTR("%d"), TERN(Z2_SENSORLESS, stepperZ2.homing_threshold(), 0));
+ #endif
+ break;
}
ZERO(key_value);
strcpy(key_value, public_buf_m);
@@ -313,18 +370,23 @@ static void set_value_confirm() {
break;
case Xstep:
planner.settings.axis_steps_per_mm[X_AXIS] = atof(key_value);
+ planner.refresh_positioning();
break;
case Ystep:
planner.settings.axis_steps_per_mm[Y_AXIS] = atof(key_value);
+ planner.refresh_positioning();
break;
case Zstep:
planner.settings.axis_steps_per_mm[Z_AXIS] = atof(key_value);
+ planner.refresh_positioning();
break;
case E0step:
planner.settings.axis_steps_per_mm[E_AXIS] = atof(key_value);
+ planner.refresh_positioning();
break;
case E1step:
planner.settings.axis_steps_per_mm[E_AXIS_N(1)] = atof(key_value);
+ planner.refresh_positioning();
break;
case Xcurrent:
#if AXIS_IS_TMC(X)
@@ -368,6 +430,114 @@ static void set_value_confirm() {
gCfgItems.pausePosZ = atof(key_value);
update_spi_flash();
break;
+ case level_pos_x1:
+ gCfgItems.levelingPos[0][0] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_y1:
+ gCfgItems.levelingPos[0][1] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_x2:
+ gCfgItems.levelingPos[1][0] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_y2:
+ gCfgItems.levelingPos[1][1] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_x3:
+ gCfgItems.levelingPos[2][0] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_y3:
+ gCfgItems.levelingPos[2][1] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_x4:
+ gCfgItems.levelingPos[3][0] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_y4:
+ gCfgItems.levelingPos[3][1] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_x5:
+ gCfgItems.levelingPos[4][0] = atoi(key_value);
+ update_spi_flash();
+ break;
+ case level_pos_y5:
+ gCfgItems.levelingPos[4][1] = atoi(key_value);
+ update_spi_flash();
+ break;
+ #if HAS_BED_PROBE
+ case x_offset:
+ #if HAS_PROBE_XY_OFFSET
+ float x;
+ x = atof(key_value);
+ if (WITHIN(x, -(X_BED_SIZE), X_BED_SIZE))
+ probe.offset.x = x;
+ #endif
+ break;
+ case y_offset:
+ #if HAS_PROBE_XY_OFFSET
+ float y;
+ y = atof(key_value);
+ if (WITHIN(y, -(Y_BED_SIZE), Y_BED_SIZE))
+ probe.offset.y = y;
+ #endif
+ break;
+ case z_offset:
+ float z;
+ z = atof(key_value);
+ if (WITHIN(z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
+ probe.offset.z = z;
+ break;
+ #endif
+ case load_length:
+ gCfgItems.filamentchange_load_length = atoi(key_value);
+ uiCfg.filament_loading_time = (uint32_t)((gCfgItems.filamentchange_load_length*60.0/gCfgItems.filamentchange_load_speed)+0.5);
+ update_spi_flash();
+ break;
+ case load_speed:
+ gCfgItems.filamentchange_load_speed = atoi(key_value);
+ uiCfg.filament_loading_time = (uint32_t)((gCfgItems.filamentchange_load_length*60.0/gCfgItems.filamentchange_load_speed)+0.5);
+ update_spi_flash();
+ break;
+ case unload_length:
+ gCfgItems.filamentchange_unload_length = atoi(key_value);
+ uiCfg.filament_unloading_time = (uint32_t)((gCfgItems.filamentchange_unload_length*60.0/gCfgItems.filamentchange_unload_speed)+0.5);
+ update_spi_flash();
+ break;
+ case unload_speed:
+ gCfgItems.filamentchange_unload_speed = atoi(key_value);
+ uiCfg.filament_unloading_time = (uint32_t)((gCfgItems.filamentchange_unload_length*60.0/gCfgItems.filamentchange_unload_speed)+0.5);
+ update_spi_flash();
+ break;
+ case filament_temp:
+ gCfgItems.filament_limit_temper = atoi(key_value);
+ update_spi_flash();
+ break;
+ case x_sensitivity:
+ #if X_SENSORLESS
+ stepperX.homing_threshold(atoi(key_value));
+ #endif
+ break;
+ case y_sensitivity:
+ #if Y_SENSORLESS
+ stepperY.homing_threshold(atoi(key_value));
+ #endif
+ break;
+ case z_sensitivity:
+ #if Z_SENSORLESS
+ stepperZ.homing_threshold(atoi(key_value));
+ #endif
+ break;
+ case z2_sensitivity:
+ #if Z2_SENSORLESS
+ stepperZ2.homing_threshold(atoi(key_value));
+ #endif
+ break;
}
gcode.process_subcommands_now_P(PSTR("M500"));
}
@@ -604,15 +774,13 @@ void lv_draw_number_key(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- //LV_IMG_DECLARE(bmp_pic);
-
buttonValue = lv_btn_create(scr, NULL); /*Add a button the current screen*/
lv_obj_set_pos(buttonValue, 92, 40); /*Set its position*/
lv_obj_set_size(buttonValue, 296, 40);
lv_obj_set_event_cb_mks(buttonValue, event_handler, ID_NUM_KEY1, NULL, 0);
lv_btn_set_style(buttonValue, LV_BTN_STYLE_REL, &style_num_text); /*Set the button's released style*/
lv_btn_set_style(buttonValue, LV_BTN_STYLE_PR, &style_num_text); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonValue, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(buttonValue, LV_LAYOUT_OFF);
labelValue = lv_label_create(buttonValue, NULL); /*Add a label to the button*/
NumberKey_1 = lv_btn_create(scr, NULL); /*Add a button the current screen*/
@@ -621,7 +789,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_1, event_handler, ID_NUM_KEY1, NULL, 0);
lv_btn_set_style(NumberKey_1, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_1, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_1, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_1, LV_LAYOUT_OFF);
labelKey_1 = lv_label_create(NumberKey_1, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_1, machine_menu.key_1);
lv_obj_align(labelKey_1, NumberKey_1, LV_ALIGN_CENTER, 0, 0);
@@ -632,7 +800,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_2, event_handler, ID_NUM_KEY2, NULL, 0);
lv_btn_set_style(NumberKey_2, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_2, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_2, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_2, LV_LAYOUT_OFF);
labelKey_2 = lv_label_create(NumberKey_2, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_2, machine_menu.key_2);
lv_obj_align(labelKey_2, NumberKey_2, LV_ALIGN_CENTER, 0, 0);
@@ -643,7 +811,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_3, event_handler, ID_NUM_KEY3, NULL, 0);
lv_btn_set_style(NumberKey_3, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_3, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_3, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_3, LV_LAYOUT_OFF);
labelKey_3 = lv_label_create(NumberKey_3, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_3, machine_menu.key_3);
lv_obj_align(labelKey_3, NumberKey_3, LV_ALIGN_CENTER, 0, 0);
@@ -654,7 +822,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_4, event_handler, ID_NUM_KEY4, NULL, 0);
lv_btn_set_style(NumberKey_4, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_4, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_4, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_4, LV_LAYOUT_OFF);
labelKey_4 = lv_label_create(NumberKey_4, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_4, machine_menu.key_4);
lv_obj_align(labelKey_4, NumberKey_4, LV_ALIGN_CENTER, 0, 0);
@@ -665,7 +833,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_5, event_handler, ID_NUM_KEY5, NULL, 0);
lv_btn_set_style(NumberKey_5, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_5, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_5, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_5, LV_LAYOUT_OFF);
labelKey_5 = lv_label_create(NumberKey_5, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_5, machine_menu.key_5);
lv_obj_align(labelKey_5, NumberKey_5, LV_ALIGN_CENTER, 0, 0);
@@ -676,7 +844,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_6, event_handler, ID_NUM_KEY6, NULL, 0);
lv_btn_set_style(NumberKey_6, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_6, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_6, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_6, LV_LAYOUT_OFF);
labelKey_6 = lv_label_create(NumberKey_6, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_6, machine_menu.key_6);
lv_obj_align(labelKey_6, NumberKey_6, LV_ALIGN_CENTER, 0, 0);
@@ -687,7 +855,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_7, event_handler, ID_NUM_KEY7, NULL, 0);
lv_btn_set_style(NumberKey_7, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_7, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_7, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_7, LV_LAYOUT_OFF);
labelKey_7 = lv_label_create(NumberKey_7, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_7, machine_menu.key_7);
lv_obj_align(labelKey_7, NumberKey_7, LV_ALIGN_CENTER, 0, 0);
@@ -698,7 +866,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_8, event_handler, ID_NUM_KEY8, NULL, 0);
lv_btn_set_style(NumberKey_8, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_8, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_8, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_8, LV_LAYOUT_OFF);
labelKey_8 = lv_label_create(NumberKey_8, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_8, machine_menu.key_8);
lv_obj_align(labelKey_8, NumberKey_8, LV_ALIGN_CENTER, 0, 0);
@@ -709,7 +877,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_9, event_handler, ID_NUM_KEY9, NULL, 0);
lv_btn_set_style(NumberKey_9, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_9, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_9, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_9, LV_LAYOUT_OFF);
labelKey_9 = lv_label_create(NumberKey_9, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_9, machine_menu.key_9);
lv_obj_align(labelKey_9, NumberKey_9, LV_ALIGN_CENTER, 0, 0);
@@ -720,7 +888,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(NumberKey_0, event_handler, ID_NUM_KEY0, NULL, 0);
lv_btn_set_style(NumberKey_0, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(NumberKey_0, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(NumberKey_0, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(NumberKey_0, LV_LAYOUT_OFF);
labelKey_0 = lv_label_create(NumberKey_0, NULL); /*Add a label to the button*/
lv_label_set_text(labelKey_0, machine_menu.key_0);
lv_obj_align(labelKey_0, NumberKey_0, LV_ALIGN_CENTER, 0, 0);
@@ -731,7 +899,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(KeyBack, event_handler, ID_NUM_BACK, NULL, 0);
lv_btn_set_style(KeyBack, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(KeyBack, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(KeyBack, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(KeyBack, LV_LAYOUT_OFF);
labelKeyBack = lv_label_create(KeyBack, NULL); /*Add a label to the button*/
lv_label_set_text(labelKeyBack, machine_menu.key_back);
lv_obj_align(labelKeyBack, KeyBack, LV_ALIGN_CENTER, 0, 0);
@@ -742,7 +910,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(KeyReset, event_handler, ID_NUM_RESET, NULL, 0);
lv_btn_set_style(KeyReset, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(KeyReset, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(KeyReset, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(KeyReset, LV_LAYOUT_OFF);
labelKeyReset = lv_label_create(KeyReset, NULL); /*Add a label to the button*/
lv_label_set_text(labelKeyReset, machine_menu.key_reset);
lv_obj_align(labelKeyReset, KeyReset, LV_ALIGN_CENTER, 0, 0);
@@ -753,7 +921,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(KeyConfirm, event_handler, ID_NUM_CONFIRM, NULL, 0);
lv_btn_set_style(KeyConfirm, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(KeyConfirm, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(KeyConfirm, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(KeyConfirm, LV_LAYOUT_OFF);
labelKeyConfirm = lv_label_create(KeyConfirm, NULL); /*Add a label to the button*/
lv_label_set_text(labelKeyConfirm, machine_menu.key_confirm);
lv_obj_align(labelKeyConfirm, KeyConfirm, LV_ALIGN_CENTER, 0, 0);
@@ -764,7 +932,7 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(KeyPoint, event_handler, ID_NUM_POINT, NULL, 0);
lv_btn_set_style(KeyPoint, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(KeyPoint, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(KeyPoint, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(KeyPoint, LV_LAYOUT_OFF);
labelKeyPoint = lv_label_create(KeyPoint, NULL); /*Add a label to the button*/
lv_label_set_text(labelKeyPoint, machine_menu.key_point);
lv_obj_align(labelKeyPoint, KeyPoint, LV_ALIGN_CENTER, 0, 0);
@@ -775,14 +943,39 @@ void lv_draw_number_key(void) {
lv_obj_set_event_cb_mks(Minus, event_handler, ID_NUM_NAGETIVE, NULL, 0);
lv_btn_set_style(Minus, LV_BTN_STYLE_REL, &style_num_key_pre); /*Set the button's released style*/
lv_btn_set_style(Minus, LV_BTN_STYLE_PR, &style_num_key_rel); /*Set the button's pressed style*/
- lv_btn_set_layout(Minus, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(Minus, LV_LAYOUT_OFF);
labelMinus = lv_label_create(Minus, NULL); /*Add a label to the button*/
lv_label_set_text(labelMinus, machine_menu.negative);
lv_obj_align(labelMinus, Minus, LV_ALIGN_CENTER, 0, 0);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, NumberKey_1);
+ lv_group_add_obj(g, NumberKey_2);
+ lv_group_add_obj(g, NumberKey_3);
+ lv_group_add_obj(g, KeyBack);
+ lv_group_add_obj(g, NumberKey_4);
+ lv_group_add_obj(g, NumberKey_5);
+ lv_group_add_obj(g, NumberKey_6);
+ lv_group_add_obj(g, KeyReset);
+ lv_group_add_obj(g, NumberKey_7);
+ lv_group_add_obj(g, NumberKey_8);
+ lv_group_add_obj(g, NumberKey_9);
+ lv_group_add_obj(g, NumberKey_0);
+ lv_group_add_obj(g, Minus);
+ lv_group_add_obj(g, KeyPoint);
+ lv_group_add_obj(g, KeyConfirm);
+ }
+ #endif
+
disp_key_value();
}
-void lv_clear_number_key() { lv_obj_del(scr); }
+void lv_clear_number_key() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_operation.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_operation.cpp
index ad8cad03e0..4a4a0ee130 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_operation.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_operation.cpp
@@ -31,7 +31,11 @@
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
+#include "../../../../module/temperature.h"
+#include "../../../../module/motion.h"
+#include "../../../../sd/cardreader.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_O_PRE_HEAT 1
@@ -42,10 +46,13 @@ static lv_obj_t * scr;
#define ID_O_RETURN 6
#define ID_O_FAN 7
#define ID_O_POWER_OFF 8
+#define ID_O_BABY_STEP 9
static lv_obj_t *label_PowerOff;
static lv_obj_t *buttonPowerOff;
+extern feedRate_t feedrate_mm_s;
+
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_O_PRE_HEAT:
@@ -80,6 +87,20 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
+ #if HAS_MULTI_EXTRUDER
+ uiCfg.curSprayerChoose_bak = active_extruder;
+ #endif
+ if (uiCfg.print_state == WORKING) {
+ #if ENABLED(SDSUPPORT)
+ card.pauseSDPrint();
+ stop_print_time();
+ uiCfg.print_state = PAUSING;
+ #endif
+ }
+ uiCfg.moveSpeed_bak = (uint16_t)feedrate_mm_s;
+ uiCfg.desireSprayerTempBak = thermalManager.temp_hotend[active_extruder].target;
+ lv_clear_operation();
+ lv_draw_filament_change();
}
break;
case ID_O_FAN:
@@ -116,7 +137,8 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
else if (event == LV_EVENT_RELEASED) {
if (gCfgItems.finish_power_off == 1) {
gCfgItems.finish_power_off = 0;
- lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_manual_off.bin", 0); // didn't find bmp_Mamual...
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, "F:/bmp_manual_off.bin");
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, "F:/bmp_manual_off.bin");
lv_label_set_text(label_PowerOff, printing_more_menu.manual);
lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_obj_refresh_ext_draw_pad(label_PowerOff);
@@ -124,7 +146,8 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else {
gCfgItems.finish_power_off = 1;
- lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_auto_off.bin", 0);
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, "F:/bmp_auto_off.bin");
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, "F:/bmp_auto_off.bin");
lv_label_set_text(label_PowerOff, printing_more_menu.auto_close);
lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_obj_refresh_ext_draw_pad(label_PowerOff);
@@ -132,16 +155,26 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
}
break;
-
+ case ID_O_BABY_STEP:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_operation();
+ lv_draw_baby_stepping();
+ }
+ break;
}
}
void lv_draw_operation(void) {
- lv_obj_t *buttonPreHeat, *buttonExtrusion, *buttonSpeed;
- lv_obj_t *buttonBack, *buttonFan;
- lv_obj_t *labelPreHeat, *labelExtrusion;
- lv_obj_t *label_Back, *label_Speed, *label_Fan;
+ lv_obj_t *buttonPreHeat = NULL, *buttonExtrusion = NULL, *buttonSpeed = NULL;
+ lv_obj_t *buttonBack = NULL, *buttonFan = NULL;
+ lv_obj_t *labelPreHeat = NULL, *labelExtrusion = NULL;
+ lv_obj_t *label_Back = NULL, *label_Speed = NULL, *label_Fan = NULL;
lv_obj_t *buttonMove = NULL, *label_Move = NULL;
+ lv_obj_t *buttonBabyStep = NULL, *label_BabyStep = NULL;
+ lv_obj_t *buttonFilament = NULL, *label_Filament = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != OPERATE_UI) {
disp_state_stack._disp_index++;
@@ -162,143 +195,188 @@ void lv_draw_operation(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
- /*Create an Image button*/
- buttonPreHeat = lv_imgbtn_create(scr, NULL);
- buttonExtrusion = lv_imgbtn_create(scr, NULL);
- buttonFan = lv_imgbtn_create(scr, NULL);
- buttonSpeed = lv_imgbtn_create(scr, NULL);
-
+ // Create image buttons
+ buttonPreHeat = lv_imgbtn_create(scr, NULL);
+ buttonFilament = lv_imgbtn_create(scr, NULL);
+ buttonFan = lv_imgbtn_create(scr, NULL);
+ buttonPowerOff = lv_imgbtn_create(scr, NULL);
if (uiCfg.print_state != WORKING) {
- //buttonFilament = lv_imgbtn_create(scr, NULL);
- //} else {
- buttonMove = lv_imgbtn_create(scr, NULL);
+ buttonExtrusion = lv_imgbtn_create(scr, NULL);
+ buttonMove = lv_imgbtn_create(scr, NULL);
}
+ else {
+ buttonSpeed = lv_imgbtn_create(scr, NULL);
+ buttonBabyStep = lv_imgbtn_create(scr, NULL);
+ }
+ buttonBack = lv_imgbtn_create(scr, NULL);
- buttonPowerOff = lv_imgbtn_create(scr, NULL);
- buttonBack = lv_imgbtn_create(scr, NULL);
-
- lv_obj_set_event_cb_mks(buttonPreHeat, event_handler, ID_O_PRE_HEAT, "bmp_temp.bin", 0);
- lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonPreHeat, event_handler, ID_O_PRE_HEAT, NULL, 0);
+ lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_REL, "F:/bmp_temp.bin");
+ lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_PR, "F:/bmp_temp.bin");
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_clear_protect(buttonPreHeat, LV_PROTECT_FOLLOW);
+
+ lv_obj_set_event_cb_mks(buttonFilament, event_handler, ID_O_FILAMENT, NULL, 0);
+ lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_REL, "F:/bmp_filamentchange.bin");
+ lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_PR, "F:/bmp_filamentchange.bin");
+ lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_REL, &tft_style_label_rel);
+
#if 1
- lv_obj_set_event_cb_mks(buttonExtrusion, event_handler, ID_O_EXTRUCT, "bmp_extrude_opr.bin", 0);
- lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonFan, event_handler, ID_O_FAN, "bmp_fan.bin", 0);
- lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonFan, event_handler, ID_O_FAN, NULL, 0);
+ lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_REL, "F:/bmp_fan.bin");
+ lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_PR, "F:/bmp_fan.bin");
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_O_SPEED, "bmp_speed.bin", 0);
- lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_REL, &tft_style_label_rel);
+ if (gCfgItems.finish_power_off == 1) {
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, "F:/bmp_auto_off.bin");
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, "F:/bmp_auto_off.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, "F:/bmp_manual_off.bin");
+ lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, "F:/bmp_manual_off.bin");
+ }
+ lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, NULL, 0);
+ lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonPreHeat);
+ lv_group_add_obj(g, buttonFilament);
+ lv_group_add_obj(g, buttonFan);
+ lv_group_add_obj(g, buttonPowerOff);
+ }
+ #endif
if (uiCfg.print_state != WORKING) {
- /*
- lv_obj_set_event_cb_mks(buttonFilament, event_handler,ID_O_FILAMENT,"bmp_Filamentchange.bin",0);
- lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_REL, &tft_style_label_rel);
- } else {
- */
- lv_obj_set_event_cb_mks(buttonMove, event_handler, ID_O_MOV, "bmp_move_opr.bin", 0);
- lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonExtrusion, event_handler, ID_O_EXTRUCT, NULL, 0);
+ lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_REL, "F:/bmp_extrude_opr.bin");
+ lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_PR, "F:/bmp_extrude_opr.bin");
+ lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonMove, event_handler, ID_O_MOV, NULL, 0);
+ lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_REL, "F:/bmp_move_opr.bin");
+ lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_PR, "F:/bmp_move_opr.bin");
lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonExtrusion);
+ lv_group_add_obj(g, buttonMove);
+ }
+ #endif
+ }
+ else {
+ lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_O_SPEED, NULL, 0);
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, "F:/bmp_speed.bin");
+ lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, "F:/bmp_speed.bin");
+ lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonBabyStep, event_handler, ID_O_BABY_STEP, NULL, 0);
+ lv_imgbtn_set_src(buttonBabyStep, LV_BTN_STATE_REL, "F:/bmp_mov.bin");
+ lv_imgbtn_set_src(buttonBabyStep, LV_BTN_STATE_PR, "F:/bmp_mov.bin");
+ lv_imgbtn_set_style(buttonBabyStep, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBabyStep, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonSpeed);
+ lv_group_add_obj(g, buttonBabyStep);
+ }
+ #endif
}
- if (gCfgItems.finish_power_off == 1)
- lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_auto_off.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_manual_off.bin", 0);
- lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_O_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_O_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif // if 1
- lv_obj_set_pos(buttonPreHeat, INTERVAL_V, titleHeight);
- lv_obj_set_pos(buttonExtrusion, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+ lv_obj_set_pos(buttonPreHeat, INTERVAL_V, titleHeight);
+ lv_obj_set_pos(buttonFilament, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonFan, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
- lv_obj_set_pos(buttonSpeed, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
+ lv_obj_set_pos(buttonPowerOff, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
if (uiCfg.print_state != WORKING) {
/*
lv_obj_set_pos(buttonFilament,INTERVAL_V,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
} else {
*/
- lv_obj_set_pos(buttonMove, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
- lv_obj_set_pos(buttonPowerOff, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonExtrusion, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonMove, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
}
else {
- lv_obj_set_pos(buttonPowerOff, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonSpeed, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ lv_obj_set_pos(buttonBabyStep, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
}
+
lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
- /*Create a label on the Image button*/
+ // Create labels on the image buttons
lv_btn_set_layout(buttonPreHeat, LV_LAYOUT_OFF);
- lv_btn_set_layout(buttonExtrusion, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonFilament, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonFan, LV_LAYOUT_OFF);
- lv_btn_set_layout(buttonSpeed, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonPowerOff, LV_LAYOUT_OFF);
if (uiCfg.print_state != WORKING) {
/*
lv_btn_set_layout(buttonFilament, LV_LAYOUT_OFF);
} else {
*/
+ lv_btn_set_layout(buttonExtrusion, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonMove, LV_LAYOUT_OFF);
}
- lv_btn_set_layout(buttonPowerOff, LV_LAYOUT_OFF);
+ else {
+ lv_btn_set_layout(buttonSpeed, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonBabyStep, LV_LAYOUT_OFF);
+ }
+
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
labelPreHeat = lv_label_create(buttonPreHeat, NULL);
- labelExtrusion = lv_label_create(buttonExtrusion, NULL);
-
+ label_Filament = lv_label_create(buttonFilament, NULL);
label_Fan = lv_label_create(buttonFan, NULL);
- label_Speed = lv_label_create(buttonSpeed, NULL);
+ label_PowerOff = lv_label_create(buttonPowerOff, NULL);
if (uiCfg.print_state != WORKING) {
/*
label_Filament = lv_label_create(buttonFilament, NULL);
} else {
*/
- label_Move = lv_label_create(buttonMove, NULL);
+ labelExtrusion = lv_label_create(buttonExtrusion, NULL);
+ label_Move = lv_label_create(buttonMove, NULL);
+ }
+ else {
+ label_Speed = lv_label_create(buttonSpeed, NULL);
+ label_BabyStep = lv_label_create(buttonBabyStep, NULL);
}
- label_PowerOff = lv_label_create(buttonPowerOff, NULL);
-
label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelPreHeat, operation_menu.temp);
lv_obj_align(labelPreHeat, buttonPreHeat, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- lv_label_set_text(labelExtrusion, operation_menu.extr);
- lv_obj_align(labelExtrusion, buttonExtrusion, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ lv_label_set_text(label_Filament, operation_menu.filament);
+ lv_obj_align(label_Filament, buttonFilament, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Fan, operation_menu.fan);
lv_obj_align(label_Fan, buttonFan, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- lv_label_set_text(label_Speed, operation_menu.speed);
- lv_obj_align(label_Speed, buttonSpeed, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ if (gCfgItems.finish_power_off == 1)
+ lv_label_set_text(label_PowerOff, printing_more_menu.auto_close);
+ else
+ lv_label_set_text(label_PowerOff, printing_more_menu.manual);
+ lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
if (uiCfg.print_state != WORKING) {
/*
@@ -306,21 +384,30 @@ void lv_draw_operation(void) {
lv_obj_align(label_Filament, buttonFilament, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
} else {
*/
+ lv_label_set_text(labelExtrusion, operation_menu.extr);
+ lv_obj_align(labelExtrusion, buttonExtrusion, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
lv_label_set_text(label_Move, operation_menu.move);
lv_obj_align(label_Move, buttonMove, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ else {
+ lv_label_set_text(label_Speed, operation_menu.speed);
+ lv_obj_align(label_Speed, buttonSpeed, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- if (gCfgItems.finish_power_off == 1)
- lv_label_set_text(label_PowerOff, printing_more_menu.auto_close);
- else
- lv_label_set_text(label_PowerOff, printing_more_menu.manual);
- lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ lv_label_set_text(label_BabyStep, operation_menu.babystep);
+ lv_obj_align(label_BabyStep, buttonBabyStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ }
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
-void lv_clear_operation() { lv_obj_del(scr); }
+void lv_clear_operation() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_position.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_position.cpp
index 56caf812b1..9b99971f4f 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_position.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_position.cpp
@@ -29,6 +29,7 @@
#include "../../../../MarlinCore.h"
#include "../../../../module/planner.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_PAUSE_RETURN 1
@@ -82,9 +83,9 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_pause_position(void) {
lv_obj_t *buttonBack = NULL, *label_Back = NULL;
- lv_obj_t *buttonXText = NULL, *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
- lv_obj_t *buttonYText = NULL, *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
- lv_obj_t *buttonZText = NULL, *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != PAUSE_POS_UI) {
@@ -106,85 +107,60 @@ void lv_draw_pause_position(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- // LV_IMG_DECLARE(bmp_para_arrow);
- LV_IMG_DECLARE(bmp_para_bank);
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelXText, machine_menu.xPos);
- buttonXText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonXText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonXText, event_handler);
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonXText, LV_LAYOUT_OFF);
- labelXText = lv_label_create(buttonXText, NULL); /*Add a label to the button*/
-
- buttonXValue = lv_imgbtn_create(scr, NULL);
+ buttonXValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_PAUSE_X, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonXValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_PAUSE_X, NULL, 0);
labelXValue = lv_label_create(buttonXValue, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonYText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonYText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonYText, event_handler);
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonYText, LV_LAYOUT_OFF);
- labelYText = lv_label_create(buttonYText, NULL); /*Add a label to the button*/
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelYText, machine_menu.yPos);
- buttonYValue = lv_imgbtn_create(scr, NULL);
+ buttonYValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_PAUSE_Y, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonYValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_PAUSE_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
labelYValue = lv_label_create(buttonYValue, NULL);
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
- buttonZText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonZText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonZText, event_handler);
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonZText, LV_LAYOUT_OFF);
- labelZText = lv_label_create(buttonZText, NULL); /*Add a label to the button*/
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelZText, machine_menu.zPos);
- buttonZValue = lv_imgbtn_create(scr, NULL);
+ buttonZValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_PAUSE_Z, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonZValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_PAUSE_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
labelZValue = lv_label_create(buttonZValue, NULL);
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
- buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_PAUSE_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
-
+ buttonBack = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
- lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_PAUSE_RETURN, NULL, 0);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
@@ -203,20 +179,24 @@ void lv_draw_pause_position(void) {
lv_label_set_text(labelZValue, public_buf_l);
lv_obj_align(labelZValue, buttonZValue, LV_ALIGN_CENTER, 0, 0);
- lv_label_set_text(labelXText, machine_menu.xPos);
- lv_obj_align(labelXText, buttonXText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelYText, machine_menu.yPos);
- lv_obj_align(labelYText, buttonYText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelZText, machine_menu.zPos);
- lv_obj_align(labelZText, buttonZText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonXValue);
+ lv_group_add_obj(g, buttonYValue);
+ lv_group_add_obj(g, buttonZValue);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_pause_position() { lv_obj_del(scr); }
+void lv_clear_pause_position() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp
index ff7641ddfd..f58a47b341 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp
@@ -34,9 +34,10 @@
#include "../../../../module/temperature.h"
static lv_obj_t * scr;
+extern lv_group_t* g;
static lv_obj_t *buttoType, *buttonStep;
-static lv_obj_t * labelType;
-static lv_obj_t * labelStep;
+static lv_obj_t *labelType;
+static lv_obj_t *labelStep;
static lv_obj_t * tempText1;
#define ID_P_ADD 1
@@ -58,23 +59,22 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
if (uiCfg.curSprayerChoose == 0) {
if ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target > (HEATER_0_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1))) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = (float)HEATER_0_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
- thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
}
#if !defined(SINGLENOZZLE) && HAS_MULTI_EXTRUDER
else if ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target > (HEATER_1_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1))) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = (float)HEATER_1_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
- thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
#endif
+ thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
#if HAS_HEATED_BED
else {
thermalManager.temp_bed.target += uiCfg.stepHeat;
if ((int)thermalManager.temp_bed.target > BED_MAXTEMP - (WATCH_BED_TEMP_INCREASE + TEMP_BED_HYSTERESIS + 1)) {
thermalManager.temp_bed.target = (float)BED_MAXTEMP - (WATCH_BED_TEMP_INCREASE + TEMP_BED_HYSTERESIS + 1);
- thermalManager.start_watching_bed();
}
+ thermalManager.start_watching_bed();
}
#endif
disp_desire_temp();
@@ -88,23 +88,21 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
if (uiCfg.curTempType == 0) {
if ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target > uiCfg.stepHeat) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target -= uiCfg.stepHeat;
- thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
else {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = (float)0;
- thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
+ thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
#if HAS_HEATED_BED
else {
if ((int)thermalManager.temp_bed.target > uiCfg.stepHeat) {
thermalManager.temp_bed.target -= uiCfg.stepHeat;
- thermalManager.start_watching_bed();
}
else {
thermalManager.temp_bed.target = (float)0;
- thermalManager.start_watching_bed();
}
+ thermalManager.start_watching_bed();
}
#endif
disp_desire_temp();
@@ -212,9 +210,7 @@ void lv_draw_preHeat(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
- /*Create an Image button*/
+ // Create image buttons
buttonAdd = lv_imgbtn_create(scr, NULL);
buttonDec = lv_imgbtn_create(scr, NULL);
buttoType = lv_imgbtn_create(scr, NULL);
@@ -222,40 +218,37 @@ void lv_draw_preHeat(void) {
buttonOff = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_P_ADD, "bmp_Add.bin", 0);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_P_ADD, NULL, 0);
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, "F:/bmp_Add.bin");
+ lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, "F:/bmp_Add.bin");
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
+
#if 1
- lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_P_DEC, "bmp_Dec.bin", 0);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_P_DEC, NULL, 0);
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, "F:/bmp_Dec.bin");
+ lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, "F:/bmp_Dec.bin");
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttoType, event_handler, ID_P_TYPE, NULL, 0);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_P_STEP, NULL, 0);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonOff, event_handler, ID_P_OFF, "bmp_speed0.bin", 0);
- lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonOff, event_handler, ID_P_OFF, NULL, 0);
+ lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_REL, "F:/bmp_speed0.bin");
+ lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_PR, "F:/bmp_speed0.bin");
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
@@ -295,6 +288,16 @@ void lv_draw_preHeat(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonAdd);
+ lv_group_add_obj(g, buttonDec);
+ lv_group_add_obj(g, buttoType);
+ lv_group_add_obj(g, buttonStep);
+ lv_group_add_obj(g, buttonOff);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
disp_temp_type();
disp_step_heat();
@@ -307,14 +310,16 @@ void lv_draw_preHeat(void) {
void disp_temp_type() {
if (uiCfg.curTempType == 0) {
if (uiCfg.curSprayerChoose == 1) {
- lv_obj_set_event_cb_mks(buttoType, event_handler, ID_P_TYPE, "bmp_extru2.bin", 0);
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, "F:/bmp_extru2.bin");
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, "F:/bmp_extru2.bin");
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, preheat_menu.ext2);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
else {
- lv_obj_set_event_cb_mks(buttoType, event_handler, ID_P_TYPE, "bmp_extru1.bin", 0);
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, "F:/bmp_extru1.bin");
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, "F:/bmp_extru1.bin");
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, preheat_menu.ext1);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@@ -323,7 +328,8 @@ void disp_temp_type() {
}
else {
- lv_obj_set_event_cb_mks(buttoType, event_handler, ID_P_TYPE, "bmp_bed.bin", 0);
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, "F:/bmp_bed.bin");
+ lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, "F:/bmp_bed.bin");
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, preheat_menu.hotbed);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@@ -356,12 +362,18 @@ void disp_desire_temp() {
}
void disp_step_heat() {
- if (uiCfg.stepHeat == 1)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_P_STEP, "bmp_step1_degree.bin", 0);
- else if (uiCfg.stepHeat == 5)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_P_STEP, "bmp_step5_degree.bin", 0);
- else if (uiCfg.stepHeat == 10)
- lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_P_STEP, "bmp_step10_degree.bin", 0);
+ if (uiCfg.stepHeat == 1) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step1_degree.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step1_degree.bin");
+ }
+ else if (uiCfg.stepHeat == 5) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step5_degree.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step5_degree.bin");
+ }
+ else if (uiCfg.stepHeat == 10) {
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, "F:/bmp_step10_degree.bin");
+ lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, "F:/bmp_step10_degree.bin");
+ }
if (gCfgItems.multiple_language != 0) {
if (uiCfg.stepHeat == 1) {
@@ -379,6 +391,11 @@ void disp_step_heat() {
}
}
-void lv_clear_preHeat() { lv_obj_del(scr); }
+void lv_clear_preHeat() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp
index 13a92269f8..add0f0394b 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp
@@ -33,6 +33,7 @@
#include "../../../../sd/cardreader.h"
static lv_obj_t * scr;
+extern lv_group_t* g;
static lv_obj_t *buttonPageUp, *buttonPageDown, *buttonBack,
*buttonGcode[FILE_BTN_CNT], *labelPageUp[FILE_BTN_CNT], *buttonText[FILE_BTN_CNT];
@@ -132,11 +133,6 @@ uint8_t have_pre_pic(char *path) {
return 0;
}
-LV_IMG_DECLARE(bmp_pic_117x92);
-LV_IMG_DECLARE(bmp_pic_100x100);
-LV_IMG_DECLARE(bmp_pic);
-LV_IMG_DECLARE(bmp_pic_100x40);
-
static void event_handler(lv_obj_t * obj, lv_event_t event) {
uint8_t i, file_count = 0;
//switch (obj->mks_obj_id)
@@ -157,7 +153,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
#endif
if (file_count != 0) {
dir_offset[curDirLever].curPage--;
- lv_obj_del(scr);
+ lv_clear_print_file();
disp_gcode_icon(file_count);
}
}
@@ -175,7 +171,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
#endif
if (file_count != 0) {
dir_offset[curDirLever].curPage++;
- lv_obj_del(scr);
+ lv_clear_print_file();
disp_gcode_icon(file_count);
}
if (file_count < FILE_NUM)
@@ -202,12 +198,12 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
#if ENABLED(SDSUPPORT)
file_count = search_file();
#endif
- lv_obj_del(scr);
+ lv_clear_print_file();
disp_gcode_icon(file_count);
}
}
else {
- lv_obj_del(scr);
+ lv_clear_print_file();
lv_draw_ready_print();
}
}
@@ -227,12 +223,12 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
#if ENABLED(SDSUPPORT)
file_count = search_file();
#endif
- lv_obj_del(scr);
+ lv_clear_print_file();
disp_gcode_icon(file_count);
}
else {
sel_id = i;
- lv_obj_del(scr);
+ lv_clear_print_file();
lv_draw_dialog(DIALOG_TYPE_PRINT_FILE);
}
break;
@@ -269,9 +265,9 @@ void lv_draw_print_file(void) {
#endif
disp_gcode_icon(file_count);
- //lv_obj_t * labelPageUp = lv_label_create(buttonPageUp, NULL);
- //lv_obj_t * labelPageDown = lv_label_create(buttonPageDown, NULL);
- //lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
+ //lv_obj_t *labelPageUp = lv_label_create(buttonPageUp, NULL);
+ //lv_obj_t *labelPageDown = lv_label_create(buttonPageDown, NULL);
+ //lv_obj_t *label_Back = lv_label_create(buttonBack, NULL);
/*
if (gCfgItems.multiple_language != 0) {
@@ -286,7 +282,7 @@ void lv_draw_print_file(void) {
}
*/
}
-
+static char test_public_buf_l[40];
void disp_gcode_icon(uint8_t file_num) {
uint8_t i;
@@ -310,23 +306,22 @@ void disp_gcode_icon(uint8_t file_num) {
buttonPageDown = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonPageUp, event_handler, ID_P_UP, "bmp_pageUp.bin", 0);
- lv_imgbtn_set_src(buttonPageUp, LV_BTN_STATE_REL, &bmp_pic_117x92);
- lv_imgbtn_set_src(buttonPageUp, LV_BTN_STATE_PR, &bmp_pic_117x92);
+ lv_obj_set_event_cb_mks(buttonPageUp, event_handler, ID_P_UP, NULL, 0);
+ lv_imgbtn_set_src(buttonPageUp, LV_BTN_STATE_REL, "F:/bmp_pageUp.bin");
+ lv_imgbtn_set_src(buttonPageUp, LV_BTN_STATE_PR, "F:/bmp_pageUp.bin");
lv_imgbtn_set_style(buttonPageUp, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPageUp, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_clear_protect(buttonPageUp, LV_PROTECT_FOLLOW);
#if 1
- lv_obj_set_event_cb_mks(buttonPageDown, event_handler, ID_P_DOWN, "bmp_pageDown.bin", 0);
- lv_imgbtn_set_src(buttonPageDown, LV_BTN_STATE_REL, &bmp_pic_117x92);
- lv_imgbtn_set_src(buttonPageDown, LV_BTN_STATE_PR, &bmp_pic_117x92);
+ lv_obj_set_event_cb_mks(buttonPageDown, event_handler, ID_P_DOWN, NULL, 0);
+ lv_imgbtn_set_src(buttonPageDown, LV_BTN_STATE_REL, "F:/bmp_pageDown.bin");
+ lv_imgbtn_set_src(buttonPageDown, LV_BTN_STATE_PR, "F:/bmp_pageDown.bin");
lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, "bmp_back.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic_117x92);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic_117x92);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
@@ -365,9 +360,9 @@ void disp_gcode_icon(uint8_t file_num) {
cutFileName((char *)list_file.long_name[i], 16, 8, (char *)public_buf_m);
if (list_file.IsFolder[i] == 1) {
- lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), "bmp_dir.bin", 0);
- lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), NULL, 0);
+ lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, "F:/bmp_dir.bin");
+ lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, "F:/bmp_dir.bin");
if (i < 3)
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1), titleHeight);
else
@@ -380,9 +375,17 @@ void disp_gcode_icon(uint8_t file_num) {
}
else {
if (have_pre_pic((char *)list_file.file_name[i])) {
- lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), list_file.file_name[i], 1);
- lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, &bmp_pic_100x100);
- lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, &bmp_pic_100x100);
+
+ //lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), list_file.file_name[i], 1);
+
+ ZERO(test_public_buf_l);
+ strcat(test_public_buf_l,"S:");
+ strcat(test_public_buf_l,list_file.file_name[i]);
+ char *temp = strstr(test_public_buf_l,".GCO");
+ if (temp) { strcpy(temp,".bin"); }
+ lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), NULL, 0);
+ lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, test_public_buf_l);
+ lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, test_public_buf_l);
if (i < 3) {
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1) + FILE_PRE_PIC_X_OFFSET, titleHeight + FILE_PRE_PIC_Y_OFFSET);
buttonText[i] = lv_btn_create(scr, NULL);
@@ -395,8 +398,6 @@ void disp_gcode_icon(uint8_t file_num) {
lv_obj_clear_protect(buttonText[i], LV_PROTECT_FOLLOW);
lv_btn_set_layout(buttonText[i], LV_LAYOUT_OFF);
//lv_obj_set_event_cb_mks(buttonText[i], event_handler,(i+10),NULL,0);
- //lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_REL, &bmp_pic_100x40);
- //lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_PR, &bmp_pic_100x40);
lv_obj_set_pos(buttonText[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1) + FILE_PRE_PIC_X_OFFSET, titleHeight + FILE_PRE_PIC_Y_OFFSET + 100);
lv_obj_set_size(buttonText[i], 100, 40);
}
@@ -412,8 +413,6 @@ void disp_gcode_icon(uint8_t file_num) {
lv_obj_clear_protect(buttonText[i], LV_PROTECT_FOLLOW);
lv_btn_set_layout(buttonText[i], LV_LAYOUT_OFF);
//lv_obj_set_event_cb_mks(buttonText[i], event_handler,(i+10),NULL,0);
- //lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_REL, &bmp_pic_100x40);
- //lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_PR, &bmp_pic_100x40);
lv_obj_set_pos(buttonText[i], BTN_X_PIXEL * (i - 3) + INTERVAL_V * ((i - 3) + 1) + FILE_PRE_PIC_X_OFFSET, BTN_Y_PIXEL + INTERVAL_H + titleHeight + FILE_PRE_PIC_Y_OFFSET + 100);
lv_obj_set_size(buttonText[i], 100, 40);
}
@@ -423,9 +422,9 @@ void disp_gcode_icon(uint8_t file_num) {
lv_obj_align(labelPageUp[i], buttonText[i], LV_ALIGN_IN_BOTTOM_MID, 0, 0);
}
else {
- lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), "bmp_file.bin", 0);
- lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), NULL, 0);
+ lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, "F:/bmp_file.bin");
+ lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, "F:/bmp_file.bin");
if (i < 3)
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1), titleHeight);
else
@@ -437,15 +436,26 @@ void disp_gcode_icon(uint8_t file_num) {
lv_obj_align(labelPageUp[i], buttonGcode[i], LV_ALIGN_IN_BOTTOM_MID, 0, -5);
}
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonGcode[i]);
+ #endif
+
#else // !TFT35
#endif // !TFT35
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonPageUp);
+ lv_group_add_obj(g, buttonPageDown);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_open_gcode_file(char *path) {
+uint32_t lv_open_gcode_file(char *path) {
#if ENABLED(SDSUPPORT)
uint32_t *ps4;
- int pre_sread_cnt;
+ uint32_t pre_sread_cnt = 0;
char *cur_name;
cur_name = strrchr(path, '/');
@@ -458,10 +468,10 @@ void lv_open_gcode_file(char *path) {
pre_sread_cnt = (uint32_t)ps4 - (uint32_t)((uint32_t *)(&public_buf[0]));
card.setIndex(pre_sread_cnt);
}
+ return pre_sread_cnt;
#endif // SDSUPPORT
}
-
int ascii2dec_test(char *ascii) {
int result = 0;
if (ascii == 0) return 0;
@@ -534,6 +544,10 @@ void lv_gcode_file_read(uint8_t *data_buf) {
void lv_close_gcode_file() {TERN_(SDSUPPORT, card.closefile());}
+void lv_gcode_file_seek(uint32_t pos) {
+ card.setIndex(pos);
+}
+
void cutFileName(char *path, int len, int bytePerLine, char *outStr) {
#if _LFN_UNICODE
TCHAR *tmpFile;
@@ -616,6 +630,11 @@ void cutFileName(char *path, int len, int bytePerLine, char *outStr) {
#endif
}
-void lv_clear_print_file() { lv_obj_del(scr); }
+void lv_clear_print_file() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.h
index 226e4f668e..083b3d9acf 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.h
@@ -52,12 +52,13 @@ extern LIST_FILE list_file;
extern void disp_gcode_icon(uint8_t file_num);
extern void lv_draw_print_file(void);
-extern void lv_open_gcode_file(char *path);
+extern uint32_t lv_open_gcode_file(char *path);
extern void lv_gcode_file_read(uint8_t *data_buf);
extern void lv_close_gcode_file();
extern void cutFileName(char *path, int len, int bytePerLine, char *outStr);
extern int ascii2dec_test(char *ascii);
extern void lv_clear_print_file();
+extern void lv_gcode_file_seek(uint32_t pos);
//extern void disp_temp_ready_print();
#ifdef __cplusplus
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp
index e5a7bb18d9..a81b5b851b 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp
@@ -35,6 +35,7 @@
#include "../../../../module/motion.h"
#include "../../../../sd/cardreader.h"
#include "../../../../gcode/queue.h"
+#include "../../../../gcode/gcode.h"
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h"
@@ -43,10 +44,11 @@
#include "../../../ultralcd.h"
#endif
+extern lv_group_t * g;
static lv_obj_t * scr;
-static lv_obj_t * labelExt1, * labelExt2, * labelFan, * labelZpos, * labelTime;
-static lv_obj_t * labelPause, * labelStop, * labelOperat;
-static lv_obj_t * bar1;
+static lv_obj_t *labelExt1, * labelExt2, * labelFan, * labelZpos, * labelTime;
+static lv_obj_t *labelPause, * labelStop, * labelOperat;
+static lv_obj_t * bar1, *bar1ValueText;
static lv_obj_t * buttonPause, *buttonOperat, *buttonStop;
#if HAS_HEATED_BED
@@ -57,8 +59,6 @@ static lv_obj_t * buttonPause, *buttonOperat, *buttonStop;
#define ID_STOP 2
#define ID_OPTION 3
-lv_style_t lv_bar_style_indic;
-
uint8_t once_flag = 0;
extern uint32_t To_pre_view;
extern uint8_t flash_preview_begin;
@@ -82,21 +82,23 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
stop_print_time();
uiCfg.print_state = PAUSING;
#endif
- lv_obj_set_event_cb_mks(buttonPause, event_handler, ID_PAUSE, "bmp_resume.bin", 0);
+ lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_REL, "F:/bmp_resume.bin");
+ lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_PR, "F:/bmp_resume.bin");
lv_label_set_text(labelPause, printing_menu.resume);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0);
}
else if (uiCfg.print_state == PAUSED) {
uiCfg.print_state = RESUMING;
- // if (IS_SD_PAUSED())queue.inject_P(PSTR("M24"));// queue.inject_P(M24_STR);
- lv_obj_set_event_cb_mks(obj, event_handler, ID_PAUSE, "bmp_pause.bin", 0);
+ lv_imgbtn_set_src(obj, LV_BTN_STATE_REL, "F:/bmp_pause.bin");
+ lv_imgbtn_set_src(obj, LV_BTN_STATE_PR, "F:/bmp_pause.bin");
lv_label_set_text(labelPause, printing_menu.pause);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0);
}
#if ENABLED(POWER_LOSS_RECOVERY)
else if (uiCfg.print_state == REPRINTING) {
uiCfg.print_state = REPRINTED;
- lv_obj_set_event_cb_mks(obj, event_handler, ID_PAUSE, "bmp_pause.bin", 0);
+ lv_imgbtn_set_src(obj, LV_BTN_STATE_REL, "F:/bmp_pause.bin");
+ lv_imgbtn_set_src(obj, LV_BTN_STATE_PR, "F:/bmp_pause.bin");
lv_label_set_text(labelPause, printing_menu.pause);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0);
// recovery.resume();
@@ -115,7 +117,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
if (gcode_preview_over != 1) {
- lv_obj_del(scr);
+ lv_clear_printing();
lv_draw_dialog(DIALOG_TYPE_STOP);
}
}
@@ -126,7 +128,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
if (gcode_preview_over != 1) {
- lv_obj_del(scr);
+ lv_clear_printing();
lv_draw_operation();
}
}
@@ -159,88 +161,71 @@ void lv_draw_printing(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic_150x80);
- LV_IMG_DECLARE(bmp_pic_45x45);
-
- /*Create an Image button*/
- buttonExt1 = lv_imgbtn_create(scr, NULL);
- if (EXTRUDERS == 2)
- buttonExt2 = lv_imgbtn_create(scr, NULL);
-
+ // Create image buttons
+ buttonExt1 = lv_img_create(scr, NULL);
+ #if HAS_MULTI_EXTRUDER
+ buttonExt2 = lv_img_create(scr, NULL);
+ #endif
#if HAS_HEATED_BED
- buttonBedstate = lv_imgbtn_create(scr, NULL);
+ buttonBedstate = lv_img_create(scr, NULL);
#endif
-
- buttonFanstate = lv_imgbtn_create(scr, NULL);
- buttonZpos = lv_imgbtn_create(scr, NULL);
+ buttonFanstate = lv_img_create(scr, NULL);
+ buttonTime = lv_img_create(scr, NULL);
+ buttonZpos = lv_img_create(scr, NULL);
buttonPause = lv_imgbtn_create(scr, NULL);
buttonStop = lv_imgbtn_create(scr, NULL);
buttonOperat = lv_imgbtn_create(scr, NULL);
- buttonTime = lv_imgbtn_create(scr, NULL);
-
- lv_obj_set_event_cb_mks(buttonExt1, event_handler, 0, "bmp_ext1_state.bin", 0);
- lv_imgbtn_set_src(buttonExt1, LV_BTN_STATE_REL, &bmp_pic_45x45);
- lv_imgbtn_set_src(buttonExt1, LV_BTN_STATE_PR, &bmp_pic_45x45);
- lv_imgbtn_set_style(buttonExt1, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonExt1, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_clear_protect(buttonExt1, LV_PROTECT_FOLLOW);
+
+ lv_img_set_src(buttonExt1, "F:/bmp_ext1_state.bin");
#if 1
- if (EXTRUDERS == 2) {
- lv_obj_set_event_cb_mks(buttonExt2, event_handler, 0, "bmp_ext2_state.bin", 0);
- lv_imgbtn_set_src(buttonExt2, LV_BTN_STATE_REL, &bmp_pic_45x45);
- lv_imgbtn_set_src(buttonExt2, LV_BTN_STATE_PR, &bmp_pic_45x45);
- lv_imgbtn_set_style(buttonExt2, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonExt2, LV_BTN_STATE_REL, &tft_style_label_rel);
- }
+ #if HAS_MULTI_EXTRUDER
+ lv_img_set_src(buttonExt2, "F:/bmp_ext2_state.bin");
+ #endif
#if HAS_HEATED_BED
- lv_obj_set_event_cb_mks(buttonBedstate, event_handler, 0, "bmp_bed_state.bin", 0);
- lv_imgbtn_set_src(buttonBedstate, LV_BTN_STATE_REL, &bmp_pic_45x45);
- lv_imgbtn_set_src(buttonBedstate, LV_BTN_STATE_PR, &bmp_pic_45x45);
- lv_imgbtn_set_style(buttonBedstate, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBedstate, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_img_set_src(buttonBedstate, "F:/bmp_bed_state.bin");
#endif
- lv_obj_set_event_cb_mks(buttonFanstate, event_handler, 0, "bmp_fan_state.bin", 0);
- lv_imgbtn_set_src(buttonFanstate, LV_BTN_STATE_REL, &bmp_pic_45x45);
- lv_imgbtn_set_src(buttonFanstate, LV_BTN_STATE_PR, &bmp_pic_45x45);
- lv_imgbtn_set_style(buttonFanstate, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonFanstate, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonTime, event_handler, 0, "bmp_time_state.bin", 0);
- lv_imgbtn_set_src(buttonTime, LV_BTN_STATE_REL, &bmp_pic_45x45);
- lv_imgbtn_set_src(buttonTime, LV_BTN_STATE_PR, &bmp_pic_45x45);
- lv_imgbtn_set_style(buttonTime, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTime, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonZpos, event_handler, 0, "bmp_zpos_state.bin", 0);
- lv_imgbtn_set_src(buttonZpos, LV_BTN_STATE_REL, &bmp_pic_45x45);
- lv_imgbtn_set_src(buttonZpos, LV_BTN_STATE_PR, &bmp_pic_45x45);
- lv_imgbtn_set_style(buttonZpos, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonZpos, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- if (uiCfg.print_state == WORKING)
- lv_obj_set_event_cb_mks(buttonPause, event_handler, ID_PAUSE, "bmp_pause.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonPause, event_handler, ID_PAUSE, "bmp_resume.bin", 0);
-
- lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_REL, &bmp_pic_150x80);
- lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_PR, &bmp_pic_150x80);
+ lv_img_set_src(buttonFanstate, "F:/bmp_fan_state.bin");
+
+ lv_img_set_src(buttonTime, "F:/bmp_time_state.bin");
+
+ lv_img_set_src(buttonZpos, "F:/bmp_zpos_state.bin");
+
+ if (uiCfg.print_state == WORKING) {
+ lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_REL, "F:/bmp_pause.bin");
+ lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_PR, "F:/bmp_pause.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_REL, "F:/bmp_resume.bin");
+ lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_PR, "F:/bmp_resume.bin");
+ }
+
+ lv_obj_set_event_cb_mks(buttonPause, event_handler, ID_PAUSE, NULL, 0);
lv_imgbtn_set_style(buttonPause, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPause, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonStop, event_handler, ID_STOP, "bmp_stop.bin", 0);
- lv_imgbtn_set_src(buttonStop, LV_BTN_STATE_REL, &bmp_pic_150x80);
- lv_imgbtn_set_src(buttonStop, LV_BTN_STATE_PR, &bmp_pic_150x80);
+ lv_obj_set_event_cb_mks(buttonStop, event_handler, ID_STOP, NULL, 0);
+ lv_imgbtn_set_src(buttonStop, LV_BTN_STATE_REL, "F:/bmp_stop.bin");
+ lv_imgbtn_set_src(buttonStop, LV_BTN_STATE_PR, "F:/bmp_stop.bin");
lv_imgbtn_set_style(buttonStop, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonStop, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonOperat, event_handler, ID_OPTION, "bmp_operate.bin", 0);
- lv_imgbtn_set_src(buttonOperat, LV_BTN_STATE_REL, &bmp_pic_150x80);
- lv_imgbtn_set_src(buttonOperat, LV_BTN_STATE_PR, &bmp_pic_150x80);
+ lv_obj_set_event_cb_mks(buttonOperat, event_handler, ID_OPTION, NULL, 0);
+ lv_imgbtn_set_src(buttonOperat, LV_BTN_STATE_REL, "F:/bmp_operate.bin");
+ lv_imgbtn_set_src(buttonOperat, LV_BTN_STATE_PR, "F:/bmp_operate.bin");
lv_imgbtn_set_style(buttonOperat, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonOperat, LV_BTN_STATE_REL, &tft_style_label_rel);
+
#endif // if 1
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonPause);
+ lv_group_add_obj(g, buttonStop);
+ lv_group_add_obj(g, buttonOperat);
+ }
+ #endif
+
lv_obj_set_pos(buttonExt1, 205, 136);
#if HAS_MULTI_EXTRUDER
@@ -258,17 +243,19 @@ void lv_draw_printing(void) {
lv_obj_set_pos(buttonStop, 165, 240);
lv_obj_set_pos(buttonOperat, 325, 240);
- /*Create a label on the Image button*/
- lv_btn_set_layout(buttonExt1, LV_LAYOUT_OFF);
- if (EXTRUDERS == 2)
- lv_btn_set_layout(buttonExt2, LV_LAYOUT_OFF);
+ // Create labels on the image buttons
+ //lv_btn_set_layout(buttonExt1, LV_LAYOUT_OFF);
+ //#if HAS_MULTI_EXTRUDER
+ //lv_btn_set_layout(buttonExt2, LV_LAYOUT_OFF);
+ //#endif
- #if HAS_HEATED_BED
- lv_btn_set_layout(buttonBedstate, LV_LAYOUT_OFF);
- #endif
+ //#if HAS_HEATED_BED
+ //lv_btn_set_layout(buttonBedstate, LV_LAYOUT_OFF);
+ //#endif
- lv_btn_set_layout(buttonFanstate, LV_LAYOUT_OFF);
- lv_btn_set_layout(buttonZpos, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(buttonFanstate, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(buttonTime, LV_LAYOUT_OFF);
+ //lv_btn_set_layout(buttonZpos, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPause, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonStop, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOperat, LV_LAYOUT_OFF);
@@ -293,23 +280,20 @@ void lv_draw_printing(void) {
lv_obj_set_style(labelFan, &tft_style_label_rel);
lv_obj_set_pos(labelFan, 395, 196);
- labelZpos = lv_label_create(scr, NULL);
- lv_obj_set_style(labelZpos, &tft_style_label_rel);
- lv_obj_set_pos(labelZpos, 395, 96);
-
labelTime = lv_label_create(scr, NULL);
lv_obj_set_style(labelTime, &tft_style_label_rel);
lv_obj_set_pos(labelTime, 250, 96);
+ labelZpos = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZpos, &tft_style_label_rel);
+ lv_obj_set_pos(labelZpos, 395, 96);
+
labelPause = lv_label_create(buttonPause, NULL);
labelStop = lv_label_create(buttonStop, NULL);
labelOperat = lv_label_create(buttonOperat, NULL);
if (gCfgItems.multiple_language != 0) {
- if (uiCfg.print_state == WORKING)
- lv_label_set_text(labelPause, printing_menu.pause);
- else
- lv_label_set_text(labelPause, printing_menu.resume);
+ lv_label_set_text(labelPause, uiCfg.print_state == WORKING ? printing_menu.pause : printing_menu.resume);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 20, 0);
lv_label_set_text(labelStop, printing_menu.stop);
@@ -319,20 +303,15 @@ void lv_draw_printing(void) {
lv_obj_align(labelOperat, buttonOperat, LV_ALIGN_CENTER, 20, 0);
}
- lv_style_copy(&lv_bar_style_indic, &lv_style_pretty_color);
- lv_bar_style_indic.text.color = lv_color_hex3(0xADF);
- lv_bar_style_indic.image.color = lv_color_hex3(0xADF);
- lv_bar_style_indic.line.color = lv_color_hex3(0xADF);
- lv_bar_style_indic.body.main_color = lv_color_hex3(0xADF);
- lv_bar_style_indic.body.grad_color = lv_color_hex3(0xADF);
- lv_bar_style_indic.body.border.color = lv_color_hex3(0xADF);
-
bar1 = lv_bar_create(scr, NULL);
lv_obj_set_pos(bar1, 205, 36);
lv_obj_set_size(bar1, 270, 40);
lv_bar_set_style(bar1, LV_BAR_STYLE_INDIC, &lv_bar_style_indic);
lv_bar_set_anim_time(bar1, 1000);
lv_bar_set_value(bar1, 0, LV_ANIM_ON);
+ bar1ValueText = lv_label_create(bar1, NULL);
+ lv_label_set_text(bar1ValueText,"0%");
+ lv_obj_align(bar1ValueText, bar1, LV_ALIGN_CENTER, 0, 0);
disp_ext_temp();
disp_bed_temp();
@@ -419,6 +398,10 @@ void setProBarRate() {
if (disp_state == PRINTING_UI) {
lv_bar_set_value(bar1, rate, LV_ANIM_ON);
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, "%d%%", rate);
+ lv_label_set_text(bar1ValueText,public_buf_l);
+ lv_obj_align(bar1ValueText, bar1, LV_ALIGN_CENTER, 0, 0);
if (marlin_state == MF_SD_COMPLETE) {
if (once_flag == 0) {
@@ -432,14 +415,22 @@ void setProBarRate() {
once_flag = 1;
#if HAS_SUICIDE
- if (gCfgItems.finish_power_off == 1)
- suicide();
+ if (gCfgItems.finish_power_off == 1) {
+ gcode.process_subcommands_now_P(PSTR("M1001"));
+ queue.inject_P(PSTR("M81"));
+ marlin_state = MF_RUNNING;
+ }
#endif
}
}
}
}
-void lv_clear_printing() { lv_obj_del(scr); }
+void lv_clear_printing() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp
index 38750d608d..54ffdca64a 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp
@@ -42,6 +42,7 @@
#include
//static lv_obj_t *buttonPrint,*buttonTool,*buttonSet;
+extern lv_group_t* g;
static lv_obj_t * scr;
#if ENABLED(MKS_TEST)
uint8_t curent_disp_ui = 0;
@@ -59,7 +60,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_ready_print();
lv_draw_tool();
}
break;
@@ -68,7 +69,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_ready_print();
lv_draw_set();
}
break;
@@ -77,7 +78,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_ready_print();
lv_draw_print_file();
}
break;
@@ -111,7 +112,7 @@ void disp_det_error() {
lv_obj_t *e1, *e2, *e3, *bed;
void mks_disp_test() {
char buf[30] = {0};
- //lv_obj_t * label_tool2 = lv_label_create(scr, NULL);
+ //lv_obj_t *label_tool2 = lv_label_create(scr, NULL);
//lv_obj_set_pos(label_tool,20,50);
ZERO(buf);
sprintf_P(buf, PSTR("e1:%d"), (int)thermalManager.temp_hotend[0].celsius);
@@ -132,7 +133,6 @@ void mks_disp_test() {
#endif
}
-extern unsigned char bmp_public_buf[17 * 1024];
void lv_draw_ready_print(void) {
char buf[30] = {0};
lv_obj_t *buttonPrint, *buttonTool, *buttonSet;
@@ -151,9 +151,7 @@ void lv_draw_ready_print(void) {
//lv_obj_set_hidden(scr,true);
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
- if (mks_test_flag == 0x1e) {
+ if (mks_test_flag == 0x1E) {
//lv_obj_t * title = lv_label_create(scr, NULL);
//lv_obj_set_style(title, &tft_style_label_rel);
//lv_obj_set_pos(title,TITLE_XPOS,TITLE_YPOS);
@@ -164,26 +162,10 @@ void lv_draw_ready_print(void) {
buttonTool = lv_imgbtn_create(scr, NULL);
//buttonSet = lv_imgbtn_create(scr, NULL);
- //lv_obj_set_event_cb_mks(buttonPrint, event_handler,ID_PRINT,"bmp_printing.bin",0);
- //lv_imgbtn_set_src_mks(buttonPrint, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_printing.bin");
- //lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonPrint, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonPrint, LV_BTN_STATE_REL, &tft_style_label_rel);
- //lv_obj_clear_protect(buttonPrint, LV_PROTECT_FOLLOW);
-
#if 1
- //lv_obj_set_event_cb_mks(buttonSet, event_handler,ID_SET,"bmp_set.bin",0);
- //lv_imgbtn_set_src_mks(buttonSet, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_set.bin");
- //lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonTool, event_handler, ID_TOOL, "bmp_tool.bin", 0);
- //lv_imgbtn_set_src_mks(buttonTool, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_tool.bin");
- lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonTool, event_handler, ID_TOOL, NULL, 0);
+ lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_REL, "F:/bmp_tool.bin");
+ lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_PR, "F:/bmp_tool.bin");
lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
@@ -266,56 +248,37 @@ void lv_draw_ready_print(void) {
}
else {
- //lv_obj_t * title = lv_label_create(scr, NULL);
- //lv_obj_set_style(title, &tft_style_label_rel);
- //lv_obj_set_pos(title,TITLE_XPOS,TITLE_YPOS);
- //lv_label_set_text(title, creat_title_text());
+ // Create an Image button
+ buttonTool = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonTool, 20, 90);
+ lv_obj_set_event_cb_mks(buttonTool, event_handler, ID_TOOL, NULL, 0);
+ lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_REL, "F:/bmp_tool.bin");
+ lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_PR, "F:/bmp_tool.bin");
+ lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_obj_t *label_tool = lv_label_create(buttonTool, NULL);
+ lv_btn_set_layout(buttonTool, LV_LAYOUT_OFF);
- /*Create an Image button*/
- buttonPrint = lv_imgbtn_create(scr, NULL);
- buttonTool = lv_imgbtn_create(scr, NULL);
- buttonSet = lv_imgbtn_create(scr, NULL);
+ buttonSet = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonSet, 180, 90);
+ lv_obj_set_event_cb_mks(buttonSet, event_handler, ID_SET, NULL, 0);
+ lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_REL, "F:/bmp_set.bin");
+ lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_PR, "F:/bmp_set.bin");
+ lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_obj_t *label_set = lv_label_create(buttonSet, NULL);
+ lv_btn_set_layout(buttonSet, LV_LAYOUT_OFF);
- lv_obj_set_event_cb_mks(buttonPrint, event_handler, ID_PRINT, "bmp_printing.bin", 0);
- //lv_imgbtn_set_src_mks(buttonPrint, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_printing.bin");
- lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_PR, &bmp_pic);
+ buttonPrint = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonPrint, 340, 90);
+ lv_obj_set_event_cb_mks(buttonPrint, event_handler, ID_PRINT, NULL, 0);
+ lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_REL, "F:/bmp_printing.bin");
+ lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_PR, "F:/bmp_printing.bin");
lv_imgbtn_set_style(buttonPrint, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPrint, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_clear_protect(buttonPrint, LV_PROTECT_FOLLOW);
-
- #if 1
- lv_obj_set_event_cb_mks(buttonSet, event_handler, ID_SET, "bmp_set.bin", 0);
- //lv_imgbtn_set_src_mks(buttonSet, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_set.bin");
- lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonTool, event_handler, ID_TOOL, "bmp_tool.bin", 0);
- //lv_imgbtn_set_src_mks(buttonTool, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_tool.bin");
- lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_REL, &tft_style_label_rel);
- #endif
-
- lv_obj_set_pos(buttonTool, 20, 90);
- lv_obj_set_pos(buttonSet, 180, 90);
- lv_obj_set_pos(buttonPrint, 340, 90);
-
- //lv_obj_set_pos(buttonTool,SIMPLE_FIRST_PAGE_GRAP+1,(TFT_HEIGHT-BTN_Y_PIXEL)/2+2);
- //lv_obj_set_pos(buttonSet,BTN_X_PIXEL+SIMPLE_FIRST_PAGE_GRAP*2+1,(TFT_HEIGHT-BTN_Y_PIXEL)/2+2);
- //lv_obj_set_pos(buttonPrint,BTN_X_PIXEL*2+SIMPLE_FIRST_PAGE_GRAP*3+1,(TFT_HEIGHT-BTN_Y_PIXEL)/2+2);
-
- /*Create a label on the Image button*/
+ lv_obj_t *label_print = lv_label_create(buttonPrint, NULL);
lv_btn_set_layout(buttonPrint, LV_LAYOUT_OFF);
- lv_btn_set_layout(buttonSet, LV_LAYOUT_OFF);
- lv_btn_set_layout(buttonTool, LV_LAYOUT_OFF);
- lv_obj_t * label_print = lv_label_create(buttonPrint, NULL);
- lv_obj_t * label_set = lv_label_create(buttonSet, NULL);
- lv_obj_t * label_tool = lv_label_create(buttonTool, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(label_print, main_menu.print);
lv_obj_align(label_print, buttonPrint, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@@ -323,14 +286,25 @@ void lv_draw_ready_print(void) {
lv_label_set_text(label_set, main_menu.set);
lv_obj_align(label_set, buttonSet, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- //lv_label_set_style(label_tool,LV_BTN_STATE_PR,&tft_style_label_pre);
- //lv_label_set_style(label_tool,LV_BTN_STATE_REL,&tft_style_label_rel);
lv_label_set_text(label_tool, main_menu.tool);
lv_obj_align(label_tool, buttonTool, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable == true) {
+ lv_group_add_obj(g, buttonTool);
+ lv_group_add_obj(g, buttonSet);
+ lv_group_add_obj(g, buttonPrint);
+ }
+ #endif
}
}
-void lv_clear_ready_print() { lv_obj_del(scr); }
+void lv_clear_ready_print() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable == true) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp
index eebb9fcf1c..6c10713d8a 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp
@@ -36,6 +36,7 @@
#include "pic_manager.h"
static lv_obj_t * scr;
+extern lv_group_t* g;
#define ID_S_WIFI 1
#define ID_S_FAN 2
@@ -48,20 +49,17 @@ static lv_obj_t * scr;
#define ID_S_RETURN 9
static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ #if ENABLED(USE_WIFI_FUNCTION)
+ char buf[6] = { 0 };
+ #endif
switch (obj->mks_obj_id) {
- case ID_S_WIFI:
- if (event == LV_EVENT_CLICKED) {
- // nothing to do
- }
- else if (event == LV_EVENT_RELEASED) {
- }
- break;
+
case ID_S_FAN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_set();
lv_draw_fan();
}
break;
@@ -70,7 +68,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_set();
lv_draw_about();
}
break;
@@ -94,7 +92,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_set();
lv_draw_language();
}
break;
@@ -103,7 +101,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_set();
lv_draw_machine_para();
}
break;
@@ -112,7 +110,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_set();
lv_draw_eeprom_settings();
}
break;
@@ -121,11 +119,50 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
- lv_obj_del(scr);
+ lv_clear_set();
lv_draw_ready_print();
}
break;
-
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case ID_S_WIFI:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (gCfgItems.wifi_mode_sel == STA_MODEL) {
+ if (wifi_link_state == WIFI_CONNECTED) {
+ last_disp_state = SET_UI;
+ lv_clear_set();
+ lv_draw_wifi();
+ }
+ else {
+ if (uiCfg.command_send == 1) {
+ buf[0] = 0xA5;
+ buf[1] = 0x07;
+ buf[2] = 0x00;
+ buf[3] = 0x00;
+ buf[4] = 0xFC;
+ raw_send_to_wifi(buf, 5);
+
+ last_disp_state = SET_UI;
+ lv_clear_set();
+ lv_draw_wifi_list();
+ }
+ else {
+ last_disp_state = SET_UI;
+ lv_clear_set();
+ lv_draw_dialog(WIFI_ENABLE_TIPS);
+ }
+ }
+ }
+ else {
+ last_disp_state = SET_UI;
+ lv_clear_set();
+ lv_draw_wifi();
+ }
+ }
+ break;
+ #endif
}
}
@@ -137,6 +174,9 @@ void lv_draw_set(void) {
#endif
lv_obj_t *buttonMachinePara;
lv_obj_t *buttonEepromSet;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_obj_t *buttonWifi;
+ #endif
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != SET_UI) {
disp_state_stack._disp_index++;
@@ -159,79 +199,81 @@ void lv_draw_set(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
- /*Create an Image button*/
- //buttonWifi = lv_imgbtn_create(scr, NULL);
- buttonFan = lv_imgbtn_create(scr, NULL);
- buttonAbout = lv_imgbtn_create(scr, NULL);
- //buttonContinue = lv_imgbtn_create(scr, NULL);
- buMotorOff = lv_imgbtn_create(scr, NULL);
+ // Create image buttons
+ buttonEepromSet = lv_imgbtn_create(scr, NULL);
+ //buttonWifi = lv_imgbtn_create(scr, NULL);
+ buttonFan = lv_imgbtn_create(scr, NULL);
+ buttonAbout = lv_imgbtn_create(scr, NULL);
+ //buttonContinue = lv_imgbtn_create(scr, NULL);
+ buMotorOff = lv_imgbtn_create(scr, NULL);
+ buttonMachinePara = lv_imgbtn_create(scr, NULL);
#if HAS_LANG_SELECT_SCREEN
- buttonLanguage = lv_imgbtn_create(scr, NULL);
+ buttonLanguage = lv_imgbtn_create(scr, NULL);
+ #endif
+ #if ENABLED(USE_WIFI_FUNCTION)
+ buttonWifi = lv_imgbtn_create(scr, NULL);
#endif
- buttonMachinePara = lv_imgbtn_create(scr, NULL);
- buttonEepromSet = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonEepromSet, event_handler, ID_S_EEPROM_SET, NULL, 0);
+ lv_imgbtn_set_src(buttonEepromSet, LV_BTN_STATE_REL, "F:/bmp_eeprom_settings.bin");
+ lv_imgbtn_set_src(buttonEepromSet, LV_BTN_STATE_PR, "F:/bmp_eeprom_settings.bin");
+ lv_imgbtn_set_style(buttonEepromSet, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonEepromSet, LV_BTN_STATE_REL, &tft_style_label_rel);
- //lv_obj_set_event_cb_mks(buttonWifi, event_handler,ID_S_WIFI,"bmp_Wifi.bin",0);
- //lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_REL, &tft_style_label_rel);
- //lv_obj_clear_protect(buttonWifi, LV_PROTECT_FOLLOW);
#if 1
- lv_obj_set_event_cb_mks(buttonFan, event_handler, ID_S_FAN, "bmp_fan.bin", 0);
- lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonFan, event_handler, ID_S_FAN, NULL, 0);
+ lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_REL, "F:/bmp_fan.bin");
+ lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_PR, "F:/bmp_fan.bin");
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonAbout, event_handler, ID_S_ABOUT, "bmp_about.bin", 0);
- lv_imgbtn_set_src(buttonAbout, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonAbout, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonAbout, event_handler, ID_S_ABOUT, NULL, 0);
+ lv_imgbtn_set_src(buttonAbout, LV_BTN_STATE_REL, "F:/bmp_about.bin");
+ lv_imgbtn_set_src(buttonAbout, LV_BTN_STATE_PR, "F:/bmp_about.bin");
lv_imgbtn_set_style(buttonAbout, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonAbout, LV_BTN_STATE_REL, &tft_style_label_rel);
- //lv_obj_set_event_cb_mks(buttonContinue, event_handler,ID_S_CONTINUE,"bmp_Breakpoint.bin",0);
- //lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, NULL, 0);
+
#if HAS_SUICIDE
- lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_Mamual.bin", 0);
+ lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_REL, "F:/bmp_manual_off.bin");
+ lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_PR, "F:/bmp_manual_off.bin");
#else
- lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_function1.bin", 0);
+ lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_REL, "F:/bmp_function1.bin");
+ lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_PR, "F:/bmp_function1.bin");
#endif
- lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_obj_set_event_cb_mks(buttonMachinePara, event_handler, ID_S_MACHINE_PARA, NULL, 0);
+ lv_imgbtn_set_src(buttonMachinePara, LV_BTN_STATE_REL, "F:/bmp_machine_para.bin");
+ lv_imgbtn_set_src(buttonMachinePara, LV_BTN_STATE_PR, "F:/bmp_machine_para.bin");
+ lv_imgbtn_set_style(buttonMachinePara, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonMachinePara, LV_BTN_STATE_REL, &tft_style_label_rel);
+
#if HAS_LANG_SELECT_SCREEN
- lv_obj_set_event_cb_mks(buttonLanguage, event_handler, ID_S_LANGUAGE, "bmp_language.bin", 0);
- lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonLanguage, event_handler, ID_S_LANGUAGE, NULL, 0);
+ lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_REL, "F:/bmp_language.bin");
+ lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_PR, "F:/bmp_language.bin");
lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_REL, &tft_style_label_rel);
#endif
- lv_obj_set_event_cb_mks(buttonMachinePara, event_handler, ID_S_MACHINE_PARA, "bmp_machine_para.bin", 0);
- lv_imgbtn_set_src(buttonMachinePara, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonMachinePara, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonMachinePara, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonMachinePara, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonEepromSet, event_handler, ID_S_EEPROM_SET, "bmp_eeprom_settings.bin", 0);
- lv_imgbtn_set_src(buttonEepromSet, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonEepromSet, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonEepromSet, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonEepromSet, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_S_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_obj_set_event_cb_mks(buttonWifi, event_handler,ID_S_WIFI,NULL,0);
+ lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_REL, "F:/bmp_wifi.bin");
+ lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_PR, "F:/bmp_wifi.bin");
+ lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_REL, &tft_style_label_rel);
+ #endif
+
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_S_RETURN,NULL , 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+
#endif // if 1
/*lv_obj_set_pos(buttonWifi,INTERVAL_V,titleHeight);
@@ -243,45 +285,56 @@ void lv_draw_set(void) {
lv_obj_set_pos(buttonBack,BTN_X_PIXEL*3+INTERVAL_V*4, BTN_Y_PIXEL+INTERVAL_H+titleHeight);*/
//lv_obj_set_pos(buttonWifi,INTERVAL_V,titleHeight);
+ lv_obj_set_pos(buttonEepromSet, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonFan, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonAbout, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
//lv_obj_set_pos(buttonContinue,BTN_X_PIXEL*3+INTERVAL_V*4,titleHeight);
lv_obj_set_pos(buMotorOff, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
+
+ lv_obj_set_pos(buttonMachinePara, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
#if HAS_LANG_SELECT_SCREEN
- lv_obj_set_pos(buttonLanguage, INTERVAL_V, titleHeight);
+ lv_obj_set_pos(buttonLanguage, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
+ #endif
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_obj_set_pos(buttonWifi,BTN_X_PIXEL*2+INTERVAL_V*3,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
#endif
- lv_obj_set_pos(buttonMachinePara, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
- lv_obj_set_pos(buttonEepromSet, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
- /*Create a label on the Image button*/
+ /// Create labels on the buttons
//lv_btn_set_layout(buttonWifi, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonEepromSet, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonFan, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonAbout, LV_LAYOUT_OFF);
//lv_btn_set_layout(buttonContinue, LV_LAYOUT_OFF);
lv_btn_set_layout(buMotorOff, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonMachinePara, LV_LAYOUT_OFF);
#if HAS_LANG_SELECT_SCREEN
lv_btn_set_layout(buttonLanguage, LV_LAYOUT_OFF);
#endif
- lv_btn_set_layout(buttonMachinePara, LV_LAYOUT_OFF);
- lv_btn_set_layout(buttonEepromSet, LV_LAYOUT_OFF);
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_btn_set_layout(buttonWifi, LV_LAYOUT_OFF);
+ #endif
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
- //lv_obj_t * labelWifi= lv_label_create(buttonWifi, NULL);
- lv_obj_t * labelFan = lv_label_create(buttonFan, NULL);
- lv_obj_t * label_About = lv_label_create(buttonAbout, NULL);
- //lv_obj_t * label_Continue = lv_label_create(buttonContinue, NULL);
- lv_obj_t * label_MotorOff = lv_label_create(buMotorOff, NULL);
+ //lv_obj_t *labelWifi= lv_label_create(buttonWifi, NULL);
+ lv_obj_t *label_EepromSet = lv_label_create(buttonEepromSet, NULL);
+ lv_obj_t *labelFan = lv_label_create(buttonFan, NULL);
+ lv_obj_t *label_About = lv_label_create(buttonAbout, NULL);
+ //lv_obj_t *label_Continue = lv_label_create(buttonContinue, NULL);
+ lv_obj_t *label_MotorOff = lv_label_create(buMotorOff, NULL);
+ lv_obj_t *label_MachinePara = lv_label_create(buttonMachinePara, NULL);
#if HAS_LANG_SELECT_SCREEN
- lv_obj_t * label_Language = lv_label_create(buttonLanguage, NULL);
+ lv_obj_t *label_Language = lv_label_create(buttonLanguage, NULL);
#endif
- lv_obj_t * label_MachinePara = lv_label_create(buttonMachinePara, NULL);
- lv_obj_t * label_EepromSet = lv_label_create(buttonEepromSet, NULL);
- lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_obj_t *label_Wifi = lv_label_create(buttonWifi, NULL);
+ #endif
+ lv_obj_t *label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
- //lv_label_set_text(labelWifi, set_menu.wifi);
- //lv_obj_align(labelWifi, buttonWifi, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(label_EepromSet, set_menu.eepromSet);
+ lv_obj_align(label_EepromSet, buttonEepromSet, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelFan, set_menu.fan);
lv_obj_align(labelFan, buttonFan, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@@ -291,28 +344,46 @@ void lv_draw_set(void) {
//lv_label_set_text(label_Continue, set_menu.breakpoint);
//lv_obj_align(label_Continue, buttonContinue, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
- #if HAS_SUICIDE
- lv_label_set_text(label_MotorOff, set_menu.shutdown);
- #else
- lv_label_set_text(label_MotorOff, set_menu.motoroff);
- #endif
+ lv_label_set_text(label_MotorOff, set_menu.TERN(HAS_SUICIDE, shutdown, motoroff));
lv_obj_align(label_MotorOff, buMotorOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ lv_label_set_text(label_MachinePara, set_menu.machine_para);
+ lv_obj_align(label_MachinePara, buttonMachinePara, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+
#if HAS_LANG_SELECT_SCREEN
lv_label_set_text(label_Language, set_menu.language);
lv_obj_align(label_Language, buttonLanguage, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
#endif
- lv_label_set_text(label_MachinePara, set_menu.machine_para);
- lv_obj_align(label_MachinePara, buttonMachinePara, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- lv_label_set_text(label_EepromSet, set_menu.eepromSet);
- lv_obj_align(label_EepromSet, buttonEepromSet, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_label_set_text(label_Wifi, set_menu.wifi);
+ lv_obj_align(label_Wifi, buttonWifi, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
+ #endif
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonEepromSet);
+ lv_group_add_obj(g, buttonFan);
+ lv_group_add_obj(g, buttonAbout);
+ lv_group_add_obj(g, buMotorOff);
+ lv_group_add_obj(g, buttonMachinePara);
+ lv_group_add_obj(g, buttonLanguage);
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_group_add_obj(g, buttonWifi);
+ #endif
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_set() { lv_obj_del(scr); }
+void lv_clear_set() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_step_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_step_settings.cpp
index 434c2f8579..baad23f9ae 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_step_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_step_settings.cpp
@@ -29,6 +29,7 @@
#include "../../../../MarlinCore.h"
#include "../../../../module/planner.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_STEP_RETURN 1
@@ -127,11 +128,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_step_settings(void) {
lv_obj_t *buttonBack = NULL, *label_Back = NULL, *buttonTurnPage = NULL, *labelTurnPage = NULL;
- lv_obj_t *buttonXText = NULL, *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
- lv_obj_t *buttonYText = NULL, *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
- lv_obj_t *buttonZText = NULL, *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
- lv_obj_t *buttonE0Text = NULL, *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
- lv_obj_t *buttonE1Text = NULL, *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
+ lv_obj_t *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != STEPS_UI) {
disp_state_stack._disp_index++;
@@ -152,166 +153,133 @@ void lv_draw_step_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- // LV_IMG_DECLARE(bmp_para_arrow);
- LV_IMG_DECLARE(bmp_para_bank);
-
if (uiCfg.para_ui_page != 1) {
- buttonXText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonXText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonXText, event_handler);
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonXText, LV_LAYOUT_OFF);
- labelXText = lv_label_create(buttonXText, NULL); /*Add a label to the button*/
-
- buttonXValue = lv_imgbtn_create(scr, NULL);
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelXText, machine_menu.X_Steps);
+
+ buttonXValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_STEP_X, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonXValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_STEP_X, NULL, 0);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
labelXValue = lv_label_create(buttonXValue, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonYText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonYText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonYText, event_handler);
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonYText, LV_LAYOUT_OFF);
- labelYText = lv_label_create(buttonYText, NULL); /*Add a label to the button*/
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelYText, machine_menu.Y_Steps);
- buttonYValue = lv_imgbtn_create(scr, NULL);
+ buttonYValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_STEP_Y, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonYValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_STEP_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
labelYValue = lv_label_create(buttonYValue, NULL);
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
- buttonZText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonZText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonZText, event_handler);
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonZText, LV_LAYOUT_OFF);
- labelZText = lv_label_create(buttonZText, NULL); /*Add a label to the button*/
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelZText, machine_menu.Z_Steps);
- buttonZValue = lv_imgbtn_create(scr, NULL);
+ buttonZValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_STEP_Z, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonZValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_STEP_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
labelZValue = lv_label_create(buttonZValue, NULL);
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
- buttonE0Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4); /*Set its position*/
- lv_obj_set_size(buttonE0Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE0Text, event_handler);
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE0Text, LV_LAYOUT_OFF);
- labelE0Text = lv_label_create(buttonE0Text, NULL); /*Add a label to the button*/
+ labelE0Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE0Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelE0Text, machine_menu.E0_Steps);
- buttonE0Value = lv_imgbtn_create(scr, NULL);
+ buttonE0Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE0Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_STEP_E0, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonE0Value, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonE0Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_STEP_E0, NULL, 0);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_PR, &style_para_value);
labelE0Value = lv_label_create(buttonE0Value, NULL);
line4 = lv_line_create(scr, NULL);
lv_ex_line(line4, line_points[3]);
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_STEP_DOWN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_STEP_DOWN, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonXValue);
+ lv_group_add_obj(g, buttonYValue);
+ lv_group_add_obj(g, buttonZValue);
+ lv_group_add_obj(g, buttonE0Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
}
else {
- buttonE1Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE1Text, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonE1Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE1Text, event_handler);
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE1Text, LV_LAYOUT_OFF);
- labelE1Text = lv_label_create(buttonE1Text, NULL); /*Add a label to the button*/
-
- buttonE1Value = lv_imgbtn_create(scr, NULL);
+ labelE1Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE1Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE1Text, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelE1Text, machine_menu.E1_Steps);
+
+ buttonE1Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE1Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_STEP_E1, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonE1Value, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonE1Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_STEP_E1, NULL, 0);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_PR, &style_para_value);
labelE1Value = lv_label_create(buttonE1Value, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_STEP_UP, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_STEP_UP, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonE1Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
}
lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
- lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonTurnPage, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
labelTurnPage = lv_label_create(buttonTurnPage, NULL);
- buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_STEP_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
-
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
- lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_STEP_RETURN, NULL, 0);
label_Back = lv_label_create(buttonBack, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
if (gCfgItems.multiple_language != 0) {
if (uiCfg.para_ui_page != 1) {
- lv_label_set_text(labelXText, machine_menu.X_Steps);
- lv_obj_align(labelXText, buttonXText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelYText, machine_menu.Y_Steps);
- lv_obj_align(labelYText, buttonYText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelZText, machine_menu.Z_Steps);
- lv_obj_align(labelZText, buttonZText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelE0Text, machine_menu.E0_Steps);
- lv_obj_align(labelE0Text, buttonE0Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
lv_label_set_text(labelTurnPage, machine_menu.next);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -336,9 +304,6 @@ void lv_draw_step_settings(void) {
lv_obj_align(labelE0Value, buttonE0Value, LV_ALIGN_CENTER, 0, 0);
}
else {
- lv_label_set_text(labelE1Text, machine_menu.E1_Steps);
- lv_obj_align(labelE1Text, buttonE1Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
lv_label_set_text(labelTurnPage, machine_menu.previous);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -353,6 +318,11 @@ void lv_draw_step_settings(void) {
}
}
-void lv_clear_step_settings() { lv_obj_del(scr); }
+void lv_clear_step_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_current_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_current_settings.cpp
index 24650ee930..10aa7badff 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_current_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_current_settings.cpp
@@ -31,6 +31,7 @@
#include "../../../../module/stepper/indirection.h"
#include "../../../../feature/tmc_util.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_TMC_CURRENT_RETURN 1
@@ -54,94 +55,105 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
draw_return_ui();
}
break;
- case ID_TMC_CURRENT_X:
+ #if AXIS_IS_TMC(X)
+ case ID_TMC_CURRENT_X:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = Xcurrent;
+ lv_clear_tmc_current_settings();
+ lv_draw_number_key();
+ }
+ break;
+ #endif
+
+ #if AXIS_IS_TMC(Y)
+ case ID_TMC_CURRENT_Y:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
- value = Xcurrent;
+ value = Ycurrent;
lv_clear_tmc_current_settings();
lv_draw_number_key();
}
break;
- case ID_TMC_CURRENT_Y:
+ #endif
+
+ #if AXIS_IS_TMC(Z)
+ case ID_TMC_CURRENT_Z:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
- value = Ycurrent;
+ value = Zcurrent;
lv_clear_tmc_current_settings();
lv_draw_number_key();
}
break;
- case ID_TMC_CURRENT_Z:
+ #endif
+
+ #if AXIS_IS_TMC(E0)
+ case ID_TMC_CURRENT_E0:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = E0current;
+ lv_clear_tmc_current_settings();
+ lv_draw_number_key();
+ }
+ break;
+ #endif
+
+ #if AXIS_IS_TMC(E1)
+ case ID_TMC_CURRENT_E1:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ value = E1current;
+ lv_clear_tmc_current_settings();
+ lv_draw_number_key();
+ }
+ break;
+ #endif
+ case ID_TMC_CURRENT_UP:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
- value = Zcurrent;
+ uiCfg.para_ui_page = 0;
lv_clear_tmc_current_settings();
- lv_draw_number_key();
+ lv_draw_tmc_current_settings();
}
break;
- case ID_TMC_CURRENT_E0:
+ case ID_TMC_CURRENT_DOWN:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
- value = E0current;
+ uiCfg.para_ui_page = 1;
lv_clear_tmc_current_settings();
- lv_draw_number_key();
+ lv_draw_tmc_current_settings();
}
break;
- #if AXIS_IS_TMC(E1)
- case ID_TMC_CURRENT_E1:
- if (event == LV_EVENT_CLICKED) {
-
- }
- else if (event == LV_EVENT_RELEASED) {
- value = E1current;
- lv_clear_tmc_current_settings();
- lv_draw_number_key();
- }
- break;
-
- case ID_TMC_CURRENT_UP:
- if (event == LV_EVENT_CLICKED) {
-
- }
- else if (event == LV_EVENT_RELEASED) {
- uiCfg.para_ui_page = 0;
- lv_clear_tmc_current_settings();
- lv_draw_tmc_current_settings();
- }
- break;
- case ID_TMC_CURRENT_DOWN:
- if (event == LV_EVENT_CLICKED) {
-
- }
- else if (event == LV_EVENT_RELEASED) {
- uiCfg.para_ui_page = 1;
- lv_clear_tmc_current_settings();
- lv_draw_tmc_current_settings();
- }
- break;
- #endif
}
}
void lv_draw_tmc_current_settings(void) {
lv_obj_t *buttonBack = NULL, *label_Back = NULL;
- lv_obj_t *buttonXText = NULL, *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
- lv_obj_t *buttonYText = NULL, *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
- lv_obj_t *buttonZText = NULL, *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
- lv_obj_t *buttonE0Text = NULL, *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
+ lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+ lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+ lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+ lv_obj_t *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
- #if AXIS_IS_TMC(E1)
+ //#if AXIS_IS_TMC(E1)
lv_obj_t *buttonTurnPage = NULL, *labelTurnPage = NULL;
- lv_obj_t *buttonE1Text = NULL, *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
- #endif
+ lv_obj_t *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
+ //#endif
float milliamps;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != TMC_CURRENT_UI) {
@@ -163,217 +175,201 @@ void lv_draw_tmc_current_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- // LV_IMG_DECLARE(bmp_para_arrow);
- LV_IMG_DECLARE(bmp_para_bank);
-
if (uiCfg.para_ui_page != 1) {
- buttonXText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonXText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonXText, event_handler);
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonXText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonXText, LV_LAYOUT_OFF);
- labelXText = lv_label_create(buttonXText, NULL); /*Add a label to the button*/
-
- buttonXValue = lv_imgbtn_create(scr, NULL);
+ labelXText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelXText, &tft_style_label_rel);
+ lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelXText, machine_menu.X_Current);
+
+ buttonXValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_TMC_CURRENT_X, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonXValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_TMC_CURRENT_X, NULL, 0);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
labelXValue = lv_label_create(buttonXValue, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonYText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2); /*Set its position*/
- lv_obj_set_size(buttonYText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonYText, event_handler);
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonYText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonYText, LV_LAYOUT_OFF);
- labelYText = lv_label_create(buttonYText, NULL); /*Add a label to the button*/
+ labelYText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelYText, &tft_style_label_rel);
+ lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+ lv_label_set_text(labelYText, machine_menu.Y_Current);
- buttonYValue = lv_imgbtn_create(scr, NULL);
+ buttonYValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_TMC_CURRENT_Y, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonYValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_TMC_CURRENT_Y, NULL, 0);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
labelYValue = lv_label_create(buttonYValue, NULL);
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
- buttonZText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3); /*Set its position*/
- lv_obj_set_size(buttonZText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonZText, event_handler);
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonZText, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonZText, LV_LAYOUT_OFF);
- labelZText = lv_label_create(buttonZText, NULL); /*Add a label to the button*/
+ labelZText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelZText, &tft_style_label_rel);
+ lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+ lv_label_set_text(labelZText, machine_menu.Z_Current);
- buttonZValue = lv_imgbtn_create(scr, NULL);
+ buttonZValue = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_TMC_CURRENT_Z, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonZValue, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_TMC_CURRENT_Z, NULL, 0);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
labelZValue = lv_label_create(buttonZValue, NULL);
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
- buttonE0Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4); /*Set its position*/
- lv_obj_set_size(buttonE0Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE0Text, event_handler);
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE0Text, LV_LAYOUT_OFF);
- labelE0Text = lv_label_create(buttonE0Text, NULL); /*Add a label to the button*/
+ labelE0Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE0Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelE0Text, machine_menu.E0_Current);
- buttonE0Value = lv_imgbtn_create(scr, NULL);
+ buttonE0Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE0Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_TMC_CURRENT_E0, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonE0Value, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonE0Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_TMC_CURRENT_E0, NULL, 0);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_PR, &style_para_value);
labelE0Value = lv_label_create(buttonE0Value, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonXValue);
+ lv_group_add_obj(g, buttonYValue);
+ lv_group_add_obj(g, buttonZValue);
+ lv_group_add_obj(g, buttonE0Value);
+ }
+ #endif
+
line4 = lv_line_create(scr, NULL);
lv_ex_line(line4, line_points[3]);
- #if AXIS_IS_TMC(E1)
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_CURRENT_DOWN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
- #endif
+ //#if AXIS_IS_TMC(E1)
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_CURRENT_DOWN, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonTurnPage);
+ #endif
+ //#endif
}
else {
- #if AXIS_IS_TMC(E1)
- buttonE1Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
- lv_obj_set_pos(buttonE1Text, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
- lv_obj_set_size(buttonE1Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
- lv_obj_set_event_cb(buttonE1Text, event_handler);
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
- lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
- lv_btn_set_layout(buttonE1Text, LV_LAYOUT_OFF);
- labelE1Text = lv_label_create(buttonE1Text, NULL); /*Add a label to the button*/
-
- buttonE1Value = lv_imgbtn_create(scr, NULL);
+ //#if AXIS_IS_TMC(E1)
+ labelE1Text = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelE1Text, &tft_style_label_rel);
+ lv_obj_set_pos(labelE1Text, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelE1Text, machine_menu.E1_Current);
+
+ buttonE1Value = lv_btn_create(scr, NULL);
lv_obj_set_pos(buttonE1Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
- lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_TMC_CURRENT_E1, "bmp_value_blank.bin", 0);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_REL, &bmp_para_bank);
- lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_PR, &bmp_para_bank);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_PR, &style_para_value_pre);
- lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_REL, &style_para_value_rel);
- lv_btn_set_layout(buttonE1Value, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonE1Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_TMC_CURRENT_E1, NULL, 0);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_PR, &style_para_value);
labelE1Value = lv_label_create(buttonE1Value, NULL);
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
- buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_CURRENT_UP, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
- #endif
+ buttonTurnPage = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_CURRENT_UP, NULL, 0);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonE1Value);
+ lv_group_add_obj(g, buttonTurnPage);
+ }
+ #endif
+ //#endif
}
- #if AXIS_IS_TMC(E1)
+ //#if AXIS_IS_TMC(E1)
lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
- lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonTurnPage, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
labelTurnPage = lv_label_create(buttonTurnPage, NULL);
- #endif
+ //#endif
- buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_TMC_CURRENT_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ buttonBack = lv_btn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_TMC_CURRENT_RETURN, NULL, 0);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+ lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
- lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
if (uiCfg.para_ui_page != 1) {
- lv_label_set_text(labelXText, machine_menu.X_Current);
- lv_obj_align(labelXText, buttonXText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelYText, machine_menu.Y_Current);
- lv_obj_align(labelYText, buttonYText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelZText, machine_menu.Z_Current);
- lv_obj_align(labelZText, buttonZText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_label_set_text(labelE0Text, machine_menu.E0_Current);
- lv_obj_align(labelE0Text, buttonE0Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
- #if AXIS_IS_TMC(E1)
+ //#if AXIS_IS_TMC(E1)
lv_label_set_text(labelTurnPage, machine_menu.next);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
- #endif
+ //#endif
#if AXIS_IS_TMC(X)
milliamps = stepperX.getMilliamps();
- ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
- lv_label_set_text(labelXValue, public_buf_l);
- lv_obj_align(labelXValue, buttonXValue, LV_ALIGN_CENTER, 0, 0);
+ #else
+ milliamps = -1;
#endif
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
+ lv_label_set_text(labelXValue, public_buf_l);
+ lv_obj_align(labelXValue, buttonXValue, LV_ALIGN_CENTER, 0, 0);
+
#if AXIS_IS_TMC(Y)
milliamps = stepperY.getMilliamps();
- ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
- lv_label_set_text(labelYValue, public_buf_l);
- lv_obj_align(labelYValue, buttonYValue, LV_ALIGN_CENTER, 0, 0);
+ #else
+ milliamps = -1;
#endif
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
+ lv_label_set_text(labelYValue, public_buf_l);
+ lv_obj_align(labelYValue, buttonYValue, LV_ALIGN_CENTER, 0, 0);
+
#if AXIS_IS_TMC(Z)
milliamps = stepperZ.getMilliamps();
- ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
- lv_label_set_text(labelZValue, public_buf_l);
- lv_obj_align(labelZValue, buttonZValue, LV_ALIGN_CENTER, 0, 0);
+ #else
+ milliamps = -1;
#endif
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
+ lv_label_set_text(labelZValue, public_buf_l);
+ lv_obj_align(labelZValue, buttonZValue, LV_ALIGN_CENTER, 0, 0);
+
#if AXIS_IS_TMC(E0)
milliamps = stepperE0.getMilliamps();
- ZERO(public_buf_l);
- sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
- lv_label_set_text(labelE0Value, public_buf_l);
- lv_obj_align(labelE0Value, buttonE0Value, LV_ALIGN_CENTER, 0, 0);
+ #else
+ milliamps = -1;
#endif
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
+ lv_label_set_text(labelE0Value, public_buf_l);
+ lv_obj_align(labelE0Value, buttonE0Value, LV_ALIGN_CENTER, 0, 0);
}
else {
- #if AXIS_IS_TMC(E1)
- lv_label_set_text(labelE1Text, machine_menu.E1_Current);
- lv_obj_align(labelE1Text, buttonE1Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
+ //#if AXIS_IS_TMC(E1)
lv_label_set_text(labelTurnPage, machine_menu.previous);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
-
- milliamps = stepperE1.getMilliamps();
+ #if AXIS_IS_TMC(E1)
+ milliamps = stepperE1.getMilliamps();
+ #else
+ milliamps = -1;
+ #endif
ZERO(public_buf_l);
sprintf_P(public_buf_l, PSTR("%.1f"), milliamps);
lv_label_set_text(labelE1Value, public_buf_l);
lv_obj_align(labelE1Value, buttonE1Value, LV_ALIGN_CENTER, 0, 0);
- #endif
+ //#endif
}
lv_label_set_text(label_Back, common_menu.text_back);
@@ -381,6 +377,11 @@ void lv_draw_tmc_current_settings(void) {
}
}
-void lv_clear_tmc_current_settings() { lv_obj_del(scr); }
+void lv_clear_tmc_current_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI && HAS_TRINAMIC_CONFIG
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_step_mode_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_step_mode_settings.cpp
index b0d40fde28..3e014a781c 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_step_mode_settings.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_tmc_step_mode_settings.cpp
@@ -33,6 +33,7 @@
#include "../../../../gcode/gcode.h"
#include "../../../../module/planner.h"
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_TMC_MODE_RETURN 1
@@ -47,9 +48,9 @@ static lv_obj_t * scr;
static lv_obj_t *labelXState = NULL, *labelYState = NULL, *labelZState = NULL, *labelE0State = NULL;
static lv_obj_t *buttonXState = NULL, *buttonYState = NULL, *buttonZState = NULL, *buttonE0State = NULL;
-#if AXIS_HAS_STEALTHCHOP(E1)
+//#if AXIS_HAS_STEALTHCHOP(E1)
static lv_obj_t *labelE1State = NULL, *buttonE1State = NULL;
-#endif
+//#endif
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
@@ -63,136 +64,158 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
draw_return_ui();
}
break;
- case ID_TMC_MODE_X:
- if (event == LV_EVENT_CLICKED) {
- }
- else if (event == LV_EVENT_RELEASED) {
- if (stepperX.stored.stealthChop_enabled == true) {
- stepperX.stored.stealthChop_enabled = false;
- stepperX.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonXState, event_handler, ID_TMC_MODE_X, "bmp_disable.bin", 0);
- lv_label_set_text(labelXState, machine_menu.disable);
- //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
- // gcode.process_subcommands_now_P(PSTR("M500"));
- }
- else {
- stepperX.stored.stealthChop_enabled = true;
- stepperX.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonXState, event_handler, ID_TMC_MODE_X, "bmp_enable.bin", 0);
- lv_label_set_text(labelXState, machine_menu.enable);
- // gcode.process_subcommands_now_P(PSTR("M500"));
- }
- gcode.process_subcommands_now_P(PSTR("M500"));
- }
- break;
- case ID_TMC_MODE_Y:
- if (event == LV_EVENT_CLICKED) {
+ #if AXIS_HAS_STEALTHCHOP(X)
+ case ID_TMC_MODE_X:
+ if (event == LV_EVENT_CLICKED) {
- }
- else if (event == LV_EVENT_RELEASED) {
- if (stepperY.stored.stealthChop_enabled == true) {
- stepperY.stored.stealthChop_enabled = false;
- stepperY.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonYState, event_handler, ID_TMC_MODE_Y, "bmp_disable.bin", 0);
- lv_label_set_text(labelYState, machine_menu.disable);
- //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
}
- else {
- stepperY.stored.stealthChop_enabled = true;
- stepperY.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonYState, event_handler, ID_TMC_MODE_Y, "bmp_enable.bin", 0);
- lv_label_set_text(labelYState, machine_menu.enable);
+ else if (event == LV_EVENT_RELEASED) {
+ if (stepperX.stored.stealthChop_enabled) {
+ stepperX.stored.stealthChop_enabled = false;
+ stepperX.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ lv_label_set_text(labelXState, machine_menu.disable);
+ //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
+ // gcode.process_subcommands_now_P(PSTR("M500"));
+ }
+ else {
+ stepperX.stored.stealthChop_enabled = true;
+ stepperX.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ lv_label_set_text(labelXState, machine_menu.enable);
+ // gcode.process_subcommands_now_P(PSTR("M500"));
+ }
+ gcode.process_subcommands_now_P(PSTR("M500"));
}
- gcode.process_subcommands_now_P(PSTR("M500"));
- }
- break;
- case ID_TMC_MODE_Z:
- if (event == LV_EVENT_CLICKED) {
+ break;
+ #endif // if AXIS_HAS_STEALTHCHOP(X)
- }
- else if (event == LV_EVENT_RELEASED) {
- if (stepperZ.stored.stealthChop_enabled == true) {
- stepperZ.stored.stealthChop_enabled = false;
- stepperZ.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonZState, event_handler, ID_TMC_MODE_Z, "bmp_disable.bin", 0);
- lv_label_set_text(labelZState, machine_menu.disable);
- //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
- }
- else {
- stepperZ.stored.stealthChop_enabled = true;
- stepperZ.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonZState, event_handler, ID_TMC_MODE_Z, "bmp_enable.bin", 0);
- lv_label_set_text(labelZState, machine_menu.enable);
- }
- gcode.process_subcommands_now_P(PSTR("M500"));
- }
- break;
- case ID_TMC_MODE_E0:
- if (event == LV_EVENT_CLICKED) {
+ #if AXIS_HAS_STEALTHCHOP(Y)
+ case ID_TMC_MODE_Y:
+ if (event == LV_EVENT_CLICKED) {
- }
- else if (event == LV_EVENT_RELEASED) {
- if (stepperE0.stored.stealthChop_enabled == true) {
- stepperE0.stored.stealthChop_enabled = false;
- stepperE0.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonE0State, event_handler, ID_TMC_MODE_E0, "bmp_disable.bin", 0);
- lv_label_set_text(labelE0State, machine_menu.disable);
- //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
}
- else {
- stepperE0.stored.stealthChop_enabled = true;
- stepperE0.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonE0State, event_handler, ID_TMC_MODE_E0, "bmp_enable.bin", 0);
- lv_label_set_text(labelE0State, machine_menu.enable);
+ else if (event == LV_EVENT_RELEASED) {
+ if (stepperY.stored.stealthChop_enabled) {
+ stepperY.stored.stealthChop_enabled = false;
+ stepperY.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ lv_label_set_text(labelYState, machine_menu.disable);
+ //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
+ }
+ else {
+ stepperY.stored.stealthChop_enabled = true;
+ stepperY.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ lv_label_set_text(labelYState, machine_menu.enable);
+ }
+ gcode.process_subcommands_now_P(PSTR("M500"));
}
- gcode.process_subcommands_now_P(PSTR("M500"));
- }
- break;
- #if AXIS_HAS_STEALTHCHOP(E1)
- case ID_TMC_MODE_E1:
- if (event == LV_EVENT_CLICKED) {
+ break;
+ #endif // if AXIS_HAS_STEALTHCHOP(Y)
+ #if AXIS_HAS_STEALTHCHOP(Z)
+ case ID_TMC_MODE_Z:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (stepperZ.stored.stealthChop_enabled) {
+ stepperZ.stored.stealthChop_enabled = false;
+ stepperZ.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ lv_label_set_text(labelZState, machine_menu.disable);
+ //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
}
- else if (event == LV_EVENT_RELEASED) {
- if (stepperE1.stored.stealthChop_enabled == true) {
- stepperE1.stored.stealthChop_enabled = false;
- stepperE1.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonE1State, event_handler, ID_TMC_MODE_E1, "bmp_disable.bin", 0);
- lv_label_set_text(labelE1State, machine_menu.disable);
- //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
- }
- else {
- stepperE1.stored.stealthChop_enabled = true;
- stepperE1.refresh_stepping_mode();
- lv_obj_set_event_cb_mks(buttonE1State, event_handler, ID_TMC_MODE_E1, "bmp_enable.bin", 0);
- lv_label_set_text(labelE1State, machine_menu.enable);
- }
- gcode.process_subcommands_now_P(PSTR("M500"));
+ else {
+ stepperZ.stored.stealthChop_enabled = true;
+ stepperZ.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ lv_label_set_text(labelZState, machine_menu.enable);
}
- break;
+ gcode.process_subcommands_now_P(PSTR("M500"));
+ }
+ break;
+ #endif // if AXIS_HAS_STEALTHCHOP(Z)
- case ID_TMC_MODE_UP:
- if (event == LV_EVENT_CLICKED) {
+ #if AXIS_HAS_STEALTHCHOP(E0)
+ case ID_TMC_MODE_E0:
+ if (event == LV_EVENT_CLICKED) {
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (stepperE0.stored.stealthChop_enabled) {
+ stepperE0.stored.stealthChop_enabled = false;
+ stepperE0.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ lv_label_set_text(labelE0State, machine_menu.disable);
+ //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
}
- else if (event == LV_EVENT_RELEASED) {
- uiCfg.para_ui_page = 0;
- lv_clear_tmc_step_mode_settings();
- lv_draw_tmc_step_mode_settings();
+ else {
+ stepperE0.stored.stealthChop_enabled = true;
+ stepperE0.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ lv_label_set_text(labelE0State, machine_menu.enable);
}
- break;
- case ID_TMC_MODE_DOWN:
- if (event == LV_EVENT_CLICKED) {
+ gcode.process_subcommands_now_P(PSTR("M500"));
+ }
+ break;
+ #endif // if AXIS_HAS_STEALTHCHOP(E0)
+
+ #if AXIS_HAS_STEALTHCHOP(E1)
+ case ID_TMC_MODE_E1:
+ if (event == LV_EVENT_CLICKED) {
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (stepperE1.stored.stealthChop_enabled) {
+ stepperE1.stored.stealthChop_enabled = false;
+ stepperE1.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ lv_label_set_text(labelE1State, machine_menu.disable);
+ //lv_obj_align(labelXState, buttonE1State, LV_ALIGN_IN_LEFT_MID,0, 0);
}
- else if (event == LV_EVENT_RELEASED) {
- uiCfg.para_ui_page = 1;
- lv_clear_tmc_step_mode_settings();
- lv_draw_tmc_step_mode_settings();
+ else {
+ stepperE1.stored.stealthChop_enabled = true;
+ stepperE1.refresh_stepping_mode();
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ lv_label_set_text(labelE1State, machine_menu.enable);
}
- break;
- #endif // if AXIS_HAS_STEALTHCHOP(E1)
+ gcode.process_subcommands_now_P(PSTR("M500"));
+ }
+ break;
+ #endif // if AXIS_HAS_STEALTHCHOP(E1)
+ case ID_TMC_MODE_UP:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 0;
+ lv_clear_tmc_step_mode_settings();
+ lv_draw_tmc_step_mode_settings();
+ }
+ break;
+ case ID_TMC_MODE_DOWN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.para_ui_page = 1;
+ lv_clear_tmc_step_mode_settings();
+ lv_draw_tmc_step_mode_settings();
+ }
+ break;
}
}
@@ -204,10 +227,10 @@ void lv_draw_tmc_step_mode_settings(void) {
lv_obj_t *buttonE0Text = NULL, *labelE0Text = NULL;
lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
- #if AXIS_HAS_STEALTHCHOP(E1)
+ //#if AXIS_HAS_STEALTHCHOP(E1)
lv_obj_t *buttonTurnPage = NULL, *labelTurnPage = NULL;
lv_obj_t *buttonE1Text = NULL, *labelE1Text = NULL;
- #endif
+ //#endif
labelXState = NULL;
@@ -218,10 +241,10 @@ void lv_draw_tmc_step_mode_settings(void) {
buttonZState = NULL;
labelE0State = NULL;
buttonE0State = NULL;
- #if AXIS_HAS_STEALTHCHOP(E1)
+ //#if AXIS_HAS_STEALTHCHOP(E1)
labelE1State = NULL;
buttonE1State = NULL;
- #endif
+ //#endif
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != TMC_MODE_UI) {
disp_state_stack._disp_index++;
@@ -242,10 +265,6 @@ void lv_draw_tmc_step_mode_settings(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_para_back);
- LV_IMG_DECLARE(bmp_para_state);
- // LV_IMG_DECLARE(bmp_para_bank);
-
if (uiCfg.para_ui_page != 1) {
buttonXText = lv_btn_create(scr, NULL); /*Add a button the current screen*/
lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
@@ -258,16 +277,28 @@ void lv_draw_tmc_step_mode_settings(void) {
buttonXState = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonXState, PARA_UI_STATE_POS_X, PARA_UI_POS_Y + PARA_UI_STATE_V);
- if (stepperX.get_stealthChop_status())
- lv_obj_set_event_cb_mks(buttonXState, event_handler, ID_TMC_MODE_X, "bmp_enable.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonXState, event_handler, ID_TMC_MODE_X, "bmp_disable.bin", 0);
- lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_REL, &bmp_para_state);
- lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_PR, &bmp_para_state);
+ #if AXIS_HAS_STEALTHCHOP(X)
+ if (stepperX.get_stealthChop_status()) {
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ }
+ #else
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonXState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ #endif
+ lv_obj_set_event_cb_mks(buttonXState, event_handler, ID_TMC_MODE_X, NULL, 0);
+
lv_imgbtn_set_style(buttonXState, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonXState, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonXState, LV_LAYOUT_OFF);
labelXState = lv_label_create(buttonXState, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonXState);
+ #endif
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
@@ -283,16 +314,28 @@ void lv_draw_tmc_step_mode_settings(void) {
buttonYState = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonYState, PARA_UI_STATE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_STATE_V);
- if (stepperY.get_stealthChop_status())
- lv_obj_set_event_cb_mks(buttonYState, event_handler, ID_TMC_MODE_Y, "bmp_enable.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonYState, event_handler, ID_TMC_MODE_Y, "bmp_disable.bin", 0);
- lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_REL, &bmp_para_state);
- lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_PR, &bmp_para_state);
+ #if AXIS_HAS_STEALTHCHOP(Y)
+ if (stepperY.get_stealthChop_status()) {
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ }
+ #else
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonYState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ #endif
+ lv_obj_set_event_cb_mks(buttonYState, event_handler, ID_TMC_MODE_Y, NULL, 0);
+
lv_imgbtn_set_style(buttonYState, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonYState, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonYState, LV_LAYOUT_OFF);
labelYState = lv_label_create(buttonYState, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonYState);
+ #endif
line2 = lv_line_create(scr, NULL);
lv_ex_line(line2, line_points[1]);
@@ -308,16 +351,27 @@ void lv_draw_tmc_step_mode_settings(void) {
buttonZState = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonZState, PARA_UI_STATE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_STATE_V);
- if (stepperZ.get_stealthChop_status())
- lv_obj_set_event_cb_mks(buttonZState, event_handler, ID_TMC_MODE_Z, "bmp_enable.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonZState, event_handler, ID_TMC_MODE_Z, "bmp_disable.bin", 0);
- lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_REL, &bmp_para_state);
- lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_PR, &bmp_para_state);
+ #if AXIS_HAS_STEALTHCHOP(Z)
+ if (stepperZ.get_stealthChop_status()) {
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ }
+ #else
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonZState, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ #endif
+ lv_obj_set_event_cb_mks(buttonZState, event_handler, ID_TMC_MODE_Z, NULL, 0);
lv_imgbtn_set_style(buttonZState, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonZState, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonZState, LV_LAYOUT_OFF);
labelZState = lv_label_create(buttonZState, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonZState);
+ #endif
line3 = lv_line_create(scr, NULL);
lv_ex_line(line3, line_points[2]);
@@ -333,31 +387,48 @@ void lv_draw_tmc_step_mode_settings(void) {
buttonE0State = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonE0State, PARA_UI_STATE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_STATE_V);
- if (stepperE0.get_stealthChop_status())
- lv_obj_set_event_cb_mks(buttonE0State, event_handler, ID_TMC_MODE_E0, "bmp_enable.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonE0State, event_handler, ID_TMC_MODE_E0, "bmp_disable.bin", 0);
- lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_REL, &bmp_para_state);
- lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_PR, &bmp_para_state);
+ #if AXIS_HAS_STEALTHCHOP(E0)
+ if (stepperE0.get_stealthChop_status()) {
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ }
+ #else
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonE0State, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ #endif
+
+ lv_obj_set_event_cb_mks(buttonE0State, event_handler, ID_TMC_MODE_E0, NULL, 0);
+
lv_imgbtn_set_style(buttonE0State, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonE0State, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonE0State, LV_LAYOUT_OFF);
labelE0State = lv_label_create(buttonE0State, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonE0State);
+ #endif
+
line4 = lv_line_create(scr, NULL);
lv_ex_line(line4, line_points[3]);
- #if AXIS_HAS_STEALTHCHOP(E1)
+ //#if AXIS_HAS_STEALTHCHOP(E1)
buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_MODE_DOWN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_MODE_DOWN, NULL, 0);
+ lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
- #endif
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonTurnPage);
+ #endif
+ //#endif
}
else {
- #if AXIS_HAS_STEALTHCHOP(E1)
+ //#if AXIS_HAS_STEALTHCHOP(E1)
buttonE1Text = lv_btn_create(scr, NULL); /*Add a button the current screen*/
lv_obj_set_pos(buttonE1Text, PARA_UI_POS_X, PARA_UI_POS_Y); /*Set its position*/
lv_obj_set_size(buttonE1Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y); /*Set its size*/
@@ -369,40 +440,54 @@ void lv_draw_tmc_step_mode_settings(void) {
buttonE1State = lv_imgbtn_create(scr, NULL);
lv_obj_set_pos(buttonE1State, PARA_UI_STATE_POS_X, PARA_UI_POS_Y + PARA_UI_STATE_V);
- if (stepperE1.get_stealthChop_status())
- lv_obj_set_event_cb_mks(buttonE1State, event_handler, ID_TMC_MODE_E1, "bmp_enable.bin", 0);
- else
- lv_obj_set_event_cb_mks(buttonE1State, event_handler, ID_TMC_MODE_E1, "bmp_disable.bin", 0);
- lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_REL, &bmp_para_state);
- lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_PR, &bmp_para_state);
+ #if AXIS_HAS_STEALTHCHOP(E1)
+ if (stepperE1.get_stealthChop_status()) {
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ }
+ #else
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonE1State, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ #endif
+ lv_obj_set_event_cb_mks(buttonE1State, event_handler, ID_TMC_MODE_E1, NULL, 0);
lv_imgbtn_set_style(buttonE1State, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonE1State, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_btn_set_layout(buttonE1State, LV_LAYOUT_OFF);
labelE1State = lv_label_create(buttonE1State, NULL);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonE1State);
+ #endif
line1 = lv_line_create(scr, NULL);
lv_ex_line(line1, line_points[0]);
buttonTurnPage = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_MODE_UP, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_TMC_MODE_UP, NULL, 0);
+ lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
- #endif
+ //#endif
}
- #if AXIS_HAS_STEALTHCHOP(E1)
+ //#if AXIS_HAS_STEALTHCHOP(E1)
lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
labelTurnPage = lv_label_create(buttonTurnPage, NULL);
- #endif
+ //#endif
buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_TMC_MODE_RETURN, "bmp_back70x40.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_TMC_MODE_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
@@ -422,50 +507,68 @@ void lv_draw_tmc_step_mode_settings(void) {
lv_label_set_text(labelE0Text, machine_menu.E0_StepMode);
lv_obj_align(labelE0Text, buttonE0Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
+ #if AXIS_HAS_STEALTHCHOP(X)
if (stepperX.get_stealthChop_status())
lv_label_set_text(labelXState, machine_menu.enable);
else
lv_label_set_text(labelXState, machine_menu.disable);
+ #else
+ lv_label_set_text(labelXState, machine_menu.disable);
+ #endif
lv_obj_align(labelXState, buttonXState, LV_ALIGN_CENTER, 0, 0);
+ #if AXIS_HAS_STEALTHCHOP(Y)
if (stepperY.get_stealthChop_status())
lv_label_set_text(labelYState, machine_menu.enable);
else
lv_label_set_text(labelYState, machine_menu.disable);
+ #else
+ lv_label_set_text(labelYState, machine_menu.disable);
+ #endif
lv_obj_align(labelYState, buttonYState, LV_ALIGN_CENTER, 0, 0);
+ #if AXIS_HAS_STEALTHCHOP(Z)
if (stepperZ.get_stealthChop_status())
lv_label_set_text(labelZState, machine_menu.enable);
else
lv_label_set_text(labelZState, machine_menu.disable);
+ #else
+ lv_label_set_text(labelZState, machine_menu.disable);
+ #endif
lv_obj_align(labelZState, buttonZState, LV_ALIGN_CENTER, 0, 0);
+ #if AXIS_HAS_STEALTHCHOP(E0)
if (stepperE0.get_stealthChop_status())
lv_label_set_text(labelE0State, machine_menu.enable);
else
lv_label_set_text(labelE0State, machine_menu.disable);
+ #else
+ lv_label_set_text(labelE0State, machine_menu.disable);
+ #endif
lv_obj_align(labelE0State, buttonE0State, LV_ALIGN_CENTER, 0, 0);
- #if AXIS_HAS_STEALTHCHOP(E1)
+ //#if AXIS_HAS_STEALTHCHOP(E1)
lv_label_set_text(labelTurnPage, machine_menu.next);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
- #endif
+ //#endif
}
else {
- #if AXIS_HAS_STEALTHCHOP(E1)
+ //#if AXIS_HAS_STEALTHCHOP(E1)
lv_label_set_text(labelE1Text, machine_menu.E1_StepMode);
lv_obj_align(labelE1Text, buttonE1Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
+ #if AXIS_HAS_STEALTHCHOP(E1)
if (stepperE1.get_stealthChop_status())
lv_label_set_text(labelE1State, machine_menu.enable);
else
lv_label_set_text(labelE1State, machine_menu.disable);
+ #else
+ lv_label_set_text(labelE1State, machine_menu.disable);
+ #endif
lv_obj_align(labelE1State, buttonE1State, LV_ALIGN_CENTER, 0, 0);
lv_label_set_text(labelTurnPage, machine_menu.previous);
lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
-
- #endif
+ //#endif
}
lv_label_set_text(label_Back, common_menu.text_back);
@@ -473,6 +576,11 @@ void lv_draw_tmc_step_mode_settings(void) {
}
}
-void lv_clear_tmc_step_mode_settings() { lv_obj_del(scr); }
+void lv_clear_tmc_step_mode_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI && HAS_STEALTHCHOP
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp
index a2d0937e47..3681b1b2d6 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp
@@ -32,8 +32,9 @@
#include "../../../../MarlinCore.h"
#include "../../../../gcode/queue.h"
+#include "../../../../module/temperature.h"
-// static lv_obj_t *buttonMoveZ,*buttonTest,*buttonZ0,*buttonStop,*buttonReturn;
+extern lv_group_t * g;
static lv_obj_t * scr;
#define ID_T_PRE_HEAT 1
@@ -45,6 +46,10 @@ static lv_obj_t * scr;
#define ID_T_MORE 7
#define ID_T_RETURN 8
+#if ENABLED(MKS_TEST)
+ extern uint8_t curent_disp_ui;
+#endif
+
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_T_PRE_HEAT:
@@ -89,8 +94,11 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
- queue.enqueue_one_P(PSTR("G28"));
- queue.enqueue_one_P(PSTR("G29"));
+ //queue.enqueue_one_P(PSTR("G28"));
+ //queue.enqueue_one_P(PSTR("G29"));
+ get_gcode_command(AUTO_LEVELING_COMMAND_ADDR,(uint8_t *)public_buf_m);
+ public_buf_m[sizeof(public_buf_m)-1] = 0;
+ queue.inject_P(PSTR(public_buf_m));
#else
uiCfg.leveling_first_time = 1;
lv_clear_tool();
@@ -98,7 +106,16 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
#endif
}
break;
- case ID_T_FILAMENT: break;
+ case ID_T_FILAMENT:
+ if (event == LV_EVENT_CLICKED) {
+ // nothing to do
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ uiCfg.desireSprayerTempBak = thermalManager.temp_hotend[uiCfg.curSprayerChoose].target;
+ lv_clear_tool();
+ lv_draw_filament_change();
+ }
+ break;
case ID_T_MORE: break;
case ID_T_RETURN:
if (event == LV_EVENT_CLICKED) {
@@ -106,7 +123,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
}
else if (event == LV_EVENT_RELEASED) {
TERN_(MKS_TEST, curent_disp_ui = 1);
- lv_obj_del(scr);
+ lv_clear_tool();
lv_draw_ready_print();
}
break;
@@ -115,6 +132,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_tool(void) {
lv_obj_t *buttonPreHeat, *buttonExtrusion, *buttonMove, *buttonHome, *buttonLevel;
+ lv_obj_t *buttonFilament;
lv_obj_t *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != TOOL_UI) {
@@ -138,75 +156,64 @@ void lv_draw_tool(void) {
lv_refr_now(lv_refr_get_disp_refreshing());
- LV_IMG_DECLARE(bmp_pic);
-
// Create image buttons
buttonPreHeat = lv_imgbtn_create(scr, NULL);
buttonExtrusion = lv_imgbtn_create(scr, NULL);
buttonMove = lv_imgbtn_create(scr, NULL);
buttonHome = lv_imgbtn_create(scr, NULL);
buttonLevel = lv_imgbtn_create(scr, NULL);
- // buttonFilament = lv_imgbtn_create(scr, NULL);
- // buttonMore = lv_imgbtn_create(scr, NULL);
- buttonBack = lv_imgbtn_create(scr, NULL);
+ buttonFilament = lv_imgbtn_create(scr, NULL);
+ //buttonMore = lv_imgbtn_create(scr, NULL);
+ buttonBack = lv_imgbtn_create(scr, NULL);
- lv_obj_set_event_cb_mks(buttonPreHeat, event_handler, ID_T_PRE_HEAT, "bmp_preHeat.bin", 0);
- lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_PR, &bmp_pic);
+ lv_obj_set_event_cb_mks(buttonPreHeat, event_handler, ID_T_PRE_HEAT, NULL, 0);
+ lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_REL, "F:/bmp_preHeat.bin");
+ lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_PR, "F:/bmp_preHeat.bin");
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_PR, &tft_style_label_pre);
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_REL, &tft_style_label_rel);
- lv_obj_clear_protect(buttonPreHeat, LV_PROTECT_FOLLOW);
-
- #if 1
- lv_obj_set_event_cb_mks(buttonExtrusion, event_handler, ID_T_EXTRUCT, "bmp_extruct.bin", 0);
- lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonMove, event_handler, ID_T_MOV, "bmp_mov.bin", 0);
- lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonHome, event_handler, ID_T_HOME, "bmp_zero.bin", 0);
- lv_imgbtn_set_src(buttonHome, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonHome, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonHome, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonHome, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonLevel, event_handler, ID_T_LEVELING, "bmp_leveling.bin", 0);
- lv_imgbtn_set_src(buttonLevel, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonLevel, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonLevel, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonLevel, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- //lv_obj_set_event_cb_mks(buttonFilament, event_handler,ID_T_FILAMENT,"bmp_Filamentchange.bin",0);
- //lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- //lv_obj_set_event_cb_mks(buttonMore, event_handler,ID_T_MORE,"bmp_More.bin",0);
- //lv_imgbtn_set_src(buttonMore, LV_BTN_STATE_REL, &bmp_pic);
- //lv_imgbtn_set_src(buttonMore, LV_BTN_STATE_PR, &bmp_pic);
- //lv_imgbtn_set_style(buttonMore, LV_BTN_STATE_PR, &tft_style_label_pre);
- //lv_imgbtn_set_style(buttonMore, LV_BTN_STATE_REL, &tft_style_label_rel);
-
- lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_T_RETURN, "bmp_return.bin", 0);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
- lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
- lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
- #endif // if 1
+
+ lv_obj_set_event_cb_mks(buttonExtrusion, event_handler, ID_T_EXTRUCT, NULL, 0);
+ lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_REL, "F:/bmp_extruct.bin");
+ lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_PR, "F:/bmp_extruct.bin");
+ lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonMove, event_handler, ID_T_MOV, NULL, 0);
+ lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_REL, "F:/bmp_mov.bin");
+ lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_PR, "F:/bmp_mov.bin");
+ lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonHome, event_handler, ID_T_HOME, NULL, 0);
+ lv_imgbtn_set_src(buttonHome, LV_BTN_STATE_REL, "F:/bmp_zero.bin");
+ lv_imgbtn_set_src(buttonHome, LV_BTN_STATE_PR, "F:/bmp_zero.bin");
+ lv_imgbtn_set_style(buttonHome, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonHome, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonLevel, event_handler, ID_T_LEVELING, NULL, 0);
+ lv_imgbtn_set_src(buttonLevel, LV_BTN_STATE_REL, "F:/bmp_leveling.bin");
+ lv_imgbtn_set_src(buttonLevel, LV_BTN_STATE_PR, "F:/bmp_leveling.bin");
+ lv_imgbtn_set_style(buttonLevel, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonLevel, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonFilament, event_handler,ID_T_FILAMENT,NULL,0);
+ lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_REL, "F:/bmp_filamentchange.bin");
+ lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_PR, "F:/bmp_filamentchange.bin");
+ lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_T_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
lv_obj_set_pos(buttonPreHeat, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonExtrusion, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonMove, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
lv_obj_set_pos(buttonHome, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonLevel, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
- //lv_obj_set_pos(buttonFilament,BTN_X_PIXEL+INTERVAL_V*2,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
+ lv_obj_set_pos(buttonFilament,BTN_X_PIXEL+INTERVAL_V*2,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
//lv_obj_set_pos(buttonMore,BTN_X_PIXEL*2+INTERVAL_V*3, BTN_Y_PIXEL+INTERVAL_H+titleHeight);
lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
@@ -216,18 +223,18 @@ void lv_draw_tool(void) {
lv_btn_set_layout(buttonMove, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHome, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonLevel, LV_LAYOUT_OFF);
- //lv_btn_set_layout(buttonFilament, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonFilament, LV_LAYOUT_OFF);
//lv_btn_set_layout(buttonMore, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
- lv_obj_t * labelPreHeat = lv_label_create(buttonPreHeat, NULL);
- lv_obj_t * labelExtrusion = lv_label_create(buttonExtrusion, NULL);
- lv_obj_t * label_Move = lv_label_create(buttonMove, NULL);
- lv_obj_t * label_Home = lv_label_create(buttonHome, NULL);
- lv_obj_t * label_Level = lv_label_create(buttonLevel, NULL);
- //lv_obj_t * label_Filament = lv_label_create(buttonFilament, NULL);
- //lv_obj_t * label_More = lv_label_create(buttonMore, NULL);
- lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
+ lv_obj_t *labelPreHeat = lv_label_create(buttonPreHeat, NULL);
+ lv_obj_t *labelExtrusion = lv_label_create(buttonExtrusion, NULL);
+ lv_obj_t *label_Move = lv_label_create(buttonMove, NULL);
+ lv_obj_t *label_Home = lv_label_create(buttonHome, NULL);
+ lv_obj_t *label_Level = lv_label_create(buttonLevel, NULL);
+ lv_obj_t *label_Filament = lv_label_create(buttonFilament, NULL);
+ //lv_obj_t *label_More = lv_label_create(buttonMore, NULL);
+ lv_obj_t *label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelPreHeat, tool_menu.preheat);
@@ -242,17 +249,11 @@ void lv_draw_tool(void) {
lv_label_set_text(label_Home, tool_menu.home);
lv_obj_align(label_Home, buttonHome, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- /*
- if (gCfgItems.leveling_mode != 2) {
- lv_label_set_text(label_Level, gCfgItems.leveling_mode == 1 ? tool_menu.autoleveling : tool_menu.leveling);
- lv_obj_align(label_Level, buttonLevel, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- }
- */
lv_label_set_text(label_Level, tool_menu.TERN(AUTO_BED_LEVELING_BILINEAR, autoleveling, leveling));
lv_obj_align(label_Level, buttonLevel, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
- //lv_label_set_text(label_Filament, tool_menu.filament);
- //lv_obj_align(label_Filament, buttonFilament, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
+ lv_label_set_text(label_Filament, tool_menu.filament);
+ lv_obj_align(label_Filament, buttonFilament, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
//lv_label_set_text(label_More, tool_menu.more);
//lv_obj_align(label_More, buttonMore, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@@ -260,8 +261,24 @@ void lv_draw_tool(void) {
lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonPreHeat);
+ lv_group_add_obj(g, buttonExtrusion);
+ lv_group_add_obj(g, buttonMove);
+ lv_group_add_obj(g, buttonHome);
+ lv_group_add_obj(g, buttonLevel);
+ lv_group_add_obj(g, buttonFilament);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
}
-void lv_clear_tool() { lv_obj_del(scr); }
+void lv_clear_tool() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp
index 6bdea3fd21..922f6a2dc7 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp
@@ -55,7 +55,8 @@ DISP_STATE_STACK disp_state_stack;
DISP_STATE disp_state = MAIN_UI;
DISP_STATE last_disp_state;
PRINT_TIME print_time;
-value_state value;
+num_key_value_state value;
+keyboard_value_state keyboard_value;
uint32_t To_pre_view;
uint8_t gcode_preview_over;
@@ -73,6 +74,14 @@ extern uint8_t bmp_public_buf[17 * 1024];
extern void LCD_IO_WriteData(uint16_t RegValue);
+static const char custom_gcode_command[][100] = {
+ "G28\nG29\nM500",
+ "G28",
+ "G28",
+ "G28",
+ "G28"
+};
+
lv_point_t line_points[4][2] = {
{{PARA_UI_POS_X, PARA_UI_POS_Y + PARA_UI_SIZE_Y}, {TFT_WIDTH, PARA_UI_POS_Y + PARA_UI_SIZE_Y}},
{{PARA_UI_POS_X, PARA_UI_POS_Y*2 + PARA_UI_SIZE_Y}, {TFT_WIDTH, PARA_UI_POS_Y*2 + PARA_UI_SIZE_Y}},
@@ -108,22 +117,58 @@ void gCfgItems_init() {
#elif LCD_LANGUAGE == pt
gCfgItems.language = LANG_PORTUGUESE;
#endif
- gCfgItems.leveling_mode = 0;
- gCfgItems.from_flash_pic = 0;
- gCfgItems.curFilesize = 0;
- gCfgItems.finish_power_off = 0;
- gCfgItems.pause_reprint = 0;
- gCfgItems.pausePosX = -1;
- gCfgItems.pausePosY = -1;
- gCfgItems.pausePosZ = 5;
+ gCfgItems.leveling_mode = 0;
+ gCfgItems.from_flash_pic = 0;
+ gCfgItems.curFilesize = 0;
+ gCfgItems.finish_power_off = 0;
+ gCfgItems.pause_reprint = 0;
+ gCfgItems.pausePosX = -1;
+ gCfgItems.pausePosY = -1;
+ gCfgItems.pausePosZ = 5;
+ gCfgItems.levelingPos[0][0] = X_MIN_POS + 30;
+ gCfgItems.levelingPos[0][1] = Y_MIN_POS + 30;
+ gCfgItems.levelingPos[1][0] = X_MAX_POS - 30;
+ gCfgItems.levelingPos[1][1] = Y_MIN_POS + 30;
+ gCfgItems.levelingPos[2][0] = X_MAX_POS - 30;
+ gCfgItems.levelingPos[2][1] = Y_MAX_POS - 30;
+ gCfgItems.levelingPos[3][0] = X_MIN_POS + 30;
+ gCfgItems.levelingPos[3][1] = Y_MAX_POS - 30;
+ gCfgItems.levelingPos[4][0] = X_BED_SIZE / 2;
+ gCfgItems.levelingPos[4][1] = Y_BED_SIZE / 2;
+ gCfgItems.cloud_enable = true;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ gCfgItems.wifi_mode_sel = STA_MODEL;
+ gCfgItems.fileSysType = FILE_SYS_SD;
+ gCfgItems.wifi_type = ESP_WIFI;
+ #endif
+ gCfgItems.filamentchange_load_length = 200;
+ gCfgItems.filamentchange_load_speed = 1000;
+ gCfgItems.filamentchange_unload_length = 200;
+ gCfgItems.filamentchange_unload_speed = 1000;
+ gCfgItems.filament_limit_temper = 200;
+
+ gCfgItems.encoder_enable = true;
+
W25QXX.SPI_FLASH_BufferRead((uint8_t *)&gCfgItems.spi_flash_flag, VAR_INF_ADDR, sizeof(gCfgItems.spi_flash_flag));
- if (gCfgItems.spi_flash_flag == GCFG_FLAG_VALUE) {
+ if (gCfgItems.spi_flash_flag == FLASH_INF_VALID_FLAG) {
W25QXX.SPI_FLASH_BufferRead((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
}
else {
- gCfgItems.spi_flash_flag = GCFG_FLAG_VALUE;
+ gCfgItems.spi_flash_flag = FLASH_INF_VALID_FLAG;
W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
+ //init gcode command
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[0], AUTO_LEVELING_COMMAND_ADDR, 100);
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[1], OTHERS_COMMAND_ADDR_1, 100);
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[2], OTHERS_COMMAND_ADDR_2, 100);
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[3], OTHERS_COMMAND_ADDR_3, 100);
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[4], OTHERS_COMMAND_ADDR_4, 100);
+ }
+
+ const byte rot = TERN0(GRAPHICAL_TFT_ROTATE_180, 0xEE);
+ if (gCfgItems.disp_rotation_180 != rot) {
+ gCfgItems.disp_rotation_180 = rot;
+ update_spi_flash();
}
uiCfg.F[0] = 'N';
@@ -134,11 +179,6 @@ void gCfgItems_init() {
W25QXX.SPI_FLASH_BufferWrite(uiCfg.F,REFLSHE_FLGA_ADD,4);
}
-void gCfg_to_spiFlah() {
- W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
- W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
-}
-
void ui_cfg_init() {
uiCfg.curTempType = 0;
uiCfg.curSprayerChoose = 0;
@@ -150,12 +190,81 @@ void ui_cfg_init() {
uiCfg.move_dist = 1;
uiCfg.moveSpeed = 3000;
uiCfg.stepPrintSpeed = 10;
+ uiCfg.command_send = 0;
+ uiCfg.dialogType = 0;
+ uiCfg.filament_heat_completed_load = 0;
+ uiCfg.filament_rate = 0;
+ uiCfg.filament_loading_completed = 0;
+ uiCfg.filament_unloading_completed = 0;
+ uiCfg.filament_loading_time_flg = 0;
+ uiCfg.filament_loading_time_cnt = 0;
+ uiCfg.filament_unloading_time_flg = 0;
+ uiCfg.filament_unloading_time_cnt = 0;
+
+ #if ENABLED(USE_WIFI_FUNCTION)
+ memset(&wifiPara, 0, sizeof(wifiPara));
+ memset(&ipPara, 0, sizeof(ipPara));
+ strcpy(wifiPara.ap_name, WIFI_AP_NAME);
+ strcpy(wifiPara.keyCode, WIFI_KEY_CODE);
+ //client
+ strcpy(ipPara.ip_addr, IP_ADDR);
+ strcpy(ipPara.mask, IP_MASK);
+ strcpy(ipPara.gate, IP_GATE);
+ strcpy(ipPara.dns, IP_DNS);
+
+ ipPara.dhcp_flag = IP_DHCP_FLAG;
+
+ //AP
+ strcpy(ipPara.dhcpd_ip, AP_IP_ADDR);
+ strcpy(ipPara.dhcpd_mask, AP_IP_MASK);
+ strcpy(ipPara.dhcpd_gate, AP_IP_GATE);
+ strcpy(ipPara.dhcpd_dns, AP_IP_DNS);
+ strcpy(ipPara.start_ip_addr, IP_START_IP);
+ strcpy(ipPara.end_ip_addr, IP_END_IP);
+
+ ipPara.dhcpd_flag = AP_IP_DHCP_FLAG;
+
+ strcpy((char*)uiCfg.cloud_hostUrl, "baizhongyun.cn");
+ uiCfg.cloud_port = 10086;
+ #endif
+
+ uiCfg.filament_loading_time = (uint32_t)((gCfgItems.filamentchange_load_length * 60.0 / gCfgItems.filamentchange_load_speed) + 0.5);
+ uiCfg.filament_unloading_time = (uint32_t)((gCfgItems.filamentchange_unload_length * 60.0 / gCfgItems.filamentchange_unload_speed) + 0.5);
}
void update_spi_flash() {
+ uint8_t command_buf[512];
+
+ W25QXX.init(SPI_QUARTER_SPEED);
+ //read back the gcode command befor erase spi flash
+ W25QXX.SPI_FLASH_BufferRead((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
+ W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
+}
+
+void update_gcode_command(int addr,uint8_t *s) {
+ uint8_t command_buf[512];
+
W25QXX.init(SPI_QUARTER_SPEED);
+ //read back the gcode command befor erase spi flash
+ W25QXX.SPI_FLASH_BufferRead((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
+ switch (addr) {
+ case AUTO_LEVELING_COMMAND_ADDR: memcpy(&command_buf[0*100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_1: memcpy(&command_buf[1*100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_2: memcpy(&command_buf[2*100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_3: memcpy(&command_buf[3*100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_4: memcpy(&command_buf[4*100], s, 100); break;
+ default: break;
+ }
+ W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
+}
+
+void get_gcode_command(int addr,uint8_t *d) {
+ W25QXX.init(SPI_QUARTER_SPEED);
+ W25QXX.SPI_FLASH_BufferRead((uint8_t *)d, addr, 100);
}
lv_style_t tft_style_scr;
@@ -169,6 +278,13 @@ lv_style_t style_num_key_pre;
lv_style_t style_num_key_rel;
lv_style_t style_num_text;
+lv_style_t style_sel_text;
+
+lv_style_t style_para_value;
+lv_style_t style_para_back;
+
+lv_style_t lv_bar_style_indic;
+
void tft_style_init() {
lv_style_copy(&tft_style_scr, &lv_style_scr);
tft_style_scr.body.main_color = LV_COLOR_BACKGROUND;
@@ -197,12 +313,13 @@ void tft_style_init() {
tft_style_label_rel.text.letter_space = 0;
tft_style_label_pre.text.line_space = -5;
tft_style_label_rel.text.line_space = -5;
+
lv_style_copy(&style_para_value_pre, &lv_style_scr);
lv_style_copy(&style_para_value_rel, &lv_style_scr);
style_para_value_pre.body.main_color = LV_COLOR_BACKGROUND;
style_para_value_pre.body.grad_color = LV_COLOR_BACKGROUND;
- style_para_value_pre.text.color = LV_COLOR_BLACK;
- style_para_value_pre.text.sel_color = LV_COLOR_BLACK;
+ style_para_value_pre.text.color = LV_COLOR_TEXT;
+ style_para_value_pre.text.sel_color = LV_COLOR_TEXT;
style_para_value_rel.body.main_color = LV_COLOR_BACKGROUND;
style_para_value_rel.body.grad_color = LV_COLOR_BACKGROUND;
style_para_value_rel.text.color = LV_COLOR_BLACK;
@@ -215,6 +332,7 @@ void tft_style_init() {
style_para_value_rel.text.letter_space = 0;
style_para_value_pre.text.line_space = -5;
style_para_value_rel.text.line_space = -5;
+
lv_style_copy(&style_num_key_pre, &lv_style_scr);
lv_style_copy(&style_num_key_rel, &lv_style_scr);
style_num_key_pre.body.main_color = LV_COLOR_KEY_BACKGROUND;
@@ -250,10 +368,48 @@ void tft_style_init() {
style_num_text.text.letter_space = 0;
style_num_text.text.line_space = -5;
+ lv_style_copy(&style_sel_text, &lv_style_scr);
+ style_sel_text.body.main_color = LV_COLOR_BACKGROUND;
+ style_sel_text.body.grad_color = LV_COLOR_BACKGROUND;
+ style_sel_text.text.color = LV_COLOR_YELLOW;
+ style_sel_text.text.sel_color = LV_COLOR_YELLOW;
+ style_sel_text.text.font = &gb2312_puhui32;
+ style_sel_text.line.width = 0;
+ style_sel_text.text.letter_space = 0;
+ style_sel_text.text.line_space = -5;
lv_style_copy(&style_line, &lv_style_plain);
style_line.line.color = LV_COLOR_MAKE(0x49, 0x54, 0xff);
style_line.line.width = 1;
style_line.line.rounded = 1;
+
+ lv_style_copy(&style_para_value, &lv_style_plain);
+ style_para_value.body.border.color = LV_COLOR_BACKGROUND;
+ style_para_value.body.border.width = 1;
+ style_para_value.body.main_color = LV_COLOR_WHITE;
+ style_para_value.body.grad_color = LV_COLOR_WHITE;
+ style_para_value.body.shadow.width = 0;
+ style_para_value.body.radius = 3;
+ style_para_value.text.color = LV_COLOR_BLACK;
+ style_para_value.text.font = &TERN(HAS_SPI_FLASH_FONT, gb2312_puhui32, lv_font_roboto_22);
+
+ lv_style_copy(&style_para_back, &lv_style_plain);
+ style_para_back.body.border.color = LV_COLOR_BACKGROUND;
+ style_para_back.body.border.width = 1;
+ style_para_back.body.main_color = TFT_LV_PARA_BACK_BODY_COLOR;
+ style_para_back.body.grad_color = TFT_LV_PARA_BACK_BODY_COLOR;
+ style_para_back.body.shadow.width = 0;
+ style_para_back.body.radius = 3;
+ style_para_back.text.color = LV_COLOR_WHITE;
+ style_para_back.text.font = &TERN(HAS_SPI_FLASH_FONT, gb2312_puhui32, lv_font_roboto_22);
+
+ lv_style_copy(&lv_bar_style_indic, &lv_style_pretty_color);
+ lv_bar_style_indic.text.color = lv_color_hex3(0xADF);
+ lv_bar_style_indic.image.color = lv_color_hex3(0xADF);
+ lv_bar_style_indic.line.color = lv_color_hex3(0xADF);
+ lv_bar_style_indic.body.main_color = lv_color_hex3(0xADF);
+ lv_bar_style_indic.body.grad_color = lv_color_hex3(0xADF);
+ lv_bar_style_indic.body.border.color = lv_color_hex3(0xADF);
+
}
#define MAX_TITLE_LEN 28
@@ -360,15 +516,14 @@ char *getDispText(int index) {
case BIND_UI:
strcpy(public_buf_l, cloud_menu.title);
break;
- case ZOFFSET_UI:
- strcpy(public_buf_l, zoffset_menu.title);
- break;
case TOOL_UI:
strcpy(public_buf_l, tool_menu.title);
break;
case WIFI_LIST_UI:
- //strcpy(public_buf_l, list_menu.title);
- break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ strcpy(public_buf_l, list_menu.title);
+ break;
+ #endif
case MACHINE_PARA_UI:
strcpy(public_buf_l, MachinePara_menu.title);
break;
@@ -503,7 +658,7 @@ char *creat_title_text() {
#if ENABLED(TFT_LVGL_UI_SPI)
SPI_TFT.SetWindows(xpos_pixel, ypos_pixel + row, 200, 1);
#else
- ili9320_SetWindows(xpos_pixel, ypos_pixel + row, 200, 1);
+ LCD_setWindowArea(xpos_pixel, ypos_pixel + row, 200, 1);
LCD_WriteRAM_Prepare();
#endif
@@ -582,10 +737,10 @@ char *creat_title_text() {
//saved_feedrate_percentage = feedrate_percentage;
planner.flow_percentage[0] = 100;
planner.e_factor[0] = planner.flow_percentage[0] * 0.01;
- if (EXTRUDERS == 2) {
+ #if HAS_MULTI_EXTRUDER
planner.flow_percentage[1] = 100;
planner.e_factor[1] = planner.flow_percentage[1] * 0.01;
- }
+ #endif
card.startFileprint();
TERN_(POWER_LOSS_RECOVERY, recovery.prepare());
once_flag = 0;
@@ -615,7 +770,7 @@ char *creat_title_text() {
#if ENABLED(TFT_LVGL_UI_SPI)
SPI_TFT.SetWindows(xpos_pixel, ypos_pixel + row, 200, 1);
#else
- ili9320_SetWindows(xpos_pixel, ypos_pixel + row, 200, 1);
+ LCD_setWindowArea(xpos_pixel, ypos_pixel + row, 200, 1);
LCD_WriteRAM_Prepare();
#endif
@@ -714,10 +869,10 @@ char *creat_title_text() {
//saved_feedrate_percentage = feedrate_percentage;
planner.flow_percentage[0] = 100;
planner.e_factor[0] = planner.flow_percentage[0] * 0.01;
- if (EXTRUDERS == 2) {
+ #if HAS_MULTI_EXTRUDER
planner.flow_percentage[1] = 100;
planner.e_factor[1] = planner.flow_percentage[1] * 0.01;
- }
+ #endif
card.startFileprint();
TERN_(POWER_LOSS_RECOVERY, recovery.prepare());
once_flag = 0;
@@ -733,17 +888,17 @@ char *creat_title_text() {
void Draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) {
int index;
int y_off = 0;
-
+ W25QXX.init(SPI_QUARTER_SPEED);
for (index = 0; index < 10; index++) { // 200*200
#if HAS_BAK_VIEW_IN_FLASH
if (sel == 1) {
flash_view_Read(bmp_public_buf, 8000); // 20k
}
else {
- default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); // 20k
+ default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); // 8k
}
#else
- default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); // 20k
+ default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); // 8k
#endif
#if ENABLED(TFT_LVGL_UI_SPI)
@@ -754,7 +909,7 @@ char *creat_title_text() {
uint16_t temp_p;
int i = 0;
uint16_t *p_index;
- ili9320_SetWindows(xpos_pixel, y_off * 20 + ypos_pixel, 200, 20); // 200*200
+ LCD_setWindowArea(xpos_pixel, y_off * 20 + ypos_pixel, 200, 20); // 200*200
LCD_WriteRAM_Prepare();
@@ -904,29 +1059,28 @@ void GUI_RefreshPage() {
*/
break;
- case WIFI_UI:
- /*
- if (wifi_refresh_flg == 1) {
- disp_wifi_state();
- wifi_refresh_flg = 0;
- }
- */
- break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_UI:
+ if (temperature_change_frequency == 1) {
+ disp_wifi_state();
+ temperature_change_frequency = 0;
+ }
+ break;
+ #endif
+
case BIND_UI:
/*refresh_bind_ui();*/
break;
case FILAMENTCHANGE_UI:
- /*
if (temperature_change_frequency) {
temperature_change_frequency = 0;
- disp_filament_sprayer_temp();
+ disp_filament_temp();
}
- */
break;
case DIALOG_UI:
- /*filament_dialog_handle();
- wifi_scan_handle();*/
+ filament_dialog_handle();
+ TERN_(USE_WIFI_FUNCTION, wifi_scan_handle());
break;
case MESHLEVELING_UI:
/*disp_zpos();*/
@@ -934,66 +1088,68 @@ void GUI_RefreshPage() {
case HARDWARE_TEST_UI:
break;
case WIFI_LIST_UI:
- /*
- if (wifi_refresh_flg == 1) {
- disp_wifi_list();
- wifi_refresh_flg = 0;
- }
- */
+ #if ENABLED(USE_WIFI_FUNCTION)
+ if (printing_rate_update_flag == 1) {
+ disp_wifi_list();
+ printing_rate_update_flag = 0;
+ }
+ #endif
break;
case KEY_BOARD_UI:
/*update_password_disp();
update_join_state_disp();*/
break;
- case TIPS_UI:
- /*
- switch (tips_type) {
- case TIPS_TYPE_JOINING:
- if (wifi_link_state == WIFI_CONNECTED && strcmp((const char *)wifi_list.wifiConnectedName, (const char *)wifi_list.wifiName[wifi_list.nameIndex]) == 0) {
- tips_disp.timer = TIPS_TIMER_STOP;
- tips_disp.timer_count = 0;
- Clear_Tips();
- tips_type = TIPS_TYPE_WIFI_CONECTED;
- draw_Tips();
- }
- if (tips_disp.timer_count >= 30) {
- tips_disp.timer = TIPS_TIMER_STOP;
- tips_disp.timer_count = 0;
- Clear_Tips();
- tips_type = TIPS_TYPE_TAILED_JOIN;
- draw_Tips();
- }
- break;
- case TIPS_TYPE_TAILED_JOIN:
- if (tips_disp.timer_count >= 3) {
- tips_disp.timer = TIPS_TIMER_STOP;
- tips_disp.timer_count = 0;
- last_disp_state = TIPS_UI;
- Clear_Tips();
- draw_Wifi_list();
- }
- break;
- case TIPS_TYPE_WIFI_CONECTED:
- if (tips_disp.timer_count >= 3) {
- tips_disp.timer = TIPS_TIMER_STOP;
- tips_disp.timer_count = 0;
-
- last_disp_state = TIPS_UI;
- Clear_Tips();
- draw_Wifi();
- }
- break;
- default: break;
- }
- */
- break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_TIPS_UI:
+ switch (wifi_tips_type) {
+ case TIPS_TYPE_JOINING:
+ if (wifi_link_state == WIFI_CONNECTED && strcmp((const char *)wifi_list.wifiConnectedName,(const char *)wifi_list.wifiName[wifi_list.nameIndex]) == 0) {
+ tips_disp.timer = TIPS_TIMER_STOP;
+ tips_disp.timer_count = 0;
+
+ lv_clear_wifi_tips();
+ wifi_tips_type = TIPS_TYPE_WIFI_CONECTED;
+ lv_draw_wifi_tips();
+
+ }
+ if (tips_disp.timer_count >= 30 * 1000) {
+ tips_disp.timer = TIPS_TIMER_STOP;
+ tips_disp.timer_count = 0;
+ lv_clear_wifi_tips();
+ wifi_tips_type = TIPS_TYPE_TAILED_JOIN;
+ lv_draw_wifi_tips();
+ }
+ break;
+ case TIPS_TYPE_TAILED_JOIN:
+ if (tips_disp.timer_count >= 3 * 1000) {
+ tips_disp.timer = TIPS_TIMER_STOP;
+ tips_disp.timer_count = 0;
+
+ last_disp_state = WIFI_TIPS_UI;
+ lv_clear_wifi_tips();
+ lv_draw_wifi_list();
+ }
+ break;
+ case TIPS_TYPE_WIFI_CONECTED:
+ if (tips_disp.timer_count >= 3 * 1000) {
+ tips_disp.timer = TIPS_TIMER_STOP;
+ tips_disp.timer_count = 0;
+
+ last_disp_state = WIFI_TIPS_UI;
+ lv_clear_wifi_tips();
+ lv_draw_wifi();
+ }
+ break;
+ default: break;
+ }
+ break;
+ #endif
+
case BABY_STEP_UI:
- /*
if (temperature_change_frequency == 1) {
temperature_change_frequency = 0;
disp_z_offset_value();
}
- */
break;
default: break;
}
@@ -1060,9 +1216,11 @@ void clear_cur_ui() {
case DISK_UI:
//Clear_Disk();
break;
- case WIFI_UI:
- //Clear_Wifi();
- break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_UI:
+ lv_clear_wifi();
+ break;
+ #endif
case MORE_UI:
//Clear_more();
break;
@@ -1078,15 +1236,20 @@ void clear_cur_ui() {
case PRINT_MORE_UI:
//Clear_Printmore();
break;
+ case FILAMENTCHANGE_UI:
+ lv_clear_filament_change();
+ break;
case LEVELING_UI:
lv_clear_manualLevel();
break;
case BIND_UI:
//Clear_Bind();
break;
- case ZOFFSET_UI:
- //Clear_Zoffset();
- break;
+ #if HAS_BED_PROBE
+ case NOZZLE_PROBE_OFFSET_UI:
+ lv_clear_auto_level_offset_settings();
+ break;
+ #endif
case TOOL_UI:
lv_clear_tool();
break;
@@ -1096,15 +1259,19 @@ void clear_cur_ui() {
case HARDWARE_TEST_UI:
//Clear_Hardwaretest();
break;
- case WIFI_LIST_UI:
- //Clear_Wifi_list();
- break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_LIST_UI:
+ lv_clear_wifi_list();
+ break;
+ #endif
case KEY_BOARD_UI:
- //Clear_Keyboard();
- break;
- case TIPS_UI:
- //Clear_Tips();
+ lv_clear_keyboard();
break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_TIPS_UI:
+ lv_clear_wifi_tips();
+ break;
+ #endif
case MACHINE_PARA_UI:
lv_clear_machine_para();
break;
@@ -1130,19 +1297,19 @@ void clear_cur_ui() {
//Clear_EndstopType();
break;
case FILAMENT_SETTINGS_UI:
- //Clear_FilamentSettings();
+ lv_clear_filament_settings();
break;
case LEVELING_SETTIGNS_UI:
//Clear_LevelingSettings();
break;
case LEVELING_PARA_UI:
- //Clear_LevelingPara();
+ lv_clear_level_settings();
break;
case DELTA_LEVELING_PARA_UI:
//Clear_DeltaLevelPara();
break;
- case XYZ_LEVELING_PARA_UI:
- //Clear_XYZLevelPara();
+ case MANUAL_LEVELING_POSIGION_UI:
+ lv_clear_manual_level_pos_settings();
break;
case MAXFEEDRATE_UI:
lv_clear_max_feedrate_settings();
@@ -1183,7 +1350,7 @@ void clear_cur_ui() {
lv_clear_number_key();
break;
case BABY_STEP_UI:
- //Clear_babyStep();
+ lv_clear_baby_stepping();
break;
case PAUSE_POS_UI:
lv_clear_pause_position();
@@ -1201,8 +1368,22 @@ void clear_cur_ui() {
lv_clear_tmc_step_mode_settings();
break;
#endif
- default:
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_SETTINGS_UI:
+ lv_clear_wifi_settings();
break;
+ #endif
+ #if USE_SENSORLESS
+ case HOMING_SENSITIVITY_UI:
+ lv_clear_homing_sensitivity_settings();
+ break;
+ #endif
+ #if HAS_ROTARY_ENCODER
+ case ENCODER_SETTINGS_UI:
+ lv_clear_encoder_settings();
+ break;
+ #endif
+ default: break;
}
//GUI_Clear();
}
@@ -1267,21 +1448,17 @@ void draw_return_ui() {
lv_draw_about();
break;
- #if tan_mask
- case LOG_UI:
- //draw_Connect();
- break;
- #endif
-
case CALIBRATE_UI:
//draw_calibrate();
break;
case DISK_UI:
//draw_Disk();
break;
- case WIFI_UI:
- //draw_Wifi();
- break;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_UI:
+ lv_draw_wifi();
+ break;
+ #endif
case MORE_UI:
//draw_More();
break;
@@ -1289,7 +1466,7 @@ void draw_return_ui() {
//draw_printmore();
break;
case FILAMENTCHANGE_UI:
- //draw_FilamentChange();
+ lv_draw_filament_change();
break;
case LEVELING_UI:
lv_draw_manualLevel();
@@ -1297,13 +1474,11 @@ void draw_return_ui() {
case BIND_UI:
//draw_bind();
break;
-
- #if tan_mask
- case ZOFFSET_UI:
- //draw_Zoffset();
- break;
- #endif
-
+ #if HAS_BED_PROBE
+ case NOZZLE_PROBE_OFFSET_UI:
+ lv_draw_auto_level_offset_settings();
+ break;
+ #endif
case TOOL_UI:
lv_draw_tool();
break;
@@ -1314,13 +1489,17 @@ void draw_return_ui() {
//draw_Hardwaretest();
break;
case WIFI_LIST_UI:
- //draw_Wifi_list();
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_draw_wifi_list();
+ #endif
break;
case KEY_BOARD_UI:
- //draw_Keyboard();
+ lv_draw_keyboard();
break;
- case TIPS_UI:
- //draw_Tips();
+ case WIFI_TIPS_UI:
+ #if ENABLED(USE_WIFI_FUNCTION)
+ lv_draw_wifi_tips();
+ #endif
break;
case MACHINE_PARA_UI:
lv_draw_machine_para();
@@ -1347,19 +1526,19 @@ void draw_return_ui() {
//draw_EndstopType();
break;
case FILAMENT_SETTINGS_UI:
- //draw_FilamentSettings();
+ lv_draw_filament_settings();
break;
case LEVELING_SETTIGNS_UI:
//draw_LevelingSettings();
break;
case LEVELING_PARA_UI:
- //draw_LevelingPara();
+ lv_draw_level_settings();
break;
case DELTA_LEVELING_PARA_UI:
//draw_DeltaLevelPara();
break;
- case XYZ_LEVELING_PARA_UI:
- //draw_XYZLevelPara();
+ case MANUAL_LEVELING_POSIGION_UI:
+ lv_draw_manual_level_pos_settings();
break;
case MAXFEEDRATE_UI:
lv_draw_max_feedrate_settings();
@@ -1400,10 +1579,10 @@ void draw_return_ui() {
lv_draw_number_key();
break;
case DIALOG_UI:
- //draw_dialog(DialogType);
+ //draw_dialog(uiCfg.dialogType);
break;
case BABY_STEP_UI:
- //draw_babyStep();
+ lv_draw_baby_stepping();
break;
case PAUSE_POS_UI:
lv_draw_pause_position();
@@ -1421,6 +1600,21 @@ void draw_return_ui() {
lv_draw_tmc_step_mode_settings();
break;
#endif
+ #if ENABLED(USE_WIFI_FUNCTION)
+ case WIFI_SETTINGS_UI:
+ lv_draw_wifi_settings();
+ break;
+ #endif
+ #if USE_SENSORLESS
+ case HOMING_SENSITIVITY_UI:
+ lv_draw_homing_sensitivity_settings();
+ break;
+ #endif
+ #if HAS_ROTARY_ENCODER
+ case ENCODER_SETTINGS_UI:
+ lv_draw_encoder_settings();
+ break;
+ #endif
default: break;
}
}
@@ -1440,8 +1634,8 @@ void draw_return_ui() {
#endif
void lv_ex_line(lv_obj_t * line, lv_point_t *points) {
- /*Copy the previous line and apply the new style*/
- lv_line_set_points(line, points, 2); /*Set the points*/
+ // Copy the previous line and apply the new style
+ lv_line_set_points(line, points, 2); // Set the points
lv_line_set_style(line, LV_LINE_STYLE_MAIN, &style_line);
lv_obj_align(line, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
}
@@ -1450,18 +1644,29 @@ extern volatile uint32_t systick_uptime_millis;
void print_time_count() {
if ((systick_uptime_millis % 1000) == 0)
- if (print_time.start == 1) print_time.seconds++;
+ if (print_time.start == 1) print_time.seconds++;
}
void LV_TASK_HANDLER() {
//lv_tick_inc(1);
lv_task_handler();
if (mks_test_flag == 0x1e) mks_hardware_test();
+
#if HAS_GCODE_PREVIEW
disp_pre_gcode(2, 36);
#endif
+
GUI_RefreshPage();
+
+ #if ENABLED(USE_WIFI_FUNCTION)
+ get_wifi_commands();
+ #endif
+
//sd_detection();
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_update_encoder();
+ #endif
}
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h
index 8cd4670ffa..09e39d8412 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h
@@ -34,7 +34,11 @@
#undef LV_COLOR_BACKGROUND
#define LV_COLOR_BACKGROUND LV_COLOR_MAKE(0x1A, 0x1A, 0x1A) // LV_COLOR_MAKE(0x00, 0x00, 0x00)
+#define TFT_LV_PARA_BACK_BODY_COLOR LV_COLOR_MAKE(0x4A, 0x52, 0xFF)
+
+#include "tft_lvgl_configuration.h"
#include "tft_multi_language.h"
+#include "pic_manager.h"
#include "draw_ready_print.h"
#include "draw_language.h"
#include "draw_set.h"
@@ -66,8 +70,33 @@
#include "draw_eeprom_settings.h"
#include "draw_max_feedrate_settings.h"
#include "draw_tmc_step_mode_settings.h"
+#include "draw_level_settings.h"
+#include "draw_manual_level_pos_settings.h"
+#include "draw_auto_level_offset_settings.h"
+#include "draw_filament_change.h"
+#include "draw_filament_settings.h"
+#include "draw_homing_sensitivity_settings.h"
+#include "draw_baby_stepping.h"
+#include "draw_keyboard.h"
+#include "draw_encoder_settings.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+ #include "wifiSerial.h"
+ #include "wifi_module.h"
+ #include "wifi_upload.h"
+ #include "draw_wifi_settings.h"
+ #include "draw_wifi.h"
+ #include "draw_wifi_list.h"
+ #include "draw_wifi_tips.h"
+#endif
#include "../../inc/MarlinConfigPre.h"
+#define FILE_SYS_USB 0
+#define FILE_SYS_SD 1
+
+#define TICK_CYCLE 1
+
+#define PARA_SEL_ICON_TEXT_COLOR LV_COLOR_MAKE(0x4a, 0x52, 0xff);
#define TFT35
@@ -100,30 +129,38 @@
#define PREVIEW_LITTLE_PIC_SIZE 40910 // 400*100+9*101+1
#define PREVIEW_SIZE 202720 // (PREVIEW_LITTLE_PIC_SIZE+800*200+201*9+1)
- #define GCFG_FLAG_VALUE 0xEE
-
// machine parameter ui
- #define PARA_UI_POS_X 10
- #define PARA_UI_POS_Y 50
+ #define PARA_UI_POS_X 10
+ #define PARA_UI_POS_Y 50
- #define PARA_UI_SIZE_X 450
- #define PARA_UI_SIZE_Y 40
+ #define PARA_UI_SIZE_X 450
+ #define PARA_UI_SIZE_Y 40
#define PARA_UI_ARROW_V 12
- #define PARA_UI_BACL_POS_X 400
- #define PARA_UI_BACL_POS_Y 270
+ #define PARA_UI_BACL_POS_X 400
+ #define PARA_UI_BACL_POS_Y 270
- #define PARA_UI_TURN_PAGE_POS_X 320
- #define PARA_UI_TURN_PAGE_POS_Y 270
+ #define PARA_UI_TURN_PAGE_POS_X 320
+ #define PARA_UI_TURN_PAGE_POS_Y 270
- #define PARA_UI_VALUE_SIZE_X 370
- #define PARA_UI_VALUE_POS_X 400
+ #define PARA_UI_VALUE_SIZE_X 370
+ #define PARA_UI_VALUE_POS_X 400
#define PARA_UI_VALUE_V 5
- #define PARA_UI_STATE_POS_X 380
+ #define PARA_UI_STATE_POS_X 380
#define PARA_UI_STATE_V 2
+ #define PARA_UI_VALUE_SIZE_X_2 200
+ #define PARA_UI_VALUE_POS_X_2 320
+ #define PARA_UI_VALUE_V_2 5
+
+ #define PARA_UI_VALUE_BTN_X_SIZE 70
+ #define PARA_UI_VALUE_BTN_Y_SIZE 28
+
+ #define PARA_UI_BACK_BTN_X_SIZE 70
+ #define PARA_UI_BACK_BTN_Y_SIZE 40
+
#else // ifdef TFT35
#define TFT_WIDTH 320
@@ -135,13 +172,25 @@ extern char public_buf_m[100];
extern char public_buf_l[30];
typedef struct {
- uint8_t spi_flash_flag;
+ uint32_t spi_flash_flag;
+ uint8_t disp_rotation_180;
uint8_t multiple_language;
uint8_t language;
uint8_t leveling_mode;
uint8_t from_flash_pic;
uint8_t finish_power_off;
uint8_t pause_reprint;
+ uint8_t wifi_mode_sel;
+ uint8_t fileSysType;
+ uint8_t wifi_type;
+ bool cloud_enable;
+ bool encoder_enable;
+ int levelingPos[5][2];
+ int filamentchange_load_length;
+ int filamentchange_load_speed;
+ int filamentchange_unload_length;
+ int filamentchange_unload_speed;
+ int filament_limit_temper;
float pausePosX;
float pausePosY;
float pausePosZ;
@@ -153,15 +202,42 @@ typedef struct {
curSprayerChoose : 3,
stepHeat : 4;
uint8_t leveling_first_time : 1,
- para_ui_page : 1;
+ para_ui_page:1,
+ configWifi:1,
+ command_send:1,
+ filament_load_heat_flg:1,
+ filament_heat_completed_load:1,
+ filament_unload_heat_flg:1,
+ filament_heat_completed_unload:1;
+ uint8_t filament_loading_completed:1,
+ filament_unloading_completed:1,
+ filament_loading_time_flg:1,
+ filament_unloading_time_flg:1,
+ curSprayerChoose_bak:4;
+ uint8_t wifi_name[32];
+ uint8_t wifi_key[64];
+ uint8_t cloud_hostUrl[96];
uint8_t extruStep;
uint8_t extruSpeed;
uint8_t print_state;
uint8_t stepPrintSpeed;
uint8_t waitEndMoves;
+ uint8_t dialogType;
+ uint8_t F[4];
+ uint8_t filament_rate;
uint16_t moveSpeed;
+ uint16_t cloud_port;
+ uint16_t moveSpeed_bak;
+ uint32_t totalSend;
+ uint32_t filament_loading_time;
+ uint32_t filament_unloading_time;
+ uint32_t filament_loading_time_cnt;
+ uint32_t filament_unloading_time_cnt;
float move_dist;
- uint8_t F[4];
+ float desireSprayerTempBak;
+ float current_x_position_bak;
+ float current_y_position_bak;
+ float current_e_position_bak;
} UI_CFG;
typedef enum {
@@ -196,12 +272,14 @@ typedef enum {
LEVELING_UI,
MESHLEVELING_UI,
BIND_UI,
- ZOFFSET_UI,
+ #if HAS_BED_PROBE
+ NOZZLE_PROBE_OFFSET_UI,
+ #endif
TOOL_UI,
HARDWARE_TEST_UI,
WIFI_LIST_UI,
KEY_BOARD_UI,
- TIPS_UI,
+ WIFI_TIPS_UI,
MACHINE_PARA_UI,
MACHINE_SETTINGS_UI,
TEMPERATURE_SETTINGS_UI,
@@ -214,7 +292,7 @@ typedef enum {
LEVELING_SETTIGNS_UI,
LEVELING_PARA_UI,
DELTA_LEVELING_PARA_UI,
- XYZ_LEVELING_PARA_UI,
+ MANUAL_LEVELING_POSIGION_UI,
MAXFEEDRATE_UI,
STEPS_UI,
ACCELERATION_UI,
@@ -232,7 +310,10 @@ typedef enum {
PAUSE_POS_UI,
TMC_CURRENT_UI,
TMC_MODE_UI,
- EEPROM_SETTINGS_UI
+ EEPROM_SETTINGS_UI,
+ WIFI_SETTINGS_UI,
+ HOMING_SENSITIVITY_UI,
+ ENCODER_SETTINGS_UI
} DISP_STATE;
typedef struct {
@@ -285,10 +366,45 @@ typedef enum {
pause_pos_x,
pause_pos_y,
- pause_pos_z
+ pause_pos_z,
+
+ level_pos_x1,
+ level_pos_y1,
+ level_pos_x2,
+ level_pos_y2,
+ level_pos_x3,
+ level_pos_y3,
+ level_pos_x4,
+ level_pos_y4,
+ level_pos_x5,
+ level_pos_y5
+ #if HAS_BED_PROBE
+ ,
+ x_offset,
+ y_offset,
+ z_offset
+ #endif
+ ,
+ load_length,
+ load_speed,
+ unload_length,
+ unload_speed,
+ filament_temp,
+
+ x_sensitivity,
+ y_sensitivity,
+ z_sensitivity,
+ z2_sensitivity
+} num_key_value_state;
+extern num_key_value_state value;
-}value_state;
-extern value_state value;
+typedef enum {
+ wifiName,
+ wifiPassWord,
+ wifiConfig,
+ gcodeCommand
+} keyboard_value_state;
+extern keyboard_value_state keyboard_value;
extern CFG_ITMES gCfgItems;
extern UI_CFG uiCfg;
@@ -305,6 +421,10 @@ extern lv_style_t style_para_value_rel;
extern lv_style_t style_num_key_pre;
extern lv_style_t style_num_key_rel;
extern lv_style_t style_num_text;
+extern lv_style_t style_sel_text;
+extern lv_style_t style_para_value;
+extern lv_style_t style_para_back;
+extern lv_style_t lv_bar_style_indic;
extern lv_point_t line_points[4][2];
@@ -314,6 +434,8 @@ extern void tft_style_init();
extern char *creat_title_text(void);
extern void preview_gcode_prehandle(char *path);
extern void update_spi_flash();
+extern void update_gcode_command(int addr,uint8_t *s);
+extern void get_gcode_command(int addr,uint8_t *d);
#if HAS_GCODE_PREVIEW
extern void disp_pre_gcode(int xpos_pixel, int ypos_pixel);
#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.cpp
new file mode 100644
index 0000000000..9cf4555b25
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.cpp
@@ -0,0 +1,222 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#include "../../../../../Configuration.h"
+#include "../../../../module/temperature.h"
+
+extern lv_group_t * g;
+static lv_obj_t *scr, *wifi_name_text, *wifi_key_text, *wifi_state_text, *wifi_ip_text;
+
+#define ID_W_RETURN 1
+#define ID_W_CLOUD 2
+#define ID_W_RECONNECT 3
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_W_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ clear_cur_ui();
+ lv_draw_set();
+ }
+ break;
+ case ID_W_CLOUD:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ //clear_cur_ui();
+ //draw_return_ui();
+ }
+ break;
+ case ID_W_RECONNECT:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ clear_cur_ui();
+ lv_draw_wifi_list();
+ }
+ break;
+ }
+}
+
+void lv_draw_wifi(void) {
+ lv_obj_t *buttonBack=NULL,*label_Back=NULL;
+ lv_obj_t *buttonCloud=NULL,*label_Cloud=NULL;
+ lv_obj_t *buttonReconnect=NULL,*label_Reconnect=NULL;
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != WIFI_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = WIFI_UI;
+ }
+ disp_state = WIFI_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title,TITLE_XPOS,TITLE_YPOS);
+ lv_label_set_text(title, creat_title_text());
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ // Create an Image button
+ buttonBack = lv_imgbtn_create(scr, NULL);
+ if (gCfgItems.wifi_mode_sel == STA_MODEL) {
+ //buttonCloud = lv_imgbtn_create(scr, NULL);
+ buttonReconnect = lv_imgbtn_create(scr, NULL);
+ }
+
+ lv_obj_set_event_cb_mks(buttonBack, event_handler,ID_W_RETURN, NULL,0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+ #endif
+
+ lv_obj_set_pos(buttonBack,BTN_X_PIXEL*3+INTERVAL_V*4, BTN_Y_PIXEL+INTERVAL_H+titleHeight);
+ lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+
+ if (gCfgItems.wifi_mode_sel == STA_MODEL) {
+
+ lv_obj_set_event_cb_mks(buttonReconnect, event_handler,ID_W_RECONNECT, NULL,0);
+ lv_imgbtn_set_src(buttonReconnect, LV_BTN_STATE_REL, "F:/bmp_wifi.bin");
+ lv_imgbtn_set_src(buttonReconnect, LV_BTN_STATE_PR, "F:/bmp_wifi.bin");
+ lv_imgbtn_set_style(buttonReconnect, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonReconnect, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonReconnect);
+ #endif
+
+ lv_obj_set_pos(buttonReconnect,BTN_X_PIXEL*2+INTERVAL_V*3, BTN_Y_PIXEL+INTERVAL_H+titleHeight);
+ lv_btn_set_layout(buttonReconnect, LV_LAYOUT_OFF);
+ }
+
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ if (gCfgItems.wifi_mode_sel == STA_MODEL) {
+ //label_Cloud = lv_label_create(buttonCloud, NULL);
+ label_Reconnect = lv_label_create(buttonReconnect, NULL);
+ }
+
+ if (gCfgItems.multiple_language !=0) {
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
+
+ if (gCfgItems.wifi_mode_sel == STA_MODEL) {
+ //lv_label_set_text(label_Cloud, common_menu.text_back);
+ //lv_obj_align(label_Cloud, buttonCloud, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
+
+ lv_label_set_text(label_Reconnect, wifi_menu.reconnect);
+ lv_obj_align(label_Reconnect, buttonReconnect, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
+ }
+ }
+
+ wifi_ip_text = lv_label_create(scr, NULL);
+ lv_obj_set_style(wifi_ip_text, &tft_style_label_rel);
+
+ wifi_name_text = lv_label_create(scr, NULL);
+ lv_obj_set_style(wifi_name_text, &tft_style_label_rel);
+
+ wifi_key_text = lv_label_create(scr, NULL);
+ lv_obj_set_style(wifi_key_text, &tft_style_label_rel);
+
+ wifi_state_text = lv_label_create(scr, NULL);
+ lv_obj_set_style(wifi_state_text, &tft_style_label_rel);
+
+ disp_wifi_state();
+}
+
+void disp_wifi_state() {
+ memset(public_buf_m, 0, sizeof(public_buf_m));
+ strcpy(public_buf_m,wifi_menu.ip);
+ strcat(public_buf_m,ipPara.ip_addr);
+ lv_label_set_text(wifi_ip_text, public_buf_m);
+ lv_obj_align(wifi_ip_text, NULL, LV_ALIGN_CENTER,0, -100);
+
+ memset(public_buf_m, 0, sizeof(public_buf_m));
+ strcpy(public_buf_m,wifi_menu.wifi);
+ strcat(public_buf_m,wifiPara.ap_name);
+ lv_label_set_text(wifi_name_text, public_buf_m);
+ lv_obj_align(wifi_name_text, NULL, LV_ALIGN_CENTER,0, -70);
+
+ if (wifiPara.mode == AP_MODEL) {
+ memset(public_buf_m, 0, sizeof(public_buf_m));
+ strcpy(public_buf_m,wifi_menu.key);
+ strcat(public_buf_m,wifiPara.keyCode);
+ lv_label_set_text(wifi_key_text, public_buf_m);
+ lv_obj_align(wifi_key_text, NULL, LV_ALIGN_CENTER,0, -40);
+
+ memset(public_buf_m, 0, sizeof(public_buf_m));
+ strcpy(public_buf_m,wifi_menu.state_ap);
+ if (wifi_link_state == WIFI_CONNECTED)
+ strcat(public_buf_m,wifi_menu.connected);
+ else if (wifi_link_state == WIFI_NOT_CONFIG)
+ strcat(public_buf_m,wifi_menu.disconnected);
+ else
+ strcat(public_buf_m,wifi_menu.exception);
+ lv_label_set_text(wifi_state_text, public_buf_m);
+ lv_obj_align(wifi_state_text, NULL, LV_ALIGN_CENTER,0, -10);
+ }
+ else {
+ ZERO(public_buf_m);
+ strcpy(public_buf_m, wifi_menu.state_sta);
+ if (wifi_link_state == WIFI_CONNECTED)
+ strcat(public_buf_m, wifi_menu.connected);
+ else if (wifi_link_state == WIFI_NOT_CONFIG)
+ strcat(public_buf_m, wifi_menu.disconnected);
+ else
+ strcat(public_buf_m, wifi_menu.exception);
+ lv_label_set_text(wifi_state_text, public_buf_m);
+ lv_obj_align(wifi_state_text, NULL, LV_ALIGN_CENTER,0, -40);
+
+ lv_label_set_text(wifi_key_text, "");
+ lv_obj_align(wifi_key_text, NULL, LV_ALIGN_CENTER,0, -10);
+ }
+}
+
+void lv_clear_wifi() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // USE_WIFI_FUNCTION
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.h
new file mode 100644
index 0000000000..966a84d3b1
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi.h
@@ -0,0 +1,38 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+
+extern void lv_draw_wifi(void);
+extern void lv_clear_wifi();
+extern void disp_wifi_state();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
+
+
+
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.cpp
new file mode 100644
index 0000000000..14fd63f852
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.cpp
@@ -0,0 +1,235 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#include "../../../../../Configuration.h"
+#include "../../../../module/temperature.h"
+
+#define NAME_BTN_X 330
+#define NAME_BTN_Y 48
+
+#define MARK_BTN_X 0
+#define MARK_BTN_Y 68
+
+WIFI_LIST wifi_list;
+list_menu_def list_menu;
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+static lv_obj_t *buttonWifiN[NUMBER_OF_PAGE];
+static lv_obj_t *lableWifiText[NUMBER_OF_PAGE];
+static lv_obj_t *lablePageText;
+
+#define ID_WL_RETURN 11
+#define ID_WL_DOWN 12
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ if (obj->mks_obj_id == ID_WL_RETURN) {
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ clear_cur_ui();
+ lv_draw_set();
+ }
+ }
+ else if (obj->mks_obj_id == ID_WL_DOWN) {
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (wifi_list.getNameNum > 0) {
+ if ((wifi_list.nameIndex + NUMBER_OF_PAGE) >= wifi_list.getNameNum) {
+ wifi_list.nameIndex = 0;
+ wifi_list.currentWifipage = 1;
+ }
+ else {
+ wifi_list.nameIndex += NUMBER_OF_PAGE;
+ wifi_list.currentWifipage++;
+ }
+ disp_wifi_list();
+ }
+ }
+ }
+ else {
+ for (uint8_t i = 0; i < NUMBER_OF_PAGE; i++) {
+ if (obj->mks_obj_id == i + 1) {
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (wifi_list.getNameNum != 0) {
+ const bool do_wifi = wifi_link_state == WIFI_CONNECTED && strcmp((const char *)wifi_list.wifiConnectedName, (const char *)wifi_list.wifiName[wifi_list.nameIndex + i]) == 0;
+ wifi_list.nameIndex += i;
+ last_disp_state = WIFI_LIST_UI;
+ lv_clear_wifi_list();
+ if (do_wifi)
+ lv_draw_wifi();
+ else {
+ keyboard_value = wifiConfig;
+ lv_draw_keyboard();
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void lv_draw_wifi_list(void) {
+ lv_obj_t *buttonBack = NULL, *buttonDown = NULL;
+
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != WIFI_LIST_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = WIFI_LIST_UI;
+ }
+ disp_state = WIFI_LIST_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title,TITLE_XPOS,TITLE_YPOS);
+ lv_label_set_text(title, creat_title_text());
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ buttonDown = lv_imgbtn_create(scr, NULL);
+ buttonBack = lv_imgbtn_create(scr, NULL);
+
+ lv_obj_set_event_cb_mks(buttonDown, event_handler,ID_WL_DOWN,NULL,0);
+ lv_imgbtn_set_src(buttonDown, LV_BTN_STATE_REL, "F:/bmp_pageDown.bin");
+ lv_imgbtn_set_src(buttonDown, LV_BTN_STATE_PR, "F:/bmp_pageDown.bin");
+ lv_imgbtn_set_style(buttonDown, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonDown, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_event_cb_mks(buttonBack, event_handler,ID_WL_RETURN,NULL,0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+
+ lv_obj_set_pos(buttonDown,OTHER_BTN_XPIEL*3+INTERVAL_V*4,titleHeight+OTHER_BTN_YPIEL+INTERVAL_H);
+ lv_obj_set_pos(buttonBack,OTHER_BTN_XPIEL*3+INTERVAL_V*4,titleHeight+OTHER_BTN_YPIEL*2+INTERVAL_H*2);
+
+ lv_btn_set_layout(buttonDown, LV_LAYOUT_OFF);
+ lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+
+ for (uint8_t i = 0; i < NUMBER_OF_PAGE; i++) {
+ buttonWifiN[i] = lv_btn_create(scr, NULL); /*Add a button the current screen*/
+ lv_obj_set_pos(buttonWifiN[i], 0,NAME_BTN_Y*i+10+titleHeight); /*Set its position*/
+ lv_obj_set_size(buttonWifiN[i], NAME_BTN_X,NAME_BTN_Y); /*Set its size*/
+ lv_obj_set_event_cb_mks(buttonWifiN[i], event_handler,(i+1),NULL,0);
+ lv_btn_set_style(buttonWifiN[i], LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
+ lv_btn_set_style(buttonWifiN[i], LV_BTN_STYLE_PR, &tft_style_label_pre); /*Set the button's pressed style*/
+ lv_btn_set_layout(buttonWifiN[i], LV_LAYOUT_OFF);
+ lableWifiText[i] = lv_label_create(buttonWifiN[i], NULL);
+ #if HAS_ROTARY_ENCODER
+ uint8_t j = 0;
+ if (gCfgItems.encoder_enable) {
+ j = wifi_list.nameIndex + i;
+ if (j < wifi_list.getNameNum) lv_group_add_obj(g, buttonWifiN[i]);
+ }
+ #endif
+ }
+
+ lablePageText = lv_label_create(scr, NULL);
+ lv_obj_set_style(lablePageText, &tft_style_label_rel);
+
+ wifi_list.nameIndex = 0;
+ wifi_list.currentWifipage = 1;
+
+ if (wifi_link_state == WIFI_CONNECTED && wifiPara.mode == STA_MODEL) {
+ memset(wifi_list.wifiConnectedName, 0, sizeof(&wifi_list.wifiConnectedName));
+ memcpy(wifi_list.wifiConnectedName, wifiPara.ap_name, sizeof(wifi_list.wifiConnectedName));
+ }
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonDown);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+
+ disp_wifi_list();
+}
+
+void disp_wifi_list(void) {
+ int8_t tmpStr[WIFI_NAME_BUFFER_SIZE] = { 0 };
+ uint8_t i, j;
+
+ sprintf((char *)tmpStr, list_menu.file_pages, wifi_list.currentWifipage, wifi_list.getPage);
+ lv_label_set_text(lablePageText, (const char *)tmpStr);
+ lv_obj_align(lablePageText, NULL, LV_ALIGN_CENTER, 50, -100);
+
+ for (i = 0; i < NUMBER_OF_PAGE; i++) {
+ memset(tmpStr, 0, sizeof(tmpStr));
+
+ j = wifi_list.nameIndex + i;
+ if (j >= wifi_list.getNameNum) {
+ lv_label_set_text(lableWifiText[i], (const char *)tmpStr);
+ lv_obj_align(lableWifiText[i], buttonWifiN[i], LV_ALIGN_IN_LEFT_MID, 20, 0);
+ }
+ else {
+ lv_label_set_text(lableWifiText[i], (char const *)wifi_list.wifiName[j]);
+ lv_obj_align(lableWifiText[i], buttonWifiN[i], LV_ALIGN_IN_LEFT_MID, 20, 0);
+
+ if (wifi_link_state == WIFI_CONNECTED && strcmp((const char *)wifi_list.wifiConnectedName, (const char *)wifi_list.wifiName[j]) == 0) {
+ lv_btn_set_style(buttonWifiN[i], LV_BTN_STYLE_REL, &style_sel_text);
+ }
+ else {
+ lv_btn_set_style(buttonWifiN[i], LV_BTN_STYLE_REL, &tft_style_label_rel);
+ }
+ }
+ }
+}
+
+void wifi_scan_handle() {
+ if (uiCfg.dialogType != WIFI_ENABLE_TIPS || uiCfg.command_send != 1) return;
+ last_disp_state = DIALOG_UI;
+ lv_clear_dialog();
+ if (wifi_link_state == WIFI_CONNECTED && wifiPara.mode != AP_MODEL)
+ lv_draw_wifi();
+ else
+ lv_draw_wifi_list();
+}
+
+void lv_clear_wifi_list() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // USE_WIFI_FUNCTION
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.h
new file mode 100644
index 0000000000..e2d9275ef9
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_list.h
@@ -0,0 +1,76 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_wifi_list();
+extern void lv_clear_wifi_list();
+extern void disp_wifi_list(void);
+extern void cutWifiName(char *name, int len,char *outStr);
+extern void wifi_scan_handle();
+
+#define NUMBER_OF_PAGE 5
+
+#define WIFI_TOTAL_NUMBER 20
+#define WIFI_NAME_BUFFER_SIZE 33
+
+typedef struct {
+ int8_t getNameNum;
+ int8_t nameIndex;
+ int8_t currentWifipage;
+ int8_t getPage;
+ int8_t RSSI[WIFI_TOTAL_NUMBER];
+ uint8_t wifiName[WIFI_TOTAL_NUMBER][WIFI_NAME_BUFFER_SIZE];
+ uint8_t wifiConnectedName[WIFI_NAME_BUFFER_SIZE];
+} WIFI_LIST;
+extern WIFI_LIST wifi_list;
+
+typedef struct list_menu_disp {
+ const char *title;
+ const char *file_pages;
+} list_menu_def;
+extern list_menu_def list_menu;
+
+typedef struct keyboard_menu_disp {
+ const char *title;
+ const char *apply;
+ const char *password;
+ const char *letter;
+ const char *digital;
+ const char *symbol;
+ const char *space;
+} keyboard_menu_def;
+extern keyboard_menu_def keyboard_menu;
+
+typedef struct tips_menu_disp {
+ const char *joining;
+ const char *failedJoin;
+ const char *wifiConected;
+} tips_menu_def;
+extern tips_menu_def tips_menu;
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.cpp
new file mode 100644
index 0000000000..86733470dd
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.cpp
@@ -0,0 +1,299 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#include "../../../../../Configuration.h"
+#include "../../../../module/planner.h"
+
+extern lv_group_t * g;
+static lv_obj_t *scr, *labelModelValue = NULL, *buttonModelValue = NULL, *labelCloudValue = NULL;
+
+#define ID_WIFI_RETURN 1
+#define ID_WIFI_MODEL 2
+#define ID_WIFI_NAME 3
+#define ID_WIFI_PASSWORD 4
+#define ID_WIFI_CLOUD 5
+#define ID_WIFI_CONFIG 6
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+ switch (obj->mks_obj_id) {
+ case ID_WIFI_RETURN:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_wifi_settings();
+ draw_return_ui();
+ }
+ break;
+ case ID_WIFI_MODEL:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (gCfgItems.wifi_mode_sel == AP_MODEL) {
+ gCfgItems.wifi_mode_sel = STA_MODEL;
+ lv_label_set_text(labelModelValue, WIFI_STA_TEXT);
+ lv_obj_align(labelModelValue, buttonModelValue, LV_ALIGN_CENTER,0, 0);
+ update_spi_flash();
+ }
+ else{
+ gCfgItems.wifi_mode_sel = AP_MODEL;
+ lv_label_set_text(labelModelValue, WIFI_AP_TEXT);
+ lv_obj_align(labelModelValue, buttonModelValue, LV_ALIGN_CENTER,0, 0);
+ update_spi_flash();
+ }
+ }
+ break;
+ case ID_WIFI_NAME:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ keyboard_value=wifiName;
+ lv_clear_wifi_settings();
+ lv_draw_keyboard();
+ }
+ break;
+ case ID_WIFI_PASSWORD:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ keyboard_value=wifiPassWord;
+ lv_clear_wifi_settings();
+ lv_draw_keyboard();
+ }
+ break;
+ case ID_WIFI_CLOUD:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ if (gCfgItems.cloud_enable) {
+ gCfgItems.cloud_enable = false;
+ lv_obj_set_event_cb_mks(obj, event_handler,ID_WIFI_CLOUD,"bmp_disable.bin",0);
+ lv_label_set_text(labelCloudValue, machine_menu.disable);
+ update_spi_flash();
+ }
+ else {
+ gCfgItems.cloud_enable = true;
+ lv_obj_set_event_cb_mks(obj, event_handler,ID_WIFI_CLOUD,"bmp_enable.bin",0);
+ lv_label_set_text(labelCloudValue, machine_menu.enable);
+ update_spi_flash();
+ }
+ }
+ break;
+ case ID_WIFI_CONFIG:
+ if (event == LV_EVENT_CLICKED) {
+
+ }
+ else if (event == LV_EVENT_RELEASED) {
+ lv_clear_wifi_settings();
+ lv_draw_dialog(DIALOG_WIFI_CONFIG_TIPS);
+ }
+ break;
+ }
+}
+
+void lv_draw_wifi_settings(void) {
+ lv_obj_t *buttonBack = NULL, *label_Back = NULL, *buttonConfig = NULL, *labelConfig = NULL;
+ lv_obj_t *labelModelText = NULL;
+ lv_obj_t *labelNameText = NULL, *buttonNameValue = NULL, *labelNameValue = NULL;
+ lv_obj_t *labelPassWordText = NULL, *buttonPassWordValue = NULL, *labelPassWordValue = NULL;
+ lv_obj_t *labelCloudText = NULL, *buttonCloudValue = NULL;
+ lv_obj_t * line1 = NULL, *line2 = NULL, *line3 = NULL, *line4 = NULL;
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != WIFI_SETTINGS_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = WIFI_SETTINGS_UI;
+ }
+ disp_state = WIFI_SETTINGS_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+
+ lv_obj_t * title = lv_label_create(scr, NULL);
+ lv_obj_set_style(title, &tft_style_label_rel);
+ lv_obj_set_pos(title,TITLE_XPOS,TITLE_YPOS);
+ lv_label_set_text(title, machine_menu.WifiConfTitle);
+
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ labelModelText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelModelText, &tft_style_label_rel);
+ lv_obj_set_pos(labelModelText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+ lv_label_set_text(labelModelText, machine_menu.wifiMode);
+
+ buttonModelValue = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonModelValue,PARA_UI_VALUE_POS_X,PARA_UI_POS_Y+PARA_UI_VALUE_V);
+ lv_obj_set_event_cb_mks(buttonModelValue, event_handler,ID_WIFI_MODEL, NULL,0);
+ lv_imgbtn_set_src(buttonModelValue, LV_BTN_STATE_REL, "F:/bmp_blank_sel.bin");
+ lv_imgbtn_set_src(buttonModelValue, LV_BTN_STATE_PR, "F:/bmp_blank_sel.bin");
+ lv_imgbtn_set_style(buttonModelValue, LV_BTN_STATE_PR, &style_para_value_pre);
+ lv_imgbtn_set_style(buttonModelValue, LV_BTN_STATE_REL, &style_para_value_pre);
+ lv_btn_set_layout(buttonModelValue, LV_LAYOUT_OFF);
+ labelModelValue = lv_label_create(buttonModelValue, NULL);
+
+ line1 = lv_line_create(scr, NULL);
+ lv_ex_line(line1,line_points[0]);
+
+ labelNameText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelNameText, &tft_style_label_rel);
+ lv_obj_set_pos(labelNameText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+
+ buttonNameValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonNameValue,PARA_UI_VALUE_POS_X,PARA_UI_POS_Y*2+PARA_UI_VALUE_V);
+ lv_obj_set_size(buttonNameValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonNameValue, event_handler,ID_WIFI_NAME, NULL,0);
+ lv_btn_set_style(buttonNameValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonNameValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelNameValue = lv_label_create(buttonNameValue, NULL);
+
+ line2 = lv_line_create(scr, NULL);
+ lv_ex_line(line2,line_points[1]);
+
+ labelPassWordText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelPassWordText, &tft_style_label_rel);
+ lv_obj_set_pos(labelPassWordText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+
+ buttonPassWordValue = lv_btn_create(scr, NULL);
+ lv_obj_set_pos(buttonPassWordValue,PARA_UI_VALUE_POS_X,PARA_UI_POS_Y*3+PARA_UI_VALUE_V);
+ lv_obj_set_size(buttonPassWordValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+ lv_obj_set_event_cb_mks(buttonPassWordValue, event_handler,ID_WIFI_PASSWORD, NULL,0);
+ lv_btn_set_style(buttonPassWordValue, LV_BTN_STYLE_REL, &style_para_value);
+ lv_btn_set_style(buttonPassWordValue, LV_BTN_STYLE_PR, &style_para_value);
+ labelPassWordValue = lv_label_create(buttonPassWordValue, NULL);
+
+ line3 = lv_line_create(scr, NULL);
+ lv_ex_line(line3,line_points[2]);
+
+ labelCloudText = lv_label_create(scr, NULL);
+ lv_obj_set_style(labelCloudText, &tft_style_label_rel);
+ lv_obj_set_pos(labelCloudText, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+ lv_label_set_text(labelCloudText, machine_menu.wifiCloud);
+
+ buttonCloudValue = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_pos(buttonCloudValue,PARA_UI_STATE_POS_X,PARA_UI_POS_Y*4+PARA_UI_STATE_V);
+ if (gCfgItems.cloud_enable) {
+ lv_imgbtn_set_src(buttonCloudValue, LV_BTN_STATE_REL, "F:/bmp_enable.bin");
+ lv_imgbtn_set_src(buttonCloudValue, LV_BTN_STATE_PR, "F:/bmp_enable.bin");
+ }
+ else {
+ lv_imgbtn_set_src(buttonCloudValue, LV_BTN_STATE_REL, "F:/bmp_disable.bin");
+ lv_imgbtn_set_src(buttonCloudValue, LV_BTN_STATE_PR, "F:/bmp_disable.bin");
+ }
+ lv_obj_set_event_cb_mks(buttonCloudValue, event_handler,ID_WIFI_CLOUD, NULL,0);
+ lv_imgbtn_set_style(buttonCloudValue, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonCloudValue, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_btn_set_layout(buttonCloudValue, LV_LAYOUT_OFF);
+ labelCloudValue = lv_label_create(buttonCloudValue, NULL);
+
+ line4 = lv_line_create(scr, NULL);
+ lv_ex_line(line4,line_points[3]);
+
+ buttonConfig = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonConfig, event_handler,ID_WIFI_CONFIG, NULL,0);
+ lv_imgbtn_set_src(buttonConfig, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonConfig, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_style(buttonConfig, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonConfig, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_obj_set_pos(buttonConfig, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
+ lv_btn_set_layout(buttonConfig, LV_LAYOUT_OFF);
+ labelConfig = lv_label_create(buttonConfig, NULL);
+
+ buttonBack = lv_imgbtn_create(scr, NULL);
+ lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_WIFI_RETURN, NULL, 0);
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+ lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+ lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+ lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+ label_Back = lv_label_create(buttonBack, NULL);
+
+ if (gCfgItems.multiple_language !=0) {
+ if (gCfgItems.wifi_mode_sel == AP_MODEL) {
+ lv_label_set_text(labelModelValue, WIFI_AP_TEXT);
+ lv_obj_align(labelModelValue, buttonModelValue, LV_ALIGN_CENTER,0, 0);
+ }
+ else {
+ lv_label_set_text(labelModelValue, WIFI_STA_TEXT);
+ lv_obj_align(labelModelValue, buttonModelValue, LV_ALIGN_CENTER,0, 0);
+ }
+ memset(public_buf_m,0,sizeof(public_buf_m));
+ strcat(public_buf_m,machine_menu.wifiName);
+ strcat(public_buf_m,(const char *)uiCfg.wifi_name);
+ lv_label_set_text(labelNameText,public_buf_m);
+
+ lv_label_set_text(labelNameValue,machine_menu.wifiEdit);
+ lv_obj_align(labelNameValue, buttonNameValue, LV_ALIGN_CENTER,0, 0);
+
+ memset(public_buf_m,0,sizeof(public_buf_m));
+ strcat(public_buf_m,machine_menu.wifiPassWord);
+ strcat(public_buf_m,(const char *)uiCfg.wifi_key);
+ lv_label_set_text(labelPassWordText,public_buf_m);
+
+ lv_label_set_text(labelPassWordValue,machine_menu.wifiEdit);
+ lv_obj_align(labelPassWordValue, buttonPassWordValue, LV_ALIGN_CENTER,0, 0);
+
+ lv_label_set_text(labelCloudValue, gCfgItems.cloud_enable ? machine_menu.enable : machine_menu.disable);
+ lv_obj_align(labelCloudValue, buttonCloudValue, LV_ALIGN_CENTER,0, 0);
+
+ lv_label_set_text(labelConfig,machine_menu.wifiConfig);
+ lv_obj_align(labelConfig, buttonConfig, LV_ALIGN_CENTER,0, 0);
+
+ lv_label_set_text(label_Back, common_menu.text_back);
+ lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER,0, 0);
+ }
+
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) {
+ lv_group_add_obj(g, buttonModelValue);
+ lv_group_add_obj(g, buttonNameValue);
+ lv_group_add_obj(g, buttonPassWordValue);
+ lv_group_add_obj(g, buttonCloudValue);
+ lv_group_add_obj(g, buttonConfig);
+ lv_group_add_obj(g, buttonBack);
+ }
+ #endif
+}
+
+void lv_clear_wifi_settings() {
+ #if HAS_ROTARY_ENCODER
+ if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+ #endif
+ lv_obj_del(scr);
+}
+
+#endif // USE_WIFI_FUNCTION
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.h
new file mode 100644
index 0000000000..c0d6e0ccdd
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_settings.h
@@ -0,0 +1,36 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+#define WIFI_AP_TEXT "AP"
+#define WIFI_STA_TEXT "STA"
+
+extern void lv_draw_wifi_settings(void);
+extern void lv_clear_wifi_settings();
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.cpp
new file mode 100644
index 0000000000..50fa0aaf99
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.cpp
@@ -0,0 +1,85 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#include "../../../../../Configuration.h"
+#include "../../../../module/temperature.h"
+
+static lv_obj_t * scr;
+
+TIPS_TYPE wifi_tips_type;
+TIPS_DISP tips_disp;
+tips_menu_def tips_menu;
+
+void lv_draw_wifi_tips(void) {
+ static lv_obj_t * text_tips,*wifi_name;
+
+ if (disp_state_stack._disp_state[disp_state_stack._disp_index] != WIFI_TIPS_UI) {
+ disp_state_stack._disp_index++;
+ disp_state_stack._disp_state[disp_state_stack._disp_index] = WIFI_TIPS_UI;
+ }
+ disp_state = WIFI_TIPS_UI;
+
+ scr = lv_obj_create(NULL, NULL);
+
+ lv_obj_set_style(scr, &tft_style_scr);
+ lv_scr_load(scr);
+ lv_obj_clean(scr);
+ lv_refr_now(lv_refr_get_disp_refreshing());
+
+ text_tips = lv_label_create(scr, NULL);
+ lv_obj_set_style(text_tips, &tft_style_label_rel);
+
+ wifi_name = lv_label_create(scr, NULL);
+ lv_obj_set_style(wifi_name, &tft_style_label_rel);
+
+ if (wifi_tips_type == TIPS_TYPE_JOINING) {
+ lv_label_set_text(text_tips, tips_menu.joining);
+ lv_obj_align(text_tips, NULL, LV_ALIGN_CENTER,0, -60);
+ }
+ else if (wifi_tips_type == TIPS_TYPE_TAILED_JOIN) {
+ lv_label_set_text(text_tips, tips_menu.failedJoin);
+ lv_obj_align(text_tips, NULL, LV_ALIGN_CENTER,0, -60);
+ }
+ else if (wifi_tips_type == TIPS_TYPE_WIFI_CONECTED) {
+ lv_label_set_text(text_tips, tips_menu.wifiConected);
+ lv_obj_align(text_tips, NULL, LV_ALIGN_CENTER,0, -60);
+ }
+
+ lv_label_set_text(wifi_name, (const char *)wifi_list.wifiName[wifi_list.nameIndex]);
+ lv_obj_align(wifi_name, NULL, LV_ALIGN_CENTER,0, -20);
+
+ tips_disp.timer = TIPS_TIMER_START;
+ tips_disp.timer_count = 0;
+}
+
+void lv_clear_wifi_tips() { lv_obj_del(scr); }
+
+#endif // USE_WIFI_FUNCTION
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.h
new file mode 100644
index 0000000000..4f81f00a43
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_wifi_tips.h
@@ -0,0 +1,51 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+
+extern void lv_draw_wifi_tips(void);
+extern void lv_clear_wifi_tips();
+
+typedef enum {
+ TIPS_TYPE_JOINING,
+ TIPS_TYPE_TAILED_JOIN,
+ TIPS_TYPE_WIFI_CONECTED
+} TIPS_TYPE;
+extern TIPS_TYPE wifi_tips_type;
+
+typedef struct {
+ unsigned char timer;
+ unsigned int timer_count;
+} TIPS_DISP;
+extern TIPS_DISP tips_disp;
+
+#define TIPS_TIMER_START 1
+#define TIPS_TIMER_STOP 0
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
+
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/irq_overrid.cpp b/Marlin/src/lcd/extui/lib/mks_ui/irq_overrid.cpp
new file mode 100644
index 0000000000..cf64571292
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/irq_overrid.cpp
@@ -0,0 +1,69 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "draw_ui.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#include "wifiSerial.h"
+
+#include
+#include
+#include
+#include
+#include
+
+#include "../../../../inc/MarlinConfig.h"
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+#define WIFI_IO1_SET() WRITE(WIFI_IO1_PIN, HIGH);
+#define WIFI_IO1_RESET() WRITE(WIFI_IO1_PIN, LOW);
+
+void __irq_usart1(void) {
+ WIFISERIAL.wifi_usart_irq(USART1_BASE);
+ if (wifi_link_state == WIFI_TRANS_FILE) {
+ if (WIFISERIAL.available() == (400)) WIFI_IO1_SET();
+ if (WIFISERIAL.wifi_rb_is_full()) {
+ if (esp_state == TRANSFER_IDLE) esp_state = TRANSFERING;
+ if (storeRcvData(UART_RX_BUFFER_SIZE)) {
+ if (wifiTransError.flag != 0x1) WIFI_IO1_RESET();
+ }
+ else {
+ WIFI_IO1_SET();
+ esp_state = TRANSFER_STORE;
+ }
+ }
+ }
+}
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
+
+#endif // USE_WIFI_FUNCTION
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp b/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp
index 297ba723de..743863d1f7 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp
@@ -38,7 +38,10 @@
#include "../../../../module/temperature.h"
#include "../../../../sd/cardreader.h"
-uint8_t pw_det_sta, pw_off_sta, mt_det_sta, mt_det2_sta, mt_det3_sta;
+uint8_t pw_det_sta, pw_off_sta, mt_det_sta, mt_det3_sta;
+#if PIN_EXISTS(MT_DET_2)
+ uint8_t mt_det2_sta;
+#endif
uint8_t endstopx1_sta, endstopx2_sta, endstopy1_sta, endstopy2_sta, endstopz1_sta, endstopz2_sta;
void test_gpio_readlevel_L() {
#if ENABLED(MKS_TEST)
@@ -46,15 +49,17 @@ void test_gpio_readlevel_L() {
WRITE(WIFI_IO0_PIN, HIGH);
itest = 10000;
while (itest--);
- pw_det_sta = (READ(POWER_LOSS_PIN) == 0);
- pw_off_sta = (READ(PS_ON_PIN) == 0);
+ pw_det_sta = (READ(MKS_TEST_POWER_LOSS_PIN) == 0);
+ pw_off_sta = (READ(MKS_TEST_PS_ON_PIN) == 0);
mt_det_sta = (READ(MT_DET_1_PIN) == 0);
- mt_det2_sta = (READ(MT_DET_2_PIN) == 0);
+ #if PIN_EXISTS(MT_DET_2)
+ mt_det2_sta = (READ(MT_DET_2_PIN) == 0);
+ #endif
//mt_det3_sta = (READ(FIL_RUNOUT_3_PIN) == 0);
endstopx1_sta = (READ(X_MIN_PIN) == 0);
- endstopx2_sta = (READ(X_MAX_PIN) == 0);
+ //endstopx2_sta = (READ(X_MAX_PIN) == 0);
endstopy1_sta = (READ(Y_MIN_PIN) == 0);
- endstopy2_sta = (READ(Y_MAX_PIN) == 0);
+ //endstopy2_sta = (READ(Y_MAX_PIN) == 0);
endstopz1_sta = (READ(Z_MIN_PIN) == 0);
endstopz2_sta = (READ(Z_MAX_PIN) == 0);
#endif
@@ -66,15 +71,17 @@ void test_gpio_readlevel_H() {
WRITE(WIFI_IO0_PIN, LOW);
itest = 10000;
while (itest--);
- pw_det_sta = (READ(POWER_LOSS_PIN) == 1);
- pw_off_sta = (READ(PS_ON_PIN) == 1);
+ pw_det_sta = (READ(MKS_TEST_POWER_LOSS_PIN) == 1);
+ pw_off_sta = (READ(MKS_TEST_PS_ON_PIN) == 1);
mt_det_sta = (READ(MT_DET_1_PIN) == 1);
- mt_det2_sta = (READ(MT_DET_2_PIN) == 1);
+ #if PIN_EXISTS(MT_DET_2)
+ mt_det2_sta = (READ(MT_DET_2_PIN) == 1);
+ #endif
//mt_det3_sta = (READ(MT_DET_3_PIN) == 1);
endstopx1_sta = (READ(X_MIN_PIN) == 1);
- endstopx2_sta = (READ(X_MAX_PIN) == 1);
+ //endstopx2_sta = (READ(X_MAX_PIN) == 1);
endstopy1_sta = (READ(Y_MIN_PIN) == 1);
- endstopy2_sta = (READ(Y_MAX_PIN) == 1);
+ //endstopy2_sta = (READ(Y_MAX_PIN) == 1);
endstopz1_sta = (READ(Z_MIN_PIN) == 1);
endstopz2_sta = (READ(Z_MAX_PIN) == 1);
#endif
@@ -83,20 +90,22 @@ void test_gpio_readlevel_H() {
void init_test_gpio() {
#ifdef MKS_TEST
SET_INPUT_PULLUP(X_MIN_PIN);
- SET_INPUT_PULLUP(X_MAX_PIN);
+ //SET_INPUT_PULLUP(X_MAX_PIN);
SET_INPUT_PULLUP(Y_MIN_PIN);
- SET_INPUT_PULLUP(Y_MAX_PIN);
+ //SET_INPUT_PULLUP(Y_MAX_PIN);
SET_INPUT_PULLUP(Z_MIN_PIN);
SET_INPUT_PULLUP(Z_MAX_PIN);
SET_OUTPUT(WIFI_IO0_PIN);
SET_INPUT_PULLUP(MT_DET_1_PIN);
- SET_INPUT_PULLUP(MT_DET_2_PIN);
+ #if PIN_EXISTS(MT_DET_2)
+ SET_INPUT_PULLUP(MT_DET_2_PIN);
+ #endif
//SET_INPUT_PULLUP(MT_DET_3_PIN);
- SET_INPUT_PULLUP(POWER_LOSS_PIN);
- SET_INPUT_PULLUP(PS_ON_PIN);
+ SET_INPUT_PULLUP(MKS_TEST_POWER_LOSS_PIN);
+ SET_INPUT_PULLUP(MKS_TEST_PS_ON_PIN);
SET_INPUT_PULLUP(SERVO0_PIN);
@@ -104,14 +113,28 @@ void init_test_gpio() {
SET_OUTPUT(Y_ENABLE_PIN);
SET_OUTPUT(Z_ENABLE_PIN);
SET_OUTPUT(E0_ENABLE_PIN);
- SET_OUTPUT(E1_ENABLE_PIN);
+ #if !MB(MKS_ROBIN_E3P)
+ SET_OUTPUT(E1_ENABLE_PIN);
+ #endif
WRITE(X_ENABLE_PIN, LOW);
WRITE(Y_ENABLE_PIN, LOW);
WRITE(Z_ENABLE_PIN, LOW);
WRITE(E0_ENABLE_PIN, LOW);
- WRITE(E1_ENABLE_PIN, LOW);
+ #if !MB(MKS_ROBIN_E3P)
+ WRITE(E1_ENABLE_PIN, LOW);
+ #endif
//WRITE(E2_ENABLE_PIN, LOW);
+
+ #if MB(MKS_ROBIN_E3P)
+ SET_INPUT_PULLUP(PA1);
+ SET_INPUT_PULLUP(PA3);
+ SET_INPUT_PULLUP(PC2);
+ SET_INPUT_PULLUP(PD8);
+ SET_INPUT_PULLUP(PE5);
+ SET_INPUT_PULLUP(PE6);
+ SET_INPUT_PULLUP(PE7);
+ #endif
#endif
}
@@ -124,22 +147,37 @@ void mks_test_beeper() {
#endif
}
-void mks_gpio_test(){
+void mks_gpio_test() {
#if ENABLED(MKS_TEST)
init_test_gpio();
test_gpio_readlevel_L();
test_gpio_readlevel_H();
test_gpio_readlevel_L();
- if ((pw_det_sta == 1) && (mt_det_sta == 1) && (mt_det2_sta == 1)) // &&(mt_det3_sta == 1))
+ if ((pw_det_sta == 1)
+ && (pw_off_sta == 1)
+ && (mt_det_sta == 1)
+ #if PIN_EXISTS(MT_DET_2)
+ && (mt_det2_sta == 1)
+ #endif
+ #if MB(MKS_ROBIN_E3P)
+ && (READ(PA1) == 0)
+ && (READ(PA3) == 0)
+ && (READ(PC2) == 0)
+ && (READ(PD8) == 0)
+ && (READ(PE5) == 0)
+ && (READ(PE6) == 0)
+ && (READ(PE7) == 0)
+ #endif
+ ) // &&(mt_det3_sta == 1))
disp_det_ok();
else
disp_det_error();
if ( (endstopx1_sta == 1)
- && (endstopx2_sta == 1)
+ //&& (endstopx2_sta == 1)
&& (endstopy1_sta == 1)
- && (endstopy2_sta == 1)
+ //&& (endstopy2_sta == 1)
&& (endstopz1_sta == 1)
&& (endstopz2_sta == 1)
)
@@ -149,18 +187,22 @@ void mks_gpio_test(){
#endif
}
-void mks_hardware_test(){
+void mks_hardware_test() {
#if ENABLED(MKS_TEST)
if (millis() % 2000 < 1000) {
WRITE(X_DIR_PIN, LOW);
WRITE(Y_DIR_PIN, LOW);
WRITE(Z_DIR_PIN, LOW);
WRITE(E0_DIR_PIN, LOW);
- WRITE(E1_DIR_PIN, LOW);
+ #if !MB(MKS_ROBIN_E3P)
+ WRITE(E1_DIR_PIN, LOW);
+ #endif
//WRITE(E2_DIR_PIN, LOW);
thermalManager.fan_speed[0] = 255;
//WRITE(HEATER_2_PIN, HIGH); // HE2
- WRITE(HEATER_1_PIN, HIGH); // HE1
+ #if !MB(MKS_ROBIN_E3P)
+ WRITE(HEATER_1_PIN, HIGH); // HE1
+ #endif
WRITE(HEATER_0_PIN, HIGH); // HE0
WRITE(HEATER_BED_PIN, HIGH); // HOT-BED
}
@@ -169,11 +211,15 @@ void mks_hardware_test(){
WRITE(Y_DIR_PIN, HIGH);
WRITE(Z_DIR_PIN, HIGH);
WRITE(E0_DIR_PIN, HIGH);
- WRITE(E1_DIR_PIN, HIGH);
+ #if !MB(MKS_ROBIN_E3P)
+ WRITE(E1_DIR_PIN, HIGH);
+ #endif
//WRITE(E2_DIR_PIN, HIGH);
thermalManager.fan_speed[0] = 0;
//WRITE(HEATER_2_PIN, LOW); // HE2
- WRITE(HEATER_1_PIN, LOW); // HE1
+ #if !MB(MKS_ROBIN_E3P)
+ WRITE(HEATER_1_PIN, LOW); // HE1
+ #endif
WRITE(HEATER_0_PIN, LOW); // HE0
WRITE(HEATER_BED_PIN, LOW); // HOT-BED
}
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp
index 447303a887..e629915309 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp
@@ -24,6 +24,7 @@
#if HAS_TFT_LVGL_UI
#include "string.h"
+#include "draw_ui.h"
#include "pic_manager.h"
#include "draw_ready_print.h"
#include "mks_hardware_test.h"
@@ -41,59 +42,61 @@ extern unsigned char bmp_public_buf[17 * 1024];
extern char *createFilename(char * const buffer, const dir_t &p);
#endif
-static char assets[][LONG_FILENAME_LENGTH] = {
+static const char assets[][LONG_FILENAME_LENGTH] = {
//homing screen
- "bmp_Zero.bin",
+ "bmp_zeroAll.bin",
+ "bmp_zero.bin",
"bmp_zeroX.bin",
"bmp_zeroY.bin",
"bmp_zeroZ.bin",
"bmp_manual_off.bin",
//tool screen
- "bmp_PreHeat.bin",
- "bmp_Extruct.bin",
- "bmp_Mov.bin",
+ "bmp_preHeat.bin",
+ "bmp_extruct.bin",
+ "bmp_mov.bin",
// "bmp_Zero.bin",
- "bmp_Leveling.bin",
+ "bmp_leveling.bin",
+ "bmp_filamentchange.bin",
//fan screen
"bmp_Add.bin",
"bmp_Dec.bin",
- "bmp_Speed255.bin",
- "bmp_Speed127.bin",
- "bmp_Speed0.bin",
+ "bmp_speed255.bin",
+ "bmp_speed127.bin",
+ "bmp_speed0.bin",
//preheat screen
// "bmp_Add.bin",
// "bmp_Dec.bin",
- "bmp_Speed0.bin",
+ "bmp_speed0.bin",
// "bmp_Extru2.bin",
// "bmp_Extru1.bin",
- "bmp_Bed.bin",
- "bmp_Step1_degree.bin",
- "bmp_Step5_degree.bin",
- "bmp_Step10_degree.bin",
+ "bmp_bed.bin",
+ "bmp_step1_degree.bin",
+ "bmp_step5_degree.bin",
+ "bmp_step10_degree.bin",
//extrusion screen
- "bmp_In.bin",
- "bmp_Out.bin",
- "bmp_Extru1.bin",
- #if EXTRUDERS > 1
- "bmp_Extru2.bin",
+ "bmp_in.bin",
+ "bmp_out.bin",
+ "bmp_extru1.bin",
+ #if HAS_MULTI_EXTRUDER
+ "bmp_extru2.bin",
#endif
- "bmp_Speed_high.bin",
- "bmp_Speed_slow.bin",
- "bmp_Speed_normal.bin",
- "bmp_Step1_mm.bin",
- "bmp_Step5_mm.bin",
- "bmp_Step10_mm.bin",
+ "bmp_speed_high.bin",
+ "bmp_speed_slow.bin",
+ "bmp_speed_normal.bin",
+ "bmp_step1_mm.bin",
+ "bmp_step5_mm.bin",
+ "bmp_step10_mm.bin",
//select file screen
"bmp_pageUp.bin",
"bmp_pageDown.bin",
- "bmp_Back.bin", //TODO: why two back buttons? Why not just one? (return / back)
- "bmp_Dir.bin",
- "bmp_File.bin",
+ "bmp_back.bin", //TODO: why two back buttons? Why not just one? (return / back)
+ "bmp_dir.bin",
+ "bmp_file.bin",
//move motor screen
//TODO: 6 equal icons, just in diffenct rotation... it may be optimized too
@@ -103,68 +106,69 @@ static char assets[][LONG_FILENAME_LENGTH] = {
"bmp_yDec.bin",
"bmp_zAdd.bin",
"bmp_zDec.bin",
- "bmp_Step_move0_1.bin",
- "bmp_Step_move1.bin",
- "bmp_Step_move10.bin",
+ "bmp_step_move0_1.bin",
+ "bmp_step_move1.bin",
+ "bmp_step_move10.bin",
//operation screen
"bmp_auto_off.bin",
- "bmp_Speed.bin",
+ "bmp_speed.bin",
//"bmp_Mamual.bin", //TODO: didn't find it.. changed to bmp_manual_off.bin
- "bmp_Fan.bin",
- //"bmp_PreHeat.bin",
- //"bmp_Extruct.bin",
- // "bmp_Mov.bin",
+ "bmp_fan.bin",
+ "bmp_temp.bin",
+ "bmp_extrude_opr.bin",
+ "bmp_move_opr.bin",
//change speed screen
- "bmp_Step1_percent.bin",
- "bmp_Step5_percent.bin",
- "bmp_Step10_percent.bin",
+ "bmp_step1_percent.bin",
+ "bmp_step5_percent.bin",
+ "bmp_step10_percent.bin",
"bmp_extruct_sel.bin",
"bmp_mov_changespeed.bin",
// "bmp_extrude_opr.bin", equal to "bmp_Extruct.bin"
"bmp_mov_sel.bin",
+ "bmp_speed_extruct.bin",
//printing screen
- "bmp_Pause.bin",
- "bmp_Resume.bin",
- "bmp_Stop.bin",
- "bmp_Ext1_state.bin",
- #if EXTRUDERS > 1
- "bmp_Ext2_state.bin",
+ "bmp_pause.bin",
+ "bmp_resume.bin",
+ "bmp_stop.bin",
+ "bmp_ext1_state.bin",
+ #if HAS_MULTI_EXTRUDER
+ "bmp_ext2_state.bin",
#endif
- "bmp_Bed_state.bin",
- "bmp_Fan_state.bin",
- "bmp_Time_state.bin",
- "bmp_Zpos_state.bin",
- "bmp_Operate.bin",
+ "bmp_bed_state.bin",
+ "bmp_fan_state.bin",
+ "bmp_time_state.bin",
+ "bmp_zpos_state.bin",
+ "bmp_operate.bin",
//manual leval screen (only if disabled auto level)
#if DISABLED(AUTO_BED_LEVELING_BILINEAR)
- "bmp_Leveling1.bin",
- "bmp_Leveling2.bin",
- "bmp_Leveling3.bin",
- "bmp_Leveling4.bin",
- "bmp_Leveling5.bin",
+ "bmp_leveling1.bin",
+ "bmp_leveling2.bin",
+ "bmp_leveling3.bin",
+ "bmp_leveling4.bin",
+ "bmp_leveling5.bin",
#endif
//lang select screen
#if HAS_LANG_SELECT_SCREEN
- "bmp_Language.bin",
+ "bmp_language.bin",
"bmp_simplified_cn.bin",
"bmp_simplified_cn_sel.bin",
"bmp_traditional_cn.bin",
"bmp_traditional_cn_sel.bin",
- "bmp_English.bin",
- "bmp_English_sel.bin",
- "bmp_Russian.bin",
- "bmp_Russian_sel.bin",
- "bmp_Spanish.bin",
- "bmp_Spanish_sel.bin",
- "bmp_French.bin",
- "bmp_French_sel.bin",
- "bmp_Italy.bin",
- "bmp_Italy_sel.bin",
+ "bmp_english.bin",
+ "bmp_english_sel.bin",
+ "bmp_russian.bin",
+ "bmp_russian_sel.bin",
+ "bmp_spanish.bin",
+ "bmp_spanish_sel.bin",
+ "bmp_french.bin",
+ "bmp_french_sel.bin",
+ "bmp_italy.bin",
+ "bmp_italy_sel.bin",
#endif // HAS_LANG_SELECT_SCREEN
// gcode preview
@@ -177,21 +181,15 @@ static char assets[][LONG_FILENAME_LENGTH] = {
#endif
// settings screen
- "bmp_About.bin",
+ "bmp_about.bin",
//"bmp_Language.bin",
//"bmp_Fan.bin",
//"bmp_manual_off.bin",
//start screen
"bmp_printing.bin",
- "bmp_Set.bin",
- "bmp_Tool.bin",
-
- #if ENABLED(HAS_STEALTHCHOP)
- //"bmp_back70x40.bin",
- "bmp_disable.bin",
- "bmp_enable.bin",
- #endif
+ "bmp_set.bin",
+ "bmp_tool.bin",
// settings screen
"bmp_eeprom_settings.bin",
@@ -202,14 +200,27 @@ static char assets[][LONG_FILENAME_LENGTH] = {
"bmp_arrow.bin",
"bmp_back70x40.bin",
"bmp_value_blank.bin",
- "bmp_Return.bin"
+ "bmp_blank_sel.bin",
+ "bmp_disable.bin",
+ "bmp_enable.bin",
+ "bmp_return.bin",
+
+ #if ENABLED(USE_WIFI_FUNCTION)
+ //wifi screen
+ "bmp_wifi.bin",
+ #endif
+
+ //babystep screen
+ "bmp_baby_move0_01.bin",
+ "bmp_baby_move0_05.bin",
+ "bmp_baby_move0_1.bin"
};
#if HAS_SPI_FLASH_FONT
static char fonts[][LONG_FILENAME_LENGTH] = { "FontUNIGBK.bin" };
#endif
-static uint8_t currentFlashPage = 0;
+uint8_t currentFlashPage = 0;
uint32_t lv_get_pic_addr(uint8_t *Pname) {
uint8_t Pic_cnt;
@@ -253,8 +264,13 @@ const char *bakPath = "_assets";
void spiFlashErase_PIC() {
volatile uint32_t pic_sectorcnt = 0;
W25QXX.init(SPI_QUARTER_SPEED);
- for (pic_sectorcnt = 0; pic_sectorcnt < PIC_SIZE_xM * 1024 / 64; pic_sectorcnt++)
- W25QXX.SPI_FLASH_BlockErase(PICINFOADDR + pic_sectorcnt * 64 * 1024);
+ //erase 0x001000 -64K
+ for (pic_sectorcnt = 0; pic_sectorcnt < (64 - 4) / 4; pic_sectorcnt++) {
+ W25QXX.SPI_FLASH_SectorErase(PICINFOADDR + pic_sectorcnt * 4 * 1024);
+ }
+ //erase 64K -- 6M
+ for (pic_sectorcnt = 0; pic_sectorcnt < (PIC_SIZE_xM * 1024 / 64 - 1); pic_sectorcnt++)
+ W25QXX.SPI_FLASH_BlockErase((pic_sectorcnt + 1) * 64 * 1024);
}
#if HAS_SPI_FLASH_FONT
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h
index 24b2945d73..b1bd88a60d 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h
@@ -21,7 +21,7 @@
*/
#pragma once
-#include "../../../../inc/MarlinConfig.h"
+#include "../../../../inc/MarlinConfigPre.h"
#include "../../../../libs/W25Qxx.h"
@@ -119,9 +119,18 @@
// Flash flag
#define REFLSHE_FLGA_ADD (0X800000-32)
-#define FLASH_INF_VALID_FLAG 0xAA558761
+
// SD card information first addr
#define VAR_INF_ADDR 0x000000
+#define FLASH_INF_VALID_FLAG 0x20200831
+
+//Store some gcode commands, such as auto leveling commands
+#define GCODE_COMMAND_ADDR VAR_INF_ADDR + 3*1024
+#define AUTO_LEVELING_COMMAND_ADDR GCODE_COMMAND_ADDR
+#define OTHERS_COMMAND_ADDR_1 AUTO_LEVELING_COMMAND_ADDR + 100
+#define OTHERS_COMMAND_ADDR_2 OTHERS_COMMAND_ADDR_1 + 100
+#define OTHERS_COMMAND_ADDR_3 OTHERS_COMMAND_ADDR_2 + 100
+#define OTHERS_COMMAND_ADDR_4 OTHERS_COMMAND_ADDR_3 + 100
#ifdef __cplusplus
extern "C" { /* C-declarations for C++ */
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/printer_operation.cpp b/Marlin/src/lcd/extui/lib/mks_ui/printer_operation.cpp
index 2d03373a7f..0e4526734c 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/printer_operation.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/printer_operation.cpp
@@ -53,6 +53,11 @@ void printer_state_polling() {
planner.synchronize();
gcode.process_subcommands_now_P(PSTR("M25"));
+
+ //save the positon
+ uiCfg.current_x_position_bak = current_position.x;
+ uiCfg.current_y_position_bak = current_position.y;
+
if (gCfgItems.pausePosZ != (float)-1) {
gcode.process_subcommands_now_P(PSTR("G91"));
ZERO(public_buf_l);
@@ -66,6 +71,7 @@ void printer_state_polling() {
gcode.process_subcommands_now(public_buf_l);
}
uiCfg.print_state = PAUSED;
+ uiCfg.current_e_position_bak = current_position.e;
// #if ENABLED(POWER_LOSS_RECOVERY)
// if (recovery.enabled) recovery.save(true);
@@ -83,7 +89,19 @@ void printer_state_polling() {
if (uiCfg.print_state == RESUMING) {
if (IS_SD_PAUSED()) {
- gcode.process_subcommands_now_P(PSTR("M24\nG91\nG1 Z-5\nG90"));
+ if (gCfgItems.pausePosX != (float)-1 && gCfgItems.pausePosY != (float)-1) {
+ ZERO(public_buf_m);
+ sprintf_P(public_buf_m, PSTR("G1 X%.1f Y%.1f"), uiCfg.current_x_position_bak, uiCfg.current_y_position_bak);
+ gcode.process_subcommands_now(public_buf_m);
+ }
+ if (gCfgItems.pausePosZ != (float)-1) {
+ gcode.process_subcommands_now_P(PSTR("G91"));
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("G1 Z-%.1f"), gCfgItems.pausePosZ);
+ gcode.process_subcommands_now(public_buf_l);
+ gcode.process_subcommands_now_P(PSTR("G90"));
+ }
+ gcode.process_subcommands_now_P(PSTR("M24"));
uiCfg.print_state = WORKING;
start_print_time();
@@ -108,11 +126,25 @@ void printer_state_polling() {
}
#endif
- if (gCfgItems.pause_reprint == 1) {
- gcode.process_subcommands_now_P(PSTR("G91\nG1 Z-5\nG90"));
- }
recovery.resume();
-
+ #if 0
+ // Move back to the saved XY
+ char str_1[16], str_2[16];
+ ZERO(public_buf_m);
+ sprintf_P(public_buf_m, PSTR("G1 X%s Y%s F2000"),
+ dtostrf(recovery.info.current_position.x, 1, 3, str_1),
+ dtostrf(recovery.info.current_position.y, 1, 3, str_2)
+ );
+ gcode.process_subcommands_now(public_buf_m);
+
+ if ((gCfgItems.pause_reprint) == 1 && (gCfgItems.pausePosZ != (float)-1)) {
+ gcode.process_subcommands_now_P(PSTR("G91"));
+ ZERO(public_buf_l);
+ sprintf_P(public_buf_l, PSTR("G1 Z-%.1f"), gCfgItems.pausePosZ);
+ gcode.process_subcommands_now(public_buf_l);
+ gcode.process_subcommands_now_P(PSTR("G90"));
+ }
+ #endif
uiCfg.print_state = WORKING;
start_print_time();
@@ -123,6 +155,8 @@ void printer_state_polling() {
if (uiCfg.print_state == WORKING)
filament_check();
+
+ TERN_(USE_WIFI_FUNCTION, wifi_looping());
}
void filament_pin_setup() {
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_en.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_en.h
index 54e06f5826..fa8d5a52a4 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_en.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_en.h
@@ -46,8 +46,8 @@
#define MACHINE_PARA_TITLE_EN "Config"
#define MACHINE_TYPE_CNOFIG_EN "Machine settings"
-#define TEMPERATURE_CONFIG_EN "Temperature settings"
#define MOTOR_CONFIG_EN "Motor settings"
+#define MACHINE_LEVELING_CONFIG_EN "Leveling settings"
#define ADVANCE_CONFIG_EN "Adavance settings"
#define MACHINE_CONFIG_TITLE_EN "Machine Settings"
@@ -56,7 +56,6 @@
#define MACHINE_HOMEDIR_EN "Home direction"
#define MACHINE_ENDSTOP_TYPE_EN "Endstop type"
#define MACHINE_FILAMENT_CONFIG_EN "Filament settings"
-#define MACHINE_LEVELING_CONFIG_EN "Leveling settings"
#define MACHINE_TYPE_CONFIG_TITLE_EN "Machine Settings>Machine type"
#define MACHINE_TYPE_XYZ_EN "XYZ Machine"
@@ -91,18 +90,18 @@
#define ENDSTOP_OPENED_EN "Open"
#define ENDSTOP_CLOSED_EN "Close"
-#define FILAMENT_CONF_TITLE_EN "Filament settings"
-#define FILAMENT_IN_TEMPERATURE_EN "Load temperature"
+#define FILAMENT_CONF_TITLE_EN "Machine Settings>Filament settings"
#define FILAMENT_IN_LENGTH_EN "Load length"
#define FILAMENT_IN_SPEED_EN "Load speed"
-#define FILAMENT_OUT_TEMPERATURE_EN "Unload temperature"
+#define FILAMENT_TEMPERATURE_EN "Filament temperature"
#define FILAMENT_OUT_LENGTH_EN "Unload length"
#define FILAMENT_OUT_SPEED_EN "Unload speed"
-#define LEVELING_CONF_TITLE_EN "Leveling settings"
+#define LEVELING_CONF_TITLE_EN "Machine Settings>Leveling settings"
#define LEVELING_PARA_CONF_EN "Leveling settings"
-#define LEVELING_DELTA_EN "delta machine leveling"
-#define LEVELING_XYZ_EN "Manual leveling coordinate settings"
+#define LEVELING_MANUAL_POS_EN "Manual leveling coordinate settings"
+#define LEVELING_AUTO_COMMAND_EN "AutoLeveling command settings"
+#define LEVELING_AUTO_ZOFFSET_EN "Nozzle-to-probe offsets settings"
#define LEVELING_PARA_CONF_TITLE_EN "leveling setting"
#define AUTO_LEVELING_ENABLE_EN "Enable auto leveling"
@@ -226,6 +225,9 @@
#define HAVE_UPS_EN "Has UPS power supply"
#define Z2_AND_Z2ENDSTOP_CONF_EN "Z2 Settings"
#define ENABLE_PINS_CONF_EN "Enable pins level settings"
+#define WIFI_SETTINGS_EN "Wi-Fi parameter settings"
+#define HOMING_SENSITIVITY_CONF_EN "Homing sensitivity settings"
+#define ENCODER_SETTINGS_EN "Rotary encoder settings"
#define Z2_AND_Z2ENDSTOP_CONF_TITLE_EN "Z2 Settings"
#define Z2_ENABLE_EN "Z2 Enable"
@@ -243,6 +245,29 @@
#define PAUSE_POSITION_Y_EN "Y axis position (Absolute position,-1 invalid)"
#define PAUSE_POSITION_Z_EN "Z axis position (Relative position,-1 invalid)"
+#define WIFI_SETTINGS_TITLE_EN "Machine Settings>Wi-Fi Parameter"
+#define WIFI_SETTINGS_MODE_EN "Wi-Fi Mode"
+#define WIFI_SETTINGS_NAME_EN "Wi-Fi Name: "
+#define WIFI_SETTINGS_PASSWORD_EN "Wi-Fi Password: "
+#define WIFI_SETTINGS_CLOUD_EN "Do you use cloud services?"
+#define WIFI_SETTINGS_CONFIG_EN "Config"
+#define WIFI_SETTINGS_EDIT_EN "Edit"
+#define WIFI_CONFIG_TIPS_EN "Wi-Fi configuration?"
+
+#define OFFSET_TITLE_EN "Machine Settings>Offset"
+#define OFFSET_X_EN "X offset"
+#define OFFSET_Y_EN "Y offset"
+#define OFFSET_Z_EN "Z offset"
+
+#define HOMING_SENSITIVITY_CONF_TITLE_EN "Machine Settings>Sensitivity"
+#define X_SENSITIVITY_EN "X Axis Sensitivity"
+#define Y_SENSITIVITY_EN "Y Axis Sensitivity"
+#define Z_SENSITIVITY_EN "Z Axis Sensitivity"
+#define Z2_SENSITIVITY_EN "Z2 Axis Sensitivity"
+
+#define ENCODER_CONF_TITLE_EN "Machine Settings>Rotary encoder settings"
+#define ENCODER_CONF_TEXT_EN "Is the encoder function used?"
+
#define TOOL_TEXT_EN "Tool"
#define PREHEAT_TEXT_EN "Preheat"
#define MOVE_TEXT_EN "Move"
@@ -429,10 +454,6 @@
#define STEP_5PERCENT_EN "5%"
#define STEP_10PERCENT_EN "10%"
-#define ZOFFSET_EN "Z Offset"
-#define ZOFFSET_INC_EN "Add"
-#define ZOFFSET_DEC_EN "Dec"
-
#define TITLE_READYPRINT_EN "ReadyPrint"
#define TITLE_PREHEAT_EN "Preheat"
#define TITLE_MOVE_EN "Move"
@@ -455,7 +476,6 @@
#define TITLE_CLOUD_TEXT_EN "Cloud"
#define TITLE_DIALOG_CONFIRM_EN "Confirm"
#define TITLE_FILESYS_EN "FileSys"
-#define TITLE_ZOFFSET_EN "Z Offset"
#define AUTO_SHUTDOWN_EN "Auto"
#define MANUAL_SHUTDOWN_EN "Manual"
@@ -494,11 +514,9 @@
#define TEXT_WIFI_SYMBOL_EN "#+="
#define TEXT_WIFI_PASSWORD_EN "Password"
-#define TEXT_WIFI_POINT_BOLD_EN "`"
-
-#define TEXT_WIFI_JOINING_EN "Joining\nNetwork..."
-#define TEXT_WIFI_FAILED_JOIN_EN "Failed to\nJoin Wi-Fi"
-#define TEXT_WIFI_WIFI_CONECTED_EN "Wi-Fi\nConnected"
+#define TEXT_WIFI_JOINING_EN "Joining Network..."
+#define TEXT_WIFI_FAILED_JOIN_EN "Failed to Join Wi-Fi"
+#define TEXT_WIFI_WIFI_CONECTED_EN "Wi-Fi Connected"
#define TEXT_BUTTON_DISCONECTED_EN "Disconnect"
#define TEXT_WIFI_FORGET_EN "Forget Network"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_fr.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_fr.h
index 3fe95654b1..6944d6b235 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_fr.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_fr.h
@@ -208,10 +208,6 @@
#define STEP_5PERCENT_FR "5%"
#define STEP_10PERCENT_FR "10%"
-#define ZOFFSET_FR "Z Offset"
-#define ZOFFSET_INC_FR "Ajouter"
-#define ZOFFSET_DEC_FR "Réduire"
-
#define TITLE_READYPRINT_FR "Prête"
#define TITLE_PREHEAT_FR "Préchauffe"
#define TITLE_MOVE_FR "Déplace"
@@ -234,7 +230,6 @@
#define TITLE_CLOUD_TEXT_FR "Cloud"
#define TITLE_DIALOG_CONFIRM_FR "Confirm"
#define TITLE_FILESYS_FR "FileSys"
-#define TITLE_ZOFFSET_FR "Z Offset"
#define DIALOG_CLOSE_MACHINE_FR "Closing machine......"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_it.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_it.h
index aef6cfaf96..f64ca4df79 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_it.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_it.h
@@ -205,10 +205,6 @@
#define STEP_5PERCENT_IT "5%"
#define STEP_10PERCENT_IT "10%"
-#define ZOFFSET_IT "Z Offset"
-#define ZOFFSET_INC_IT "Add"
-#define ZOFFSET_DEC_IT "Dec"
-
#define TITLE_READYPRINT_IT "Pronto"
#define TITLE_PREHEAT_IT "Preris"
#define TITLE_MOVE_IT "Muovi"
@@ -231,7 +227,6 @@
#define TITLE_CLOUD_TEXT_IT "Cloud"
#define TITLE_DIALOG_CONFIRM_IT "Confirm"
#define TITLE_FILESYS_IT "FileSys"
-#define TITLE_ZOFFSET_IT "Z Offset"
#define AUTO_SHUTDOWN_IT "Auto"
#define MANUAL_SHUTDOWN_IT "Manuale"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_ru.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_ru.h
index 2ec39ab016..9f695b376b 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_ru.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_ru.h
@@ -205,10 +205,6 @@
#define STEP_5PERCENT_RU "5%"
#define STEP_10PERCENT_RU "10%"
-#define ZOFFSET_RU "Z Offset"
-#define ZOFFSET_INC_RU "добавить"
-#define ZOFFSET_DEC_RU "уменьшить"
-
#define TITLE_READYPRINT_RU "готов к"
#define TITLE_PREHEAT_RU "движение"
#define TITLE_MOVE_RU "движение"
@@ -232,7 +228,6 @@
#define TITLE_CLOUD_TEXT_RU "Cloud"
#define TITLE_DIALOG_CONFIRM_RU "Confirm"
#define TITLE_FILESYS_RU "FileSys"
-#define TITLE_ZOFFSET_RU "Z Offset"
#define AUTO_SHUTDOWN_RU "авто-откл"
#define MANUAL_SHUTDOWN_RU "ручн-откл"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_s_cn.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_s_cn.h
index ea481c89a2..1189927770 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_s_cn.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_s_cn.h
@@ -31,8 +31,8 @@
#define MACHINE_PARA_TITLE_CN "机器参数"
#define MACHINE_TYPE_CNOFIG_CN "机器设置"
-#define TEMPERATURE_CONFIG_CN "温度设置"
#define MOTOR_CONFIG_CN "电机设置"
+#define MACHINE_LEVELING_CONFIG_CN "调平设置"
#define ADVANCE_CONFIG_CN "高级设置"
#define MACHINE_CONFIG_TITLE_CN "机器参数>机器配置"
@@ -41,7 +41,6 @@
#define MACHINE_HOMEDIR_CN "归零方向"
#define MACHINE_ENDSTOP_TYPE_CN "限位开关类型"
#define MACHINE_FILAMENT_CONFIG_CN "换料设置"
-#define MACHINE_LEVELING_CONFIG_CN "调平设置"
#define MACHINE_TYPE_CONFIG_TITLE_CN "机器参数>机型选择"
#define MACHINE_TYPE_XYZ_CN "XYZ机型"
@@ -77,17 +76,17 @@
#define ENDSTOP_CLOSED_CN "常闭"
#define FILAMENT_CONF_TITLE_CN "换料设置"
-#define FILAMENT_IN_TEMPERATURE_CN "进料温度"
#define FILAMENT_IN_LENGTH_CN "进料长度"
#define FILAMENT_IN_SPEED_CN "进料速度"
-#define FILAMENT_OUT_TEMPERATURE_CN "退料温度"
+#define FILAMENT_TEMPERATURE_CN "换料温度"
#define FILAMENT_OUT_LENGTH_CN "退料长度"
#define FILAMENT_OUT_SPEED_CN "退料速度"
-#define LEVELING_CONF_TITLE_CN "调平设置"
+#define LEVELING_CONF_TITLE_CN "机器参数>调平设置"
#define LEVELING_PARA_CONF_CN "调平设置"
-#define LEVELING_DELTA_CN "delta机型设置"
-#define LEVELING_XYZ_CN "手动调平坐标设置"
+#define LEVELING_MANUAL_POS_CN "手动调平坐标设置"
+#define LEVELING_AUTO_COMMAND_CN "自动调平指令设置"
+#define LEVELING_AUTO_ZOFFSET_CN "挤出头与调平开关偏移设置"
#define LEVELING_PARA_CONF_TITLE_CN "调平参数"
#define AUTO_LEVELING_ENABLE_CN "自动调平"
@@ -146,6 +145,7 @@
#define TMC_STEP_MODE_CN "TMC 驱动模式设置"
#define MOTORDIRCONF_CN "电机方向设置"
#define HOMEFEEDRATECONF_CN "归零速度设置"
+#define HOMING_SENSITIVITY_CONF_CN "无限位回零灵敏度调节"
#define MAXFEEDRATE_CONF_TITLE_CN "机器参数>最大速度"
#define X_MAXFEEDRATE_CN "X轴最大速度"
@@ -211,6 +211,8 @@
#define HAVE_UPS_CN "机器配备UPS电源"
#define Z2_AND_Z2ENDSTOP_CONF_CN "双Z轴双限位功能设置"
#define ENABLE_PINS_CONF_CN "电机使能脚电平设置"
+#define WIFI_SETTINGS_CN "Wi-Fi参数设置"
+#define ENCODER_SETTINGS_CN "旋钮设置"
#define Z2_AND_Z2ENDSTOP_CONF_TITLE_CN "双z双限位设置"
#define Z2_ENABLE_CN "启用Z2轴"
@@ -223,10 +225,33 @@
#define Z_ENABLE_PINS_INVERT_CN "Z轴电机使能电平"
#define E_ENABLE_PINS_INVERT_CN "E轴电机使能电平"
-#define PAUSE_POSITION_CN "打印暂停位置设置"
-#define PAUSE_POSITION_X_CN "X轴暂停位置(绝对位置,-1无效)"
-#define PAUSE_POSITION_Y_CN "Y轴暂停位置(绝对位置,-1无效)"
-#define PAUSE_POSITION_Z_CN "Z轴暂停位置(相对位置,-1无效)"
+#define PAUSE_POSITION_CN "打印暂停位置设置"
+#define PAUSE_POSITION_X_CN "X轴暂停位置(绝对位置,-1无效)"
+#define PAUSE_POSITION_Y_CN "Y轴暂停位置(绝对位置,-1无效)"
+#define PAUSE_POSITION_Z_CN "Z轴暂停位置(相对位置,-1无效)"
+#define WIFI_SETTINGS_TITLE_CN "机器参数>Wi-Fi设置"
+#define WIFI_SETTINGS_MODE_CN "Wi-Fi 模式"
+#define WIFI_SETTINGS_NAME_CN "Wi-Fi 名称: "
+#define WIFI_SETTINGS_PASSWORD_CN "Wi-Fi 密码: "
+#define WIFI_SETTINGS_CLOUD_CN "是否使用云服务?"
+#define WIFI_SETTINGS_CONFIG_CN "配置"
+#define WIFI_SETTINGS_EDIT_CN "编辑"
+#define WIFI_CONFIG_TIPS_CN "进行Wi-Fi配置?"
+
+#define OFFSET_TITLE_CN "机器参数>偏移设置"
+#define OFFSET_X_CN "X轴与调平开关偏移"
+#define OFFSET_Y_CN "Y轴与调平开关偏移"
+#define OFFSET_Z_CN "Z轴与调平开关偏移"
+
+#define HOMING_SENSITIVITY_CONF_TITLE_CN "机器参数>灵敏度调节"
+#define X_SENSITIVITY_CN "X轴灵敏度"
+#define Y_SENSITIVITY_CN "Y轴灵敏度"
+#define Z_SENSITIVITY_CN "Z轴灵敏度"
+#define Z2_SENSITIVITY_CN "Z2轴灵敏度"
+
+#define ENCODER_CONF_TITLE_CN "机器参数>旋钮设置"
+#define ENCODER_CONF_TEXT_CN "是否使用旋钮功能?"
+
#define TOOL_TEXT_CN "工具"
#define PREHEAT_TEXT_CN "预热"
#define MOVE_TEXT_CN "移动"
@@ -395,10 +420,6 @@
#define STEP_5PERCENT_CN "5%"
#define STEP_10PERCENT_CN "10%"
-#define ZOFFSET_CN "Z Offset"
-#define ZOFFSET_INC_CN "增加"
-#define ZOFFSET_DEC_CN "减少"
-
#define TITLE_READYPRINT_CN "准备打印"
#define TITLE_PREHEAT_CN "预热"
#define TITLE_MOVE_CN "移动"
@@ -421,7 +442,6 @@
#define TITLE_CLOUD_TEXT_CN "云服务"
#define TITLE_DIALOG_CONFIRM_CN "确认"
#define TITLE_FILESYS_CN "文件系统"
-#define TITLE_ZOFFSET_CN "Z Offset"
#define AUTO_SHUTDOWN_CN "自动关机"
#define MANUAL_SHUTDOWN_CN "手动关机"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_sp.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_sp.h
index 289874c6ba..2babbaba93 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_sp.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_sp.h
@@ -206,10 +206,6 @@
#define STEP_5PERCENT_SP "5%"
#define STEP_10PERCENT_SP "10%"
-#define ZOFFSET_SP "Z Offset"
-#define ZOFFSET_INC_SP "Más"
-#define ZOFFSET_DEC_SP "Menos"
-
#define TITLE_READYPRINT_SP "Inicio"
#define TITLE_PREHEAT_SP "Precalentar"
#define TITLE_MOVE_SP "Mover"
@@ -233,7 +229,6 @@
#define TITLE_CLOUD_TEXT_SP "Cloud"
#define TITLE_DIALOG_CONFIRM_SP "Confirmar"
#define TITLE_FILESYS_SP "Puerto"
-#define TITLE_ZOFFSET_SP "Z Offset"
#define AUTO_SHUTDOWN_SP "Auto"
#define MANUAL_SHUTDOWN_SP "manual"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_t_cn.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_t_cn.h
index 19bd511d9a..d956e14aad 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_t_cn.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_Language_t_cn.h
@@ -31,8 +31,8 @@
#define MACHINE_PARA_TITLE_T_CN "機器參數"
#define MACHINE_TYPE_CNOFIG_T_CN "機器設置"
-#define TEMPERATURE_CONFIG_T_CN "溫度設置"
#define MOTOR_CONFIG_T_CN "電機設置"
+#define MACHINE_LEVELING_CONFIG_T_CN "調平設置"
#define ADVANCE_CONFIG_T_CN "高級設置"
#define MACHINE_CONFIG_TITLE_T_CN "機器參數>機器配置"
@@ -41,7 +41,6 @@
#define MACHINE_HOMEDIR_T_CN "歸零方向"
#define MACHINE_ENDSTOP_TYPE_T_CN "限位開關類型"
#define MACHINE_FILAMENT_CONFIG_T_CN "換料設置"
-#define MACHINE_LEVELING_CONFIG_T_CN "調平設置"
#define MACHINE_TYPE_CONFIG_TITLE_T_CN "機器參數>機型選擇"
#define MACHINE_TYPE_XYZ_T_CN "XYZ機型"
@@ -77,17 +76,17 @@
#define ENDSTOP_CLOSED_T_CN "常閉"
#define FILAMENT_CONF_TITLE_T_CN "換料設置"
-#define FILAMENT_IN_TEMPERATURE_T_CN "進料溫度"
#define FILAMENT_IN_LENGTH_T_CN "進料長度"
#define FILAMENT_IN_SPEED_T_CN "進料速度"
-#define FILAMENT_OUT_TEMPERATURE_T_CN "退料溫度"
+#define FILAMENT_TEMPERATURE_T_CN "換料溫度"
#define FILAMENT_OUT_LENGTH_T_CN "退料長度"
#define FILAMENT_OUT_SPEED_T_CN "退料速度"
-#define LEVELING_CONF_TITLE_T_CN "調平設置"
+#define LEVELING_CONF_TITLE_T_CN "機器參數>調平設置"
#define LEVELING_PARA_CONF_T_CN "調平設置"
-#define LEVELING_DELTA_T_CN "delta機型設置"
-#define LEVELING_XYZ_T_CN "手動調平坐標設置"
+#define LEVELING_MANUAL_POS_T_CN "手動調平坐標設置"
+#define LEVELING_AUTO_COMMAND_T_CN "自動調平指令設置"
+#define LEVELING_AUTO_ZOFFSET_T_CN "擠出頭與調平開關偏移設置"
#define LEVELING_PARA_CONF_TITLE_T_CN "調平參數"
#define AUTO_LEVELING_ENABLE_T_CN "自動調平"
@@ -146,6 +145,7 @@
#define TMC_STEP_MODE_T_CN "TMC 驅動模式設置"
#define MOTORDIRCONF_T_CN "電機方向設置"
#define HOMEFEEDRATECONF_T_CN "歸零速度設置"
+#define HOMING_SENSITIVITY_CONF_T_CN "無限位回零靈敏度調節"
#define MAXFEEDRATE_CONF_TITLE_T_CN "機器參數>最大速度"
#define X_MAXFEEDRATE_T_CN "X軸最大速度"
@@ -211,6 +211,8 @@
#define HAVE_UPS_T_CN "機器配備UPS電壓"
#define Z2_AND_Z2ENDSTOP_CONF_T_CN "雙z軸雙限位功能設置"
#define ENABLE_PINS_CONF_T_CN "電機使能腳電平設置"
+#define WIFI_SETTINGS_T_CN "Wi-Fi參數設置"
+#define ENCODER_SETTINGS_T_CN "旋鈕設置"
#define Z2_AND_Z2ENDSTOP_CONF_TITLE_T_CN "雙z軸雙限位設置"
#define Z2_ENABLE_T_CN "啟用Z2軸"
@@ -223,10 +225,32 @@
#define Z_ENABLE_PINS_INVERT_T_CN "Z軸電機使能電平"
#define E_ENABLE_PINS_INVERT_T_CN "E軸電機使能電平"
-#define PAUSE_POSITION_T_CN "打印暫停位置設置"
-#define PAUSE_POSITION_X_T_CN "X軸暫停位置(絕對位置,-1無效)"
-#define PAUSE_POSITION_Y_T_CN "Y軸暫停位置(絕對位置,-1無效)"
-#define PAUSE_POSITION_Z_T_CN "Z軸暫停位置(相對位置,-1無效)"
+#define PAUSE_POSITION_T_CN "打印暫停位置設置"
+#define PAUSE_POSITION_X_T_CN "X軸暫停位置(絕對位置,-1無效)"
+#define PAUSE_POSITION_Y_T_CN "Y軸暫停位置(絕對位置,-1無效)"
+#define PAUSE_POSITION_Z_T_CN "Z軸暫停位置(相對位置,-1無效)"
+#define WIFI_SETTINGS_TITLE_T_CN "機器參數>Wi-Fi設置"
+#define WIFI_SETTINGS_MODE_T_CN "Wi-Fi 模式"
+#define WIFI_SETTINGS_NAME_T_CN "Wi-Fi 名稱: "
+#define WIFI_SETTINGS_PASSWORD_T_CN "Wi-Fi 密碼: "
+#define WIFI_SETTINGS_CLOUD_T_CN "是否使用雲服務?"
+#define WIFI_SETTINGS_CONFIG_T_CN "配置"
+#define WIFI_SETTINGS_EDIT_T_CN "編輯"
+#define WIFI_CONFIG_TIPS_T_CN "進行Wi-Fi配置?"
+
+#define OFFSET_TITLE_T_CN "機器參數>偏移設置"
+#define OFFSET_X_T_CN "X軸與調平開關偏移"
+#define OFFSET_Y_T_CN "Y軸與調平開關偏移"
+#define OFFSET_Z_T_CN "Z軸與調平開關偏移"
+
+#define HOMING_SENSITIVITY_CONF_TITLE_T_CN "機器參數>靈敏度調節"
+#define X_SENSITIVITY_T_CN "X軸靈敏度"
+#define Y_SENSITIVITY_T_CN "Y軸靈敏度"
+#define Z_SENSITIVITY_T_CN "Z軸靈敏度"
+#define Z2_SENSITIVITY_T_CN "Z2軸靈敏度"
+
+#define ENCODER_CONF_TITLE_T_CN "機器參數>旋鈕設置"
+#define ENCODER_CONF_TEXT_T_CN "是否使用旋鈕功能?"
#define TOOL_TEXT_T_CN "工具"
#define PREHEAT_TEXT_T_CN "預熱"
@@ -398,10 +422,6 @@
#define STEP_5PERCENT_T_CN "5%%"
#define STEP_10PERCENT_T_CN "10%%"
-#define ZOFFSET_T_CN "Z Offset"
-#define ZOFFSET_INC_T_CN "增加"
-#define ZOFFSET_DEC_T_CN "減少"
-
#define TITLE_READYPRINT_T_CN "準備打印"
#define TITLE_PREHEAT_T_CN "預熱"
#define TITLE_MOVE_T_CN "移動"
@@ -424,7 +444,6 @@
#define TITLE_CLOUD_TEXT_T_CN "雲服務"
#define TITLE_DIALOG_CONFIRM_T_CN "確認"
#define TITLE_FILESYS_T_CN "文件系統"
-#define TITLE_ZOFFSET_T_CN "Z Offset"
#define AUTO_SHUTDOWN_T_CN "自動關機"
#define MANUAL_SHUTDOWN_T_CN "手動關機"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp b/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp
index 23072d27c7..af292db7d5 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp
@@ -35,14 +35,18 @@
#include "tft_lvgl_configuration.h"
#include "draw_ready_print.h"
+
#include "pic_manager.h"
#include "mks_hardware_test.h"
#include "draw_ui.h"
+#include "SPIFlashStorage.h"
#include
+#include "../../../../MarlinCore.h"
#include "../../../../inc/MarlinConfig.h"
#include HAL_PATH(../../HAL, tft/xpt2046.h)
+#include "../../../ultralcd.h"
XPT2046 touch;
#if ENABLED(POWER_LOSS_RECOVERY)
@@ -63,6 +67,7 @@ XPT2046 touch;
#endif
static lv_disp_buf_t disp_buf;
+lv_group_t* g;
#if ENABLED(SDSUPPORT)
extern void UpdateAssets();
#endif
@@ -89,306 +94,349 @@ extern uint8_t sel_id;
extern uint8_t gcode_preview_over, flash_preview_begin, default_preview_flg;
+uint8_t bmp_public_buf[17 * 1024];
+
void SysTick_Callback() {
lv_tick_inc(1);
print_time_count();
-}
-
-#if DISABLED(TFT_LVGL_UI_SPI)
-
-extern void LCD_IO_Init(uint8_t cs, uint8_t rs);
-extern void LCD_IO_WriteData(uint16_t RegValue);
-extern void LCD_IO_WriteReg(uint16_t Reg);
-
-extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count);
-void tft_set_cursor(uint16_t x, uint16_t y) {
- LCD_IO_WriteReg(0x002A);
- LCD_IO_WriteData(x >> 8);
- LCD_IO_WriteData(x & 0x00FF);
- LCD_IO_WriteData(x >> 8);
- LCD_IO_WriteData(x & 0x00FF);
- //ILI9488_WriteData(0x01);
- //ILI9488_WriteData(0xDF);
- LCD_IO_WriteReg(0x002B);
- LCD_IO_WriteData(y >> 8);
- LCD_IO_WriteData(y & 0x00FF);
- LCD_IO_WriteData(y >> 8);
- LCD_IO_WriteData(y & 0x00FF);
- //ILI9488_WriteData(0x01);
- //ILI9488_WriteData(0x3F);
-}
-
-void LCD_WriteRAM_Prepare(void) {
- #if 0
- switch (DeviceCode) {
- case 0x9325: case 0x9328: case 0x8989: {
- ClrCs
- LCD->LCD_REG = R34;
- SetCs
- } break;
- default: LCD_WrtReg(0x002C);
+ #if ENABLED(USE_WIFI_FUNCTION)
+ if (tips_disp.timer == TIPS_TIMER_START) {
+ tips_disp.timer_count++;
}
- #else
- LCD_IO_WriteReg(0x002C);
#endif
+ if (uiCfg.filament_loading_time_flg == 1) {
+ uiCfg.filament_loading_time_cnt++;
+ uiCfg.filament_rate = (uint32_t)(((uiCfg.filament_loading_time_cnt / (uiCfg.filament_loading_time * 1000.0)) * 100.0) + 0.5);
+ if (uiCfg.filament_loading_time_cnt >= (uiCfg.filament_loading_time * 1000)) {
+ uiCfg.filament_loading_time_cnt = 0;
+ uiCfg.filament_loading_time_flg = 0;
+ uiCfg.filament_loading_completed = 1;
+ }
+ }
+ if (uiCfg.filament_unloading_time_flg == 1) {
+ uiCfg.filament_unloading_time_cnt++;
+ uiCfg.filament_rate = (uint32_t)(((uiCfg.filament_unloading_time_cnt / (uiCfg.filament_unloading_time * 1000.0)) * 100.0) + 0.5);
+ if (uiCfg.filament_unloading_time_cnt >= (uiCfg.filament_unloading_time * 1000)) {
+ uiCfg.filament_unloading_time_cnt = 0;
+ uiCfg.filament_unloading_time_flg = 0;
+ uiCfg.filament_unloading_completed = 1;
+ uiCfg.filament_rate = 100;
+ }
+ }
}
-void tft_set_point(uint16_t x, uint16_t y, uint16_t point) {
- //if (DeviceCode == 0x9488) {
- if (x > (TFT_WIDTH) || y > (TFT_HEIGHT)) return;
- //}
- tft_set_cursor(x, y);
-
- LCD_WriteRAM_Prepare();
- //LCD_WriteRAM(point);
- LCD_IO_WriteData(point);
-}
-
-void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) {
- /* Write 16-bit Index, then Write Reg */
- ClrCs
- LCD_IO_WriteReg(LCD_Reg);
- /* Write 16-bit Reg */
- LCD_IO_WriteData(LCD_RegValue);
- SetCs
-}
+#if DISABLED(TFT_LVGL_UI_SPI)
-void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh) {
- uint16_t s_h, s_l, e_h, e_l;
- uint16_t xEnd, yEnd;
- xEnd = StartX + width;
- yEnd = StartY + heigh - 1;
- if (DeviceCode == 0x8989) {
- /*LCD_WriteReg(0x0044, (StartX & 0xFF) | (xEnd << 8));
- LCD_WriteReg(0x0045, StartY);
- LCD_WriteReg(0x0046, yEnd);*/
- LCD_WriteReg(0x0044, (StartY & 0xFF) | (yEnd << 8));
- LCD_WriteReg(0x0045, StartX);
- LCD_WriteReg(0x0046, xEnd);
- }
- else if (DeviceCode == 0x9488) {
- s_h = (StartX >> 8) & 0x00ff;
- s_l = StartX & 0x00ff;
- e_h = ((StartX + width - 1) >> 8) & 0x00ff;
- e_l = (StartX + width - 1) & 0x00ff;
+ extern void LCD_IO_Init(uint8_t cs, uint8_t rs);
+ extern void LCD_IO_WriteData(uint16_t RegValue);
+ extern void LCD_IO_WriteReg(uint16_t Reg);
+ extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count);
+ void tft_set_cursor(uint16_t x, uint16_t y) {
LCD_IO_WriteReg(0x002A);
- LCD_IO_WriteData(s_h);
- LCD_IO_WriteData(s_l);
- LCD_IO_WriteData(e_h);
- LCD_IO_WriteData(e_l);
-
- s_h = (StartY >> 8) & 0x00ff;
- s_l = StartY & 0x00ff;
- e_h = ((StartY + heigh - 1) >> 8) & 0x00ff;
- e_l = (StartY + heigh - 1) & 0x00ff;
-
+ LCD_IO_WriteData(x >> 8);
+ LCD_IO_WriteData(x & 0x00FF);
+ LCD_IO_WriteData(x >> 8);
+ LCD_IO_WriteData(x & 0x00FF);
+ //ILI9488_WriteData(0x01);
+ //ILI9488_WriteData(0xDF);
LCD_IO_WriteReg(0x002B);
- LCD_IO_WriteData(s_h);
- LCD_IO_WriteData(s_l);
- LCD_IO_WriteData(e_h);
- LCD_IO_WriteData(e_l);
+ LCD_IO_WriteData(y >> 8);
+ LCD_IO_WriteData(y & 0x00FF);
+ LCD_IO_WriteData(y >> 8);
+ LCD_IO_WriteData(y & 0x00FF);
+ //ILI9488_WriteData(0x01);
+ //ILI9488_WriteData(0x3F);
}
- else if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x1505)) {
- /* LCD_WriteReg(0x0050, StartX);
- LCD_WriteReg(0x0052, StartY);
- LCD_WriteReg(0x0051, xEnd);
- LCD_WriteReg(0x0053, yEnd);*/
- LCD_WriteReg(0x0050, StartY); // Specify the start/end positions of the window address in the horizontal direction by an address unit
- LCD_WriteReg(0x0051, yEnd); // Specify the start positions of the window address in the vertical direction by an address unit
- LCD_WriteReg(0x0052, (TFT_HEIGHT) - xEnd);
- LCD_WriteReg(0x0053, (TFT_HEIGHT) - StartX - 1); // Specify the end positions of the window address in the vertical direction by an address unit
+ void LCD_WriteRAM_Prepare(void) {
+ #if 0
+ switch (DeviceCode) {
+ case 0x9325: case 0x9328: case 0x8989: {
+ ClrCs
+ LCD->LCD_REG = R34;
+ SetCs
+ } break;
+ default: LCD_WrtReg(0x002C);
+ }
+ #else
+ LCD_IO_WriteReg(0x002C);
+ #endif
}
- else {
- s_h = (StartX >> 8) & 0xFF;
- s_l = StartX & 0xFF;
- e_h = ((StartX + width - 1) >> 8) & 0xFF;
- e_l = (StartX + width - 1) & 0xFF;
-
- LCD_IO_WriteReg(0x2A);
- LCD_IO_WriteData(s_h);
- LCD_IO_WriteData(s_l);
- LCD_IO_WriteData(e_h);
- LCD_IO_WriteData(e_l);
-
- s_h = (StartY >> 8) & 0xFF;
- s_l = StartY & 0xFF;
- e_h = ((StartY + heigh - 1) >> 8) & 0xFF;
- e_l = (StartY + heigh - 1) & 0xFF;
-
- LCD_IO_WriteReg(0x2B);
- LCD_IO_WriteData(s_h);
- LCD_IO_WriteData(s_l);
- LCD_IO_WriteData(e_h);
- LCD_IO_WriteData(e_l);
- }
-}
-void LCD_Clear(uint16_t Color) {
- uint32_t index = 0;
- unsigned int count;
+ void tft_set_point(uint16_t x, uint16_t y, uint16_t point) {
+ //if (DeviceCode == 0x9488) {
+ if (x > (TFT_WIDTH) || y > (TFT_HEIGHT)) return;
+ //}
+ tft_set_cursor(x, y);
- if (DeviceCode == 0x9488) {
- tft_set_cursor(0, 0);
- ili9320_SetWindows(0, 0, TFT_WIDTH, TFT_HEIGHT);
LCD_WriteRAM_Prepare();
- #ifdef LCD_USE_DMA_FSMC
- LCD_IO_WriteMultiple(Color, (TFT_WIDTH) * (TFT_HEIGHT));
- #else
- //index = (TFT_HEIGHT) / 2 * (TFT_WIDTH);
- for (index = 0; index < (TFT_HEIGHT) * (TFT_WIDTH); index++)
- LCD_IO_WriteData(Color);
- #endif
- //LCD_IO_WriteMultiple(Color, (TFT_WIDTH) * (TFT_HEIGHT));
- //while(index --) LCD_IO_WriteData(Color);
- }
- else if (DeviceCode == 0x5761) {
- LCD_IO_WriteReg(0x002a);
- LCD_IO_WriteData(0);
- LCD_IO_WriteData(0);
- LCD_IO_WriteData(HDP >> 8);
- LCD_IO_WriteData(HDP & 0x00ff);
- LCD_IO_WriteReg(0x002b);
- LCD_IO_WriteData(0);
- LCD_IO_WriteData(0);
- LCD_IO_WriteData(VDP >> 8);
- LCD_IO_WriteData(VDP & 0x00ff);
- LCD_IO_WriteReg(0x002c);
- LCD_IO_WriteReg(0x002c);
- for (count = 0; count < (HDP + 1) * (VDP + 1); count++)
- LCD_IO_WriteData(Color);
- }
- else {
- tft_set_cursor(0, 0);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for (index = 0; index < 76800; index++)
- LCD_IO_WriteData(Color);
+ //LCD_WriteRAM(point);
+ LCD_IO_WriteData(point);
}
-}
-
-#include HAL_PATH(../../HAL, tft/tft_fsmc.h)
-extern TFT_IO tftio;
-void init_tft() {
- uint16_t i;
- TERN_(HAS_LCD_CONTRAST, refresh_contrast());
+ void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) {
+ /* Write 16-bit Index, then Write Reg */
+ ClrCs
+ LCD_IO_WriteReg(LCD_Reg);
+ /* Write 16-bit Reg */
+ LCD_IO_WriteData(LCD_RegValue);
+ SetCs
+ }
- #ifdef LCD_USE_DMA_FSMC
- dma_init(FSMC_DMA_DEV);
- dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
- dma_set_priority(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, DMA_PRIORITY_MEDIUM);
- #endif
+ void LCD_setWindowArea(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh) {
+ uint16_t s_h, s_l, e_h, e_l;
+ uint16_t xEnd, yEnd;
+ xEnd = StartX + width;
+ yEnd = StartY + heigh - 1;
+ if (DeviceCode == 0x8989) {
+ /*LCD_WriteReg(0x0044, (StartX & 0xFF) | (xEnd << 8));
+ LCD_WriteReg(0x0045, StartY);
+ LCD_WriteReg(0x0046, yEnd);*/
+ LCD_WriteReg(0x0044, (StartY & 0xFF) | (yEnd << 8));
+ LCD_WriteReg(0x0045, StartX);
+ LCD_WriteReg(0x0046, xEnd);
+ }
+ else if (DeviceCode == 0x9488) {
+ s_h = (StartX >> 8) & 0x00ff;
+ s_l = StartX & 0x00ff;
+ e_h = ((StartX + width - 1) >> 8) & 0x00ff;
+ e_l = (StartX + width - 1) & 0x00ff;
+
+ LCD_IO_WriteReg(0x002A);
+ LCD_IO_WriteData(s_h);
+ LCD_IO_WriteData(s_l);
+ LCD_IO_WriteData(e_h);
+ LCD_IO_WriteData(e_l);
+
+ s_h = (StartY >> 8) & 0x00ff;
+ s_l = StartY & 0x00ff;
+ e_h = ((StartY + heigh - 1) >> 8) & 0x00ff;
+ e_l = (StartY + heigh - 1) & 0x00ff;
+
+ LCD_IO_WriteReg(0x002B);
+ LCD_IO_WriteData(s_h);
+ LCD_IO_WriteData(s_l);
+ LCD_IO_WriteData(e_h);
+ LCD_IO_WriteData(e_l);
+ }
+ else if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x1505)) {
+ /* LCD_WriteReg(0x0050, StartX);
+ LCD_WriteReg(0x0052, StartY);
+ LCD_WriteReg(0x0051, xEnd);
+ LCD_WriteReg(0x0053, yEnd);*/
+ LCD_WriteReg(0x0050, StartY); // Specify the start/end positions of the window address in the horizontal direction by an address unit
+ LCD_WriteReg(0x0051, yEnd); // Specify the start positions of the window address in the vertical direction by an address unit
+ LCD_WriteReg(0x0052, (TFT_HEIGHT) - xEnd);
+ LCD_WriteReg(0x0053, (TFT_HEIGHT) - StartX - 1); // Specify the end positions of the window address in the vertical direction by an address unit
- LCD_IO_Init(FSMC_CS_PIN, FSMC_RS_PIN);
-
- _delay_ms(5);
-
- DeviceCode = tftio.GetID() & 0xFFFF;
- // Chitu and others
- if (DeviceCode == 0x8066) DeviceCode = 0x9488;
-
- if (DeviceCode == 0x9488) {
- LCD_IO_WriteReg(0x00E0);
- LCD_IO_WriteData(0x0000);
- LCD_IO_WriteData(0x0007);
- LCD_IO_WriteData(0x000f);
- LCD_IO_WriteData(0x000D);
- LCD_IO_WriteData(0x001B);
- LCD_IO_WriteData(0x000A);
- LCD_IO_WriteData(0x003c);
- LCD_IO_WriteData(0x0078);
- LCD_IO_WriteData(0x004A);
- LCD_IO_WriteData(0x0007);
- LCD_IO_WriteData(0x000E);
- LCD_IO_WriteData(0x0009);
- LCD_IO_WriteData(0x001B);
- LCD_IO_WriteData(0x001e);
- LCD_IO_WriteData(0x000f);
-
- LCD_IO_WriteReg(0x00E1);
- LCD_IO_WriteData(0x0000);
- LCD_IO_WriteData(0x0022);
- LCD_IO_WriteData(0x0024);
- LCD_IO_WriteData(0x0006);
- LCD_IO_WriteData(0x0012);
- LCD_IO_WriteData(0x0007);
- LCD_IO_WriteData(0x0036);
- LCD_IO_WriteData(0x0047);
- LCD_IO_WriteData(0x0047);
- LCD_IO_WriteData(0x0006);
- LCD_IO_WriteData(0x000a);
- LCD_IO_WriteData(0x0007);
- LCD_IO_WriteData(0x0030);
- LCD_IO_WriteData(0x0037);
- LCD_IO_WriteData(0x000f);
-
- LCD_IO_WriteReg(0x00C0);
- LCD_IO_WriteData(0x0010);
- LCD_IO_WriteData(0x0010);
-
- LCD_IO_WriteReg(0x00C1);
- LCD_IO_WriteData(0x0041);
-
- LCD_IO_WriteReg(0x00C5);
- LCD_IO_WriteData(0x0000);
- LCD_IO_WriteData(0x0022);
- LCD_IO_WriteData(0x0080);
-
- LCD_IO_WriteReg(0x0036);
- //ILI9488_WriteData(0x0068);
- //if (gCfgItems.overturn_180 != 0xEE) {
- LCD_IO_WriteData(0x0068);
- //}
- //else {
- //ILI9488_WriteData(0x00A8);
- //}
+ }
+ else {
+ s_h = (StartX >> 8) & 0xFF;
+ s_l = StartX & 0xFF;
+ e_h = ((StartX + width - 1) >> 8) & 0xFF;
+ e_l = (StartX + width - 1) & 0xFF;
+
+ LCD_IO_WriteReg(0x2A);
+ LCD_IO_WriteData(s_h);
+ LCD_IO_WriteData(s_l);
+ LCD_IO_WriteData(e_h);
+ LCD_IO_WriteData(e_l);
+
+ s_h = (StartY >> 8) & 0xFF;
+ s_l = StartY & 0xFF;
+ e_h = ((StartY + heigh - 1) >> 8) & 0xFF;
+ e_l = (StartY + heigh - 1) & 0xFF;
+
+ LCD_IO_WriteReg(0x2B);
+ LCD_IO_WriteData(s_h);
+ LCD_IO_WriteData(s_l);
+ LCD_IO_WriteData(e_h);
+ LCD_IO_WriteData(e_l);
+ }
+ }
- LCD_IO_WriteReg(0x003A); //Interface Mode Control
- LCD_IO_WriteData(0x0055);
+ void LCD_Clear(uint16_t Color) {
+ uint32_t index = 0;
+ unsigned int count;
- LCD_IO_WriteReg(0x00B0); //Interface Mode Control
- LCD_IO_WriteData(0x0000);
- LCD_IO_WriteReg(0x00B1); //Frame rate 70HZ
- LCD_IO_WriteData(0x00B0);
- LCD_IO_WriteData(0x0011);
- LCD_IO_WriteReg(0x00B4);
- LCD_IO_WriteData(0x0002);
- LCD_IO_WriteReg(0x00B6); //RGB/MCU Interface Control
- LCD_IO_WriteData(0x0002);
- LCD_IO_WriteData(0x0042);
+ if (DeviceCode == 0x9488) {
+ tft_set_cursor(0, 0);
+ LCD_setWindowArea(0, 0, TFT_WIDTH, TFT_HEIGHT);
+ LCD_WriteRAM_Prepare();
+ #ifdef LCD_USE_DMA_FSMC
+ LCD_IO_WriteMultiple(Color, (TFT_WIDTH) * (TFT_HEIGHT));
+ #else
+ //index = (TFT_HEIGHT) / 2 * (TFT_WIDTH);
+ for (index = 0; index < (TFT_HEIGHT) * (TFT_WIDTH); index++)
+ LCD_IO_WriteData(Color);
+ #endif
+ //LCD_IO_WriteMultiple(Color, (TFT_WIDTH) * (TFT_HEIGHT));
+ //while(index --) LCD_IO_WriteData(Color);
+ }
+ else if (DeviceCode == 0x5761) {
+ LCD_IO_WriteReg(0x002a);
+ LCD_IO_WriteData(0);
+ LCD_IO_WriteData(0);
+ LCD_IO_WriteData(HDP >> 8);
+ LCD_IO_WriteData(HDP & 0x00ff);
+ LCD_IO_WriteReg(0x002b);
+ LCD_IO_WriteData(0);
+ LCD_IO_WriteData(0);
+ LCD_IO_WriteData(VDP >> 8);
+ LCD_IO_WriteData(VDP & 0x00ff);
+ LCD_IO_WriteReg(0x002c);
+ LCD_IO_WriteReg(0x002c);
+ for (count = 0; count < (HDP + 1) * (VDP + 1); count++)
+ LCD_IO_WriteData(Color);
+ }
+ else {
+ tft_set_cursor(0, 0);
+ LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
+ for (index = 0; index < 76800; index++)
+ LCD_IO_WriteData(Color);
+ }
+ }
- LCD_IO_WriteReg(0x00B7);
- LCD_IO_WriteData(0x00C6);
+ #include HAL_PATH(../../HAL, tft/tft_fsmc.h)
+ extern TFT_IO tftio;
+ void fsmc_tft_init() {
+ uint16_t i;
- //WriteComm(0xBE);
- //WriteData(0x00);
- //WriteData(0x04);
+ TERN_(HAS_LCD_CONTRAST, refresh_contrast());
- LCD_IO_WriteReg(0x00E9);
- LCD_IO_WriteData(0x0000);
+ #ifdef LCD_USE_DMA_FSMC
+ dma_init(FSMC_DMA_DEV);
+ dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
+ dma_set_priority(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, DMA_PRIORITY_MEDIUM);
+ #endif
- LCD_IO_WriteReg(0x00F7);
- LCD_IO_WriteData(0x00A9);
- LCD_IO_WriteData(0x0051);
- LCD_IO_WriteData(0x002C);
- LCD_IO_WriteData(0x0082);
+ LCD_IO_Init(FSMC_CS_PIN, FSMC_RS_PIN);
+
+ _delay_ms(5);
+
+ DeviceCode = tftio.GetID() & 0xFFFF;
+ // Chitu and others
+ if (DeviceCode == 0x8066) DeviceCode = 0x9488;
+
+ if (DeviceCode == 0x9488) {
+ LCD_IO_WriteReg(0x00E0);
+ LCD_IO_WriteData(0x0000);
+ LCD_IO_WriteData(0x0007);
+ LCD_IO_WriteData(0x000f);
+ LCD_IO_WriteData(0x000D);
+ LCD_IO_WriteData(0x001B);
+ LCD_IO_WriteData(0x000A);
+ LCD_IO_WriteData(0x003c);
+ LCD_IO_WriteData(0x0078);
+ LCD_IO_WriteData(0x004A);
+ LCD_IO_WriteData(0x0007);
+ LCD_IO_WriteData(0x000E);
+ LCD_IO_WriteData(0x0009);
+ LCD_IO_WriteData(0x001B);
+ LCD_IO_WriteData(0x001e);
+ LCD_IO_WriteData(0x000f);
+
+ LCD_IO_WriteReg(0x00E1);
+ LCD_IO_WriteData(0x0000);
+ LCD_IO_WriteData(0x0022);
+ LCD_IO_WriteData(0x0024);
+ LCD_IO_WriteData(0x0006);
+ LCD_IO_WriteData(0x0012);
+ LCD_IO_WriteData(0x0007);
+ LCD_IO_WriteData(0x0036);
+ LCD_IO_WriteData(0x0047);
+ LCD_IO_WriteData(0x0047);
+ LCD_IO_WriteData(0x0006);
+ LCD_IO_WriteData(0x000a);
+ LCD_IO_WriteData(0x0007);
+ LCD_IO_WriteData(0x0030);
+ LCD_IO_WriteData(0x0037);
+ LCD_IO_WriteData(0x000f);
+
+ LCD_IO_WriteReg(0x00C0);
+ LCD_IO_WriteData(0x0010);
+ LCD_IO_WriteData(0x0010);
+
+ LCD_IO_WriteReg(0x00C1);
+ LCD_IO_WriteData(0x0041);
+
+ LCD_IO_WriteReg(0x00C5);
+ LCD_IO_WriteData(0x0000);
+ LCD_IO_WriteData(0x0022);
+ LCD_IO_WriteData(0x0080);
+
+ LCD_IO_WriteReg(0x0036);
+ LCD_IO_WriteData(TERN(GRAPHICAL_TFT_ROTATE_180, 0xE8, 0x0068));
+
+ LCD_IO_WriteReg(0x003A); //Interface Mode Control
+ LCD_IO_WriteData(0x0055);
+
+ LCD_IO_WriteReg(0x00B0); //Interface Mode Control
+ LCD_IO_WriteData(0x0000);
+ LCD_IO_WriteReg(0x00B1); //Frame rate 70HZ
+ LCD_IO_WriteData(0x00B0);
+ LCD_IO_WriteData(0x0011);
+ LCD_IO_WriteReg(0x00B4);
+ LCD_IO_WriteData(0x0002);
+ LCD_IO_WriteReg(0x00B6); //RGB/MCU Interface Control
+ LCD_IO_WriteData(0x0002);
+ LCD_IO_WriteData(0x0042);
+
+ LCD_IO_WriteReg(0x00B7);
+ LCD_IO_WriteData(0x00C6);
+
+ //WriteComm(0xBE);
+ //WriteData(0x00);
+ //WriteData(0x04);
+
+ LCD_IO_WriteReg(0x00E9);
+ LCD_IO_WriteData(0x0000);
+
+ LCD_IO_WriteReg(0x00F7);
+ LCD_IO_WriteData(0x00A9);
+ LCD_IO_WriteData(0x0051);
+ LCD_IO_WriteData(0x002C);
+ LCD_IO_WriteData(0x0082);
+
+ LCD_IO_WriteReg(0x0011);
+ for (i = 0; i < 65535; i++) { /* do nothing */ }
+ LCD_IO_WriteReg(0x0029);
+
+ LCD_setWindowArea(0, 0, TFT_WIDTH, TFT_HEIGHT);
+
+ OUT_WRITE(LCD_BACKLIGHT_PIN, LOW);
+ LCD_Clear(0x0000);
+
+ lcd_draw_logo();
+
+ OUT_WRITE(LCD_BACKLIGHT_PIN, HIGH);
+ delay(2000);
+ }
+ }
- LCD_IO_WriteReg(0x0011);
- for (i = 0; i < 65535; i++);
- LCD_IO_WriteReg(0x0029);
+ extern void LCD_IO_WriteSequence(uint16_t *data, uint16_t length);
- ili9320_SetWindows(0, 0, TFT_WIDTH, TFT_HEIGHT);
- LCD_Clear(0x0000);
+ void lcd_draw_logo() {
+ LCD_setWindowArea(0, 0, TFT_WIDTH, TFT_HEIGHT);
+ LCD_WriteRAM_Prepare();
- OUT_WRITE(LCD_BACKLIGHT_PIN, HIGH);
+ for (uint16_t i = 0; i < (TFT_HEIGHT); i ++) {
+ Pic_Logo_Read((uint8_t *)"", (uint8_t *)bmp_public_buf, (TFT_WIDTH) * 2);
+ #ifdef LCD_USE_DMA_FSMC
+ LCD_IO_WriteSequence((uint16_t *)bmp_public_buf, TFT_WIDTH);
+ #else
+ int index = 0;,x_off = 0;
+ for (x_off = 0; x_off < TFT_WIDTH; x_off++) {
+ LCD_IO_WriteData((uint16_t)bmp_public_buf[index]);
+ index += 2;
+ }
+ #endif
+ }
}
-}
#endif // !TFT_LVGL_UI_SPI
-extern uint8_t bmp_public_buf[17 * 1024];
-
void tft_lvgl_init() {
//uint16_t test_id=0;
@@ -404,16 +452,15 @@ void tft_lvgl_init() {
SPI_TFT.spi_init(SPI_FULL_SPEED);
SPI_TFT.LCD_init();
#else
- init_tft();
+ fsmc_tft_init();
#endif
+ //spi_flash_read_test();
#if ENABLED(SDSUPPORT)
UpdateAssets();
#endif
mks_test_get();
- //spi_flash_read_test();
-
touch.Init();
lv_init();
@@ -432,6 +479,36 @@ void tft_lvgl_init() {
indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/
lv_indev_drv_register(&indev_drv); /*Finally register the driver*/
+ #if HAS_ROTARY_ENCODER
+ g = lv_group_create();
+ lv_indev_drv_t enc_drv;
+ lv_indev_drv_init(&enc_drv);
+ enc_drv.type = LV_INDEV_TYPE_ENCODER;
+ enc_drv.read_cb = my_mousewheel_read;
+ lv_indev_t * enc_indev = lv_indev_drv_register(&enc_drv);
+ lv_indev_set_group(enc_indev, g);
+ #endif
+
+ lv_fs_drv_t spi_flash_drv;
+ lv_fs_drv_init(&spi_flash_drv);
+ spi_flash_drv.letter = 'F';
+ spi_flash_drv.open_cb = spi_flash_open_cb;
+ spi_flash_drv.close_cb = spi_flash_close_cb;
+ spi_flash_drv.read_cb = spi_flash_read_cb;
+ spi_flash_drv.seek_cb = spi_flash_seek_cb;
+ spi_flash_drv.tell_cb = spi_flash_tell_cb;
+ lv_fs_drv_register(&spi_flash_drv);
+
+ lv_fs_drv_t sd_drv;
+ lv_fs_drv_init(&sd_drv);
+ sd_drv.letter = 'S';
+ sd_drv.open_cb = sd_open_cb;
+ sd_drv.close_cb = sd_close_cb;
+ sd_drv.read_cb = sd_read_cb;
+ sd_drv.seek_cb = sd_seek_cb;
+ sd_drv.tell_cb = sd_tell_cb;
+ lv_fs_drv_register(&sd_drv);
+
systick_attach_callback(SysTick_Callback);
#if HAS_SPI_FLASH_FONT
@@ -442,7 +519,10 @@ void tft_lvgl_init() {
filament_pin_setup();
+ lv_encoder_pin_init();
+
#if ENABLED(POWER_LOSS_RECOVERY)
+ recovery.load();
if (recovery.valid()) {
if (gCfgItems.from_flash_pic == 1)
flash_preview_begin = 1;
@@ -486,16 +566,16 @@ void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * co
#if 1
uint16_t i, width, height;
- uint16_t clr_temp;
+ //uint16_t clr_temp;
width = area->x2 - area->x1 + 1;
height = area->y2 - area->y1 + 1;
- ili9320_SetWindows((uint16_t)area->x1, (uint16_t)area->y1, width, height);
+ LCD_setWindowArea((uint16_t)area->x1, (uint16_t)area->y1, width, height);
LCD_WriteRAM_Prepare();
for (i = 0; i < width * height - 2; i++) {
- clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11)
- | ((uint16_t)color_p->ch.green << 5)
- | ((uint16_t)color_p->ch.blue));
- LCD_IO_WriteData(clr_temp);
+ //clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11)
+ //| ((uint16_t)color_p->ch.green << 5)
+ //| ((uint16_t)color_p->ch.blue));
+ LCD_IO_WriteData(color_p->full);
color_p++;
}
@@ -507,8 +587,6 @@ void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * co
#define TICK_CYCLE 1
-static int32_t touch_time1 = 0;
-
unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) {
return TICK_CYCLE * (lastTick <= curTick ? (curTick - lastTick) : (0xFFFFFFFF - lastTick + curTick));
}
@@ -522,15 +600,17 @@ static bool get_point(int16_t *x, int16_t *y) {
}
#if ENABLED(GRAPHICAL_TFT_ROTATE_180)
- x = (TFT_WIDTH) - x;
- y = (TFT_HEIGHT) - y;
+ *x = int16_t((TFT_WIDTH) - (int)(*x));
+ *y = int16_t((TFT_HEIGHT) - (int)(*y));
#endif
return is_touched;
}
-static int16_t last_x = 0, last_y = 0;
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
+ static int16_t last_x = 0, last_y = 0;
+ static uint8_t last_touch_state = LV_INDEV_STATE_REL;
+ static int32_t touch_time1 = 0;
uint32_t tmpTime, diffTime = 0;
tmpTime = millis();
@@ -540,9 +620,10 @@ bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
//if (data->state == LV_INDEV_STATE_PR) ADS7843_Rd_Addata((u16 *)&last_x, (u16 *)&last_y);
//touchpad_get_xy(&last_x, &last_y);
/*Save the pressed coordinates and the state*/
- if (diffTime > 10) {
+ if (diffTime > 20) {
if (get_point(&last_x, &last_y)) {
+ if (last_touch_state == LV_INDEV_STATE_PR) return false;
data->state = LV_INDEV_STATE_PR;
// Set the coordinates (if released use the last-pressed coordinates)
@@ -551,9 +632,13 @@ bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
data->point.y = last_y;
last_x = last_y = 0;
+ last_touch_state = LV_INDEV_STATE_PR;
+ }
+ else {
+ if (last_touch_state == LV_INDEV_STATE_PR)
+ data->state = LV_INDEV_STATE_REL;
+ last_touch_state = LV_INDEV_STATE_REL;
}
- else
- data->state = LV_INDEV_STATE_REL;
touch_time1 = tmpTime;
}
@@ -561,4 +646,233 @@ bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
return false; // Return `false` since no data is buffering or left to read
}
+int16_t enc_diff = 0;
+lv_indev_state_t state = LV_INDEV_STATE_REL;
+
+bool my_mousewheel_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) {
+ (void) indev_drv; /*Unused*/
+
+ data->state = state;
+ data->enc_diff = enc_diff;
+ enc_diff = 0;
+
+ return false; /*No more data to read so return false*/
+}
+
+extern uint8_t currentFlashPage;
+
+//spi_flash
+uint32_t pic_read_base_addr = 0, pic_read_addr_offset = 0;
+lv_fs_res_t spi_flash_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) {
+ static char last_path_name[30];
+ if (strcasecmp(last_path_name,path) != 0) {
+ pic_read_base_addr = lv_get_pic_addr((uint8_t *)path);
+ ZERO(last_path_name);
+ strcpy(last_path_name,path);
+ }
+ else {
+ W25QXX.init(SPI_QUARTER_SPEED);
+ currentFlashPage = 0;
+ }
+ pic_read_addr_offset = pic_read_base_addr;
+ return LV_FS_RES_OK;
+}
+
+lv_fs_res_t spi_flash_close_cb (lv_fs_drv_t * drv, void * file_p) {
+ lv_fs_res_t res = LV_FS_RES_OK;
+ /* Add your code here*/
+ pic_read_addr_offset = pic_read_base_addr;
+ return res;
+}
+
+lv_fs_res_t spi_flash_read_cb (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br) {
+ lv_pic_test((uint8_t *)buf, pic_read_addr_offset, btr);
+ *br = btr;
+ return LV_FS_RES_OK;
+}
+
+lv_fs_res_t spi_flash_seek_cb(lv_fs_drv_t * drv, void * file_p, uint32_t pos) {
+ #if HAS_SPI_FLASH_COMPRESSION
+ if (pos == 4) {
+ uint8_t bmp_header[4];
+ SPIFlash.beginRead(pic_read_base_addr);
+ SPIFlash.readData(bmp_header, 4);
+ currentFlashPage = 1;
+ }
+ pic_read_addr_offset = pic_read_base_addr;
+ #else
+ pic_read_addr_offset = pic_read_base_addr + pos;
+ #endif
+ return LV_FS_RES_OK;
+}
+
+lv_fs_res_t spi_flash_tell_cb(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p) {
+ *pos_p = pic_read_addr_offset - pic_read_base_addr;
+ return LV_FS_RES_OK;
+}
+
+//sd
+char *cur_namefff;
+uint32_t sd_read_base_addr = 0,sd_read_addr_offset = 0;
+lv_fs_res_t sd_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) {
+ //cur_namefff = strrchr(path, '/');
+ char name_buf[100];
+ ZERO(name_buf);
+ strcat(name_buf,"/");
+ strcat(name_buf,path);
+ char *temp = strstr(name_buf,".bin");
+ if (temp) { strcpy(temp,".GCO"); }
+ sd_read_base_addr = lv_open_gcode_file((char *)name_buf);
+ sd_read_addr_offset = sd_read_base_addr;
+ return LV_FS_RES_OK;
+}
+
+lv_fs_res_t sd_close_cb (lv_fs_drv_t * drv, void * file_p) {
+ /* Add your code here*/
+ lv_close_gcode_file();
+ return LV_FS_RES_OK;
+}
+
+lv_fs_res_t sd_read_cb (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br) {
+ if (btr == 200) {
+ lv_gcode_file_read((uint8_t *)buf);
+ //pic_read_addr_offset += 208;
+ *br = 200;
+ }
+ else if (btr == 4) {
+ uint8_t header_pic[4] = { 0x04, 0x90, 0x81, 0x0C };
+ memcpy(buf, header_pic, 4);
+ //pic_read_addr_offset += 4;
+ *br = 4;
+ }
+ return LV_FS_RES_OK;
+}
+
+lv_fs_res_t sd_seek_cb(lv_fs_drv_t * drv, void * file_p, uint32_t pos) {
+ sd_read_addr_offset = sd_read_base_addr + (pos - 4) / 200 * 409;
+ lv_gcode_file_seek(sd_read_addr_offset);
+ return LV_FS_RES_OK;
+}
+
+lv_fs_res_t sd_tell_cb(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p) {
+ if (sd_read_addr_offset) *pos_p = 0;
+ else *pos_p = (sd_read_addr_offset - sd_read_base_addr) / 409 * 200 + 4;
+ return LV_FS_RES_OK;
+}
+
+void lv_encoder_pin_init() {
+ #if 1 // HAS_DIGITAL_BUTTONS
+
+ #if BUTTON_EXISTS(EN1)
+ SET_INPUT_PULLUP(BTN_EN1);
+ #endif
+ #if BUTTON_EXISTS(EN2)
+ SET_INPUT_PULLUP(BTN_EN2);
+ #endif
+ #if BUTTON_EXISTS(ENC)
+ SET_INPUT_PULLUP(BTN_ENC);
+ #endif
+
+ #if BUTTON_EXISTS(BACK)
+ SET_INPUT_PULLUP(BTN_BACK);
+ #endif
+
+ #if BUTTON_EXISTS(UP)
+ SET_INPUT(BTN_UP);
+ #endif
+ #if BUTTON_EXISTS(DWN)
+ SET_INPUT(BTN_DWN);
+ #endif
+ #if BUTTON_EXISTS(LFT)
+ SET_INPUT(BTN_LFT);
+ #endif
+ #if BUTTON_EXISTS(RT)
+ SET_INPUT(BTN_RT);
+ #endif
+
+ #endif // HAS_DIGITAL_BUTTONS
+}
+
+#if 1 // HAS_ENCODER_ACTION
+
+ //static const int8_t encoderDirection = 1;
+ //static int16_t enc_Direction;
+ void lv_update_encoder() {
+ static uint8_t buttons;
+ static uint32_t encoder_time1;
+ uint32_t tmpTime, diffTime = 0;
+ tmpTime = millis();
+ diffTime = getTickDiff(tmpTime, encoder_time1);
+ if (diffTime > 50) {
+
+ #if ANY_BUTTON(EN1, EN2, ENC, BACK)
+
+ uint8_t newbutton = 0;
+
+ #if BUTTON_EXISTS(EN1)
+ if (BUTTON_PRESSED(EN1)) newbutton |= EN_A;
+ #endif
+ #if BUTTON_EXISTS(EN2)
+ if (BUTTON_PRESSED(EN2)) newbutton |= EN_B;
+ #endif
+ #if BUTTON_EXISTS(ENC)
+ if (BUTTON_PRESSED(ENC)) newbutton |= EN_C;
+ #endif
+ #if BUTTON_EXISTS(BACK)
+ if (BUTTON_PRESSED(BACK)) newbutton |= EN_D;
+ #endif
+
+ #else
+
+ constexpr uint8_t newbutton = 0;
+
+ #endif
+
+ buttons = newbutton;
+
+ #if HAS_ENCODER_WHEEL
+ static uint8_t lastEncoderBits;
+
+ #define encrot0 0
+ #define encrot1 1
+ #define encrot2 2
+
+ // Manage encoder rotation
+ //#define ENCODER_SPIN(_E1, _E2) switch (lastEncoderBits) { case _E1: enc_Direction += encoderDirection; break; case _E2: enc_Direction -= encoderDirection; }
+
+ uint8_t enc = 0;
+ if (buttons & EN_A) enc |= B01;
+ if (buttons & EN_B) enc |= B10;
+ if (enc != lastEncoderBits) {
+ switch (enc) {
+ case encrot1:
+ if (lastEncoderBits == encrot0) {
+ enc_diff--;
+ encoder_time1 = tmpTime;
+ }
+ break;
+ case encrot2:
+ if (lastEncoderBits == encrot0) {
+ enc_diff++;
+ encoder_time1 = tmpTime;
+ }
+ break;
+ }
+ lastEncoderBits = enc;
+ }
+ static uint8_t last_button_state = LV_INDEV_STATE_REL;
+ const uint8_t enc_c = (buttons & EN_C) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
+ if (enc_c != last_button_state) {
+ state = enc_c ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
+
+ last_button_state = enc_c;
+ }
+
+ #endif // HAS_ENCODER_WHEEL
+
+ } // next_button_update_ms
+ }
+
+#endif // HAS_ENCODER_ACTION
+
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.h
index 1b33d6e6bf..7e24f948fd 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.h
@@ -22,25 +22,44 @@
#pragma once
/**
- * @file tft_lvgl_configuration.h
- * @date 2020-02-21
- * */
+ * @file lcd/extui/lib/mks_ui/tft_lvgl_configuration.h
+ * @date 2020-02-21
+ */
-//#ifdef __cplusplus
-//extern "C" {
-//#endif
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
#include
-void tft_lvgl_init();
-void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p);
-bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
+//#define GRAPHICAL_TFT_ROTATE_180
+#define USE_WIFI_FUNCTION 0
+
+extern void tft_lvgl_init();
+extern void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p);
+extern bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
+extern bool my_mousewheel_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
+
+extern void LCD_Clear(uint16_t Color);
+extern void tft_set_point(uint16_t x, uint16_t y, uint16_t point);
+extern void LCD_setWindowArea(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh);
+extern void LCD_WriteRAM_Prepare(void);
+extern void lcd_draw_logo();
+extern void lv_encoder_pin_init();
+extern void lv_update_encoder();
+
+extern lv_fs_res_t spi_flash_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode);
+extern lv_fs_res_t spi_flash_close_cb (lv_fs_drv_t * drv, void * file_p);
+extern lv_fs_res_t spi_flash_read_cb (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
+extern lv_fs_res_t spi_flash_seek_cb(lv_fs_drv_t * drv, void * file_p, uint32_t pos);
+extern lv_fs_res_t spi_flash_tell_cb(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
-void LCD_Clear(uint16_t Color);
-void tft_set_point(uint16_t x, uint16_t y, uint16_t point);
-void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh);
-void LCD_WriteRAM_Prepare(void);
+extern lv_fs_res_t sd_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode);
+extern lv_fs_res_t sd_close_cb (lv_fs_drv_t * drv, void * file_p);
+extern lv_fs_res_t sd_read_cb (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
+extern lv_fs_res_t sd_seek_cb(lv_fs_drv_t * drv, void * file_p, uint32_t pos);
+extern lv_fs_res_t sd_tell_cb(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
-//#ifdef __cplusplus
-//} /* extern "C" */
-//#endif
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp b/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp
index 1ea47cef2d..e230195eab 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp
@@ -54,11 +54,8 @@ dialog_menu_def dialog_menu;
language_menu_def language_menu;
print_file_dialog_menu_def print_file_dialog_menu;
filesys_menu_def filesys_menu;
-zoffset_menu_def zoffset_menu;
tool_menu_def tool_menu;
MachinePara_menu_def MachinePara_menu;
-MachineSettings_menu_def MachineSettings_menu;
-TemperatureSettings_menu_def TemperatureSettings_menu;
pause_msg_def pause_msg_menu;
eeprom_def eeprom_menu;
@@ -67,8 +64,8 @@ void machine_setting_disp() {
if (gCfgItems.language == LANG_SIMPLE_CHINESE) {
MachinePara_menu.title = MACHINE_PARA_TITLE_CN;
MachinePara_menu.MachineSetting = MACHINE_TYPE_CNOFIG_CN;
- MachinePara_menu.TemperatureSetting = TEMPERATURE_CONFIG_CN;
MachinePara_menu.MotorSetting = MOTOR_CONFIG_CN;
+ MachinePara_menu.leveling = MACHINE_LEVELING_CONFIG_CN;
MachinePara_menu.AdvanceSetting = ADVANCE_CONFIG_CN;
machine_menu.default_value = DEFAULT_CN;
@@ -81,7 +78,6 @@ void machine_setting_disp() {
machine_menu.HomeDir = MACHINE_HOMEDIR_CN;
machine_menu.EndStopType = MACHINE_ENDSTOP_TYPE_CN;
machine_menu.FilamentConf = MACHINE_FILAMENT_CONFIG_CN;
- machine_menu.LevelingConf = MACHINE_LEVELING_CONFIG_CN;
machine_menu.MachineTypeConfTitle = MACHINE_TYPE_CONFIG_TITLE_CN;
machine_menu.xyz = MACHINE_TYPE_XYZ_CN;
@@ -116,18 +112,18 @@ void machine_setting_disp() {
machine_menu.opened = ENDSTOP_OPENED_CN;
machine_menu.closed = ENDSTOP_CLOSED_CN;
- machine_menu.FilamentConfTitle = FILAMENT_CONF_TITLE_CN;
- machine_menu.InTemperature = FILAMENT_IN_TEMPERATURE_CN;
- machine_menu.InLength = FILAMENT_IN_LENGTH_CN;
- machine_menu.InSpeed = FILAMENT_IN_SPEED_CN;
- machine_menu.OutTemperature = FILAMENT_OUT_TEMPERATURE_CN;
- machine_menu.OutLength = FILAMENT_OUT_LENGTH_CN;
- machine_menu.OutSpeed = FILAMENT_OUT_SPEED_CN;
+ machine_menu.FilamentConfTitle = FILAMENT_CONF_TITLE_CN;
+ machine_menu.InLength = FILAMENT_IN_LENGTH_CN;
+ machine_menu.InSpeed = FILAMENT_IN_SPEED_CN;
+ machine_menu.FilamentTemperature = FILAMENT_TEMPERATURE_CN;
+ machine_menu.OutLength = FILAMENT_OUT_LENGTH_CN;
+ machine_menu.OutSpeed = FILAMENT_OUT_SPEED_CN;
- machine_menu.LevelingParaConfTitle = LEVELING_CONF_TITLE_CN;
- machine_menu.LevelingParaConf = LEVELING_PARA_CONF_CN;
- machine_menu.DeltaLevelConf = LEVELING_DELTA_CN;
- machine_menu.XYZLevelconf = LEVELING_XYZ_CN;
+ machine_menu.LevelingParaConfTitle = LEVELING_CONF_TITLE_CN;
+ machine_menu.LevelingParaConf = LEVELING_PARA_CONF_CN;
+ machine_menu.LevelingManuPosConf = LEVELING_MANUAL_POS_CN;
+ machine_menu.LevelingAutoCommandConf = LEVELING_AUTO_COMMAND_CN;
+ machine_menu.LevelingAutoZoffsetConf = LEVELING_AUTO_ZOFFSET_CN;
machine_menu.LevelingSubConfTitle = LEVELING_PARA_CONF_TITLE_CN;
machine_menu.AutoLevelEnable = AUTO_LEVELING_ENABLE_CN;
@@ -177,16 +173,19 @@ void machine_setting_disp() {
machine_menu.HotbedMinTemperature = HOTBED_MIN_TEMPERATURE_CN;
machine_menu.HotbedMaxTemperature = HOTBED_MAX_TEMPERATURE_CN;
- machine_menu.MotorConfTitle = MOTOR_CONF_TITLE_CN;
- machine_menu.MaxFeedRateConf = MAXFEEDRATE_CONF_CN;
- machine_menu.AccelerationConf = ACCELERATION_CONF_CN;
- machine_menu.JerkConf = JERKCONF_CN;
- machine_menu.StepsConf = STEPSCONF_CN;
- machine_menu.TMCcurrentConf = TMC_CURRENT_CN;
- machine_menu.TMCStepModeConf = TMC_STEP_MODE_CN;
- machine_menu.MotorDirConf = MOTORDIRCONF_CN;
- machine_menu.HomeFeedRateConf = HOMEFEEDRATECONF_CN;
- machine_menu.PausePosition = PAUSE_POSITION_CN;
+ machine_menu.MotorConfTitle = MOTOR_CONF_TITLE_CN;
+ machine_menu.MaxFeedRateConf = MAXFEEDRATE_CONF_CN;
+ machine_menu.AccelerationConf = ACCELERATION_CONF_CN;
+ machine_menu.JerkConf = JERKCONF_CN;
+ machine_menu.StepsConf = STEPSCONF_CN;
+ machine_menu.TMCcurrentConf = TMC_CURRENT_CN;
+ machine_menu.TMCStepModeConf = TMC_STEP_MODE_CN;
+ machine_menu.MotorDirConf = MOTORDIRCONF_CN;
+ machine_menu.HomeFeedRateConf = HOMEFEEDRATECONF_CN;
+ machine_menu.PausePosition = PAUSE_POSITION_CN;
+ machine_menu.WifiSettings = WIFI_SETTINGS_CN;
+ machine_menu.HomingSensitivityConf = HOMING_SENSITIVITY_CONF_CN;
+ machine_menu.EncoderSettings = ENCODER_SETTINGS_CN;
machine_menu.MaxFeedRateConfTitle = MAXFEEDRATE_CONF_TITLE_CN;
machine_menu.XMaxFeedRate = X_MAXFEEDRATE_CN;
@@ -268,16 +267,38 @@ void machine_setting_disp() {
machine_menu.key_reset = KEY_REST_CN;
machine_menu.key_confirm = KEY_CONFIRM_CN;
- machine_menu.PausePosText = PAUSE_POSITION_CN;
- machine_menu.xPos = PAUSE_POSITION_X_CN;
- machine_menu.yPos = PAUSE_POSITION_Y_CN;
- machine_menu.zPos = PAUSE_POSITION_Z_CN;
+ machine_menu.PausePosText = PAUSE_POSITION_CN;
+ machine_menu.xPos = PAUSE_POSITION_X_CN;
+ machine_menu.yPos = PAUSE_POSITION_Y_CN;
+ machine_menu.zPos = PAUSE_POSITION_Z_CN;
+ machine_menu.WifiConfTitle = WIFI_SETTINGS_TITLE_CN;
+ machine_menu.wifiMode = WIFI_SETTINGS_MODE_CN;
+ machine_menu.wifiName = WIFI_SETTINGS_NAME_CN;
+ machine_menu.wifiPassWord = WIFI_SETTINGS_PASSWORD_CN;
+ machine_menu.wifiCloud = WIFI_SETTINGS_CLOUD_CN;
+ machine_menu.wifiConfig = WIFI_SETTINGS_CONFIG_CN;
+ machine_menu.wifiEdit = WIFI_SETTINGS_EDIT_CN;
+ machine_menu.wifiConfigTips = WIFI_CONFIG_TIPS_CN;
+
+ machine_menu.OffsetConfTitle = OFFSET_TITLE_CN;
+ machine_menu.Xoffset = OFFSET_X_CN;
+ machine_menu.Yoffset = OFFSET_Y_CN;
+ machine_menu.Zoffset = OFFSET_Z_CN;
+
+ machine_menu.HomingSensitivityConfTitle = HOMING_SENSITIVITY_CONF_TITLE_CN;
+ machine_menu.X_Sensitivity = X_SENSITIVITY_CN;
+ machine_menu.Y_Sensitivity = Y_SENSITIVITY_CN;
+ machine_menu.Z_Sensitivity = Z_SENSITIVITY_CN;
+ machine_menu.Z2_Sensitivity = Z2_SENSITIVITY_CN;
+
+ machine_menu.EncoderConfTitle = ENCODER_CONF_TITLE_CN;
+ machine_menu.EncoderConfText = ENCODER_CONF_TEXT_CN;
}
else if (gCfgItems.language == LANG_COMPLEX_CHINESE) {
MachinePara_menu.title = MACHINE_PARA_TITLE_T_CN;
MachinePara_menu.MachineSetting = MACHINE_TYPE_CNOFIG_T_CN;
- MachinePara_menu.TemperatureSetting = TEMPERATURE_CONFIG_T_CN;
MachinePara_menu.MotorSetting = MOTOR_CONFIG_T_CN;
+ MachinePara_menu.leveling = MACHINE_LEVELING_CONFIG_T_CN;
MachinePara_menu.AdvanceSetting = ADVANCE_CONFIG_T_CN;
machine_menu.default_value = DEFAULT_T_CN;
@@ -290,7 +311,6 @@ void machine_setting_disp() {
machine_menu.HomeDir = MACHINE_HOMEDIR_T_CN;
machine_menu.EndStopType = MACHINE_ENDSTOP_TYPE_T_CN;
machine_menu.FilamentConf = MACHINE_FILAMENT_CONFIG_T_CN;
- machine_menu.LevelingConf = MACHINE_LEVELING_CONFIG_T_CN;
machine_menu.MachineTypeConfTitle = MACHINE_TYPE_CONFIG_TITLE_T_CN;
machine_menu.xyz = MACHINE_TYPE_XYZ_T_CN;
@@ -325,18 +345,18 @@ void machine_setting_disp() {
machine_menu.opened = ENDSTOP_OPENED_T_CN;
machine_menu.closed = ENDSTOP_CLOSED_T_CN;
- machine_menu.FilamentConfTitle = FILAMENT_CONF_TITLE_T_CN;
- machine_menu.InTemperature = FILAMENT_IN_TEMPERATURE_T_CN;
- machine_menu.InLength = FILAMENT_IN_LENGTH_T_CN;
- machine_menu.InSpeed = FILAMENT_IN_SPEED_T_CN;
- machine_menu.OutTemperature = FILAMENT_OUT_TEMPERATURE_T_CN;
- machine_menu.OutLength = FILAMENT_OUT_LENGTH_T_CN;
- machine_menu.OutSpeed = FILAMENT_OUT_SPEED_T_CN;
+ machine_menu.FilamentConfTitle = FILAMENT_CONF_TITLE_T_CN;
+ machine_menu.InLength = FILAMENT_IN_LENGTH_T_CN;
+ machine_menu.InSpeed = FILAMENT_IN_SPEED_T_CN;
+ machine_menu.FilamentTemperature = FILAMENT_TEMPERATURE_T_CN;
+ machine_menu.OutLength = FILAMENT_OUT_LENGTH_T_CN;
+ machine_menu.OutSpeed = FILAMENT_OUT_SPEED_T_CN;
- machine_menu.LevelingParaConfTitle = LEVELING_CONF_TITLE_T_CN;
- machine_menu.LevelingParaConf = LEVELING_PARA_CONF_T_CN;
- machine_menu.DeltaLevelConf = LEVELING_DELTA_T_CN;
- machine_menu.XYZLevelconf = LEVELING_XYZ_T_CN;
+ machine_menu.LevelingParaConfTitle = LEVELING_CONF_TITLE_T_CN;
+ machine_menu.LevelingParaConf = LEVELING_PARA_CONF_T_CN;
+ machine_menu.LevelingManuPosConf = LEVELING_MANUAL_POS_T_CN;
+ machine_menu.LevelingAutoCommandConf = LEVELING_AUTO_COMMAND_T_CN;
+ machine_menu.LevelingAutoZoffsetConf = LEVELING_AUTO_ZOFFSET_T_CN;
machine_menu.LevelingSubConfTitle = LEVELING_PARA_CONF_TITLE_T_CN;
machine_menu.AutoLevelEnable = AUTO_LEVELING_ENABLE_T_CN;
@@ -386,16 +406,19 @@ void machine_setting_disp() {
machine_menu.HotbedMinTemperature = HOTBED_MIN_TEMPERATURE_T_CN;
machine_menu.HotbedMaxTemperature = HOTBED_MAX_TEMPERATURE_T_CN;
- machine_menu.MotorConfTitle = MOTOR_CONF_TITLE_T_CN;
- machine_menu.MaxFeedRateConf = MAXFEEDRATE_CONF_T_CN;
- machine_menu.AccelerationConf = ACCELERATION_CONF_T_CN;
- machine_menu.JerkConf = JERKCONF_T_CN;
- machine_menu.StepsConf = STEPSCONF_T_CN;
- machine_menu.TMCcurrentConf = TMC_CURRENT_T_CN;
- machine_menu.TMCStepModeConf = TMC_STEP_MODE_T_CN;
- machine_menu.MotorDirConf = MOTORDIRCONF_T_CN;
- machine_menu.HomeFeedRateConf = HOMEFEEDRATECONF_T_CN;
- machine_menu.PausePosition = PAUSE_POSITION_T_CN;
+ machine_menu.MotorConfTitle = MOTOR_CONF_TITLE_T_CN;
+ machine_menu.MaxFeedRateConf = MAXFEEDRATE_CONF_T_CN;
+ machine_menu.AccelerationConf = ACCELERATION_CONF_T_CN;
+ machine_menu.JerkConf = JERKCONF_T_CN;
+ machine_menu.StepsConf = STEPSCONF_T_CN;
+ machine_menu.TMCcurrentConf = TMC_CURRENT_T_CN;
+ machine_menu.TMCStepModeConf = TMC_STEP_MODE_T_CN;
+ machine_menu.MotorDirConf = MOTORDIRCONF_T_CN;
+ machine_menu.HomeFeedRateConf = HOMEFEEDRATECONF_T_CN;
+ machine_menu.PausePosition = PAUSE_POSITION_T_CN;
+ machine_menu.WifiSettings = WIFI_SETTINGS_T_CN;
+ machine_menu.HomingSensitivityConf = HOMING_SENSITIVITY_CONF_T_CN;
+ machine_menu.EncoderSettings = ENCODER_SETTINGS_T_CN;
machine_menu.MaxFeedRateConfTitle = MAXFEEDRATE_CONF_TITLE_T_CN;
machine_menu.XMaxFeedRate = X_MAXFEEDRATE_T_CN;
@@ -484,12 +507,34 @@ void machine_setting_disp() {
machine_menu.yPos = PAUSE_POSITION_Y_T_CN;
machine_menu.zPos = PAUSE_POSITION_Z_T_CN;
+ machine_menu.WifiConfTitle = WIFI_SETTINGS_TITLE_T_CN;
+ machine_menu.wifiMode = WIFI_SETTINGS_MODE_T_CN;
+ machine_menu.wifiName = WIFI_SETTINGS_NAME_T_CN;
+ machine_menu.wifiPassWord = WIFI_SETTINGS_PASSWORD_T_CN;
+ machine_menu.wifiCloud = WIFI_SETTINGS_CLOUD_T_CN;
+ machine_menu.wifiConfig = WIFI_SETTINGS_CONFIG_T_CN;
+ machine_menu.wifiEdit = WIFI_SETTINGS_EDIT_T_CN;
+ machine_menu.wifiConfigTips = WIFI_CONFIG_TIPS_T_CN;
+
+ machine_menu.OffsetConfTitle = OFFSET_TITLE_T_CN;
+ machine_menu.Xoffset = OFFSET_X_T_CN;
+ machine_menu.Yoffset = OFFSET_Y_T_CN;
+ machine_menu.Zoffset = OFFSET_Z_T_CN;
+
+ machine_menu.HomingSensitivityConfTitle = HOMING_SENSITIVITY_CONF_TITLE_T_CN;
+ machine_menu.X_Sensitivity = X_SENSITIVITY_T_CN;
+ machine_menu.Y_Sensitivity = Y_SENSITIVITY_T_CN;
+ machine_menu.Z_Sensitivity = Z_SENSITIVITY_T_CN;
+ machine_menu.Z2_Sensitivity = Z2_SENSITIVITY_T_CN;
+
+ machine_menu.EncoderConfTitle = ENCODER_CONF_TITLE_T_CN;
+ machine_menu.EncoderConfText = ENCODER_CONF_TEXT_T_CN;
}
else {
MachinePara_menu.title = MACHINE_PARA_TITLE_EN;
MachinePara_menu.MachineSetting = MACHINE_TYPE_CNOFIG_EN;
- MachinePara_menu.TemperatureSetting = TEMPERATURE_CONFIG_EN;
MachinePara_menu.MotorSetting = MOTOR_CONFIG_EN;
+ MachinePara_menu.leveling = MACHINE_LEVELING_CONFIG_EN;
MachinePara_menu.AdvanceSetting = ADVANCE_CONFIG_EN;
machine_menu.default_value = DEFAULT_EN;
@@ -502,7 +547,6 @@ void machine_setting_disp() {
machine_menu.HomeDir = MACHINE_HOMEDIR_EN;
machine_menu.EndStopType = MACHINE_ENDSTOP_TYPE_EN;
machine_menu.FilamentConf = MACHINE_FILAMENT_CONFIG_EN;
- machine_menu.LevelingConf = MACHINE_LEVELING_CONFIG_EN;
machine_menu.MachineTypeConfTitle = MACHINE_TYPE_CONFIG_TITLE_EN;
machine_menu.xyz = MACHINE_TYPE_XYZ_EN;
@@ -537,18 +581,18 @@ void machine_setting_disp() {
machine_menu.opened = ENDSTOP_OPENED_EN;
machine_menu.closed = ENDSTOP_CLOSED_EN;
- machine_menu.FilamentConfTitle = FILAMENT_CONF_TITLE_EN;
- machine_menu.InTemperature = FILAMENT_IN_TEMPERATURE_EN;
- machine_menu.InLength = FILAMENT_IN_LENGTH_EN;
- machine_menu.InSpeed = FILAMENT_IN_SPEED_EN;
- machine_menu.OutTemperature = FILAMENT_OUT_TEMPERATURE_EN;
- machine_menu.OutLength = FILAMENT_OUT_LENGTH_EN;
- machine_menu.OutSpeed = FILAMENT_OUT_SPEED_EN;
+ machine_menu.FilamentConfTitle = FILAMENT_CONF_TITLE_EN;
+ machine_menu.InLength = FILAMENT_IN_LENGTH_EN;
+ machine_menu.InSpeed = FILAMENT_IN_SPEED_EN;
+ machine_menu.FilamentTemperature = FILAMENT_TEMPERATURE_EN;
+ machine_menu.OutLength = FILAMENT_OUT_LENGTH_EN;
+ machine_menu.OutSpeed = FILAMENT_OUT_SPEED_EN;
- machine_menu.LevelingParaConfTitle = LEVELING_CONF_TITLE_EN;
- machine_menu.LevelingParaConf = LEVELING_PARA_CONF_EN;
- machine_menu.DeltaLevelConf = LEVELING_DELTA_EN;
- machine_menu.XYZLevelconf = LEVELING_XYZ_EN;
+ machine_menu.LevelingParaConfTitle = LEVELING_CONF_TITLE_EN;
+ machine_menu.LevelingParaConf = LEVELING_PARA_CONF_EN;
+ machine_menu.LevelingManuPosConf = LEVELING_MANUAL_POS_EN;
+ machine_menu.LevelingAutoCommandConf = LEVELING_AUTO_COMMAND_EN;
+ machine_menu.LevelingAutoZoffsetConf = LEVELING_AUTO_ZOFFSET_EN;
machine_menu.LevelingSubConfTitle = LEVELING_PARA_CONF_TITLE_EN;
machine_menu.AutoLevelEnable = AUTO_LEVELING_ENABLE_EN;
@@ -598,16 +642,19 @@ void machine_setting_disp() {
machine_menu.HotbedMinTemperature = HOTBED_MIN_TEMPERATURE_EN;
machine_menu.HotbedMaxTemperature = HOTBED_MAX_TEMPERATURE_EN;
- machine_menu.MotorConfTitle = MOTOR_CONF_TITLE_EN;
- machine_menu.MaxFeedRateConf = MAXFEEDRATE_CONF_EN;
- machine_menu.AccelerationConf = ACCELERATION_CONF_EN;
- machine_menu.JerkConf = JERKCONF_EN;
- machine_menu.StepsConf = STEPSCONF_EN;
- machine_menu.TMCcurrentConf = TMC_CURRENT_EN;
- machine_menu.TMCStepModeConf = TMC_STEP_MODE_EN;
- machine_menu.MotorDirConf = MOTORDIRCONF_EN;
- machine_menu.HomeFeedRateConf = HOMEFEEDRATECONF_EN;
- machine_menu.PausePosition = PAUSE_POSITION_EN;
+ machine_menu.MotorConfTitle = MOTOR_CONF_TITLE_EN;
+ machine_menu.MaxFeedRateConf = MAXFEEDRATE_CONF_EN;
+ machine_menu.AccelerationConf = ACCELERATION_CONF_EN;
+ machine_menu.JerkConf = JERKCONF_EN;
+ machine_menu.StepsConf = STEPSCONF_EN;
+ machine_menu.TMCcurrentConf = TMC_CURRENT_EN;
+ machine_menu.TMCStepModeConf = TMC_STEP_MODE_EN;
+ machine_menu.MotorDirConf = MOTORDIRCONF_EN;
+ machine_menu.HomeFeedRateConf = HOMEFEEDRATECONF_EN;
+ machine_menu.PausePosition = PAUSE_POSITION_EN;
+ machine_menu.WifiSettings = WIFI_SETTINGS_EN;
+ machine_menu.HomingSensitivityConf = HOMING_SENSITIVITY_CONF_EN;
+ machine_menu.EncoderSettings = ENCODER_SETTINGS_EN;
machine_menu.MaxFeedRateConfTitle = MAXFEEDRATE_CONF_TITLE_EN;
machine_menu.XMaxFeedRate = X_MAXFEEDRATE_EN;
@@ -692,10 +739,32 @@ void machine_setting_disp() {
machine_menu.high_level = MOTOR_EN_HIGH_LEVEL_EN;
machine_menu.low_level = MOTOR_EN_LOW_LEVEL_EN;
- machine_menu.PausePosText = PAUSE_POSITION_EN;
- machine_menu.xPos = PAUSE_POSITION_X_EN;
- machine_menu.yPos = PAUSE_POSITION_Y_EN;
- machine_menu.zPos = PAUSE_POSITION_Z_EN;
+ machine_menu.PausePosText = PAUSE_POSITION_EN;
+ machine_menu.xPos = PAUSE_POSITION_X_EN;
+ machine_menu.yPos = PAUSE_POSITION_Y_EN;
+ machine_menu.zPos = PAUSE_POSITION_Z_EN;
+ machine_menu.WifiConfTitle = WIFI_SETTINGS_TITLE_EN;
+ machine_menu.wifiMode = WIFI_SETTINGS_MODE_EN;
+ machine_menu.wifiName = WIFI_SETTINGS_NAME_EN;
+ machine_menu.wifiPassWord = WIFI_SETTINGS_PASSWORD_EN;
+ machine_menu.wifiCloud = WIFI_SETTINGS_CLOUD_EN;
+ machine_menu.wifiConfig = WIFI_SETTINGS_CONFIG_EN;
+ machine_menu.wifiEdit = WIFI_SETTINGS_EDIT_EN;
+ machine_menu.wifiConfigTips = WIFI_CONFIG_TIPS_EN;
+
+ machine_menu.OffsetConfTitle = OFFSET_TITLE_EN;
+ machine_menu.Xoffset = OFFSET_X_EN;
+ machine_menu.Yoffset = OFFSET_Y_EN;
+ machine_menu.Zoffset = OFFSET_Z_EN;
+
+ machine_menu.HomingSensitivityConfTitle = HOMING_SENSITIVITY_CONF_TITLE_EN;
+ machine_menu.X_Sensitivity = X_SENSITIVITY_EN;
+ machine_menu.Y_Sensitivity = Y_SENSITIVITY_EN;
+ machine_menu.Z_Sensitivity = Z_SENSITIVITY_EN;
+ machine_menu.Z2_Sensitivity = Z2_SENSITIVITY_EN;
+
+ machine_menu.EncoderConfTitle = ENCODER_CONF_TITLE_EN;
+ machine_menu.EncoderConfText = ENCODER_CONF_TEXT_EN;
}
}
@@ -771,10 +840,6 @@ void disp_language_init() {
filament_menu.stat_temp = TEXT_VALUE;
- zoffset_menu.step001 = ZOFFSET_STEP001;
- zoffset_menu.step01 = ZOFFSET_STEP01;
- zoffset_menu.step1 = ZOFFSET_STEP1;
-
machine_menu.key_0 = KEYBOARD_KEY0_EN;
machine_menu.key_1 = KEYBOARD_KEY1_EN;
machine_menu.key_2 = KEYBOARD_KEY2_EN;
@@ -788,22 +853,15 @@ void disp_language_init() {
machine_menu.key_point = KEYBOARD_KEY_POINT_EN;
machine_menu.negative = KEYBOARD_KEY_NEGATIVE_EN;
// wifi-list
- #if 0
- list_menu.title = TEXT_WIFI_MENU_TITLE_EN;
- list_menu.file_pages = FILE_PAGES_EN;
- // keyboard
- keyboard_menu.apply = MANUAL_IP_APPLY_EN;
- keyboard_menu.password = TEXT_WIFI_PASSWORD_EN;
- keyboard_menu.space = TEXT_WIFI_SAPCE_EN;
- keyboard_menu.letter = TEXT_WIFI_LETTER_EN;
- keyboard_menu.digital = TEXT_WIFI_DIGITAL_EN;
- keyboard_menu.symbol = TEXT_WIFI_SYMBOL_EN;
+ #if ENABLED(USE_WIFI_FUNCTION)
+ list_menu.title = TEXT_WIFI_MENU_TITLE_EN;
+ list_menu.file_pages = FILE_PAGES_EN;
+
// tips
- tips_menu.pointBold = TEXT_WIFI_POINT_BOLD_EN;
tips_menu.joining = TEXT_WIFI_JOINING_EN;
tips_menu.failedJoin = TEXT_WIFI_FAILED_JOIN_EN;
tips_menu.wifiConected = TEXT_WIFI_WIFI_CONECTED_EN;
- #endif
+ #endif //USE_WIFI_FUNCTION
machine_setting_disp();
operation_menu.babystep = TEXT_BABY_STEP_EN;
@@ -904,7 +962,6 @@ void disp_language_init() {
filesys_menu.usb_sys = U_DISK_TEXT_CN;
//
more_menu.title = TITLE_MORE_CN;
- more_menu.zoffset = ZOFFSET_CN;
// WIFI
wifi_menu.title = WIFI_TEXT;
// wifi_menu.key = WIFI_KEY_TEXT_CN;
@@ -1016,11 +1073,6 @@ void disp_language_init() {
print_file_dialog_menu.reprint = DIALOG_REPRINT_CN;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_CN;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_CN;
- zoffset_menu.inc = ZOFFSET_INC_CN;
- zoffset_menu.dec = ZOFFSET_DEC_CN;
-
pause_msg_menu.pausing = MESSAGE_PAUSING_CN;
pause_msg_menu.changing = MESSAGE_CHANGING_CN;
pause_msg_menu.unload = MESSAGE_UNLOAD_CN;
@@ -1092,7 +1144,6 @@ void disp_language_init() {
preheat_menu.step_10c = TEXT_10C_T_CN;
//
move_menu.title = MOVE_TEXT_T_CN;
- more_menu.zoffset = ZOFFSET_T_CN;
//
home_menu.title = TITLE_HOME_T_CN;
home_menu.stopmove = HOME_STOPMOVE_T_CN;
@@ -1249,10 +1300,6 @@ void disp_language_init() {
print_file_dialog_menu.print_time = DIALOG_PRINT_TIME_T_CN;
print_file_dialog_menu.reprint = DIALOG_REPRINT_T_CN;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_T_CN;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_T_CN;
- zoffset_menu.inc = ZOFFSET_INC_T_CN;
- zoffset_menu.dec = ZOFFSET_DEC_T_CN;
pause_msg_menu.pausing = MESSAGE_PAUSING_T_CN;
pause_msg_menu.changing = MESSAGE_CHANGING_T_CN;
@@ -1359,7 +1406,6 @@ void disp_language_init() {
set_menu.machine_para = MACHINE_PARA_EN;
set_menu.eepromSet = EEPROM_SETTINGS_EN;
more_menu.title = TITLE_MORE_EN;
- more_menu.zoffset = ZOFFSET_EN;
//
filesys_menu.title = TITLE_FILESYS_EN;
filesys_menu.sd_sys = SD_CARD_TEXT_EN;
@@ -1469,10 +1515,6 @@ void disp_language_init() {
print_file_dialog_menu.print_time = DIALOG_PRINT_TIME_EN;
print_file_dialog_menu.reprint = DIALOG_REPRINT_EN;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_EN;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_EN;
- zoffset_menu.inc = ZOFFSET_INC_EN;
- zoffset_menu.dec = ZOFFSET_DEC_EN;
pause_msg_menu.pausing = MESSAGE_PAUSING_EN;
pause_msg_menu.changing = MESSAGE_CHANGING_EN;
@@ -1579,7 +1621,6 @@ void disp_language_init() {
set_menu.machine_para = MACHINE_PARA_RU;
set_menu.eepromSet = EEPROM_SETTINGS_RU;
more_menu.title = TITLE_MORE_RU;
- more_menu.zoffset = ZOFFSET_RU;
//
filesys_menu.title = TITLE_FILESYS_RU;
filesys_menu.sd_sys = SD_CARD_TEXT_RU;
@@ -1689,10 +1730,6 @@ void disp_language_init() {
print_file_dialog_menu.print_time = DIALOG_PRINT_TIME_RU;
print_file_dialog_menu.reprint = DIALOG_REPRINT_RU;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_RU;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_RU;
- zoffset_menu.inc = ZOFFSET_INC_RU;
- zoffset_menu.dec = ZOFFSET_DEC_RU;
pause_msg_menu.pausing = MESSAGE_PAUSING_RU;
pause_msg_menu.changing = MESSAGE_CHANGING_RU;
@@ -1803,7 +1840,6 @@ void disp_language_init() {
set_menu.machine_para = MACHINE_PARA_SP;
set_menu.eepromSet = EEPROM_SETTINGS_SP;
more_menu.title = TITLE_MORE_SP;
- more_menu.zoffset = ZOFFSET_SP;
//
filesys_menu.title = TITLE_FILESYS_SP;
filesys_menu.sd_sys = SD_CARD_TEXT_SP;
@@ -1914,10 +1950,6 @@ void disp_language_init() {
print_file_dialog_menu.print_time = DIALOG_PRINT_TIME_SP;
print_file_dialog_menu.reprint = DIALOG_REPRINT_SP;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_SP;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_SP;
- zoffset_menu.inc = ZOFFSET_INC_SP;
- zoffset_menu.dec = ZOFFSET_DEC_SP;
pause_msg_menu.pausing = MESSAGE_PAUSING_SP;
pause_msg_menu.changing = MESSAGE_CHANGING_SP;
@@ -2025,7 +2057,6 @@ void disp_language_init() {
set_menu.machine_para = MACHINE_PARA_FR;
set_menu.eepromSet = EEPROM_SETTINGS_FR;
more_menu.title = TITLE_MORE_FR;
- more_menu.zoffset = ZOFFSET_FR;
//
filesys_menu.title = TITLE_FILESYS_FR;
filesys_menu.sd_sys = SD_CARD_TEXT_FR;
@@ -2137,10 +2168,6 @@ void disp_language_init() {
print_file_dialog_menu.print_time = DIALOG_PRINT_TIME_FR;
print_file_dialog_menu.reprint = DIALOG_REPRINT_FR;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_FR;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_FR;
- zoffset_menu.inc = ZOFFSET_INC_FR;
- zoffset_menu.dec = ZOFFSET_DEC_FR;
pause_msg_menu.pausing = MESSAGE_PAUSING_FR;
pause_msg_menu.changing = MESSAGE_CHANGING_FR;
@@ -2249,7 +2276,6 @@ void disp_language_init() {
set_menu.machine_para = MACHINE_PARA_IT;
set_menu.eepromSet = EEPROM_SETTINGS_IT;
more_menu.title = TITLE_MORE_IT;
- more_menu.zoffset = ZOFFSET_IT;
//
filesys_menu.title = TITLE_FILESYS_IT;
filesys_menu.sd_sys = SD_CARD_TEXT_IT;
@@ -2358,10 +2384,6 @@ void disp_language_init() {
print_file_dialog_menu.print_time = DIALOG_PRINT_TIME_IT;
print_file_dialog_menu.reprint = DIALOG_REPRINT_IT;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_IT;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_IT;
- zoffset_menu.inc = ZOFFSET_INC_IT;
- zoffset_menu.dec = ZOFFSET_DEC_IT;
pause_msg_menu.pausing = MESSAGE_PAUSING_IT;
pause_msg_menu.changing = MESSAGE_CHANGING_IT;
@@ -2472,7 +2494,6 @@ void disp_language_init() {
set_menu.eepromSet = EEPROM_SETTINGS_EN;
//
more_menu.title = TITLE_MORE_EN;
- more_menu.zoffset = ZOFFSET_EN;
//
filesys_menu.title = TITLE_FILESYS_EN;
filesys_menu.sd_sys = SD_CARD_TEXT_EN;
@@ -2582,10 +2603,6 @@ void disp_language_init() {
print_file_dialog_menu.print_time = DIALOG_PRINT_TIME_EN;
print_file_dialog_menu.reprint = DIALOG_REPRINT_EN;
print_file_dialog_menu.wifi_enable_tips = DIALOG_WIFI_ENABLE_TIPS_EN;
- // ZOFFSET
- zoffset_menu.title = TITLE_ZOFFSET_EN;
- zoffset_menu.inc = ZOFFSET_INC_EN;
- zoffset_menu.dec = ZOFFSET_DEC_EN;
pause_msg_menu.pausing = MESSAGE_PAUSING_EN;
pause_msg_menu.changing = MESSAGE_CHANGING_EN;
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.h b/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.h
index 5851009356..675fd41f16 100644
--- a/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.h
+++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.h
@@ -60,7 +60,6 @@ typedef struct machine_common_disp{
const char *HomeDir;
const char *EndStopType;
const char *FilamentConf;
- const char *LevelingConf;
const char *MachineTypeConfTitle;
const char *xyz;
@@ -96,17 +95,17 @@ typedef struct machine_common_disp{
const char *closed;
const char *FilamentConfTitle;
- const char *InTemperature;
const char *InLength;
const char *InSpeed;
- const char *OutTemperature;
+ const char *FilamentTemperature;
const char *OutLength;
const char *OutSpeed;
const char *LevelingParaConfTitle;
const char *LevelingParaConf;
- const char *DeltaLevelConf;
- const char *XYZLevelconf;
+ const char *LevelingManuPosConf;
+ const char *LevelingAutoCommandConf;
+ const char *LevelingAutoZoffsetConf;
const char *LevelingSubConfTitle;
const char *AutoLevelEnable;
@@ -165,6 +164,7 @@ typedef struct machine_common_disp{
const char *HomeFeedRateConf;
const char *TMCcurrentConf;
const char *TMCStepModeConf;
+ const char *HomingSensitivityConf;
const char *MaxFeedRateConfTitle;
const char *XMaxFeedRate;
@@ -210,6 +210,12 @@ typedef struct machine_common_disp{
const char *E0_StepMode;
const char *E1_StepMode;
+ const char *HomingSensitivityConfTitle;
+ const char *X_Sensitivity;
+ const char *Y_Sensitivity;
+ const char *Z_Sensitivity;
+ const char *Z2_Sensitivity;
+
const char *MotorDirConfTitle;
const char *X_MotorDir;
const char *Y_MotorDir;
@@ -231,6 +237,8 @@ typedef struct machine_common_disp{
const char *Z2andZ2Endstop;
const char *EnablePinsInvert;
const char *PausePosition;
+ const char *WifiSettings;
+ const char *EncoderSettings;
const char *Z2ConfTitle;
const char *Z2Enable;
@@ -266,6 +274,23 @@ typedef struct machine_common_disp{
const char *yPos;
const char *zPos;
+ const char *WifiConfTitle;
+ const char *wifiMode;
+ const char *wifiName;
+ const char *wifiPassWord;
+ const char *wifiCloud;
+ const char *wifiConfig;
+ const char *wifiEdit;
+ const char *wifiConfigTips;
+
+ const char *OffsetConfTitle;
+ const char *Xoffset;
+ const char *Yoffset;
+ const char *Zoffset;
+
+ const char *EncoderConfTitle;
+ const char *EncoderConfText;
+
} machine_common_def;
extern machine_common_def machine_menu;
@@ -435,7 +460,6 @@ extern filesys_menu_def filesys_menu;
typedef struct more_menu_disp {
const char *title;
- const char *zoffset;
const char *back;
} more_menu_def;
@@ -661,18 +685,6 @@ typedef struct print_file_dialog_disp {
extern print_file_dialog_menu_def print_file_dialog_menu;
-typedef struct zoffset_menu_disp {
- const char *title;
- const char *inc;
- const char *dec;
- const char *step001;
- const char *step01;
- const char *step1;
- const char *back;
-} zoffset_menu_def;
-
-extern zoffset_menu_def zoffset_menu;
-
typedef struct tool_menu_disp {
const char *title;
const char *preheat;
@@ -691,37 +703,13 @@ extern tool_menu_def tool_menu;
typedef struct MachinePara_menu_disp {
const char *title;
const char *MachineSetting;
- const char *TemperatureSetting;
const char *MotorSetting;
+ const char *leveling;
const char *AdvanceSetting;
- //const char *back;
} MachinePara_menu_def;
extern MachinePara_menu_def MachinePara_menu;
-typedef struct MachineSettings_menu_disp {
- const char *title;
- const char *Machine;
- const char *Stroke;
- const char *HomeDir;
- const char *EndStopType;
- const char *filamet;
- const char *leveling;
- const char *back;
-} MachineSettings_menu_def;
-
-extern MachineSettings_menu_def MachineSettings_menu;
-
-typedef struct TemperatureSettings_menu_disp {
- const char *title;
- const char *nozzle;
- const char *hotbed;
- const char *preheat;
- const char *back;
-} TemperatureSettings_menu_def;
-
-extern TemperatureSettings_menu_def TemperatureSettings_menu;
-
typedef struct pause_msg_disp {
const char *pausing;
const char *changing;
@@ -842,6 +830,7 @@ extern eeprom_def eeprom_menu;
#define DIALOG_UPLOAD_SPEED_EN "Speed"
#define DIALOG_UPDATE_WIFI_FIRMWARE_EN "Updating wifi model firmware"
#define DIALOG_UPDATE_WIFI_WEB_EN "Updating wifi model web data"
+#define DIALOG_UPDATE_NO_DEVICE_EN "please check \nwether memory device insert!"
#define ZOFFSET_STEP001 "0.01mm"
#define ZOFFSET_STEP01 "0.1mm"
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.cpp b/Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.cpp
new file mode 100644
index 0000000000..01c86ad7cb
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.cpp
@@ -0,0 +1,120 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "draw_ui.h"
+#include "wifiSerial.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#include
+#include
+#include
+#include
+#include
+
+#include "../../../../MarlinCore.h"
+
+DEFINE_WFSERIAL(WifiSerial1, 1);
+
+WifiSerial::WifiSerial(usart_dev *usart_device, uint8 tx_pin, uint8 rx_pin) {
+ this->usart_device = usart_device;
+ this->tx_pin = tx_pin;
+ this->rx_pin = rx_pin;
+}
+
+/**
+ * Set up / tear down
+ */
+#if STM32_MCU_SERIES == STM32_SERIES_F1
+ /* F1 MCUs have no GPIO_AFR[HL], so turn off PWM if there's a conflict
+ * on this GPIO bit. */
+ static void disable_timer_if_necessary(timer_dev *dev, uint8 ch) {
+ if (dev != nullptr) timer_set_mode(dev, ch, TIMER_DISABLED);
+ }
+#elif STM32_MCU_SERIES == STM32_SERIES_F2 || STM32_MCU_SERIES == STM32_SERIES_F4
+ #define disable_timer_if_necessary(dev, ch) ((void)0)
+#else
+ #warning "Unsupported STM32 series; timer conflicts are possible"
+#endif
+
+void WifiSerial::begin(uint32 baud) { begin(baud, SERIAL_8N1); }
+
+/**
+ * Roger Clark.
+ * Note. The config parameter is not currently used. This is a work in progress.
+ * Code needs to be written to set the config of the hardware serial control register in question.
+ */
+
+void WifiSerial::begin(uint32 baud, uint8_t config) {
+ //ASSERT(baud <= this->usart_device->max_baud); // Roger Clark. Assert doesn't do anything useful, we may as well save the space in flash and ram etc
+
+ if (baud > this->usart_device->max_baud) return;
+
+ const stm32_pin_info *txi = &PIN_MAP[this->tx_pin],
+ *rxi = &PIN_MAP[this->rx_pin];
+
+ disable_timer_if_necessary(txi->timer_device, txi->timer_channel);
+
+ usart_init(this->usart_device);
+
+ // Reinitialize the receive buffer, mks_esp8266 fixed data frame length is 1k bytes
+ rb_init(this->usart_device->rb, WIFI_RX_BUF_SIZE, wifiRxBuf);
+
+ usart_config_gpios_async(this->usart_device,
+ rxi->gpio_device, rxi->gpio_bit,
+ txi->gpio_device, txi->gpio_bit,
+ config);
+ usart_set_baud_rate(this->usart_device, USART_USE_PCLK, baud);
+ usart_enable(this->usart_device);
+}
+
+void WifiSerial::end(void) {
+ usart_disable(this->usart_device);
+}
+
+int WifiSerial::available(void) {
+ return usart_data_available(this->usart_device);
+}
+
+//
+// I/O
+//
+
+int WifiSerial::read(void) {
+ if (usart_data_available(usart_device) <= 0) return -1;
+ return usart_getc(usart_device);
+}
+
+int WifiSerial::write(unsigned char ch) {
+ usart_putc(this->usart_device, ch);
+ return 1;
+}
+
+int WifiSerial::wifi_rb_is_full(void) {
+ return rb_is_full(this->usart_device->rb);
+}
+
+#endif // USE_WIFI_FUNCTION
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.h b/Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.h
new file mode 100644
index 0000000000..9d3946fee7
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/wifiSerial.h
@@ -0,0 +1,102 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include "tft_lvgl_configuration.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#if SERIAL_PORT_2 != -1
+ #error "SERIAL_PORT_2 must be set to -1 with HAS_TFT_LVGL_UI and USE_WIFI_FUNCTION."
+#endif
+
+#define WIFI_BAUDRATE 115200
+#define WIFI_UPLOAD_BAUDRATE 1958400
+#define USART_SAFE_INSERT
+
+#define WIFI_RX_BUF_SIZE (1024+1)
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define DEFINE_WFSERIAL(name, n)\
+ WifiSerial name(USART##n, \
+ BOARD_USART##n##_TX_PIN, \
+ BOARD_USART##n##_RX_PIN)
+
+class WifiSerial {
+ public:
+ uint8 wifiRxBuf[WIFI_RX_BUF_SIZE];
+
+ public:
+ WifiSerial(struct usart_dev *usart_device, uint8 tx_pin, uint8 rx_pin);
+
+ /* Set up/tear down */
+ void begin(uint32 baud);
+ void begin(uint32 baud,uint8_t config);
+ void end();
+ int available(void);
+ int read(void);
+ int write(uint8_t);
+ inline void wifi_usart_irq(usart_reg_map *regs) {
+ /* Handling RXNEIE and TXEIE interrupts.
+ * RXNE signifies availability of a byte in DR.
+ *
+ * See table 198 (sec 27.4, p809) in STM document RM0008 rev 15.
+ * We enable RXNEIE.
+ */
+ if ((regs->CR1 & USART_CR1_RXNEIE) && (regs->SR & USART_SR_RXNE)) {
+ #ifdef USART_SAFE_INSERT
+ /* If the buffer is full and the user defines USART_SAFE_INSERT,
+ * ignore new bytes. */
+ rb_safe_insert(this->usart_device->rb, (uint8)regs->DR);
+ #else
+ /* By default, push bytes around in the ring buffer. */
+ rb_push_insert(this->usart_device->rb, (uint8)regs->DR);
+ #endif
+ }
+ /* TXE signifies readiness to send a byte to DR. */
+ if ((regs->CR1 & USART_CR1_TXEIE) && (regs->SR & USART_SR_TXE)) {
+ if (!rb_is_empty(this->usart_device->wb))
+ regs->DR=rb_remove(this->usart_device->wb);
+ else
+ regs->CR1 &= ~((uint32)USART_CR1_TXEIE); // disable TXEIE
+ }
+ }
+
+ int wifi_rb_is_full(void);
+
+ private:
+ struct usart_dev *usart_device;
+ uint8 tx_pin;
+ uint8 rx_pin;
+};
+
+extern WifiSerial WifiSerial1;
+
+#define WIFISERIAL WifiSerial1
+
+#endif // USE_WIFI_FUNCTION
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/lib/mks_ui/wifi_module.cpp
new file mode 100644
index 0000000000..5c025f13f9
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/wifi_module.cpp
@@ -0,0 +1,1927 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "draw_ui.h"
+#include "wifi_module.h"
+#include "wifi_upload.h"
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/temperature.h"
+#include "../../../../gcode/queue.h"
+#include "../../../../gcode/gcode.h"
+#include "../../../../lcd/ultralcd.h"
+#include "../../../../sd/cardreader.h"
+#include "../../../../module/planner.h"
+#if ENABLED(POWER_LOSS_RECOVERY)
+ #include "../../../../feature/powerloss.h"
+#endif
+#if ENABLED(PARK_HEAD_ON_PAUSE)
+ #include "../../../../feature/pause.h"
+#endif
+
+#define WIFI_SET() WRITE(WIFI_RESET_PIN, HIGH);
+#define WIFI_RESET() WRITE(WIFI_RESET_PIN, LOW);
+#define WIFI_IO1_SET() WRITE(WIFI_IO1_PIN, HIGH);
+#define WIFI_IO1_RESET() WRITE(WIFI_IO1_PIN, LOW);
+
+extern uint8_t Explore_Disk (char* path , uint8_t recu_level);
+
+extern uint8_t commands_in_queue;
+extern uint8_t sel_id;
+
+int usartFifoAvailable(SZ_USART_FIFO *fifo);
+int readUsartFifo(SZ_USART_FIFO *fifo, int8_t *buf, int32_t len);
+int writeUsartFifo(SZ_USART_FIFO * fifo, int8_t * buf, int32_t len);
+extern unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick);
+
+volatile SZ_USART_FIFO WifiRxFifo;
+
+#define WAIT_ESP_TRANS_TIMEOUT_TICK 10500
+
+int cfg_cloud_flag = 0;
+
+extern PRINT_TIME print_time;
+
+char wifi_firm_ver[20] = {0};
+WIFI_GCODE_BUFFER espGcodeFifo;
+extern uint8_t pause_resum;
+
+uint8_t wifi_connect_flg = 0;
+extern volatile uint8_t get_temp_flag;
+
+
+#define WIFI_MODE 2
+#define WIFI_AP_MODE 3
+
+int upload_result = 0;
+
+uint32_t upload_time = 0;
+uint32_t upload_size = 0;
+
+volatile WIFI_STATE wifi_link_state;
+WIFI_PARA wifiPara;
+IP_PARA ipPara;
+CLOUD_PARA cloud_para;
+
+char wifi_check_time = 0;
+
+extern uint8_t gCurDir[100];
+
+extern uint32_t wifi_loop_cycle;
+
+volatile TRANSFER_STATE esp_state;
+
+uint8_t left_to_send = 0;
+uint8_t left_to_save[96] = {0};
+
+volatile WIFI_DMA_RCV_FIFO wifiDmaRcvFifo;
+
+volatile WIFI_TRANS_ERROR wifiTransError;
+
+static bool need_ok_later = false;
+
+extern volatile WIFI_STATE wifi_link_state;
+extern WIFI_PARA wifiPara;
+extern IP_PARA ipPara;
+extern CLOUD_PARA cloud_para;
+
+extern uint8_t once_flag;
+extern uint8_t flash_preview_begin;
+extern uint8_t default_preview_flg;
+extern uint8_t gcode_preview_over;
+
+extern uint8_t bmp_public_buf[17 * 1024];
+
+uint32_t getWifiTick() {
+ return millis();
+}
+
+uint32_t getWifiTickDiff(int32_t lastTick, int32_t curTick) {
+ if (lastTick <= curTick) {
+ return (curTick - lastTick) * TICK_CYCLE;
+ }
+ else {
+ return (0xffffffff - lastTick + curTick) * TICK_CYCLE;
+ }
+}
+
+void wifi_delay(int n) {
+ uint32_t begin = getWifiTick();
+ uint32_t end = begin;
+
+ while (getWifiTickDiff(begin, end) < (uint32_t)n) {
+ end = getWifiTick();
+ }
+}
+
+void wifi_reset() {
+ uint32_t start, now;
+ start = getWifiTick();
+ now = start;
+ WIFI_RESET();
+ while (getWifiTickDiff(start, now) < 500) {
+ now = getWifiTick();
+ }
+ WIFI_SET();
+
+}
+
+void mount_file_sys(uint8_t disk_type) {
+ if (disk_type == FILE_SYS_SD) {
+ card.mount();
+ }
+ else if (disk_type == FILE_SYS_USB) {
+
+ }
+}
+
+static void dma_init() {
+ #if 0
+ __HAL_RCC_DMA1_CLK_ENABLE();
+
+ //HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
+ HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 4, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn);
+
+ hdma_usart1_rx.Instance = DMA1_Channel5;
+ //hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4;
+ hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
+ hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_usart1_rx.Init.MemDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_usart1_rx.Init.Mode = DMA_NORMAL;
+ hdma_usart1_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
+ if (HAL_DMA_Init((DMA_HandleTypeDef *)&hdma_usart1_rx) != HAL_OK) {
+ Error_Handler();
+ }
+
+
+ HAL_DMA_Start_IT((DMA_HandleTypeDef *)&hdma_usart1_rx,
+ (uint32_t)&huart1.Instance->DR,
+ (uint32_t)(&WifiRxFifo.uartTxBuffer[0]),
+ UART_RX_BUFFER_SIZE);
+
+ //HAL_UART_Receive_DMA(&huart1,(uint8_t*)&WifiRxFifo.uartTxBuffer[0], UART_RX_BUFFER_SIZE);
+
+ /* Enable the DMA transfer for the receiver request by setting the DMAR bit
+ in the UART CR3 register */
+ SET_BIT(huart1.Instance->CR3, USART_CR3_DMAR);
+
+ #endif
+ for (uint8_t i = 0; i < TRANS_RCV_FIFO_BLOCK_NUM; i++) {
+ wifiDmaRcvFifo.bufferAddr[i] = &bmp_public_buf[1024 * i];
+ wifiDmaRcvFifo.state[i] = udisk_buf_empty;
+ }
+
+ memset(wifiDmaRcvFifo.bufferAddr[0], 0, 1024 * TRANS_RCV_FIFO_BLOCK_NUM);
+ wifiDmaRcvFifo.read_cur = 0;
+ wifiDmaRcvFifo.write_cur = 0;
+
+}
+
+static void wifi_deInit() {
+ #if 0
+ HAL_DMA_Abort((DMA_HandleTypeDef *)&hdma_usart1_rx);
+ HAL_DMA_DeInit((DMA_HandleTypeDef *)&hdma_usart1_rx);
+ __HAL_DMA_DISABLE((DMA_HandleTypeDef *)&hdma_usart1_rx);
+ #endif
+}
+
+extern uint8_t mksUsart1Rx;
+
+void esp_port_begin(uint8_t interrupt) {
+ WifiRxFifo.uart_read_point = 0;
+ WifiRxFifo.uart_write_point = 0;
+ #if 0
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ USART_InitTypeDef USART_InitStructure;
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ WifiRxFifo.uart_read_point = 0;
+ WifiRxFifo.uart_write_point = 0;
+ memset((uint8_t*)WifiRxFifo.uartTxBuffer, 0, sizeof(WifiRxFifo.uartTxBuffer));
+
+ if (interrupt) {
+ #if TAN
+ wifi_deInit ();
+
+ //SZ_STM32_COMInit(COM1, 115200);
+ __HAL_UART_ENABLE_IT(USART1, USART_IT_RXNE);
+
+ USART_InitStructure.USART_BaudRate = 115200; //���ڵIJ����ʣ�����115200 ��ߴ�4.5Mbits/s
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b; //�����ֳ���(8λ��9λ)
+ USART_InitStructure.USART_StopBits = USART_StopBits_1; //�����õ�ֹͣλ-֧��1��2��ֹͣλ
+ USART_InitStructure.USART_Parity = USART_Parity_No; //����żУ��
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //��Ӳ��������
+ USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //˫��ģʽ��ʹ�ܷ��ͺͽ���
+
+ __HAL_RCC_USART1_CLK_ENABLE();
+
+ GPIO_InitStruct.Pin = TFT_WIFI_TX_Pin|TFT_WIFI_RX_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pin = TFT_WIFI_RX_Pin;
+ HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
+
+ USART_Init(USART1, &USART_InitStructure);
+
+ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
+ // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+ // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+
+ NVIC_Init(&NVIC_InitStructure);
+ #else
+ HAL_UART_DeInit(&huart1);
+ MX_USART1_UART_Init(3);
+ //__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
+ HAL_UART_Receive_IT(&huart1,&mksUsart1Rx,1);
+ #endif
+ }
+ else{
+ #if 0
+ NVIC_DisableIRQ(SZ_STM32_COM1_IRQn);
+
+ USART_Cmd(SZ_STM32_COM1, DISABLE);
+
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE);
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
+
+ SZ_STM32_COMInit(COM1, 1958400);
+
+ USART_Cmd(SZ_STM32_COM1, ENABLE);
+
+ wifi_delay(10);
+
+ dma_init();
+ #endif
+ HAL_UART_DeInit(&huart1);
+ MX_USART1_UART_Init(5);
+ //dma1_5_IRQ_sel = 1;
+ dma_init();
+ }
+ #endif
+ if (interrupt) {
+ #if ENABLED(USE_WIFI_FUNCTION)
+ WIFISERIAL.end();
+ for (uint16_t i = 0; i < 65535; i++);
+ WIFISERIAL.begin(WIFI_BAUDRATE);
+ uint32_t serial_connect_timeout = millis() + 1000UL;
+ while (/*!WIFISERIAL && */PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
+ //for(uint8_t i=0;i<100;i++)WIFISERIAL.write(0x33);
+ #endif
+ }
+ else {
+ #if ENABLED(USE_WIFI_FUNCTION)
+ WIFISERIAL.end();
+ for (uint16_t i = 0; i < 65535; i++);
+ WIFISERIAL.begin(WIFI_UPLOAD_BAUDRATE);
+ uint32_t serial_connect_timeout = millis() + 1000UL;
+ while (/*!WIFISERIAL && */PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
+ //for(uint16_t i=0;i<65535;i++);//WIFISERIAL.write(0x33);
+ #endif
+ dma_init();
+ }
+}
+
+#if ENABLED(USE_WIFI_FUNCTION)
+
+int raw_send_to_wifi(char *buf, int len) {
+ if (buf == 0 || len <= 0) return 0;
+
+ for (int i = 0; i < len; i++)
+ WIFISERIAL.write(*(buf + i));
+
+ return len;
+}
+
+#endif // USE_WIFI_FUNCTION
+
+void wifi_ret_ack() {}
+
+char buf_to_wifi[256];
+int index_to_wifi = 0;
+int package_to_wifi(WIFI_RET_TYPE type,char *buf, int len) {
+ char wifi_ret_head = 0xa5;
+ char wifi_ret_tail = 0xfc;
+
+ if (type == WIFI_PARA_SET) {
+ int data_offset = 4;
+ int apLen = strlen((const char *)uiCfg.wifi_name);
+ int keyLen = strlen((const char *)uiCfg.wifi_key);
+
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+
+ buf_to_wifi[data_offset] = gCfgItems.wifi_mode_sel;
+ buf_to_wifi[data_offset + 1] = apLen;
+ strncpy(&buf_to_wifi[data_offset + 2], (const char *)uiCfg.wifi_name, apLen);
+ buf_to_wifi[data_offset + apLen + 2] = keyLen;
+ strncpy(&buf_to_wifi[data_offset + apLen + 3], (const char *)uiCfg.wifi_key, keyLen);
+ buf_to_wifi[data_offset + apLen + keyLen + 3] = wifi_ret_tail;
+
+ index_to_wifi = apLen + keyLen + 3;
+
+ buf_to_wifi[0] = wifi_ret_head;
+ buf_to_wifi[1] = type;
+ buf_to_wifi[2] = index_to_wifi & 0xff;
+ buf_to_wifi[3] = (index_to_wifi >> 8) & 0xff;
+
+ raw_send_to_wifi(buf_to_wifi, 5 + index_to_wifi);
+
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+
+ }
+ else if (type == WIFI_TRANS_INF) {
+ if (len > (int)(sizeof(buf_to_wifi) - index_to_wifi - 5)) {
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+ return 0;
+ }
+
+ if (len > 0) {
+ memcpy(&buf_to_wifi[4 + index_to_wifi], buf, len);
+ index_to_wifi += len;
+
+ if (index_to_wifi < 1)
+ return 0;
+
+ if (buf_to_wifi[index_to_wifi + 3] == '\n') {
+ //mask "wait" "busy" "X:"
+ if (((buf_to_wifi[4] == 'w') && (buf_to_wifi[5] == 'a') && (buf_to_wifi[6] == 'i') && (buf_to_wifi[7] == 't') )
+ || ((buf_to_wifi[4] == 'b') && (buf_to_wifi[5] == 'u') && (buf_to_wifi[6] == 's') && (buf_to_wifi[7] == 'y') )
+ || ((buf_to_wifi[4] == 'X') && (buf_to_wifi[5] == ':') )
+ ) {
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+ return 0;
+ }
+
+ buf_to_wifi[0] = wifi_ret_head;
+ buf_to_wifi[1] = type;
+ buf_to_wifi[2] = index_to_wifi & 0xff;
+ buf_to_wifi[3] = (index_to_wifi >> 8) & 0xff;
+ buf_to_wifi[4 + index_to_wifi] = wifi_ret_tail;
+
+ raw_send_to_wifi(buf_to_wifi, 5 + index_to_wifi);
+
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+ }
+ }
+ }
+ else if (type == WIFI_EXCEP_INF) {
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+
+ buf_to_wifi[0] = wifi_ret_head;
+ buf_to_wifi[1] = type;
+ buf_to_wifi[2] = 1;
+ buf_to_wifi[3] = 0;
+ buf_to_wifi[4] = *buf;
+ buf_to_wifi[5] = wifi_ret_tail;
+
+ raw_send_to_wifi(buf_to_wifi, 6);
+
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+ }
+ else if (type == WIFI_CLOUD_CFG) {
+ int data_offset = 4;
+ int urlLen = strlen((const char *)uiCfg.cloud_hostUrl);
+
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+
+ if (gCfgItems.cloud_enable == true)
+ buf_to_wifi[data_offset] = 0x0a;
+ else
+ buf_to_wifi[data_offset] = 0x05;
+
+ buf_to_wifi[data_offset + 1] = urlLen;
+ strncpy(&buf_to_wifi[data_offset + 2], (const char *)uiCfg.cloud_hostUrl, urlLen);
+ buf_to_wifi[data_offset + urlLen + 2] = uiCfg.cloud_port & 0xff;
+ buf_to_wifi[data_offset + urlLen + 3] = (uiCfg.cloud_port >> 8) & 0xff;
+ buf_to_wifi[data_offset + urlLen + 4] = wifi_ret_tail;
+
+ index_to_wifi = urlLen + 4;
+
+ buf_to_wifi[0] = wifi_ret_head;
+ buf_to_wifi[1] = type;
+ buf_to_wifi[2] = index_to_wifi & 0xff;
+ buf_to_wifi[3] = (index_to_wifi >> 8) & 0xff;
+
+ raw_send_to_wifi(buf_to_wifi, 5 + index_to_wifi);
+
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+ }
+ else if (type == WIFI_CLOUD_UNBIND) {
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+
+ buf_to_wifi[0] = wifi_ret_head;
+ buf_to_wifi[1] = type;
+ buf_to_wifi[2] = 0;
+ buf_to_wifi[3] = 0;
+ buf_to_wifi[4] = wifi_ret_tail;
+
+ raw_send_to_wifi(buf_to_wifi, 5);
+
+ memset(buf_to_wifi, 0, sizeof(buf_to_wifi));
+ index_to_wifi = 0;
+ }
+}
+
+
+int send_to_wifi(char *buf, int len) { return package_to_wifi(WIFI_TRANS_INF, buf, len); }
+
+void set_cur_file_sys(int fileType) {
+ gCfgItems.fileSysType = fileType;
+}
+
+void get_file_list(char *path) {
+ if ( path == 0) {
+ return;
+ }
+
+ if (gCfgItems.fileSysType == FILE_SYS_SD) {
+ #if ENABLED(SDSUPPORT)
+ card.mount();
+ #endif
+ }
+ else if (gCfgItems.fileSysType == FILE_SYS_USB) {
+ //udisk
+ }
+ Explore_Disk(path, 0);
+}
+
+char wait_ip_back_flag = 0;
+
+typedef struct {
+ char write_buf[513];
+ int write_index;
+ uint8_t saveFileName[30];
+ uint32_t fileLen;
+ uint32_t tick_begin;
+ uint32_t tick_end;
+} FILE_WRITER;
+
+FILE_WRITER file_writer;
+
+int32_t lastFragment = 0;
+
+char lastBinaryCmd[50] = {0};
+
+int total_write = 0;
+char binary_head[2] = {0, 0};
+unsigned char binary_data_len = 0;
+
+int write_to_file(char *buf, int len) {
+ int i;
+ int res;
+
+ for (i = 0; i < len; i++) {
+ file_writer.write_buf[file_writer.write_index++] = buf[i];
+ if (file_writer.write_index >= 512) {
+ res = card.write(file_writer.write_buf, file_writer.write_index);
+ if (res == -1) {
+ return -1;
+ }
+ memset(file_writer.write_buf, 0, sizeof(file_writer.write_buf));
+ file_writer.write_index = 0;
+ }
+ }
+ return 0;
+}
+
+#define ESP_PROTOC_HEAD (uint8_t)0xa5
+#define ESP_PROTOC_TAIL (uint8_t)0xfc
+
+#define ESP_TYPE_NET (uint8_t)0x0
+#define ESP_TYPE_GCODE (uint8_t)0x1
+#define ESP_TYPE_FILE_FIRST (uint8_t)0x2
+#define ESP_TYPE_FILE_FRAGMENT (uint8_t)0x3
+
+#define ESP_TYPE_WIFI_LIST (uint8_t)0x4
+
+uint8_t esp_msg_buf[UART_RX_BUFFER_SIZE] = {0};
+uint16_t esp_msg_index = 0;
+
+typedef struct {
+ uint8_t head;
+ uint8_t type;
+ uint16_t dataLen;
+ uint8_t *data;
+ uint8_t tail;
+} ESP_PROTOC_FRAME;
+
+
+static int cut_msg_head(uint8_t *msg, uint16_t msgLen, uint16_t cutLen) {
+ if (msgLen < cutLen) return 0;
+
+ else if (msgLen == cutLen) {
+ memset(msg, 0, msgLen);
+ return 0;
+ }
+
+ for (int i = 0; i < (msgLen - cutLen); i++)
+ msg[i] = msg[cutLen + i];
+
+ memset(&msg[msgLen - cutLen], 0, cutLen);
+
+ return msgLen - cutLen;
+}
+
+
+uint8_t Explore_Disk (char* path , uint8_t recu_level) {
+ char tmp[200];
+ char Fstream[200];
+
+ if (path == 0)return 0;
+
+ const uint8_t fileCnt = card.get_num_Files();
+
+ for (uint8_t i = 0; i < fileCnt; i++) {
+ const uint16_t nr =
+ #if ENABLED(SDCARD_RATHERRECENTFIRST) && DISABLED(SDCARD_SORT_ALPHA)
+ fileCnt - 1 -
+ #endif
+ i;
+
+ #if ENABLED(SDCARD_SORT_ALPHA)
+ card.getfilename_sorted(nr);
+ #else
+ card.getfilename_sorted(nr);
+ #endif
+ memset(tmp, 0, sizeof(tmp));
+ //if (card.longFilename[0] == 0)
+ strcpy(tmp, card.filename);
+ //else
+ //strcpy(tmp, card.longFilename);
+
+ memset(Fstream, 0, sizeof(Fstream));
+ strcpy(Fstream, tmp);
+
+ if (card.flag.filenameIsDir && (recu_level <= 10)) {
+ strcat(Fstream, ".DIR\r\n");
+ send_to_wifi(Fstream, strlen(Fstream));
+ }
+ else {
+ strcat(Fstream, "\r\n");
+ send_to_wifi(Fstream, strlen(Fstream));
+ }
+ }
+
+ return fileCnt;
+}
+
+static void wifi_gcode_exec(uint8_t *cmd_line) {
+ int8_t tempBuf[100] = {0};
+ uint8_t *tmpStr = 0;
+ int cmd_value;
+ volatile int print_rate;
+ if ((strstr((char *)&cmd_line[0], "\n") != 0) && ((strstr((char *)&cmd_line[0], "G") != 0) || (strstr((char *)&cmd_line[0], "M") != 0) || (strstr((char *)&cmd_line[0], "T") != 0) )) {
+
+ tmpStr = (uint8_t *)strstr((char *)&cmd_line[0], "\n");
+ if (tmpStr) {
+ *tmpStr = '\0';
+ }
+ tmpStr = (uint8_t *)strstr((char *)&cmd_line[0], "\r");
+ if (tmpStr) {
+ *tmpStr = '\0';
+ }
+ tmpStr = (uint8_t *)strstr((char *)&cmd_line[0], "*");
+ if (tmpStr) {
+ *tmpStr = '\0';
+ }
+ tmpStr = (uint8_t *)strstr((char *)&cmd_line[0], "M");
+ if ( tmpStr) {
+ cmd_value = atoi((char *)(tmpStr + 1));
+ tmpStr = (uint8_t *)strstr((char *)tmpStr, " ");
+
+ switch (cmd_value) {
+
+ case 20: //print sd / udisk file
+ if (uiCfg.print_state == IDLE) {
+ int index = 0;
+
+ if (tmpStr == 0) {
+ gCfgItems.fileSysType = FILE_SYS_SD;
+ send_to_wifi((char *)"Begin file list\r\n", strlen("Begin file list\r\n"));
+
+ get_file_list((char *)"0:/");
+
+ send_to_wifi((char *)"End file list\r\n", strlen("End file list\r\n"));
+
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ break;
+ }
+
+ while (tmpStr[index] == ' ')
+ index++;
+
+ if (gCfgItems.wifi_type == ESP_WIFI) {
+ char *path = (char *)tempBuf;
+
+ if (strlen((char *)&tmpStr[index]) < 80) {
+ send_to_wifi((char *)"Begin file list\r\n", strlen("Begin file list\r\n"));
+
+ if (strncmp((char *)&tmpStr[index], "1:", 2) == 0) {
+ gCfgItems.fileSysType = FILE_SYS_SD;
+
+ }
+ else if (strncmp((char *)&tmpStr[index], "0:", 2) == 0) {
+ gCfgItems.fileSysType = FILE_SYS_USB;
+ }
+ strcpy((char *)path, (char *)&tmpStr[index]);
+ get_file_list(path);
+ send_to_wifi((char *)"End file list\r\n", strlen("End file list\r\n"));
+ }
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ }
+ }
+ break;
+
+ case 21:
+ /*init sd card*/
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ break;
+
+ case 23:
+ /*select the file*/
+ if (uiCfg.print_state == IDLE) {
+ int index = 0;
+ while (tmpStr[index] == ' ')
+ index++;
+
+ if (strstr((char *)&tmpStr[index], ".g") || strstr((char *)&tmpStr[index], ".G")) {
+ if (strlen((char *)&tmpStr[index]) < 80) {
+ memset(list_file.file_name[sel_id], 0, sizeof(list_file.file_name[sel_id]));
+
+ if (gCfgItems.wifi_type == ESP_WIFI) {
+ if (strncmp((char *)&tmpStr[index], "1:", 2) == 0) {
+ gCfgItems.fileSysType = FILE_SYS_SD;
+
+ }
+ else if (strncmp((char *)&tmpStr[index], "0:", 2) == 0) {
+ gCfgItems.fileSysType = FILE_SYS_USB;
+ }
+ else {
+ if (tmpStr[index] != '/')
+ strcat((char *)list_file.file_name[0], "/");
+ }
+ strcat((char *)list_file.file_name[sel_id], (char *)&tmpStr[index]);
+
+ }
+ else {
+ strcpy(list_file.file_name[sel_id], (char *)&tmpStr[index]);
+ }
+
+ char *cur_name=strrchr(list_file.file_name[sel_id],'/');
+
+ card.openFileRead(cur_name);
+
+ if (card.isFileOpen()) {
+ send_to_wifi((char *)"File selected\r\n", strlen("File selected\r\n"));
+
+ }
+ else {
+ send_to_wifi((char *)"file.open failed\r\n", strlen("file.open failed\r\n"));
+ strcpy(list_file.file_name[sel_id], "notValid");
+ }
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+
+ }
+
+
+ }
+ }
+ break;
+
+ case 24:
+ if (strcmp(list_file.file_name[sel_id], "notValid") != 0) {
+ if (uiCfg.print_state == IDLE) {
+ clear_cur_ui();
+ reset_print_time();
+ start_print_time();
+ preview_gcode_prehandle(list_file.file_name[sel_id]);
+ uiCfg.print_state = WORKING;
+ lv_draw_printing();
+
+ if (gcode_preview_over != 1) {
+ #if ENABLED(SDSUPPORT)
+ char *cur_name;
+ cur_name=strrchr(list_file.file_name[sel_id],'/');
+
+ SdFile file;
+ SdFile *curDir;
+ card.endFilePrint();
+ const char * const fname = card.diveToFile(true, curDir, cur_name);
+ if (!fname) return;
+ if (file.open(curDir, fname, O_READ)) {
+ gCfgItems.curFilesize = file.fileSize();
+ file.close();
+ update_spi_flash();
+ }
+ card.openFileRead(cur_name);
+ if (card.isFileOpen()) {
+ feedrate_percentage = 100;
+ //saved_feedrate_percentage = feedrate_percentage;
+ planner.flow_percentage[0] = 100;
+ planner.e_factor[0]= planner.flow_percentage[0]*0.01;
+ if (EXTRUDERS==2) {
+ planner.flow_percentage[1] = 100;
+ planner.e_factor[1]= planner.flow_percentage[1]*0.01;
+ }
+ card.startFileprint();
+ #if ENABLED(POWER_LOSS_RECOVERY)
+ recovery.prepare();
+ #endif
+ once_flag = 0;
+ }
+ #endif
+
+ }
+ }
+ else if (uiCfg.print_state == PAUSED) {
+ uiCfg.print_state = RESUMING;
+ clear_cur_ui();
+ start_print_time();
+
+ if (gCfgItems.from_flash_pic==1)
+ flash_preview_begin = 1;
+ else
+ default_preview_flg = 1;
+ lv_draw_printing();
+ }
+ else if (uiCfg.print_state == REPRINTING) {
+ uiCfg.print_state = REPRINTED;
+ clear_cur_ui();
+ start_print_time();
+ if (gCfgItems.from_flash_pic==1)
+ flash_preview_begin = 1;
+ else
+ default_preview_flg = 1;
+ lv_draw_printing();
+ }
+ }
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ break;
+
+ case 25:
+ /*pause print file*/
+ if (uiCfg.print_state == WORKING) {
+ stop_print_time();
+
+ clear_cur_ui();
+
+ #if ENABLED(SDSUPPORT)
+ card.pauseSDPrint();
+ uiCfg.print_state = PAUSING;
+ #endif
+ if (gCfgItems.from_flash_pic==1)
+ flash_preview_begin = 1;
+ else
+ default_preview_flg = 1;
+ lv_draw_printing();
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ }
+ break;
+
+ case 26:
+ /*stop print file*/
+ if ((uiCfg.print_state == WORKING) || (uiCfg.print_state == PAUSED) || (uiCfg.print_state == REPRINTING)) {
+ stop_print_time();
+
+ clear_cur_ui();
+ #if ENABLED(SDSUPPORT)
+ uiCfg.print_state = IDLE;
+ card.flag.abort_sd_printing = true;
+ #endif
+
+ lv_draw_ready_print();
+
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ }
+ break;
+
+ case 27:
+ /*report print rate*/
+ if ((uiCfg.print_state == WORKING) || (uiCfg.print_state == PAUSED)|| (uiCfg.print_state == REPRINTING)) {
+ print_rate = uiCfg.totalSend;
+
+ memset((char *)tempBuf, 0, sizeof(tempBuf));
+
+ sprintf((char *)tempBuf, "M27 %d\r\n", print_rate);
+
+ send_to_wifi((char *)tempBuf, strlen((char *)tempBuf));
+
+ }
+
+ break;
+
+ case 28:
+ /*begin to transfer file to filesys*/
+ if (uiCfg.print_state == IDLE) {
+
+ int index = 0;
+ while (tmpStr[index] == ' ')
+ index++;
+
+ if (strstr((char *)&tmpStr[index], ".g") || strstr((char *)&tmpStr[index], ".G")) {
+ strcpy((char *)file_writer.saveFileName, (char *)&tmpStr[index]);
+
+ if (gCfgItems.fileSysType == FILE_SYS_SD) {
+ memset(tempBuf, 0, sizeof(tempBuf));
+ sprintf((char *)tempBuf, "%s", file_writer.saveFileName);
+ }
+ else if (gCfgItems.fileSysType == FILE_SYS_USB) {
+ memset(tempBuf, 0, sizeof(tempBuf));
+ sprintf((char *)tempBuf, "%s", (char *)file_writer.saveFileName);
+ }
+ mount_file_sys(gCfgItems.fileSysType);
+
+ #if ENABLED(SDSUPPORT)
+ char *cur_name=strrchr(list_file.file_name[sel_id],'/');
+ card.openFileWrite(cur_name);
+ if (card.isFileOpen()) {
+ memset(file_writer.saveFileName, 0, sizeof(file_writer.saveFileName));
+ strcpy((char *)file_writer.saveFileName, (char *)&tmpStr[index]);
+ memset(tempBuf, 0, sizeof(tempBuf));
+ sprintf((char *)tempBuf, "Writing to file: %s\r\n", (char *)file_writer.saveFileName);
+ wifi_ret_ack();
+ send_to_wifi((char *)tempBuf, strlen((char *)tempBuf));
+
+ total_write = 0;
+ wifi_link_state = WIFI_WAIT_TRANS_START;
+
+ }
+ else{
+ wifi_link_state = WIFI_CONNECTED;
+ clear_cur_ui();
+ lv_draw_dialog(DIALOG_TRANSFER_NO_DEVICE);
+ }
+ #endif
+
+ }
+
+ }
+ break;
+ case 105:
+ case 991:
+ memset(tempBuf, 0, sizeof(tempBuf));
+ if (cmd_value == 105) {
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ sprintf((char *)tempBuf,"T:%.1f /%.1f B:%.1f /%.1f T0:%.1f /%.1f T1:%.1f /%.1f @:0 B@:0\r\n",
+
+ (float)thermalManager.temp_hotend[0].celsius,(float)thermalManager.temp_hotend[0].target,
+ #if HAS_HEATED_BED
+ (float)thermalManager.temp_bed.celsius,(float)thermalManager.temp_bed.target,
+ #else
+ (float)0,(float)0,
+ #endif
+ (float)thermalManager.temp_hotend[0].celsius,(float)thermalManager.temp_hotend[0].target,
+ #if !defined(SINGLENOZZLE) && HAS_MULTI_EXTRUDER
+ (float)thermalManager.temp_hotend[1].celsius,(float)thermalManager.temp_hotend[1].target
+ #else
+ (float)0,(float)0
+ #endif
+ );
+ }
+ else {
+ sprintf((char *)tempBuf,"T:%d /%d B:%d /%d T0:%d /%d T1:%d /%d @:0 B@:0\r\n",
+
+ (int)thermalManager.temp_hotend[0].celsius,(int)thermalManager.temp_hotend[0].target,
+ #if HAS_HEATED_BED
+ (int)thermalManager.temp_bed.celsius,(int)thermalManager.temp_bed.target,
+ #else
+ 0,0,
+ #endif
+ (int)thermalManager.temp_hotend[0].celsius,(int)thermalManager.temp_hotend[0].target,
+ #if !defined(SINGLENOZZLE) && HAS_MULTI_EXTRUDER
+ (int)thermalManager.temp_hotend[1].celsius,(int)thermalManager.temp_hotend[1].target
+ #else
+ 0,0
+ #endif
+ );
+ }
+
+ send_to_wifi((char *)tempBuf, strlen((char *)tempBuf));
+
+ queue.enqueue_one_P(PSTR("M105"));
+
+ break;
+ case 992:
+ if ((uiCfg.print_state == WORKING) || (uiCfg.print_state == PAUSED)) {
+ memset(tempBuf,0,sizeof(tempBuf));
+ sprintf((char *)tempBuf, "M992 %d%d:%d%d:%d%d\r\n", print_time.hours/10, print_time.hours%10, print_time.minutes/10, print_time.minutes%10, print_time.seconds/10, print_time.seconds%10);
+ wifi_ret_ack();
+ send_to_wifi((char *)tempBuf, strlen((char *)tempBuf));
+ }
+
+ break;
+ case 994:
+ if ((uiCfg.print_state == WORKING) || (uiCfg.print_state == PAUSED)) {
+ memset(tempBuf,0,sizeof(tempBuf));
+ if (strlen((char *)list_file.file_name[sel_id]) > (100-1)) {
+ return;
+ }
+ sprintf((char *)tempBuf, "M994 %s;%d\n", list_file.file_name[sel_id],(int)gCfgItems.curFilesize);
+ wifi_ret_ack();
+ send_to_wifi((char *)tempBuf, strlen((char *)tempBuf));
+ }
+ break;
+ case 997:
+ if (uiCfg.print_state == IDLE) {
+ wifi_ret_ack();
+ send_to_wifi((char *)"M997 IDLE\r\n", strlen("M997 IDLE\r\n"));
+ }
+ else if (uiCfg.print_state == WORKING) {
+ wifi_ret_ack();
+ send_to_wifi((char *)"M997 PRINTING\r\n", strlen("M997 PRINTING\r\n"));
+ }
+ else if (uiCfg.print_state == PAUSED) {
+ wifi_ret_ack();
+ send_to_wifi((char *)"M997 PAUSE\r\n", strlen("M997 PAUSE\r\n"));
+ }
+ else if (uiCfg.print_state == REPRINTING) {
+ wifi_ret_ack();
+ send_to_wifi((char *)"M997 PAUSE\r\n", strlen("M997 PAUSE\r\n"));
+ }
+ if (uiCfg.command_send == 0) get_wifi_list_command_send();
+ break;
+
+ case 998:
+ if (uiCfg.print_state == IDLE) {
+ if (atoi((char *)tmpStr) == 0) {
+ set_cur_file_sys(0);
+ }
+ else if (atoi((char *)tmpStr) == 1) {
+ set_cur_file_sys(1);
+ }
+ wifi_ret_ack();
+ }
+ break;
+
+ case 115:
+ memset(tempBuf,0,sizeof(tempBuf));
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ send_to_wifi((char *)"FIRMWARE_NAME:Robin_nano\r\n", strlen("FIRMWARE_NAME:Robin_nano\r\n"));
+ break;
+
+ default:
+ strcat((char *)cmd_line, "\n");
+
+ uint32_t left;
+
+ if (espGcodeFifo.wait_tick> 5) {
+
+ if (espGcodeFifo.r > espGcodeFifo.w)
+ left = espGcodeFifo.r - espGcodeFifo.w - 1;
+ else
+ left = WIFI_GCODE_BUFFER_SIZE + espGcodeFifo.r - espGcodeFifo.w - 1;
+ if (left >= strlen((const char *)cmd_line)) {
+ uint32_t index = 0;
+ while (index < strlen((const char *)cmd_line)) {
+ espGcodeFifo.Buffer[espGcodeFifo.w] = cmd_line[index] ;
+ espGcodeFifo.w = (espGcodeFifo.w + 1) % WIFI_GCODE_BUFFER_SIZE;
+ index++;
+ }
+ if (left - WIFI_GCODE_BUFFER_LEAST_SIZE >= strlen((const char *)cmd_line))
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ else
+ need_ok_later = true;
+
+ }
+
+ }
+ break;
+
+ }
+ }
+ else{
+ strcat((char *)cmd_line, "\n");
+ uint32_t left_g;
+
+ if (espGcodeFifo.wait_tick > 5) {
+
+ if (espGcodeFifo.r > espGcodeFifo.w)
+ left_g = espGcodeFifo.r - espGcodeFifo.w - 1;
+ else
+ left_g = WIFI_GCODE_BUFFER_SIZE + espGcodeFifo.r - espGcodeFifo.w - 1;
+ if (left_g >= strlen((const char *)cmd_line)) {
+ uint32_t index = 0;
+ while (index < strlen((const char *)cmd_line)) {
+ espGcodeFifo.Buffer[espGcodeFifo.w] = cmd_line[index] ;
+ espGcodeFifo.w = (espGcodeFifo.w + 1) % WIFI_GCODE_BUFFER_SIZE;
+ index++;
+ }
+ if (left_g - WIFI_GCODE_BUFFER_LEAST_SIZE >= strlen((const char *)cmd_line))
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ else
+ need_ok_later = true;
+
+ }
+ }
+ }
+ }
+}
+
+static int32_t charAtArray(const uint8_t *_array, uint32_t _arrayLen, uint8_t _char) {
+ for (uint32_t i = 0; i < _arrayLen; i++)
+ if (*(_array + i) == _char) return i;
+ return -1;
+}
+
+void get_wifi_list_command_send() {
+ char buf[6] = {0};
+ buf[0] = 0xA5;
+ buf[1] = 0x07;
+ buf[2] = 0x00;
+ buf[3] = 0x00;
+ buf[4] = 0xFC;
+ raw_send_to_wifi(buf, 5);
+}
+
+static void net_msg_handle(uint8_t * msg, uint16_t msgLen) {
+ int wifiNameLen, wifiKeyLen, hostLen, id_len, ver_len;
+
+ if (msgLen <= 0) return;
+ //ip
+ sprintf(ipPara.ip_addr, "%d.%d.%d.%d", msg[0], msg[1], msg[2], msg[3]);
+
+ //port
+ //connect state
+ if (msg[6] == 0x0A)
+ wifi_link_state = WIFI_CONNECTED;
+ else if (msg[6] == 0x0E)
+ wifi_link_state = WIFI_EXCEPTION;
+ else
+ wifi_link_state = WIFI_NOT_CONFIG;
+
+ //mode
+ wifiPara.mode = msg[7];
+
+
+ //wifi name
+ wifiNameLen = msg[8];
+ wifiKeyLen = msg[9 + wifiNameLen];
+ if (wifiNameLen < 32) {
+ memset(wifiPara.ap_name, 0, sizeof(wifiPara.ap_name));
+ memcpy(wifiPara.ap_name, &msg[9], wifiNameLen);
+
+ memset(&wifi_list.wifiConnectedName,0,sizeof(wifi_list.wifiConnectedName));
+ memcpy(&wifi_list.wifiConnectedName,&msg[9],wifiNameLen);
+
+ //wifi key
+ if (wifiKeyLen < 64) {
+ memset(wifiPara.keyCode, 0, sizeof(wifiPara.keyCode));
+ memcpy(wifiPara.keyCode, &msg[10 + wifiNameLen], wifiKeyLen);
+ }
+ }
+
+
+ cloud_para.state =msg[10 + wifiNameLen + wifiKeyLen];
+ hostLen = msg[11 + wifiNameLen + wifiKeyLen];
+ if (cloud_para.state) {
+ if (hostLen < 96) {
+ memset(cloud_para.hostUrl, 0, sizeof(cloud_para.hostUrl));
+ memcpy(cloud_para.hostUrl, &msg[12 + wifiNameLen + wifiKeyLen], hostLen);
+ }
+ cloud_para.port = msg[12 + wifiNameLen + wifiKeyLen + hostLen] + (msg[13 + wifiNameLen + wifiKeyLen + hostLen] << 8);
+
+ }
+
+ // id
+ id_len = msg[14 + wifiNameLen + wifiKeyLen + hostLen];
+ if (id_len == 20) {
+ memset(cloud_para.id, 0, sizeof(cloud_para.id));
+ memcpy(cloud_para.id, (const char *)&msg[15 + wifiNameLen + wifiKeyLen + hostLen], id_len);
+ }
+ ver_len = msg[15 + wifiNameLen + wifiKeyLen + hostLen + id_len];
+ if (ver_len < 20) {
+ memset(wifi_firm_ver, 0, sizeof(wifi_firm_ver));
+ memcpy(wifi_firm_ver, (const char *)&msg[16 + wifiNameLen + wifiKeyLen + hostLen + id_len], ver_len);
+ }
+
+ if (uiCfg.configWifi == 1) {
+ if ((wifiPara.mode != gCfgItems.wifi_mode_sel)
+ || (strncmp(wifiPara.ap_name, (const char *)uiCfg.wifi_name, 32) != 0)
+ || (strncmp(wifiPara.keyCode, (const char *)uiCfg.wifi_key, 64) != 0)) {
+ package_to_wifi(WIFI_PARA_SET, (char *)0, 0);
+ }
+ else uiCfg.configWifi = 0;
+ }
+ if (cfg_cloud_flag == 1) {
+ if (((cloud_para.state >> 4) != (char)gCfgItems.cloud_enable)
+ || (strncmp(cloud_para.hostUrl, (const char *)uiCfg.cloud_hostUrl, 96) != 0)
+ || (cloud_para.port != uiCfg.cloud_port)) {
+ package_to_wifi(WIFI_CLOUD_CFG, (char *)0, 0);
+ }
+ else cfg_cloud_flag = 0;
+ }
+}
+
+static void wifi_list_msg_handle(uint8_t * msg, uint16_t msgLen) {
+ int wifiNameLen,wifiMsgIdex=1;
+ int8_t wifi_name_is_same=0;
+ int8_t i,j;
+ int8_t wifi_name_num=0;
+ uint8_t *str=0;
+ int8_t valid_name_num;
+
+ if (msgLen <= 0)
+ return;
+ if (disp_state == KEY_BOARD_UI)
+ return;
+
+ wifi_list.getNameNum = msg[0];
+
+ if (wifi_list.getNameNum < 20) {
+ uiCfg.command_send = 1;
+
+ memset(wifi_list.wifiName,0,sizeof(wifi_list.wifiName));
+
+ wifi_name_num = wifi_list.getNameNum;
+
+ valid_name_num=0;
+ str = wifi_list.wifiName[valid_name_num];
+
+ if (wifi_list.getNameNum > 0) wifi_list.currentWifipage = 1;
+
+ for (i = 0; i 0x80) {
+ wifi_name_is_same = 1;
+ //break;
+ }
+ //}
+ }
+ if (wifi_name_is_same == 1) {
+ wifi_name_is_same = 0;
+ wifiMsgIdex += wifiNameLen;
+ //wifi_list.RSSI[i] = msg[wifiMsgIdex];
+ wifiMsgIdex += 1;
+ wifi_name_num--;
+ //i--;
+ continue;
+ }
+ if (i < WIFI_TOTAL_NUMBER-1) {
+ str = wifi_list.wifiName[++valid_name_num];
+ }
+ }
+ wifiMsgIdex += wifiNameLen;
+ wifi_list.RSSI[i] = msg[wifiMsgIdex];
+ wifiMsgIdex += 1;
+ }
+ wifi_list.getNameNum = wifi_name_num;
+ if (wifi_list.getNameNum % NUMBER_OF_PAGE == 0) {
+ wifi_list.getPage = wifi_list.getNameNum/NUMBER_OF_PAGE;
+ }
+ else {
+ wifi_list.getPage = wifi_list.getNameNum/NUMBER_OF_PAGE + 1;
+ }
+ wifi_list.nameIndex = 0;
+ if (disp_state == WIFI_LIST_UI)
+ disp_wifi_list();
+ }
+}
+
+static void gcode_msg_handle(uint8_t * msg, uint16_t msgLen) {
+ uint8_t gcodeBuf[100] = {0};
+ char *index_s;
+ char *index_e;
+
+ if (msgLen <= 0)
+ return;
+
+ index_s = (char *)msg;
+ index_e = (char *)strstr((char *)msg, "\n");
+ if (*msg == 'N') {
+ index_s = (char *)strstr((char *)msg, " ");
+ while ((*index_s) == ' ') {
+ index_s++;
+ }
+ }
+ while ((index_e != 0) && ((int)index_s < (int)index_e)) {
+ if ((int)(index_e - index_s) < (int)sizeof(gcodeBuf)) {
+ memset(gcodeBuf, 0, sizeof(gcodeBuf));
+
+ memcpy(gcodeBuf, index_s, index_e - index_s + 1);
+
+ wifi_gcode_exec(gcodeBuf);
+ }
+ while ((*index_e == '\r') || (*index_e == '\n'))
+ index_e++;
+
+ index_s = index_e;
+ index_e = (char *)strstr(index_s, "\n");
+ }
+}
+
+void utf8_2_unicode(uint8_t *source,uint8_t Len) {
+ uint8_t i=0,char_i=0,char_byte_num=0;
+ uint16_t u16_h,u16_m,u16_l,u16_value;
+ uint8_t FileName_unicode[30];
+
+ memset(FileName_unicode, 0, sizeof(FileName_unicode));
+
+ while (1) {
+ char_byte_num = source[i] & 0xF0;
+ if (source[i] < 0X80) {
+ //ASCII --1byte
+ FileName_unicode[char_i] = source[i];
+ i += 1;
+ char_i += 1;
+ }
+ else if (char_byte_num == 0XC0 || char_byte_num == 0XD0) {
+ //--2byte
+
+ u16_h = (((uint16_t)source[i] <<8) & 0x1f00) >> 2;
+ u16_l = ((uint16_t)source[i+1] & 0x003f);
+ u16_value = (u16_h | u16_l);
+ FileName_unicode[char_i] = (uint8_t)((u16_value & 0xff00) >> 8);
+ FileName_unicode[char_i + 1] = (uint8_t)(u16_value & 0x00ff);
+ i += 2;
+ char_i += 2;
+ }
+ else if (char_byte_num == 0XE0) {
+ //--3byte
+ u16_h = (((uint16_t)source[i] <<8 ) & 0x0f00) << 4;
+ u16_m = (((uint16_t)source[i+1] << 8) & 0x3f00) >> 2;
+ u16_l = ((uint16_t)source[i+2] & 0x003f);
+ u16_value = (u16_h | u16_m | u16_l);
+ FileName_unicode[char_i] = (uint8_t)((u16_value & 0xff00) >> 8);
+ FileName_unicode[char_i + 1] = (uint8_t)(u16_value & 0x00ff);
+ i += 3;
+ char_i += 2;
+ }
+ else if (char_byte_num == 0XF0) {
+ //--4byte
+ i += 4;
+ //char_i += 3;
+ }
+ else {
+ break;
+ }
+ if (i >= Len || i >= 255)break;
+ }
+ memcpy(source, FileName_unicode, sizeof(FileName_unicode));
+}
+
+char saveFilePath[50];
+
+static bool longName2DosName(const char* longName, uint8_t* dosName) {
+ uint8_t i = 11;
+ while (i--) dosName[i] = '\0';
+ while (*longName) {
+ uint8_t c = *longName++;
+ if (c == '.') { // For a dot...
+ if (i == 0) return false;
+ else { strcat((char *)dosName,".GCO"); return dosName[0] != '\0'; }
+ }
+ else {
+ // Fail for illegal characters
+ PGM_P p = PSTR("|<>^+=?/[];,*\"\\");
+ while (uint8_t b = pgm_read_byte(p++)) if (b == c) return false;
+ if (c < 0x21 || c == 0x7F) return false; // Check size, non-printable characters
+ dosName[i++] = (c < 'a' || c > 'z') ? (c) : (c + ('A' - 'a')); // Uppercase required for 8.3 name
+ }
+ if (i >= 5) strcat((char *)dosName,"~1.GCO");
+ }
+ return dosName[0] != '\0'; // Return true if any name was set
+}
+
+static void file_first_msg_handle(uint8_t * msg, uint16_t msgLen) {
+ uint8_t fileNameLen = *msg;
+
+ if (msgLen != fileNameLen + 5) return;
+
+ file_writer.fileLen = *((uint32_t *)(msg + 1));
+ memset(file_writer.saveFileName, 0, sizeof(file_writer.saveFileName));
+
+ memcpy(file_writer.saveFileName, msg + 5, fileNameLen);
+
+ utf8_2_unicode(file_writer.saveFileName,fileNameLen);
+
+ memset(file_writer.write_buf, 0, sizeof(file_writer.write_buf));
+
+ if (strlen((const char *)file_writer.saveFileName) > sizeof(saveFilePath))
+ return;
+
+ memset(saveFilePath, 0, sizeof(saveFilePath));
+
+ if (gCfgItems.fileSysType == FILE_SYS_SD) {
+ //sprintf((char *)saveFilePath, "/%s", file_writer.saveFileName);
+ card.mount();
+
+ //ZERO(list_file.long_name[sel_id]);
+ //memcpy(list_file.long_name[sel_id],file_writer.saveFileName,sizeof(list_file.long_name[sel_id]));
+ }
+ else if (gCfgItems.fileSysType == FILE_SYS_USB) {
+
+ }
+ file_writer.write_index = 0;
+ lastFragment = -1;
+
+ wifiTransError.flag = 0;
+ wifiTransError.start_tick = 0;
+ wifiTransError.now_tick = 0;
+
+ TERN_(SDSUPPORT, card.closefile());
+
+ wifi_delay(1000);
+
+ #if ENABLED(SDSUPPORT)
+
+ uint8_t dosName[FILENAME_LENGTH];
+
+ if (!longName2DosName((const char *)file_writer.saveFileName,dosName)) {
+ clear_cur_ui();
+ upload_result = 2;
+ wifiTransError.flag = 1;
+ wifiTransError.start_tick = getWifiTick();
+ lv_draw_dialog(DIALOG_TYPE_UPLOAD_FILE);
+ return;
+ }
+ sprintf((char *)saveFilePath, "/%s", dosName);
+
+ ZERO(list_file.long_name[sel_id]);
+ memcpy(list_file.long_name[sel_id],dosName,sizeof(dosName));
+
+ char *cur_name=strrchr((const char *)saveFilePath,'/');
+
+ SdFile file;
+ SdFile *curDir;
+ card.endFilePrint();
+ const char * const fname = card.diveToFile(true, curDir, cur_name);
+ if (!fname) return;
+ if (file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)) {
+ gCfgItems.curFilesize = file.fileSize();
+ }
+ else {
+ clear_cur_ui();
+ upload_result = 2;
+ wifiTransError.flag = 1;
+ wifiTransError.start_tick = getWifiTick();
+ lv_draw_dialog(DIALOG_TYPE_UPLOAD_FILE);
+ return;
+ }
+ #endif
+
+ wifi_link_state = WIFI_TRANS_FILE;
+
+ upload_result = 1;
+
+ clear_cur_ui();
+ lv_draw_dialog(DIALOG_TYPE_UPLOAD_FILE);
+
+ lv_task_handler();
+
+ file_writer.tick_begin = getWifiTick();
+}
+
+#define FRAG_MASK _BV32(31)
+
+static void file_fragment_msg_handle(uint8_t * msg, uint16_t msgLen) {
+ uint32_t frag = *((uint32_t *)msg);
+
+ if ((frag & FRAG_MASK) != (uint32_t)(lastFragment + 1)) {
+ memset(file_writer.write_buf, 0, sizeof(file_writer.write_buf));
+ file_writer.write_index = 0;
+ wifi_link_state = WIFI_CONNECTED;
+ upload_result = 2;
+ }
+ else {
+ if (write_to_file((char *)msg + 4, msgLen - 4) < 0) {
+ memset(file_writer.write_buf, 0, sizeof(file_writer.write_buf));
+ file_writer.write_index = 0;
+ wifi_link_state = WIFI_CONNECTED;
+ upload_result = 2;
+ return;
+ }
+ lastFragment = frag;
+
+ if ((frag & (~FRAG_MASK))) {
+ int res = card.write(file_writer.write_buf, file_writer.write_index);
+ if (res == -1) {
+ memset(file_writer.write_buf, 0, sizeof(file_writer.write_buf));
+ file_writer.write_index = 0;
+ wifi_link_state = WIFI_CONNECTED;
+ upload_result = 2;
+ return;
+ }
+ memset(file_writer.write_buf, 0, sizeof(file_writer.write_buf));
+ file_writer.write_index = 0;
+ file_writer.tick_end = getWifiTick();
+ upload_time = getWifiTickDiff(file_writer.tick_begin, file_writer.tick_end) / 1000;
+ upload_size = gCfgItems.curFilesize;
+ wifi_link_state = WIFI_CONNECTED;
+ upload_result = 3;
+ }
+
+ }
+}
+
+void esp_data_parser(char *cmdRxBuf, int len) {
+ int32_t head_pos;
+ int32_t tail_pos;
+ uint16_t cpyLen;
+ int16_t leftLen = len;
+ bool loop_again = false;
+
+ ESP_PROTOC_FRAME esp_frame;
+
+ while (leftLen > 0 || loop_again) {
+ loop_again = false;
+
+ if (esp_msg_index != 0) {
+ head_pos = 0;
+ cpyLen = (leftLen < (int16_t)((sizeof(esp_msg_buf) - esp_msg_index)) ? leftLen : sizeof(esp_msg_buf) - esp_msg_index);
+
+ memcpy(&esp_msg_buf[esp_msg_index], cmdRxBuf + len - leftLen, cpyLen);
+
+ esp_msg_index += cpyLen;
+
+ leftLen = leftLen - cpyLen;
+ tail_pos = charAtArray(esp_msg_buf, esp_msg_index, ESP_PROTOC_TAIL);
+
+ if (tail_pos == -1) {
+ if (esp_msg_index >= sizeof(esp_msg_buf)) {
+ memset(esp_msg_buf, 0, sizeof(esp_msg_buf));
+ esp_msg_index = 0;
+ }
+ return;
+ }
+ }
+ else {
+ head_pos = charAtArray((uint8_t const *)&cmdRxBuf[len - leftLen], leftLen, ESP_PROTOC_HEAD);
+ if (head_pos == -1) return;
+
+ memset(esp_msg_buf, 0, sizeof(esp_msg_buf));
+ memcpy(esp_msg_buf, &cmdRxBuf[len - leftLen + head_pos], leftLen - head_pos);
+
+ esp_msg_index = leftLen - head_pos;
+
+ leftLen = 0;
+ head_pos = 0;
+ tail_pos = charAtArray(esp_msg_buf, esp_msg_index, ESP_PROTOC_TAIL);
+ if (tail_pos == -1) {
+ if (esp_msg_index >= sizeof(esp_msg_buf)) {
+ memset(esp_msg_buf, 0, sizeof(esp_msg_buf));
+ esp_msg_index = 0;
+ }
+ return;
+ }
+ }
+
+ esp_frame.type = esp_msg_buf[1];
+ if ((esp_frame.type != ESP_TYPE_NET) && (esp_frame.type != ESP_TYPE_GCODE)
+ && (esp_frame.type != ESP_TYPE_FILE_FIRST) && (esp_frame.type != ESP_TYPE_FILE_FRAGMENT)
+ &&(esp_frame.type != ESP_TYPE_WIFI_LIST)) {
+ memset(esp_msg_buf, 0, sizeof(esp_msg_buf));
+ esp_msg_index = 0;
+ return;
+ }
+
+ esp_frame.dataLen = esp_msg_buf[2] + (esp_msg_buf[3] << 8);
+
+ if ((int)(4 + esp_frame.dataLen) > (int)(sizeof(esp_msg_buf))) {
+ memset(esp_msg_buf, 0, sizeof(esp_msg_buf));
+ esp_msg_index = 0;
+ return;
+ }
+
+ if (esp_msg_buf[4 + esp_frame.dataLen] != ESP_PROTOC_TAIL) {
+ if (esp_msg_index >= sizeof(esp_msg_buf)) {
+ memset(esp_msg_buf, 0, sizeof(esp_msg_buf));
+ esp_msg_index = 0;
+ }
+ return;
+ }
+
+ esp_frame.data = &esp_msg_buf[4];
+ switch (esp_frame.type) {
+ case ESP_TYPE_NET:
+ net_msg_handle(esp_frame.data, esp_frame.dataLen);
+ break;
+ case ESP_TYPE_GCODE:
+ gcode_msg_handle(esp_frame.data, esp_frame.dataLen);
+ break;
+ case ESP_TYPE_FILE_FIRST:
+ file_first_msg_handle(esp_frame.data, esp_frame.dataLen);
+ break;
+ case ESP_TYPE_FILE_FRAGMENT:
+ file_fragment_msg_handle(esp_frame.data, esp_frame.dataLen);
+ break;
+ case ESP_TYPE_WIFI_LIST:
+ wifi_list_msg_handle(esp_frame.data, esp_frame.dataLen);
+ break;
+ default: break;
+ }
+
+ esp_msg_index = cut_msg_head(esp_msg_buf, esp_msg_index, esp_frame.dataLen + 5);
+ if (esp_msg_index > 0) {
+ if (charAtArray(esp_msg_buf, esp_msg_index, ESP_PROTOC_HEAD) == -1) {
+ memset(esp_msg_buf, 0, sizeof(esp_msg_buf));
+ esp_msg_index = 0;
+ return;
+ }
+
+ if ((charAtArray(esp_msg_buf, esp_msg_index, ESP_PROTOC_HEAD) != -1) && (charAtArray(esp_msg_buf, esp_msg_index, ESP_PROTOC_TAIL) != -1))
+ loop_again = true;
+ }
+ }
+}
+
+int32_t tick_net_time1, tick_net_time2;
+
+int storeRcvData(int32_t len) {
+ unsigned char tmpW = wifiDmaRcvFifo.write_cur;
+ if (len <= UDISKBUFLEN && wifiDmaRcvFifo.state[tmpW] == udisk_buf_empty) {
+ for (uint16_t i = 0; i < len; i++)
+ wifiDmaRcvFifo.bufferAddr[tmpW][i] = WIFISERIAL.read();
+ wifiDmaRcvFifo.state[tmpW] = udisk_buf_full;
+ wifiDmaRcvFifo.write_cur = (tmpW + 1) % TRANS_RCV_FIFO_BLOCK_NUM;
+ return 1;
+ }
+ return 0;
+}
+
+int32_t readWifiFifo(uint8_t *retBuf, uint32_t bufLen) {
+ unsigned char tmpR = wifiDmaRcvFifo.read_cur;
+ if (bufLen >= UDISKBUFLEN && wifiDmaRcvFifo.state[tmpR] == udisk_buf_full) {
+ memcpy(retBuf, (unsigned char *)wifiDmaRcvFifo.bufferAddr[tmpR], UDISKBUFLEN);
+ wifiDmaRcvFifo.state[tmpR] = udisk_buf_empty;
+ wifiDmaRcvFifo.read_cur = (tmpR + 1) % TRANS_RCV_FIFO_BLOCK_NUM;
+ return UDISKBUFLEN;
+ }
+ return 0;
+}
+
+void stopEspTransfer() {
+ if (wifi_link_state == WIFI_TRANS_FILE)
+ wifi_link_state = WIFI_CONNECTED;
+
+ TERN_(SDSUPPORT, card.closefile());
+
+ if (upload_result != 3) {
+ wifiTransError.flag = 1;
+ wifiTransError.start_tick = getWifiTick();
+ card.removeFile((const char *)saveFilePath);
+ }
+ else {
+ }
+ wifi_delay(200);
+ WIFI_IO1_SET();
+ //exchangeFlashMode(1); //change spi flash to use dma mode
+ esp_port_begin(1);
+ if (wifiTransError.flag != 0x1) WIFI_IO1_RESET();
+}
+
+void wifi_rcv_handle() {
+ int32_t len = 0;
+ uint8_t ucStr[(UART_RX_BUFFER_SIZE) + 1] = {0};
+ int8_t getDataF = 0;
+
+ if (wifi_link_state == WIFI_TRANS_FILE) {
+ #if 0
+ if (WIFISERIAL.available() == UART_RX_BUFFER_SIZE) {
+ for (uint16_t i=0;i 0) {
+ esp_data_parser((char *)ucStr, len);
+ if (wifi_link_state == WIFI_CONNECTED) {
+ clear_cur_ui();
+ lv_draw_dialog(DIALOG_TYPE_UPLOAD_FILE);
+ stopEspTransfer();
+ }
+ getDataF = 1;
+ }
+ if (esp_state == TRANSFER_STORE) {
+ if (storeRcvData(UART_RX_BUFFER_SIZE)) {
+ esp_state = TRANSFERING;
+ //esp_dma_pre();
+ if (wifiTransError.flag != 0x1) WIFI_IO1_RESET();
+ }
+ else
+ WIFI_IO1_SET();
+ }
+ }
+ else {
+ //len = readUsartFifo((SZ_USART_FIFO *)&WifiRxFifo, (int8_t *)ucStr, UART_RX_BUFFER_SIZE);
+ len = readWifiBuf((int8_t *)ucStr, UART_RX_BUFFER_SIZE);
+ if (len > 0) {
+ esp_data_parser((char *)ucStr, len);
+
+ if (wifi_link_state == WIFI_TRANS_FILE) {
+ //exchangeFlashMode(0); //change spi flash not use dma mode
+ wifi_delay(10);
+ esp_port_begin(0);
+ wifi_delay(10);
+ tick_net_time1 = 0;
+ }
+ if (wifiTransError.flag != 0x1) WIFI_IO1_RESET();
+ getDataF = 1;
+ }
+ if (need_ok_later && (queue.length < BUFSIZE)) {
+ need_ok_later = false;
+ send_to_wifi((char *)"ok\r\n", strlen("ok\r\n"));
+ }
+ }
+
+ if (getDataF == 1) {
+ tick_net_time1 = getWifiTick();
+ }
+ else {
+ tick_net_time2 = getWifiTick();
+
+ if (wifi_link_state == WIFI_TRANS_FILE) {
+ if ((tick_net_time1 != 0) && (getWifiTickDiff(tick_net_time1, tick_net_time2) > 4500)) {
+ wifi_link_state = WIFI_CONNECTED;
+ upload_result = 2;
+ clear_cur_ui();
+ stopEspTransfer();
+ lv_draw_dialog(DIALOG_TYPE_UPLOAD_FILE);
+ }
+ }
+
+ if ((tick_net_time1 != 0) && (getWifiTickDiff(tick_net_time1, tick_net_time2) > 10000))
+ wifi_link_state = WIFI_NOT_CONFIG;
+
+ if ((tick_net_time1 != 0) && (getWifiTickDiff(tick_net_time1, tick_net_time2) > 120000)) {
+ wifi_link_state = WIFI_NOT_CONFIG;
+ wifi_reset();
+ tick_net_time1 = getWifiTick();
+ }
+ }
+
+ if (wifiTransError.flag == 0x1) {
+ wifiTransError.now_tick = getWifiTick();
+ if (getWifiTickDiff(wifiTransError.start_tick, wifiTransError.now_tick) > WAIT_ESP_TRANS_TIMEOUT_TICK) {
+ wifiTransError.flag = 0;
+ WIFI_IO1_RESET();
+ }
+ }
+}
+
+void wifi_looping() {
+ do { wifi_rcv_handle(); } while (wifi_link_state == WIFI_TRANS_FILE);
+}
+
+void mks_esp_wifi_init() {
+ wifi_link_state = WIFI_NOT_CONFIG;
+
+ SET_OUTPUT(WIFI_RESET_PIN);
+ WIFI_SET();
+ SET_OUTPUT(WIFI_IO1_PIN);
+ SET_INPUT_PULLUP(WIFI_IO0_PIN);
+ WIFI_IO1_SET();
+
+ esp_state = TRANSFER_IDLE;
+ esp_port_begin(1);
+
+ wifi_reset();
+
+ #if 0
+ res = f_open(&esp_upload.uploadFile, ESP_FIRMWARE_FILE, FA_OPEN_EXISTING | FA_READ);
+
+ if (res == FR_OK) {
+ f_close(&esp_upload.uploadFile);
+
+ wifi_delay(2000);
+
+ if (usartFifoAvailable((SZ_USART_FIFO *)&WifiRxFifo) < 20) {
+ return;
+ }
+
+ clear_cur_ui();
+
+ draw_dialog(DIALOG_TYPE_UPDATE_ESP_FIRMARE);
+
+ if (wifi_upload(0) >= 0) {
+
+ f_unlink("1:/MKS_WIFI_CUR");
+ f_rename(ESP_FIRMWARE_FILE,"/MKS_WIFI_CUR");
+ }
+ draw_return_ui();
+
+ update_flag = 1;
+ }
+ if (update_flag == 0) {
+ res = f_open(&esp_upload.uploadFile, ESP_WEB_FIRMWARE_FILE, FA_OPEN_EXISTING | FA_READ);
+
+ if (res == FR_OK) {
+ f_close(&esp_upload.uploadFile);
+
+ wifi_delay(2000);
+
+ if (usartFifoAvailable((SZ_USART_FIFO *)&WifiRxFifo) < 20) {
+ return;
+ }
+
+ clear_cur_ui();
+
+ draw_dialog(DIALOG_TYPE_UPDATE_ESP_FIRMARE);
+ if (wifi_upload(1) >= 0) {
+
+ f_unlink("1:/MKS_WIFI_CUR");
+ f_rename(ESP_WEB_FIRMWARE_FILE,"/MKS_WIFI_CUR");
+ }
+ draw_return_ui();
+ update_flag = 1;
+ }
+
+ }
+ if (update_flag == 0) {
+ res = f_open(&esp_upload.uploadFile, ESP_WEB_FILE, FA_OPEN_EXISTING | FA_READ);
+ if (res == FR_OK) {
+ f_close(&esp_upload.uploadFile);
+
+ wifi_delay(2000);
+
+ if (usartFifoAvailable((SZ_USART_FIFO *)&WifiRxFifo) < 20) {
+ return;
+ }
+
+ clear_cur_ui();
+
+ draw_dialog(DIALOG_TYPE_UPDATE_ESP_DATA);
+
+ if (wifi_upload(2) >= 0) {
+
+ f_unlink("1:/MKS_WEB_CONTROL_CUR");
+ f_rename(ESP_WEB_FILE,"/MKS_WEB_CONTROL_CUR");
+ }
+ draw_return_ui();
+ }
+ }
+ #endif
+ wifiPara.decodeType = WIFI_DECODE_TYPE;
+ wifiPara.baud = 115200;
+ wifi_link_state = WIFI_NOT_CONFIG;
+}
+
+#define BUF_INC_POINTER(p) ((p + 1 == UART_FIFO_BUFFER_SIZE) ? 0 : (p + 1))
+
+int usartFifoAvailable(SZ_USART_FIFO *fifo) {
+ int diff = fifo->uart_write_point - fifo->uart_read_point;
+ if (diff < 0) diff += UART_FIFO_BUFFER_SIZE;
+ return diff;
+}
+
+int readUsartFifo(SZ_USART_FIFO *fifo, int8_t *buf, int32_t len) {
+ int i = 0 ;
+ while (i < len && fifo->uart_read_point != fifo->uart_write_point) {
+ buf[i++] = fifo->uartTxBuffer[fifo->uart_read_point];
+ fifo->uart_read_point = BUF_INC_POINTER(fifo->uart_read_point);
+ }
+ return i;
+}
+
+int writeUsartFifo(SZ_USART_FIFO *fifo, int8_t *buf, int32_t len) {
+ if (buf == 0 || len <= 0) return -1;
+
+ int i = 0 ;
+ while (i < len && fifo->uart_read_point != BUF_INC_POINTER(fifo->uart_write_point)) {
+ fifo->uartTxBuffer[fifo->uart_write_point] = buf[i++];
+ fifo->uart_write_point = BUF_INC_POINTER(fifo->uart_write_point);
+ }
+ return i;
+}
+
+void get_wifi_commands() {
+ static char wifi_line_buffer[MAX_CMD_SIZE];
+ static bool wifi_comment_mode = false;
+ static int wifi_read_count = 0;
+
+ if (espGcodeFifo.wait_tick > 5) {
+ while ((queue.length < BUFSIZE) && (espGcodeFifo.r != espGcodeFifo.w)) {
+
+ espGcodeFifo.wait_tick = 0;
+
+ char wifi_char = espGcodeFifo.Buffer[espGcodeFifo.r];
+
+ espGcodeFifo.r = (espGcodeFifo.r + 1) % WIFI_GCODE_BUFFER_SIZE;
+
+ /**
+ * If the character ends the line
+ */
+ if (wifi_char == '\n' || wifi_char == '\r') {
+
+ wifi_comment_mode = false; // end of line == end of comment
+
+ if (!wifi_read_count) continue; // skip empty lines
+
+ wifi_line_buffer[wifi_read_count] = 0; // terminate string
+ wifi_read_count = 0; //reset buffer
+
+ char* command = wifi_line_buffer;
+ while (*command == ' ') command++; // skip any leading spaces
+
+ // Movement commands alert when stopped
+ if (IsStopped()) {
+ char* gpos = strchr(command, 'G');
+ if (gpos) {
+ switch (strtol(gpos + 1, nullptr, 10)) {
+ case 0 ... 1:
+ #if ENABLED(ARC_SUPPORT)
+ case 2 ... 3:
+ #endif
+ #if ENABLED(BEZIER_CURVE_SUPPORT)
+ case 5:
+ #endif
+ SERIAL_ECHOLNPGM(STR_ERR_STOPPED);
+ LCD_MESSAGEPGM(MSG_STOPPED);
+ break;
+ }
+ }
+ }
+
+ #if DISABLED(EMERGENCY_PARSER)
+ // Process critical commands early
+ if (strcmp(command, "M108") == 0) {
+ wait_for_heatup = false;
+ TERN_(HAS_LCD_MENU, wait_for_user = false);
+ }
+ if (strcmp(command, "M112") == 0) kill(M112_KILL_STR, nullptr, true);
+ if (strcmp(command, "M410") == 0) quickstop_stepper();
+ #endif
+
+ // Add the command to the queue
+ queue.enqueue_one_P(wifi_line_buffer);
+ }
+ else if (wifi_read_count >= MAX_CMD_SIZE - 1) {
+
+ }
+ else { // it's not a newline, carriage return or escape char
+ if (wifi_char == ';') wifi_comment_mode = true;
+ if (!wifi_comment_mode) wifi_line_buffer[wifi_read_count++] = wifi_char;
+ }
+ }
+ }// queue has space, serial has data
+ else {
+ espGcodeFifo.wait_tick++;
+ }
+}
+
+int readWifiBuf(int8_t *buf, int32_t len) {
+ int i = 0;
+ while (i < len && WIFISERIAL.available())
+ buf[i++] = WIFISERIAL.read();
+ return i;
+}
+
+#endif // USE_WIFI_FUNCTION
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/wifi_module.h b/Marlin/src/lcd/extui/lib/mks_ui/wifi_module.h
new file mode 100644
index 0000000000..0b402a3adb
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/wifi_module.h
@@ -0,0 +1,202 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+#include "../../inc/MarlinConfigPre.h"
+
+#include
+#include
+#include
+
+#define UART_RX_BUFFER_SIZE 1024
+#define UART_FIFO_BUFFER_SIZE 1024
+
+#define ESP_WIFI 0x02
+
+#define AP_MODEL 0x01
+#define STA_MODEL 0x02
+
+#define WIFI_DECODE_TYPE 1
+
+#define IP_DHCP_FLAG 1
+
+#define WIFI_AP_NAME "TP-LINK_MKS"
+#define WIFI_KEY_CODE "makerbase"
+
+#define IP_ADDR "192.168.3.100"
+#define IP_MASK "255.255.255.0"
+#define IP_GATE "192.168.3.1"
+#define IP_DNS "192.168.3.1"
+
+#define AP_IP_DHCP_FLAG 1
+#define AP_IP_ADDR "192.168.3.100"
+#define AP_IP_MASK "255.255.255.0"
+#define AP_IP_GATE "192.168.3.1"
+#define AP_IP_DNS "192.168.3.1"
+#define IP_START_IP "192.168.3.1"
+#define IP_END_IP "192.168.3.255"
+
+#define UDISKBUFLEN 1024
+
+typedef enum{
+ udisk_buf_empty = 0,
+ udisk_buf_full,
+} UDISK_DATA_BUFFER_STATE;
+
+#define TRANS_RCV_FIFO_BLOCK_NUM 8
+
+typedef struct {
+ unsigned char *bufferAddr[TRANS_RCV_FIFO_BLOCK_NUM];
+ unsigned char *p;
+ UDISK_DATA_BUFFER_STATE state[TRANS_RCV_FIFO_BLOCK_NUM];
+ unsigned char read_cur;
+ unsigned char write_cur;
+} WIFI_DMA_RCV_FIFO;
+
+typedef struct {
+ uint8_t flag; // 0x0: no error; 0x01: error
+ uint32_t start_tick; //error start time
+ uint32_t now_tick;
+} WIFI_TRANS_ERROR;
+
+extern volatile WIFI_TRANS_ERROR wifiTransError;
+
+typedef struct {
+ char ap_name[32]; //wifi-name
+ char keyCode[64]; //wifi password
+ int decodeType;
+ int baud;
+ int mode;
+} WIFI_PARA;
+
+typedef struct {
+ char state;
+ char hostUrl[96];
+ int port;
+ char id[21];
+} CLOUD_PARA;
+
+typedef struct {
+ char dhcp_flag;
+ char ip_addr[16];
+ char mask[16];
+ char gate[16];
+ char dns[16];
+
+ char dhcpd_flag;
+ char dhcpd_ip[16];
+ char dhcpd_mask[16];
+ char dhcpd_gate[16];
+ char dhcpd_dns[16];
+ char start_ip_addr[16];
+ char end_ip_addr[16];
+} IP_PARA;
+
+typedef enum {
+ WIFI_NOT_CONFIG,
+ WIFI_CONFIG_MODE,
+ WIFI_CONFIG_DHCP,
+ WIFI_CONFIG_AP,
+ WIFI_CONFIG_IP_INF,
+ WIFI_CONFIG_DNS,
+ WIFI_CONFIG_TCP,
+ WIFI_CONFIG_SERVER,
+ WIFI_CONFIG_REMOTE_PORT,
+ WIFI_CONFIG_BAUD,
+ WIFI_CONFIG_COMMINT,
+ WIFI_CONFIG_OK,
+ WIFI_GET_IP_OK,
+ WIFI_RECONN,
+ WIFI_CONNECTED,
+ WIFI_WAIT_TRANS_START,
+ WIFI_TRANS_FILE,
+ WIFI_CONFIG_DHCPD,
+ WIFI_COFIG_DHCPD_IP,
+ WIFI_COFIG_DHCPD_DNS,
+ WIFI_EXCEPTION,
+} WIFI_STATE;
+
+typedef enum {
+ TRANSFER_IDLE,
+ TRANSFERING,
+ TRANSFER_STORE,
+} TRANSFER_STATE;
+extern volatile TRANSFER_STATE esp_state;
+
+typedef struct {
+ char buf[20][80];
+ int rd_index;
+ int wt_index;
+} QUEUE;
+
+typedef enum {
+ WIFI_PARA_SET, // 0x0:net parameter
+ WIFI_PRINT_INF, // 0x1:print message
+ WIFI_TRANS_INF, // 0x2:Pass through information
+ WIFI_EXCEP_INF, // 0x3:Exception information
+ WIFI_CLOUD_CFG, // 0x4:cloud config
+ WIFI_CLOUD_UNBIND, // 0x5:Unbind ID
+} WIFI_RET_TYPE;
+
+typedef struct {
+ uint32_t uart_read_point;
+ uint32_t uart_write_point;
+ uint8_t uartTxBuffer[UART_FIFO_BUFFER_SIZE];
+} SZ_USART_FIFO;
+
+#define WIFI_GCODE_BUFFER_LEAST_SIZE 96
+#define WIFI_GCODE_BUFFER_SIZE (WIFI_GCODE_BUFFER_LEAST_SIZE * 3)
+typedef struct {
+ uint8_t wait_tick;
+ uint8_t Buffer[WIFI_GCODE_BUFFER_SIZE];
+ uint32_t r;
+ uint32_t w;
+} WIFI_GCODE_BUFFER;
+
+extern volatile WIFI_STATE wifi_link_state;
+extern WIFI_PARA wifiPara;
+extern IP_PARA ipPara;
+extern CLOUD_PARA cloud_para;
+
+extern WIFI_GCODE_BUFFER espGcodeFifo;
+
+extern uint32_t getWifiTick();
+extern uint32_t getWifiTickDiff(int32_t lastTick, int32_t curTick);
+
+extern void mks_esp_wifi_init();
+extern int cfg_cloud_flag;
+extern int send_to_wifi(char *buf, int len);
+extern void wifi_looping();
+extern int raw_send_to_wifi(char *buf, int len);
+extern int package_to_wifi(WIFI_RET_TYPE type,char *buf, int len);
+extern void get_wifi_list_command_send();
+extern void get_wifi_commands();
+extern int readWifiBuf(int8_t *buf, int32_t len);
+extern int storeRcvData(int32_t len);
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.cpp b/Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.cpp
new file mode 100644
index 0000000000..132838c8a9
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.cpp
@@ -0,0 +1,847 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if HAS_TFT_LVGL_UI
+
+#include "draw_ui.h"
+#include "wifi_module.h"
+#include "wifi_upload.h"
+
+#include "../../../../MarlinCore.h"
+
+#define WIFI_SET() WRITE(WIFI_RESET_PIN, HIGH);
+#define WIFI_RESET() WRITE(WIFI_RESET_PIN, LOW);
+#define WIFI_IO1_SET() WRITE(WIFI_IO1_PIN, HIGH);
+#define WIFI_IO1_RESET() WRITE(WIFI_IO1_PIN, LOW);
+
+extern SZ_USART_FIFO WifiRxFifo;
+
+extern int readUsartFifo(SZ_USART_FIFO *fifo, int8_t *buf, int32_t len);
+extern int writeUsartFifo(SZ_USART_FIFO * fifo, int8_t * buf, int32_t len);
+extern void esp_port_begin(uint8_t interrupt);
+extern int usartFifoAvailable(SZ_USART_FIFO *fifo);
+extern void wifi_delay(int n);
+
+#define ARRAY_SIZE(a) sizeof(a) / sizeof((a)[0])
+
+//typedef signed char bool;
+
+// ESP8266 command codes
+const uint8_t ESP_FLASH_BEGIN = 0x02;
+const uint8_t ESP_FLASH_DATA = 0x03;
+const uint8_t ESP_FLASH_END = 0x04;
+const uint8_t ESP_MEM_BEGIN = 0x05;
+const uint8_t ESP_MEM_END = 0x06;
+const uint8_t ESP_MEM_DATA = 0x07;
+const uint8_t ESP_SYNC = 0x08;
+const uint8_t ESP_WRITE_REG = 0x09;
+const uint8_t ESP_READ_REG = 0x0a;
+
+// MAC address storage locations
+const uint32_t ESP_OTP_MAC0 = 0x3ff00050;
+const uint32_t ESP_OTP_MAC1 = 0x3ff00054;
+const uint32_t ESP_OTP_MAC2 = 0x3ff00058;
+const uint32_t ESP_OTP_MAC3 = 0x3ff0005c;
+
+const size_t EspFlashBlockSize = 0x0400; // 1K byte blocks
+
+const uint8_t ESP_IMAGE_MAGIC = 0xe9;
+const uint8_t ESP_CHECKSUM_MAGIC = 0xef;
+
+const uint32_t ESP_ERASE_CHIP_ADDR = 0x40004984; // &SPIEraseChip
+const uint32_t ESP_SEND_PACKET_ADDR = 0x40003c80; // &send_packet
+const uint32_t ESP_SPI_READ_ADDR = 0x40004b1c; // &SPIRead
+const uint32_t ESP_UNKNOWN_ADDR = 0x40001121; // not used
+const uint32_t ESP_USER_DATA_RAM_ADDR = 0x3ffe8000; // &user data ram
+const uint32_t ESP_IRAM_ADDR = 0x40100000; // instruction RAM
+const uint32_t ESP_FLASH_ADDR = 0x40200000; // address of start of Flash
+//const uint32_t ESP_FLASH_READ_STUB_BEGIN = IRAM_ADDR + 0x18;
+
+UPLOAD_STRUCT esp_upload;
+
+static const unsigned int retriesPerReset = 3;
+static const uint32_t connectAttemptInterval = 50;
+static const unsigned int percentToReportIncrement = 5; // how often we report % complete
+static const uint32_t defaultTimeout = 500;
+static const uint32_t eraseTimeout = 15000;
+static const uint32_t blockWriteTimeout = 200;
+static const uint32_t blockWriteInterval = 15; // 15ms is long enough, 10ms is mostly too short
+
+// Messages corresponding to result codes, should make sense when followed by " error"
+const char *resultMessages[] = {
+ "no",
+ "timeout",
+ "comm write",
+ "connect",
+ "bad reply",
+ "file read",
+ "empty file",
+ "response header",
+ "slip frame",
+ "slip state",
+ "slip data"
+};
+
+// A note on baud rates.
+// The ESP8266 supports 921600, 460800, 230400, 115200, 74880 and some lower baud rates.
+// 921600b is not reliable because even though it sometimes succeeds in connecting, we get a bad response during uploading after a few blocks.
+// Probably our UART ISR cannot receive bytes fast enough, perhaps because of the latency of the system tick ISR.
+// 460800b doesn't always manage to connect, but if it does then uploading appears to be reliable.
+// 230400b always manages to connect.
+static const uint32_t uploadBaudRates[] = { 460800, 230400, 115200, 74880 };
+
+
+
+signed char IsReady() {
+ return esp_upload.state == upload_idle;
+}
+
+
+
+
+
+void uploadPort_write(const uint8_t *buf, size_t len) {
+ #if 0
+ int i;
+
+ for(i = 0; i < len; i++) {
+ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
+
+ USART_SendData(USART1, *(buf + i));
+ }
+ #endif
+}
+
+char uploadPort_read() {
+ uint8_t retChar;
+ if (readUsartFifo(&WifiRxFifo, (int8_t *)&retChar, 1) == 1)
+ return retChar;
+ else
+ return 0;
+
+}
+
+int uploadPort_available() {
+ return usartFifoAvailable(&WifiRxFifo);
+}
+
+
+void uploadPort_begin() {
+ esp_port_begin(1);
+}
+
+void uploadPort_close() {
+
+ //WIFI_COM.end();
+ //WIFI_COM.begin(115200, true);
+
+ esp_port_begin(0);
+
+}
+
+
+void flushInput() {
+ while (uploadPort_available() != 0) {
+ (void)uploadPort_read();
+ //IWDG_ReloadCounter();
+ }
+}
+
+// Extract 1-4 bytes of a value in little-endian order from a buffer beginning at a specified offset
+uint32_t getData(unsigned byteCnt, const uint8_t *buf, int ofst) {
+ uint32_t val = 0;
+
+ if (buf && byteCnt) {
+ unsigned int shiftCnt = 0;
+ if (byteCnt > 4)
+ byteCnt = 4;
+ do{
+ val |= (uint32_t)buf[ofst++] << shiftCnt;
+ shiftCnt += 8;
+ } while (--byteCnt);
+ }
+ return(val);
+}
+
+// Put 1-4 bytes of a value in little-endian order into a buffer beginning at a specified offset.
+void putData(uint32_t val, unsigned byteCnt, uint8_t *buf, int ofst) {
+ if (buf && byteCnt) {
+ if (byteCnt > 4) {
+ byteCnt = 4;
+ }
+ do {
+ buf[ofst++] = (uint8_t)(val & 0xff);
+ val >>= 8;
+ } while (--byteCnt);
+ }
+}
+
+// Read a byte optionally performing SLIP decoding. The return values are:
+//
+// 2 - an escaped byte was read successfully
+// 1 - a non-escaped byte was read successfully
+// 0 - no data was available
+// -1 - the value 0xc0 was encountered (shouldn't happen)
+// -2 - a SLIP escape byte was found but the following byte wasn't available
+// -3 - a SLIP escape byte was followed by an invalid byte
+int ReadByte(uint8_t *data, signed char slipDecode) {
+ if (uploadPort_available() == 0) {
+ return(0);
+ }
+
+ // at least one byte is available
+ *data = uploadPort_read();
+ if (!slipDecode) {
+ return(1);
+ }
+
+ if (*data == 0xc0) {
+ // this shouldn't happen
+ return(-1);
+ }
+
+ // if not the SLIP escape, we're done
+ if (*data != 0xdb) {
+ return(1);
+ }
+
+ // SLIP escape, check availability of subsequent byte
+ if (uploadPort_available() == 0) {
+ return(-2);
+ }
+
+ // process the escaped byte
+ *data = uploadPort_read();
+ if (*data == 0xdc) {
+ *data = 0xc0;
+ return(2);
+ }
+
+ if (*data == 0xdd) {
+ *data = 0xdb;
+ return(2);
+ }
+ // invalid
+ return(-3);
+}
+// When we write a sync packet, there must be no gaps between most of the characters.
+// So use this function, which does a block write to the UART buffer in the latest CoreNG.
+void _writePacketRaw(const uint8_t *buf, size_t len) {
+ uploadPort_write(buf, len);
+}
+
+// Write a byte to the serial port optionally SLIP encoding. Return the number of bytes actually written.
+void WriteByteRaw(uint8_t b) {
+ uploadPort_write((const uint8_t *)&b, 1);
+}
+
+// Write a byte to the serial port optionally SLIP encoding. Return the number of bytes actually written.
+void WriteByteSlip(uint8_t b) {
+ if (b == 0xC0) {
+ WriteByteRaw(0xDB);
+ WriteByteRaw(0xDC);
+ }
+ else if (b == 0xDB) {
+ WriteByteRaw(0xDB);
+ WriteByteRaw(0xDD);
+ }
+ else {
+ uploadPort_write((const uint8_t *)&b, 1);
+ }
+}
+
+// Wait for a data packet to be returned. If the body of the packet is
+// non-zero length, return an allocated buffer indirectly containing the
+// data and return the data length. Note that if the pointer for returning
+// the data buffer is NULL, the response is expected to be two bytes of zero.
+//
+// If an error occurs, return a negative value. Otherwise, return the number
+// of bytes in the response (or zero if the response was not the standard "two bytes of zero").
+EspUploadResult readPacket(uint8_t op, uint32_t *valp, size_t *bodyLen, uint32_t msTimeout) {
+ typedef enum {
+ begin = 0,
+ header,
+ body,
+ end,
+ done
+ } PacketState;
+
+ uint8_t resp, opRet;
+
+ const size_t headerLength = 8;
+
+ uint32_t startTime = getWifiTick();
+ uint8_t hdr[headerLength];
+ uint16_t hdrIdx = 0;
+
+ uint16_t bodyIdx = 0;
+ uint8_t respBuf[2];
+
+ // wait for the response
+ uint16_t needBytes = 1;
+
+ PacketState state = begin;
+
+ *bodyLen = 0;
+
+
+ while (state != done) {
+ uint8_t c;
+ EspUploadResult stat;
+
+ //IWDG_ReloadCounter();
+
+ if (getWifiTickDiff(startTime, getWifiTick()) > msTimeout) {
+ return(timeout);
+ }
+
+ if (uploadPort_available() < needBytes) {
+ // insufficient data available
+ // preferably, return to Spin() here
+ continue;
+ }
+
+ // sufficient bytes have been received for the current state, process them
+ switch(state) {
+ case begin: // expecting frame start
+ c = uploadPort_read();
+ if (c != (uint8_t)0xc0) {
+ break;
+ }
+ state = header;
+ needBytes = 2;
+
+ break;
+ case end: // expecting frame end
+ c = uploadPort_read();
+ if (c != (uint8_t)0xc0) {
+ return slipFrame;
+ }
+ state = done;
+
+ break;
+
+ case header: // reading an 8-byte header
+ case body: // reading the response body
+ {
+ int rslt;
+ // retrieve a byte with SLIP decoding
+ rslt = ReadByte(&c, 1);
+ if (rslt != 1 && rslt != 2) {
+ // some error occurred
+ stat = (rslt == 0 || rslt == -2) ? slipData : slipFrame;
+ return stat;
+ }
+ else if (state == header) {
+ //store the header byte
+ hdr[hdrIdx++] = c;
+ if (hdrIdx >= headerLength) {
+ // get the body length, prepare a buffer for it
+ *bodyLen = (uint16_t)getData(2, hdr, 2);
+
+ // extract the value, if requested
+ if (valp != 0) {
+ *valp = getData(4, hdr, 4);
+ }
+
+ if (*bodyLen != 0) {
+ state = body;
+ }
+ else {
+ needBytes = 1;
+ state = end;
+ }
+ }
+ }
+ else {
+ // Store the response body byte, check for completion
+ if (bodyIdx < ARRAY_SIZE(respBuf)) {
+ respBuf[bodyIdx] = c;
+ }
+ ++bodyIdx;
+ if (bodyIdx >= *bodyLen) {
+ needBytes = 1;
+ state = end;
+ }
+ }
+ }
+ break;
+
+ default: // this shouldn't happen
+ return slipState;
+ }
+ }
+
+ // Extract elements from the header
+ resp = (uint8_t)getData(1, hdr, 0);
+ opRet = (uint8_t)getData(1, hdr, 1);
+ // Sync packets often provoke a response with a zero opcode instead of ESP_SYNC
+ if (resp != 0x01 || opRet != op) {
+//debug//printf("resp %02x %02x\n", resp, opRet);
+ return respHeader;
+ }
+
+ return success;
+}
+
+// Send a block of data performing SLIP encoding of the content.
+void _writePacket(const uint8_t *data, size_t len) {
+ unsigned char outBuf[2048] = {0};
+ unsigned int outIndex = 0;
+ while (len != 0) {
+ if (*data == 0xC0) {
+ outBuf[outIndex++] = 0xDB;
+ outBuf[outIndex++] = 0xDC;
+ }
+ else if (*data == 0xDB) {
+ outBuf[outIndex++] = 0xDB;
+ outBuf[outIndex++] = 0xDD;
+ }
+ else {
+ outBuf[outIndex++] = *data;
+
+ }
+ data++;
+ --len;
+ }
+ uploadPort_write((const uint8_t *)outBuf, outIndex);
+}
+
+// Send a packet to the serial port while performing SLIP framing. The packet data comprises a header and an optional data block.
+// A SLIP packet begins and ends with 0xc0. The data encapsulated has the bytes
+// 0xc0 and 0xdb replaced by the two-byte sequences {0xdb, 0xdc} and {0xdb, 0xdd} respectively.
+
+void writePacket(const uint8_t *hdr, size_t hdrLen, const uint8_t *data, size_t dataLen) {
+
+ WriteByteRaw(0xc0); // send the packet start character
+ _writePacket(hdr, hdrLen); // send the header
+ _writePacket(data, dataLen); // send the data block
+ WriteByteRaw(0xc0); // send the packet end character
+}
+
+// Send a packet to the serial port while performing SLIP framing. The packet data comprises a header and an optional data block.
+// This is like writePacket except that it does a fast block write for both the header and the main data with no SLIP encoding. Used to send sync commands.
+void writePacketRaw(const uint8_t *hdr, size_t hdrLen, const uint8_t *data, size_t dataLen) {
+ WriteByteRaw(0xc0); // send the packet start character
+ _writePacketRaw(hdr, hdrLen); // send the header
+ _writePacketRaw(data, dataLen); // send the data block in raw mode
+ WriteByteRaw(0xc0); // send the packet end character
+}
+
+// Send a command to the attached device together with the supplied data, if any.
+// The data is supplied via a list of one or more segments.
+void sendCommand(uint8_t op, uint32_t checkVal, const uint8_t *data, size_t dataLen) {
+ // populate the header
+ uint8_t hdr[8];
+ putData(0, 1, hdr, 0);
+ putData(op, 1, hdr, 1);
+ putData(dataLen, 2, hdr, 2);
+ putData(checkVal, 4, hdr, 4);
+
+ // send the packet
+ //flushInput();
+ if (op == ESP_SYNC) {
+ writePacketRaw(hdr, sizeof(hdr), data, dataLen);
+ }
+ else {
+ writePacket(hdr, sizeof(hdr), data, dataLen);
+ }
+}
+
+// Send a command to the attached device together with the supplied data, if any, and get the response
+EspUploadResult doCommand(uint8_t op, const uint8_t *data, size_t dataLen, uint32_t checkVal, uint32_t *valp, uint32_t msTimeout) {
+ size_t bodyLen;
+ EspUploadResult stat;
+
+ sendCommand(op, checkVal, data, dataLen);
+
+ stat = readPacket(op, valp, &bodyLen, msTimeout);
+ if (stat == success && bodyLen != 2) {
+ stat = badReply;
+ }
+
+ return stat;
+}
+
+// Send a synchronising packet to the serial port in an attempt to induce
+// the ESP8266 to auto-baud lock on the baud rate.
+EspUploadResult Sync(uint16_t timeout) {
+ uint8_t buf[36];
+ EspUploadResult stat;
+ int i ;
+
+ // compose the data for the sync attempt
+ memset(buf, 0x55, sizeof(buf));
+ buf[0] = 0x07;
+ buf[1] = 0x07;
+ buf[2] = 0x12;
+ buf[3] = 0x20;
+
+ stat = doCommand(ESP_SYNC, buf, sizeof(buf), 0, 0, timeout);
+
+ // If we got a response other than sync, discard it and wait for a sync response. This happens at higher baud rates.
+ for (i = 0; i < 10 && stat == respHeader; ++i) {
+ size_t bodyLen;
+ stat = readPacket(ESP_SYNC, 0, &bodyLen, timeout);
+ }
+
+ if (stat == success) {
+ // Read and discard additional replies
+ for (;;) {
+ size_t bodyLen;
+ EspUploadResult rc = readPacket(ESP_SYNC, 0, &bodyLen, defaultTimeout);
+ if (rc != success || bodyLen != 2) {
+ break;
+ }
+ }
+ }
+ //DEBUG
+ //else debug//printf("stat=%d\n", (int)stat);
+ return stat;
+}
+
+// Send a command to the device to begin the Flash process.
+EspUploadResult flashBegin(uint32_t addr, uint32_t size) {
+ // determine the number of blocks represented by the size
+ uint32_t blkCnt;
+ uint8_t buf[16];
+ uint32_t timeout;
+
+ blkCnt = (size + EspFlashBlockSize - 1) / EspFlashBlockSize;
+
+ // ensure that the address is on a block boundary
+ addr &= ~(EspFlashBlockSize - 1);
+
+ // begin the Flash process
+ putData(size, 4, buf, 0);
+ putData(blkCnt, 4, buf, 4);
+ putData(EspFlashBlockSize, 4, buf, 8);
+ putData(addr, 4, buf, 12);
+
+ timeout = (size != 0) ? eraseTimeout : defaultTimeout;
+ return doCommand(ESP_FLASH_BEGIN, buf, sizeof(buf), 0, 0, timeout);
+}
+
+// Send a command to the device to terminate the Flash process
+EspUploadResult flashFinish(signed char reboot) {
+ uint8_t buf[4];
+ putData(reboot ? 0 : 1, 4, buf, 0);
+ return doCommand(ESP_FLASH_END, buf, sizeof(buf), 0, 0, defaultTimeout);
+}
+
+// Compute the checksum of a block of data
+uint16_t checksum(const uint8_t *data, uint16_t dataLen, uint16_t cksum) {
+ if (data != NULL) {
+ while (dataLen--) {
+ cksum ^= (uint16_t)*data++;
+ }
+ }
+ return(cksum);
+}
+
+EspUploadResult flashWriteBlock(uint16_t flashParmVal, uint16_t flashParmMask) {
+ #if 0
+ const uint32_t blkSize = EspFlashBlockSize;
+ int i;
+
+ // Allocate a data buffer for the combined header and block data
+ const uint16_t hdrOfst = 0;
+ const uint16_t dataOfst = 16;
+ const uint16_t blkBufSize = dataOfst + blkSize;
+ uint32_t blkBuf32[blkBufSize/4];
+ uint8_t * const blkBuf = (uint8_t*)(blkBuf32);
+ uint32_t cnt;
+ uint16_t cksum;
+ EspUploadResult stat;
+
+ // Prepare the header for the block
+ putData(blkSize, 4, blkBuf, hdrOfst + 0);
+ putData(esp_upload.uploadBlockNumber, 4, blkBuf, hdrOfst + 4);
+ putData(0, 4, blkBuf, hdrOfst + 8);
+ putData(0, 4, blkBuf, hdrOfst + 12);
+
+ // Get the data for the block
+ f_read(&esp_upload.uploadFile, blkBuf + dataOfst, blkSize, &cnt );//->Read(reinterpret_cast(blkBuf + dataOfst), blkSize);
+ if (cnt != blkSize) {
+ if (f_tell(&esp_upload.uploadFile) == esp_upload.fileSize) {
+ // partial last block, fill the remainder
+ memset(blkBuf + dataOfst + cnt, 0xff, blkSize - cnt);
+ }
+ else {
+ return fileRead;
+ }
+ }
+
+ // Patch the flash parameters into the first block if it is loaded at address 0
+ if (esp_upload.uploadBlockNumber == 0 && esp_upload.uploadAddress == 0 && blkBuf[dataOfst] == ESP_IMAGE_MAGIC && flashParmMask != 0) {
+ // update the Flash parameters
+ uint32_t flashParm = getData(2, blkBuf + dataOfst + 2, 0) & ~(uint32_t)flashParmMask;
+ putData(flashParm | flashParmVal, 2, blkBuf + dataOfst + 2, 0);
+ }
+
+ // Calculate the block checksum
+ cksum = checksum(blkBuf + dataOfst, blkSize, ESP_CHECKSUM_MAGIC);
+
+ for (i = 0; i < 3; i++) {
+ if ((stat = doCommand(ESP_FLASH_DATA, blkBuf, blkBufSize, cksum, 0, blockWriteTimeout)) == success) {
+ break;
+ }
+ }
+
+ //printf("Upload %d\%\n", ftell(&esp_upload.uploadFile) * 100 / esp_upload.fileSize);
+
+ return stat;
+ #endif
+}
+
+void upload_spin() {
+ #if 0
+ switch (esp_upload.state) {
+ case resetting:
+
+ if (esp_upload.connectAttemptNumber == 9) {
+ // Time to give up
+ //Network::ResetWiFi();
+ esp_upload.uploadResult = connected;
+ esp_upload.state = done;
+ }
+ else{
+
+ // Reset the serial port at the new baud rate. Also reset the ESP8266.
+ // const uint32_t baud = uploadBaudRates[esp_upload.connectAttemptNumber/esp_upload.retriesPerBaudRate];
+ if (esp_upload.connectAttemptNumber % esp_upload.retriesPerBaudRate == 0) {
+ }
+ // uploadPort.begin(baud);
+ // uploadPort_close();
+
+
+ uploadPort_begin();
+
+ wifi_delay(2000);
+
+ flushInput();
+
+ esp_upload.lastAttemptTime = esp_upload.lastResetTime = getWifiTick();
+ esp_upload.state = connecting;
+ }
+
+ break;
+
+ case connecting:
+ if ((getWifiTickDiff(esp_upload.lastAttemptTime, getWifiTick()) >= connectAttemptInterval) && (getWifiTickDiff(esp_upload.lastResetTime, getWifiTick()) >= 500)) {
+ // Attempt to establish a connection to the ESP8266.
+ EspUploadResult res = Sync(5000);
+ esp_upload.lastAttemptTime = getWifiTick();
+ if (res == success) {
+ // Successful connection
+// //MessageF(" success on attempt %d\n", (connectAttemptNumber % retriesPerBaudRate) + 1);
+ //printf("connect success\n");
+ esp_upload.state = erasing;
+ }
+ else {
+ // This attempt failed
+ esp_upload.connectAttemptNumber++;
+ if (esp_upload.connectAttemptNumber % retriesPerReset == 0) {
+ esp_upload.state = resetting; // try a reset and a lower baud rate
+ }
+ }
+ }
+ break;
+
+ case erasing:
+ if (getWifiTickDiff(esp_upload.lastAttemptTime, getWifiTick()) >= blockWriteInterval) {
+ uint32_t eraseSize;
+ const uint32_t sectorsPerBlock = 16;
+ const uint32_t sectorSize = 4096;
+ const uint32_t numSectors = (esp_upload.fileSize + sectorSize - 1)/sectorSize;
+ const uint32_t startSector = esp_upload.uploadAddress/sectorSize;
+ uint32_t headSectors = sectorsPerBlock - (startSector % sectorsPerBlock);
+
+ if (numSectors < headSectors) {
+ headSectors = numSectors;
+ }
+ eraseSize = (numSectors < 2 * headSectors)
+ ? (numSectors + 1) / 2 * sectorSize
+ : (numSectors - headSectors) * sectorSize;
+
+ //MessageF("Erasing %u bytes...\n", fileSize);
+ esp_upload.uploadResult = flashBegin(esp_upload.uploadAddress, eraseSize);
+ if (esp_upload.uploadResult == success) {
+ //MessageF("Uploading file...\n");
+ esp_upload.uploadBlockNumber = 0;
+ esp_upload.uploadNextPercentToReport = percentToReportIncrement;
+ esp_upload.lastAttemptTime = getWifiTick();
+ esp_upload.state = uploading;
+ }
+ else {
+ //MessageF("Erase failed\n");
+ esp_upload.state = done;
+ }
+ }
+ break;
+
+ case uploading:
+ // The ESP needs several milliseconds to recover from one packet before it will accept another
+ if (getWifiTickDiff(esp_upload.lastAttemptTime, getWifiTick()) >= 15) {
+ unsigned int percentComplete;
+ const uint32_t blkCnt = (esp_upload.fileSize + EspFlashBlockSize - 1) / EspFlashBlockSize;
+ if (esp_upload.uploadBlockNumber < blkCnt) {
+ esp_upload.uploadResult = flashWriteBlock(0, 0);
+ esp_upload.lastAttemptTime = getWifiTick();
+ if (esp_upload.uploadResult != success) {
+ //MessageF("Flash block upload failed\n");
+ esp_upload.state = done;
+ }
+ percentComplete = (100 * esp_upload.uploadBlockNumber)/blkCnt;
+ ++esp_upload.uploadBlockNumber;
+ if (percentComplete >= esp_upload.uploadNextPercentToReport) {
+ //MessageF("%u%% complete\n", percentComplete);
+ esp_upload.uploadNextPercentToReport += percentToReportIncrement;
+ }
+ }
+ else {
+ esp_upload.state = done;
+ }
+ }
+ break;
+
+ case done:
+ f_close(&esp_upload.uploadFile);
+ //uploadPort.end();
+ //uploadPort_close();
+
+ //WIFI_COM.begin(115200, true);
+ //wifi_init();
+
+ if (esp_upload.uploadResult == success) {
+ //printf("upload successfully\n");
+ }
+ else {
+ //printf("upload failed\n");
+ }
+ esp_upload.state = upload_idle;//idle;
+ break;
+
+ default:
+ break;
+ }
+ #endif
+}
+
+// Try to upload the given file at the given address
+void SendUpdateFile(const char *file, uint32_t address) {
+ #if 0
+ FRESULT res = f_open(&esp_upload.uploadFile, file, FA_OPEN_EXISTING | FA_READ);
+
+ if (res != FR_OK) return;
+
+ esp_upload.fileSize = f_size(&esp_upload.uploadFile);
+ if (esp_upload.fileSize == 0) {
+ f_close(&esp_upload.uploadFile);
+ return;
+ }
+ f_lseek(&esp_upload.uploadFile, 0);
+
+ esp_upload.uploadAddress = address;
+ esp_upload.connectAttemptNumber = 0;
+ esp_upload.state = resetting;
+ #endif
+}
+
+static const uint32_t FirmwareAddress = 0x00000000, WebFilesAddress = 0x00100000;
+
+void ResetWiFiForUpload(int begin_or_end) {
+ #if 0
+ uint32_t start, now;
+
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+ #if V1_0_V1_1
+ GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStructure.Pin = GPIO_Pin_8;
+ GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
+ #else
+ GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStructure.Pin = GPIO_Pin_13;
+ GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
+ #endif
+ start = getWifiTick();
+ now = start;
+
+ if (begin_or_end == 0) {
+ #if V1_0_V1_1
+ HAL_GPIO_WritePin(GPIOA,GPIO_Pin_8,GPIO_PIN_RESET); //update mode
+ #else
+ HAL_GPIO_WritePin(GPIOC,GPIO_Pin_13,GPIO_PIN_RESET); //update mode
+ #endif
+ }
+ else {
+ #if V1_0_V1_1
+ #if V1_0_V1_1
+ HAL_GPIO_WritePin(GPIOA,GPIO_Pin_8,GPIO_PIN_SET); //boot mode
+ GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStructure.Pin = GPIO_Pin_8;
+ GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
+ #endif
+ #else
+ HAL_GPIO_WritePin(GPIOC,GPIO_Pin_13,GPIO_PIN_SET); //boot mode
+ GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStructure.Pin = GPIO_Pin_13;
+ GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
+ #endif
+ }
+ WIFI_RESET();
+ while (getWifiTickDiff(start, now) < 500) now = getWifiTick();
+ WIFI_SET();
+ #endif
+}
+
+int32_t wifi_upload(int type) {
+ esp_upload.retriesPerBaudRate = 9;
+
+ ResetWiFiForUpload(0);
+
+ if (type == 0)
+ SendUpdateFile(ESP_FIRMWARE_FILE, FirmwareAddress);
+ else if (type == 1)
+ SendUpdateFile(ESP_WEB_FIRMWARE_FILE, FirmwareAddress);
+ else if (type == 2)
+ SendUpdateFile(ESP_WEB_FILE, WebFilesAddress);
+ else
+ return -1;
+
+ while (esp_upload.state != upload_idle) {
+ upload_spin();
+ //IWDG_ReloadCounter();
+ }
+
+ ResetWiFiForUpload(1);
+
+ return esp_upload.uploadResult == success ? 0 : -1;
+}
+
+#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.h b/Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.h
new file mode 100644
index 0000000000..d942a2c84f
--- /dev/null
+++ b/Marlin/src/lcd/extui/lib/mks_ui/wifi_upload.h
@@ -0,0 +1,74 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+ extern "C" { /* C-declarations for C++ */
+#endif
+
+#define ESP_FIRMWARE_FILE "1:/MksWifi.bin"
+#define ESP_WEB_FIRMWARE_FILE "1:/MksWifi_Web.bin"
+#define ESP_WEB_FILE "1:/MksWifi_WebView.bin"
+
+typedef enum {
+ upload_idle,
+ resetting,
+ connecting,
+ erasing,
+ uploading,
+ done
+} UploadState;
+
+typedef enum {
+ success = 0,
+ timeout,
+ connected,
+ badReply,
+ fileRead,
+ emptyFile,
+ respHeader,
+ slipFrame,
+ slipState,
+ slipData,
+} EspUploadResult;
+
+typedef struct {
+ //FIL uploadFile;
+ uint32_t fileSize;
+
+ uint32_t uploadAddress;
+ UploadState state;
+ uint32_t retriesPerBaudRate;
+ uint32_t connectAttemptNumber;
+ uint32_t lastAttemptTime;
+ uint32_t lastResetTime;
+ uint32_t uploadBlockNumber;
+ uint32_t uploadNextPercentToReport;
+ EspUploadResult uploadResult;
+} UPLOAD_STRUCT;
+
+extern UPLOAD_STRUCT esp_upload;
+int32_t wifi_upload(int type);
+
+#ifdef __cplusplus
+ } /* C-declarations for C++ */
+#endif
diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h
index f83142444a..da38192d8e 100644
--- a/Marlin/src/module/stepper.h
+++ b/Marlin/src/module/stepper.h
@@ -253,6 +253,13 @@ class Stepper {
static bool initialized;
#endif
+ // Last-moved extruder, as set when the last movement was fetched from planner
+ #if HAS_MULTI_EXTRUDER
+ static uint8_t last_moved_extruder;
+ #else
+ static constexpr uint8_t last_moved_extruder = 0;
+ #endif
+
private:
static block_t* current_block; // A pointer to the block currently being traced
@@ -262,13 +269,6 @@ class Stepper {
static bool abort_current_block; // Signals to the stepper that current block should be aborted
- // Last-moved extruder, as set when the last movement was fetched from planner
- #if HAS_MULTI_EXTRUDER
- static uint8_t last_moved_extruder;
- #else
- static constexpr uint8_t last_moved_extruder = 0;
- #endif
-
#if ENABLED(X_DUAL_ENDSTOPS)
static bool locked_X_motor, locked_X2_motor;
#endif
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index d07d363399..3908a243ce 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -526,6 +526,8 @@
#include "stm32f1/pins_MKS_ROBIN_E3.h" // STM32F1 env:mks_robin_e3
#elif MB(MKS_ROBIN_E3D)
#include "stm32f1/pins_MKS_ROBIN_E3D.h" // STM32F1 env:mks_robin_e3
+#elif MB(MKS_ROBIN_E3P)
+ #include "stm32f1/pins_MKS_ROBIN_E3P.h" // STM32F1 env:mks_robin_e3p
#elif MB(BTT_SKR_MINI_V1_1)
#include "stm32f1/pins_BTT_SKR_MINI_V1_1.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_512K env:STM32F103RC_btt_USB env:STM32F103RC_btt_512K_USB
#elif MB(BTT_SKR_MINI_E3_V1_0)
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h
new file mode 100644
index 0000000000..3f4dee0f68
--- /dev/null
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h
@@ -0,0 +1,377 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * MKS Robin nano (STM32F130VET6) board pin assignments
+ */
+
+#ifndef __STM32F1__
+ #error "Oops! Select an STM32F1 board in 'Tools > Board.'"
+#elif HOTENDS > 1 || E_STEPPERS > 1
+ #error "MKS Robin e3p supports up to 1 hotends / E-steppers. Comment out this line to continue."
+#elif HAS_FSMC_TFT
+ #error "MKS Robin e3p doesn't support FSMC-based TFT displays."
+#endif
+
+#define BOARD_INFO_NAME "MKS Robin e3p"
+
+//
+// Release PB4 (Y_ENABLE_PIN) from JTAG NRST role
+//
+
+#define DISABLE_DEBUG
+
+//
+// EEPROM
+//
+//#define FLASH_EEPROM_EMULATION
+//#define SDCARD_EEPROM_EMULATION
+
+#if EITHER(NO_EEPROM_SELECTED, I2C_EEPROM)
+ #define I2C_EEPROM // EEPROM on I2C-0
+ #define MARLIN_EEPROM_SIZE 0x1000 // 4KB
+#endif
+
+//
+// Note: MKS Robin board is using SPI2 interface.
+//
+//#define SPI_MODULE 2
+#define ENABLE_SPI2
+
+//
+// Limit Switches
+//
+#define X_DIAG_PIN PA15
+#define Y_DIAG_PIN PA12
+#define Z_DIAG_PIN PA11
+#define E0_DIAG_PIN PC4
+
+#define X_STOP_PIN PA15
+#define Y_STOP_PIN PA12
+#define Z_MIN_PIN PA11
+#define Z_MAX_PIN PC4
+
+//
+// Steppers
+//
+#define X_ENABLE_PIN PE4
+#define X_STEP_PIN PE3
+#define X_DIR_PIN PE2
+#ifndef X_CS_PIN
+ #define X_CS_PIN PD5
+#endif
+
+#define Y_ENABLE_PIN PE1
+#define Y_STEP_PIN PE0
+#define Y_DIR_PIN PB9
+#ifndef Y_CS_PIN
+ #define Y_CS_PIN PD7
+#endif
+
+#define Z_ENABLE_PIN PB8
+#define Z_STEP_PIN PB5
+#define Z_DIR_PIN PB4
+#ifndef Z_CS_PIN
+ #define Z_CS_PIN PD4
+#endif
+
+#define E0_ENABLE_PIN PB3
+#define E0_STEP_PIN PD6
+#define E0_DIR_PIN PD3
+#ifndef E0_CS_PIN
+ #define E0_CS_PIN PD9
+#endif
+
+//
+// Software SPI pins for TMC2130 stepper drivers
+//
+#if ENABLED(TMC_USE_SW_SPI)
+ #ifndef TMC_SW_MOSI
+ #define TMC_SW_MOSI PD14
+ #endif
+ #ifndef TMC_SW_MISO
+ #define TMC_SW_MISO PD1
+ #endif
+ #ifndef TMC_SW_SCK
+ #define TMC_SW_SCK PD0
+ #endif
+#endif
+
+#if HAS_TMC_UART
+ /**
+ * TMC2208/TMC2209 stepper drivers
+ *
+ * Hardware serial communication ports.
+ * If undefined software serial is used according to the pins below
+ */
+ //#define X_HARDWARE_SERIAL Serial
+ //#define X2_HARDWARE_SERIAL Serial1
+ //#define Y_HARDWARE_SERIAL Serial1
+ //#define Y2_HARDWARE_SERIAL Serial1
+ //#define Z_HARDWARE_SERIAL Serial1
+ //#define Z2_HARDWARE_SERIAL Serial1
+ //#define E0_HARDWARE_SERIAL Serial1
+ //#define E1_HARDWARE_SERIAL Serial1
+ //#define E2_HARDWARE_SERIAL Serial1
+ //#define E3_HARDWARE_SERIAL Serial1
+ //#define E4_HARDWARE_SERIAL Serial1
+
+ //
+ // Software serial
+ //
+
+ #define X_SERIAL_TX_PIN PD5
+ #define X_SERIAL_RX_PIN PD5
+
+ #define Y_SERIAL_TX_PIN PD7
+ #define Y_SERIAL_RX_PIN PD7
+
+ #define Z_SERIAL_TX_PIN PD4
+ #define Z_SERIAL_RX_PIN PD4
+
+ #define E0_SERIAL_TX_PIN PD9
+ #define E0_SERIAL_RX_PIN PD9
+
+ // Reduce baud rate to improve software serial reliability
+ #define TMC_BAUD_RATE 19200
+#endif // TMC2208 || TMC2209
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN PC1 // TH1
+#define TEMP_BED_PIN PC0 // TB1
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN PC3 // HEATER1
+#define HEATER_BED_PIN PA0 // HOT BED
+
+#define FAN_PIN PB1 // FAN
+
+//
+// Misc. Functions
+//
+#if HAS_TFT_LVGL_UI
+ //#define MKSPWC
+ #ifdef MKSPWC
+ #define SUICIDE_PIN PB2 // Enable MKSPWC SUICIDE PIN
+ #define SUICIDE_PIN_INVERTING false // Enable MKSPWC PIN STATE
+ #define KILL_PIN PA2 // Enable MKSPWC DET PIN
+ #define KILL_PIN_STATE true // Enable MKSPWC PIN STATE
+ #endif
+
+ #define MT_DET_1_PIN PA4 // LVGL UI FILAMENT RUNOUT1 PIN
+ #define MT_DET_PIN_INVERTING false // LVGL UI filament RUNOUT PIN STATE
+
+ #define WIFI_IO0_PIN PC13 // MKS ESP WIFI IO0 PIN
+ #define WIFI_IO1_PIN PC7 // MKS ESP WIFI IO1 PIN
+ #define WIFI_RESET_PIN PE9 // MKS ESP WIFI RESET PIN
+
+ #if ENABLED(MKS_TEST)
+ #define MKS_TEST_POWER_LOSS_PIN PA2 // PW_DET
+ #define MKS_TEST_PS_ON_PIN PB0 // PW_OFF
+ #endif
+#else
+ //#define POWER_LOSS_PIN PA2 // PW_DET
+ //#define PS_ON_PIN PB2 // PW_OFF
+ #define FIL_RUNOUT_PIN PA4
+#endif
+
+#define SERVO0_PIN PA8 // Enable BLTOUCH
+
+//#define LED_PIN PB2
+
+//
+// SD Card
+//
+#ifndef SDCARD_CONNECTION
+ #define SDCARD_CONNECTION ONBOARD
+#endif
+
+#define SDIO_SUPPORT
+#define SDIO_CLOCK 4500000 // 4.5 MHz
+#define SD_DETECT_PIN PD12
+#define ONBOARD_SD_CS_PIN PC11
+
+//
+// LCD / Controller
+//
+#ifndef BEEPER_PIN
+ #define BEEPER_PIN PC5
+#endif
+
+/**
+ * Note: MKS Robin TFT screens use various TFT controllers.
+ * If the screen stays white, disable 'LCD_RESET_PIN'
+ * to let the bootloader init the screen.
+ */
+
+#if HAS_SPI_TFT
+
+ // Shared SPI TFT
+
+ #define LCD_BACKLIGHT_PIN PD13
+
+ #define TOUCH_CS_PIN PE14 // SPI1_NSS
+ #define TOUCH_SCK_PIN PA5 // SPI1_SCK
+ #define TOUCH_MISO_PIN PA6 // SPI1_MISO
+ #define TOUCH_MOSI_PIN PA7 // SPI1_MOSI
+
+ #define BTN_EN1 PE8
+ #define BTN_EN2 PE11
+ #define BTN_ENC PE13
+
+ #define TFT_CS_PIN PD11
+ #define TFT_SCK_PIN PA5
+ #define TFT_MISO_PIN PA6
+ #define TFT_MOSI_PIN PA7
+ #define TFT_DC_PIN PD10
+ #define TFT_RST_PIN PC6
+ #define TFT_A0_PIN TFT_DC_PIN
+
+ #define TFT_RESET_PIN PC6
+ #define TFT_BACKLIGHT_PIN PD13
+
+ #define TOUCH_BUTTONS_HW_SPI
+ #define TOUCH_BUTTONS_HW_SPI_DEVICE 1
+
+ #ifndef TFT_WIDTH
+ #define TFT_WIDTH 480
+ #endif
+ #ifndef TFT_HEIGHT
+ #define TFT_HEIGHT 320
+ #endif
+
+ #define LCD_READ_ID 0xD3
+ #define LCD_USE_DMA_SPI
+
+#endif
+
+#if ENABLED(TFT_LVGL_UI_SPI)
+
+ // LVGL
+
+ #define XPT2046_X_CALIBRATION -17253
+ #define XPT2046_Y_CALIBRATION 11579
+ #define XPT2046_X_OFFSET 514
+ #define XPT2046_Y_OFFSET -24
+
+#elif ENABLED(SPI_GRAPHICAL_TFT)
+
+ // Emulated DOGM SPI
+
+ #ifndef XPT2046_X_CALIBRATION
+ #define XPT2046_X_CALIBRATION -11386
+ #endif
+ #ifndef XPT2046_Y_CALIBRATION
+ #define XPT2046_Y_CALIBRATION 8684
+ #endif
+ #ifndef XPT2046_X_OFFSET
+ #define XPT2046_X_OFFSET 339
+ #endif
+ #ifndef XPT2046_Y_OFFSET
+ #define XPT2046_Y_OFFSET -18
+ #endif
+
+ #ifndef GRAPHICAL_TFT_UPSCALE
+ #define GRAPHICAL_TFT_UPSCALE 3
+ #endif
+ #ifndef TFT_PIXEL_OFFSET_Y
+ #define TFT_PIXEL_OFFSET_Y 32
+ #endif
+
+ #define BTN_ENC PE13
+ #define BTN_EN1 PE8
+ #define BTN_EN2 PE11
+
+ #define LCD_PINS_ENABLE PD13
+ #define LCD_PINS_RS PC6
+
+#elif ENABLED(TFT_480x320_SPI)
+ #define XPT2046_X_CALIBRATION -17253
+ #define XPT2046_Y_CALIBRATION 11579
+ #define XPT2046_X_OFFSET 514
+ #define XPT2046_Y_OFFSET -24
+
+ #define TFT_DRIVER ST7796
+ #define TFT_BUFFER_SIZE 14400
+
+#endif
+
+#if HAS_SPI_LCD && !HAS_SPI_TFT
+
+ // NON TFT Displays
+
+ #if ENABLED(MKS_MINI_12864)
+
+ // MKS MINI12864 and MKS LCD12864B
+ // If using MKS LCD12864A (Need to remove RPK2 resistor)
+
+ #define LCD_BACKLIGHT_PIN -1
+ #define LCD_RESET_PIN -1
+ #define DOGLCD_A0 PD11
+ #define DOGLCD_CS PE15
+ #define DOGLCD_SCK PA5
+ #define DOGLCD_MOSI PA7
+
+ // Required for MKS_MINI_12864 with this board
+ #define MKS_LCD12864B
+ #undef SHOW_BOOTSCREEN
+
+ #else // !MKS_MINI_12864
+
+ #define LCD_PINS_D4 PE14
+ #if ENABLED(ULTIPANEL)
+ #define LCD_PINS_D5 PE15
+ #define LCD_PINS_D6 PD11
+ #define LCD_PINS_D7 PD10
+ #endif
+
+ #ifndef BOARD_ST7920_DELAY_1
+ #define BOARD_ST7920_DELAY_1 DELAY_NS(125)
+ #endif
+ #ifndef BOARD_ST7920_DELAY_2
+ #define BOARD_ST7920_DELAY_2 DELAY_NS(125)
+ #endif
+ #ifndef BOARD_ST7920_DELAY_3
+ #define BOARD_ST7920_DELAY_3 DELAY_NS(125)
+ #endif
+
+ #endif // !MKS_MINI_12864
+
+#endif // HAS_SPI_LCD && !HAS_SPI_TFT
+
+#define HAS_SPI_FLASH 1
+#define SPI_FLASH_SIZE 0x1000000 // 16MB
+#if HAS_SPI_FLASH
+ #define W25QXX_CS_PIN PB12
+ #define W25QXX_MOSI_PIN PB15
+ #define W25QXX_MISO_PIN PB14
+ #define W25QXX_SCK_PIN PB13
+#endif
+
+#if ENABLED(SPEAKER) && BEEPER_PIN == PC5
+ #error "MKS Robin nano default BEEPER_PIN is not a SPEAKER."
+#endif
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h
index c3e8be74e8..88333e9b9f 100644
--- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h
@@ -58,10 +58,6 @@
#define Z_MIN_PIN PA11
#define Z_MAX_PIN PC4
-#ifndef FIL_RUNOUT_PIN
- #define FIL_RUNOUT_PIN PA4 // MT_DET
-#endif
-
//
// Steppers
//
@@ -123,25 +119,33 @@
//
// Misc. Functions
//
-#define POWER_LOSS_PIN PA2 // PW_DET
-#define PS_ON_PIN PA3 // PW_OFF
+#if HAS_TFT_LVGL_UI
+ //#define MKSPWC
+ #ifdef MKSPWC
+ #define SUICIDE_PIN PB2 // Enable MKSPWC SUICIDE PIN
+ #define SUICIDE_PIN_INVERTING false // Enable MKSPWC PIN STATE
+ #define KILL_PIN PA2 // Enable MKSPWC DET PIN
+ #define KILL_PIN_STATE true // Enable MKSPWC PIN STATE
+ #endif
-//#define SUICIDE_PIN PB2 // Enable MKSPWC support ROBIN NANO v1.2 ONLY
-//#define SUICIDE_PIN_INVERTING false
+ #define MT_DET_1_PIN PA4 // LVGL UI FILAMENT RUNOUT1 PIN
+ #define MT_DET_2_PIN PE6 // LVGL UI FILAMENT RUNOUT2 PIN
+ #define MT_DET_PIN_INVERTING false // LVGL UI filament RUNOUT PIN STATE
-//#define KILL_PIN PA2 // Enable MKSPWC support ROBIN NANO v1.2 ONLY
-//#define KILL_PIN_INVERTING true // Enable MKSPWC support ROBIN NANO v1.2 ONLY
+ #define WIFI_IO0_PIN PC13 // MKS ESP WIFI IO0 PIN
+ #define WIFI_IO1_PIN PC7 // MKS ESP WIFI IO1 PIN
+ #define WIFI_RESET_PIN PA5 // MKS ESP WIFI RESET PIN
+#else
+ //#define POWER_LOSS_PIN PA2 // PW_DET
+ //#define PS_ON_PIN PB2 // PW_OFF
+ #define FIL_RUNOUT_PIN PA4
+ #define FIL_RUNOUT2_PIN PE6
+#endif
-#define SERVO0_PIN PA8 // Enable BLTOUCH support ROBIN NANO v1.2 ONLY
+#define SERVO0_PIN PA8 // Enable BLTOUCH support
//#define LED_PIN PB2
-#define MT_DET_1_PIN PA4
-#define MT_DET_2_PIN PE6
-#define MT_DET_PIN_INVERTING false
-
-#define WIFI_IO0_PIN PC13
-
//
// SD Card
//
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h
index f9652f3934..01415d7bf0 100644
--- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h
@@ -192,32 +192,38 @@
//
// Misc. Functions
//
-#define POWER_LOSS_PIN PA2 // PW_DET
-#define PS_ON_PIN PA3 // PW_OFF
-
-//#define SUICIDE_PIN PB2 // Enable MKSPWC support ROBIN NANO v1.2 ONLY
-//#define SUICIDE_PIN_INVERTING false
+#if HAS_TFT_LVGL_UI
+ //#define MKSPWC
+ #ifdef MKSPWC
+ #define SUICIDE_PIN PB2 // Enable MKSPWC SUICIDE PIN
+ #define SUICIDE_PIN_INVERTING false // Enable MKSPWC PIN STATE
+ #define KILL_PIN PA2 // Enable MKSPWC DET PIN
+ #define KILL_PIN_STATE true // Enable MKSPWC PIN STATE
+ #endif
-//#define KILL_PIN PA2 // Enable MKSPWC support ROBIN NANO v1.2 ONLY
-//#define KILL_PIN_INVERTING true // Enable MKSPWC support ROBIN NANO v1.2 ONLY
+ #define MT_DET_1_PIN PA4 // LVGL UI FILAMENT RUNOUT1 PIN
+ #define MT_DET_2_PIN PE6 // LVGL UI FILAMENT RUNOUT2 PIN
+ #define MT_DET_PIN_INVERTING false // LVGL UI filament RUNOUT PIN STATE
+
+ #define WIFI_IO0_PIN PC13 // MKS ESP WIFI IO0 PIN
+ #define WIFI_IO1_PIN PC7 // MKS ESP WIFI IO1 PIN
+ #define WIFI_RESET_PIN PE9 // MKS ESP WIFI RESET PIN
+
+ #if ENABLED(MKS_TEST)
+ #define MKS_TEST_POWER_LOSS_PIN PA2 // PW_DET
+ #define MKS_TEST_PS_ON_PIN PB2 // PW_OFF
+ #endif
+#else
+ //#define POWER_LOSS_PIN PA2 // PW_DET
+ //#define PS_ON_PIN PB2 // PW_OFF
+ #define FIL_RUNOUT_PIN PA4
+ #define FIL_RUNOUT2_PIN PE6
+#endif
-#define SERVO0_PIN PA8 // Enable BLTOUCH support ROBIN NANO v1.2 ONLY
+#define SERVO0_PIN PA8 // Enable BLTOUCH
//#define LED_PIN PB2
-#define MT_DET_1_PIN PA4
-#define MT_DET_2_PIN PE6
-#define MT_DET_PIN_INVERTING false
-
-#ifndef FIL_RUNOUT_PIN
- #define FIL_RUNOUT_PIN MT_DET_1_PIN
-#endif
-#ifndef FIL_RUNOUT2_PIN
- #define FIL_RUNOUT2_PIN MT_DET_2_PIN
-#endif
-
-#define WIFI_IO0_PIN PC13
-
//
// SD Card
//
diff --git a/buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld b/buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld
new file mode 100644
index 0000000000..d8a138ca2e
--- /dev/null
+++ b/buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld
@@ -0,0 +1,14 @@
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
+ rom (rx) : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K
+}
+
+/* Provide memory region aliases for common.inc */
+REGION_ALIAS("REGION_TEXT", rom);
+REGION_ALIAS("REGION_DATA", ram);
+REGION_ALIAS("REGION_BSS", ram);
+REGION_ALIAS("REGION_RODATA", rom);
+
+/* Let common.inc handle the real work. */
+INCLUDE common.inc
diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_e3p.py b/buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
new file mode 100644
index 0000000000..2aab14bab7
--- /dev/null
+++ b/buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
@@ -0,0 +1,40 @@
+import os
+Import("env")
+
+# Relocate firmware from 0x08000000 to 0x08007000
+for define in env['CPPDEFINES']:
+ if define[0] == "VECT_TAB_ADDR":
+ env['CPPDEFINES'].remove(define)
+env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
+
+custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld")
+for i, flag in enumerate(env["LINKFLAGS"]):
+ if "-Wl,-T" in flag:
+ env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
+ elif flag == "-T":
+ env["LINKFLAGS"][i + 1] = custom_ld_script
+
+
+# Encrypt ${PROGNAME}.bin and save it as 'mks_robin_e3p.bin'
+def encrypt(source, target, env):
+ import sys
+
+ key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
+
+ firmware = open(target[0].path, "rb")
+ robin = open(target[0].dir.path +'/Robin_e3p.bin', "wb")
+ length = os.path.getsize(target[0].path)
+ position = 0
+ try:
+ while position < length:
+ byte = firmware.read(1)
+ if position >= 320 and position < 31040:
+ byte = chr(ord(byte) ^ key[position & 31])
+ if sys.version_info[0] > 2:
+ byte = bytes(byte, 'latin1')
+ robin.write(byte)
+ position += 1
+ finally:
+ firmware.close()
+ robin.close()
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
diff --git a/platformio.ini b/platformio.ini
index bf43936df6..c1b6f2c24d 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -191,7 +191,7 @@ lib_deps =
# Feature Dependencies
#
[features]
-HAS_TFT_LVGL_UI = lvgl=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip
+HAS_TFT_LVGL_UI = lvgl=https://github.com/makerbase-mks/LVGL-6.1.1-MKS/archive/master.zip
src_filter=+
extra_scripts=download_mks_assets.py
HAS_TRINAMIC_CONFIG = TMCStepper@~0.7.1
@@ -955,6 +955,22 @@ extra_scripts = ${common.extra_scripts}
build_flags = ${common_stm32f1.build_flags}
-DDEBUG_LEVEL=0 -DSS_TIMER=4
+#
+# MKS Robin E3p (STM32F103VET6)
+# - LVGL UI
+#
+[env:mks_robin_e3p]
+platform = ${common_stm32f1.platform}
+extends = common_stm32f1
+board = genericSTM32F103VE
+platform_packages = tool-stm32duino
+extra_scripts = ${common.extra_scripts}
+ buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
+build_flags = ${common_stm32f1.build_flags}
+ -DMCU_STM32F103VE -DSS_TIMER=4
+debug_tool = jlink
+upload_protocol = jlink
+
#
# MKS Robin Lite/Lite2 (STM32F103RCT6)
#