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:
parent
2afc2f268a
commit
bbb8275d66
23 changed files with 2344 additions and 21 deletions
|
@ -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
|
||||
//
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
1775
Marlin/src/lcd/sovol_rts/sovol_rts.cpp
Normal file
1775
Marlin/src/lcd/sovol_rts/sovol_rts.cpp
Normal file
File diff suppressed because it is too large
Load diff
390
Marlin/src/lcd/sovol_rts/sovol_rts.h
Normal file
390
Marlin/src/lcd/sovol_rts/sovol_rts.h
Normal 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();
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue