Compare commits
118 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e8167a1629 | |||
| 4b943a0b04 | |||
| d2dd3b2461 | |||
| 3fba42bb22 | |||
| e3bf7c4b30 | |||
| ce07585a2d | |||
| 890be588df | |||
| 856dcc7fe8 | |||
| b9d20cb3b3 | |||
| 1daa885dbc | |||
| b436a19f23 | |||
| 97179ddad3 | |||
| 57815d2d65 | |||
| 67aa28f0c1 | |||
| b5d7f3ef12 | |||
| e0ff391eba | |||
| 8d44b6c427 | |||
| 97e0ed7393 | |||
| 7862493991 | |||
| 63e91dc0af | |||
| e713d5ee2b | |||
| 52f1474281 | |||
| 911093a28c | |||
| b05b35ece9 | |||
| 0fa6605b49 | |||
| b007343710 | |||
| 0766fcd082 | |||
| f2060b5c34 | |||
| 056db1c3ae | |||
| 57e4fe6381 | |||
| 6531db383c | |||
| 278c49e9de | |||
| 0ed4727767 | |||
| fcbc6a929c | |||
| 3c9b927291 | |||
| aa3cd470da | |||
| 004fd179d1 | |||
| eab01ba183 | |||
| 42bd6e74a7 | |||
| 3a1f3a4ba3 | |||
| 9697434981 | |||
| 6dec98e54c | |||
| 39201418ce | |||
| a1c5735d6f | |||
| b02badf25e | |||
| 3b7871005a | |||
| 0bd0b3df80 | |||
| 549619995f | |||
| 6edc02b276 | |||
| 1a060a291a | |||
| 82c0594e38 | |||
| 90e5130954 | |||
| 6c828d5f61 | |||
| 237ad14388 | |||
| 698dc6af06 | |||
| 7003f23735 | |||
| 01e2a659d7 | |||
| 6465255da2 | |||
| 33e1bc6fab | |||
| ad337ec4cc | |||
| eb954faa49 | |||
| 7bf0505ce6 | |||
| a92eb021ff | |||
| d1f86d2440 | |||
| e73727acf6 | |||
| cee8d4b7f4 | |||
| 51883dacbd | |||
| 5eff2069ee | |||
| 7ee1a1f682 | |||
| e29d7f1da3 | |||
| 0793144ad6 | |||
| e8cb39a454 | |||
| 43e90110c6 | |||
| 8fd2a063d5 | |||
| 3166c366dd | |||
| df2c9361cf | |||
| 912939af2a | |||
| 6fec3cf034 | |||
| 0f47b30c7a | |||
| 8987d3d64f | |||
| a1d09c7997 | |||
| 71d530e594 | |||
| 6db534c997 | |||
| 0821c72d39 | |||
| 5c59a3d7c7 | |||
| a9e7df859c | |||
| 2d651fc785 | |||
| b1496f9a8c | |||
| 35f4f5a311 | |||
| eb5498fdb7 | |||
| 88ef960047 | |||
| 62fe2b6f07 | |||
| acc0d53333 | |||
| 2ba44dc3cb | |||
| f6d9faaa15 | |||
| eb3ed7266b | |||
| e0066ef96c | |||
| 0ad5b685ab | |||
| 9e7e7a0f3a | |||
| b848e5b4b2 | |||
| 471bd44380 | |||
| 7f5f9724de | |||
| c80165565c | |||
| 306207704a | |||
| b95f7dc09b | |||
| b589cac5ff | |||
| 6825c34e04 | |||
| ae13b3b8d7 | |||
| b998b0f46e | |||
| 8be3293d79 | |||
| 73f9f95645 | |||
| 2201136141 | |||
| f17f5ad29d | |||
| a1daf240bc | |||
| a23a265312 | |||
| ddf7a2aa00 | |||
| 9dd779edb2 | |||
| 3801d831d4 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1806
-359
File diff suppressed because it is too large
Load Diff
+387
-246
File diff suppressed because it is too large
Load Diff
+142
-36
@@ -28,55 +28,103 @@
|
||||
/**
|
||||
* Marlin release version identifier
|
||||
*/
|
||||
#define SHORT_BUILD_VERSION "2.1.2_Beta3"
|
||||
#define SHORT_BUILD_VERSION "DW7.4.9"
|
||||
|
||||
/**
|
||||
* Verbose version identifier which should contain a reference to the location
|
||||
* from where the binary was downloaded or the source code was compiled.
|
||||
*/
|
||||
|
||||
#if(ENABLED(DriverA4988))
|
||||
#define VerChar1 "A"
|
||||
#elif(ENABLED(Driver2209))
|
||||
#define VerChar1 "T"
|
||||
#if(ENABLED(MachineMini))
|
||||
#define VerChar1 "M"
|
||||
#elif(ENABLED(MachineEnder2))
|
||||
#define VerChar1 "E2"
|
||||
#elif(ENABLED(MachineEnder2Pro))
|
||||
#define VerChar1 "E2P"
|
||||
#elif(ENABLED(MachineEnder3))
|
||||
#define VerChar1 "E3"
|
||||
#elif ENABLED(MachineEnder3V2)
|
||||
#define VerChar1 "E3V2"
|
||||
#elif ENABLED(MachineEnder3S1)
|
||||
#define VerChar1 "E3S1"
|
||||
#elif ENABLED(MachineEnder3Max)
|
||||
#define VerChar1 "E3M"
|
||||
#elif(ENABLED(MachineEnder4))
|
||||
#define VerChar1 "E4"
|
||||
#elif(ENABLED(MachineEnder5))
|
||||
#define VerChar1 "E5"
|
||||
#elif(ENABLED(MachineEnder6))
|
||||
#define VerChar1 "E6"
|
||||
#elif(ENABLED(MachineEnder7))
|
||||
#define VerChar1 "E7"
|
||||
#elif(ENABLED(MachineSermoonD1))
|
||||
#define VerChar1 "D1"
|
||||
#elif(ENABLED(MachineEnder5Plus))
|
||||
#define VerChar1 "E5P"
|
||||
#elif(ENABLED(MachineCR20))
|
||||
#define VerChar1 "2"
|
||||
#elif(ENABLED(MachineCR10Orig))
|
||||
#define VerChar1 "O"
|
||||
#elif(ENABLED(MachineCR10Std))
|
||||
#define VerChar1 "S"
|
||||
#elif(ENABLED(MachineCRX))
|
||||
#define VerChar1 "X"
|
||||
#elif(ENABLED(MachineCR6))
|
||||
#define VerChar1 "CR6"
|
||||
#elif(ENABLED(MachineCR5))
|
||||
#define VerChar1 "CR5"
|
||||
#elif(ENABLED(MachineCR6Max))
|
||||
#define VerChar1 "CR6M"
|
||||
#elif(ENABLED(MachineS4))
|
||||
#define VerChar1 "4"
|
||||
#elif(ENABLED(MachineS5) || ENABLED(MachineCR10Max))
|
||||
#define VerChar1 "5"
|
||||
#elif ENABLED(MachineCR2020)
|
||||
#define VerChar1 "20"
|
||||
#elif(ENABLED(MachineCR30))
|
||||
#define VerChar1 "CR30"
|
||||
#endif
|
||||
|
||||
#if(ENABLED(BL_Touch))
|
||||
#define VerChar2 "B"
|
||||
#if(ENABLED(HotendStock))
|
||||
#define VerChar2 "S"
|
||||
#elif(ENABLED(HotendE3D))
|
||||
#define VerChar2 "E"
|
||||
#elif ENABLED(HotendMosquito)
|
||||
#define VerChar2 "M"
|
||||
#endif
|
||||
|
||||
#if(ENABLED(HotendAllMetal))
|
||||
#define VerChar3 "M"
|
||||
#else
|
||||
#define VerChar2 "E"
|
||||
#endif
|
||||
|
||||
#if(ENABLED(LOWRES_DWIN))
|
||||
#define VerChar3 "L"
|
||||
#else
|
||||
#define VerChar3 "H"
|
||||
#define VerChar3 "S"
|
||||
#endif
|
||||
|
||||
|
||||
#if(ENABLED(ACBed))
|
||||
#define VerChar4 "A"
|
||||
#if(ENABLED(BedAC))
|
||||
#define VerChar4 "A"
|
||||
#elif(ENABLED(BedDC))
|
||||
#define VerChar4 "D"
|
||||
#else
|
||||
#define VerChar4 "D"
|
||||
#define VerChar4 "N"
|
||||
#endif
|
||||
|
||||
#if(ENABLED(OpticalY))
|
||||
#define VerChar5 "O"
|
||||
#if(ENABLED(ABL_EZABL))
|
||||
#define VerChar5 "A"
|
||||
#elif(ENABLED(ABL_BLTOUCH))
|
||||
#define VerChar5 "B"
|
||||
#else
|
||||
#define VerChar5 "M"
|
||||
#define VerChar5 "N"
|
||||
#endif
|
||||
|
||||
#if(ENABLED(TitanExtruder))
|
||||
#define VerChar6 "T"
|
||||
#elif ANY(BMGExtruderV2, BMGExtruderV3)
|
||||
#define VerChar6 "B"
|
||||
#elif ENABLED(BondtechLGX)
|
||||
#define VerChar6 "L"
|
||||
#if(ENABLED(ABL_UBL))
|
||||
#define VerChar6 "U"
|
||||
#elif(ENABLED(ABL_BI))
|
||||
#define VerChar6 "B"
|
||||
#else
|
||||
#define VerChar6 "S"
|
||||
#define VerChar6 "N"
|
||||
#endif
|
||||
|
||||
#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION "_" VerChar1 VerChar2 VerChar3 VerChar4 VerChar5 VerChar6
|
||||
#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " FL " VerChar1 VerChar2 VerChar3 VerChar4 VerChar5 VerChar6
|
||||
|
||||
/**
|
||||
* The STRING_DISTRIBUTION_DATE represents when the binary file was built,
|
||||
@@ -88,12 +136,70 @@
|
||||
/**
|
||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||
*/
|
||||
#if(ENABLED(MachineTLD3P))
|
||||
#define CUSTOM_MACHINE_NAME "LNL D3Pro"
|
||||
#elif(ENABLED(MachineTLD5))
|
||||
#define CUSTOM_MACHINE_NAME "LNL D5Pro"
|
||||
#elif(ENABLED(MachineTLD6))
|
||||
#define CUSTOM_MACHINE_NAME "LNL D6Pro"
|
||||
#if ENABLED(MACHINE_PRO)
|
||||
#define MACHINEPRO " Pro"
|
||||
#else
|
||||
#define MACHINEPRO ""
|
||||
#endif
|
||||
|
||||
#if(ENABLED(MachineMini))
|
||||
#define CUSTOM_MACHINE_NAME "Mini SuPeR"
|
||||
#elif(ENABLED(MachineCR10Smart))
|
||||
#define CUSTOM_MACHINE_NAME "CR10Smart"
|
||||
#elif(ENABLED(MachineCR10SmartPro))
|
||||
#define CUSTOM_MACHINE_NAME "CR10SmartPro"
|
||||
#elif(ENABLED(MachineEnder2))
|
||||
#define CUSTOM_MACHINE_NAME "Ender2"
|
||||
#elif(ENABLED(MachineEnder2Pro))
|
||||
#define CUSTOM_MACHINE_NAME "Ender2 Pro"
|
||||
#elif(ENABLED(MachineEnder3))
|
||||
#define CUSTOM_MACHINE_NAME "Ender3" MACHINEPRO
|
||||
#elif(ENABLED(MachineEnder3Max))
|
||||
#define CUSTOM_MACHINE_NAME "E3Max"
|
||||
#elif(ENABLED(MachineEnder6))
|
||||
#define CUSTOM_MACHINE_NAME "Ender6"
|
||||
#elif(ENABLED(MachineEnder7))
|
||||
#define CUSTOM_MACHINE_NAME "Ender7"
|
||||
#elif(ENABLED(MachineEnder3V2))
|
||||
#define CUSTOM_MACHINE_NAME "Ender3V2"
|
||||
#elif(ENABLED(MachineEnder3S1))
|
||||
#define CUSTOM_MACHINE_NAME "Ender3S1"
|
||||
#elif(ENABLED(MachineEnder4))
|
||||
#define CUSTOM_MACHINE_NAME "Ender4"
|
||||
#elif(ENABLED(MachineEnder5))
|
||||
#define CUSTOM_MACHINE_NAME "Ender5" MACHINEPRO
|
||||
#elif(ENABLED(MachineEnder5Plus))
|
||||
#define CUSTOM_MACHINE_NAME "E5 Plus"
|
||||
#elif(ENABLED(MachineCR20))
|
||||
#define CUSTOM_MACHINE_NAME "CR-20"
|
||||
#elif(ENABLED(MachineCR10Orig))
|
||||
#define CUSTOM_MACHINE_NAME "CR-10"
|
||||
#elif(ENABLED(MachineCRX))
|
||||
#define CUSTOM_MACHINE_NAME "CR-X"
|
||||
#elif ENABLED(MachineCR10SProV2)
|
||||
#define CUSTOM_MACHINE_NAME "10SProV2"
|
||||
#elif(ENABLED(MachineCR10SPro))
|
||||
#define CUSTOM_MACHINE_NAME "10S Pro"
|
||||
#elif(ENABLED(MachineCR10Max))
|
||||
#define CUSTOM_MACHINE_NAME "CR10Max"
|
||||
#elif(ENABLED(MachineCR10SV3))
|
||||
#define CUSTOM_MACHINE_NAME "CR10V3"
|
||||
#elif(ENABLED(MachineCR10SV2))
|
||||
#define CUSTOM_MACHINE_NAME "CR10V2"
|
||||
#elif(ENABLED(MachineCR10Std))
|
||||
#define CUSTOM_MACHINE_NAME "CR10300"
|
||||
#elif(ENABLED(MachineS4))
|
||||
#define CUSTOM_MACHINE_NAME "CR10400"
|
||||
#elif(ENABLED(MachineS5))
|
||||
#define CUSTOM_MACHINE_NAME "CR10500"
|
||||
#elif ENABLED(MachineCR2020)
|
||||
#define CUSTOM_MACHINE_NAME "CR2020"
|
||||
#elif ENABLED(MachineSermoonD1)
|
||||
#define CUSTOM_MACHINE_NAME "SermoonD1"
|
||||
#elif ENABLED(MachineCR5)
|
||||
#define CUSTOM_MACHINE_NAME "CR5 Pro"
|
||||
#elif ENABLED(MachineCR30)
|
||||
#define CUSTOM_MACHINE_NAME "CR30 Printmill"
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -102,7 +208,7 @@
|
||||
* has a distinct Github fork— the Source Code URL should just be the main
|
||||
* Marlin repository.
|
||||
*/
|
||||
#define SOURCE_CODE_URL "https://github.com/InsanityAutomation/Marlin/tree/Tenlog_DWIN"
|
||||
#define SOURCE_CODE_URL "https://github.com/InsanityAutomation/Marlin/tree/CrealityDwin_2.0"
|
||||
|
||||
/**
|
||||
* Default generic printer UUID.
|
||||
@@ -113,7 +219,7 @@
|
||||
* The WEBSITE_URL is the location where users can get more information such as
|
||||
* documentation about a specific Marlin release.
|
||||
*/
|
||||
#define WEBSITE_URL "http://www.lnl3d.com "
|
||||
#define WEBSITE_URL "https://www.amazon.com/s?k=F1RST+LAYER"
|
||||
|
||||
/**
|
||||
* Set the vendor info the serial USB interface, if changable
|
||||
|
||||
@@ -139,8 +139,8 @@ typedef Servo hal_servo_t;
|
||||
#error "LCD_SERIAL_PORT must be from 0 to 3."
|
||||
#endif
|
||||
#define LCD_SERIAL lcdSerial
|
||||
#if HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(DWINOS_4)
|
||||
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.get_tx_buffer_free()
|
||||
#if HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(EXTENSIBLE_UI)
|
||||
#define SERIAL_GET_TX_BUFFER_FREE() LCD_SERIAL.get_tx_buffer_free()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -629,7 +629,7 @@ MSerialT1 customizedSerial1(MSerialT1::HasEmergencyParser);
|
||||
template class MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> >;
|
||||
MSerialLCD lcdSerial(MSerialLCD::HasEmergencyParser);
|
||||
|
||||
#if HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(DWINOS_4)
|
||||
#if HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(EXTENSIBLE_UI)
|
||||
template<typename Cfg>
|
||||
typename MarlinSerial<Cfg>::ring_buffer_pos_t MarlinSerial<Cfg>::get_tx_buffer_free() {
|
||||
const ring_buffer_pos_t t = tx_buffer.tail, // next byte to send.
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
static ring_buffer_pos_t available();
|
||||
static void write(const uint8_t c);
|
||||
static void flushTX();
|
||||
#if HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(DWINOS_4)
|
||||
#if HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(EXTENSIBLE_UI)
|
||||
static ring_buffer_pos_t get_tx_buffer_free();
|
||||
#endif
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ struct MarlinSerial : public HardwareSerial {
|
||||
inline void begin(unsigned long baud) { begin(baud, SERIAL_8N1); }
|
||||
|
||||
void _rx_complete_irq(serial_t *obj);
|
||||
FORCE_INLINE static uint8_t buffer_overruns() { return 0; }
|
||||
|
||||
protected:
|
||||
usart_rx_callback_t _rx_callback;
|
||||
|
||||
@@ -46,8 +46,9 @@ RunoutMode FilamentMonitorBase::mode[NUM_RUNOUT_SENSORS]; // Initialized by sett
|
||||
#endif
|
||||
|
||||
float RunoutResponseDelayed::runout_distance_mm[NUM_RUNOUT_SENSORS]; // Initialized by settings.load
|
||||
volatile float RunoutResponseDelayed::runout_mm_countdown[NUM_RUNOUT_SENSORS];
|
||||
countdown_t RunoutResponseDelayed::mm_countdown;
|
||||
uint8_t FilamentSensorCore::motion_detected;
|
||||
int8_t RunoutResponseDelayed::runout_count[NUM_RUNOUT_SENSORS]; // = 0
|
||||
|
||||
//
|
||||
// Filament Runout event handler
|
||||
@@ -82,7 +83,7 @@ void event_filament_runout(const uint8_t extruder) {
|
||||
#endif
|
||||
|
||||
TERN_(EXTENSIBLE_UI, ExtUI::onFilamentRunout(ExtUI::getTool(extruder)));
|
||||
TERN_(DWIN_LCD_PROUI, DWIN_FilamentRunout(extruder));
|
||||
TERN_(DWIN_LCD_PROUI, dwinFilamentRunout(extruder));
|
||||
|
||||
#if ANY(HOST_PROMPT_SUPPORT, HOST_ACTION_COMMANDS, MULTI_FILAMENT_SENSOR)
|
||||
const char tool = '0' + TERN0(MULTI_FILAMENT_SENSOR, extruder);
|
||||
@@ -96,12 +97,16 @@ void event_filament_runout(const uint8_t extruder) {
|
||||
const bool run_runout_script = !runout.host_handling;
|
||||
|
||||
#if ENABLED(HOST_ACTION_COMMANDS)
|
||||
if (run_runout_script
|
||||
&& ( strstr(FILAMENT_RUNOUT_SCRIPT, "M600")
|
||||
|
||||
const bool park_or_pause = (false
|
||||
#ifdef FILAMENT_RUNOUT_SCRIPT
|
||||
|| strstr(FILAMENT_RUNOUT_SCRIPT, "M600")
|
||||
|| strstr(FILAMENT_RUNOUT_SCRIPT, "M125")
|
||||
|| TERN0(ADVANCED_PAUSE_FEATURE, strstr(FILAMENT_RUNOUT_SCRIPT, "M25"))
|
||||
)
|
||||
) {
|
||||
#endif
|
||||
);
|
||||
|
||||
if (run_runout_script && park_or_pause) {
|
||||
hostui.paused(false);
|
||||
}
|
||||
else {
|
||||
@@ -118,24 +123,27 @@ void event_filament_runout(const uint8_t extruder) {
|
||||
SERIAL_ECHOPGM(" " ACTION_REASON_ON_FILAMENT_RUNOUT " ");
|
||||
SERIAL_CHAR(tool);
|
||||
SERIAL_EOL();
|
||||
|
||||
#endif // HOST_ACTION_COMMANDS
|
||||
|
||||
if (run_runout_script) {
|
||||
#if MULTI_FILAMENT_SENSOR
|
||||
char script[strlen(FILAMENT_RUNOUT_SCRIPT) + 1];
|
||||
sprintf_P(script, PSTR(FILAMENT_RUNOUT_SCRIPT), tool);
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
SERIAL_ECHOLNPGM("Runout Command: ", script);
|
||||
#ifdef FILAMENT_RUNOUT_SCRIPT
|
||||
if (run_runout_script) {
|
||||
#if MULTI_FILAMENT_SENSOR
|
||||
MString<strlen(FILAMENT_RUNOUT_SCRIPT)> script;
|
||||
script.setf(F(FILAMENT_RUNOUT_SCRIPT), AS_CHAR(tool));
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
SERIAL_ECHOLNPGM("Runout Command: ", &script);
|
||||
#endif
|
||||
queue.inject(&script);
|
||||
#else
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
SERIAL_ECHOPGM("Runout Command: ");
|
||||
SERIAL_ECHOLNPGM(FILAMENT_RUNOUT_SCRIPT);
|
||||
#endif
|
||||
queue.inject(F(FILAMENT_RUNOUT_SCRIPT));
|
||||
#endif
|
||||
queue.inject(script);
|
||||
#else
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
SERIAL_ECHOPGM("Runout Command: ");
|
||||
SERIAL_ECHOLNPGM(FILAMENT_RUNOUT_SCRIPT);
|
||||
#endif
|
||||
queue.inject(F(FILAMENT_RUNOUT_SCRIPT));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // HAS_FILAMENT_SENSOR
|
||||
|
||||
+100
-75
@@ -44,7 +44,17 @@
|
||||
#define FILAMENT_RUNOUT_THRESHOLD 5
|
||||
#endif
|
||||
|
||||
|
||||
typedef Flags<
|
||||
#if NUM_MOTION_SENSORS > NUM_RUNOUT_SENSORS
|
||||
NUM_MOTION_SENSORS
|
||||
#else
|
||||
NUM_RUNOUT_SENSORS
|
||||
#endif
|
||||
> runout_flags_t;
|
||||
|
||||
void event_filament_runout(const uint8_t extruder);
|
||||
inline bool should_monitor_runout() { return did_pause_print || printingIsActive(); }
|
||||
|
||||
template<class RESPONSE_T, class SENSOR_T>
|
||||
class TFilamentMonitor;
|
||||
@@ -123,43 +133,33 @@ class TFilamentMonitor : public FilamentMonitorBase {
|
||||
|
||||
// Give the response a chance to update its counter.
|
||||
static void run() {
|
||||
if (enabled[active_extruder] && mode[active_extruder] != RM_NONE && !filament_ran_out && (printingIsActive() || did_pause_print)) {
|
||||
if (enabled && !filament_ran_out && should_monitor_runout()) {
|
||||
cli(); // Prevent RunoutResponseDelayed::block_completed from accumulating here
|
||||
response.run();
|
||||
sensor.run();
|
||||
const uint8_t runout_flags = response.has_run_out();
|
||||
const runout_flags_t runout_flags = response.has_run_out();
|
||||
sei();
|
||||
#if MULTI_FILAMENT_SENSOR
|
||||
#if ENABLED(WATCH_ALL_RUNOUT_SENSORS)
|
||||
const bool ran_out = !!runout_flags; // any sensor triggers
|
||||
const bool ran_out = bool(runout_flags); // any sensor triggers
|
||||
uint8_t extruder = 0;
|
||||
if (ran_out) {
|
||||
uint8_t bitmask = runout_flags;
|
||||
while (!(bitmask & 1)) {
|
||||
bitmask >>= 1;
|
||||
extruder++;
|
||||
}
|
||||
}
|
||||
if (ran_out) while (!runout_flags.test(extruder)) extruder++;
|
||||
#else
|
||||
const bool ran_out = TEST(runout_flags, active_extruder); // suppress non active extruders
|
||||
const bool ran_out = runout_flags[active_extruder]; // suppress non active extruders
|
||||
uint8_t extruder = active_extruder;
|
||||
#endif
|
||||
#else
|
||||
const bool ran_out = !!runout_flags;
|
||||
const bool ran_out = bool(runout_flags);
|
||||
uint8_t extruder = active_extruder;
|
||||
#endif
|
||||
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
if (runout_flags) {
|
||||
SERIAL_ECHOPGM("Runout Sensors: ");
|
||||
for(int i; i < 8; i++) SERIAL_ECHO('0' + TEST(runout_flags, i));
|
||||
SERIAL_ECHOPGM(" -> ", extruder);
|
||||
if (ran_out) SERIAL_ECHOPGM(" RUN OUT");
|
||||
SERIAL_EOL();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ran_out) {
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
SERIAL_ECHOPGM("Runout Sensors: ");
|
||||
for (uint8_t i = 0; i < 8; ++i) SERIAL_ECHO('0' + char(runout_flags[i]));
|
||||
SERIAL_ECHOLNPGM(" -> ", extruder, " RUN OUT");
|
||||
#endif
|
||||
|
||||
filament_ran_out = true;
|
||||
event_filament_runout(extruder);
|
||||
planner.synchronize();
|
||||
@@ -222,10 +222,26 @@ class FilamentSensorBase {
|
||||
|
||||
// Return a bitmask of runout flag states (1 bits always indicates runout)
|
||||
static uint8_t poll_runout_states() {
|
||||
#define _OR_INVERT(N) | (runout.out_state(N-1) ? 0 : _BV(N-1))
|
||||
return poll_runout_pins() ^ uint8_t(0 REPEAT_1(NUM_RUNOUT_SENSORS, _OR_INVERT));
|
||||
#undef _OR_INVERT
|
||||
#define _INVERT_BIT(N) | (runout.out_state(N-1) ? 0 : _BV(N-1))
|
||||
return poll_runout_pins() ^ uint8_t(0 REPEAT_1(NUM_RUNOUT_SENSORS, _INVERT_BIT));
|
||||
#undef _INVERT_BIT
|
||||
}
|
||||
|
||||
#if ENABLED(FILAMENT_SWITCH_AND_MOTION)
|
||||
// Return a bitmask of motion pin states
|
||||
static uint8_t poll_motion_pins() {
|
||||
#define _OR_MOTION(N) | (READ(FIL_MOTION##N##_PIN) ? _BV((N) - 1) : 0)
|
||||
return (0 REPEAT_1(NUM_MOTION_SENSORS, _OR_MOTION));
|
||||
#undef _OR_MOTION
|
||||
}
|
||||
|
||||
// Return a bitmask of motion flag states (1 bits always indicates runout)
|
||||
static uint8_t poll_motion_states() {
|
||||
#define _OR_MOTION(N) | (FIL_MOTION##N##_STATE ? 0 : _BV(N - 1))
|
||||
return poll_motion_pins() ^ uint8_t(0 REPEAT_1(NUM_MOTION_SENSORS, _OR_MOTION));
|
||||
#undef _OR_MOTION
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
class FilamentSensorCore : public FilamentSensorBase {
|
||||
@@ -233,27 +249,27 @@ class FilamentSensorCore : public FilamentSensorBase {
|
||||
static uint8_t motion_detected;
|
||||
|
||||
static bool poll_runout_state(const uint8_t extruder) {
|
||||
const uint8_t runout_states = poll_runout_states();
|
||||
#if MULTI_FILAMENT_SENSOR
|
||||
if ( !TERN0(DUAL_X_CARRIAGE, idex_is_duplicating())
|
||||
&& !TERN0(MULTI_NOZZLE_DUPLICATION, extruder_duplication_enabled)
|
||||
) return TEST(runout_states, extruder); // A specific extruder ran out
|
||||
#else
|
||||
UNUSED(extruder);
|
||||
#endif
|
||||
return !!runout_states; // Any extruder ran out
|
||||
}
|
||||
const uint8_t runout_states = poll_runout_states();
|
||||
#if MULTI_FILAMENT_SENSOR
|
||||
if ( !TERN0(DUAL_X_CARRIAGE, idex_is_duplicating())
|
||||
&& !TERN0(MULTI_NOZZLE_DUPLICATION, extruder_duplication_enabled)
|
||||
) return TEST(runout_states, extruder); // A specific extruder ran out
|
||||
#else
|
||||
UNUSED(extruder);
|
||||
#endif
|
||||
return !!runout_states; // Any extruder ran out
|
||||
}
|
||||
|
||||
static void poll_motion_sensor() {
|
||||
static uint8_t old_state;
|
||||
const uint8_t new_state = poll_runout_pins(),
|
||||
change = old_state ^ new_state;
|
||||
old_state = new_state;
|
||||
static void poll_motion_sensor() {
|
||||
static uint8_t old_state;
|
||||
const uint8_t new_state = TERN(FILAMENT_SWITCH_AND_MOTION, poll_motion_pins, poll_runout_pins)(),
|
||||
change = old_state ^ new_state;
|
||||
old_state = new_state;
|
||||
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
if (change) {
|
||||
SERIAL_ECHOPGM("Motion detected:");
|
||||
for(int e; e < NUM_RUNOUT_SENSORS; e++)
|
||||
for(uint8_t e = 0; e < NUM_RUNOUT_SENSORS; ++e)
|
||||
if (TEST(change, e)) SERIAL_CHAR(' ', '0' + e);
|
||||
SERIAL_EOL();
|
||||
}
|
||||
@@ -262,32 +278,30 @@ class FilamentSensorCore : public FilamentSensorBase {
|
||||
motion_detected |= change;
|
||||
}
|
||||
|
||||
public:
|
||||
static void block_completed(const block_t * const b) {
|
||||
if (runout.mode[active_extruder] != RM_MOTION_SENSOR) return;
|
||||
public:
|
||||
static void block_completed(const block_t * const b) {
|
||||
// If the sensor wheel has moved since the last call to
|
||||
// this method reset the runout counter for the extruder.
|
||||
if (TEST(motion_detected, b->extruder))
|
||||
TERN(FILAMENT_SWITCH_AND_MOTION, filament_motion_present, filament_present)(b->extruder);
|
||||
|
||||
// If the sensor wheel has moved since the last call to
|
||||
// this method reset the runout counter for the extruder.
|
||||
if (TEST(motion_detected, b->extruder))
|
||||
filament_present(b->extruder);
|
||||
|
||||
// Clear motion triggers for next block
|
||||
motion_detected = 0;
|
||||
}
|
||||
// Clear motion triggers for next block
|
||||
motion_detected = 0;
|
||||
}
|
||||
|
||||
static void run() {
|
||||
if (runout.mode[active_extruder] == RM_MOTION_SENSOR) {
|
||||
poll_motion_sensor();
|
||||
}
|
||||
else if (runout.mode[active_extruder] != RM_NONE) {
|
||||
for(int s = 0; s < NUM_RUNOUT_SENSORS; s++) {
|
||||
for(uint8_t s = 0; s < NUM_RUNOUT_SENSORS; ++s) {
|
||||
const bool out = poll_runout_state(s);
|
||||
if (!out) filament_present(s);
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
static uint8_t was_out; // = 0
|
||||
if (out != TEST(was_out, s)) {
|
||||
TBI(was_out, s);
|
||||
SERIAL_ECHOLNF(F("Filament Sensor "), AS_DIGIT(s), out ? F(" OUT") : F(" IN"));
|
||||
SERIAL_ECHOLN(F("Filament Sensor "), AS_DIGIT(s), out ? F(" OUT") : F(" IN"));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -298,19 +312,32 @@ class FilamentSensorCore : public FilamentSensorBase {
|
||||
|
||||
/********************************* RESPONSE TYPE *********************************/
|
||||
|
||||
typedef struct {
|
||||
float runout[NUM_RUNOUT_SENSORS];
|
||||
Flags<NUM_RUNOUT_SENSORS> runout_reset; // Reset runout later
|
||||
#if ENABLED(FILAMENT_SWITCH_AND_MOTION)
|
||||
float motion[NUM_MOTION_SENSORS];
|
||||
Flags<NUM_MOTION_SENSORS> motion_reset; // Reset motion later
|
||||
#endif
|
||||
} countdown_t;
|
||||
|
||||
// RunoutResponseDelayed triggers a runout event only if the length
|
||||
// of filament specified by FIL_RUNOUT_DISTANCE_MM has been fed
|
||||
// during a runout condition.
|
||||
class RunoutResponseDelayed {
|
||||
private:
|
||||
static volatile float runout_mm_countdown[NUM_RUNOUT_SENSORS];
|
||||
static countdown_t mm_countdown;
|
||||
|
||||
public:
|
||||
static float runout_distance_mm[NUM_RUNOUT_SENSORS];
|
||||
static int8_t runout_count[NUM_RUNOUT_SENSORS];
|
||||
|
||||
static void reset() {
|
||||
for(int i = 0; i < NUM_RUNOUT_SENSORS; i++) filament_present(i);
|
||||
}
|
||||
static void reset() {
|
||||
for (uint8_t i = 0; i < NUM_RUNOUT_SENSORS; ++i) filament_present(i);
|
||||
#if ENABLED(FILAMENT_SWITCH_AND_MOTION)
|
||||
for (uint8_t i = 0; i < NUM_MOTION_SENSORS; ++i) filament_motion_present(i);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void run() {
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
|
||||
@@ -318,29 +345,27 @@ class RunoutResponseDelayed {
|
||||
const millis_t ms = millis();
|
||||
if (ELAPSED(ms, t)) {
|
||||
t = millis() + 1000UL;
|
||||
for(int i; i < NUM_RUNOUT_SENSORS; i++)
|
||||
SERIAL_ECHOF(i ? F(", ") : F("Remaining mm: "), runout_mm_countdown[i]);
|
||||
for(uint8_t i; i < NUM_RUNOUT_SENSORS; ++i)
|
||||
SERIAL_ECHO(i ? F(", ") : F("Remaining mm: "), mm_countdown[i]);
|
||||
#if ENABLED(FILAMENT_SWITCH_AND_MOTION)
|
||||
for (uint8_t i = 0; i < NUM_MOTION_SENSORS; ++i)
|
||||
SERIAL_ECHO(i ? F(", ") : F("Motion remaining mm: "), mm_countdown.motion[i]);
|
||||
#endif
|
||||
SERIAL_EOL();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint8_t has_run_out() {
|
||||
uint8_t runout_flags = 0;
|
||||
for(int i = 0; i < NUM_RUNOUT_SENSORS; i++) if (runout_mm_countdown[i] < 0) SBI(runout_flags, i);
|
||||
return runout_flags;
|
||||
static runout_flags_t has_run_out() {
|
||||
runout_flags_t runout_flags{0};
|
||||
for (uint8_t i = 0; i < NUM_RUNOUT_SENSORS; ++i) if (runout_count[i] < 0) runout_flags.set(i);
|
||||
return runout_flags;
|
||||
}
|
||||
|
||||
static void filament_present(const uint8_t extruder) {
|
||||
runout_mm_countdown[extruder] = runout_distance_mm[extruder];
|
||||
}
|
||||
static void block_completed(const block_t * const) { }
|
||||
|
||||
static void block_completed(const block_t * const b) {
|
||||
if (b->steps.x || b->steps.y || b->steps.z || did_pause_print) { // Allow pause purge move to re-trigger runout state
|
||||
// Only trigger on extrusion with XYZ movement to allow filament change and retract/recover.
|
||||
const uint8_t e = b->extruder;
|
||||
const int32_t steps = b->steps.e;
|
||||
runout_mm_countdown[e] -= (TEST(b->direction_bits, E_AXIS) ? -steps : steps) * planner.mm_per_step[E_AXIS_N(e)];
|
||||
static void filament_present(const uint8_t extruder) {
|
||||
runout_count[extruder] = runout_distance_mm[extruder];
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ void GcodeSuite::G30() {
|
||||
F( " Z:"), p_float_t(measured_z, 2)
|
||||
);
|
||||
msg.echoln();
|
||||
#if ANY(DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI)
|
||||
#if ANY(DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI, EXTENSIBLE_UI)
|
||||
ui.set_status(msg);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1537,14 +1537,16 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
|
||||
#endif
|
||||
|
||||
#if ENABLED(LCD_BED_TRAMMING)
|
||||
#ifndef BED_TRAMMING_INSET_LFRB
|
||||
#error "LCD_BED_TRAMMING requires BED_TRAMMING_INSET_LFRB values."
|
||||
#elif ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
#if !HAS_BED_PROBE
|
||||
#error "BED_TRAMMING_USE_PROBE requires a real probe."
|
||||
#elif ENABLED(SENSORLESS_PROBING)
|
||||
#error "BED_TRAMMING_USE_PROBE is incompatible with SENSORLESS_PROBING."
|
||||
#endif
|
||||
#else
|
||||
#ifndef BED_TRAMMING_INSET_LFRB
|
||||
#error "LCD_BED_TRAMMING requires BED_TRAMMING_INSET_LFRB values."
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -3514,9 +3516,9 @@ static_assert(_PLUS_TEST(3), "DEFAULT_MAX_ACCELERATION values must be positive."
|
||||
#error "LED_CONTROL_MENU requires an LCD controller that implements the menu."
|
||||
#endif
|
||||
|
||||
#if ENABLED(CUSTOM_MENU_MAIN) && NONE(HAS_MARLINUI_MENU, TOUCH_UI_FTDI_EVE, TFT_LVGL_UI)
|
||||
#error "CUSTOM_MENU_MAIN requires an LCD controller that implements the menu."
|
||||
#endif
|
||||
//#if ENABLED(CUSTOM_MENU_MAIN) && NONE(HAS_MARLINUI_MENU, TOUCH_UI_FTDI_EVE, TFT_LVGL_UI)
|
||||
//#error "CUSTOM_MENU_MAIN requires an LCD controller that implements the menu."
|
||||
//#endif
|
||||
|
||||
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL) && DISABLED(NEOPIXEL_LED)
|
||||
#error "CASE_LIGHT_USE_NEOPIXEL requires NEOPIXEL_LED."
|
||||
|
||||
@@ -109,7 +109,7 @@ void MarlinUI::clear_lcd() {
|
||||
#define VERSION_Y 84
|
||||
#endif
|
||||
dwinJPGShowAndCache(0); // Ensure DACAI stays on boot screen
|
||||
dwinDrawString(false, font10x20, Color_Yellow, Color_Bg_Black, INFO_CENTER - (dwin_string.length * 10) / 2, 230, S(dwin_string.string()));
|
||||
dwinDrawString(false, font10x20, COLOR_YELLOW, COLOR_BG_BLACK, INFO_CENTER - (dwin_string.length * 10) / 2, 230, S(dwin_string.string()));
|
||||
TERN_(SHOW_CUSTOM_BOOTSCREEN, safe_delay(CUSTOM_BOOTSCREEN_TIMEOUT));
|
||||
clear_lcd();
|
||||
|
||||
|
||||
@@ -199,7 +199,7 @@ typedef struct {
|
||||
} select_t;
|
||||
select_t select_page{0}, select_print{0};
|
||||
|
||||
#if ENABLED(LCD_BED_TRAMMING)
|
||||
#if ENABLED(LCD_BED_TRAMMING) && DISABLED(BED_TRAMMING_USE_PROBE)
|
||||
constexpr float bed_tramming_inset_lfbr[] = BED_TRAMMING_INSET_LFRB;
|
||||
#endif
|
||||
|
||||
@@ -2290,6 +2290,11 @@ void setFlow() { setPIntOnClick(MIN_PRINT_FLOW, MAX_PRINT_FLOW, []{ planner.refr
|
||||
#if ENABLED(LCD_BED_TRAMMING)
|
||||
|
||||
void tramXY(const uint8_t point, float &x, float &y) {
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
float bed_tramming_inset_lfbr[] = {X_MIN_BED + probe.min_x() + 0.01f, Y_MIN_BED + probe.min_y() + 0.01f,
|
||||
X_MAX_BED - probe.max_x() - 0.01f, Y_MAX_BED - probe.max_y() - 0.01f };
|
||||
#endif
|
||||
|
||||
switch (point) {
|
||||
case 0:
|
||||
LCD_MESSAGE(MSG_TRAM_FL);
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
#include "../../../inc/MarlinConfig.h"
|
||||
|
||||
#include "../../../module/motion.h"
|
||||
|
||||
#if HAS_COLOR_LEDS
|
||||
#include "../../../feature/leds/leds.h"
|
||||
|
||||
|
||||
@@ -203,15 +203,20 @@ bool hasPrintTimer = false;
|
||||
}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
|
||||
ScreenHandler.OnMeshLevelingUpdate(xpos, ypos, zval);
|
||||
#if HAS_BED_PROBE
|
||||
ScreenHandler.OnMeshLevelingUpdate(xpos, ypos, zval);
|
||||
#endif
|
||||
}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const ExtUI::probe_state_t state) {
|
||||
ScreenHandler.OnMeshLevelingUpdate(xpos, ypos, 0);
|
||||
#if HAS_BED_PROBE
|
||||
ScreenHandler.OnMeshLevelingUpdate(xpos, ypos, 0);
|
||||
#endif
|
||||
}
|
||||
void onLevelingDone() {
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
|
||||
@@ -395,7 +395,12 @@ void DGUSReturnKeyCodeHandler::Command_SettingsMenu(DGUS_VP &vp, void *data) {
|
||||
}
|
||||
|
||||
static void _gotoTrammingPoint(unsigned char point) {
|
||||
constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
float lfrb[4] = {X_MIN_BED + probe.min_x(), Y_MIN_BED + probe.min_y(),
|
||||
X_MAX_BED - probe.max_x(), Y_MAX_BED - probe.max_y() };
|
||||
#else
|
||||
constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
#endif
|
||||
float x, y;
|
||||
|
||||
switch (point) {
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
||||
#include "../../../feature/pause.h"
|
||||
#endif
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
#include "../../../module/probe.h"
|
||||
#endif
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
#include "../../../feature/powerloss.h"
|
||||
#endif
|
||||
@@ -464,7 +467,14 @@ void DGUSRxHandler::moveToPoint(DGUS_VP &vp, void *data_ptr) {
|
||||
}
|
||||
|
||||
const uint8_t point = ((uint8_t*)data_ptr)[1];
|
||||
constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
float lfrb[4] = {X_MIN_BED + probe.min_x(), Y_MIN_BED + probe.min_y(),
|
||||
X_MAX_BED - probe.max_x(), Y_MAX_BED - probe.max_y() };
|
||||
#else
|
||||
constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
#endif
|
||||
|
||||
float x, y;
|
||||
|
||||
switch (point) {
|
||||
|
||||
@@ -310,6 +310,10 @@ if(idleThrottling == 400) {
|
||||
rtscheck.RTS_SndData(28, RunoutMode);
|
||||
if(getRunoutMode(getActiveTool()) == 7)
|
||||
rtscheck.RTS_SndData(25, RunoutMode);
|
||||
if(getFilamentRunoutEnabled(getActiveTool()))
|
||||
rtscheck.RTS_SndData(3, RunoutToggle); /*On*/
|
||||
else
|
||||
rtscheck.RTS_SndData(2, RunoutToggle); /*Off*/
|
||||
#endif
|
||||
|
||||
switch(babystepIncrementIndex)
|
||||
@@ -358,11 +362,13 @@ if(idleThrottling == 400) {
|
||||
}
|
||||
if(idleThrottling == 500) {
|
||||
|
||||
#if ENABLED(CASE_LIGHT_ENABLE)
|
||||
#if CASE_LIGHT_ENABLE
|
||||
if(getCaseLightState())
|
||||
rtscheck.RTS_SndData(3, LedToggle); /*On*/
|
||||
else
|
||||
rtscheck.RTS_SndData(2, LedToggle); /*Off*/
|
||||
#else
|
||||
rtscheck.RTS_SndData(2, LedToggle); /*Off*/
|
||||
#endif
|
||||
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
@@ -370,7 +376,10 @@ if(idleThrottling == 400) {
|
||||
rtscheck.RTS_SndData(3, PowerLossToggle); /*On*/
|
||||
else
|
||||
rtscheck.RTS_SndData(2, PowerLossToggle); /*Off*/
|
||||
#else
|
||||
rtscheck.RTS_SndData(2, PowerLossToggle); /*Off*/
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (startprogress == 0)
|
||||
@@ -606,7 +615,7 @@ int RTSSHOW::RTS_RecData()
|
||||
if(!DWIN_SERIAL.connected())
|
||||
DWIN_SERIAL.begin(115200);
|
||||
|
||||
//#if ENABLED(DGUS_SERIAL_STATS_RX_BUFFER_OVERRUNS)
|
||||
#if ENABLED(DGUS_SERIAL_STATS_RX_BUFFER_OVERRUNS) && defined(__AVR__)
|
||||
if ((!DWIN_SERIAL.available() && DWIN_SERIAL.buffer_overruns()) || DWIN_SERIAL.dropped() > 0) {
|
||||
// Overrun, but reset the flag only when the buffer is empty
|
||||
// We want to extract as many as valid datagrams possible...
|
||||
@@ -615,8 +624,7 @@ int RTSSHOW::RTS_RecData()
|
||||
//DWIN_SERIAL.reset_rx_overun();
|
||||
DWIN_SERIAL.flush();
|
||||
}
|
||||
//#endif
|
||||
|
||||
#endif
|
||||
while (DWIN_SERIAL.available()) {
|
||||
switch (rx_datagram_state) {
|
||||
|
||||
@@ -790,16 +798,18 @@ void RTSSHOW::RTS_SndData(const char *str, unsigned long addr, unsigned char cmd
|
||||
uint8_t expected_tx = 6 + len; // 6 bytes header + payload.
|
||||
const millis_t try_until = ExtUI::safe_millis() + 1000;
|
||||
|
||||
while (expected_tx > DWIN_SERIAL.get_tx_buffer_free()) {
|
||||
if (ELAPSED(ExtUI::safe_millis(), try_until)) return; // Stop trying after 1 second
|
||||
#if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS) && defined(__AVR__)
|
||||
while (expected_tx > DWIN_SERIAL.get_tx_buffer_free()) {
|
||||
if (ELAPSED(ExtUI::safe_millis(), try_until)) return; // Stop trying after 1 second
|
||||
|
||||
#ifdef ARDUINO_ARCH_STM32
|
||||
DWIN_SERIAL.flush();
|
||||
#else
|
||||
DWIN_SERIAL.flushTX();
|
||||
#endif
|
||||
delay(50);
|
||||
}
|
||||
#ifdef ARDUINO_ARCH_STM32
|
||||
DWIN_SERIAL.flush();
|
||||
#else
|
||||
DWIN_SERIAL.flushTX();
|
||||
#endif
|
||||
delay(50);
|
||||
}
|
||||
#endif
|
||||
|
||||
int dataRec2;
|
||||
do { dataRec2 = rtscheck.RTS_RecData(); } while (dataRec2 > 0); // Since OS4 returns an ack on an 82 command, receive and purge it now
|
||||
@@ -920,16 +930,18 @@ void RTSSHOW::WriteVariable(uint16_t adr, const void* values, uint8_t valueslen,
|
||||
uint8_t expected_tx = 6 + valueslen; // 6 bytes header + payload.
|
||||
const millis_t try_until = ExtUI::safe_millis() + 1000;
|
||||
|
||||
while (expected_tx > DWIN_SERIAL.get_tx_buffer_free()) {
|
||||
if (ELAPSED(ExtUI::safe_millis(), try_until)) return; // Stop trying after 1 second
|
||||
#if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS) && defined(__AVR__)
|
||||
while (expected_tx > DWIN_SERIAL.get_tx_buffer_free()) {
|
||||
if (ELAPSED(ExtUI::safe_millis(), try_until)) return; // Stop trying after 1 second
|
||||
|
||||
#ifdef ARDUINO_ARCH_STM32
|
||||
DWIN_SERIAL.flush();
|
||||
#else
|
||||
DWIN_SERIAL.flushTX();
|
||||
#endif
|
||||
delay(50);
|
||||
}
|
||||
#ifdef ARDUINO_ARCH_STM32
|
||||
DWIN_SERIAL.flush();
|
||||
#else
|
||||
DWIN_SERIAL.flushTX();
|
||||
#endif
|
||||
delay(50);
|
||||
}
|
||||
#endif
|
||||
|
||||
int dataRec2;
|
||||
do { dataRec2 = rtscheck.RTS_RecData(); } while (dataRec2 > 0); // Since OS4 returns an ack on an 82 command, receive and purge it now
|
||||
@@ -1045,7 +1057,13 @@ void RTSSHOW::RTS_HandleData()
|
||||
return;
|
||||
}
|
||||
|
||||
constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
#if ENABLED(LCD_BED_TRAMMING) && DISABLED(BED_TRAMMING_USE_PROBE)
|
||||
constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
#elif ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
float lfrb[4] = { getBedProbeLimits().pos[0] + 1, getBedProbeLimits().pos[1] + 1, getBedProbeLimits().pos[2] - 1, getBedProbeLimits().pos[3] - 1};
|
||||
SERIAL_ECHOLN("ProbePnts : ", lfrb[0], " - ", lfrb[1], " - ", lfrb[2], " - ", lfrb[3]);
|
||||
#endif
|
||||
|
||||
//SERIAL_ECHOLNPGM_P(PSTR("BeginSwitch"));
|
||||
|
||||
switch (Checkkey)
|
||||
@@ -1648,6 +1666,9 @@ void RTSSHOW::RTS_HandleData()
|
||||
break;
|
||||
}
|
||||
}
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
char g30CommandStr[20];
|
||||
#endif
|
||||
switch(recdat.data[0])
|
||||
{
|
||||
case 1: // Z-axis to home
|
||||
@@ -1744,42 +1765,72 @@ void RTSSHOW::RTS_HandleData()
|
||||
|
||||
case 6: // Assitant Level , Centre 1
|
||||
{
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm(X_CENTER, (axis_t)X);
|
||||
setAxisPosition_mm(Y_CENTER, (axis_t)Y);
|
||||
waitway = 6;
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
sprintf(g30CommandStr, "G30X%iY%i", X_CENTER, Y_CENTER);
|
||||
SERIAL_ECHOLN(g30CommandStr);
|
||||
injectCommands(g30CommandStr);
|
||||
#else
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm(X_CENTER, (axis_t)X);
|
||||
setAxisPosition_mm(Y_CENTER, (axis_t)Y);
|
||||
waitway = 6;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case 7: // Assitant Level , Front Left 2
|
||||
{
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MIN_BED + lfrb[0]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MIN_BED + lfrb[1]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
sprintf(g30CommandStr, "G30X%iY%i", (int)lfrb[0], (int)lfrb[1]);
|
||||
SERIAL_ECHOLN(g30CommandStr);
|
||||
injectCommands(g30CommandStr);
|
||||
#else
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MIN_BED + lfrb[0]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MIN_BED + lfrb[1]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case 8: // Assitant Level , Front Right 3
|
||||
{
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MAX_BED - lfrb[2]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MIN_BED + lfrb[1]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
sprintf(g30CommandStr, "G30X%iY%i", (int)lfrb[2], (int)lfrb[1]);
|
||||
SERIAL_ECHOLN(g30CommandStr);
|
||||
injectCommands(g30CommandStr);
|
||||
#else
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MAX_BED - lfrb[2]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MIN_BED + lfrb[1]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case 9: // Assitant Level , Back Right 4
|
||||
{
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MAX_BED - lfrb[2]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MAX_BED - lfrb[3]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
sprintf(g30CommandStr, "G30X%iY%i", (int)lfrb[2], (int)lfrb[3]);
|
||||
SERIAL_ECHOLN(g30CommandStr);
|
||||
injectCommands(g30CommandStr);
|
||||
#else
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MAX_BED - lfrb[2]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MAX_BED - lfrb[3]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case 10: // Assitant Level , Back Left 5
|
||||
{
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MIN_BED + lfrb[0]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MAX_BED - lfrb[3]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
sprintf(g30CommandStr, "G30X%iY%i", (int)lfrb[0], (int)lfrb[3]);
|
||||
SERIAL_ECHOLN(g30CommandStr);
|
||||
injectCommands(g30CommandStr);
|
||||
#else
|
||||
setAxisPosition_mm(BED_TRAMMING_Z_HOP, (axis_t)Z);
|
||||
setAxisPosition_mm((X_MIN_BED + lfrb[0]), (axis_t)X);
|
||||
setAxisPosition_mm((Y_MAX_BED - lfrb[3]), (axis_t)Y);
|
||||
waitway = 6;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case 11: // Autolevel switch
|
||||
@@ -2390,7 +2441,7 @@ void SetTouchScreenConfiguration() {
|
||||
if (Settings.display_sound) cfg_bits |= 1UL << 3; // 3: audio
|
||||
if (Settings.display_standby) cfg_bits |= 1UL << 2; // 2: backlight on standby
|
||||
if(Settings.screen_rotation==10) cfg_bits |= 1UL << 1; // 1 & 0: Inversion
|
||||
#if DISABLED(LOWRES_DWIN)
|
||||
#if (DISABLED(LOWRES_DWIN) && DISABLED(DWIN_PORTRAIT)) || (ENABLED(LOWRES_DWIN) && ENABLED(DWIN_PORTRAIT))
|
||||
cfg_bits |= 1UL << 0; // Portrait Mode or 800x480 display has 0 point rotated 90deg from 480x272 display
|
||||
#endif
|
||||
|
||||
|
||||
@@ -74,7 +74,6 @@ namespace ExtUI {
|
||||
#define PrintscheduleIcon 0x100E
|
||||
#define Timehour 0x1010
|
||||
#define Timemin 0x1012
|
||||
#define IconPrintstatus 0x1014
|
||||
#define Percentage 0x1016
|
||||
#define FanKeyIcon 0x101E
|
||||
#define Flowrate 0x1300
|
||||
|
||||
@@ -922,6 +922,7 @@ namespace ExtUI {
|
||||
#if HAS_BED_PROBE
|
||||
float getProbeOffset_mm(const axis_t axis) { return probe.offset.pos[axis]; }
|
||||
void setProbeOffset_mm(const_float_t val, const axis_t axis) { probe.offset.pos[axis] = val; }
|
||||
probe_limits getBedProbeLimits() {return (probe_limits){probe.min_x(), probe.min_y(), probe.max_x(), probe.max_y()};}
|
||||
#endif
|
||||
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
|
||||
@@ -58,11 +58,12 @@ namespace ExtUI {
|
||||
|
||||
static constexpr size_t eeprom_data_size = 48;
|
||||
|
||||
enum axis_t : uint8_t { X, Y, Z, I, J, K, U, V, W, X2, Y2, Z2, Z3, Z4 };
|
||||
enum extruder_t : uint8_t { E0, E1, E2, E3, E4, E5, E6, E7 };
|
||||
enum heater_t : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER, COOLER };
|
||||
enum fan_t : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7 };
|
||||
enum result_t : uint8_t { PID_STARTED, PID_BAD_HEATER_ID, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, PID_DONE };
|
||||
enum axis_t : uint8_t { X, Y, Z, I, J, K, U, V, W, X2, Y2, Z2, Z3, Z4 };
|
||||
enum extruder_t : uint8_t { E0, E1, E2, E3, E4, E5, E6, E7 };
|
||||
enum heater_t : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER, COOLER };
|
||||
enum fan_t : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7 };
|
||||
enum result_t : uint8_t { PID_STARTED, PID_BAD_HEATER_ID, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, PID_DONE };
|
||||
struct probe_limits { float pos[4];};
|
||||
|
||||
constexpr uint8_t extruderCount = EXTRUDERS;
|
||||
constexpr uint8_t hotendCount = HOTENDS;
|
||||
@@ -292,6 +293,7 @@ namespace ExtUI {
|
||||
#if HAS_BED_PROBE
|
||||
float getProbeOffset_mm(const axis_t);
|
||||
void setProbeOffset_mm(const_float_t, const axis_t);
|
||||
probe_limits getBedProbeLimits();
|
||||
#endif
|
||||
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
|
||||
@@ -94,16 +94,22 @@ static_assert(COUNT(lco) == 4 || lcodiff == 1 || lcodiff == 3, "The first two BE
|
||||
constexpr int nr_edge_points = tramming_3_points ? 3 : 4;
|
||||
constexpr int available_points = nr_edge_points + ENABLED(BED_TRAMMING_INCLUDE_CENTER);
|
||||
constexpr int center_index = TERN(BED_TRAMMING_INCLUDE_CENTER, available_points - 1, -1);
|
||||
constexpr float inset_lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
constexpr xy_pos_t lf { (X_MIN_BED) + inset_lfrb[0], (Y_MIN_BED) + inset_lfrb[1] },
|
||||
#if DISABLED(BED_TRAMMING_USE_PROBE)
|
||||
constexpr float inset_lfrb[4] = BED_TRAMMING_INSET_LFRB;
|
||||
constexpr xy_pos_t lf { (X_MIN_BED) + inset_lfrb[0], (Y_MIN_BED) + inset_lfrb[1] },
|
||||
rb { (X_MAX_BED) - inset_lfrb[2], (Y_MAX_BED) - inset_lfrb[3] };
|
||||
|
||||
#endif
|
||||
static int8_t bed_corner;
|
||||
|
||||
/**
|
||||
* Move to the next corner coordinates
|
||||
*/
|
||||
static void _lcd_goto_next_corner() {
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
xy_pos_t lf = {X_MIN_BED + probe.min_x() + 0.01f, Y_MIN_BED + probe.min_y() + 0.01f },
|
||||
rb = {X_MAX_BED - probe.max_x() - 0.01f, Y_MAX_BED - probe.max_y() - 0.01f };
|
||||
#endif
|
||||
|
||||
xy_pos_t corner_point = lf; // Left front
|
||||
|
||||
if (tramming_3_points) {
|
||||
@@ -165,11 +171,6 @@ static void _lcd_goto_next_corner() {
|
||||
|
||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||
|
||||
#define VALIDATE_POINT(X, Y, STR) static_assert(Probe::build_time::can_reach((X), (Y)), \
|
||||
"BED_TRAMMING_INSET_LFRB " STR " inset is not reachable with the default NOZZLE_TO_PROBE offset and PROBING_MARGIN.")
|
||||
VALIDATE_POINT(lf.x, Y_CENTER, "left"); VALIDATE_POINT(X_CENTER, lf.y, "front");
|
||||
VALIDATE_POINT(rb.x, Y_CENTER, "right"); VALIDATE_POINT(X_CENTER, rb.y, "back");
|
||||
|
||||
#ifndef PAGE_CONTAINS
|
||||
#define PAGE_CONTAINS(...) true
|
||||
#endif
|
||||
|
||||
@@ -486,7 +486,7 @@ void __O2 Endstops::report_states() {
|
||||
print_es_state(PROBE_TRIGGERED(), F(STR_Z_PROBE));
|
||||
#endif
|
||||
#if HAS_FILAMENT_SENSOR
|
||||
for(int i = 1; i<NUM_RUNOUT_SENSORS;i++) {
|
||||
for (uint8_t i = 1; i <= NUM_RUNOUT_SENSORS; ++i) {
|
||||
pin_t pin;
|
||||
switch (i) {
|
||||
default: continue;
|
||||
@@ -497,18 +497,23 @@ void __O2 Endstops::report_states() {
|
||||
const RunoutMode rm = runout.mode[i - 1];
|
||||
const uint8_t outval = runout.out_state(i - 1);
|
||||
|
||||
SERIAL_ECHOPGM(STR_FILAMENT);
|
||||
if (i > 1) SERIAL_CHAR(' ', '0' + i);
|
||||
SERIAL_ECHOPGM(": ");
|
||||
if (rm == RM_NONE)
|
||||
SERIAL_ECHOLNPGM(STR_OFF);
|
||||
else if (rm == RM_MOTION_SENSOR) {
|
||||
SERIAL_ECHOPGM("MOTION : ");
|
||||
print_es_state(extDigitalRead(pin) == outval);
|
||||
}
|
||||
else
|
||||
SERIAL_ECHOLNPGM_P(extDigitalRead(pin) == outval ? PSTR("OUT") : PSTR("PRESENT"));
|
||||
#if DISABLED(SLIM_LCD_MENUS)
|
||||
SERIAL_ECHOPGM(STR_FILAMENT);
|
||||
if (i > 1) SERIAL_CHAR(' ', '0' + i);
|
||||
SERIAL_ECHOPGM(": ");
|
||||
if (rm == RM_NONE)
|
||||
SERIAL_ECHOLNPGM(STR_OFF);
|
||||
else if (rm == RM_MOTION_SENSOR) {
|
||||
SERIAL_ECHOPGM("MOTION : ");
|
||||
print_es_state(extDigitalRead(pin) == outval);
|
||||
}
|
||||
else
|
||||
SERIAL_ECHOLNPGM_P(extDigitalRead(pin) == outval ? PSTR("OUT") : PSTR("PRESENT"));
|
||||
#else
|
||||
print_es_state(extDigitalRead(pin) == outval, F(STR_FILAMENT));
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TERN_(BLTOUCH, bltouch._reset_SW_mode());
|
||||
|
||||
@@ -111,6 +111,11 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(MINIPANEL)
|
||||
#undef DOGLCD_CS
|
||||
#define DOGLCD_CS 28
|
||||
#endif
|
||||
|
||||
/**
|
||||
PIN: 0 Port: B0 E0_DIR_PIN protected
|
||||
PIN: 1 Port: B1 E0_STEP_PIN protected
|
||||
|
||||
@@ -1,16 +1,74 @@
|
||||
## Dwin Touch/TFT Screen supported firmware
|
||||
## Creality 427 Board TFT and Touchscreen Firmware For F1rst Layer Kits
|
||||
|
||||
- Info screen Version Code Reference
|
||||
- - Char 1 - Driver (A-4988, T-TMC220X)
|
||||
- - Char 2 - Z Stop(B-BLTouch, E-Endstop)
|
||||
- - Char 3 - Screen(L-LowRes, H-THighRes)
|
||||
- - Char 4 - Bed (A-AC, D-DC)
|
||||
- - Char 5 - Endstop(O-Optical Y, M-Mechanical Y)
|
||||
- - Char 6 - Extruder (T-Titan, B-BMG, L-LGX, S-Basic)
|
||||
This branch is specifically intended to support the kits sold by F1rst Layer including Creality 427 boards, touchscreens, and other upgrades.
|
||||
|
||||
|
||||
- [Dual Gear Extruders](https://amzn.to/3lZfg08)
|
||||
- [Creality 427 Board with Runout Sensor](https://amzn.to/2Y1jrke)
|
||||
- [Creality 427 Board and BLTouch](https://amzn.to/3CT57Jk)
|
||||
- [E3V2 Upgrade Kit (Screen, 427 board, bltouch, runout)](https://amzn.to/3EZnhec)
|
||||
- [Ender 3 100mm Z Extension Kit](https://amzn.to/2XWH78F)
|
||||
|
||||
- [CR10S Pro / V2](https://www.tinymachines3d.com/products/cr-10s-pro-v2-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [CR10 Max](https://www.tinymachines3d.com/products/creality-cr-10-max-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [Ender 5 Plus](https://www.tinymachines3d.com/products/ender-5-plus-silent-board-custom-dual-z-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [Ender 6](https://amzn.to/3JRyOhi)
|
||||
- [CR-X / Pro](https://www.tinymachines3d.com/products/creality-cr-x-pro-3d-printer-with-dual-extruder-and-bl-touch?rfsn=3419592.cc302fe)
|
||||
- [CR10 V2 ](https://www.tinymachines3d.com/products/creality-cr-10-v2-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [CR10 V3 ](https://www.tinymachines3d.com/products/creality-cr-10-v3-plus-3d-printer-with-genuine-e3d-direct-drive-extruder-and-bl-touch?rfsn=3419592.cc302fe)
|
||||
- [Ender 3 / Pro 4.2.2 and 4.2.7](https://amzn.to/3BRHlxY)
|
||||
- [Ender 3 V2](https://www.tinymachines3d.com/products/ender-3-v2?rfsn=3419592.cc302fe)
|
||||
- [Ender 3 Max](https://www.tinymachines3d.com/products/ender-3-max-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [Ender 5 / Pro 4.2.2 and 4.2.7](https://amzn.to/3gMb2Yu)
|
||||
- [CR10S5 500mm](https://www.tinymachines3d.com/products/creality-cr-10-s5-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [CR6 SE](https://www.tinymachines3d.com/products/creality-cr-6-se-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [CR6 Max](https://www.tinymachines3d.com/products/creality-cr-6-max-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [CR10 Smart](https://www.tinymachines3d.com/products/creality-cr-10-smart-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [Ender 7](https://www.tinymachines3d.com/products/ender-7-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [CR30](https://www.tinymachines3d.com/products/cr-30-infinite-z-belt-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [Sermoon D1](https://amzn.to/3LXfZeD)
|
||||
- [CR5 / Pro HT](https://amzn.to/3gWvpBt)
|
||||
- [Ender 3 S1](https://www.tinymachines3d.com/products/ender-3-s1-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [Ender 2 Pro](https://www.tinymachines3d.com/products/ender-2-pro-3d-printer?rfsn=3419592.cc302fe)
|
||||
|
||||
- CR10S, CR10S4, CR20 and Pro, CR10, CR10Mini, CR2020, Ender 4, Ender 2 - Legacy support
|
||||
- These configurations exist however due to age and product availability are no longer actively tested
|
||||
|
||||
## Coming Soon
|
||||
- [CR10 Smart Pro](https://www.tinymachines3d.com/products/cr-10-smart-pro-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [CR200B]()
|
||||
|
||||
## Resin machines below from Tiny Machines are listed simply as an additional way to help support the project. If youre considering buying one, please do so through the following links :
|
||||
- [Halot One CL-60](https://www.tinymachines3d.com/products/halot-one-cl-60-resin-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [LD-002R](https://www.tinymachines3d.com/products/ld-002r-resin-printer?rfsn=3419592.cc302fe)
|
||||
- [LD-002H](https://www.tinymachines3d.com/products/ld-002h-resin-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [LD-006](https://www.tinymachines3d.com/products/ld-006-resin-3d-printer?rfsn=3419592.cc302fe)
|
||||
- [UW-02 Washer](https://www.tinymachines3d.com/products/uw-02-washing-curing-machine?rfsn=3419592.cc302fe)
|
||||
|
||||
|
||||
Ender 3V2 has a dedicated file set. CR10 Smart has a dedicated high resolution screen set. Portrait displays use the CR6/E3 Touch variant and landscape use the combined set.
|
||||
|
||||
Screen files are archived with [7-Zip](https://www.7-zip.org/) simply because it came out 1/5 the file size of a zip file. That added up fast!
|
||||
|
||||
There is a limitation with Windows systems and path depth so the file names need to be shorter than we would prefer. If you get an error compiling due to the path limit, move the folder to the root of your hard drive. Here is a legend to help decode the files:
|
||||
|
||||
- BLT = BLTouch
|
||||
- BIL = Bilinear Leveling
|
||||
- UBL - Unified Bed Leveling
|
||||
- DZ = Dual Z Steppers
|
||||
- Fil = FilamentRunout
|
||||
- Slnt = Creality Silent Board
|
||||
- H = E3D Hemera Extruder
|
||||
- MC = Mosquito Creality mount
|
||||
- ME = Mosquito E3D mount
|
||||
- Melzi Host option disables local SD card to allow more features and buffer for Octoprint control
|
||||
- NF = Noise filtering for machines with cable extensions - reduces homing accuracy!
|
||||
- LR = Stock runout replaced with Lerdge
|
||||
- ZM = BLTouch connected to ZMin port instead of Probe pin 5 connector harness
|
||||
|
||||
## Support
|
||||
|
||||
This firmware is provided to the public as-is with no warranty or guarantee. It's based on a large open source project and there is no entitlement to support. That said, LNL Solutions customers may obtain support through their normal support queue. I will provide support to Patreons as I am able. Aside from this, we are active on many discord channels and typically help anyone we can when we come across them.
|
||||
This firmware is provided to the public as-is with no warranty or guarantee. It's based on a large open source project and there is no entitlement to support. If you are a F1rst Layer customer, you can contact them for support. I will provide support to Patreons as I am able. If you require more immediate support and are not a Tiny Machines 3D or F1rst Layer customer, you may contact Tiny Machines at support@tinymachines3d.com about purchasing support hours. Aside from this, we are active on many Facebook groups as well as several discord channels and typically help anyone we can when we come across them.
|
||||
|
||||
We have now created a dedicated Discord server to handle support and archive relevant guides and instructions. Patreon supporters will get priority assistance.
|
||||
|
||||
@@ -26,9 +84,16 @@ Shout out to Tom Brazier, as nearly all notable improvements to the Marlin core
|
||||
|
||||
Insanity Automation Discord - https://discord.gg/TKmJ85PyG4
|
||||
|
||||
## Primary Notes for DW7.4.8
|
||||
- Added Linear Adv and Input Shaping Screens
|
||||
- Signifigant improvement in response times following changes to new generation machines
|
||||
-- The DWIN OS 3.5 had an option to enable NOACK with an addon bin file. 4.0 has a specific throttled response OS revision. 4.5 needed a totally different UI image flashed. No way it could all live together without completely confusing users so we set about figuring out how to keep universal support and found a balance in data send cycles that the 2560 buffers could still handle the replies without overunning.
|
||||
- Added support for changing runout sensor type on the LCD
|
||||
- Added toggle to change babystepping increment on the LCD
|
||||
- Thanks to EvilGremlin for some of the icon and display graphics work
|
||||
|
||||
## Primary Notes for DW7.4.7
|
||||
- Added IDEX screens
|
||||
- Added Branch / support for Tenlog IDEX machines with LNL Solutions
|
||||
- Fan adjustment now numeric instead of simple on/off
|
||||
- Tap Z offset on adjustment screen to type numeric value
|
||||
- Sync to 2.1.2 with LA now on for all builds, Silent specific builds eliminated
|
||||
@@ -78,47 +143,13 @@ Insanity Automation Discord - https://discord.gg/TKmJ85PyG4
|
||||
- CR30 Support Added
|
||||
|
||||
## Primary Notes for DW7.4
|
||||
- Added Screen Calibration Options
|
||||
-- Standby Brightness
|
||||
-- Volume
|
||||
-- Both now saved in EEPROM
|
||||
-- Screen configuration code based loosely on the work from the CR6 community modified for this screen model
|
||||
-- Automatic Screen rotation for the Ender 6 (Default is upside-down)
|
||||
- Manual Mesh Controls for no Probe machines
|
||||
-- CRX and Ender 6 with no Probe can now use all mesh controls
|
||||
-- All machines now use the same screen files except for Ender 3 V2 Rotary Dial machines and CR6
|
||||
- Home button added to 5 point adjustment screen
|
||||
- Tap mesh values to manually type in a new value - allows for manual adjustment of mesh values
|
||||
- Additional functions, messaging on pause / filament runout
|
||||
-- No will no longer cancel print
|
||||
-- Depending on state, if only option is continue (eg Reheat, Load filament) Any response continues
|
||||
-- On final Confirm Continue, No will purge more filament and Yes will resume
|
||||
- Most places temperatures are shown, can now tap them to type in a value to set the temerature
|
||||
- Updated to Marlin 2.0.9 Base
|
||||
- CR6 Branches merged in
|
||||
-- Support for this machine is primarily based on the fork by the [CR6 Community](https://github.com/CR6Community)
|
||||
|
||||
## Primary notes for DW7.3
|
||||
- File browser rewritten to support paging as well as subdirectories
|
||||
-- New file browser has a limit of a 66 character directory depth. This can be expanded at the cost of more RAM if users find this more limiting.
|
||||
-- Due to the above, the current recommendation is to try and limit folder depth to 3 subdirectories and keep names short if possible.
|
||||
- Base bumped to Marlin Bugfix as of 20210418
|
||||
|
||||
# Changes for DW7.3.1
|
||||
- Added SD file refresh button for users with damaged SD Detect Pins
|
||||
- Modified print finish button action to raise z by 5mm and disable steppers rather than rehome XY
|
||||
- Solve rounding issue with babystepping below step precision by forcing always round up caused by recent upstream change
|
||||
- Modified babystepping resolution for fine adjustment to .02mm from .01mm
|
||||
- Force file pages to reset paging value on entry to screen to prevent incorrect scrolling
|
||||
- Additional string length buffer safeties
|
||||
|
||||
The default build button is now a batch Build All! If you want to build a custom stock 2560 environment, use the env:megaatmega2560 environment.
|
||||
For SKR 1.3/1.4 boards use the LPC1768/9 environments as usual. For SKR Mini or Creality STM32F1 boards use the standard STM32 environments per vendor.
|
||||
- Touch screen primarily based on the fork by the [CR6 Community](https://github.com/CR6Community)
|
||||
- E3V2 is currently using the modified Jyers UI as merged into Marlin upstream
|
||||
|
||||
## About Our Branches
|
||||
|
||||
The firmware branches maintained here are made possible by the support of [Tiny Machines 3D](https://www.tinymachines3d.com/?rfsn=3419592.cc302fe) as well as our customer base through our 3D printing Services.
|
||||
Maintaining and developing these branches takes a significant investment, made up of time and machines. To support continued development, please consider your next 3D Printer related purchase from Tiny Machines 3D
|
||||
The firmware branches maintained here are made possible by the support of [F1rst Layer](https://amzn.to/2XWHVdH) and [Tiny Machines 3D](https://www.tinymachines3d.com/?rfsn=3419592.cc302fe) as well as our customer base through our 3D printing Services.
|
||||
Maintaining and developing these branches takes a significant investment, made up of time and machines. To support continued development, please consider your next 3D Printer purchases from Tiny Machines 3D, F1rst Layer, Bondtech, or Slice Engineering and thank them for supporting open source!
|
||||
and thank them for supporting open source development. Or, consider us for printing services outside of your machine’s capabilities. Print service requests can be sent to d.menzel@insanityautomation.com and we will
|
||||
respond typically within 1 working day. If you do not need anything printed or a 3D Printer but still want to contribute, you can support us through [Patreon](https://www.patreon.com/InsanityAutomation).
|
||||
|
||||
@@ -175,4 +206,4 @@ This is just one of many forks of Marlin. We don't try to bury that behind fancy
|
||||
|
||||
Marlin is published under the [GPL license](/LICENSE) because we believe in open development. The GPL comes with both rights and obligations. Whether you use Marlin firmware as the driver for your open or closed-source product, you must keep Marlin open, and you must provide your compatible Marlin source code to end users upon request. The most straightforward way to comply with the Marlin license is to make a fork of Marlin on Github, perform your modifications, and direct users to your modified fork.
|
||||
|
||||
While we can't prevent the use of this code in products (3D printers, CNC, etc.) that are closed source or crippled by a patent, we would prefer that you choose another firmware or, better yet, make your own.
|
||||
While we can't prevent the use of this code in products (3D printers, CNC, etc.) that are closed source or crippled by a patent, we would prefer that you choose another firmware or, better yet, make your own.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user