0
0
Fork 0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2025-02-18 07:10:58 +00:00

Sovol SV06 Plus Touchscreen (#25864)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
saddfox 2024-09-28 06:49:28 +02:00 committed by GitHub
parent 2afc2f268a
commit bbb8275d66
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 2344 additions and 21 deletions

View file

@ -3244,6 +3244,11 @@
//
//#define ANYCUBIC_LCD_VYPER
//
// Sovol SV-06 Resistive Touch Screen
//
//#define SOVOL_SV06_RTS
//
// 320x240 Nextion 2.8" serial TFT Resistive Touch Screen NX3224T028
//

View file

@ -79,6 +79,8 @@
#include "lcd/e3v2/creality/dwin.h"
#elif ENABLED(DWIN_CREALITY_LCD_JYERSUI)
#include "lcd/e3v2/jyersui/dwin.h"
#elif ENABLED(SOVOL_SV06_RTS)
#include "lcd/sovol_rts/sovol_rts.h"
#endif
#endif
@ -825,7 +827,11 @@ void idle(const bool no_stepper_sleep/*=false*/) {
TERN_(HAS_BEEPER, buzzer.tick());
// Handle UI input / draw events
ui.update();
#if ENABLED(SOVOL_SV06_RTS)
RTS_Update();
#else
ui.update();
#endif
// Run i2c Position Encoders
#if ENABLED(I2C_POSITION_ENCODERS)
@ -1162,6 +1168,12 @@ void setup() {
millis_t serial_connect_timeout = millis() + 1000UL;
while (!MYSERIAL1.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
#if ENABLED(SOVOL_SV06_RTS)
LCD_SERIAL.begin(BAUDRATE);
serial_connect_timeout = millis() + 1000UL;
while (!LCD_SERIAL.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
#endif
#if HAS_MULTI_SERIAL && !HAS_ETHERNET
#ifndef BAUDRATE_2
#define BAUDRATE_2 BAUDRATE
@ -1319,8 +1331,11 @@ void setup() {
// UI must be initialized before EEPROM
// (because EEPROM code calls the UI).
SETUP_RUN(ui.init());
#if ENABLED(SOVOL_SV06_RTS)
SETUP_RUN(RTS_Update());
#else
SETUP_RUN(ui.init());
#endif
#if PIN_EXISTS(SAFE_POWER)
#if HAS_DRIVER_SAFE_POWER_PROTECT
@ -1609,6 +1624,8 @@ void setup() {
#if ENABLED(DWIN_CREALITY_LCD)
SETUP_RUN(dwinInitScreen());
#elif ENABLED(SOVOL_SV06_RTS)
SETUP_RUN(rts.init());
#endif
#if HAS_SERVICE_INTERVALS && DISABLED(DWIN_CREALITY_LCD)

View file

@ -62,6 +62,8 @@
#if ENABLED(EXTENSIBLE_UI)
#include "../lcd/extui/ui_api.h"
#elif ENABLED(SOVOL_SV06_RTS)
#include "../lcd/sovol_rts/sovol_rts.h"
#endif
#include "../lcd/marlinui.h"
@ -150,6 +152,11 @@ static bool ensure_safe_temperature(const bool wait=true, const PauseMode mode=P
ui.pause_show_message(PAUSE_MESSAGE_HEATING, mode);
#if ENABLED(SOVOL_SV06_RTS)
rts.gotoPage(ID_Cold_L, ID_Cold_D);
rts.updateTempE0();
#endif
if (wait) return thermalManager.wait_for_hotend(active_extruder);
// Allow interruption by Emergency Parser M108
@ -277,6 +284,11 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
// "Wait for filament purge"
if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_PURGE);
#if ENABLED(SOVOL_SV06_RTS)
rts.updateTempE0();
rts.gotoPage(ID_Purge_L, ID_Purge_D);
#endif
// Extrude filament to get into hotend
unscaled_e_move(purge_length, ADVANCED_PAUSE_PURGE_FEEDRATE);
}
@ -292,6 +304,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
ui.pause_show_message(PAUSE_MESSAGE_OPTION); // MarlinUI and MKS UI also set PAUSE_RESPONSE_WAIT_FOR
#else
pause_menu_response = PAUSE_RESPONSE_WAIT_FOR;
TERN_(SOVOL_SV06_RTS, rts.gotoPage(ID_PurgeMore_L, ID_PurgeMore_D));
#endif
while (pause_menu_response == PAUSE_RESPONSE_WAIT_FOR) idle_no_sleep();
}
@ -355,6 +368,11 @@ bool unload_filament(const_float_t unload_length, const bool show_lcd/*=false*/,
if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_UNLOAD, mode);
#if ENABLED(SOVOL_SV06_RTS)
rts.updateTempE0();
rts.gotoPage(ID_Unload_L, ID_Unload_D);
#endif
// Retract filament
unscaled_e_move(-(FILAMENT_UNLOAD_PURGE_RETRACT) * mix_multiplier, (PAUSE_PARK_RETRACT_FEEDRATE) * mix_multiplier);
@ -503,6 +521,11 @@ void show_continue_prompt(const bool is_reload) {
DEBUG_ECHOLNPGM("... is_reload:", is_reload);
ui.pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
#if ENABLED(SOVOL_SV06_RTS)
rts.updateTempE0();
rts.gotoPage(ID_Insert_L, ID_Insert_D);
rts.sendData(Beep, SoundAddr);
#endif
SERIAL_ECHO_START();
SERIAL_ECHO(is_reload ? F(_PMSG(STR_FILAMENT_CHANGE_INSERT) "\n") : F(_PMSG(STR_FILAMENT_CHANGE_WAIT) "\n"));
}
@ -544,6 +567,10 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
// re-heat the nozzle, re-show the continue prompt, restart idle timers, start over
if (nozzle_timed_out) {
ui.pause_show_message(PAUSE_MESSAGE_HEAT);
#if ENABLED(SOVOL_SV06_RTS)
rts.updateTempE0();
rts.gotoPage(ID_HeatNozzle_L, ID_HeatNozzle_D);
#endif
SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT));
TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_HEATER_TIMEOUT), GET_TEXT_F(MSG_REHEAT)));
@ -709,6 +736,12 @@ void resume_print(
planner.set_e_position_mm((destination.e = current_position.e = resume_position.e));
ui.pause_show_message(PAUSE_MESSAGE_STATUS);
#if ENABLED(SOVOL_SV06_RTS)
if (pause_flag)
rts.gotoPage(ID_PrintResume_L, ID_PrintResume_D);
else
rts.refreshTime();
#endif
#ifdef ACTION_ON_RESUMED
hostui.resumed();

View file

@ -66,6 +66,10 @@ uint32_t PrintJobRecovery::cmd_sdpos, // = 0
#include "../module/probe.h"
#endif
#if ENABLED(SOVOL_SV06_RTS)
#include "../lcd/sovol_rts/sovol_rts.h"
#endif
#if ENABLED(FWRETRACT)
#include "fwretract.h"
#endif
@ -584,6 +588,11 @@ void PrintJobRecovery::resume() {
// Resume the SD file from the last position
PROCESS_SUBCOMMANDS_NOW(MString<MAX_CMD_SIZE>(F("M23 "), info.sd_filename));
PROCESS_SUBCOMMANDS_NOW(TS(F("M24S"), resume_sdpos, 'T', info.print_job_elapsed));
#if ENABLED(SOVOL_SV06_RTS)
if (rts.print_state) rts.refreshTime();
rts.start_print_flag = false;
#endif
}
#if ENABLED(DEBUG_POWER_LOSS_RECOVERY)

View file

@ -32,6 +32,10 @@
#include "../libs/duration_t.h"
#include "../gcode/gcode.h"
#if ENABLED(SOVOL_SV06_RTS)
#include "../lcd/sovol_rts/sovol_rts.h"
#endif
#if ENABLED(TMC_DEBUG)
#include "../libs/hex_print.h"
#if ENABLED(MONITOR_DRIVER_STATUS)
@ -207,6 +211,7 @@
if (data.is_ot) SERIAL_ECHOLNPGM("overtemperature");
if (data.is_s2g) SERIAL_ECHOLNPGM("coil short circuit");
TERN_(TMC_DEBUG, tmc_report_all());
TERN_(SOVOL_SV06_RTS, rts.gotoPage(ID_DriverError_L, ID_DriverError_D));
kill(F("Driver error"));
}
#endif

View file

@ -33,6 +33,7 @@
#include "../../../module/motion.h"
#include "../../../module/planner.h"
#include "../../../module/probe.h"
#include "../../../module/temperature.h"
#include "../../queue.h"
#if ENABLED(AUTO_BED_LEVELING_LINEAR)
@ -51,6 +52,8 @@
#include "../../../lcd/extui/ui_api.h"
#elif ENABLED(DWIN_CREALITY_LCD)
#include "../../../lcd/e3v2/creality/dwin.h"
#elif ENABLED(SOVOL_SV06_RTS)
#include "../../../lcd/sovol_rts/sovol_rts.h"
#endif
#define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE)
@ -438,6 +441,12 @@ G29_TYPE GcodeSuite::G29() {
remember_feedrate_scaling_off();
#if ENABLED(PREHEAT_BEFORE_LEVELING)
#if ENABLED(SOVOL_SV06_RTS)
rts.updateTempE0();
rts.updateTempBed();
rts.sendData(1, Wait_VP);
rts.gotoPage(ID_ABL_HeatWait_L, ID_ABL_HeatWait_D);
#endif
if (!abl.dryrun) probe.preheat_for_probing(LEVELING_NOZZLE_TEMP,
TERN(EXTENSIBLE_UI, ExtUI::getLevelingBedTemp(), LEVELING_BED_TEMP)
);
@ -775,6 +784,12 @@ G29_TYPE GcodeSuite::G29() {
abl.z_values[abl.meshCount.x][abl.meshCount.y] = z;
TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(abl.meshCount, z));
#if ENABLED(SOVOL_SV06_RTS)
if (pt_index <= GRID_MAX_POINTS) rts.sendData(pt_index, AUTO_BED_LEVEL_ICON_VP);
rts.sendData(z * 100.0f, AUTO_BED_LEVEL_1POINT_VP + (pt_index - 1) * 2);
rts.gotoPage(ID_ABL_Wait_L, ID_ABL_Wait_D);
#endif
#endif
abl.reenable = false; // Don't re-enable after modifying the mesh
@ -992,6 +1007,8 @@ G29_TYPE GcodeSuite::G29() {
process_subcommands_now(F(EVENT_GCODE_AFTER_G29));
#endif
TERN_(SOVOL_SV06_RTS, RTS_AutoBedLevelPage());
probe.use_probing_tool(false);
report_current_position();

View file

@ -58,6 +58,8 @@
#include "../../lcd/extui/ui_api.h"
#elif ENABLED(DWIN_CREALITY_LCD)
#include "../../lcd/e3v2/creality/dwin.h"
#elif ENABLED(SOVOL_SV06_RTS)
#include "../../lcd/sovol_rts/sovol_rts.h"
#endif
#if ENABLED(LASER_FEATURE)
@ -555,6 +557,7 @@ void GcodeSuite::G28() {
ui.refresh();
TERN_(SOVOL_SV06_RTS, RTS_MoveAxisHoming());
TERN_(DWIN_CREALITY_LCD, dwinHomingDone());
TERN_(EXTENSIBLE_UI, ExtUI::onHomingDone());

View file

@ -27,6 +27,9 @@
#include "../../gcode.h"
#include "../../../libs/nozzle.h"
#include "../../../module/motion.h"
#if ENABLED(SOVOL_SV06_RTS)
#include "../../../lcd/sovol_rts/sovol_rts.h"
#endif
/**
* G27: Park the nozzle according with the given style
@ -42,6 +45,7 @@ void GcodeSuite::G27() {
// Don't allow nozzle parking without homing first
if (homing_needed_error()) return;
nozzle.park(parser.ushortval('P'));
TERN_(SOVOL_SV06_RTS, RTS_MoveAxisHoming());
}
#endif // NOZZLE_PARK_FEATURE

View file

@ -28,7 +28,11 @@
#include "../../../feature/pause.h"
#include "../../../module/motion.h"
#include "../../../module/printcounter.h"
#include "../../../lcd/marlinui.h"
#if ENABLED(SOVOL_SV06_RTS)
#include "../../../lcd/sovol_rts/sovol_rts.h"
#endif
#if HAS_MULTI_EXTRUDER
#include "../../../module/tool_change.h"
@ -115,6 +119,8 @@ void GcodeSuite::M600() {
if (standardM600)
ui.pause_show_message(PAUSE_MESSAGE_CHANGING, PAUSE_MODE_PAUSE_PRINT, target_extruder);
TERN_(SOVOL_SV06_RTS, rts.gotoPage(ID_ChangeWait_L, ID_ChangeWait_D)); //given the context it seems this likely should have been pages 6 & 61
// If needed, home before parking for filament change
TERN_(HOME_BEFORE_FILAMENT_CHANGE, home_if_needed(true));

View file

@ -35,6 +35,10 @@
#include "../../module/planner.h"
#endif
#if ENABLED(SOVOL_SV06_RTS)
#include "../../lcd/sovol_rts/sovol_rts.h"
#endif
extern xyze_pos_t destination;
#if ENABLED(VARIABLE_G0_FEEDRATE)
@ -116,4 +120,6 @@ void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) {
#else
TERN_(FULL_REPORT_TO_HOST_FEATURE, report_current_grblstate_moving());
#endif
TERN_(SOVOL_SV06_RTS, RTS_PauseMoveAxisPage());
}

View file

@ -59,6 +59,10 @@
#define PE_LEDS_COMPLETED_TIME (30*60)
#endif
#if ENABLED(SOVOL_SV06_RTS)
#include "../../lcd/sovol_rts/sovol_rts.h"
#endif
/**
* M1001: Execute actions for SD print completion
*/
@ -110,6 +114,14 @@ void GcodeSuite::M1001() {
// Re-select the last printed file in the UI
TERN_(SD_REPRINT_LAST_SELECTED_FILE, ui.reselect_last_file());
#if ENABLED(SOVOL_SV06_RTS)
rts.sendData(100, PRINT_PROCESS_VP); delay(1);
rts.sendData(100, PRINT_PROCESS_ICON_VP); delay(1);
rts.sendData(0, PRINT_SURPLUS_TIME_HOUR_VP); delay(1);
rts.sendData(0, PRINT_SURPLUS_TIME_MIN_VP); delay(1);
rts.gotoPage(ID_Finish_L, ID_Finish_D);
#endif
}
#endif // HAS_MEDIA

View file

@ -483,7 +483,7 @@
#if ANY(DWIN_CREALITY_LCD, DWIN_LCD_PROUI)
#define HAS_DWIN_E3V2_BASIC 1
#endif
#if ANY(HAS_DWIN_E3V2_BASIC, DWIN_CREALITY_LCD_JYERSUI)
#if ANY(HAS_DWIN_E3V2_BASIC, DWIN_CREALITY_LCD_JYERSUI, SOVOL_SV06_RTS)
#define HAS_DWIN_E3V2 1
#define STD_ENCODER_PULSES_PER_STEP 4
#endif
@ -555,7 +555,7 @@
#endif
// E3V2 extras
#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI
#if ANY(HAS_DWIN_E3V2, IS_DWIN_MARLINUI, SOVOL_SV06_RTS)
#define SERIAL_CATCHALL 0
#define HAS_LCD_BRIGHTNESS 1
#define LCD_BRIGHTNESS_MAX 250
@ -568,7 +568,7 @@
#endif
// Serial Controllers require LCD_SERIAL_PORT
#if ANY(IS_DWIN_MARLINUI, HAS_DWIN_E3V2, HAS_DGUS_LCD, MALYAN_LCD, ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON, NEXTION_TFT)
#if ANY(IS_DWIN_MARLINUI, HAS_DWIN_E3V2, HAS_DGUS_LCD, MALYAN_LCD, ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON, NEXTION_TFT, SOVOL_SV06_RTS)
#define LCD_IS_SERIAL_HOST 1
#endif

View file

@ -3225,7 +3225,7 @@
* Advanced Pause - Filament Change
*/
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#if ANY(HAS_MARLINUI_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_JYERSUI) || ALL(EMERGENCY_PARSER, HOST_PROMPT_SUPPORT)
#if ANY(HAS_MARLINUI_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_JYERSUI, SOVOL_SV06_RTS) || ALL(EMERGENCY_PARSER, HOST_PROMPT_SUPPORT)
#define M600_PURGE_MORE_RESUMABLE 1 // UI provides some way to Purge More / Resume
#endif
#ifndef FILAMENT_CHANGE_SLOW_LOAD_LENGTH

View file

@ -2736,7 +2736,7 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i
+ COUNT_ENABLED(ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON, ANYCUBIC_TFT35, ANYCUBIC_LCD_VYPER) \
+ DGUS_UI_IS(ORIGIN) + DGUS_UI_IS(FYSETC) + DGUS_UI_IS(HIPRECY) + DGUS_UI_IS(MKS) + DGUS_UI_IS(RELOADED) + DGUS_UI_IS(IA_CREALITY) \
+ COUNT_ENABLED(ENDER2_STOCKDISPLAY, CR10_STOCKDISPLAY) \
+ COUNT_ENABLED(DWIN_CREALITY_LCD, DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI, DWIN_MARLINUI_PORTRAIT, DWIN_MARLINUI_LANDSCAPE) \
+ COUNT_ENABLED(DWIN_CREALITY_LCD, DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI, DWIN_MARLINUI_PORTRAIT, DWIN_MARLINUI_LANDSCAPE, SOVOL_SV06_RTS) \
+ COUNT_ENABLED(FYSETC_MINI_12864_X_X, FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0, FYSETC_GENERIC_12864_1_1) \
+ COUNT_ENABLED(LCD_SAINSMART_I2C_1602, LCD_SAINSMART_I2C_2004) \
+ COUNT_ENABLED(MKS_12864OLED, MKS_12864OLED_SSD1306) \

View file

@ -50,6 +50,8 @@ MarlinUI ui;
#include "e3v2/creality/dwin.h"
#elif ENABLED(DWIN_CREALITY_LCD_JYERSUI)
#include "e3v2/jyersui/dwin.h"
#elif ENABLED(SOVOL_SV06_RTS)
#include "sovol_rts/sovol_rts.h"
#endif
#if ENABLED(LCD_PROGRESS_BAR) && !IS_TFTGLCD_PANEL
@ -117,7 +119,9 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
void MarlinUI::set_brightness(const uint8_t value) {
backlight = !!value;
if (backlight) brightness = constrain(value, LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX);
_set_brightness();
#if DISABLED(SOVOL_SV06_RTS)
_set_brightness();
#endif
}
#endif

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,390 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2023 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 <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <stdint.h>
/*********************************/
#define FHONE (0x5A)
#define FHTWO (0xA5)
#define FHLENG (0x06)
#define MAX_NUM_FILES 20
#define FILENAME_LEN 20
#define RTS_UPDATE_INTERVAL 2000
#define RTS_UPDATE_VALUE (2 * RTS_UPDATE_INTERVAL)
#define DATA_BUF_SIZE 26
/*************Register and Variable addr*****************/
#define RegAddr_W 0x80
#define RegAddr_R 0x81
#define VarAddr_W 0x82
#define VarAddr_R 0x83
#define ExchangePageBase 0x5A010000UL // the first page ID. other page = first page ID + relevant num;
#define StartSoundSet 0x060480A0UL // 06,start-music; 04, 4 musics; 80, the volume value; 04, return value about music number.
#define Beep 0x02AF0100UL
#define Beep1 0xFFFF0101UL
#define FONT_EEPROM 90
/*variable addr*/
#define ExchangepageAddr 0x0084
#define SoundAddr 0x00A0
#define START1_PROCESS_ICON_VP 0x1000
#define PRINT_SPEED_RATE_VP 0x1006
#define PRINT_PROCESS_ICON_VP 0x100E
#define PRINT_TIME_HOUR_VP 0x1010
#define PRINT_TIME_MIN_VP 0x1012
#define PRINT_PROCESS_VP 0x1016
#define HEAD0_FAN_ICON_VP 0x101E
#define CHANGE_FILAMENT0_TEMP_VP 0x1020
#define AUTO_BED_LEVEL_ZOFFSET_VP 0x1026
#define HEAD0_SET_TEMP_VP 0x1034
#define HEAD0_CURRENT_TEMP_VP 0x1036
#define BED_SET_TEMP_VP 0x103A
#define BED_CURRENT_TEMP_VP 0x103C
#define AUTO_HOME_DISPLAY_ICON_VP 0x1042
#define AXIS_X_COORD_VP 0x1048
#define AXIS_Y_COORD_VP 0x104A
#define AXIS_Z_COORD_VP 0x104C
#define HEAD0_FILAMENT_LOAD_DATA_VP 0x1054
#define PRINTER_MACHINE_TEXT_VP 0x1060
#define PRINTER_VERSION_TEXT_VP 0x106A
#define PRINTER_PRINTSIZE_TEXT_VP 0x1074
#define PRINTER_WEBSITE_TEXT_VP 0x107E
#define MARLIN_VERSION_TEXT_VP 0x1088
#define AUTO_BED_LEVEL_ICON_VP 0x108D
#define CHANGE_FILAMENT_ICON_VP 0x108E
#define TWO_EXTRUDER_HOTEND_XOFFSET_VP 0x1092
#define TWO_EXTRUDER_HOTEND_YOFFSET_VP 0x1094
#define TWO_EXTRUDER_HOTEND_ZOFFSET_VP 0x1096
#define AUTO_BED_LEVEL_1POINT_VP 0x1100
#define PRINT_SURPLUS_TIME_HOUR_VP 0x1162
#define PRINT_SURPLUS_TIME_MIN_VP 0x1164
#define SELECT_MODE_ICON_VP 0x1166
#define CHANGE_SDCARD_ICON_VP 0x1168
#define MOTOR_FREE_ICON_VP 0x1200
#define FILE1_SELECT_ICON_VP 0x1221
#define FILE2_SELECT_ICON_VP 0x1222
#define FILE3_SELECT_ICON_VP 0x1223
#define FILE4_SELECT_ICON_VP 0x1224
#define FILE5_SELECT_ICON_VP 0x1225
#define FILE6_SELECT_ICON_VP 0x1226
#define FILE7_SELECT_ICON_VP 0x1227
#define FILE8_SELECT_ICON_VP 0x1228
#define FILE9_SELECT_ICON_VP 0x1229
#define FILE10_SELECT_ICON_VP 0x122A
#define FILE11_SELECT_ICON_VP 0x122B
#define FILE12_SELECT_ICON_VP 0x122C
#define FILE13_SELECT_ICON_VP 0x122D
#define FILE14_SELECT_ICON_VP 0x122E
#define FILE15_SELECT_ICON_VP 0x122F
#define FILE16_SELECT_ICON_VP 0x1230
#define FILE17_SELECT_ICON_VP 0x1231
#define FILE18_SELECT_ICON_VP 0x1232
#define FILE19_SELECT_ICON_VP 0x1233
#define FILE20_SELECT_ICON_VP 0x1234
#define FILE1_TEXT_VP 0x200A
#define FILE2_TEXT_VP 0x201E
#define FILE3_TEXT_VP 0x2032
#define FILE4_TEXT_VP 0x2046
#define FILE5_TEXT_VP 0x205A
#define FILE6_TEXT_VP 0x206E
#define FILE7_TEXT_VP 0x2082
#define FILE8_TEXT_VP 0x2096
#define FILE9_TEXT_VP 0x20AA
#define FILE10_TEXT_VP 0x20BE
#define FILE11_TEXT_VP 0x20D2
#define FILE12_TEXT_VP 0x20E6
#define FILE13_TEXT_VP 0x20FA
#define FILE14_TEXT_VP 0x210E
#define FILE15_TEXT_VP 0x2122
#define FILE16_TEXT_VP 0x2136
#define FILE17_TEXT_VP 0x214A
#define FILE18_TEXT_VP 0x215E
#define FILE19_TEXT_VP 0x2172
#define FILE20_TEXT_VP 0x2186
#define SELECT_FILE_TEXT_VP 0x219A
#define TWO_COLOR_MODE_ICON_VP 0x21B8
#define COPY_MODE_ICON_VP 0x21B9
#define MIRROR_MODE_ICON_VP 0x21BA
#define SINGLE_MODE_ICON_VP 0x21BB
#define EXCHANGE_NOZZLE_ICON_VP 0x21BC
#define PRINT_MODE_ICON_VP 0x21BD
#define PRINT_FILE_TEXT_VP 0x21C0
#define Nozzle_P_VP 0x2200
#define Nozzle_I_VP 0x2204
#define Nozzle_D_VP 0x2208
#define Hot_Bed_P_VP 0x220C
#define Hot_Bed_I_VP 0x2240
#define Hot_Bed_D_VP 0x2244
#define Vmax_X_VP 0x2210
#define Vmax_Y_VP 0x2212
#define Vmax_Z_VP 0x2214
#define Vmax_E_VP 0x2216
#define Accel_VP 0x2220
#define A_Retract_VP 0x2222
#define A_Travel_VP 0x2224
#define Amax_X_VP 0x2226
#define Amax_Y_VP 0x2228
#define Amax_Z_VP 0x222A
#define Amax_E_VP 0x222C
#define Jerk_X_VP 0x2230
#define Jerk_Y_VP 0x2232
#define Jerk_Z_VP 0x2234
#define Jerk_E_VP 0x2236
#define Steps_X_VP 0x1130
#define Steps_Y_VP 0x1132
#define Steps_Z_VP 0x1134
#define Steps_E_VP 0x1136
#define Advance_K_VP 0x1138
#define Time_VP 0x2450
#define Time1_VP 0x2455
#define FAN_SPEED_VP 0x2460
#define Wait_VP 0x2480
#define Zoffset_UNIT_VP 0x2500
#define Current_X_VP 0x2468
#define Current_Y_VP 0x246A
#define Current_Z_VP 0x246C
#define Current_E_VP 0x246F
#define Threshold_X_VP 0x2471
#define Threshold_Y_VP 0x2473
#define Threshold_Z_VP 0x2475
#define Threshold_E_VP 0x2477
#define Sensorless_X_VP 0x2479
#define Sensorless_Y_VP 0x247B
#define FilenameNature 0x6003
enum SovolPage : uint8_t {
ID_Startup = 0, // Startup screen
ID_Home_D = 1, ID_Home_L = 55 + ID_Home_D, // Home screen
ID_Page1_D = 2, ID_Page1_L = 55 + ID_Page1_D, // File picker page 1
ID_Page2_D = 3, ID_Page2_L = 55 + ID_Page2_D, // File picker page 2
ID_Page3_D = 4, ID_Page3_L = 55 + ID_Page3_D, // File picker page 3
ID_Page4_D = 5, ID_Page4_L = 55 + ID_Page4_D, // File picker page 4
ID_ChangeWait_D = 6, ID_ChangeWait_L = 55 + ID_ChangeWait_D, // Wait for filament change to start
ID_Cold_D = 7, ID_Cold_L = 55 + ID_Cold_D, // Nozzle heating, please wait
ID_Change_D = 8, ID_Change_L = 55 + ID_Change_D, // Manually change filament dialog
ID_Finish_D = 9, ID_Finish_L = 55 + ID_Finish_D, // Confirm print finish
ID_PrintHeating_D = 10, ID_PrintHeating_L = 55 + ID_PrintHeating_D, // Wait for heating before print starts
ID_PrintStatus_D = 11, ID_PrintStatus_L = 55 + ID_PrintStatus_D, // Printing status progress
ID_PrintResume_D = 12, ID_PrintResume_L = 55 + ID_PrintResume_D, // Resume printing
ID_PrintAdjust1_D = 14, ID_PrintAdjust1_L = 55 + ID_PrintAdjust1_D, // Modify print settings while printing, 0.01mm z offset
ID_TempChange_D = 15, ID_TempChange_L = 55 + ID_TempChange_D, // Temp / fan change and preset menu
ID_Unload_D = 16, ID_Unload_L = 55 + ID_Unload_D, // Wait for filament unload
ID_Insert_D = 17, ID_Insert_L = 55 + ID_Insert_D, // Insert filament
ID_Advanced_D = 18, ID_Advanced_L = 55 + ID_Advanced_D, // Advanced settings
ID_NoFilament_D = 20, ID_NoFilament_L = 55 + ID_NoFilament_D, // No filament
ID_Settings_D = 21, ID_Settings_L = 55 + ID_Settings_D, // Settings screen
ID_Level1_D = 22, ID_Level1_L = 55 + ID_Level1_D, // Leveling screen 0.01mm
ID_Load_D = 23, ID_Load_L = 55 + ID_Load_D, // Filament loading screen, feed / retreat filament
ID_LoadCold_D = 24, ID_LoadCold_L = 55 + ID_LoadCold_D, // Cold nozzle warning on filament load screen
ID_Velocity_D = 25, ID_Velocity_L = 55 + ID_Velocity_D, // Speed limit settings menu
ID_LoadHeating_D = 26, ID_LoadHeating_L = 55 + ID_LoadHeating_D, // Nozzle heating in filament load screen
ID_LoadCancel_D = 27, ID_LoadCancel_L = 55 + ID_LoadCancel_D, // Filament change menu, cancel feed / retreat
ID_PrintAdjust5_D = 28, ID_PrintAdjust5_L = 55 + ID_PrintAdjust5_D, // Modify print settings while printing, 0.05mm z offset
ID_Move10_D = 29, ID_Move10_L = 55 + ID_Move10_D, // Move axis, 10mm
ID_Move1_D = 30, ID_Move1_L = 55 + ID_Move1_D, // Move axis, 1mm
ID_Move01_D = 31, ID_Move01_L = 55 + ID_Move01_D, // Move axis, 0.1mm
ID_AutoHome_D = 32, ID_AutoHome_L = 55 + ID_AutoHome_D, // Auto homing in progress
ID_Info_D = 33, ID_Info_L = 55 + ID_Info_D, // Printer info screen
ID_Accel_D = 34, ID_Accel_L = 55 + ID_Accel_D, // Accelaration settings menu
ID_Jerk_D = 35, ID_Jerk_L = 55 + ID_Jerk_D, // Jerk settings menu
ID_Resume_D = 36, ID_Resume_L = 55 + ID_Resume_D, // Resume print after power loss
ID_Steps_D = 37, ID_Steps_L = 55 + ID_Steps_D, // Steps settings menu
ID_ABL_Wait_D = 38, ID_ABL_Wait_L = 55 + ID_ABL_Wait_D, // Auto leveling, please wait
ID_FilamentOut_D = 39, ID_FilamentOut_L = 55 + ID_FilamentOut_D, // Click yes to heat and change filament
ID_Processing_D = 40, ID_Processing_L = 55 + ID_Processing_D, // Processing please wait
ID_TempPID_D = 41, ID_TempPID_L = 55 + ID_TempPID_D, // PID settings menu
ID_Purge_D = 43, ID_Purge_L = 55 + ID_Purge_D, // Wait for filament purge
ID_PurgeMore_D = 44, ID_PurgeMore_L = 56 + ID_PurgeMore_D, // Purge more or resume screen
ID_HeatNozzle_D = 45, ID_HeatNozzle_L = 54 + ID_HeatNozzle_D, // Heat nozzle after pause
ID_MediaFail_D = 46, ID_MediaFail_L = 55 + ID_MediaFail_D, // Sd card removed
ID_BrowseNoSd_D = 47, ID_BrowseNoSd_L = 55 + ID_BrowseNoSd_D, // No sd card on browse screen
ID_AdvWarn_D = 49, ID_AdvWarn_L = 55 + ID_AdvWarn_D, // Warning when entering advanced settings
ID_KillRunaway_D = 52, ID_KillRunaway_L = 55 + ID_KillRunaway_D, // Thermal runaway
ID_KillHeat_D = 53, ID_KillHeat_L = 55 + ID_KillHeat_D, // Thermistor error
ID_KillBadTemp_D = 54, ID_KillBadTemp_L = 55 + ID_KillBadTemp_D, // Heating failed
ID_KillHome_D = 55, ID_KillHome_L = 55 + ID_KillHome_D, // Auto-home failed
ID_Level5_D = 111, ID_Level5_L = 6 + ID_Level5_D, // Leveling screen 0.05mm
ID_DriverError_D = 112, ID_DriverError_L = 6 + ID_DriverError_D, // Driver error
ID_SettingsTMC_D = 113, ID_SettingsTMC_L = 6 + ID_SettingsTMC_D, // TMC Driver settings
ID_DriverA_D = 114, ID_DriverA_L = 6 + ID_DriverA_D, // TMC Driver current settings
ID_DriverTrsh_D = 115, ID_DriverTrsh_L = 6 + ID_DriverTrsh_D, // TMC Driver hybrid treshold settings
ID_DriverSens_D = 116, ID_DriverSens_L = 6 + ID_DriverSens_D, // TMC Driver sensorless homing settings
ID_ABL_HeatWait_D = 123, ID_ABL_HeatWait_L = 1 + ID_ABL_HeatWait_D, // Wait for nozzle & bed to heat up
};
/************struct**************/
typedef struct DataBuf {
uint8_t len;
uint8_t head[2];
uint8_t command;
uint32_t addr;
uint32_t bytelen;
uint16_t data[32];
uint8_t reserv[4];
} DB;
typedef struct CardRecord {
int16_t recordcount;
int16_t Filesum;
uint32_t addr[MAX_NUM_FILES];
char display_filename[MAX_NUM_FILES][FILENAME_LEN];
char filename[MAX_NUM_FILES][FILENAME_LEN];
} CRec;
class RTS {
public:
RTS();
static int16_t receiveData();
static void sdCardInit();
static bool sdDetected();
static void sdCardUpdate();
static void sendData();
static void sendData(const String&, const uint32_t, const uint8_t=VarAddr_W);
static void sendData(const char[], const uint32_t, const uint8_t=VarAddr_W);
static void sendData(const char, const uint32_t, const uint8_t=VarAddr_W);
static void sendData(const int16_t, const uint32_t, const uint8_t=VarAddr_W);
static void sendData(const uint32_t, const uint32_t, const uint8_t=VarAddr_W);
static void sendData(const uint8_t str[], const uint32_t addr, const uint8_t cmd=VarAddr_W) { sendData((char *)str, addr, cmd); }
static void sendData(const uint16_t n, const uint32_t addr, const uint8_t cmd=VarAddr_W) { sendData(int16_t(n), addr, cmd); }
static void sendData(const_float_t n, const uint32_t addr, const uint8_t cmd=VarAddr_W) { sendData(int16_t(n), addr, cmd); } //was originally int16 ?
static void sendData(const int32_t n, const uint32_t addr, const uint8_t cmd=VarAddr_W) { sendData(uint32_t(n), addr, cmd); }
static void sendData(const int n, const uint32_t addr, const uint8_t cmd=VarAddr_W) { sendData(int16_t(n), addr, cmd); }
static void sdCardStop();
static void handleData();
static void init();
static uint8_t print_state;
static bool start_print_flag;
static bool dark_mode;
static void gotoPage(SovolPage page) { sendData(ExchangePageBase + page, ExchangepageAddr); }
static void gotoPage(SovolPage p1, SovolPage p2) { gotoPage(dark_mode ? p2 : p1); }
static void gotoPageBeep(SovolPage p1, SovolPage p2) { gotoPage(p1, p2); sendData(Beep1, SoundAddr); }
static void sendPrinterInfo();
static void updateTempE0();
static void updateTempBed();
static void updateFan0();
static void onIdle();
static void refreshTime() { sendData(1, dark_mode ? Time_VP : Time1_VP); gotoPage(ID_PrintStatus_L, ID_PrintStatus_D); }
static DB recdat;
static DB snddat;
private:
static uint8_t databuf[DATA_BUF_SIZE];
};
extern RTS rts;
enum PROC_COM {
MainPageKey = 0,
AdjustmentKey,
PrintSpeedKey,
StopPrintKey,
PausePrintKey,
ResumePrintKey,
ZOffsetKey,
TempScreenKey,
CoolScreenKey,
Heater0TempEnterKey, Heater1TempEnterKey,
HotBedTempEnterKey,
SettingScreenKey,
SettingBackKey,
BedLevelFunKey,
AxisPageSelectKey,
XaxismoveKey, YaxismoveKey, ZaxismoveKey,
SelectExtruderKey,
Heater0LoadEnterKey,
FilamentLoadKey,
Heater1LoadEnterKey,
SelectLanguageKey,
FilamentCheckKey,
PowerContinuePrintKey,
PrintSelectModeKey,
XhotendOffsetKey, YhotendOffsetKey, ZhotendOffsetKey,
StoreMemoryKey,
PrintFileKey,
SelectFileKey,
AdvancedKey,
Nozzle_P, Nozzle_I, Nozzle_D,
Hot_Bed_P, Hot_Bed_I, Hot_Bed_D,
Vmax_X, Vmax_Y, Vmax_Z, Vmax_E,
Accel, A_Retract, A_Travel,
Amax_X, Amax_Y, Amax_Z, Amax_E,
Jerk_X, Jerk_Y, Jerk_Z, Jerk_E,
Steps_X, Steps_Y, Steps_Z, Steps_E,
Advance_K,
AdvancedBackKey,
FilamentChange,
FanSpeedKey,
ZoffsetUnitKey,
TMCDriver,
Current_X, Current_Y, Current_Z, Current_E,
Threshold_X, Threshold_Y, Threshold_Z, Threshold_E,
Sensorless_X, Sensorless_Y,
ChangePageKey
};
const uint32_t Addrbuf[] = {
0x1002, 0x1004, 0x1006, 0x1008, 0x100A, 0x100C, 0x1026, 0x1030, 0x1032, 0x1034,
0x1038, 0x103A, 0x103E, 0x1040, 0x1044, 0x1046, 0x1048, 0x104A, 0x104C, 0x104E,
0x1054, 0x1056, 0x1058, 0x105C, 0x105E, 0x105F, 0x1090, 0x1092, 0x1094, 0x1096,
0x1098, 0x2198, 0x2199, 0x21E0, 0x2200, 0x2204, 0x2208, 0x220C, 0x2240, 0x2244,
0x2210, 0x2212, 0x2214, 0x2216, 0x2220, 0x2222, 0x2224, 0x2226, 0x2228, 0x222A,
0x222C, 0x2230, 0x2232, 0x2234, 0x2236, 0x1130, 0x1132, 0x1134, 0x1136, 0x1138,
0x2250, 0x2300, 0x2460, 0x2464, 0x2466, 0x2468, 0x246A, 0x246C, 0x246F, 0x2471,
0x2473, 0x2475, 0x2477, 0x2479, 0x247B, 0x110E, 0
};
extern void RTS_Update();
extern void RTS_Init();
extern int16_t update_time_value;
extern bool poweroff_continue;
extern bool sdcard_pause_check;
extern bool sd_printing_autopause;
extern bool pause_flag;
void RTS_AutoBedLevelPage();
void RTS_MoveAxisHoming();
void RTS_PauseMoveAxisPage();

View file

@ -30,6 +30,9 @@
#include "../sd/cardreader.h"
#include "temperature.h"
#include "../lcd/marlinui.h"
#if ENABLED(SOVOL_SV06_RTS)
#include "../lcd/sovol_rts/sovol_rts.h"
#endif
#if ENABLED(FT_MOTION)
#include "ft_motion.h"
@ -272,8 +275,12 @@ void Endstops::not_homing() {
#if ENABLED(VALIDATE_HOMING_ENDSTOPS)
// If the last move failed to trigger an endstop, call kill
void Endstops::validate_homing_move() {
if (trigger_state()) hit_on_purpose();
else kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED));
if (trigger_state())
hit_on_purpose();
else {
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillHome_L, ID_KillHome_D));
kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED));
}
}
#endif

View file

@ -52,6 +52,8 @@
#if ENABLED(DWIN_CREALITY_LCD)
#include "../lcd/e3v2/creality/dwin.h"
#elif ENABLED(SOVOL_SV06_RTS)
#include "../lcd/sovol_rts/sovol_rts.h"
#endif
#if ENABLED(EXTENSIBLE_UI)
@ -695,7 +697,11 @@ volatile bool Temperature::raw_temps_ready = false;
TERN_(USE_CONTROLLER_FAN, controllerFan.update());
// Run UI update
ui.update();
#if ENABLED(SOVOL_SV06_RTS)
RTS_Update();
#else
ui.update();
#endif
return temp_ready;
}
@ -886,11 +892,15 @@ volatile bool Temperature::raw_temps_ready = false;
temp_change_ms = ms + SEC_TO_MS(watch_temp_period); // - move the expiration timer up
if (current_temp > watch_temp_target) heated = true; // - Flag if target temperature reached
}
else if (ELAPSED(ms, temp_change_ms)) // Watch timer expired
else if (ELAPSED(ms, temp_change_ms)) { // Watch timer expired
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillHeat_L, ID_KillHeat_D));
_TEMP_ERROR(heater_id, FPSTR(str_t_heating_failed), MSG_ERR_HEATING_FAILED, current_temp);
}
}
else if (current_temp < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) // Heated, then temperature fell too far?
else if (current_temp < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) { // Heated, then temperature fell too far?
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillRunaway_L, ID_KillRunaway_D));
_TEMP_ERROR(heater_id, FPSTR(str_t_thermal_runaway), MSG_ERR_THERMAL_RUNAWAY, current_temp);
}
}
#endif
} // every 2 seconds
@ -903,6 +913,7 @@ volatile bool Temperature::raw_temps_ready = false;
TERN_(DWIN_CREALITY_LCD, dwinPopupTemperature(0));
TERN_(EXTENSIBLE_UI, ExtUI::onPIDTuning(ExtUI::pidresult_t::PID_TUNING_TIMEOUT));
TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TIMEOUT)));
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillHeat_L, ID_KillHeat_D));
SERIAL_ECHOPGM(STR_PID_AUTOTUNE); SERIAL_ECHOLNPGM(STR_PID_TIMEOUT);
break;
}
@ -1580,6 +1591,7 @@ void Temperature::_temp_error(
void Temperature::maxtemp_error(const heater_id_t heater_id OPTARG(ERR_INCLUDE_TEMP, const celsius_float_t deg)) {
#if HAS_HOTEND || HAS_HEATED_BED
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillBadTemp_L, ID_KillBadTemp_D));
TERN_(DWIN_CREALITY_LCD, dwinPopupTemperature(1));
TERN_(EXTENSIBLE_UI, ExtUI::onMaxTempError(heater_id));
#endif
@ -1588,6 +1600,7 @@ void Temperature::maxtemp_error(const heater_id_t heater_id OPTARG(ERR_INCLUDE_T
void Temperature::mintemp_error(const heater_id_t heater_id OPTARG(ERR_INCLUDE_TEMP, const celsius_float_t deg)) {
#if HAS_HOTEND || HAS_HEATED_BED
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillBadTemp_L, ID_KillBadTemp_D));
TERN_(DWIN_CREALITY_LCD, dwinPopupTemperature(0));
TERN_(EXTENSIBLE_UI, ExtUI::onMinTempError(heater_id));
#endif
@ -1793,7 +1806,10 @@ void Temperature::mintemp_error(const heater_id_t heater_id OPTARG(ERR_INCLUDE_T
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
{
const auto deg = degHotend(e);
if (deg > temp_range[e].maxtemp) MAXTEMP_ERROR(e, deg);
if (deg > temp_range[e].maxtemp) {
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillBadTemp_L, ID_KillBadTemp_D));
MAXTEMP_ERROR(e, deg);
}
}
#endif
@ -1814,6 +1830,7 @@ void Temperature::mintemp_error(const heater_id_t heater_id OPTARG(ERR_INCLUDE_T
if (watch_hotend[e].check(temp)) // Increased enough?
start_watching_hotend(e); // If temp reached, turn off elapsed check
else {
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillHeat_L, ID_KillHeat_D));
TERN_(DWIN_CREALITY_LCD, dwinPopupTemperature(0));
TERN_(EXTENSIBLE_UI, ExtUI::onHeatingError(e));
_TEMP_ERROR(e, FPSTR(str_t_heating_failed), MSG_ERR_HEATING_FAILED, temp);
@ -1833,7 +1850,10 @@ void Temperature::mintemp_error(const heater_id_t heater_id OPTARG(ERR_INCLUDE_T
#if ENABLED(THERMAL_PROTECTION_BED)
{
const auto deg = degBed();
if (deg > BED_MAXTEMP) MAXTEMP_ERROR(H_BED, deg);
if (deg > BED_MAXTEMP) {
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillBadTemp_L, ID_KillBadTemp_D));
MAXTEMP_ERROR(H_BED, deg);
}
}
#endif
@ -1845,6 +1865,7 @@ void Temperature::mintemp_error(const heater_id_t heater_id OPTARG(ERR_INCLUDE_T
if (watch_bed.check(deg)) // Increased enough?
start_watching_bed(); // If temp reached, turn off elapsed check
else {
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillHeat_L, ID_KillHeat_D));
TERN_(DWIN_CREALITY_LCD, dwinPopupTemperature(0));
TERN_(EXTENSIBLE_UI, ExtUI::onHeatingError(H_BED));
_TEMP_ERROR(H_BED, FPSTR(str_t_heating_failed), MSG_ERR_HEATING_FAILED, deg);
@ -3298,6 +3319,7 @@ void Temperature::init() {
} // fall through
case TRRunaway:
TERN_(SOVOL_SV06_RTS, rts.gotoPageBeep(ID_KillRunaway_L, ID_KillRunaway_D));
TERN_(DWIN_CREALITY_LCD, dwinPopupTemperature(0));
TERN_(EXTENSIBLE_UI, ExtUI::onHeatingError(heater_id));
_TEMP_ERROR(heater_id, FPSTR(str_t_thermal_runaway), MSG_ERR_THERMAL_RUNAWAY, current);
@ -4624,6 +4646,10 @@ void Temperature::isr() {
hmiFlag.heat_flag = 0;
duration_t elapsed = print_job_timer.duration(); // Print timer
dwin_heat_time = elapsed.value;
#elif ENABLED(SOVOL_SV06_RTS)
update_time_value = RTS_UPDATE_VALUE;
if (IS_SD_PRINTING()) rts.refreshTime();
rts.start_print_flag = false;
#else
ui.reset_status();
#endif

View file

@ -1027,14 +1027,14 @@ class Temperature {
#endif
#endif
static bool still_heating(const uint8_t e) {
return degTargetHotend(e) > TEMP_HYSTERESIS && ABS(wholeDegHotend(e) - degTargetHotend(e)) > TEMP_HYSTERESIS;
}
static bool degHotendNear(const uint8_t e, const celsius_t temp) {
return ABS(wholeDegHotend(e) - temp) < (TEMP_HYSTERESIS);
}
static bool still_heating(const uint8_t e) {
return degTargetHotend(e) > TEMP_HYSTERESIS && !degHotendNear(e, degTargetHotend(e));
}
// Start watching a Hotend to make sure it's really heating up
static void start_watching_hotend(const uint8_t E_NAME) {
UNUSED(HOTEND_INDEX);

View file

@ -38,6 +38,8 @@
#if ENABLED(DWIN_CREALITY_LCD)
#include "../lcd/e3v2/creality/dwin.h"
#elif ENABLED(SOVOL_SV06_RTS)
#include "../lcd/sovol_rts/sovol_rts.h"
#endif
#include "../module/planner.h" // for synchronize
@ -1459,6 +1461,7 @@ void CardReader::fileHasFinished() {
if (jobRecoverFileExists()) {
recovery.init();
removeFile(recovery.filename);
TERN_(SOVOL_SV06_RTS, poweroff_continue = false);
#if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
SERIAL_ECHOLN(F("Power-loss file delete"), jobRecoverFileExists() ? F(" failed.") : F("d."));
#endif

View file

@ -48,6 +48,7 @@ DWIN_CREALITY_LCD = build_src_filter=+<src/lcd/e3v2/crealit
DWIN_LCD_PROUI = build_src_filter=+<src/lcd/e3v2/proui>
DWIN_CREALITY_LCD_JYERSUI = build_src_filter=+<src/lcd/e3v2/jyersui>
IS_DWIN_MARLINUI = build_src_filter=+<src/lcd/e3v2/marlinui>
SOVOL_SV06_RTS = build_src_filter=+<src/lcd/sovol_rts>
HAS_GRAPHICAL_TFT = build_src_filter=+<src/lcd/tft> -<src/lcd/tft/fontdata> -<src/lcd/tft/ui_move_axis_screen_*.cpp>
HAS_UI_320X.+ = build_src_filter=+<src/lcd/tft/ui_move_axis_screen_320.cpp>
HAS_UI_480X.+ = build_src_filter=+<src/lcd/tft/ui_move_axis_screen_480.cpp>

View file

@ -56,7 +56,7 @@ lib_deps =
default_src_filter = +<src/*> -<src/config> -<src/tests>
; LCDs and Controllers
-<src/lcd/HD44780> -<src/lcd/dogm> -<src/lcd/TFTGLCD> -<src/lcd/tft> -<src/lcd/tft_io>
-<src/lcd/e3v2> -<src/lcd/menu> -<src/lcd/extui> -<src/lcd/touch>
-<src/lcd/e3v2> -<src/lcd/sovol_rts> -<src/lcd/menu> -<src/lcd/extui> -<src/lcd/touch>
-<src/lcd/lcdprint.cpp>
; Marlin HAL
-<src/HAL>