1
0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2024-11-29 23:07:42 +00:00

🚸 Update DWIN ProUI (#26003)

This commit is contained in:
Miguel Risco-Castillo 2023-06-23 04:57:22 -05:00 committed by GitHub
parent 2218bab542
commit 858916d628
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 1227 additions and 920 deletions

View File

@ -310,8 +310,14 @@ void unified_bed_leveling::G29() {
// Check for commands that require the printer to be homed
if (may_move) {
planner.synchronize();
// Send 'N' to force homing before G29 (internal only)
if (axes_should_home() || parser.seen_test('N')) gcode.home_all_axes();
#if ALL(DWIN_LCD_PROUI, ZHOME_BEFORE_LEVELING)
save_ubl_active_state_and_disable();
gcode.process_subcommands_now(F("G28Z"));
restore_ubl_active_state_and_leave();
#else
// Send 'N' to force homing before G29 (internal only)
if (axes_should_home() || parser.seen_test('N')) gcode.home_all_axes();
#endif
probe.use_probing_tool();
// Position bed horizontally and Z probe vertically.

View File

@ -144,7 +144,7 @@ class TMCMarlin : public TMC, public TMCStorage<AXIS_LETTER, DRIVER_ID> {
#endif
#endif
#if HAS_MARLINUI_MENU
#if ANY(HAS_MARLINUI_MENU, DWIN_LCD_PROUI)
void refresh_stepper_current() { rms_current(this->val_mA); }
#if ENABLED(HYBRID_THRESHOLD)
@ -207,7 +207,7 @@ class TMCMarlin<TMC2208Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> : public TMC220
}
#endif
#if HAS_MARLINUI_MENU
#if ANY(HAS_MARLINUI_MENU, DWIN_LCD_PROUI)
void refresh_stepper_current() { rms_current(this->val_mA); }
#if ENABLED(HYBRID_THRESHOLD)
@ -269,7 +269,7 @@ class TMCMarlin<TMC2209Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> : public TMC220
}
#endif
#if HAS_MARLINUI_MENU
#if ANY(HAS_MARLINUI_MENU, DWIN_LCD_PROUI)
void refresh_stepper_current() { rms_current(this->val_mA); }
#if ENABLED(HYBRID_THRESHOLD)
@ -315,7 +315,7 @@ class TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> : public TMC266
}
#endif
#if HAS_MARLINUI_MENU
#if ANY(HAS_MARLINUI_MENU, DWIN_LCD_PROUI)
void refresh_stepper_current() { rms_current(this->val_mA); }
#if USE_SENSORLESS

View File

@ -49,28 +49,20 @@
*/
void GcodeSuite::M73() {
#if ENABLED(DWIN_LCD_PROUI)
#if ENABLED(SET_PROGRESS_PERCENT)
if (parser.seenval('P'))
ui.set_progress((PROGRESS_SCALE) > 1
? parser.value_float() * (PROGRESS_SCALE)
: parser.value_byte()
);
#endif
DWIN_M73();
#else
#if ENABLED(SET_PROGRESS_PERCENT)
if (parser.seenval('P'))
ui.set_progress((PROGRESS_SCALE) > 1
? parser.value_float() * (PROGRESS_SCALE)
: parser.value_byte()
);
#endif
#if ENABLED(SET_REMAINING_TIME)
if (parser.seenval('R')) ui.set_remaining_time(60 * parser.value_ulong());
#endif
#if ENABLED(SET_INTERACTION_TIME)
if (parser.seenval('C')) ui.set_interaction_time(60 * parser.value_ulong());
#endif
#if ENABLED(SET_REMAINING_TIME)
if (parser.seenval('R')) ui.set_remaining_time(60 * parser.value_ulong());
#endif
#if ENABLED(SET_INTERACTION_TIME)
if (parser.seenval('C')) ui.set_interaction_time(60 * parser.value_ulong());
#endif
#if ENABLED(M73_REPORT)

View File

@ -70,7 +70,9 @@ void GcodeSuite::G30() {
remember_feedrate_scaling_off();
TERN_(DWIN_CREALITY_LCD_JYERSUI, process_subcommands_now(F("G28O")));
#if ANY(DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI)
process_subcommands_now(F("G28O"));
#endif
const ProbePtRaise raise_after = parser.boolval('E', true) ? PROBE_PT_STOW : PROBE_PT_NONE;

View File

@ -2718,14 +2718,18 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
#elif ENABLED(DWIN_LCD_PROUI)
#if !HAS_MEDIA
#error "DWIN_LCD_PROUI requires SDSUPPORT to be enabled."
#elif ANY(PID_EDIT_MENU, PID_AUTOTUNE_MENU)
#error "DWIN_LCD_PROUI does not support PID_EDIT_MENU or PID_AUTOTUNE_MENU."
#elif ANY(MPC_EDIT_MENU, MPC_AUTOTUNE_MENU)
#error "DWIN_LCD_PROUI does not support MPC_EDIT_MENU or MPC_AUTOTUNE_MENU."
#elif ENABLED(LCD_BED_TRAMMING)
#error "DWIN_LCD_PROUI does not support LCD_BED_TRAMMING."
#elif ALL(LCD_BED_LEVELING, PROBE_MANUALLY)
#error "DWIN_LCD_PROUI does not support LCD_BED_LEVELING with PROBE_MANUALLY."
#elif ENABLED(MEDIASORT_MENU_ITEM) && DISABLED(SDCARD_SORT_ALPHA)
#error "MEDIASORT_MENU_ITEM requires SDCARD_SORT_ALPHA."
#elif ENABLED(RUNOUT_TUNE_ITEM) && DISABLED(HAS_FILAMENT_SENSOR)
#error "RUNOUT_TUNE_ITEM requires HAS_FILAMENT_SENSOR."
#elif ENABLED(PLR_TUNE_ITEM) && DISABLED(POWER_LOSS_RECOVERY)
#error "PLR_TUNE_ITEM requires POWER_LOSS_RECOVERY."
#elif ENABLED(JD_TUNE_ITEM) && DISABLED(HAS_JUNCTION_DEVIATION)
#error "JD_TUNE_ITEM requires HAS_JUNCTION_DEVIATION."
#elif ENABLED(ADVK_TUNE_ITEM) && DISABLED(LIN_ADVANCE)
#error "ADVK_TUNE_ITEM requires LIN_ADVANCE."
#endif
#endif

View File

@ -28,13 +28,15 @@ typedef uint8_t fontid_t;
* 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28
* 0x05=16*32 0x06=20*40 0x07=24*48 0x08=28*56 0x09=32*64
*/
#define font6x12 0x00
#if DISABLED(TJC_DISPLAY)
#define font6x12 0x00
#define font20x40 0x06
#define font24x48 0x07
#define font28x56 0x08
#define font32x64 0x09
#endif
#define font8x16 0x01
#define font10x20 0x02
#define font12x24 0x03
#define font14x28 0x04
#define font16x32 0x05
#define font20x40 0x06
#define font24x48 0x07
#define font28x56 0x08
#define font32x64 0x09

View File

@ -91,4 +91,10 @@ constexpr xyze_float_t min_acceleration_edit_values = LOGICAL_AXIS_ARRAY_1(MIN_A
constexpr xyze_float_t min_steps_edit_values = LOGICAL_AXIS_ARRAY_1(MIN_STEPS_EDIT_VALUE),
default_steps = DEFAULT_AXIS_STEPS_PER_UNIT,
max_steps_edit_values = default_steps * float(DEFAULT_MAX_MULTIPLIER);
max_steps_edit_values =
#ifdef MAX_STEPS_EDIT_VALUES
MAX_STEPS_EDIT_VALUES
#else
default_steps * float(DEFAULT_MAX_MULTIPLIER)
#endif
;

View File

@ -23,8 +23,8 @@
/**
* Bed Level Tools for Pro UI
* Extended by: Miguel A. Risco-Castillo (MRISCOC)
* Version: 2.1.0
* Date: 2022/08/27
* Version: 3.2.0
* Date: 2023/05/03
*
* Based on the original work of: Henri-J-Norden
* https://github.com/Jyers/Marlin/pull/126
@ -65,7 +65,7 @@
BedLevelToolsClass bedLevelTools;
#if ENABLED(USE_UBL_VIEWER)
#if ENABLED(USE_GRID_MESHVIEWER)
bool BedLevelToolsClass::viewer_asymmetric_range = false;
bool BedLevelToolsClass::viewer_print_value = false;
#endif
@ -170,15 +170,20 @@ void BedLevelToolsClass::MoveToZ() {
bedLevelTools.manual_move(bedLevelTools.mesh_x, bedLevelTools.mesh_y, true);
}
void BedLevelToolsClass::ProbeXY() {
const uint16_t Clear = Z_CLEARANCE_DEPLOY_PROBE;
sprintf_P(cmd, PSTR("G28O\nG0Z%i\nG30X%sY%s"),
Clear,
const uint16_t zclear = Z_CLEARANCE_DEPLOY_PROBE;
sprintf_P(cmd, PSTR("G0Z%i\nG30X%sY%s"),
zclear,
dtostrf(bedlevel.get_mesh_x(bedLevelTools.mesh_x), 1, 2, str_1),
dtostrf(bedlevel.get_mesh_y(bedLevelTools.mesh_y), 1, 2, str_2)
);
gcode.process_subcommands_now(cmd);
}
void BedLevelToolsClass::mesh_reset() {
ZERO(bedlevel.z_values);
TERN_(AUTO_BED_LEVELING_BILINEAR, bedlevel.refresh_bed_level());
}
// Accessors
float BedLevelToolsClass::get_max_value() {
float max = __FLT_MAX__ * -1;
@ -207,9 +212,11 @@ bool BedLevelToolsClass::meshvalidate() {
return true;
}
#if ENABLED(USE_UBL_VIEWER)
#if ENABLED(USE_GRID_MESHVIEWER)
void BedLevelToolsClass::Draw_Bed_Mesh(int16_t selected /*= -1*/, uint8_t gridline_width /*= 1*/, uint16_t padding_x /*= 8*/, uint16_t padding_y_top /*= 40 + 53 - 7*/) {
constexpr uint8_t meshfont = TERN(TJC_DISPLAY, font8x16, font6x12);
void BedLevelToolsClass::Draw_Bed_Mesh(int16_t selected/*=-1*/, uint8_t gridline_width/*=1*/, uint16_t padding_x/*=8*/, uint16_t padding_y_top/*=(40 + 53 - 7)*/) {
drawing_mesh = true;
const uint16_t total_width_px = DWIN_WIDTH - padding_x - padding_x;
const uint16_t cell_width_px = total_width_px / (GRID_MAX_POINTS_X);
@ -227,7 +234,6 @@ bool BedLevelToolsClass::meshvalidate() {
}
// Draw value square grid
char buf[8];
GRID_LOOP(x, y) {
const auto start_x_px = padding_x + x * cell_width_px;
const auto end_x_px = start_x_px + cell_width_px - 1 - gridline_width;
@ -246,20 +252,22 @@ bool BedLevelToolsClass::meshvalidate() {
LCD_SERIAL.flushTX();
// Draw value text on
char buf[8];
const uint8_t fs = DWINUI::fontWidth(meshfont);
if (viewer_print_value) {
int8_t offset_x, offset_y = cell_height_px / 2 - 6;
int8_t offset_x, offset_y = cell_height_px / 2 - fs;
if (isnan(bedlevel.z_values[x][y])) { // undefined
dwinDrawString(false, font6x12, Color_White, Color_Bg_Blue, start_x_px + cell_width_px / 2 - 5, start_y_px + offset_y, F("X"));
dwinDrawString(false, meshfont, Color_White, Color_Bg_Blue, start_x_px + cell_width_px / 2 - 5, start_y_px + offset_y, F("X"));
}
else { // has value
if (GRID_MAX_POINTS_X < 10)
if (GRID_MAX_POINTS_X < (ENABLED(TJC_DISPLAY) ? 8 : 10))
sprintf_P(buf, PSTR("%s"), dtostrf(abs(bedlevel.z_values[x][y]), 1, 2, str_1));
else
sprintf_P(buf, PSTR("%02i"), (uint16_t)(abs(bedlevel.z_values[x][y] - (int16_t)bedlevel.z_values[x][y]) * 100));
offset_x = cell_width_px / 2 - 3 * (strlen(buf)) - 2;
if (!(GRID_MAX_POINTS_X < 10))
dwinDrawString(false, font6x12, Color_White, Color_Bg_Blue, start_x_px - 2 + offset_x, start_y_px + offset_y /*+ square / 2 - 6*/, F("."));
dwinDrawString(false, font6x12, Color_White, Color_Bg_Blue, start_x_px + 1 + offset_x, start_y_px + offset_y /*+ square / 2 - 6*/, buf);
offset_x = cell_width_px / 2 - (fs/2) * (strlen(buf)) - 2;
if (!(GRID_MAX_POINTS_X < (ENABLED(TJC_DISPLAY) ? 8 : 10)))
dwinDrawString(false, meshfont, Color_White, Color_Bg_Blue, start_x_px - 2 + offset_x, start_y_px + offset_y, F("."));
dwinDrawString(false, meshfont, Color_White, Color_Bg_Blue, start_x_px + 1 + offset_x, start_y_px + offset_y, buf);
}
safe_delay(10);
LCD_SERIAL.flushTX();
@ -286,6 +294,6 @@ bool BedLevelToolsClass::meshvalidate() {
drawing_mesh = false;
}
#endif // USE_UBL_VIEWER
#endif // USE_GRID_MESHVIEWER
#endif // DWIN_LCD_PROUI && HAS_LEVELING

View File

@ -23,8 +23,8 @@
/**
* Bed Level Tools for Pro UI
* Extended by: Miguel A. Risco-Castillo (MRISCOC)
* Version: 2.1.0
* Date: 2022/08/27
* Version: 3.2.0
* Date: 2023/05/03
*
* Based on the original work of: Henri-J-Norden
* https://github.com/Jyers/Marlin/pull/126
@ -47,14 +47,12 @@
#include "../../../inc/MarlinConfigPre.h"
//#define USE_UBL_VIEWER 1
#define UBL_Z_OFFSET_MIN -3.0
#define UBL_Z_OFFSET_MAX 3.0
class BedLevelToolsClass {
public:
#if ENABLED(USE_UBL_VIEWER)
#if ENABLED(USE_GRID_MESHVIEWER)
static bool viewer_asymmetric_range;
static bool viewer_print_value;
#endif
@ -74,11 +72,12 @@ public:
static void MoveToXY();
static void MoveToZ();
static void ProbeXY();
static void mesh_reset();
static float get_max_value();
static float get_min_value();
static bool meshvalidate();
#if ENABLED(USE_UBL_VIEWER)
static void Draw_Bed_Mesh(int16_t selected = -1, uint8_t gridline_width = 1, uint16_t padding_x = 8, uint16_t padding_y_top = 40 + 53 - 7);
#if ENABLED(USE_GRID_MESHVIEWER)
static void Draw_Bed_Mesh(int16_t selected=-1, uint8_t gridline_width=1, uint16_t padding_x=8, uint16_t padding_y_top=(40 + 53 - 7));
static void Set_Mesh_Viewer_Status();
#endif
};

File diff suppressed because it is too large Load Diff

View File

@ -24,8 +24,8 @@
/**
* DWIN Enhanced implementation for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 3.21.2
* Date: 2022/12/02
* Version: 3.25.3
* Date: 2023/05/18
*/
#include "../../../inc/MarlinConfig.h"
@ -79,7 +79,6 @@ enum processID : uint8_t {
enum tempcontrol_t : uint8_t {
#if DWIN_PID_TUNE
PID_DONE,
PIDTEMP_START,
PIDTEMPBED_START,
PID_BAD_HEATER_ID,
@ -87,11 +86,11 @@ enum processID : uint8_t {
PID_TUNING_TIMEOUT,
#endif
#if ENABLED(MPC_AUTOTUNE)
MPC_DONE,
MPCTEMP_START,
MPC_TEMP_ERROR,
MPC_INTERRUPTED
MPC_INTERRUPTED,
#endif
AUTOTUNE_DONE
};
#endif
@ -141,6 +140,7 @@ typedef struct {
#endif
bool FullManualTramming = false;
bool MediaSort = true;
bool MediaAutoMount = ENABLED(HAS_SD_EXTENDER);
#if ALL(INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING)
uint8_t z_after_homing = DEF_Z_AFTER_HOMING;
@ -148,6 +148,8 @@ typedef struct {
#if ALL(LED_CONTROL_MENU, HAS_COLOR_LEDS)
LEDColor Led_Color = Def_Leds_Color;
#endif
bool AdaptiveStepSmoothing = true;
bool EnablePreview = true;
} HMI_data_t;
extern HMI_data_t HMI_data;
@ -155,8 +157,8 @@ static constexpr size_t eeprom_data_size = sizeof(HMI_data_t);
typedef struct {
int8_t Color[3]; // Color components
#if DWIN_PID_TUNE
tempcontrol_t pidresult = PID_DONE;
#if ANY(DWIN_PID_TUNE, MPCTEMP)
tempcontrol_t tempcontrol = AUTOTUNE_DONE;
#endif
uint8_t Select = 0; // Auxiliary selector variable
AxisEnum axis = X_AXIS; // Axis Select
@ -167,17 +169,13 @@ typedef struct {
bool printing_flag:1; // sd or host printing
bool abort_flag:1; // sd or host was aborted
bool pause_flag:1; // printing is paused
bool percent_flag:1; // percent was override by M73
bool remain_flag:1; // remain was override by M73
bool select_flag:1; // Popup button selected
bool home_flag:1; // homing in course
bool heat_flag:1; // 0: heating done 1: during heating
} HMI_flag_t;
extern HMI_value_t HMI_value;
extern HMI_flag_t hmiFlag;
extern uint8_t checkkey;
extern millis_t dwin_heat_time;
// Popups
#if HAS_HOTEND || HAS_HEATED_BED
@ -206,12 +204,6 @@ void AutoHome();
REPEAT_1(PREHEAT_COUNT, _DOPREHEAT)
#endif
void DoCoolDown();
#if ENABLED(PIDTEMP)
void HotendPID();
#endif
#if ENABLED(PIDTEMPBED)
void BedPID();
#endif
#if ENABLED(BAUD_RATE_GCODE)
void HMI_SetBaudRate();
void SetBaud115K();
@ -236,7 +228,7 @@ void ParkHead();
#if ENABLED(HOST_SHUTDOWN_MENU_ITEM) && defined(SHUTDOWN_ACTION)
void HostShutDown();
#endif
#if !HAS_BED_PROBE
#if DISABLED(HAS_BED_PROBE)
void HomeZandDisable();
#endif
@ -252,7 +244,6 @@ void DWIN_DrawStatusLine(const char *text = ""); // Draw simple status text
void DWIN_RedrawDash(); // Redraw Dash and Status line
void DWIN_RedrawScreen(); // Redraw all screen elements
void HMI_MainMenu(); // Main process screen
void HMI_SelectFile(); // File page
void HMI_Printing(); // Print page
void HMI_ReturnScreen(); // Return to previous screen before popups
void HMI_WaitForUser();
@ -278,10 +269,8 @@ void DWIN_Print_Aborted();
#if HAS_FILAMENT_SENSOR
void DWIN_FilamentRunout(const uint8_t extruder);
#endif
void DWIN_M73();
void DWIN_Print_Header(const char *text);
void DWIN_SetColorDefaults();
void DWIN_ApplyColor();
void DWIN_CopySettingsTo(char * const buff);
void DWIN_CopySettingsFrom(const char * const buff);
void DWIN_SetDataDefaults();
@ -291,7 +280,6 @@ void DWIN_RebootScreen();
void DWIN_Popup_Pause(FSTR_P const fmsg, uint8_t button=0);
void Draw_Popup_FilamentPurge();
void Goto_FilamentPurge();
void HMI_FilamentPurge();
#endif
// Utility and extensions
@ -331,8 +319,6 @@ void Draw_FilSet_Menu();
void Draw_ParkPos_Menu();
#endif
void Draw_PhySet_Menu();
void Draw_SelectColors_Menu();
void Draw_GetColor_Menu();
#if ALL(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS)
void Draw_CaseLight_Menu();
#endif
@ -369,16 +355,36 @@ void Draw_Steps_Menu();
void Draw_EditMesh_Menu();
#endif
#endif
#if HAS_TRINAMIC_CONFIG
void Draw_TrinamicConfig_menu();
#endif
// Custom colors editing
#if HAS_CUSTOM_COLORS
void DWIN_ApplyColor();
void Draw_SelectColors_Menu();
void Draw_GetColor_Menu();
#endif
// PID
#if DWIN_PID_TUNE
#include "../../../module/temperature.h"
void DWIN_StartM303(const bool seenC, const int c, const bool seenS, const heater_id_t hid, const celsius_t temp);
void DWIN_PidTuning(tempcontrol_t result);
#if ENABLED(PIDTEMP)
#endif
#if ENABLED(PIDTEMP)
#if ENABLED(PID_AUTOTUNE_MENU)
void HotendPID();
#endif
#if ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU)
void Draw_HotendPID_Menu();
#endif
#if ENABLED(PIDTEMPBED)
#endif
#if ENABLED(PIDTEMPBED)
#if ENABLED(PID_AUTOTUNE_MENU)
void BedPID();
#endif
#if ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU)
void Draw_BedPID_Menu();
#endif
#endif

View File

@ -23,8 +23,8 @@
/**
* DWIN Enhanced implementation for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 3.10.1
* Date: 2022/03/06
* Version: 3.12.1
* Date: 2023/01/22
*/
#include "../../../inc/MarlinConfigPre.h"
@ -134,6 +134,26 @@ void DWIN_WriteToMem(uint8_t mem, uint16_t addr, uint16_t length, uint8_t *data)
}
}
// Draw an Icon from SRAM without background transparency for DACAI Screens support
void DACAI_ICON_Show(uint16_t x, uint16_t y, uint16_t addr) {
NOMORE(x, DWIN_WIDTH - 1);
NOMORE(y, DWIN_HEIGHT - 1);
size_t i = 0;
dwinByte(i, 0x70);
dwinWord(i, x);
dwinWord(i, y);
dwinWord(i, addr);
dwinSend(i);
}
void dwinIconShow(uint16_t x, uint16_t y, uint16_t addr) {
#if ENABLED(DACAI_DISPLAY)
DACAI_ICON_Show(x, y, addr);
#else
dwinIconShow(0, 0, 1, x, y, addr);
#endif
}
// Write the contents of the 32KB SRAM data memory into the designated image memory space.
// picID: Picture memory space location, 0x00-0x0F, each space is 32Kbytes
void DWIN_SRAMToPic(uint8_t picID) {

View File

@ -24,8 +24,8 @@
/**
* DWIN Enhanced implementation for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 3.10.1
* Date: 2022/03/06
* Version: 3.12.1
* Date: 2023/01/22
*/
#include "../common/dwin_api.h"
@ -71,6 +71,11 @@ void DWIN_Frame_AreaCopy(bool IBD, bool BIR, bool BFI, uint8_t cacheID, uint16_t
// data: address of the buffer with data
void DWIN_WriteToMem(uint8_t mem, uint16_t addr, uint16_t length, uint8_t *data);
// Draw an Icon from SRAM
// x/y: Upper-left point
// addr: SRAM address
void dwinIconShow(uint16_t x, uint16_t y, uint16_t addr);
// Write the contents of the 32KB SRAM data memory into the designated image memory space.
// picID: Picture memory space location, 0x00-0x0F, each space is 32Kbytes
void DWIN_SRAMToPic(uint8_t picID);

View File

@ -23,8 +23,8 @@
/**
* DWIN Enhanced implementation for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 3.20.1
* Date: 2022/10/25
* Version: 3.21.1
* Date: 2023/03/21
*/
#include "../../../inc/MarlinConfig.h"
@ -32,7 +32,6 @@
#if ENABLED(DWIN_LCD_PROUI)
#include "dwin_defines.h"
#include "dwin_lcd.h"
#include "dwinui.h"
xy_int_t DWINUI::cursor = { 0 };
@ -60,16 +59,18 @@ void DWINUI::setFont(fontid_t fid) { fontid = fid; }
// Get font character width
uint8_t DWINUI::fontWidth(fontid_t fid) {
switch (fid) {
case font6x12 : return 6;
#if DISABLED(TJC_DISPLAY)
case font6x12 : return 6;
case font20x40: return 20;
case font24x48: return 24;
case font28x56: return 28;
case font32x64: return 32;
#endif
case font8x16 : return 8;
case font10x20: return 10;
case font12x24: return 12;
case font14x28: return 14;
case font16x32: return 16;
case font20x40: return 20;
case font24x48: return 24;
case font28x56: return 28;
case font32x64: return 32;
default: return 0;
}
}
@ -77,16 +78,18 @@ uint8_t DWINUI::fontWidth(fontid_t fid) {
// Get font character height
uint8_t DWINUI::fontHeight(fontid_t fid) {
switch (fid) {
#if DISABLED(TJC_DISPLAY)
case font6x12 : return 12;
case font20x40: return 40;
case font24x48: return 48;
case font28x56: return 56;
case font32x64: return 64;
#endif
case font8x16 : return 16;
case font10x20: return 20;
case font12x24: return 24;
case font14x28: return 28;
case font16x32: return 32;
case font20x40: return 40;
case font24x48: return 48;
case font28x56: return 56;
case font32x64: return 64;
default: return 0;
}
}
@ -261,15 +264,13 @@ void DWINUI::Draw_Circle(uint16_t color, uint16_t x, uint16_t y, uint8_t r) {
// y: ordinate of the center of the circle
// r: circle radius
void DWINUI::Draw_FillCircle(uint16_t bcolor, uint16_t x,uint16_t y,uint8_t r) {
int a = 0, b = 0;
while (a <= b) {
b = SQRT(sq(r) - sq(a)); // b=sqrt(r*r-a*a);
if (a == 0) b--;
dwinDrawLine(bcolor, x-b,y-a,x+b,y-a);
dwinDrawLine(bcolor, x-a,y-b,x+a,y-b);
dwinDrawLine(bcolor, x-b,y+a,x+b,y+a);
dwinDrawLine(bcolor, x-a,y+b,x+a,y+b);
a++;
dwinDrawLine(bcolor, x - r, y, x + r, y);
uint16_t b = 1;
while (b <= r) {
uint16_t a = SQRT(sq(r) - sq(b));
dwinDrawLine(bcolor, x - a, y + b, x + a, y + b);
dwinDrawLine(bcolor, x - a, y - b, x + a, y - b);
b += TERN(TJC_DISPLAY, 2, 1);
}
}

View File

@ -24,8 +24,8 @@
/**
* DWIN Enhanced implementation for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 3.18.1
* Date: 2022/07/05
* Version: 3.21.1
* Date: 2023/03/21
*/
#include "../../../inc/MarlinConfigPre.h"
@ -68,7 +68,8 @@
#define ICON_HomeOffsetY ICON_StepY
#define ICON_HomeOffsetZ ICON_StepZ
#define ICON_HSMode ICON_StockConfiguration
#define ICON_InvertE0 ICON_StepE
#define ICON_InputShaping ICON_MaxAccelerated
#define ICON_JDmm ICON_MaxJerk
#define ICON_Tram ICON_SetEndTemp
#define ICON_Level ICON_HotendTemp
#define ICON_Lock ICON_Cool
@ -82,6 +83,7 @@
#define ICON_MeshEditZ ICON_MoveZ
#define ICON_MeshNext ICON_Axis
#define ICON_MeshPoints ICON_SetEndTemp
#define ICON_MeshReset ICON_StockConfiguration
#define ICON_MeshSave ICON_WriteEEPROM
#define ICON_MeshViewer ICON_HotendTemp
#define ICON_MoveZ0 ICON_HotendTemp
@ -132,8 +134,14 @@
#define ICON_SetPreheat8 ICON_SetCustomPreheat
#define ICON_SetPreheat9 ICON_SetCustomPreheat
#define ICON_SetPreheat10 ICON_SetCustomPreheat
#define ICON_ShapingX ICON_MoveX
#define ICON_ShapingY ICON_MoveY
#define ICON_Sound ICON_Cool
#define ICON_TBSetup ICON_Contact
#define ICON_TMCSet ICON_PrintSize
#define ICON_TMCXSet ICON_MoveX
#define ICON_TMCYSet ICON_MoveY
#define ICON_TMCZSet ICON_MoveZ
#define ICON_TMCESet ICON_Extruder
#define ICON_UBLActive ICON_HotendTemp
#define ICON_UBLActive ICON_HotendTemp
#define ICON_UBLSlot ICON_ResumeEEPROM

View File

@ -23,8 +23,8 @@
/**
* DWIN Endstops diagnostic page for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 1.3.3
* Date: 2022/10/07
* Version: 1.4.3
* Date: 2023/05/10
*/
#include "../../../inc/MarlinConfigPre.h"
@ -35,10 +35,8 @@
#include "../../../core/types.h"
#include "../../marlinui.h"
#include "dwin_lcd.h"
#include "dwinui.h"
#include "dwin_popup.h"
#include "dwin.h"
#include "dwin_popup.h"
#if HAS_FILAMENT_SENSOR
#include "../../../feature/runout.h"

View File

@ -24,14 +24,14 @@
/**
* DWIN End Stops diagnostic page for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 1.3.2
* Date: 2022/10/07
* Version: 1.4.3
* Date: 2023/05/10
*/
class ESDiagClass {
public:
void Draw();
void Update();
static void Draw();
static void Update();
};
extern ESDiagClass ESDiag;

View File

@ -23,8 +23,8 @@
/**
* DWIN G-code thumbnail preview
* Author: Miguel A. Risco-Castillo
* version: 3.1.2
* Date: 2022/09/03
* version: 3.3.2
* Date: 2023/06/18
*/
#include "../../../inc/MarlinConfigPre.h"
@ -35,13 +35,14 @@
#include "../../marlinui.h"
#include "../../../sd/cardreader.h"
#include "../../../MarlinCore.h" // for wait_for_user
#include "dwin_lcd.h"
#include "dwinui.h"
#include "dwin.h"
#include "dwin_popup.h"
#include "base64.hpp"
#include "gcode_preview.h"
#define THUMBWIDTH 230
#define THUMBHEIGHT 180
typedef struct {
char name[13] = ""; //8.3 + null
uint32_t thumbstart = 0;
@ -104,7 +105,7 @@ void Get_Value(char *buf, const char * const key, float &value) {
}
bool Has_Preview() {
const char * tbstart = "; thumbnail begin 230x180";
const char * tbstart = "; thumbnail begin " STRINGIFY(THUMBWIDTH) "x" STRINGIFY(THUMBHEIGHT);
char * posptr = 0;
uint8_t nbyte = 1;
uint32_t indx = 0;
@ -187,6 +188,8 @@ bool Has_Preview() {
card.closefile();
buf64[readed] = 0;
fileprop.thumbwidth = THUMBWIDTH;
fileprop.thumbheight = THUMBHEIGHT;
fileprop.thumbsize = decode_base64(buf64, fileprop.thumbdata); card.closefile();
DWINUI::WriteToSRAM(0x00, fileprop.thumbsize, fileprop.thumbdata);
delete[] fileprop.thumbdata;
@ -218,7 +221,7 @@ void Preview_DrawFromSD() {
}
DWINUI::Draw_Button(BTN_Print, 26, 290);
DWINUI::Draw_Button(BTN_Cancel, 146, 290);
dwinIconShow(0, 0, 1, 21, 90, 0x00);
Preview_Show();
Draw_Select_Highlight(true, 290);
dwinUpdateLCD();
}
@ -229,15 +232,17 @@ void Preview_DrawFromSD() {
}
void Preview_Invalidate() {
fileprop.thumbstart = 0;
}
bool Preview_Valid() {
return !!fileprop.thumbstart;
}
void Preview_Reset() {
fileprop.thumbsize = 0;
}
bool Preview_Valid() {
return !!fileprop.thumbsize;
}
void Preview_Show() {
const uint8_t xpos = (DWIN_WIDTH - fileprop.thumbwidth) / 2;
const uint8_t ypos = (205 - fileprop.thumbheight) / 2 + 87;
dwinIconShow(xpos, ypos, 0x00);
}
#endif // HAS_GCODE_PREVIEW && DWIN_LCD_PROUI

View File

@ -31,4 +31,4 @@
void Preview_DrawFromSD();
void Preview_Invalidate();
bool Preview_Valid();
void Preview_Reset();
void Preview_Show();

View File

@ -23,8 +23,8 @@
/**
* Menu functions for ProUI
* Author: Miguel A. Risco-Castillo
* Version: 1.9.1
* Date: 2022/12/02
* Version: 1.10.1
* Date: 2022/05/01
*/
#include "../../../inc/MarlinConfigPre.h"
@ -32,8 +32,6 @@
#if ENABLED(DWIN_LCD_PROUI)
#include "../common/encoder.h"
#include "dwin_lcd.h"
#include "dwinui.h"
#include "dwin.h"
#include "menus.h"
@ -58,11 +56,6 @@ void Draw_Title(TitleClass* title) {
#endif
}
void Draw_Menu(MenuClass* menu) {
DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color, HMI_data.StatusBg_Color);
dwinDrawRectangle(1, DWINUI::backcolor, 0, TITLE_HEIGHT, DWIN_WIDTH - 1, STATUS_Y - 1);
}
void Draw_Menu_Cursor(const int8_t line) {
const uint16_t ypos = MYPOS(line);
DWINUI::Draw_Box(1, HMI_data.Cursor_Color, {0, ypos, 15, MLINE - 1});
@ -79,7 +72,7 @@ void Erase_Menu_Text(const int8_t line) {
DWINUI::Draw_Box(1, HMI_data.Background_Color, {LBLX, ypos, DWIN_WIDTH - LBLX, MLINE - 2});
}
void Draw_Menu_Line(const uint8_t line, const uint8_t icon /*=0*/, const char * const label /*=nullptr*/, bool more /*=false*/, bool selected /*=false*/) {
void Draw_Menu_Line(const uint8_t line, const uint8_t icon/*=0*/, const char * const label/*=nullptr*/, bool more/*=false*/, bool selected/*=false*/) {
if (icon) DWINUI::Draw_Icon(icon, ICOX, MBASE(line) - 3);
if (label) DWINUI::Draw_String(LBLX, MBASE(line) - 1, (char*)label);
if (more) DWINUI::Draw_Icon(ICON_More, VALX + 16, MBASE(line) - 3);
@ -87,7 +80,7 @@ void Draw_Menu_Line(const uint8_t line, const uint8_t icon /*=0*/, const char *
dwinDrawHLine(HMI_data.SplitLine_Color, 16, MYPOS(line + 1), 240);
}
void Draw_Menu_Line(const uint8_t line, const uint8_t icon /*=0*/, FSTR_P label /*=nullptr*/, bool more /*=false*/, bool selected /*=false*/) {
void Draw_Menu_Line(const uint8_t line, const uint8_t icon/*=0*/, FSTR_P label/*=nullptr*/, bool more/*=false*/, bool selected/*=false*/) {
Draw_Menu_Line(line, icon, FTOP(label), more, selected);
}
@ -106,7 +99,7 @@ void Toggle_Chkb_Line(bool &checked) {
Show_Chkb_Line(checked);
}
void Draw_Menu_IntValue(uint16_t bcolor, const uint8_t line, uint8_t iNum, const int32_t value /*=0*/) {
void Draw_Menu_IntValue(uint16_t bcolor, const uint8_t line, uint8_t iNum, const int32_t value/*=0*/) {
DWINUI::Draw_Signed_Int(HMI_data.Text_Color, bcolor, iNum , VALX, MBASE(line) - 1, value);
}
@ -189,7 +182,7 @@ void DrawItemEdit(const bool selected) {
// val: value / scaled value
// LiveUpdate: live update function when the encoder changes
// Apply: update function when the encoder is pressed
void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)() /*= nullptr*/, void (*LiveUpdate)() /*= nullptr*/) {
void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)()/*=nullptr*/, void (*LiveUpdate)()/*=nullptr*/) {
checkkey = process;
MenuData.MinValue = lo;
MenuData.MaxValue = hi;
@ -207,7 +200,7 @@ void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp,
// val: value
// LiveUpdate: live update function when the encoder changes
// Apply: update function when the encoder is pressed
void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)() /*= nullptr*/, void (*LiveUpdate)() /*= nullptr*/) {
void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)()/*=nullptr*/, void (*LiveUpdate)()/*=nullptr*/) {
SetOnClick(process, lo, hi, 0, val, Apply, LiveUpdate);
DrawItemEdit(true);
}
@ -219,7 +212,7 @@ void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const
// val: value
// LiveUpdate: live update function when the encoder changes
// Apply: update function when the encoder is pressed
void SetValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() /*= nullptr*/, void (*LiveUpdate)() /*= nullptr*/) {
void SetValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp, const float val, void (*Apply)()/*=nullptr*/, void (*LiveUpdate)()/*=nullptr*/) {
const int32_t value = round(val * POW(10, dp));
SetOnClick(process, lo * POW(10, dp), hi * POW(10, dp), dp, value, Apply, LiveUpdate);
DrawItemEdit(true);
@ -231,7 +224,7 @@ void SetValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp
// val: value
// LiveUpdate: live update function when the encoder changes
// Apply: update function when the encoder is pressed
void SetIntOnClick(const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)() /*= nullptr*/, void (*LiveUpdate)() /*= nullptr*/) {
void SetIntOnClick(const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)()/*=nullptr*/, void (*LiveUpdate)()/*=nullptr*/) {
SetValueOnClick(SetInt, lo, hi, val, Apply, LiveUpdate);
}
@ -240,7 +233,7 @@ void SetIntOnClick(const int32_t lo, const int32_t hi, const int32_t val, void (
// hi: high limit
// LiveUpdate: live update function when the encoder changes
// Apply: update function when the encoder is pressed
void SetPIntOnClick(const int32_t lo, const int32_t hi, void (*Apply)() /*= nullptr*/, void (*LiveUpdate)() /*= nullptr*/) {
void SetPIntOnClick(const int32_t lo, const int32_t hi, void (*Apply)()/*=nullptr*/, void (*LiveUpdate)()/*=nullptr*/) {
MenuData.P_Int = (int16_t*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
const int32_t value = *MenuData.P_Int;
SetValueOnClick(SetPInt, lo, hi, value, Apply, LiveUpdate);
@ -252,7 +245,7 @@ void SetPIntOnClick(const int32_t lo, const int32_t hi, void (*Apply)() /*= null
// hi: high limit
// dp: decimal places
// val: value
void SetFloatOnClick(const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() /*= nullptr*/, void (*LiveUpdate)() /*= nullptr*/) {
void SetFloatOnClick(const float lo, const float hi, uint8_t dp, const float val, void (*Apply)()/*=nullptr*/, void (*LiveUpdate)()/*=nullptr*/) {
SetValueOnClick(SetFloat, lo, hi, dp, val, Apply, LiveUpdate);
}
@ -261,7 +254,7 @@ void SetFloatOnClick(const float lo, const float hi, uint8_t dp, const float val
// hi: high limit
// LiveUpdate: live update function when the encoder changes
// Apply: update function when the encoder is pressed
void SetPFloatOnClick(const float lo, const float hi, uint8_t dp, void (*Apply)() /*= nullptr*/, void (*LiveUpdate)() /*= nullptr*/) {
void SetPFloatOnClick(const float lo, const float hi, uint8_t dp, void (*Apply)()/*=nullptr*/, void (*LiveUpdate)()/*=nullptr*/) {
MenuData.P_Float = (float*)static_cast<MenuItemPtrClass*>(CurrentMenu->SelectedItem())->value;
SetValueOnClick(SetPFloat, lo, hi, dp, *MenuData.P_Float, Apply, LiveUpdate);
}
@ -290,7 +283,7 @@ int8_t HMI_Get(bool draw) {
const int32_t lo = MenuData.MinValue;
const int32_t hi = MenuData.MaxValue;
const int32_t cval = MenuData.Value;
EncoderState encoder_diffState = get_encoder_state();
EncoderState encoder_diffState = TERN(SMOOTH_ENCODER_MENUITEMS, get_encoder_state(), encoderReceiveAnalyze());
if (encoder_diffState != ENCODER_DIFF_NO) {
if (applyEncoder(encoder_diffState, MenuData.Value)) {
encoderRate.enabled = false;
@ -354,7 +347,8 @@ MenuClass::MenuClass() {
void MenuClass::draw() {
MenuTitle.draw();
Draw_Menu(this);
DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color, HMI_data.StatusBg_Color);
dwinDrawRectangle(1, DWINUI::backcolor, 0, TITLE_HEIGHT, DWIN_WIDTH - 1, STATUS_Y - 1);
for (int8_t i = 0; i < MenuItemCount; i++)
MenuItems[i]->draw(i - topline);
Draw_Menu_Cursor(line());
@ -407,7 +401,7 @@ void CustomMenuItemClass::draw(int8_t line) {
if (onDraw != nullptr) (*onDraw)(static_cast<MenuItemClass*>(this), line);
};
void CustomMenuItemClass::redraw(bool erase /*=false*/) {
void CustomMenuItemClass::redraw(bool erase/*=false*/) {
const int8_t line = CurrentMenu->line(this->pos);
if (erase) Erase_Menu_Text(line);
draw(line);
@ -507,8 +501,8 @@ MenuItemClass* EditItemAdd(uint8_t cicon, const char * const text, OnDrawItem on
}
void InitMenu() {
CurrentMenu = nullptr;
PreviousMenu = nullptr;
InvalidateMenu();
}
bool SetMenu(MenuClass* &menu, FSTR_P title, int8_t totalitems) {
@ -534,14 +528,18 @@ bool SetMenu(MenuClass* &menu, frame_rect_t cn, FSTR_P title, int8_t totalitems)
return NotCurrent;
}
void InvalidateMenu() {
if (CurrentMenu) {
CurrentMenu->topline = 0;
CurrentMenu->selected = 0;
CurrentMenu = nullptr;
void ResetMenu(MenuClass* &menu) {
if (menu) {
menu->topline = 0;
menu->selected = 0;
}
}
void InvalidateMenu() {
ResetMenu(CurrentMenu);
CurrentMenu = nullptr;
}
void UpdateMenu(MenuClass* &menu) {
if (!menu) return;
if (CurrentMenu != menu) {
@ -551,9 +549,13 @@ void UpdateMenu(MenuClass* &menu) {
menu->draw();
}
void ReDrawMenu(bool force /*= false*/) {
if (CurrentMenu && (force || checkkey==Menu)) CurrentMenu->draw();
void ReDrawMenu(bool force/*=false*/) {
if (CurrentMenu && (force || checkkey == Menu)) CurrentMenu->draw();
if (force) DrawItemEdit(true);
}
void ReDrawItem() {
static_cast<MenuItemClass*>(CurrentMenu->SelectedItem())->redraw(false);
}
#endif // DWIN_LCD_PROUI

View File

@ -24,14 +24,17 @@
/**
* Menu functions for ProUI
* Author: Miguel A. Risco-Castillo
* Version: 1.9.1
* Date: 2022/12/02
* Version: 1.10.1
* Date: 2022/05/01
*/
#include "dwinui.h"
#define MENU_CHAR_LIMIT 24
#define MENU_MAX_ITEMS TERN(SDSORT_LIMIT, SDSORT_LIMIT, 64)
#ifndef MENU_MAX_ITEMS
#define MENU_MAX_ITEMS 100
#endif
typedef struct {
int32_t MaxValue = 0; // Auxiliar max integer/scaled float value
@ -123,7 +126,6 @@ extern MenuClass *PreviousMenu;
// Menuitem Drawing functions =================================================
void Draw_Title(TitleClass* title);
void Draw_Menu(MenuClass* menu);
void Draw_Menu_Cursor(const int8_t line);
void Erase_Menu_Cursor(const int8_t line);
void Erase_Menu_Text(const int8_t line);
@ -150,13 +152,13 @@ void onDrawChkbMenu(MenuItemClass* menuitem, int8_t line);
// On click functions =========================================================
void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr);
void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr);
void SetValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr);
void SetIntOnClick(const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr);
void SetPIntOnClick(const int32_t lo, const int32_t hi, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr);
void SetFloatOnClick(const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr);
void SetPFloatOnClick(const float lo, const float hi, uint8_t dp, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr);
void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)()=nullptr, void (*LiveUpdate)()=nullptr);
void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)()=nullptr, void (*LiveUpdate)()=nullptr);
void SetValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp, const float val, void (*Apply)()=nullptr, void (*LiveUpdate)()=nullptr);
void SetIntOnClick(const int32_t lo, const int32_t hi, const int32_t val, void (*Apply)()=nullptr, void (*LiveUpdate)()=nullptr);
void SetPIntOnClick(const int32_t lo, const int32_t hi, void (*Apply)()=nullptr, void (*LiveUpdate)()=nullptr);
void SetFloatOnClick(const float lo, const float hi, uint8_t dp, const float val, void (*Apply)()=nullptr, void (*LiveUpdate)()=nullptr);
void SetPFloatOnClick(const float lo, const float hi, uint8_t dp, void (*Apply)()=nullptr, void (*LiveUpdate)()=nullptr);
// HMI user control functions =================================================
@ -175,6 +177,9 @@ void InitMenu();
bool SetMenu(MenuClass* &menu, FSTR_P title, int8_t totalitems);
bool SetMenu(MenuClass* &menu, frame_rect_t cn, FSTR_P title, int8_t totalitems);
// Reset top line and selected item
void ResetMenu(MenuClass* &menu);
// Invalidate CurrentMenu to prepare for full menu drawing
void InvalidateMenu();
@ -182,7 +187,10 @@ void InvalidateMenu();
void UpdateMenu(MenuClass* &menu);
//Redraw the current Menu if it is valid
void ReDrawMenu(bool force = false);
void ReDrawMenu(bool force=false);
//Redraw selected menu item
void ReDrawItem();
// Clear MenuItems array and free MenuItems elements
void MenuItemsClear();
@ -196,7 +204,7 @@ bool IsMenu(MenuClass* menu);
// Add elements to the MenuItems array
CustomMenuItemClass* MenuItemAdd(OnDrawItem ondraw=nullptr, OnClickItem onclick=nullptr);
MenuItemClass* MenuItemAdd(uint8_t cicon, const char * const text=nullptr, OnDrawItem ondraw=nullptr, OnClickItem onclick=nullptr);
inline MenuItemClass* MenuItemAdd(uint8_t cicon, FSTR_P text = nullptr, OnDrawItem ondraw=nullptr, OnClickItem onclick=nullptr) {
inline MenuItemClass* MenuItemAdd(uint8_t cicon, FSTR_P text=nullptr, OnDrawItem ondraw=nullptr, OnClickItem onclick=nullptr) {
return MenuItemAdd(cicon, FTOP(text), ondraw, onclick);
}
MenuItemClass* MenuItemAdd(uint8_t cicon, uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, OnDrawItem ondraw=nullptr, OnClickItem onclick=nullptr);

View File

@ -23,8 +23,8 @@
/**
* Mesh Viewer for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* version: 3.14.1
* Date: 2022/04/11
* version: 4.2.1
* Date: 2023/05/05
*/
#include "../../../inc/MarlinConfigPre.h"
@ -33,90 +33,99 @@
#include "../../../core/types.h"
#include "../../marlinui.h"
#include "dwin_lcd.h"
#include "dwinui.h"
#include "dwin.h"
#include "dwin_popup.h"
#include "../../../feature/bedlevel/bedlevel.h"
#include "meshviewer.h"
#if ENABLED(USE_UBL_VIEWER)
#if ENABLED(USE_GRID_MESHVIEWER)
#include "bedlevel_tools.h"
#endif
bool meshredraw; // Redraw mesh points
uint8_t sizex, sizey; // Mesh XY size
uint8_t rmax; // Maximum radius
#define margin 25 // XY Margins
#define rmin 5 // Minimum radius
#define zmin -20 // rmin at z=-0.20
#define zmax 20 // rmax at z= 0.20
#define width DWIN_WIDTH - 2 * margin
#define r(z) ((z - zmin) * (rmax - rmin) / (zmax - zmin) + rmin)
#define px(xp) (margin + (xp) * (width) / (sizex - 1))
#define py(yp) (30 + DWIN_WIDTH - margin - (yp) * (width) / (sizey - 1))
constexpr uint8_t meshfont = TERN(TJC_DISPLAY, font8x16, font6x12);
MeshViewerClass MeshViewer;
void MeshViewerClass::DrawMesh(bed_mesh_t zval, const uint8_t sizex, const uint8_t sizey) {
const int8_t mx = 25, my = 25; // Margins
const int16_t stx = (DWIN_WIDTH - 2 * mx) / (sizex - 1), // Steps
sty = (DWIN_WIDTH - 2 * my) / (sizey - 1);
const int8_t rmax = _MIN(mx - 2, stx / 2);
const int8_t rmin = 7;
int16_t zmesh[sizex][sizey];
#define px(xp) (mx + (xp) * stx)
#define py(yp) (30 + DWIN_WIDTH - my - (yp) * sty)
#define rm(z) ((z - minz) * (rmax - rmin) / _MAX(1, (maxz - minz)) + rmin)
#define DrawMeshValue(xp, yp, zv) DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(xp) - 18, py(yp) - 6, zv)
#define DrawMeshHLine(yp) dwinDrawHLine(HMI_data.SplitLine_Color, px(0), py(yp), DWIN_WIDTH - 2 * mx)
#define DrawMeshVLine(xp) dwinDrawVLine(HMI_data.SplitLine_Color, px(xp), py(sizey - 1), DWIN_WIDTH - 2 * my)
int16_t maxz =-32000; int16_t minz = 32000;
for (uint8_t y = 0; y < sizey; ++y) for (uint8_t x = 0; x < sizex; ++x) {
const float v = isnan(zval[x][y]) ? 0 : round(zval[x][y] * 100);
zmesh[x][y] = v;
NOLESS(maxz, v);
NOMORE(minz, v);
}
max = (float)maxz / 100;
min = (float)minz / 100;
float MeshViewerClass::max, MeshViewerClass::min;
void MeshViewerClass::DrawMeshGrid(const uint8_t csizex, const uint8_t csizey) {
sizex = csizex;
sizey = csizey;
rmax = _MIN(margin - 2, 0.5 * (width) / (sizex - 1));
min = 100;
max = -100;
DWINUI::ClearMainArea();
dwinDrawRectangle(0, HMI_data.SplitLine_Color, px(0), py(0), px(sizex - 1), py(sizey - 1));
for (uint8_t x = 1; x < sizex - 1; ++x) DrawMeshVLine(x);
for (uint8_t y = 1; y < sizey - 1; ++y) DrawMeshHLine(y);
for (uint8_t y = 0; y < sizey; ++y) {
hal.watchdog_refresh();
for (uint8_t x = 0; x < sizex; ++x) {
uint16_t color = DWINUI::RainbowInt(zmesh[x][y], _MIN(-5, minz), _MAX(5, maxz));
uint8_t radius = rm(zmesh[x][y]);
DWINUI::Draw_FillCircle(color, px(x), py(y), radius);
if (sizex < 9) {
if (zmesh[x][y] == 0) DWINUI::Draw_Float(font6x12, 1, 2, px(x) - 12, py(y) - 6, 0);
else DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(x) - 18, py(y) - 6, zval[x][y]);
}
else {
char str_1[9];
str_1[0] = 0;
switch (zmesh[x][y]) {
case -999 ... -100:
DWINUI::Draw_Signed_Float(font6x12, 1, 1, px(x) - 18, py(y) - 6, zval[x][y]);
break;
case -99 ... -1:
sprintf_P(str_1, PSTR("-.%02i"), -zmesh[x][y]);
break;
case 0:
dwinDrawString(false, font6x12, DWINUI::textcolor, DWINUI::backcolor, px(x) - 4, py(y) - 6, "0");
break;
case 1 ... 99:
sprintf_P(str_1, PSTR(".%02i"), zmesh[x][y]);
break;
case 100 ... 999:
DWINUI::Draw_Signed_Float(font6x12, 1, 1, px(x) - 18, py(y) - 6, zval[x][y]);
break;
}
if (str_1[0])
dwinDrawString(false, font6x12, DWINUI::textcolor, DWINUI::backcolor, px(x) - 12, py(y) - 6, str_1);
}
for (uint8_t x = 1; x < sizex - 1; ++x) dwinDrawVLine(HMI_data.SplitLine_Color, px(x), py(sizey - 1), width);
for (uint8_t y = 1; y < sizey - 1; ++y) dwinDrawHLine(HMI_data.SplitLine_Color, px(0), py(y), width);
}
void MeshViewerClass::DrawMeshPoint(const uint8_t x, const uint8_t y, const float z) {
const uint8_t fs = DWINUI::fontWidth(meshfont);
const int16_t v = isnan(z) ? 0 : round(z * 100);
NOLESS(max, z);
NOMORE(min, z);
const uint16_t color = DWINUI::RainbowInt(v, zmin, zmax);
DWINUI::Draw_FillCircle(color, px(x), py(y), r(_MAX(_MIN(v,zmax),zmin)));
TERN_(TJC_DISPLAY, delay(100));
if (sizex < (ENABLED(TJC_DISPLAY) ? 8 : 9)) {
if (v == 0) DWINUI::Draw_Float(meshfont, 1, 2, px(x) - 2*fs, py(y) - fs, 0);
else DWINUI::Draw_Signed_Float(meshfont, 1, 2, px(x) - 3*fs, py(y) - fs, z);
}
else {
char str_1[9];
str_1[0] = '\0';
switch (v) {
case -999 ... -100:
DWINUI::Draw_Signed_Float(meshfont, 1, 1, px(x) - 3*fs, py(y) - fs, z);
break;
case -99 ... -1:
sprintf_P(str_1, PSTR("-.%02i"), -v);
break;
case 0:
dwinDrawString(false, meshfont, DWINUI::textcolor, DWINUI::backcolor, px(x) - 4, py(y) - fs, "0");
break;
case 1 ... 99:
sprintf_P(str_1, PSTR(".%02i"), v);
break;
case 100 ... 999:
DWINUI::Draw_Signed_Float(meshfont, 1, 1, px(x) - 3 * fs, py(y) - fs, z);
break;
}
if (str_1[0])
dwinDrawString(false, meshfont, DWINUI::textcolor, DWINUI::backcolor, px(x) - 2 * fs, py(y) - fs, str_1);
}
}
void MeshViewerClass::Draw(bool withsave /*= false*/) {
void MeshViewerClass::DrawMesh(const bed_mesh_t zval, const uint8_t csizex, const uint8_t csizey) {
DrawMeshGrid(csizex, csizey);
for (uint8_t y = 0; y < csizey; ++y) {
hal.watchdog_refresh();
for (uint8_t x = 0; x < csizex; ++x) DrawMeshPoint(x, y, zval[x][y]);
}
}
void MeshViewerClass::Draw(const bool withsave/*=false*/, const bool redraw/*=true*/) {
Title.ShowCaption(GET_TEXT_F(MSG_MESH_VIEWER));
#if USE_UBL_VIEWER
#if ENABLED(USE_GRID_MESHVIEWER)
DWINUI::ClearMainArea();
bedLevelTools.viewer_print_value = true;
bedLevelTools.Draw_Bed_Mesh(-1, 1, 8, 10 + TITLE_HEIGHT);
#else
DrawMesh(bedlevel.z_values, GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y);
if (redraw) DrawMesh(bedlevel.z_values, GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y);
else DWINUI::Draw_Box(1, HMI_data.Background_Color, { 89, 305, 99, 38 });
#endif
if (withsave) {
DWINUI::Draw_Button(BTN_Save, 26, 305);
@ -126,19 +135,22 @@ void MeshViewerClass::Draw(bool withsave /*= false*/) {
else
DWINUI::Draw_Button(BTN_Continue, 86, 305);
#if USE_UBL_VIEWER
#if ENABLED(USE_GRID_MESHVIEWER)
bedLevelTools.Set_Mesh_Viewer_Status();
#else
char str_1[6], str_2[6] = "";
ui.status_printf(0, F("Mesh minZ: %s, maxZ: %s"),
dtostrf(min, 1, 2, str_1),
dtostrf(max, 1, 2, str_2)
);
ui.status_printf(0, F("Mesh minZ: %s, maxZ: %s"), dtostrf(min, 1, 2, str_1), dtostrf(max, 1, 2, str_2));
#endif
}
void Draw_MeshViewer() { MeshViewer.Draw(true); }
void Draw_MeshViewer() { MeshViewer.Draw(true, meshredraw); }
void onClick_MeshViewer() { if (hmiFlag.select_flag) SaveMesh(); HMI_ReturnScreen(); }
void Goto_MeshViewer() { if (leveling_is_valid()) Goto_Popup(Draw_MeshViewer, onClick_MeshViewer); else HMI_ReturnScreen(); }
void Goto_MeshViewer(const bool redraw) {
meshredraw = redraw;
if (leveling_is_valid()) Goto_Popup(Draw_MeshViewer, onClick_MeshViewer);
else HMI_ReturnScreen();
}
#endif // DWIN_LCD_PROUI && HAS_MESH

View File

@ -24,17 +24,19 @@
/**
* Mesh Viewer for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* version: 3.14.1
* Date: 2022/04/11
* version: 4.2.1
* Date: 2023/05/05
*/
class MeshViewerClass {
public:
float max, min;
void Draw(bool withsave = false);
void DrawMesh(bed_mesh_t zval, const uint8_t sizex, const uint8_t sizey);
static float max, min;
static void DrawMeshGrid(const uint8_t csizex, const uint8_t csizey);
static void DrawMeshPoint(const uint8_t x, const uint8_t y, const float z);
static void Draw(const bool withsave=false, const bool redraw=true);
static void DrawMesh(const bed_mesh_t zval, const uint8_t csizex, const uint8_t csizey);
};
extern MeshViewerClass MeshViewer;
void Goto_MeshViewer();
void Goto_MeshViewer(const bool redraw);

View File

@ -23,20 +23,18 @@
/**
* DWIN Single var plot
* Author: Miguel A. Risco-Castillo
* Version: 2.1.2
* Date: 2022/11/20
* Version: 2.2.3
* Date: 2023/01/29
*/
#include "../../../inc/MarlinConfig.h"
#if ALL(DWIN_LCD_PROUI, SHOW_TUNING_GRAPH)
#include "plot.h"
#include "dwin.h"
#include "../../../core/types.h"
#include "../../marlinui.h"
#include "dwin_lcd.h"
#include "dwinui.h"
#include "dwin.h"
#include "plot.h"
#define Plot_Bg_Color RGB( 1, 12, 8)
@ -46,7 +44,7 @@ uint16_t grphpoints, r, x2, y2 = 0;
frame_rect_t grphframe = {0};
float scale = 0;
void PlotClass::Draw(const frame_rect_t &frame, const celsius_t max, const_float_t ref/*=0*/) {
void PlotClass::Draw(const frame_rect_t &frame, const_float_t max, const_float_t ref/*=0*/) {
grphframe = frame;
grphpoints = 0;
scale = frame.h / max;

View File

@ -24,15 +24,15 @@
/**
* DWIN Single var plot
* Author: Miguel A. Risco-Castillo
* Version: 2.1.2
* Date: 2022/11/20
* Version: 2.2.3
* Date: 2023/01/29
*/
#include "dwinui.h"
class PlotClass {
public:
static void Draw(const frame_rect_t &frame, const celsius_t max, const_float_t ref=0);
static void Draw(const frame_rect_t &frame, const_float_t max, const_float_t ref=0);
static void Update(const_float_t value);
};

View File

@ -23,7 +23,7 @@
/**
* Print Stats page for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 1.4.2
* Version: 1.4.0
* Date: 2022/12/03
*/
@ -37,10 +37,8 @@
#include "../../../MarlinCore.h"
#include "../../marlinui.h"
#include "../../../module/printcounter.h"
#include "dwin_lcd.h"
#include "dwinui.h"
#include "dwin_popup.h"
#include "dwin.h"
#include "dwin_popup.h"
PrintStatsClass PrintStats;

View File

@ -24,7 +24,7 @@
/**
* Print Stats page for PRO UI
* Author: Miguel A. Risco-Castillo (MRISCOC)
* Version: 1.4.2
* Version: 1.4.0
* Date: 2022/12/03
*/

View File

@ -68,12 +68,12 @@ namespace Language_de {
LSTR MSG_FILAMENT_SET = _UxGT("Fila. Einstellungen");
LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management");
LSTR MSG_MANUAL_LEVELING = _UxGT("Manuell Nivellierung");
LSTR MSG_LEVBED_FL = _UxGT("Vorne Links");
LSTR MSG_LEVBED_FR = _UxGT("Vorne Rechts");
LSTR MSG_LEVBED_C = _UxGT("Mitte");
LSTR MSG_LEVBED_BL = _UxGT("Hinten Links");
LSTR MSG_LEVBED_BR = _UxGT("Hinten Rechts");
LSTR MSG_MANUAL_MESH = _UxGT("manuelles Netz");
LSTR MSG_TRAM_FL = _UxGT("Vorne Links");
LSTR MSG_TRAM_FR = _UxGT("Vorne Rechts");
LSTR MSG_TRAM_C = _UxGT("Mitte");
LSTR MSG_TRAM_BL = _UxGT("Hinten Links");
LSTR MSG_TRAM_BR = _UxGT("Hinten Rechts");
LSTR MSG_MANUAL_MESH = _UxGT("Manuelles Netz");
LSTR MSG_AUTO_MESH = _UxGT("Netz auto. erstellen");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Z-Achsen ausgleichen");
LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i");

View File

@ -64,6 +64,8 @@ namespace Language_en {
LSTR MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" read error");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB device removed");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB start failed");
LSTR MSG_MEDIA_SORT = _UxGT("Sort ") MEDIA_TYPE_EN;
LSTR MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall Overflow");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
@ -86,11 +88,11 @@ namespace Language_en {
LSTR MSG_FILAMENT_SET = _UxGT("Filament Settings");
LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management");
LSTR MSG_MANUAL_LEVELING = _UxGT("Manual Leveling");
LSTR MSG_LEVBED_FL = _UxGT("Front Left");
LSTR MSG_LEVBED_FR = _UxGT("Front Right");
LSTR MSG_LEVBED_C = _UxGT("Center");
LSTR MSG_LEVBED_BL = _UxGT("Back Left");
LSTR MSG_LEVBED_BR = _UxGT("Back Right");
LSTR MSG_TRAM_FL = _UxGT("Front Left");
LSTR MSG_TRAM_FR = _UxGT("Front Right");
LSTR MSG_TRAM_C = _UxGT("Center");
LSTR MSG_TRAM_BL = _UxGT("Back Left");
LSTR MSG_TRAM_BR = _UxGT("Back Right");
LSTR MSG_MANUAL_MESH = _UxGT("Manual Mesh");
LSTR MSG_AUTO_MESH = _UxGT("Auto Build Mesh");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align");
@ -187,6 +189,7 @@ namespace Language_en {
LSTR MSG_MESH_CENTER = _UxGT("Center Area");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z Value");
LSTR MSG_MESH_CANCEL = _UxGT("Mesh cancelled");
LSTR MSG_MESH_RESET = _UxGT("Mesh reset");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Custom Commands");
LSTR MSG_M48_TEST = _UxGT("M48 Probe Test");
LSTR MSG_M48_POINT = _UxGT("M48 Point");
@ -364,7 +367,7 @@ namespace Language_en {
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
LSTR MSG_PID_CYCLE = _UxGT("PID Cycles");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("PID Autotune failed!");
LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("Autotune failed!");
LSTR MSG_BAD_HEATER_ID = _UxGT("Bad extruder.");
LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperature too high.");
LSTR MSG_TIMEOUT = _UxGT("Timeout.");
@ -395,6 +398,7 @@ namespace Language_en {
LSTR MSG_VN_JERK = _UxGT("Max @ Jerk");
LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
LSTR MSG_STEP_SMOOTHING = _UxGT("Step Smoothing");
LSTR MSG_MAX_SPEED = _UxGT("Max Speed (mm/s)");
LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Speed");
LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Speed");
@ -418,6 +422,12 @@ namespace Language_en {
LSTR MSG_SHAPING_DISABLE = _UxGT("Disable @ shaping");
LSTR MSG_SHAPING_FREQ = _UxGT("@ frequency");
LSTR MSG_SHAPING_ZETA = _UxGT("@ damping");
LSTR MSG_SHAPING_A_FREQ = STR_A _UxGT(" frequency");
LSTR MSG_SHAPING_B_FREQ = STR_B _UxGT(" frequency");
LSTR MSG_SHAPING_A_ZETA = STR_A _UxGT(" damping ");
LSTR MSG_SHAPING_B_ZETA = STR_B _UxGT(" damping ");
LSTR MSG_SHAPING_X_ENABLE = _UxGT("Enable X shaping");
LSTR MSG_SHAPING_Y_ENABLE = _UxGT("Enable Y shaping");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("XY Freq Limit");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min FR Factor");
LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm");
@ -460,7 +470,7 @@ namespace Language_en {
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: EEPROM Version");
LSTR MSG_ERR_EEPROM_CORRUPT = _UxGT("Err: EEPROM Corrupt");
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
LSTR MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
LSTR MSG_HAS_PREVIEW = _UxGT("Has preview");
LSTR MSG_RESET_PRINTER = _UxGT("Reset Printer");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
LSTR MSG_INFO_SCREEN = _UxGT("Info Screen");
@ -507,7 +517,7 @@ namespace Language_en {
LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object {");
LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Continue Print Job");
LSTR MSG_MEDIA_MENU = _UxGT("Print from ") MEDIA_TYPE_EN;
LSTR MSG_MEDIA_MENU = _UxGT("Select from ") MEDIA_TYPE_EN;
LSTR MSG_TURN_OFF = _UxGT("Turn off the printer");
LSTR MSG_END_LOOPS = _UxGT("End Repeat Loops");
#else
@ -826,6 +836,10 @@ namespace Language_en {
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
LSTR MSG_TMC_CURRENT = _UxGT("Driver Current");
LSTR MSG_TMC_ACURRENT = STR_A _UxGT("Driver Current");
LSTR MSG_TMC_BCURRENT = STR_B _UxGT("Driver Current");
LSTR MSG_TMC_CCURRENT = STR_C _UxGT("Driver Current");
LSTR MSG_TMC_ECURRENT = _UxGT("E Driver Current");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");

View File

@ -81,11 +81,11 @@ namespace Language_it {
LSTR MSG_FILAMENT_SET = _UxGT("Impostaz.filamento");
LSTR MSG_FILAMENT_MAN = _UxGT("Gestione filamento");
LSTR MSG_MANUAL_LEVELING = _UxGT("Livel.manuale");
LSTR MSG_LEVBED_FL = _UxGT("Davanti Sinistra");
LSTR MSG_LEVBED_FR = _UxGT("Davanti Destra");
LSTR MSG_LEVBED_C = _UxGT("Centro");
LSTR MSG_LEVBED_BL = _UxGT("Dietro Sinistra");
LSTR MSG_LEVBED_BR = _UxGT("Dietro Destra");
LSTR MSG_TRAM_FL = _UxGT("Davanti Sinistra");
LSTR MSG_TRAM_FR = _UxGT("Davanti Destra");
LSTR MSG_TRAM_C = _UxGT("Centro");
LSTR MSG_TRAM_BL = _UxGT("Dietro Sinistra");
LSTR MSG_TRAM_BR = _UxGT("Dietro Destra");
LSTR MSG_MANUAL_MESH = _UxGT("Mesh Manuale");
LSTR MSG_AUTO_MESH = _UxGT("Generaz.Autom.Mesh");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Allineam.automat. Z");

View File

@ -894,11 +894,11 @@ namespace Language_ru {
LSTR MSG_FILAMENT_MAN = _UxGT("Управл.филаментом");
#endif
LSTR MSG_MANUAL_LEVELING = _UxGT("Ручное выравнивание");
LSTR MSG_LEVBED_FL = _UxGT("Передний левый");
LSTR MSG_LEVBED_FR = _UxGT("Передний правый");
LSTR MSG_LEVBED_C = _UxGT("Центр");
LSTR MSG_LEVBED_BL = _UxGT("Задний левый");
LSTR MSG_LEVBED_BR = _UxGT("Задний правый");
LSTR MSG_TRAM_FL = _UxGT("Передний левый");
LSTR MSG_TRAM_FR = _UxGT("Передний правый");
LSTR MSG_TRAM_C = _UxGT("Центр");
LSTR MSG_TRAM_BL = _UxGT("Задний левый");
LSTR MSG_TRAM_BR = _UxGT("Задний правый");
LSTR MSG_MANUAL_MESH = _UxGT("Сетка вручную");
LSTR MSG_AUTO_MESH = _UxGT("Сетка автоматически");
LSTR MSG_ERR_M428_TOO_FAR = _UxGT("Ошибка: слишком далеко!");

View File

@ -82,11 +82,11 @@ namespace Language_sk {
LSTR MSG_FILAMENT_SET = _UxGT("Nastav. filamentu");
LSTR MSG_FILAMENT_MAN = _UxGT("Správa filamentu");
LSTR MSG_MANUAL_LEVELING = _UxGT("Ručné rovnanie");
LSTR MSG_LEVBED_FL = _UxGT("Ľavý predný");
LSTR MSG_LEVBED_FR = _UxGT("Pravý predný");
LSTR MSG_LEVBED_C = _UxGT("Stred");
LSTR MSG_LEVBED_BL = _UxGT("Ľavý zadný");
LSTR MSG_LEVBED_BR = _UxGT("Pravý zadný");
LSTR MSG_TRAM_FL = _UxGT("Ľavý predný");
LSTR MSG_TRAM_FR = _UxGT("Pravý predný");
LSTR MSG_TRAM_C = _UxGT("Stred");
LSTR MSG_TRAM_BL = _UxGT("Ľavý zadný");
LSTR MSG_TRAM_BR = _UxGT("Pravý zadný");
LSTR MSG_MANUAL_MESH = _UxGT("Ručná mriežka");
LSTR MSG_AUTO_MESH = _UxGT("Automat. mriežka");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto-zarovn. Z");

View File

@ -71,11 +71,11 @@ namespace Language_tr {
LSTR MSG_FILAMENT_SET = _UxGT("Filament Ayarları");
LSTR MSG_FILAMENT_MAN = _UxGT("Filament Yönetimi");
LSTR MSG_MANUAL_LEVELING = _UxGT("Manuel Seviyeleme");
LSTR MSG_LEVBED_FL = _UxGT("Sol Ön");
LSTR MSG_LEVBED_FR = _UxGT("Ön Sağ");
LSTR MSG_LEVBED_C = _UxGT("Orta");
LSTR MSG_LEVBED_BL = _UxGT("Arka Sol");
LSTR MSG_LEVBED_BR = _UxGT("Arka Sağ");
LSTR MSG_TRAM_FL = _UxGT("Sol Ön");
LSTR MSG_TRAM_FR = _UxGT("Ön Sağ");
LSTR MSG_TRAM_C = _UxGT("Orta");
LSTR MSG_TRAM_BL = _UxGT("Arka Sol");
LSTR MSG_TRAM_BR = _UxGT("Arka Sağ");
LSTR MSG_MANUAL_MESH = _UxGT("Manuel Mesh");
LSTR MSG_AUTO_MESH = _UxGT("Oto Mesh Oluştur");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Oto. Z-Hizalama");

View File

@ -2633,10 +2633,12 @@ hal_timer_t Stepper::block_phase_isr() {
oversampling_factor = 0; // Assume no axis smoothing (via oversampling)
// Decide if axis smoothing is possible
uint32_t max_rate = current_block->nominal_rate; // Get the step event rate
while (max_rate < MIN_STEP_ISR_FREQUENCY) { // As long as more ISRs are possible...
max_rate <<= 1; // Try to double the rate
if (max_rate < MIN_STEP_ISR_FREQUENCY) // Don't exceed the estimated ISR limit
++oversampling_factor; // Increase the oversampling (used for left-shift)
if (TERN1(DWIN_LCD_PROUI, HMI_data.AdaptiveStepSmoothing)) {
while (max_rate < MIN_STEP_ISR_FREQUENCY) { // As long as more ISRs are possible...
max_rate <<= 1; // Try to double the rate
if (max_rate < MIN_STEP_ISR_FREQUENCY) // Don't exceed the estimated ISR limit
++oversampling_factor; // Increase the oversampling (used for left-shift)
}
}
#endif

View File

@ -910,7 +910,7 @@ volatile bool Temperature::raw_temps_ready = false;
TERN_(PRINTER_EVENT_LEDS, printerEventLEDs.onPidTuningDone(color));
TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_DONE));
TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_DONE));
TERN_(DWIN_PID_TUNE, DWIN_PidTuning(AUTOTUNE_DONE));
goto EXIT_M303;
}
@ -928,7 +928,7 @@ volatile bool Temperature::raw_temps_ready = false;
TERN_(PRINTER_EVENT_LEDS, printerEventLEDs.onPidTuningDone(color));
TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_DONE));
TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_DONE));
TERN_(DWIN_PID_TUNE, DWIN_PidTuning(AUTOTUNE_DONE));
EXIT_M303:
TERN_(TEMP_TUNING_MAINTAIN_FAN, adaptive_fan_slowing = true);
@ -1305,7 +1305,7 @@ volatile bool Temperature::raw_temps_ready = false;
}
SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_FINISHED);
TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(MPC_DONE));
TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(AUTOTUNE_DONE));
SERIAL_ECHOLNPGM("MPC_BLOCK_HEAT_CAPACITY ", mpc.block_heat_capacity);
SERIAL_ECHOLNPGM("MPC_SENSOR_RESPONSIVENESS ", p_float_t(mpc.sensor_responsiveness, 4));
@ -4391,7 +4391,7 @@ void Temperature::isr() {
// If wait_for_heatup is set, temperature was reached, no cancel
if (wait_for_heatup) {
wait_for_heatup = false;
#if HAS_DWIN_E3V2_BASIC
#if ENABLED(DWIN_CREALITY_LCD)
hmiFlag.heat_flag = 0;
duration_t elapsed = print_job_timer.duration(); // Print timer
dwin_heat_time = elapsed.value;