Explorar el Código

Merge branch 'bugfix-2.0.x' of https://github.com/MarlinFirmware/Marlin into bugfix-2.0.x

Bob-the-Kuhn hace 6 años
padre
commit
73726d56b3
Se han modificado 100 ficheros con 1099 adiciones y 523 borrados
  1. 7
    0
      Marlin/Configuration.h
  2. 40
    4
      Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp
  3. 38
    2
      Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp
  4. 15
    4
      Marlin/src/HAL/HAL_ESP32/HAL.cpp
  5. 5
    0
      Marlin/src/HAL/HAL_ESP32/HAL.h
  6. 9
    4
      Marlin/src/HAL/HAL_ESP32/fastio_ESP32.h
  7. 10
    1
      Marlin/src/HAL/HAL_ESP32/i2s.cpp
  8. 2
    0
      Marlin/src/HAL/HAL_ESP32/i2s.h
  9. 1
    1
      Marlin/src/HAL/HAL_ESP32/spi_pins.h
  10. 3
    0
      Marlin/src/HAL/HAL_LPC1768/HAL.h
  11. 1
    6
      Marlin/src/HAL/HAL_LPC1768/SanityCheck.h
  12. 36
    0
      Marlin/src/HAL/shared/HAL_ST7920.h
  13. 1
    0
      Marlin/src/core/debug_out.h
  14. 0
    1
      Marlin/src/core/language.h
  15. 6
    0
      Marlin/src/gcode/calibrate/G34_M422.cpp
  16. 0
    13
      Marlin/src/gcode/eeprom/M500-M504.cpp
  17. 12
    2
      Marlin/src/gcode/feature/trinamic/M906.cpp
  18. 8
    2
      Marlin/src/inc/Conditionals_LCD.h
  19. 1
    3
      Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
  20. 13
    0
      Marlin/src/lcd/dogm/HAL_LCD_class_defines.h
  21. 1
    31
      Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
  22. 7
    5
      Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
  23. 38
    33
      Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp
  24. 3
    5
      Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
  25. 2
    2
      Marlin/src/lcd/dogm/ultralcd_DOGM.h
  26. 9
    0
      Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
  27. 2
    0
      Marlin/src/lcd/language/language_de.h
  28. 21
    0
      Marlin/src/lcd/language/language_en.h
  29. 156
    29
      Marlin/src/lcd/language/language_fr.h
  30. 2
    0
      Marlin/src/lcd/language/language_it.h
  31. 14
    3
      Marlin/src/lcd/menu/menu.cpp
  32. 7
    4
      Marlin/src/lcd/menu/menu.h
  33. 6
    9
      Marlin/src/lcd/menu/menu_advanced.cpp
  34. 17
    17
      Marlin/src/lcd/menu/menu_bed_corners.cpp
  35. 2
    0
      Marlin/src/lcd/menu/menu_job_recovery.cpp
  36. 1
    4
      Marlin/src/lcd/menu/menu_main.cpp
  37. 10
    10
      Marlin/src/lcd/menu/menu_mixer.cpp
  38. 5
    11
      Marlin/src/lcd/menu/menu_sdcard.cpp
  39. 17
    37
      Marlin/src/lcd/menu/menu_service.cpp
  40. 42
    42
      Marlin/src/lcd/menu/menu_tmc.cpp
  41. 4
    2
      Marlin/src/lcd/menu/menu_ubl.cpp
  42. 25
    8
      Marlin/src/lcd/ultralcd.cpp
  43. 7
    1
      Marlin/src/lcd/ultralcd.h
  44. 19
    1
      Marlin/src/module/configuration_store.cpp
  45. 48
    20
      Marlin/src/module/temperature.cpp
  46. 53
    78
      Marlin/src/module/tool_change.cpp
  47. 55
    13
      Marlin/src/pins/pins_BIGTREE_SKR_V1.3.h
  48. 3
    0
      Marlin/src/pins/pins_ESP32.h
  49. 6
    6
      Marlin/src/pins/pins_FORMBOT_RAPTOR.h
  50. 13
    10
      Marlin/src/pins/pins_FORMBOT_TREX2PLUS.h
  51. 4
    2
      Marlin/src/pins/pins_FORMBOT_TREX3.h
  52. 40
    28
      Marlin/src/pins/pins_FYSETC_F6_13.h
  53. 1
    1
      Marlin/src/pins/pins_GEN7_13.h
  54. 32
    9
      Marlin/src/pins/pins_RAMPS.h
  55. 59
    22
      Marlin/src/pins/pins_RAMPS_FD_V1.h
  56. 1
    0
      Marlin/src/pins/pins_RAMPS_RE_ARM.h
  57. 54
    20
      Marlin/src/pins/pins_RURAMPS4D_11.h
  58. 48
    14
      Marlin/src/pins/pins_RURAMPS4D_13.h
  59. 5
    3
      README.md
  60. 1
    0
      config/default/Configuration.h
  61. 1
    0
      config/examples/3DFabXYZ/Migbot/Configuration.h
  62. 1
    0
      config/examples/AlephObjects/TAZ4/Configuration.h
  63. 1
    0
      config/examples/AliExpress/CL-260/Configuration.h
  64. 1
    0
      config/examples/AliExpress/UM2pExt/Configuration.h
  65. 1
    0
      config/examples/Anet/A2/Configuration.h
  66. 1
    0
      config/examples/Anet/A2plus/Configuration.h
  67. 1
    0
      config/examples/Anet/A6/Configuration.h
  68. 1
    0
      config/examples/Anet/A8/Configuration.h
  69. 1
    0
      config/examples/AnyCubic/i3/Configuration.h
  70. 1
    0
      config/examples/ArmEd/Configuration.h
  71. 1
    0
      config/examples/Azteeg/X5GT/Configuration.h
  72. 1
    0
      config/examples/BIBO/TouchX/cyclops/Configuration.h
  73. 1
    0
      config/examples/BIBO/TouchX/default/Configuration.h
  74. 1
    0
      config/examples/BQ/Hephestos/Configuration.h
  75. 1
    0
      config/examples/BQ/Hephestos_2/Configuration.h
  76. 1
    0
      config/examples/BQ/WITBOX/Configuration.h
  77. 1
    0
      config/examples/Cartesio/Configuration.h
  78. 1
    0
      config/examples/Creality/CR-10/Configuration.h
  79. 1
    0
      config/examples/Creality/CR-10S/Configuration.h
  80. 1
    0
      config/examples/Creality/CR-10_5S/Configuration.h
  81. 1
    0
      config/examples/Creality/CR-10mini/Configuration.h
  82. 1
    0
      config/examples/Creality/CR-8/Configuration.h
  83. 1
    0
      config/examples/Creality/Ender-2/Configuration.h
  84. 1
    0
      config/examples/Creality/Ender-3/Configuration.h
  85. 1
    0
      config/examples/Creality/Ender-4/Configuration.h
  86. 1
    0
      config/examples/Einstart-S/Configuration.h
  87. 1
    0
      config/examples/Felix/Configuration.h
  88. 1
    0
      config/examples/Felix/DUAL/Configuration.h
  89. 1
    0
      config/examples/FlashForge/CreatorPro/Configuration.h
  90. 1
    0
      config/examples/FolgerTech/i3-2020/Configuration.h
  91. 1
    0
      config/examples/Formbot/Raptor/Configuration.h
  92. 7
    0
      config/examples/Formbot/T_Rex_2+/Configuration.h
  93. 7
    0
      config/examples/Formbot/T_Rex_3/Configuration.h
  94. 1
    0
      config/examples/Geeetech/A10M/Configuration.h
  95. 1
    0
      config/examples/Geeetech/A20M/Configuration.h
  96. 1
    0
      config/examples/Geeetech/GT2560/Configuration.h
  97. 1
    0
      config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
  98. 1
    0
      config/examples/Geeetech/MeCreator2/Configuration.h
  99. 1
    0
      config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
  100. 0
    0
      config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h

+ 7
- 0
Marlin/Configuration.h Ver fichero

@@ -1910,6 +1910,12 @@
1910 1910
 // https://wiki.fysetc.com/Mini12864_Panel/?fbclid=IwAR1FyjuNdVOOy9_xzky3qqo_WeM5h-4gpRnnWhQr_O1Ef3h0AFnFXmCehK8
1911 1911
 //
1912 1912
 //#define FYSETC_MINI_12864
1913
+#ifdef FYSETC_MINI_12864
1914
+  #define FYSETC_MINI_12864_REV_1_2              //  types C, D, E & F  back light is monochrome (always on) - discrete RGB signals
1915
+  //#define FYSETC_MINI_12864_REV_2_0            //  types A & B  back light is RGB - requires LED_USER_PRESET_STARTUP - discrete RGB signals
1916
+  //#define FYSETC_MINI_12864_REV_2_1            //  types A & B  back light is RGB - requires LED_USER_PRESET_STARTUP -  RGB
1917
+  //#define FYSETC_MINI_12864_REV_2_1            //  types A & B  back light is RGB - requires LED_USER_PRESET_STARTUP - Neopixel
1918
+#endif
1913 1919
 
1914 1920
 //
1915 1921
 // Factory display for Creality CR-10
@@ -2013,6 +2019,7 @@
2013 2019
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2014 2020
 // However, control resolution will be halved for each increment;
2015 2021
 // at zero value, there are 128 effective control positions.
2022
+// :[0,1,2,3,4,5,6,7]
2016 2023
 #define SOFT_PWM_SCALE 0
2017 2024
 
2018 2025
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 40
- 4
Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp Ver fichero

@@ -53,7 +53,7 @@
53 53
 // Public functions
54 54
 // --------------------------------------------------------------------------
55 55
 
56
-#if ENABLED(DUE_SOFTWARE_SPI)
56
+#if EITHER(DUE_SOFTWARE_SPI, FORCE_SOFT_SPI)
57 57
 
58 58
   // --------------------------------------------------------------------------
59 59
   // software SPI
@@ -739,7 +739,42 @@
739 739
     #define SPI_MODE_2_DUE_HW 0
740 740
     #define SPI_MODE_3_DUE_HW 1
741 741
 
742
+    /**
743
+     *  The DUE SPI controller is set up so the upper word of the longword
744
+     *  written to the transmit data register selects which SPI Chip Select
745
+     *  Register is used. This allows different streams to have different SPI
746
+     *  settings.
747
+     *
748
+     *  In practice it's spooky. Some combinations hang the system, while others
749
+     *  upset the peripheral device.
750
+     *
751
+     *  SPI mode should be the same for all streams. The FYSETC_MINI_12864 gets
752
+     *  upset if the clock phase changes after chip select goes active.
753
+     *
754
+     *  SPI_CSR_CSAAT should be set for all streams. If not the WHILE_TX(0)
755
+     *  macro returns immediately which can result in the SPI chip select going
756
+     *  inactive before all the data has been sent.
757
+     *
758
+     *  The TMC2130 library uses SPI0->SPI_CSR[3].
759
+     *
760
+     *  The U8G hardware SPI uses SPI0->SPI_CSR[0]. The system hangs and/or the
761
+     *  FYSETC_MINI_12864 gets upset if lower baud rates are used and the SD card
762
+     *  is inserted or removed.
763
+     *
764
+     *  The SD card uses SPI0->SPI_CSR[3]. Efforts were made to use [1] and [2]
765
+     *  but they all resulted in hangs or garbage on the LCD.
766
+     *
767
+     *  The SPI controlled chip selects are NOT enabled in the GPIO controller.
768
+     *  The application must control the chip select.
769
+     *
770
+     *  All of the above can be avoided by defining FORCE_SOFT_SPI to force the
771
+     *  display to use software SPI.
772
+     *
773
+     */
774
+
742 775
     void spiInit(uint8_t spiRate=6) {  // Default to slowest rate if not specified)
776
+                                       // Also sets U8G SPI rate to 4MHz and the SPI mode to 3
777
+
743 778
       // 8.4 MHz, 4 MHz, 2 MHz, 1 MHz, 0.5 MHz, 0.329 MHz, 0.329 MHz
744 779
       constexpr int spiDivider[] = { 10, 21, 42, 84, 168, 255, 255 };
745 780
       if (spiRate > 6) spiRate = 1;
@@ -760,15 +795,16 @@
760 795
       // TMC2103 compatible setup
761 796
       // Master mode, no fault detection, PCS bits in data written to TDR select CSR register
762 797
       SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS;
763
-      // SPI mode 0, 8 Bit data transfer, baud rate
764
-      SPI0->SPI_CSR[3] = SPI_CSR_SCBR(spiDivider[spiRate]) | SPI_CSR_CSAAT | SPI_MODE_0_DUE_HW;  // use same CSR as TMC2130
798
+      // SPI mode 3, 8 Bit data transfer, baud rate
799
+      SPI0->SPI_CSR[3] = SPI_CSR_SCBR(spiDivider[spiRate]) | SPI_CSR_CSAAT | SPI_MODE_3_DUE_HW;  // use same CSR as TMC2130
800
+      SPI0->SPI_CSR[0] = SPI_CSR_SCBR(spiDivider[1]) | SPI_CSR_CSAAT | SPI_MODE_3_DUE_HW;  // U8G default to 4MHz
765 801
     }
766 802
 
767 803
     void spiBegin() { spiInit(); }
768 804
 
769 805
     static uint8_t spiTransfer(uint8_t data) {
770 806
       WHILE_TX(0);
771
-      SPI0->SPI_TDR = (uint32_t)data | 0x00070000UL;  // Add TMC2130 PCS bits to every byte
807
+      SPI0->SPI_TDR = (uint32_t)data | 0x00070000UL;  // Add TMC2130 PCS bits to every byte (use SPI0->SPI_CSR[3])
772 808
       WHILE_TX(0);
773 809
       WHILE_RX(0);
774 810
       return SPI0->SPI_RDR;

+ 38
- 2
Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp Ver fichero

@@ -99,7 +99,7 @@ static void u8g_com_DUE_st7920_write_byte_sw_spi(uint8_t rs, uint8_t val) {
99 99
     spiSend_sw_DUE(rs ? 0x0FA : 0x0F8); // Command or Data
100 100
     DELAY_US(40); // give the controller some time to process the data: 20 is bad, 30 is OK, 40 is safe
101 101
   }
102
-  spiSend_sw_DUE(val & 0x0F0);
102
+  spiSend_sw_DUE(val & 0xF0);
103 103
   spiSend_sw_DUE(val << 4);
104 104
 }
105 105
 
@@ -168,6 +168,42 @@ uint8_t u8g_com_HAL_DUE_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_va
168 168
   return 1;
169 169
 }
170 170
 
171
-#endif // HAS_GRAPHICAL_LCD
171
+#if ENABLED(LIGHTWEIGHT_UI)
172
+  #include "../../lcd/ultralcd.h"
173
+  #include "../shared/HAL_ST7920.h"
174
+
175
+  #define ST7920_CS_PIN LCD_PINS_RS
176
+
177
+  #if DOGM_SPI_DELAY_US > 0
178
+    #define U8G_DELAY() DELAY_US(DOGM_SPI_DELAY_US)
179
+  #else
180
+    #define U8G_DELAY() DELAY_US(10)
181
+  #endif
182
+
183
+  void ST7920_cs() {
184
+    WRITE(ST7920_CS_PIN, HIGH);
185
+    U8G_DELAY();
186
+  }
187
+
188
+  void ST7920_ncs() {
189
+    WRITE(ST7920_CS_PIN, LOW);
190
+  }
172 191
 
192
+  void ST7920_set_cmd() {
193
+    spiSend_sw_DUE(0xF8);
194
+    DELAY_US(40);
195
+  }
196
+
197
+  void ST7920_set_dat() {
198
+    spiSend_sw_DUE(0xFA);
199
+    DELAY_US(40);
200
+  }
201
+
202
+  void ST7920_write_byte(const uint8_t val) {
203
+    spiSend_sw_DUE(val & 0xF0);
204
+    spiSend_sw_DUE(val << 4);
205
+  }
206
+#endif // LIGHTWEIGHT_UI
207
+
208
+#endif // HAS_GRAPHICAL_LCD
173 209
 #endif // ARDUINO_ARCH_SAM

+ 15
- 4
Marlin/src/HAL/HAL_ESP32/HAL.cpp Ver fichero

@@ -133,12 +133,16 @@ int freeMemory() {
133 133
 // --------------------------------------------------------------------------
134 134
 // ADC
135 135
 // --------------------------------------------------------------------------
136
-#define ADC1_CHANNEL(pin) ADC1_GPIO##pin_CHANNEL
136
+#define ADC1_CHANNEL(pin) ADC1_GPIO ## pin ## _CHANNEL
137 137
 
138 138
 adc1_channel_t get_channel(int pin) {
139 139
   switch (pin) {
140
-    case 36: return ADC1_GPIO36_CHANNEL;
141
-    case 39: return ADC1_GPIO39_CHANNEL;
140
+    case 39: return ADC1_CHANNEL(39);
141
+    case 36: return ADC1_CHANNEL(36);
142
+    case 35: return ADC1_CHANNEL(35);
143
+    case 34: return ADC1_CHANNEL(34);
144
+    case 33: return ADC1_CHANNEL(33);
145
+    case 32: return ADC1_CHANNEL(32);
142 146
   }
143 147
 
144 148
   return ADC1_CHANNEL_MAX;
@@ -147,8 +151,15 @@ adc1_channel_t get_channel(int pin) {
147 151
 void HAL_adc_init() {
148 152
   // Configure ADC
149 153
   adc1_config_width(ADC_WIDTH_12Bit);
150
-  adc1_config_channel_atten(get_channel(36), ADC_ATTEN_11db);
151 154
   adc1_config_channel_atten(get_channel(39), ADC_ATTEN_11db);
155
+  adc1_config_channel_atten(get_channel(36), ADC_ATTEN_11db);
156
+  adc1_config_channel_atten(get_channel(35), ADC_ATTEN_11db);
157
+  adc1_config_channel_atten(get_channel(34), ADC_ATTEN_11db);
158
+  adc1_config_channel_atten(get_channel(33), ADC_ATTEN_11db);
159
+  adc1_config_channel_atten(get_channel(32), ADC_ATTEN_11db);
160
+
161
+  // Note that adc2 is shared with the WiFi module, which has higher priority, so the conversion may fail.
162
+  // That's why we're not setting it up here.
152 163
 
153 164
   // Calculate ADC characteristics i.e. gain and offset factors
154 165
   esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, V_REF, &characteristics);

+ 5
- 0
Marlin/src/HAL/HAL_ESP32/HAL.h Ver fichero

@@ -30,13 +30,18 @@
30 30
 
31 31
 #include <stdint.h>
32 32
 
33
+// these are going to be re-defined in Arduino.h
33 34
 #undef DISABLED
34 35
 #undef M_PI
36
+#undef _BV
35 37
 
36 38
 #include <Arduino.h>
37 39
 
40
+// revert back to the correct (old) definition
38 41
 #undef DISABLED
39 42
 #define DISABLED(V...) DO(DIS,&&,V)
43
+// re-define in case Arduino.h has been skipped due to earlier inclusion (i.e. in Marlin\src\HAL\HAL_ESP32\i2s.cpp)
44
+#define _BV(b) (1UL << (b))
40 45
 
41 46
 #include "../shared/math_32bit.h"
42 47
 #include "../shared/HAL_SPI.h"

+ 9
- 4
Marlin/src/HAL/HAL_ESP32/fastio_ESP32.h Ver fichero

@@ -27,6 +27,10 @@
27 27
  * Utility functions
28 28
  */
29 29
 
30
+// I2S expander pin mapping.
31
+#define IS_I2S_EXPANDER_PIN(IO) TEST(IO, 7)
32
+#define I2S_EXPANDER_PIN_INDEX(IO) (IO & 0x7F)
33
+
30 34
 // Set pin as input
31 35
 #define _SET_INPUT(IO)          pinMode(IO, INPUT)
32 36
 
@@ -37,10 +41,10 @@
37 41
 #define _PULLUP(IO, v)          pinMode(IO, v ? INPUT_PULLUP : INPUT)
38 42
 
39 43
 // Read a pin wrapper
40
-#define READ(IO)                digitalRead(IO)
44
+#define READ(IO)                (IS_I2S_EXPANDER_PIN(IO) ? i2s_state(I2S_EXPANDER_PIN_INDEX(IO)) : digitalRead(IO))
41 45
 
42 46
 // Write to a pin wrapper
43
-#define WRITE(IO, v)            (TEST(IO, 7) ? i2s_write(IO & 0x7F, v) : digitalWrite(IO, v))
47
+#define WRITE(IO, v)            (IS_I2S_EXPANDER_PIN(IO) ? i2s_write(I2S_EXPANDER_PIN_INDEX(IO), v) : digitalWrite(IO, v))
44 48
 
45 49
 // Set pin as input wrapper
46 50
 #define SET_INPUT(IO)           _SET_INPUT(IO)
@@ -61,8 +65,9 @@
61 65
 #define extDigitalRead(IO)      digitalRead(IO)
62 66
 #define extDigitalWrite(IO,V)   digitalWrite(IO,V)
63 67
 
64
-#define PWM_PIN(P)              true
65
-#define USEABLE_HARDWARE_PWM(P) PWM_PIN(P)
68
+// PWM outputs
69
+#define PWM_PIN(P)              (P < 34) // NOTE Pins >= 34 are input only on ESP32, so they can't be used for output.
70
+#define USEABLE_HARDWARE_PWM(P) (!IS_I2S_EXPANDER_PIN(P) && PWM_PIN(P))
66 71
 
67 72
 // Toggle pin value
68 73
 #define TOGGLE(IO)              WRITE(IO, !READ(IO))

+ 10
- 1
Marlin/src/HAL/HAL_ESP32/i2s.cpp Ver fichero

@@ -21,7 +21,12 @@
21 21
  */
22 22
 #ifdef ARDUINO_ARCH_ESP32
23 23
 
24
-#include <Arduino.h> // replace that with the proper imports
24
+// replace that with the proper imports, then cleanup workarounds in Marlin\src\HAL\HAL_ESP32\HAL.h
25
+#include <Arduino.h>
26
+// revert back to the correct definition
27
+#undef DISABLED
28
+#define DISABLED(V...) DO(DIS,&&,V)
29
+
25 30
 #include "i2s.h"
26 31
 #include "../../core/macros.h"
27 32
 #include "driver/periph_ctrl.h"
@@ -315,6 +320,10 @@ void i2s_write(uint8_t pin, uint8_t val) {
315 320
   SET_BIT_TO(i2s_port_data, pin, val);
316 321
 }
317 322
 
323
+uint8_t i2s_state(uint8_t pin) {
324
+  return TEST(i2s_port_data, pin);
325
+}
326
+
318 327
 void i2s_push_sample() {
319 328
   dma.current[dma.rw_pos++] = i2s_port_data;
320 329
 }

+ 2
- 0
Marlin/src/HAL/HAL_ESP32/i2s.h Ver fichero

@@ -26,6 +26,8 @@ extern uint32_t i2s_port_data;
26 26
 
27 27
 int i2s_init();
28 28
 
29
+uint8_t i2s_state(uint8_t pin);
30
+
29 31
 void i2s_write(uint8_t pin, uint8_t val);
30 32
 
31 33
 void i2s_push_sample();

+ 1
- 1
Marlin/src/HAL/HAL_ESP32/spi_pins.h Ver fichero

@@ -18,7 +18,7 @@
18 18
  */
19 19
 #pragma once
20 20
 
21
-#define SS_PIN    5
21
+#define SS_PIN   SDSS
22 22
 #define SCK_PIN  18
23 23
 #define MISO_PIN 19
24 24
 #define MOSI_PIN 23

+ 3
- 0
Marlin/src/HAL/HAL_LPC1768/HAL.h Ver fichero

@@ -147,6 +147,9 @@ using FilteredADC = LPC176x::ADC<ADC_LOWPASS_K_VALUE, ADC_MEDIAN_FILTER_SIZE>;
147 147
 #define HAL_READ_ADC()         FilteredADC::get_result()
148 148
 #define HAL_ADC_READY()        FilteredADC::finished_conversion()
149 149
 
150
+// A grace period for the ADC readings to stabilize before they start causing thermal protection errors.
151
+#define THERMAL_PROTECTION_GRACE_PERIOD 500
152
+
150 153
 // Parse a G-code word into a pin index
151 154
 int16_t PARSED_PIN_INDEX(const char code, const int16_t dval);
152 155
 // P0.6 thru P0.9 are for the onboard SD card

+ 1
- 6
Marlin/src/HAL/HAL_LPC1768/SanityCheck.h Ver fichero

@@ -66,12 +66,7 @@
66 66
   #endif
67 67
 #endif // SPINDLE_LASER_ENABLE
68 68
 
69
-#if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) && HAS_DRIVER(TMC2130) && DISABLED(TMC_USE_SW_SPI) \
70
-    && (MB(RAMPS_14_RE_ARM_EFB) \
71
-    ||  MB(RAMPS_14_RE_ARM_EEB) \
72
-    ||  MB(RAMPS_14_RE_ARM_EFF) \
73
-    ||  MB(RAMPS_14_RE_ARM_EEF) \
74
-    ||  MB(RAMPS_14_RE_ARM_SF))
69
+#if IS_RE_ARM_BOARD && ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) && HAS_DRIVER(TMC2130) && DISABLED(TMC_USE_SW_SPI)
75 70
   #error "Re-ARM with REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER and TMC2130 require TMC_USE_SW_SPI"
76 71
 #endif
77 72
 

+ 36
- 0
Marlin/src/HAL/shared/HAL_ST7920.h Ver fichero

@@ -0,0 +1,36 @@
1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+#pragma once
23
+
24
+/**
25
+ * HAL/HAL_ST7920.h
26
+ * For the HALs that provide direct access to the ST7920 display
27
+ * (bypassing U8G), it will allow the LIGHTWEIGHT_UI to operate.
28
+ */
29
+
30
+#if HAS_GRAPHICAL_LCD && ENABLED(LIGHTWEIGHT_UI)
31
+  void ST7920_cs();
32
+  void ST7920_ncs();
33
+  void ST7920_set_cmd();
34
+  void ST7920_set_dat();
35
+  void ST7920_write_byte(const uint8_t data);
36
+#endif

+ 1
- 0
Marlin/src/core/debug_out.h Ver fichero

@@ -26,6 +26,7 @@
26 26
 //  (or not) in a given .cpp file
27 27
 //
28 28
 
29
+#undef DEBUG_PRINT_P
29 30
 #undef DEBUG_ECHO_START
30 31
 #undef DEBUG_ERROR_START
31 32
 #undef DEBUG_CHAR

+ 0
- 1
Marlin/src/core/language.h Ver fichero

@@ -344,7 +344,6 @@
344 344
 #define MSG_LCD_N3 " 4"
345 345
 #define MSG_LCD_N4 " 5"
346 346
 #define MSG_LCD_N5 " 6"
347
-#define MSG_E0 "E0"
348 347
 #define MSG_E1 "E1"
349 348
 #define MSG_E2 "E2"
350 349
 #define MSG_E3 "E3"

+ 6
- 0
Marlin/src/gcode/calibrate/G34_M422.cpp Ver fichero

@@ -126,6 +126,12 @@ void GcodeSuite::G34() {
126 126
       extruder_duplication_enabled = false;
127 127
     #endif
128 128
 
129
+    // Before moving other axes raise Z, if needed. Never lower Z.
130
+    if (current_position[Z_AXIS] < Z_CLEARANCE_BETWEEN_PROBES) {
131
+      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Raise Z (before moving to probe pos) to ", Z_CLEARANCE_BETWEEN_PROBES);
132
+      do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES);
133
+    }
134
+
129 135
     // Remember corrections to determine errors on each iteration
130 136
     float last_z_align_move[Z_STEPPER_COUNT] = ARRAY_N(Z_STEPPER_COUNT, 10000.0f, 10000.0f, 10000.0f),
131 137
           z_measured[Z_STEPPER_COUNT] = { 0 };

+ 0
- 13
Marlin/src/gcode/eeprom/M500-M504.cpp Ver fichero

@@ -25,18 +25,11 @@
25 25
 #include "../../core/serial.h"
26 26
 #include "../../inc/MarlinConfig.h"
27 27
 
28
-#if ENABLED(EXTENSIBLE_UI)
29
-  #include "../../lcd/extensible_ui/ui_api.h"
30
-#endif
31
-
32 28
 /**
33 29
  * M500: Store settings in EEPROM
34 30
  */
35 31
 void GcodeSuite::M500() {
36 32
   (void)settings.save();
37
-  #if ENABLED(EXTENSIBLE_UI)
38
-    ExtUI::onStoreSettings();
39
-  #endif
40 33
 }
41 34
 
42 35
 /**
@@ -44,9 +37,6 @@ void GcodeSuite::M500() {
44 37
  */
45 38
 void GcodeSuite::M501() {
46 39
   (void)settings.load();
47
-  #if ENABLED(EXTENSIBLE_UI)
48
-    ExtUI::onLoadSettings();
49
-  #endif
50 40
 }
51 41
 
52 42
 /**
@@ -54,9 +44,6 @@ void GcodeSuite::M501() {
54 44
  */
55 45
 void GcodeSuite::M502() {
56 46
   (void)settings.reset();
57
-  #if ENABLED(EXTENSIBLE_UI)
58
-    ExtUI::onFactoryReset();
59
-  #endif
60 47
 }
61 48
 
62 49
 #if DISABLED(DISABLE_M503)

+ 12
- 2
Marlin/src/gcode/feature/trinamic/M906.cpp Ver fichero

@@ -29,8 +29,18 @@
29 29
 #include "../../../module/stepper_indirection.h"
30 30
 
31 31
 /**
32
- * M906: Set motor current in milliamps using axis codes X, Y, Z, E
33
- * Report driver currents when no axis specified
32
+ * M906: Set motor current in milliamps.
33
+ *
34
+ * Parameters:
35
+ *   X[current]  - Set mA current for X driver(s)
36
+ *   Y[current]  - Set mA current for Y driver(s)
37
+ *   Z[current]  - Set mA current for Z driver(s)
38
+ *   E[current]  - Set mA current for E driver(s)
39
+ *
40
+ *   I[index]    - Axis sub-index (Omit or 0 for X, Y, Z; 1 for X2, Y2, Z2; 2 for Z3.)
41
+ *   T[index]    - Extruder index (Zero-based. Omit for E0 only.)
42
+ *
43
+ * With no parameters report driver currents.
34 44
  */
35 45
 void GcodeSuite::M906() {
36 46
   #define TMC_SAY_CURRENT(Q) tmc_get_current(stepper##Q)

+ 8
- 2
Marlin/src/inc/Conditionals_LCD.h Ver fichero

@@ -138,6 +138,8 @@
138 138
 #elif ENABLED(MKS_MINI_12864)
139 139
 
140 140
   #define MINIPANEL
141
+  #define DEFAULT_LCD_CONTRAST 150
142
+  #define LCD_CONTRAST_MAX 255
141 143
 
142 144
 #elif ENABLED(FYSETC_MINI_12864)
143 145
 
@@ -153,7 +155,9 @@
153 155
 #if EITHER(MAKRPANEL, MINIPANEL)
154 156
   #define DOGLCD
155 157
   #define ULTIPANEL
156
-  #define DEFAULT_LCD_CONTRAST 17
158
+  #ifndef DEFAULT_LCD_CONTRAST
159
+    #define DEFAULT_LCD_CONTRAST 17
160
+  #endif
157 161
 #endif
158 162
 
159 163
 #if ENABLED(ULTI_CONTROLLER)
@@ -325,7 +329,7 @@
325 329
 /**
326 330
  * Default LCD contrast for Graphical LCD displays
327 331
  */
328
-#define HAS_LCD_CONTRAST HAS_GRAPHICAL_LCD && defined(DEFAULT_LCD_CONTRAST)
332
+#define HAS_LCD_CONTRAST (HAS_GRAPHICAL_LCD && defined(DEFAULT_LCD_CONTRAST))
329 333
 #if HAS_LCD_CONTRAST
330 334
   #ifndef LCD_CONTRAST_MIN
331 335
     #define LCD_CONTRAST_MIN 0
@@ -562,3 +566,5 @@
562 566
 #if ENABLED(SLIM_LCD_MENUS)
563 567
   #define BOOT_MARLIN_LOGO_SMALL
564 568
 #endif
569
+
570
+#define IS_RE_ARM_BOARD (MB(RAMPS_14_RE_ARM_EFB) || MB(RAMPS_14_RE_ARM_EEB) || MB(RAMPS_14_RE_ARM_EFF) || MB(RAMPS_14_RE_ARM_EEF) || MB(RAMPS_14_RE_ARM_SF))

+ 1
- 3
Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp Ver fichero

@@ -1038,9 +1038,7 @@ void MarlinUI::draw_status_screen() {
1038 1038
   }
1039 1039
 
1040 1040
   void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
1041
-    SETCURSOR(0, 0); lcd_put_u8str_P(pref);
1042
-    if (string) wrap_string(1, string);
1043
-    if (suff) lcd_put_u8str_P(suff);
1041
+    ui.draw_select_screen_prompt(pref, string, suff);
1044 1042
     SETCURSOR(0, LCD_HEIGHT - 1);
1045 1043
     lcd_put_wchar(yesno ? ' ' : '['); lcd_put_u8str_P(no); lcd_put_wchar(yesno ? ' ' : ']');
1046 1044
     SETCURSOR_RJ(utf8_strlen_P(yes) + 2, LCD_HEIGHT - 1);

+ 13
- 0
Marlin/src/lcd/dogm/HAL_LCD_class_defines.h Ver fichero

@@ -94,3 +94,16 @@ public:
94 94
   : U8GLIB(&u8g_dev_tft_320x240_upscale_from_128x64, cs, rs, reset)
95 95
   { }
96 96
 };
97
+
98
+
99
+extern u8g_dev_t u8g_dev_uc1701_mini12864_HAL_2x_sw_spi, u8g_dev_uc1701_mini12864_HAL_2x_hw_spi;
100
+
101
+class U8GLIB_MINI12864_2X_HAL : public U8GLIB {
102
+public:
103
+  U8GLIB_MINI12864_2X_HAL(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
104
+    : U8GLIB(&u8g_dev_uc1701_mini12864_HAL_2x_sw_spi, sck, mosi, cs, a0, reset)
105
+    { }
106
+  U8GLIB_MINI12864_2X_HAL(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
107
+    : U8GLIB(&u8g_dev_uc1701_mini12864_HAL_2x_hw_spi, cs, a0, reset)
108
+    { }
109
+};

+ 1
- 31
Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp Ver fichero

@@ -158,9 +158,7 @@ void ST7920_Lite_Status_Screen::entry_mode_select(const bool ac_increase, const
158 158
 // function for scroll_or_addr_select()
159 159
 void ST7920_Lite_Status_Screen::_scroll_or_addr_select(const bool sa) {
160 160
   extended_function_set(true);
161
-  cmd(0b00100010 |
162
-    (sa   ? 0b000001 : 0)
163
-  );
161
+  cmd(0b00000010 | (sa ? 0b00000001 : 0));
164 162
   current_bits.sa = sa;
165 163
 }
166 164
 
@@ -907,34 +905,6 @@ void ST7920_Lite_Status_Screen::clear_text_buffer() {
907 905
   ncs();
908 906
 }
909 907
 
910
-#if ENABLED(U8GLIB_ST7920) && !defined(U8G_HAL_LINKS) && !defined(__SAM3X8E__)
911
-
912
-  #include "ultralcd_st7920_u8glib_rrd_AVR.h"
913
-
914
-  void ST7920_Lite_Status_Screen::cs() {
915
-    ST7920_CS();
916
-    current_bits.synced = false;
917
-  }
918
-
919
-  void ST7920_Lite_Status_Screen::ncs() {
920
-    ST7920_NCS();
921
-    current_bits.synced = false;
922
-  }
923
-
924
-  void ST7920_Lite_Status_Screen::sync_cmd() {
925
-    ST7920_SET_CMD();
926
-  }
927
-
928
-  void ST7920_Lite_Status_Screen::sync_dat() {
929
-    ST7920_SET_DAT();
930
-  }
931
-
932
-  void ST7920_Lite_Status_Screen::write_byte(const uint8_t data) {
933
-    ST7920_WRITE_BYTE(data);
934
-  }
935
-
936
-#endif
937
-
938 908
 void MarlinUI::draw_status_screen() {
939 909
   ST7920_Lite_Status_Screen::update(false);
940 910
 }

+ 7
- 5
Marlin/src/lcd/dogm/status_screen_lite_ST7920.h Ver fichero

@@ -15,6 +15,8 @@
15 15
  */
16 16
 #pragma once
17 17
 
18
+#include "../../HAL/shared/HAL_ST7920.h"
19
+
18 20
 #include "../../core/macros.h"
19 21
 #include "../../libs/duration_t.h"
20 22
 
@@ -28,11 +30,11 @@ class ST7920_Lite_Status_Screen {
28 30
       uint8_t sa       : 1;
29 31
     } current_bits;
30 32
 
31
-    static void cs();
32
-    static void ncs();
33
-    static void sync_cmd();
34
-    static void sync_dat();
35
-    static void write_byte(const uint8_t w);
33
+    static void cs()                        { ST7920_cs(); current_bits.synced = false; }
34
+    static void ncs()                       { ST7920_cs(); current_bits.synced = false; }
35
+    static void sync_cmd()                  { ST7920_set_cmd(); }
36
+    static void sync_dat()                  { ST7920_set_dat(); }
37
+    static void write_byte(const uint8_t w) { ST7920_write_byte(w); }
36 38
 
37 39
     FORCE_INLINE static void write_word(const uint16_t w) {
38 40
       write_byte((w >> 8) & 0xFF);

+ 38
- 33
Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp Ver fichero

@@ -66,42 +66,47 @@
66 66
 #define PAGE_HEIGHT 8
67 67
 
68 68
 static const uint8_t u8g_dev_uc1701_mini12864_HAL_init_seq[] PROGMEM = {
69
-  U8G_ESC_CS(0),             /* disable chip */
70
-  U8G_ESC_ADR(0),           /* instruction mode */
71
-  U8G_ESC_RST(1),           /* do reset low pulse with (1*16)+2 milliseconds */
72
-  U8G_ESC_CS(1),             /* enable chip */
73
-
74
-  0x0E2,            /* soft reset */
75
-  0x040,    /* set display start line to 0 */
76
-  0x0A0,    /* ADC set to reverse */
77
-  0x0C8,    /* common output mode */
78
-  0x0A6,    /* display normal, bit val 0: LCD pixel off. */
79
-  0x0A2,    /* LCD bias 1/9 */
80
-  0x02F,    /* all power  control circuits on */
81
-  0x0F8,    /* set booster ratio to */
82
-  0x000,    /* 4x */
83
-  0x023,    /* set V0 voltage resistor ratio to large */
84
-  0x081,    /* set contrast */
85
-  0x027,    /* contrast value */
86
-  0x0AC,    /* indicator */
87
-  0x000,    /* disable */
88
-  0x0AF,    /* display on */
89
-
90
-  U8G_ESC_DLY(100),       /* delay 100 ms */
91
-  0x0A5,                    /* display all points, ST7565 */
92
-  U8G_ESC_DLY(100),       /* delay 100 ms */
93
-  U8G_ESC_DLY(100),       /* delay 100 ms */
94
-  0x0A4,                    /* normal display */
95
-  U8G_ESC_CS(0),             /* disable chip */
96
-  U8G_ESC_END                /* end of sequence */
69
+  U8G_ESC_CS(0),              /* disable chip */
70
+  U8G_ESC_ADR(0),             /* instruction mode */
71
+  U8G_ESC_RST(1),             /* do reset low pulse with (1*16)+2 milliseconds */
72
+  U8G_ESC_CS(1),              /* enable chip */
73
+
74
+  0x0E2,                      /* soft reset */
75
+  0x040,                      /* set display start line to 0 */
76
+  0x0A0,                      /* ADC set to reverse */
77
+  0x0C8,                      /* common output mode */
78
+  0x0A6,                      /* display normal, bit val 0: LCD pixel off. */
79
+  0x0A2,                      /* LCD bias 1/9 */
80
+  0x02F,                      /* all power control circuits on */
81
+  0x0F8,                      /* set booster ratio to */
82
+  0x000,                      /* 4x */
83
+  0x023,                      /* set V0 voltage resistor ratio to large */
84
+  0x081,                      /* set contrast */
85
+  0x027,                      /* contrast value */
86
+  0x0AC,                      /* indicator */
87
+  0x000,                      /* disable */
88
+  0x0AF,                      /* display on */
89
+
90
+  U8G_ESC_CS(0),              /* disable chip */
91
+  U8G_ESC_DLY(100),           /* delay 100 ms */
92
+  U8G_ESC_CS(1),              /* enable chip */
93
+
94
+  0x0A5,                      /* display all points, ST7565 */
95
+  U8G_ESC_CS(0),              /* disable chip */
96
+  U8G_ESC_DLY(100),           /* delay 100 ms */
97
+  U8G_ESC_DLY(100),           /* delay 100 ms */
98
+  U8G_ESC_CS(1),              /* enable chip */
99
+  0x0A4,                      /* normal display */
100
+  U8G_ESC_CS(0),              /* disable chip */
101
+  U8G_ESC_END                 /* end of sequence */
97 102
 };
98 103
 
99 104
 static const uint8_t u8g_dev_uc1701_mini12864_HAL_data_start[] PROGMEM = {
100
-  U8G_ESC_ADR(0),           /* instruction mode */
101
-  U8G_ESC_CS(1),             /* enable chip */
102
-  0x010,    /* set upper 4 bit of the col adr to 0 */
103
-  0x000,    /* set lower 4 bit of the col adr to 4  */
104
-  U8G_ESC_END                /* end of sequence */
105
+  U8G_ESC_ADR(0),             /* instruction mode */
106
+  U8G_ESC_CS(1),              /* enable chip */
107
+  0x010,                      /* set upper 4 bit of the col adr to 0 */
108
+  0x000,                      /* set lower 4 bit of the col adr to 4 */
109
+  U8G_ESC_END                 /* end of sequence */
105 110
 };
106 111
 
107 112
 uint8_t u8g_dev_uc1701_mini12864_HAL_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) {

+ 3
- 5
Marlin/src/lcd/dogm/ultralcd_DOGM.cpp Ver fichero

@@ -175,14 +175,14 @@ void MarlinUI::set_font(const MarlinFont font_nr) {
175 175
 
176 176
     // Can the text fit to the right of the bitmap?
177 177
     if (text_max_width < rspace) {
178
-      constexpr uint8_t inter = (width - text_max_width - (START_BMPWIDTH)) / 3; // Evenly distribute horizontal space
178
+      constexpr int8_t inter = (width - text_max_width - (START_BMPWIDTH)) / 3; // Evenly distribute horizontal space
179 179
       offx = inter;                             // First the boot logo...
180 180
       offy = (height - (START_BMPHEIGHT)) / 2;  // ...V-aligned in the full height
181 181
       txt_offx_1 = txt_offx_2 = inter + (START_BMPWIDTH) + inter; // Text right of the bitmap
182 182
       txt_base = (height + MENU_FONT_ASCENT + text_total_height - (MENU_FONT_HEIGHT)) / 2; // Text vertical center
183 183
     }
184 184
     else {
185
-      constexpr uint8_t inter = (height - text_total_height - (START_BMPHEIGHT)) / 3; // Evenly distribute vertical space
185
+      constexpr int8_t inter = (height - text_total_height - (START_BMPHEIGHT)) / 3; // Evenly distribute vertical space
186 186
       offy = inter;                             // V-align boot logo proportionally
187 187
       offx = rspace / 2;                        // Center the boot logo in the whole space
188 188
       txt_offx_1 = (width - text_width_1) / 2;  // Text 1 centered
@@ -439,9 +439,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
439 439
   }
440 440
 
441 441
   void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
442
-    SETCURSOR(0, 0); lcd_put_u8str_P(pref);
443
-    if (string) wrap_string(1, string);
444
-    if (suff) lcd_put_u8str_P(suff);
442
+    ui.draw_select_screen_prompt(pref, string, suff);
445 443
     draw_boxed_string(1, LCD_HEIGHT - 1, no, !yesno);
446 444
     draw_boxed_string(LCD_WIDTH - (utf8_strlen_P(yes) + 1), LCD_HEIGHT - 1, yes, yesno);
447 445
   }

+ 2
- 2
Marlin/src/lcd/dogm/ultralcd_DOGM.h Ver fichero

@@ -111,8 +111,8 @@
111 111
   // The MINIPanel display
112 112
   //#define U8G_CLASS U8GLIB_MINI12864
113 113
   //#define U8G_PARAM DOGLCD_CS, DOGLCD_A0                            // 8 stripes
114
-  #define U8G_CLASS U8GLIB_MINI12864_2X
115
-  #if EITHER(FYSETC_MINI_12864, TARGET_LPC1768)
114
+  #define U8G_CLASS U8GLIB_MINI12864_2X_HAL
115
+  #if BOTH(FYSETC_MINI_12864, FORCE_SOFT_SPI)
116 116
     #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0   // 4 stripes SW-SPI
117 117
   #else
118 118
     #define U8G_PARAM DOGLCD_CS, DOGLCD_A0                            // 4 stripes HW-SPI

+ 9
- 0
Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp Ver fichero

@@ -134,4 +134,13 @@ u8g_dev_t u8g_dev_st7920_128x64_rrd_sw_spi = {u8g_dev_rrd_st7920_128x64_fn, &u8g
134 134
 
135 135
 #pragma GCC reset_options
136 136
 
137
+#if ENABLED(LIGHTWEIGHT_UI)
138
+  #include "../../HAL/shared/HAL_ST7920.h"
139
+  void ST7920_cs()                          { ST7920_CS(); }
140
+  void ST7920_ncs()                         { ST7920_NCS(); }
141
+  void ST7920_set_cmd()                     { ST7920_SET_CMD(); }
142
+  void ST7920_set_dat()                     { ST7920_SET_DAT(); }
143
+  void ST7920_write_byte(const uint8_t val) { ST7920_WRITE_BYTE(val); }
144
+#endif
145
+
137 146
 #endif // U8GLIB_ST7920 && !U8G_HAL_LINKS && !__SAM3X8E__

+ 2
- 0
Marlin/src/lcd/language/language_de.h Ver fichero

@@ -332,9 +332,11 @@
332 332
 #define MSG_ENDSTOP_ABORT                   _UxGT("Endstopp Abbr.")
333 333
 #define MSG_HEATING_FAILED_LCD              _UxGT("HEIZEN ERFOLGLOS")
334 334
 #define MSG_HEATING_FAILED_LCD_BED          _UxGT("Bett heizen fehlge.")
335
+#define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Geh. heizen fehlge.")
335 336
 #define MSG_ERR_REDUNDANT_TEMP              _UxGT("REDUND. TEMP-ABWEI.")
336 337
 #define MSG_THERMAL_RUNAWAY                 LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT")
337 338
 #define MSG_THERMAL_RUNAWAY_BED             _UxGT("BETT") MSG_THERMAL_RUNAWAY
339
+#define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("GEH.") MSG_THERMAL_RUNAWAY
338 340
 #define MSG_ERR_MAXTEMP                     LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN")
339 341
 #define MSG_ERR_MINTEMP                     LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN")
340 342
 #define MSG_ERR_MAXTEMP_BED                 _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN")

+ 21
- 0
Marlin/src/lcd/language/language_en.h Ver fichero

@@ -753,12 +753,27 @@
753 753
 #ifndef MSG_START_PRINT
754 754
   #define MSG_START_PRINT                     _UxGT("Start print")
755 755
 #endif
756
+#ifndef MSG_BUTTON_NEXT
757
+  #define MSG_BUTTON_NEXT                     _UxGT("Next")
758
+#endif
759
+#ifndef MSG_BUTTON_INIT
760
+  #define MSG_BUTTON_INIT                     _UxGT("Init")
761
+#endif
762
+#ifndef MSG_BUTTON_STOP
763
+  #define MSG_BUTTON_STOP                     _UxGT("Stop")
764
+#endif
756 765
 #ifndef MSG_BUTTON_PRINT
757 766
   #define MSG_BUTTON_PRINT                    _UxGT("Print")
758 767
 #endif
768
+#ifndef MSG_BUTTON_RESET
769
+  #define MSG_BUTTON_RESET                    _UxGT("Reset")
770
+#endif
759 771
 #ifndef MSG_BUTTON_CANCEL
760 772
   #define MSG_BUTTON_CANCEL                   _UxGT("Cancel")
761 773
 #endif
774
+#ifndef MSG_BUTTON_DONE
775
+  #define MSG_BUTTON_DONE                     _UxGT("Done")
776
+#endif
762 777
 #ifndef MSG_PAUSE_PRINT
763 778
   #define MSG_PAUSE_PRINT                     _UxGT("Pause print")
764 779
 #endif
@@ -930,6 +945,9 @@
930 945
 #ifndef MSG_HEATING_FAILED_LCD_BED
931 946
   #define MSG_HEATING_FAILED_LCD_BED          _UxGT("Bed heating failed")
932 947
 #endif
948
+#ifndef MSG_HEATING_FAILED_LCD_CHAMBER
949
+  #define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Chamber heating fail")
950
+#endif
933 951
 #ifndef MSG_ERR_REDUNDANT_TEMP
934 952
   #define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: REDUNDANT TEMP")
935 953
 #endif
@@ -939,6 +957,9 @@
939 957
 #ifndef MSG_THERMAL_RUNAWAY_BED
940 958
   #define MSG_THERMAL_RUNAWAY_BED             _UxGT("BED THERMAL RUNAWAY")
941 959
 #endif
960
+#ifndef MSG_THERMAL_RUNAWAY_CHAMBER
961
+  #define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("CHAMBER T. RUNAWAY")
962
+#endif
942 963
 #ifndef MSG_ERR_MAXTEMP
943 964
   #define MSG_ERR_MAXTEMP                     _UxGT("Err: MAXTEMP")
944 965
 #endif

+ 156
- 29
Marlin/src/lcd/language/language_fr.h Ver fichero

@@ -33,19 +33,25 @@
33 33
 #define CHARSIZE 2
34 34
 
35 35
 #define WELCOME_MSG                         MACHINE_NAME _UxGT(" prête.")
36
+#define MSG_YES                             _UxGT("Oui")
37
+#define MSG_NO                              _UxGT("Non")
36 38
 #define MSG_BACK                            _UxGT("Retour")
37 39
 #define MSG_SD_INSERTED                     _UxGT("Carte insérée")
38 40
 #define MSG_SD_REMOVED                      _UxGT("Carte retirée")
39
-#define MSG_LCD_ENDSTOPS                    _UxGT("Butées") // Max length 8 characters
41
+#define MSG_LCD_ENDSTOPS                    _UxGT("Butées")
42
+#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Butées SW")
40 43
 #define MSG_MAIN                            _UxGT("Menu principal")
41
-#define MSG_AUTOSTART                       _UxGT("Demarrage auto")
44
+#define MSG_ADVANCED_SETTINGS               _UxGT("Config. avancée")
45
+#define MSG_CONFIGURATION                   _UxGT("Configuration")
46
+#define MSG_AUTOSTART                       _UxGT("Exéc. auto#.gcode")
42 47
 #define MSG_DISABLE_STEPPERS                _UxGT("Arrêter moteurs")
43 48
 #define MSG_DEBUG_MENU                      _UxGT("Menu debug")
44 49
 #define MSG_PROGRESS_BAR_TEST               _UxGT("Test barre progress.")
45 50
 #define MSG_AUTO_HOME                       _UxGT("Origine auto.")
46
-#define MSG_AUTO_HOME_X                     _UxGT("Origine X Auto.")
47
-#define MSG_AUTO_HOME_Y                     _UxGT("Origine Y Auto.")
48
-#define MSG_AUTO_HOME_Z                     _UxGT("Origine Z Auto.")
51
+#define MSG_AUTO_HOME_X                     _UxGT("Origine X auto.")
52
+#define MSG_AUTO_HOME_Y                     _UxGT("Origine Y auto.")
53
+#define MSG_AUTO_HOME_Z                     _UxGT("Origine Z auto.")
54
+#define MSG_AUTO_Z_ALIGN                    _UxGT("Align. Z auto.")
49 55
 #define MSG_LEVEL_BED_HOMING                _UxGT("Origine XYZ")
50 56
 #define MSG_LEVEL_BED_WAITING               _UxGT("Clic pour commencer")
51 57
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Point suivant")
@@ -59,14 +65,20 @@
59 65
 #define MSG_PREHEAT_1_ALL                   _UxGT("Préch. " PREHEAT_1_LABEL " Tout")
60 66
 #define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" buse")
61 67
 #define MSG_PREHEAT_1_BEDONLY               _UxGT("Préch. " PREHEAT_1_LABEL " lit")
62
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Régl. prech. " PREHEAT_1_LABEL)
68
+#define MSG_PREHEAT_1_SETTINGS              _UxGT("Régl. préch. " PREHEAT_1_LABEL)
63 69
 #define MSG_PREHEAT_2                       _UxGT("Préchauffage " PREHEAT_2_LABEL)
64 70
 #define MSG_PREHEAT_2_N                     _UxGT("Préchauff. " PREHEAT_2_LABEL " ")
65 71
 #define MSG_PREHEAT_2_ALL                   _UxGT("Préch. " PREHEAT_2_LABEL " Tout")
66 72
 #define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" buse")
67 73
 #define MSG_PREHEAT_2_BEDONLY               _UxGT("Préch. " PREHEAT_2_LABEL " lit")
68
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Régl. prech. " PREHEAT_2_LABEL)
74
+#define MSG_PREHEAT_2_SETTINGS              _UxGT("Régl. préch. " PREHEAT_2_LABEL)
75
+#define MSG_PREHEAT_CUSTOM                  _UxGT("Préchauff. perso.")
69 76
 #define MSG_COOLDOWN                        _UxGT("Refroidir")
77
+#define MSG_LASER_MENU                      _UxGT("Contrôle Laser")
78
+#define MSG_LASER_OFF                       _UxGT("Laser Off")
79
+#define MSG_LASER_ON                        _UxGT("Laser On")
80
+#define MSG_LASER_POWER                     _UxGT("Puissance")
81
+#define MSG_SPINDLE_REVERSE                 _UxGT("Inverser broches")
70 82
 #define MSG_SWITCH_PS_ON                    _UxGT("Allumer alim.")
71 83
 #define MSG_SWITCH_PS_OFF                   _UxGT("Eteindre alim.")
72 84
 #define MSG_EXTRUDE                         _UxGT("Extrusion")
@@ -77,12 +89,24 @@
77 89
 #define MSG_LEVEL_CORNERS                   _UxGT("Niveau coins")
78 90
 #define MSG_NEXT_CORNER                     _UxGT("Coin suivant")
79 91
 #define MSG_EDITING_STOPPED                 _UxGT("Arrêt édit. maillage")
80
-#define MSG_USER_MENU                       _UxGT("Commandes perso")
92
+#define MSG_MESH_X                          _UxGT("Index X")
93
+#define MSG_MESH_Y                          _UxGT("Index Y")
94
+#define MSG_MESH_EDIT_Z                     _UxGT("Valeur Z")
95
+#define MSG_USER_MENU                       _UxGT("Commandes perso.")
81 96
 
82 97
 #define MSG_UBL_DOING_G29                   _UxGT("G29 en cours")
83 98
 #define MSG_UBL_UNHOMED                     _UxGT("Origine XYZ d'abord")
84 99
 #define MSG_UBL_TOOLS                       _UxGT("Outils UBL")
85 100
 #define MSG_UBL_LEVEL_BED                   _UxGT("Niveau lit unifié")
101
+#define MSG_IDEX_MENU                       _UxGT("Mode IDEX")
102
+#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Park")
103
+#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplication")
104
+#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Copie miroir")
105
+#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Contrôle complet")
106
+#define MSG_OFFSETS_MENU                    _UxGT("Offsets Outil")
107
+#define MSG_X_OFFSET                        _UxGT("Buse 2 X")
108
+#define MSG_Y_OFFSET                        _UxGT("Buse 2 Y")
109
+#define MSG_Z_OFFSET                        _UxGT("Buse 2 Z")
86 110
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Maillage manuel")
87 111
 #define MSG_UBL_BC_INSERT                   _UxGT("Poser câle & mesurer")
88 112
 #define MSG_UBL_BC_INSERT2                  _UxGT("Mesure")
@@ -167,6 +191,7 @@
167 191
 #define MSG_MOVE_Y                          _UxGT("Dépl. Y")
168 192
 #define MSG_MOVE_Z                          _UxGT("Dépl. Z")
169 193
 #define MSG_MOVE_E                          _UxGT("Extrudeur")
194
+#define MSG_HOTEND_TOO_COLD                 _UxGT("Buse trop froide")
170 195
 #define MSG_MOVE_01MM                       _UxGT("Dépl. 0.1mm")
171 196
 #define MSG_MOVE_1MM                        _UxGT("Dépl. 1mm")
172 197
 #define MSG_MOVE_10MM                       _UxGT("Dépl. 10mm")
@@ -174,6 +199,7 @@
174 199
 #define MSG_BED_Z                           _UxGT("Lit Z")
175 200
 #define MSG_NOZZLE                          _UxGT("Buse")
176 201
 #define MSG_BED                             _UxGT("Lit")
202
+#define MSG_CHAMBER                         _UxGT("Caisson")
177 203
 #define MSG_FAN_SPEED                       _UxGT("Vitesse ventil.")
178 204
 #define MSG_EXTRA_FAN_SPEED                 _UxGT("Extra V ventil.")
179 205
 
@@ -203,6 +229,7 @@
203 229
 #endif
204 230
 #define MSG_VE_JERK                         _UxGT("Ve jerk")
205 231
 #define MSG_VELOCITY                        _UxGT("Vélocité")
232
+#define MSG_JUNCTION_DEVIATION              _UxGT("Déviat. jonct.")
206 233
 #define MSG_VMAX                            _UxGT("Vmax ")
207 234
 #define MSG_VMIN                            _UxGT("Vmin ")
208 235
 #define MSG_VTRAV_MIN                       _UxGT("V dépl. min")
@@ -240,19 +267,26 @@
240 267
 #define MSG_LOAD_EEPROM                     _UxGT("Lire config")
241 268
 #define MSG_RESTORE_FAILSAFE                _UxGT("Restaurer défauts")
242 269
 #define MSG_INIT_EEPROM                     _UxGT("Initialiser EEPROM")
270
+#define MSG_SD_UPDATE                       _UxGT("MàJ. SD")
271
+#define MSG_RESET_PRINTER                   _UxGT("RàZ. imprimante")
243 272
 #define MSG_REFRESH                         _UxGT("Actualiser")
244 273
 #define MSG_WATCH                           _UxGT("Surveiller")
245 274
 #define MSG_PREPARE                         _UxGT("Préparer")
246 275
 #define MSG_TUNE                            _UxGT("Régler")
276
+#define MSG_START_PRINT                     _UxGT("Démarrer Impr.")
277
+#define MSG_BUTTON_PRINT                    _UxGT("Imprimer")
278
+#define MSG_BUTTON_CANCEL                   _UxGT("Annuler")
247 279
 #define MSG_PAUSE_PRINT                     _UxGT("Interrompre impr.")
248 280
 #define MSG_RESUME_PRINT                    _UxGT("Reprendre impr.")
249 281
 #define MSG_STOP_PRINT                      _UxGT("Arrêter impr.")
282
+#define MSG_OUTAGE_RECOVERY                 _UxGT("Récupér. coupure")
250 283
 #define MSG_CARD_MENU                       _UxGT("Impr. depuis SD")
251 284
 #define MSG_NO_CARD                         _UxGT("Pas de carte")
252 285
 #define MSG_DWELL                           _UxGT("Repos...")
253
-#define MSG_USERWAIT                        _UxGT("Atten. de l'util.")
286
+#define MSG_USERWAIT                        _UxGT("Attente utilis.")
254 287
 #define MSG_PRINT_PAUSED                    _UxGT("Impr. en pause")
255
-#define MSG_PRINT_ABORTED                   _UxGT("Impr. Annulée")
288
+#define MSG_PRINTING                        _UxGT("Impression")
289
+#define MSG_PRINT_ABORTED                   _UxGT("Impr. annulée")
256 290
 #define MSG_NO_MOVE                         _UxGT("Moteurs bloqués.")
257 291
 #define MSG_KILLED                          _UxGT("MORT.")
258 292
 #define MSG_STOPPED                         _UxGT("STOPPÉ.")
@@ -264,34 +298,50 @@
264 298
 #define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Ech. Rappel mm")
265 299
 #define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Rappel V")
266 300
 #define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("Ech. Rappel V")
267
-#define MSG_AUTORETRACT                     _UxGT("Retrait. Auto.")
301
+#define MSG_AUTORETRACT                     _UxGT("Retrait auto.")
302
+#define MSG_TOOL_CHANGE                     _UxGT("Changement outil")
303
+#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Augmenter Z")
304
+#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Vitesse primaire")
305
+#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Vitesse retrait")
306
+#define MSG_NOZZLE_STANDBY                  _UxGT("Attente buse")
307
+#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Distance retrait")
268 308
 #define MSG_FILAMENTCHANGE                  _UxGT("Changer filament")
269 309
 #define MSG_FILAMENTLOAD                    _UxGT("Charger fil.")
270 310
 #define MSG_FILAMENTUNLOAD                  _UxGT("Décharger fil.")
271 311
 #define MSG_FILAMENTUNLOAD_ALL              _UxGT("Décharger tout")
272 312
 #define MSG_INIT_SDCARD                     _UxGT("Init. la carte SD")
273 313
 #define MSG_CHANGE_SDCARD                   _UxGT("Changer de carte")
274
-#define MSG_ZPROBE_OUT                      _UxGT("Z sonde hors lit")
314
+#define MSG_ZPROBE_OUT                      _UxGT("Sonde Z hors lit")
275 315
 #define MSG_SKEW_FACTOR                     _UxGT("Facteur écart")
276 316
 #define MSG_BLTOUCH                         _UxGT("BLTouch")
277 317
 #define MSG_BLTOUCH_SELFTEST                _UxGT("Autotest BLTouch")
278 318
 #define MSG_BLTOUCH_RESET                   _UxGT("RaZ BLTouch")
279 319
 #define MSG_BLTOUCH_DEPLOY                  _UxGT("Déployer BLTouch")
320
+#define MSG_BLTOUCH_SW_MODE                 _UxGT("Mode BLTouch SW")
321
+#define MSG_BLTOUCH_5V_MODE                 _UxGT("Mode BLTouch 5V")
322
+#define MSG_BLTOUCH_OD_MODE                 _UxGT("Mode BLTouch OD")
280 323
 #define MSG_BLTOUCH_STOW                    _UxGT("Ranger BLTouch")
324
+#define MSG_MANUAL_DEPLOY                   _UxGT("Déployer Sonde Z")
325
+#define MSG_MANUAL_STOW                     _UxGT("Ranger Sonde Z")
281 326
 #define MSG_HOME                            _UxGT("Origine")  // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST
282 327
 #define MSG_FIRST                           _UxGT("Premier")
283 328
 #define MSG_ZPROBE_ZOFFSET                  _UxGT("Décalage Z")
284 329
 #define MSG_BABYSTEP_X                      _UxGT("Babystep X")
285 330
 #define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
286 331
 #define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
332
+#define MSG_BABYSTEP_TOTAL                  _UxGT("Total")
287 333
 #define MSG_ENDSTOP_ABORT                   _UxGT("Butée abandon")
288 334
 #define MSG_HEATING_FAILED_LCD              _UxGT("Erreur de chauffe")
335
+#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Erreur de chauffe lit")
289 336
 #define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: TEMP. REDONDANTE")
290 337
 #define MSG_THERMAL_RUNAWAY                 _UxGT("EMBALLEMENT THERM.")
338
+#define MSG_THERMAL_RUNAWAY_BED             _UxGT("ERREUR THERMIQUE LIT")
291 339
 #define MSG_ERR_MAXTEMP                     _UxGT("Err: TEMP. MAX")
292 340
 #define MSG_ERR_MINTEMP                     _UxGT("Err: TEMP. MIN")
293 341
 #define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: TEMP. MAX LIT")
294 342
 #define MSG_ERR_MINTEMP_BED                 _UxGT("Err: TEMP. MIN LIT")
343
+#define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Err: MAXTEMP CAISSON")
344
+#define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Err: MINTEMP CAISSON")
295 345
 #define MSG_ERR_Z_HOMING                    MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST
296 346
 
297 347
 #define MSG_HALTED                          _UxGT("IMPR. STOPPÉE")
@@ -301,7 +351,9 @@
301 351
 #define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
302 352
 
303 353
 #define MSG_HEATING                         _UxGT("En chauffe...")
354
+#define MSG_COOLING                         _UxGT("Refroidissement")
304 355
 #define MSG_BED_HEATING                     _UxGT("Lit en chauffe...")
356
+#define MSG_BED_COOLING                     _UxGT("Refroid. du lit...")
305 357
 #define MSG_DELTA_CALIBRATE                 _UxGT("Calibration Delta")
306 358
 #define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrer X")
307 359
 #define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrer Y")
@@ -310,6 +362,7 @@
310 362
 #define MSG_DELTA_SETTINGS                  _UxGT("Réglages Delta")
311 363
 #define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Calibration Auto")
312 364
 #define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Hauteur Delta")
365
+#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Delta Z sonde")
313 366
 #define MSG_DELTA_DIAG_ROD                  _UxGT("Diagonale")
314 367
 #define MSG_DELTA_HEIGHT                    _UxGT("Hauteur")
315 368
 #define MSG_DELTA_RADIUS                    _UxGT("Rayon")
@@ -323,9 +376,9 @@
323 376
 #define MSG_MESH_LEVELING                   _UxGT("Niveau maillage")
324 377
 #define MSG_INFO_STATS_MENU                 _UxGT("Stats. imprimante")
325 378
 #define MSG_INFO_BOARD_MENU                 _UxGT("Infos carte")
326
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistors")
379
+#define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistances")
327 380
 #define MSG_INFO_EXTRUDERS                  _UxGT("Extrudeurs")
328
-#define MSG_INFO_BAUDRATE                   _UxGT("Baud")
381
+#define MSG_INFO_BAUDRATE                   _UxGT("Bauds")
329 382
 #define MSG_INFO_PROTOCOL                   _UxGT("Protocole")
330 383
 #define MSG_CASE_LIGHT                      _UxGT("Lumière caisson")
331 384
 #define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Luminosité")
@@ -358,35 +411,109 @@
358 411
 #define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Purger encore")
359 412
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Reprendre impr.")
360 413
 #define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Buse: ")
414
+#define MSG_RUNOUT_SENSOR                   _UxGT("Capteur Fil.")
361 415
 #define MSG_ERR_HOMING_FAILED               _UxGT("Echec origine")
362 416
 #define MSG_ERR_PROBING_FAILED              _UxGT("Echec sonde")
363 417
 #define MSG_M600_TOO_COLD                   _UxGT("M600: Trop froid")
418
+#define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("CHANGER FILAMENT")
419
+#define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("CHOISIR FILAMENT")
420
+#define MSG_MMU2_MENU                       _UxGT("MMU")
421
+#define MSG_MMU2_WRONG_FIRMWARE             _UxGT("Update MMU firmware!")
422
+#define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU ne répond plus")
423
+#define MSG_MMU2_RESUME                     _UxGT("Continuer impr.")
424
+#define MSG_MMU2_RESUMING                   _UxGT("Reprise...")
425
+#define MSG_MMU2_LOAD_FILAMENT              _UxGT("Charger filament")
426
+#define MSG_MMU2_LOAD_ALL                   _UxGT("Charger tous")
427
+#define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Charger dans buse")
428
+#define MSG_MMU2_EJECT_FILAMENT             _UxGT("Ejecter filament")
429
+#define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Ejecter fil. 1")
430
+#define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Ejecter fil. 2")
431
+#define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Ejecter fil. 3")
432
+#define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Ejecter fil. 4")
433
+#define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Ejecter fil. 5")
434
+#define MSG_MMU2_UNLOAD_FILAMENT            _UxGT("Retrait filament")
435
+#define MSG_MMU2_LOADING_FILAMENT           _UxGT("Chargem. fil. %i...")
436
+#define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Ejection fil...")
437
+#define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Retrait fil....")
438
+#define MSG_MMU2_ALL                        _UxGT("Tous")
439
+#define MSG_MMU2_FILAMENT0                  _UxGT("Filament 1")
440
+#define MSG_MMU2_FILAMENT1                  _UxGT("Filament 2")
441
+#define MSG_MMU2_FILAMENT2                  _UxGT("Filament 3")
442
+#define MSG_MMU2_FILAMENT3                  _UxGT("Filament 4")
443
+#define MSG_MMU2_FILAMENT4                  _UxGT("Filament 5")
444
+#define MSG_MMU2_RESET                      _UxGT("Réinit. MMU")
445
+#define MSG_MMU2_RESETTING                  _UxGT("Réinit. MMU...")
446
+#define MSG_MMU2_EJECT_RECOVER              _UxGT("Retrait, click")
447
+
448
+#define MSG_MIX                             _UxGT("Mix")
449
+#define MSG_MIX_COMPONENT                   _UxGT("Composante")
450
+#define MSG_MIXER                           _UxGT("Mixeur")
451
+#define MSG_GRADIENT                        _UxGT("Dégradé")
452
+#define MSG_FULL_GRADIENT                   _UxGT("Dégradé complet")
453
+#define MSG_TOGGLE_MIX                      _UxGT("Toggle mix")
454
+#define MSG_CYCLE_MIX                       _UxGT("Cycle mix")
455
+#define MSG_GRADIENT_MIX                    _UxGT("Mix dégradé")
456
+#define MSG_REVERSE_GRADIENT                _UxGT("Inverser dégradé")
457
+#define MSG_ACTIVE_VTOOL                    _UxGT("Active V-tool")
458
+#define MSG_START_VTOOL                     _UxGT("Début V-tool")
459
+#define MSG_END_VTOOL                       _UxGT("  Fin V-tool")
460
+#define MSG_GRADIENT_ALIAS                  _UxGT("Alias V-tool")
461
+#define MSG_RESET_VTOOLS                    _UxGT("Réinit. V-tools")
462
+#define MSG_COMMIT_VTOOL                    _UxGT("Valider Mix V-tool")
463
+#define MSG_VTOOLS_RESET                    _UxGT("V-tools réinit. ok")
464
+#define MSG_START_Z                         _UxGT("Début Z")
465
+#define MSG_END_Z                           _UxGT("  Fin Z")
466
+#define MSG_BRICKOUT                        _UxGT("Casse-briques")
467
+#define MSG_INVADERS                        _UxGT("Invaders")
468
+#define MSG_SNAKE                           _UxGT("Sn4k3")
469
+#define MSG_MAZE                            _UxGT("Labyrinthe")
364 470
 
365 471
 #if LCD_HEIGHT >= 4
366 472
   // Up to 3 lines allowed
367
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Attente Démarrage")
368
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("du filament")
369
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("changer")
370
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Attente de")
371
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("décharger filament")
473
+  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Presser bouton")
474
+  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("pour reprendre")
475
+  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parking...")
476
+  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Attente filament")
477
+  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("pour démarrer")
372 478
   #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insérer filament")
373 479
   #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("et app. bouton")
374 480
   #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("pour continuer...")
375 481
   #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Presser le bouton...")
376
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("Pr chauffer la buse")
482
+  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("pr chauffer la buse")
377 483
   #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Buse en chauffe")
378
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Patientez SVP...")
379
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Attente de")
380
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("Chargement filament")
484
+  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Patienter SVP...")
485
+  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Attente")
486
+  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("retrait du filament")
487
+  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Attente")
488
+  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("chargement filament")
381 489
   #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Attente")
382
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("Purger filament")
383
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Attente impression")
384
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("pour reprendre")
490
+  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("Purge filament")
491
+  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Presser pour finir")
492
+  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("la purge du filament")
493
+  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Attente reprise")
494
+  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("impression")
385 495
 #else // LCD_HEIGHT < 4
386 496
   // Up to 2 lines allowed
387
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Patientez...")
388
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Ejection...")
389
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insérer et clic")
497
+  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Presser pr continuer")
498
+  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Patience...")
499
+  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insérer fil.")
500
+  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Chauffer ?")
501
+  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Chauffage...")
502
+  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Ejecting...")
390 503
   #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Chargement...")
504
+  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Purge...")
505
+  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Terminer ?")
391 506
   #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Reprise...")
392 507
 #endif // LCD_HEIGHT < 4
508
+
509
+#define MSG_TMC_DRIVERS                     _UxGT("Drivers TMC")
510
+#define MSG_TMC_CURRENT                     _UxGT("Courant driver")
511
+#define MSG_TMC_HYBRID_THRS                 _UxGT("Seuil hybride")
512
+#define MSG_TMC_HOMING_THRS                 _UxGT("Home sans capteur")
513
+#define MSG_TMC_STEPPING_MODE               _UxGT("Mode pas à pas")
514
+#define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop activé")
515
+#define MSG_SERVICE_RESET                   _UxGT("Réinit.")
516
+#define MSG_SERVICE_IN                      _UxGT("  dans:")
517
+#define MSG_BACKLASH                        _UxGT("Backlash")
518
+#define MSG_BACKLASH_CORRECTION             _UxGT("Correction")
519
+#define MSG_BACKLASH_SMOOTHING              _UxGT("Lissage")

+ 2
- 0
Marlin/src/lcd/language/language_it.h Ver fichero

@@ -330,9 +330,11 @@
330 330
 #define MSG_ENDSTOP_ABORT                   _UxGT("Finecorsa annullati")
331 331
 #define MSG_HEATING_FAILED_LCD              _UxGT("Riscald. Fallito")
332 332
 #define MSG_HEATING_FAILED_LCD_BED          _UxGT("Risc. piatto fallito")
333
+#define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Risc. camera fallito")
333 334
 #define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: TEMP RIDONDANTE")
334 335
 #define MSG_THERMAL_RUNAWAY                 _UxGT("TEMP FUORI CONTROLLO")
335 336
 #define MSG_THERMAL_RUNAWAY_BED             _UxGT("TEMP PIAT.FUORI CTRL")
337
+#define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("T.CAMERA FUORI CTRL")
336 338
 #define MSG_ERR_MAXTEMP                     _UxGT("Err: TEMP MASSIMA")
337 339
 #define MSG_ERR_MINTEMP                     _UxGT("Err: TEMP MINIMA")
338 340
 #define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: TEMP MAX PIATTO")

+ 14
- 3
Marlin/src/lcd/menu/menu.cpp Ver fichero

@@ -268,6 +268,8 @@ void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, co
268 268
     #if HAS_GRAPHICAL_LCD
269 269
       drawing_screen = false;
270 270
     #endif
271
+
272
+    set_ui_selection(false);
271 273
   }
272 274
 }
273 275
 
@@ -436,12 +438,21 @@ void _lcd_draw_homing() {
436 438
   void _lcd_toggle_bed_leveling() { set_bed_leveling_enabled(!planner.leveling_active); }
437 439
 #endif
438 440
 
439
-void do_select_screen(PGM_P const yes, PGM_P const no, bool &yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
441
+//
442
+// Selection screen presents a prompt and two options
443
+//
444
+bool ui_selection; // = false
445
+void set_ui_selection(const bool sel) { ui_selection = sel; }
446
+void do_select_screen(PGM_P const yes, PGM_P const no, selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string/*=NULL*/, PGM_P const suff/*=NULL*/) {
440 447
   if (ui.encoderPosition) {
441
-    yesno = int16_t(ui.encoderPosition) > 0;
448
+    ui_selection = int16_t(ui.encoderPosition) > 0;
442 449
     ui.encoderPosition = 0;
443 450
   }
444
-  draw_select_screen(yes, no, yesno, pref, string, suff);
451
+  const bool got_click = ui.use_click();
452
+  if (got_click || ui.should_draw()) {
453
+    draw_select_screen(yes, no, ui_selection, pref, string, suff);
454
+    if (got_click) { ui_selection ? yesFunc() : noFunc(); }
455
+  }
445 456
 }
446 457
 
447 458
 #endif // HAS_LCD_MENU

+ 7
- 4
Marlin/src/lcd/menu/menu.h Ver fichero

@@ -65,12 +65,15 @@ DECLARE_MENU_EDIT_TYPE(uint32_t, long5,       ftostr5rj,       0.01f );   // 123
65 65
 ///////// Menu Item Draw Functions /////////
66 66
 ////////////////////////////////////////////
67 67
 
68
-void draw_edit_screen(PGM_P const pstr, const char* const value=NULL);
68
+typedef void (*selectFunc_t)();
69 69
 void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff);
70
-void do_select_screen(PGM_P const yes, PGM_P const no, bool &yesno, PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL);
71
-inline void do_select_screen_yn(bool &yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
72
-  do_select_screen(PSTR(MSG_YES), PSTR(MSG_NO), yesno, pref, string, suff);
70
+void set_ui_selection(const bool sel);
71
+void do_select_screen(PGM_P const yes, PGM_P const no, selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL);
72
+inline void do_select_screen_yn(selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL) {
73
+  do_select_screen(PSTR(MSG_YES), PSTR(MSG_NO), yesFunc, noFunc, pref, string, suff);
73 74
 }
75
+
76
+void draw_edit_screen(PGM_P const pstr, const char* const value=NULL);
74 77
 void draw_menu_item(const bool sel, const uint8_t row, PGM_P const pstr, const char pre_char, const char post_char);
75 78
 void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const bool center=true, const bool invert=false, const char *valstr=NULL);
76 79
 void _draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data, const bool pgm);

+ 6
- 9
Marlin/src/lcd/menu/menu_advanced.cpp Ver fichero

@@ -604,16 +604,13 @@ void menu_backlash();
604 604
 
605 605
     #include "../../module/configuration_store.h"
606 606
 
607
-    static void lcd_init_eeprom() {
608
-      ui.completion_feedback(settings.init_eeprom());
609
-      ui.goto_previous_screen();
610
-    }
611
-
612 607
     static void lcd_init_eeprom_confirm() {
613
-      START_MENU();
614
-      MENU_BACK(MSG_ADVANCED_SETTINGS);
615
-      MENU_ITEM(function, MSG_INIT_EEPROM, lcd_init_eeprom);
616
-      END_MENU();
608
+      do_select_screen(
609
+        PSTR(MSG_BUTTON_INIT), PSTR(MSG_BUTTON_CANCEL),
610
+        []{ ui.completion_feedback(settings.init_eeprom()); },
611
+        ui.goto_previous_screen,
612
+        PSTR(MSG_INIT_EEPROM), NULL, PSTR("?")
613
+      );
617 614
     }
618 615
 
619 616
   #endif

+ 17
- 17
Marlin/src/lcd/menu/menu_bed_corners.cpp Ver fichero

@@ -50,13 +50,6 @@ static_assert(LEVEL_CORNERS_Z_HOP >= 0, "LEVEL_CORNERS_Z_HOP must be >= 0. Pleas
50 50
   static bool leveling_was_active = false;
51 51
 #endif
52 52
 
53
-static inline void _lcd_level_bed_corners_back() {
54
-  #if HAS_LEVELING
55
-    set_bed_leveling_enabled(leveling_was_active);
56
-  #endif
57
-  ui.goto_previous_screen_no_defer();
58
-}
59
-
60 53
 /**
61 54
  * Level corners, starting in the front-left corner.
62 55
  */
@@ -94,17 +87,23 @@ static inline void _lcd_goto_next_corner() {
94 87
 }
95 88
 
96 89
 static inline void menu_level_bed_corners() {
97
-  START_MENU();
98
-  MENU_ITEM(function,
99
-    #if ENABLED(LEVEL_CENTER_TOO)
100
-      MSG_LEVEL_BED_NEXT_POINT
101
-    #else
102
-      MSG_NEXT_CORNER
103
-    #endif
104
-    , _lcd_goto_next_corner
90
+  do_select_screen(
91
+    PSTR(MSG_BUTTON_NEXT), PSTR(MSG_BUTTON_DONE),
92
+    _lcd_goto_next_corner,
93
+    []{
94
+      #if HAS_LEVELING
95
+        set_bed_leveling_enabled(leveling_was_active);
96
+      #endif
97
+      ui.goto_previous_screen_no_defer();
98
+    },
99
+    PSTR(
100
+      #if ENABLED(LEVEL_CENTER_TOO)
101
+        MSG_LEVEL_BED_NEXT_POINT
102
+      #else
103
+        MSG_NEXT_CORNER
104
+      #endif
105
+    ), NULL, PSTR("?")
105 106
   );
106
-  MENU_ITEM(function, MSG_BACK, _lcd_level_bed_corners_back);
107
-  END_MENU();
108 107
 }
109 108
 
110 109
 static inline void _lcd_level_bed_corners_homing() {
@@ -112,6 +111,7 @@ static inline void _lcd_level_bed_corners_homing() {
112 111
   if (all_axes_homed()) {
113 112
     bed_corner = 0;
114 113
     ui.goto_screen(menu_level_bed_corners);
114
+    set_ui_selection(true);
115 115
     _lcd_goto_next_corner();
116 116
   }
117 117
 }

+ 2
- 0
Marlin/src/lcd/menu/menu_job_recovery.cpp Ver fichero

@@ -44,6 +44,8 @@ static void lcd_power_loss_recovery_cancel() {
44 44
   ui.return_to_status();
45 45
 }
46 46
 
47
+// TODO: Display long filename with Cancel/Resume buttons
48
+//       Requires supporting methods in PLR class.
47 49
 void menu_job_recovery() {
48 50
   ui.defer_status_screen();
49 51
   START_MENU();

+ 1
- 4
Marlin/src/lcd/menu/menu_main.cpp Ver fichero

@@ -101,10 +101,7 @@
101 101
   }
102 102
 
103 103
   void menu_abort_confirm() {
104
-    START_MENU();
105
-    MENU_BACK(MSG_MAIN);
106
-    MENU_ITEM(function, MSG_STOP_PRINT, lcd_abort_job);
107
-    END_MENU();
104
+    do_select_screen(PSTR(MSG_BUTTON_STOP), PSTR(MSG_BACK), lcd_abort_job, ui.goto_previous_screen, PSTR(MSG_STOP_PRINT), NULL, PSTR("?"));
108 105
   }
109 106
 
110 107
 #endif // MACHINE_CAN_STOP

+ 10
- 10
Marlin/src/lcd/menu/menu_mixer.cpp Ver fichero

@@ -250,17 +250,17 @@ void lcd_mixer_mix_edit() {
250 250
 //
251 251
 // Reset All V-Tools
252 252
 //
253
-inline void _lcd_reset_vtools() {
254
-  LCD_MESSAGEPGM(MSG_VTOOLS_RESET);
255
-  ui.return_to_status();
256
-  mixer.reset_vtools();
257
-}
258
-
259 253
 void menu_mixer_vtools_reset_confirm() {
260
-  START_MENU();
261
-  MENU_BACK(MSG_BACK);
262
-  MENU_ITEM(function, MSG_RESET_VTOOLS, _lcd_reset_vtools);
263
-  END_MENU();
254
+  do_select_screen(
255
+    PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
256
+    []{
257
+      mixer.reset_vtools();
258
+      LCD_MESSAGEPGM(MSG_VTOOLS_RESET);
259
+      ui.return_to_status();
260
+    },
261
+    ui.goto_previous_screen,
262
+    PSTR(MSG_RESET_VTOOLS), NULL, PSTR("?")
263
+  );
264 264
 }
265 265
 
266 266
 void menu_mixer() {

+ 5
- 11
Marlin/src/lcd/menu/menu_sdcard.cpp Ver fichero

@@ -81,17 +81,12 @@ inline void sdcard_start_selected_file() {
81 81
 
82 82
 #if ENABLED(SD_MENU_CONFIRM_START)
83 83
 
84
-  bool do_print_file;
85 84
   void menu_sd_confirm() {
86
-    if (ui.should_draw())
87
-      do_select_screen(PSTR(MSG_BUTTON_PRINT), PSTR(MSG_BUTTON_CANCEL), do_print_file, PSTR(MSG_START_PRINT " "), card.longest_filename(), PSTR("?"));
88
-
89
-    if (ui.use_click()) {
90
-      if (do_print_file)
91
-        sdcard_start_selected_file();
92
-      else
93
-        ui.goto_previous_screen();
94
-    }
85
+    do_select_screen(
86
+      PSTR(MSG_BUTTON_PRINT), PSTR(MSG_BUTTON_CANCEL),
87
+      sdcard_start_selected_file, ui.goto_previous_screen,
88
+      PSTR(MSG_START_PRINT " "), card.longest_filename(), PSTR("?")
89
+    );
95 90
   }
96 91
 
97 92
 #endif
@@ -106,7 +101,6 @@ class MenuItem_sdfile {
106 101
         sd_items = screen_items;
107 102
       #endif
108 103
       #if ENABLED(SD_MENU_CONFIRM_START)
109
-        do_print_file = false;
110 104
         MenuItem_submenu::action(menu_sd_confirm);
111 105
       #else
112 106
         sdcard_start_selected_file();

+ 17
- 37
Marlin/src/lcd/menu/menu_service.cpp Ver fichero

@@ -31,52 +31,32 @@
31 31
 #include "menu.h"
32 32
 #include "../../module/printcounter.h"
33 33
 
34
-inline void _lcd_reset_service(const int index) {
35
-  print_job_timer.resetServiceInterval(index);
36
-  BUZZ(200, 404);
37
-  ui.reset_status();
38
-  ui.return_to_status();
34
+inline void _menu_service(const int index, PGM_P const name) {
35
+  char sram[30];
36
+  strncpy_P(sram, name, 29);
37
+  do_select_screen(
38
+    PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
39
+    []{
40
+      print_job_timer.resetServiceInterval(index);
41
+      ui.completion_feedback(true);
42
+      ui.reset_status();
43
+      ui.return_to_status();
44
+    },
45
+    ui.goto_previous_screen,
46
+    PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
47
+  );
39 48
 }
40 49
 
41 50
 #if SERVICE_INTERVAL_1 > 0
42
-  void menu_action_reset_service1() { _lcd_reset_service(1); }
51
+  void menu_service1() { _menu_service(1, PSTR(SERVICE_NAME_1)); }
43 52
 #endif
44 53
 
45 54
 #if SERVICE_INTERVAL_2 > 0
46
-  void menu_action_reset_service2() { _lcd_reset_service(2); }
55
+  void menu_service2() { _menu_service(2, PSTR(SERVICE_NAME_2)); }
47 56
 #endif
48 57
 
49 58
 #if SERVICE_INTERVAL_3 > 0
50
-  void menu_action_reset_service3() { _lcd_reset_service(3); }
51
-#endif
52
-
53
-inline void _menu_service(const int index) {
54
-  START_MENU();
55
-  MENU_BACK(MSG_MAIN);
56
-  switch (index) {
57
-    #if SERVICE_INTERVAL_1 > 0
58
-      case 1: MENU_ITEM(function, MSG_SERVICE_RESET, menu_action_reset_service1); break;
59
-    #endif
60
-    #if SERVICE_INTERVAL_2 > 0
61
-      case 2: MENU_ITEM(function, MSG_SERVICE_RESET, menu_action_reset_service2); break;
62
-    #endif
63
-    #if SERVICE_INTERVAL_3 > 0
64
-      case 3: MENU_ITEM(function, MSG_SERVICE_RESET, menu_action_reset_service3); break;
65
-    #endif
66
-  }
67
-  END_MENU();
68
-}
69
-
70
-#if SERVICE_INTERVAL_1 > 0
71
-  void menu_service1() { _menu_service(1); }
72
-#endif
73
-
74
-#if SERVICE_INTERVAL_2 > 0
75
-  void menu_service2() { _menu_service(2); }
76
-#endif
77
-
78
-#if SERVICE_INTERVAL_3 > 0
79
-  void menu_service3() { _menu_service(3); }
59
+  void menu_service3() { _menu_service(3, PSTR(SERVICE_NAME_3)); }
80 60
 #endif
81 61
 
82 62
 #endif // HAS_LCD_MENU && HAS_SERVICE_INTERVALS && PRINTCOUNTER

+ 42
- 42
Marlin/src/lcd/menu/menu_tmc.cpp Ver fichero

@@ -32,7 +32,7 @@
32 32
 #include "../../module/stepper_indirection.h"
33 33
 #include "../../feature/tmc_util.h"
34 34
 
35
-#define TMC_EDIT_STORED_I_RMS(ST) MENU_ITEM_EDIT_CALLBACK(uint16_4, MSG_##ST, &stepper##ST.val_mA, 100, 3000, refresh_stepper_current_##ST)
35
+#define TMC_EDIT_STORED_I_RMS(ST,MSG) MENU_ITEM_EDIT_CALLBACK(uint16_4, MSG, &stepper##ST.val_mA, 100, 3000, refresh_stepper_current_##ST)
36 36
 
37 37
 #if AXIS_IS_TMC(X)
38 38
   void refresh_stepper_current_X()  { stepperX.refresh_stepper_current();  }
@@ -78,50 +78,50 @@ void menu_tmc_current() {
78 78
   START_MENU();
79 79
   MENU_BACK(MSG_TMC_DRIVERS);
80 80
   #if AXIS_IS_TMC(X)
81
-    TMC_EDIT_STORED_I_RMS(X);
81
+    TMC_EDIT_STORED_I_RMS(X, MSG_X);
82 82
   #endif
83 83
   #if AXIS_IS_TMC(Y)
84
-    TMC_EDIT_STORED_I_RMS(Y);
84
+    TMC_EDIT_STORED_I_RMS(Y, MSG_Y);
85 85
   #endif
86 86
   #if AXIS_IS_TMC(Z)
87
-    TMC_EDIT_STORED_I_RMS(Z);
87
+    TMC_EDIT_STORED_I_RMS(Z, MSG_Z);
88 88
   #endif
89 89
   #if AXIS_IS_TMC(X2)
90
-    TMC_EDIT_STORED_I_RMS(X2);
90
+    TMC_EDIT_STORED_I_RMS(X2, MSG_X2);
91 91
   #endif
92 92
   #if AXIS_IS_TMC(Y2)
93
-    TMC_EDIT_STORED_I_RMS(Y2);
93
+    TMC_EDIT_STORED_I_RMS(Y2, MSG_Y2);
94 94
   #endif
95 95
   #if AXIS_IS_TMC(Z2)
96
-    TMC_EDIT_STORED_I_RMS(Z2);
96
+    TMC_EDIT_STORED_I_RMS(Z2, MSG_Z2);
97 97
   #endif
98 98
   #if AXIS_IS_TMC(Z3)
99
-    TMC_EDIT_STORED_I_RMS(Z3);
99
+    TMC_EDIT_STORED_I_RMS(Z3, MSG_Z3);
100 100
   #endif
101 101
   #if AXIS_IS_TMC(E0)
102
-    TMC_EDIT_STORED_I_RMS(E0);
102
+    TMC_EDIT_STORED_I_RMS(E0, MSG_E1);
103 103
   #endif
104 104
   #if AXIS_IS_TMC(E1)
105
-    TMC_EDIT_STORED_I_RMS(E1);
105
+    TMC_EDIT_STORED_I_RMS(E1, MSG_E2);
106 106
   #endif
107 107
   #if AXIS_IS_TMC(E2)
108
-    TMC_EDIT_STORED_I_RMS(E2);
108
+    TMC_EDIT_STORED_I_RMS(E2, MSG_E3);
109 109
   #endif
110 110
   #if AXIS_IS_TMC(E3)
111
-    TMC_EDIT_STORED_I_RMS(E3);
111
+    TMC_EDIT_STORED_I_RMS(E3, MSG_E4);
112 112
   #endif
113 113
   #if AXIS_IS_TMC(E4)
114
-    TMC_EDIT_STORED_I_RMS(E4);
114
+    TMC_EDIT_STORED_I_RMS(E4, MSG_E5);
115 115
   #endif
116 116
   #if AXIS_IS_TMC(E5)
117
-    TMC_EDIT_STORED_I_RMS(E5);
117
+    TMC_EDIT_STORED_I_RMS(E5, MSG_E6);
118 118
   #endif
119 119
   END_MENU();
120 120
 }
121 121
 
122 122
 #if ENABLED(HYBRID_THRESHOLD)
123 123
 
124
-  #define TMC_EDIT_STORED_HYBRID_THRS(ST) MENU_ITEM_EDIT_CALLBACK(uint8, MSG_##ST, &stepper##ST.stored.hybrid_thrs, 0, 255, refresh_hybrid_thrs_##ST);
124
+  #define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) MENU_ITEM_EDIT_CALLBACK(uint8, MSG, &stepper##ST.stored.hybrid_thrs, 0, 255, refresh_hybrid_thrs_##ST);
125 125
 
126 126
   #if AXIS_HAS_STEALTHCHOP(X)
127 127
     void refresh_hybrid_thrs_X()  {  stepperX.refresh_hybrid_thrs(planner.settings.axis_steps_per_mm[X_AXIS]); }
@@ -167,43 +167,43 @@ void menu_tmc_current() {
167 167
     START_MENU();
168 168
     MENU_BACK(MSG_TMC_DRIVERS);
169 169
     #if AXIS_HAS_STEALTHCHOP(X)
170
-      TMC_EDIT_STORED_HYBRID_THRS(X);
170
+      TMC_EDIT_STORED_HYBRID_THRS(X, MSG_X);
171 171
     #endif
172 172
     #if AXIS_HAS_STEALTHCHOP(Y)
173
-      TMC_EDIT_STORED_HYBRID_THRS(Y);
173
+      TMC_EDIT_STORED_HYBRID_THRS(Y, MSG_Y);
174 174
     #endif
175 175
     #if AXIS_HAS_STEALTHCHOP(Z)
176
-      TMC_EDIT_STORED_HYBRID_THRS(Z);
176
+      TMC_EDIT_STORED_HYBRID_THRS(Z, MSG_Z);
177 177
     #endif
178 178
     #if AXIS_HAS_STEALTHCHOP(X2)
179
-      TMC_EDIT_STORED_HYBRID_THRS(X2);
179
+      TMC_EDIT_STORED_HYBRID_THRS(X2, MSG_X2);
180 180
     #endif
181 181
     #if AXIS_HAS_STEALTHCHOP(Y2)
182
-      TMC_EDIT_STORED_HYBRID_THRS(Y2);
182
+      TMC_EDIT_STORED_HYBRID_THRS(Y2, MSG_Y2);
183 183
     #endif
184 184
     #if AXIS_HAS_STEALTHCHOP(Z2)
185
-      TMC_EDIT_STORED_HYBRID_THRS(Z2);
185
+      TMC_EDIT_STORED_HYBRID_THRS(Z2, MSG_Z2);
186 186
     #endif
187 187
     #if AXIS_HAS_STEALTHCHOP(Z3)
188
-      TMC_EDIT_STORED_HYBRID_THRS(Z3);
188
+      TMC_EDIT_STORED_HYBRID_THRS(Z3, MSG_Z3);
189 189
     #endif
190 190
     #if AXIS_HAS_STEALTHCHOP(E0)
191
-      TMC_EDIT_STORED_HYBRID_THRS(E0);
191
+      TMC_EDIT_STORED_HYBRID_THRS(E0, MSG_E1);
192 192
     #endif
193 193
     #if AXIS_HAS_STEALTHCHOP(E1)
194
-      TMC_EDIT_STORED_HYBRID_THRS(E1);
194
+      TMC_EDIT_STORED_HYBRID_THRS(E1, MSG_E2);
195 195
     #endif
196 196
     #if AXIS_HAS_STEALTHCHOP(E2)
197
-      TMC_EDIT_STORED_HYBRID_THRS(E2);
197
+      TMC_EDIT_STORED_HYBRID_THRS(E2, MSG_E3);
198 198
     #endif
199 199
     #if AXIS_HAS_STEALTHCHOP(E3)
200
-      TMC_EDIT_STORED_HYBRID_THRS(E3);
200
+      TMC_EDIT_STORED_HYBRID_THRS(E3, MSG_E4);
201 201
     #endif
202 202
     #if AXIS_HAS_STEALTHCHOP(E4)
203
-      TMC_EDIT_STORED_HYBRID_THRS(E4);
203
+      TMC_EDIT_STORED_HYBRID_THRS(E4, MSG_E5);
204 204
     #endif
205 205
     #if AXIS_HAS_STEALTHCHOP(E5)
206
-      TMC_EDIT_STORED_HYBRID_THRS(E5);
206
+      TMC_EDIT_STORED_HYBRID_THRS(E5, MSG_E6);
207 207
     #endif
208 208
     END_MENU();
209 209
   }
@@ -243,7 +243,7 @@ void menu_tmc_current() {
243 243
 
244 244
 #if HAS_STEALTHCHOP
245 245
 
246
-  #define TMC_EDIT_STEP_MODE(ST) MENU_ITEM_EDIT_CALLBACK(bool, MSG_##ST, &stepper##ST.stored.stealthChop_enabled, refresh_stepping_mode_##ST)
246
+  #define TMC_EDIT_STEP_MODE(ST, MSG) MENU_ITEM_EDIT_CALLBACK(bool, MSG, &stepper##ST.stored.stealthChop_enabled, refresh_stepping_mode_##ST)
247 247
 
248 248
   #if AXIS_HAS_STEALTHCHOP(X)
249 249
     void refresh_stepping_mode_X()  { stepperX.refresh_stepping_mode();  }
@@ -290,43 +290,43 @@ void menu_tmc_current() {
290 290
     STATIC_ITEM(MSG_TMC_STEALTH_ENABLED);
291 291
     MENU_BACK(MSG_TMC_DRIVERS);
292 292
     #if AXIS_HAS_STEALTHCHOP(X)
293
-      TMC_EDIT_STEP_MODE(X);
293
+      TMC_EDIT_STEP_MODE(X, MSG_X);
294 294
     #endif
295 295
     #if AXIS_HAS_STEALTHCHOP(Y)
296
-      TMC_EDIT_STEP_MODE(Y);
296
+      TMC_EDIT_STEP_MODE(Y, MSG_Y);
297 297
     #endif
298 298
     #if AXIS_HAS_STEALTHCHOP(Z)
299
-      TMC_EDIT_STEP_MODE(Z);
299
+      TMC_EDIT_STEP_MODE(Z, MSG_Z);
300 300
     #endif
301 301
     #if AXIS_HAS_STEALTHCHOP(X2)
302
-      TMC_EDIT_STEP_MODE(X2);
302
+      TMC_EDIT_STEP_MODE(X2, MSG_X2);
303 303
     #endif
304 304
     #if AXIS_HAS_STEALTHCHOP(Y2)
305
-      TMC_EDIT_STEP_MODE(Y2);
305
+      TMC_EDIT_STEP_MODE(Y2, MSG_Y2);
306 306
     #endif
307 307
     #if AXIS_HAS_STEALTHCHOP(Z2)
308
-      TMC_EDIT_STEP_MODE(Z2);
308
+      TMC_EDIT_STEP_MODE(Z2, MSG_Z2);
309 309
     #endif
310 310
     #if AXIS_HAS_STEALTHCHOP(Z3)
311
-      TMC_EDIT_STEP_MODE(Z3);
311
+      TMC_EDIT_STEP_MODE(Z3, MSG_Z3);
312 312
     #endif
313 313
     #if AXIS_HAS_STEALTHCHOP(E0)
314
-      TMC_EDIT_STEP_MODE(E0);
314
+      TMC_EDIT_STEP_MODE(E0, MSG_E1);
315 315
     #endif
316 316
     #if AXIS_HAS_STEALTHCHOP(E1)
317
-      TMC_EDIT_STEP_MODE(E1);
317
+      TMC_EDIT_STEP_MODE(E1, MSG_E2);
318 318
     #endif
319 319
     #if AXIS_HAS_STEALTHCHOP(E2)
320
-      TMC_EDIT_STEP_MODE(E2);
320
+      TMC_EDIT_STEP_MODE(E2, MSG_E3);
321 321
     #endif
322 322
     #if AXIS_HAS_STEALTHCHOP(E3)
323
-      TMC_EDIT_STEP_MODE(E3);
323
+      TMC_EDIT_STEP_MODE(E3, MSG_E4);
324 324
     #endif
325 325
     #if AXIS_HAS_STEALTHCHOP(E4)
326
-      TMC_EDIT_STEP_MODE(E4);
326
+      TMC_EDIT_STEP_MODE(E4, MSG_E5);
327 327
     #endif
328 328
     #if AXIS_HAS_STEALTHCHOP(E5)
329
-      TMC_EDIT_STEP_MODE(E5);
329
+      TMC_EDIT_STEP_MODE(E5, MSG_E6);
330 330
     #endif
331 331
     END_MENU();
332 332
   }

+ 4
- 2
Marlin/src/lcd/menu/menu_ubl.cpp Ver fichero

@@ -615,8 +615,10 @@ void _lcd_ubl_step_by_step() {
615 615
 void _lcd_ubl_level_bed() {
616 616
   START_MENU();
617 617
   MENU_BACK(MSG_MOTION);
618
-  MENU_ITEM(gcode, MSG_UBL_ACTIVATE_MESH, PSTR("G29 A"));
619
-  MENU_ITEM(gcode, MSG_UBL_DEACTIVATE_MESH, PSTR("G29 D"));
618
+  if (planner.leveling_active)
619
+    MENU_ITEM(gcode, MSG_UBL_DEACTIVATE_MESH, PSTR("G29 D"));
620
+  else
621
+    MENU_ITEM(gcode, MSG_UBL_ACTIVATE_MESH, PSTR("G29 A"));
620 622
   MENU_ITEM(submenu, MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
621 623
   MENU_ITEM(function, MSG_UBL_MESH_EDIT, _lcd_ubl_output_map_lcd_cmd);
622 624
   MENU_ITEM(submenu, MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);

+ 25
- 8
Marlin/src/lcd/ultralcd.cpp Ver fichero

@@ -192,24 +192,39 @@ millis_t next_button_update_ms;
192 192
 
193 193
   #endif
194 194
 
195
-  void wrap_string(uint8_t y, const char * const string) {
196
-    uint8_t x = LCD_WIDTH;
195
+  void _wrap_string(uint8_t &x, uint8_t &y, const char * const string, read_byte_cb_t cb_read_byte) {
196
+    SETCURSOR(x, y);
197 197
     if (string) {
198 198
       uint8_t *p = (uint8_t*)string;
199 199
       for (;;) {
200
-        if (x >= LCD_WIDTH) {
201
-          x = 0;
202
-          SETCURSOR(0, y++);
203
-        }
204 200
         wchar_t ch;
205
-        p = get_utf8_value_cb(p, read_byte_ram, &ch);
201
+        p = get_utf8_value_cb(p, cb_read_byte, &ch);
206 202
         if (!ch) break;
207 203
         lcd_put_wchar(ch);
208 204
         x++;
205
+        if (x >= LCD_WIDTH) {
206
+          x = 0; y++;
207
+          SETCURSOR(0, y);
208
+        }
209 209
       }
210 210
     }
211 211
   }
212 212
 
213
+  void MarlinUI::draw_select_screen_prompt(PGM_P const pref, const char * const string/*=NULL*/, PGM_P const suff/*=NULL*/) {
214
+    const uint8_t plen = utf8_strlen_P(pref), slen = suff ? utf8_strlen_P(suff) : 0;
215
+    uint8_t x = 0, y = 0;
216
+    if (!string && plen + slen <= LCD_WIDTH) {
217
+      x = (LCD_WIDTH - plen - slen) / 2;
218
+      y = LCD_HEIGHT > 3 ? 1 : 0;
219
+    }
220
+    wrap_string_P(x, y, pref);
221
+    if (string) {
222
+      if (x) { x = 0; y++; } // Move to the start of the next line
223
+      wrap_string(x, y, string);
224
+    }
225
+    if (suff) wrap_string_P(x, y, suff);
226
+  }
227
+
213 228
 #endif // HAS_LCD_MENU
214 229
 
215 230
 void MarlinUI::init() {
@@ -668,6 +683,7 @@ void MarlinUI::update() {
668 683
 
669 684
   static uint16_t max_display_update_time = 0;
670 685
   static millis_t next_lcd_update_ms;
686
+  millis_t ms = millis();
671 687
 
672 688
   #if HAS_LCD_MENU
673 689
 
@@ -729,11 +745,12 @@ void MarlinUI::update() {
729 745
 
730 746
       refresh();
731 747
       init_lcd(); // May revive the LCD if static electricity killed it
748
+      ms = millis();
749
+      next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL;  // delay LCD update until after SD activity completes
732 750
     }
733 751
 
734 752
   #endif // SDSUPPORT && SD_DETECT_PIN
735 753
 
736
-  const millis_t ms = millis();
737 754
   if (ELAPSED(ms, next_lcd_update_ms)
738 755
     #if HAS_GRAPHICAL_LCD
739 756
       || drawing_screen

+ 7
- 1
Marlin/src/lcd/ultralcd.h Ver fichero

@@ -72,7 +72,11 @@
72 72
       #define LCDWRITE(c) lcd_put_wchar(c)
73 73
     #endif
74 74
 
75
-    void wrap_string(uint8_t y, const char * const string);
75
+    #include "fontutils.h"
76
+
77
+    void _wrap_string(uint8_t &x, uint8_t &y, const char * const string, read_byte_cb_t cb_read_byte);
78
+    inline void wrap_string_P(uint8_t &x, uint8_t &y, PGM_P const pstr) { _wrap_string(x, y, pstr, read_byte_rom); }
79
+    inline void wrap_string(uint8_t &x, uint8_t &y, const char * const string) { _wrap_string(x, y, string, read_byte_ram); }
76 80
 
77 81
     #if ENABLED(SDSUPPORT)
78 82
       #include "../sd/cardreader.h"
@@ -457,6 +461,8 @@ public:
457 461
       static void ubl_plot(const uint8_t x, const uint8_t inverted_y);
458 462
     #endif
459 463
 
464
+    static void draw_select_screen_prompt(PGM_P const pref, const char * const string=NULL, PGM_P const suff=NULL);
465
+
460 466
   #elif HAS_SPI_LCD
461 467
 
462 468
     static constexpr bool lcd_clicked = false;

+ 19
- 1
Marlin/src/module/configuration_store.cpp Ver fichero

@@ -64,6 +64,10 @@
64 64
   #include "../feature/bedlevel/bedlevel.h"
65 65
 #endif
66 66
 
67
+#if ENABLED(EXTENSIBLE_UI)
68
+  #include "../lcd/extensible_ui/ui_api.h"
69
+#endif
70
+
67 71
 #if HAS_SERVOS
68 72
   #include "servo.h"
69 73
 #endif
@@ -1120,6 +1124,10 @@ void MarlinSettings::postprocess() {
1120 1124
         store_mesh(ubl.storage_slot);
1121 1125
     #endif
1122 1126
 
1127
+    #if ENABLED(EXTENSIBLE_UI)
1128
+      if (!eeprom_error) ExtUI::onStoreSettings();
1129
+    #endif
1130
+
1123 1131
     return !eeprom_error;
1124 1132
   }
1125 1133
 
@@ -1874,7 +1882,13 @@ void MarlinSettings::postprocess() {
1874 1882
   }
1875 1883
 
1876 1884
   bool MarlinSettings::load() {
1877
-    if (validate()) return _load();
1885
+    if (validate()) {
1886
+      const bool success = _load();
1887
+      #if ENABLED(EXTENSIBLE_UI)
1888
+        if (success) ExtUI::onLoadSettings();
1889
+      #endif
1890
+      return success;
1891
+    }
1878 1892
     reset();
1879 1893
     return true;
1880 1894
   }
@@ -2290,6 +2304,10 @@ void MarlinSettings::reset() {
2290 2304
 
2291 2305
   DEBUG_ECHO_START();
2292 2306
   DEBUG_ECHOLNPGM("Hardcoded Default Settings Loaded");
2307
+
2308
+  #if ENABLED(EXTENSIBLE_UI)
2309
+    ExtUI::onFactoryReset();
2310
+  #endif
2293 2311
 }
2294 2312
 
2295 2313
 #if DISABLED(DISABLE_M503)

+ 48
- 20
Marlin/src/module/temperature.cpp Ver fichero

@@ -86,17 +86,17 @@ Temperature thermalManager;
86 86
  */
87 87
 
88 88
 #if HAS_HEATED_BED
89
-  #define _BED_PSTR(E) (E) == -1 ? PSTR(MSG ## _BED) :
89
+  #define _BED_PSTR(M,E) (E) == -1 ? PSTR(M) :
90 90
 #else
91
-  #define _BED_PSTR(E)
91
+  #define _BED_PSTR(M,E)
92 92
 #endif
93 93
 #if HAS_HEATED_CHAMBER
94
-  #define _CHAMBER_PSTR(E) (E) == -2 ? PSTR(MSG ## _CHAMBER) :
94
+  #define _CHAMBER_PSTR(M,E) (E) == -2 ? PSTR(M) :
95 95
 #else
96
-  #define _CHAMBER_PSTR(E)
96
+  #define _CHAMBER_PSTR(M,E)
97 97
 #endif
98
-#define _E_PSTR(M,E,N) (HOTENDS >= (N) && (E) == (N)-1) ? PSTR(MSG_E##N " " M) :
99
-#define TEMP_ERR_PSTR(M,E) _BED_PSTR(E) _CHAMBER_PSTR(E) _E_PSTR(M,E,2) _E_PSTR(M,E,3) _E_PSTR(M,E,4) _E_PSTR(M,E,5) _E_PSTR(M,E,6) PSTR(MSG_E1 " " M)
98
+#define _E_PSTR(M,E,N) ((HOTENDS) >= (N) && (E) == (N)-1) ? PSTR(MSG_E##N " " M) :
99
+#define TEMP_ERR_PSTR(M,E) _BED_PSTR(M##_BED,E) _CHAMBER_PSTR(M##_CHAMBER,E) _E_PSTR(M,E,2) _E_PSTR(M,E,3) _E_PSTR(M,E,4) _E_PSTR(M,E,5) _E_PSTR(M,E,6) PSTR(MSG_E1 " " M)
100 100
 
101 101
 // public:
102 102
 
@@ -944,11 +944,29 @@ void Temperature::manage_heater() {
944 944
     if (temp_hotend[1].current < MAX(HEATER_1_MINTEMP, HEATER_1_MAX6675_TMIN + .01)) min_temp_error(1);
945 945
   #endif
946 946
 
947
-  #if WATCH_HOTENDS || WATCH_BED || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN || HEATER_IDLE_HANDLER || WATCH_CHAMBER
947
+  #define HAS_THERMAL_PROTECTION (ENABLED(THERMAL_PROTECTION_HOTENDS) || HAS_THERMALLY_PROTECTED_BED || ENABLED(THERMAL_PROTECTION_CHAMBER))
948
+
949
+  #if HAS_THERMAL_PROTECTION || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN || HEATER_IDLE_HANDLER
948 950
     millis_t ms = millis();
949 951
   #endif
950 952
 
953
+  #if HAS_THERMAL_PROTECTION
954
+    #ifndef THERMAL_PROTECTION_GRACE_PERIOD
955
+      #define THERMAL_PROTECTION_GRACE_PERIOD 0 // No grace period needed on well-behaved boards
956
+    #endif
957
+    #if THERMAL_PROTECTION_GRACE_PERIOD > 0
958
+      static millis_t grace_period = ms + THERMAL_PROTECTION_GRACE_PERIOD;
959
+      if (ELAPSED(ms, grace_period)) grace_period = 0UL;
960
+    #else
961
+      static constexpr millis_t grace_period = 0UL;
962
+    #endif
963
+  #endif
964
+
951 965
   HOTEND_LOOP() {
966
+    #if ENABLED(THERMAL_PROTECTION_HOTENDS)
967
+      if (!grace_period && degHotend(e) > temp_range[e].maxtemp)
968
+        _temp_error(e, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, e));
969
+    #endif
952 970
 
953 971
     #if HEATER_IDLE_HANDLER
954 972
       hotend_idle[e].update(ms);
@@ -1001,6 +1019,11 @@ void Temperature::manage_heater() {
1001 1019
 
1002 1020
   #if HAS_HEATED_BED
1003 1021
 
1022
+    #if ENABLED(THERMAL_PROTECTION_BED)
1023
+      if (!grace_period && degBed() > BED_MAXTEMP)
1024
+        _temp_error(-1, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, -1));
1025
+    #endif
1026
+
1004 1027
     #if WATCH_BED
1005 1028
       // Make sure temperature is increasing
1006 1029
       if (watch_bed.elapsed(ms)) {        // Time to check the bed?
@@ -1071,6 +1094,11 @@ void Temperature::manage_heater() {
1071 1094
 
1072 1095
     #if HAS_HEATED_CHAMBER
1073 1096
 
1097
+      #if ENABLED(THERMAL_PROTECTION_CHAMBER)
1098
+        if (!grace_period && degChamber() > CHAMBER_MAXTEMP)
1099
+          _temp_error(-2, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, -2));
1100
+      #endif
1101
+
1074 1102
       #if WATCH_CHAMBER
1075 1103
         // Make sure temperature is increasing
1076 1104
         if (watch_chamber.elapsed(ms)) {                  // Time to check the chamber?
@@ -1602,7 +1630,7 @@ void Temperature::init() {
1602 1630
   }
1603 1631
 #endif
1604 1632
 
1605
-#if ENABLED(THERMAL_PROTECTION_HOTENDS) || HAS_THERMALLY_PROTECTED_BED || ENABLED(THERMAL_PROTECTION_CHAMBER)
1633
+#if HAS_THERMAL_PROTECTION
1606 1634
 
1607 1635
   #if ENABLED(THERMAL_PROTECTION_HOTENDS)
1608 1636
     Temperature::tr_state_machine_t Temperature::tr_state_machine[HOTENDS]; // = { { TRInactive, 0 } };
@@ -1619,17 +1647,17 @@ void Temperature::init() {
1619 1647
     static float tr_target_temperature[HOTENDS + 1] = { 0.0 };
1620 1648
 
1621 1649
     /**
1622
-        SERIAL_ECHO_START();
1623
-        SERIAL_ECHOPGM("Thermal Thermal Runaway Running. Heater ID: ");
1624
-        if (heater_id == -2) SERIAL_ECHOPGM("chamber");
1625
-        if (heater_id < 0) SERIAL_ECHOPGM("bed"); else SERIAL_ECHO(heater_id);
1626
-        SERIAL_ECHOPAIR(" ;  State:", sm.state, " ;  Timer:", sm.timer, " ;  Temperature:", current, " ;  Target Temp:", target);
1627
-        if (heater_id >= 0)
1628
-          SERIAL_ECHOPAIR(" ;  Idle Timeout:", hotend_idle[heater_id].timed_out);
1629
-        else
1630
-          SERIAL_ECHOPAIR(" ;  Idle Timeout:", bed_idle.timed_out);
1631
-        SERIAL_EOL();
1632
-    */
1650
+      SERIAL_ECHO_START();
1651
+      SERIAL_ECHOPGM("Thermal Thermal Runaway Running. Heater ID: ");
1652
+      if (heater_id == -2) SERIAL_ECHOPGM("chamber");
1653
+      if (heater_id < 0) SERIAL_ECHOPGM("bed"); else SERIAL_ECHO(heater_id);
1654
+      SERIAL_ECHOPAIR(" ;  State:", sm.state, " ;  Timer:", sm.timer, " ;  Temperature:", current, " ;  Target Temp:", target);
1655
+      if (heater_id >= 0)
1656
+        SERIAL_ECHOPAIR(" ;  Idle Timeout:", hotend_idle[heater_id].timed_out);
1657
+      else
1658
+        SERIAL_ECHOPAIR(" ;  Idle Timeout:", bed_idle.timed_out);
1659
+      SERIAL_EOL();
1660
+    //*/
1633 1661
 
1634 1662
     const int heater_index = heater_id >= 0 ? heater_id : HOTENDS;
1635 1663
 
@@ -2647,7 +2675,7 @@ void Temperature::isr() {
2647 2675
     void Temperature::set_heating_message(const uint8_t e) {
2648 2676
       const bool heating = isHeatingHotend(e);
2649 2677
       #if HOTENDS > 1
2650
-        ui.status_printf_P(0, heating ? PSTR("E%i " MSG_HEATING) : PSTR("E%i " MSG_COOLING), int(e + 1));
2678
+        ui.status_printf_P(0, heating ? PSTR("E%c " MSG_HEATING) : PSTR("E%c " MSG_COOLING), '1' + e);
2651 2679
       #else
2652 2680
         ui.set_status_P(heating ? PSTR("E " MSG_HEATING) : PSTR("E " MSG_COOLING));
2653 2681
       #endif

+ 53
- 78
Marlin/src/module/tool_change.cpp Ver fichero

@@ -280,47 +280,37 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
280 280
                   grabpos = parkingposx[tmp_extruder] + (tmp_extruder ? PARKING_EXTRUDER_GRAB_DISTANCE : -(PARKING_EXTRUDER_GRAB_DISTANCE)) + x_offset;
281 281
 
282 282
       /**
283
-       * 1. Raise Z-Axis to give enough clearance
284
-       * 2. Move to park position of old extruder
285
-       * 3. Disengage magnetic field, wait for delay
286
-       * 4. Move near new extruder
287
-       * 5. Engage magnetic field for new extruder
288
-       * 6. Move to parking incl. offset of new extruder
289
-       * 7. Lower Z-Axis
283
+       * 1. Move to park position of old extruder
284
+       * 2. Disengage magnetic field, wait for delay
285
+       * 3. Move near new extruder
286
+       * 4. Engage magnetic field for new extruder
287
+       * 5. Move to parking incl. offset of new extruder
288
+       * 6. Lower Z-Axis
290 289
        */
291 290
 
292 291
       // STEP 1
293 292
 
294 293
       if (DEBUGGING(LEVELING)) DEBUG_POS("Start Autopark", current_position);
295 294
 
296
-      current_position[Z_AXIS] += toolchange_settings.z_raise;
297
-
298
-      if (DEBUGGING(LEVELING)) DEBUG_POS("(1) Raise Z-Axis", current_position);
299
-
300
-      fast_line_to_current(Z_AXIS);
301
-      planner.synchronize();
302
-
303
-      // STEP 2
304
-
305 295
       current_position[X_AXIS] = parkingposx[active_extruder] + x_offset;
306 296
 
307 297
       if (DEBUGGING(LEVELING)) {
308
-        DEBUG_ECHOLNPAIR("(2) Park extruder ", int(active_extruder));
298
+        DEBUG_ECHOLNPAIR("(1) Park extruder ", int(active_extruder));
309 299
         DEBUG_POS("Moving ParkPos", current_position);
310 300
       }
311 301
 
312 302
       fast_line_to_current(X_AXIS);
313 303
       planner.synchronize();
314 304
 
315
-      // STEP 3
305
+      // STEP 2
316 306
 
317
-      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(3) Disengage magnet ");
307
+      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(2) Disengage magnet ");
318 308
 
319 309
       pe_deactivate_solenoid(active_extruder);
320 310
 
321
-      // STEP 4
311
+      // STEP 3
322 312
 
323
-      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(4) Move to position near new extruder");
313
+      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(3) Move to position near new extruder");
324 314
 
325 315
       current_position[X_AXIS] += active_extruder ? -10 : 10; // move 10mm away from parked extruder
326 316
 
@@ -329,8 +319,8 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
329 319
       fast_line_to_current(X_AXIS);
330 320
       planner.synchronize();
331 321
 
332
-      // STEP 5
333
-      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(5) Engage magnetic field");
322
+      // STEP 4
323
+      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(4) Engage magnetic field");
334 324
 
335 325
       #if ENABLED(PARKING_EXTRUDER_SOLENOIDS_INVERT)
336 326
         pe_activate_solenoid(active_extruder); //just save power for inverted magnets
@@ -338,16 +328,16 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
338 328
 
339 329
       pe_activate_solenoid(tmp_extruder);
340 330
 
341
-      // STEP 6
331
+      // STEP 5
342 332
 
343 333
       current_position[X_AXIS] = grabpos + (tmp_extruder ? -10 : 10);
344 334
       fast_line_to_current(X_AXIS);
345 335
       current_position[X_AXIS] = grabpos;
346
-      if (DEBUGGING(LEVELING)) DEBUG_POS("(6) Unpark extruder", current_position);
336
+      if (DEBUGGING(LEVELING)) DEBUG_POS("(5) Unpark extruder", current_position);
347 337
       planner.buffer_line(current_position, planner.settings.max_feedrate_mm_s[X_AXIS] * 0.5, active_extruder);
348 338
       planner.synchronize();
349 339
 
350
-      // STEP 7
340
+      // STEP 6
351 341
 
352 342
       current_position[X_AXIS] = midpos
353 343
         #if HAS_HOTEND_OFFSET
@@ -355,7 +345,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
355 345
         #endif
356 346
       ;
357 347
 
358
-      if (DEBUGGING(LEVELING)) DEBUG_POS("(7) Move midway between hotends", current_position);
348
+      if (DEBUGGING(LEVELING)) DEBUG_POS("(6) Move midway between hotends", current_position);
359 349
 
360 350
       fast_line_to_current(X_AXIS);
361 351
       planner.synchronize();
@@ -385,30 +375,20 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
385 375
                 grabxpos = toolheadposx[tmp_extruder];
386 376
 
387 377
     /**
388
-     * 1. Raise Z to give enough clearance
389
-     * 2. Move to switch position of current toolhead
390
-     * 3. Unlock tool and drop it in the dock
391
-     * 4. Move to the new toolhead
392
-     * 5. Grab and lock the new toolhead
378
+     * 1. Move to switch position of current toolhead
379
+     * 2. Unlock tool and drop it in the dock
380
+     * 3. Move to the new toolhead
381
+     * 4. Grab and lock the new toolhead
393 382
      */
394 383
 
395
-    // 1. Raise Z to give enough clearance
384
+    // 1. Move to switch position of current toolhead
396 385
 
397 386
     if (DEBUGGING(LEVELING)) DEBUG_POS("Starting Toolhead change", current_position);
398 387
 
399
-    current_position[Z_AXIS] += toolchange_settings.z_raise;
400
-
401
-    if (DEBUGGING(LEVELING)) DEBUG_POS("(1) Raise Z-Axis", current_position);
402
-
403
-    fast_line_to_current(Z_AXIS);
404
-    planner.synchronize();
405
-
406
-    // 2. Move to switch position of current toolhead
407
-
408 388
     current_position[X_AXIS] = placexpos;
409 389
 
410 390
     if (DEBUGGING(LEVELING)) {
411
-      DEBUG_ECHOLNPAIR("(2) Place old tool ", int(active_extruder));
391
+      DEBUG_ECHOLNPAIR("(1) Place old tool ", int(active_extruder));
412 392
       DEBUG_POS("Move X SwitchPos", current_position);
413 393
     }
414 394
 
@@ -422,9 +402,9 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
422 402
     fast_line_to_current(Y_AXIS);
423 403
     planner.synchronize();
424 404
 
425
-    // 3. Unlock tool and drop it in the dock
405
+    // 2. Unlock tool and drop it in the dock
426 406
 
427
-    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(3) Unlock and Place Toolhead");
407
+    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(2) Unlock and Place Toolhead");
428 408
 
429 409
     MOVE_SERVO(SWITCHING_TOOLHEAD_SERVO_NR, angles[1]);
430 410
     safe_delay(500);
@@ -443,9 +423,9 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
443 423
     fast_line_to_current(Y_AXIS); // move away from docked toolhead
444 424
     planner.synchronize();
445 425
 
446
-    // 4. Move to the new toolhead
426
+    // 3. Move to the new toolhead
447 427
 
448
-    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(4) Move to new toolhead position");
428
+    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(3) Move to new toolhead position");
449 429
 
450 430
     current_position[X_AXIS] = grabxpos;
451 431
 
@@ -460,9 +440,9 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
460 440
     fast_line_to_current(Y_AXIS);
461 441
     planner.synchronize();
462 442
 
463
-    // 5. Grab and lock the new toolhead
443
+    // 4. Grab and lock the new toolhead
464 444
 
465
-    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(5) Grab and lock new toolhead ");
445
+    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(4) Grab and lock new toolhead ");
466 446
 
467 447
     current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS;
468 448
 
@@ -497,30 +477,20 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
497 477
                 grabxpos = toolheadposx[tmp_extruder];
498 478
 
499 479
     /**
500
-     * 1. Raise Z to give enough clearance
501
-     * 2. Move to switch position of current toolhead
502
-     * 3. Release and place toolhead in the dock
503
-     * 4. Move to the new toolhead
504
-     * 5. Grab the new toolhead and move to security position
480
+     * 1. Move to switch position of current toolhead
481
+     * 2. Release and place toolhead in the dock
482
+     * 3. Move to the new toolhead
483
+     * 4. Grab the new toolhead and move to security position
505 484
      */
506 485
 
507 486
     if (DEBUGGING(LEVELING)) DEBUG_POS("Starting Toolhead change", current_position);
508 487
 
509
-    // 1. Raise Z to give enough clearance
510
-
511
-    current_position[Z_AXIS] += toolchange_settings.z_raise;
512
-
513
-    if (DEBUGGING(LEVELING)) DEBUG_POS("(1) Raise Z-Axis", current_position);
514
-
515
-    planner.buffer_line(current_position, planner.settings.max_feedrate_mm_s[Z_AXIS], active_extruder);
516
-    planner.synchronize();
517
-
518
-    // 2. Move to switch position current toolhead
488
+    // 1. Move to switch position current toolhead
519 489
 
520 490
     current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR;
521 491
 
522 492
     if (DEBUGGING(LEVELING)) {
523
-      SERIAL_ECHOLNPAIR("(2) Place old tool ", int(active_extruder));
493
+      SERIAL_ECHOLNPAIR("(1) Place old tool ", int(active_extruder));
524 494
       DEBUG_POS("Move Y SwitchPos + Security", current_position);
525 495
     }
526 496
 
@@ -548,9 +518,9 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
548 518
     planner.buffer_line(current_position, (planner.settings.max_feedrate_mm_s[X_AXIS] * 0.25), active_extruder);
549 519
     planner.synchronize();
550 520
 
551
-    // 3. Release and place toolhead in the dock
521
+    // 2. Release and place toolhead in the dock
552 522
 
553
-    if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("(3) Release and Place Toolhead");
523
+    if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("(2) Release and Place Toolhead");
554 524
 
555 525
     current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_RELEASE;
556 526
 
@@ -566,9 +536,9 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
566 536
     planner.buffer_line(current_position, (planner.settings.max_feedrate_mm_s[Y_AXIS]), active_extruder);
567 537
     planner.synchronize();
568 538
 
569
-    // 4. Move to new toolhead position
539
+    // 3. Move to new toolhead position
570 540
 
571
-    if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("(4) Move to new toolhead position");
541
+    if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("(3) Move to new toolhead position");
572 542
 
573 543
     current_position[X_AXIS] = grabxpos;
574 544
 
@@ -577,9 +547,9 @@ inline void fast_line_to_current(const AxisEnum fr_axis) {
577 547
     planner.buffer_line(current_position, planner.settings.max_feedrate_mm_s[X_AXIS], active_extruder);
578 548
     planner.synchronize();
579 549
 
580
-    // 5. Grab the new toolhead and move to security position
550
+    // 4. Grab the new toolhead and move to security position
581 551
 
582
-    if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("(5) Grab new toolhead and move to security position");
552
+    if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("(4) Grab new toolhead and move to security position");
583 553
 
584 554
     current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_RELEASE;
585 555
 
@@ -732,7 +702,11 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
732 702
     if (tmp_extruder >= EXTRUDERS)
733 703
       return invalid_extruder_error(tmp_extruder);
734 704
 
735
-    if (!no_move && !all_axes_homed()) {
705
+    if (!no_move && (!all_axes_homed()
706
+      #if ENABLED(DUAL_X_CARRIAGE)
707
+        || dual_x_carriage_mode == DXC_FULL_CONTROL_MODE
708
+      #endif
709
+    )) {
736 710
       no_move = true;
737 711
       if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("No move on toolchange");
738 712
     }
@@ -785,14 +759,15 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
785 759
       if (!no_move) {
786 760
         #if DISABLED(SWITCHING_NOZZLE)
787 761
           // Do a small lift to avoid the workpiece in the move back (below)
788
-          #if ENABLED(TOOLCHANGE_PARK)
789
-            current_position[X_AXIS] = toolchange_settings.change_point.x;
790
-            current_position[Y_AXIS] = toolchange_settings.change_point.y;
791
-          #endif
792 762
           current_position[Z_AXIS] += toolchange_settings.z_raise;
793 763
           #if HAS_SOFTWARE_ENDSTOPS
794 764
             NOMORE(current_position[Z_AXIS], soft_endstop[Z_AXIS].max);
795 765
           #endif
766
+          fast_line_to_current(Z_AXIS);
767
+          #if ENABLED(TOOLCHANGE_PARK)
768
+            current_position[X_AXIS] = toolchange_settings.change_point.x;
769
+            current_position[Y_AXIS] = toolchange_settings.change_point.y;
770
+          #endif
796 771
           planner.buffer_line(current_position, feedrate_mm_s, active_extruder);
797 772
         #endif
798 773
         planner.synchronize();
@@ -875,10 +850,10 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
875 850
         #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
876 851
           if (should_swap && !too_cold) {
877 852
             #if ENABLED(ADVANCED_PAUSE_FEATURE)
878
-              do_pause_e_move(toolchange_settings.swap_length + TOOLCHANGE_FIL_EXTRA_PRIME, toolchange_settings.prime_speed);
853
+              do_pause_e_move(toolchange_settings.swap_length + TOOLCHANGE_FIL_EXTRA_PRIME, MMM_TO_MMS(toolchange_settings.prime_speed));
879 854
             #else
880 855
               current_position[E_AXIS] += (toolchange_settings.swap_length + TOOLCHANGE_FIL_EXTRA_PRIME) / planner.e_factor[tmp_extruder];
881
-              planner.buffer_line(current_position, toolchange_settings.prime_speed, tmp_extruder);
856
+              planner.buffer_line(current_position, MMM_TO_MMS(toolchange_settings.prime_speed), tmp_extruder);
882 857
             #endif
883 858
             planner.synchronize();
884 859
 

+ 55
- 13
Marlin/src/pins/pins_BIGTREE_SKR_V1.3.h Ver fichero

@@ -190,28 +190,70 @@
190 190
     #define LCD_PINS_D4     P1_21
191 191
 
192 192
   #else
193
-
194 193
     #define LCD_PINS_RS     P1_19
195 194
 
196 195
     #define BTN_EN1         P3_26   // (31) J3-2 & AUX-4
197 196
     #define BTN_EN2         P3_25   // (33) J3-4 & AUX-4
198
-    #define SD_DETECT_PIN   P1_31   // (49) (NOT 5V tolerant)
199
-
200
-    #define LCD_SDSS        P0_16   // (16) J3-7 & AUX-4
201 197
 
202 198
     #define LCD_PINS_ENABLE P1_18
203 199
     #define LCD_PINS_D4     P1_20
204 200
 
205
-    #if ENABLED(ULTIPANEL)
206
-      #define LCD_PINS_D5   P1_21
207
-      #define LCD_PINS_D6   P1_22
208
-      #define LCD_PINS_D7   P1_23
209
-    #endif
201
+    #define LCD_SDSS        P0_16   // (16) J3-7 & AUX-4
202
+    #define SD_DETECT_PIN   P1_31   // (49) (NOT 5V tolerant)
210 203
 
211
-    #if ENABLED(MKS_MINI_12864)
212
-      #define DOGLCD_CS     P1_21
213
-      #define DOGLCD_A0     P1_22
214
-    #endif
204
+    #if ENABLED(FYSETC_MINI_12864)
205
+      #define DOGLCD_CS     P1_18
206
+      #define DOGLCD_A0     P1_19
207
+
208
+      #define LCD_BACKLIGHT_PIN -1
209
+
210
+      #define LCD_RESET_PIN P1_20   // Must be high or open for LCD to operate normally.
211
+                                    // Seems to work best if left open.
212
+
213
+      #define FYSETC_MINI_12864_REV_1_2
214
+      //#define FYSETC_MINI_12864_REV_2_0
215
+      //#define FYSETC_MINI_12864_REV_2_1
216
+      #if EITHER(FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0)
217
+        #define RGB_LED
218
+        #ifndef RGB_LED_R_PIN
219
+          #define RGB_LED_R_PIN P1_21
220
+        #endif
221
+        #ifndef RGB_LED_G_PIN
222
+          #define RGB_LED_G_PIN P1_22
223
+        #endif
224
+        #ifndef RGB_LED_B_PIN
225
+          #define RGB_LED_B_PIN P1_23
226
+        #endif
227
+      #elif defined(FYSETC_MINI_12864_REV_2_1)
228
+        #define NEOPIXEL_LED
229
+        #define NEOPIXEL_TYPE   NEO_GRB  // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
230
+        #define NEOPIXEL_PIN    P1_21    // LED driving pin on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba)
231
+        #define NEOPIXEL_PIXELS  3       // Number of LEDs in the strip
232
+        #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
233
+        #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
234
+        #define NEOPIXEL_STARTUP_TEST    // Cycle through colors at startup
235
+      #else
236
+        #error "Either FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0 or FYSETC_MINI_12864_REV_2_1 must be defined"
237
+      #endif
238
+
239
+      #if !defined(LED_USER_PRESET_STARTUP) && EITHER(FYSETC_MINI_12864_REV_2_0, FYSETC_MINI_12864_REV_2_1)
240
+        #error "LED_USER_PRESET_STARTUP must be enabled when using FYSETC_MINI_12864 REV 2.0 and later"
241
+      #endif
242
+
243
+    #else // !FYSETC_MINI_12864
244
+
245
+      #if ENABLED(MKS_MINI_12864)
246
+        #define DOGLCD_CS     P1_21
247
+        #define DOGLCD_A0     P1_22
248
+      #endif
249
+
250
+      #if ENABLED(ULTIPANEL)
251
+        #define LCD_PINS_D5   P1_21
252
+        #define LCD_PINS_D6   P1_22
253
+        #define LCD_PINS_D7   P1_23
254
+      #endif
255
+
256
+    #endif // !FYSETC_MINI_12864
215 257
 
216 258
   #endif
217 259
 

+ 3
- 0
Marlin/src/pins/pins_ESP32.h Ver fichero

@@ -72,3 +72,6 @@
72 72
 #define HEATER_0_PIN         2
73 73
 #define FAN_PIN             13
74 74
 #define HEATER_BED_PIN       4
75
+
76
+// SPI
77
+#define SDSS                 5

+ 6
- 6
Marlin/src/pins/pins_FORMBOT_RAPTOR.h Ver fichero

@@ -181,16 +181,16 @@
181 181
 // Formbot only supports REPRAP_DISCOUNT_SMART_CONTROLLER
182 182
 //
183 183
 #if ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
184
-  #define LCD_PINS_RS      16
185
-  #define LCD_PINS_ENABLE  17
186
-  #define LCD_PINS_D4      23
187
-  #define LCD_PINS_D5      25
188
-  #define LCD_PINS_D6      27
189
-  #define LCD_PINS_D7      29
190 184
   #define BEEPER_PIN       37
191 185
   #define BTN_EN1          31
192 186
   #define BTN_EN2          33
193 187
   #define BTN_ENC          35
194 188
   #define SD_DETECT_PIN    49
195 189
   #define KILL_PIN         41
190
+  #define LCD_PINS_RS      16
191
+  #define LCD_PINS_ENABLE  17
192
+  #define LCD_PINS_D4      23
193
+  #define LCD_PINS_D5      25
194
+  #define LCD_PINS_D6      27
195
+  #define LCD_PINS_D7      29
196 196
 #endif

+ 13
- 10
Marlin/src/pins/pins_FORMBOT_TREX2PLUS.h Ver fichero

@@ -155,9 +155,8 @@
155 155
 //
156 156
 // Misc. Functions
157 157
 //
158
-#define CASE_LIGHT_PIN      8
159 158
 #define SDSS               53
160
-#ifndef ROXYs_TRex
159
+#ifndef LED_PIN
161 160
   #define LED_PIN          13   // The Formbot v 1 board has almost no unassigned pins on it.  The Board's LED
162 161
 #endif                          // is a good place to get a signal to control the Max7219 LED Matrix.
163 162
 
@@ -168,24 +167,28 @@
168 167
   #define PS_ON_PIN        12
169 168
 #endif
170 169
 
170
+#define CASE_LIGHT_PIN      8
171
+
171 172
 //
172 173
 // LCD / Controller
173 174
 //
174 175
 // Formbot only supports REPRAP_DISCOUNT_SMART_CONTROLLER
175 176
 //
176 177
 #if ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
177
-  #define LCD_PINS_RS      16
178
-  #define LCD_PINS_ENABLE  17
179
-  #define LCD_PINS_D4      23
180
-  #define LCD_PINS_D5      25
181
-  #define LCD_PINS_D6      27
182
-  #define LCD_PINS_D7      29
178
+  #ifndef BEEPER_PIN
179
+    #define BEEPER_PIN     37
180
+  #endif
183 181
   #define BTN_EN1          31
184 182
   #define BTN_EN2          33
185 183
   #define BTN_ENC          35
186 184
   #define SD_DETECT_PIN    49
187
-  #ifndef ROXYs_TRex
185
+  #ifndef KILL_PIN
188 186
     #define KILL_PIN       41
189
-    #define BEEPER_PIN     37
190 187
   #endif
188
+  #define LCD_PINS_RS      16
189
+  #define LCD_PINS_ENABLE  17
190
+  #define LCD_PINS_D4      23
191
+  #define LCD_PINS_D5      25
192
+  #define LCD_PINS_D6      27
193
+  #define LCD_PINS_D7      29
191 194
 #endif

+ 4
- 2
Marlin/src/pins/pins_FORMBOT_TREX3.h Ver fichero

@@ -139,7 +139,7 @@
139 139
 //
140 140
 #define CASE_LIGHT_PIN      5
141 141
 #define SDSS               53
142
-#ifndef ROXYs_TRex
142
+#ifndef LED_PIN
143 143
   #define LED_PIN          13
144 144
 #endif
145 145
 
@@ -165,8 +165,10 @@
165 165
   #define BTN_EN2          33
166 166
   #define BTN_ENC          35
167 167
   #define SD_DETECT_PIN    49
168
-  #ifndef ROXYs_TRex
168
+  #ifndef KILL_PIN
169 169
     #define KILL_PIN       41
170
+  #endif
171
+  #ifndef BEEPER_PIN
170 172
     #define BEEPER_PIN     37
171 173
   #endif
172 174
 #endif

+ 40
- 28
Marlin/src/pins/pins_FYSETC_F6_13.h Ver fichero

@@ -28,8 +28,8 @@
28 28
   #error "Oops! Select 'FYSETC F6' in 'Tools > Board.'"
29 29
 #endif
30 30
 
31
-#ifdef SD_DETECT_INVERTED
32
-  #error "SD_DETECT_INVERTED must be disabled for the FYSETC_F6_13 board."
31
+#if ENABLED(SD_DETECT_INVERTED)
32
+  //#error "SD_DETECT_INVERTED must be disabled for the FYSETC_F6_13 board."
33 33
 #endif
34 34
 
35 35
 #define BOARD_NAME "FYSETC F6 1.3"
@@ -184,25 +184,46 @@
184 184
 #define BEEPER_PIN         37
185 185
 #define SD_DETECT_PIN      49
186 186
 
187
-#if ENABLED(MKS_MINI_12864)
188
-  #define DOGLCD_A0        27
189
-  #define DOGLCD_CS        25
190
-#endif
191
-
192 187
 #if ENABLED(FYSETC_MINI_12864)
193 188
   //
194 189
   // See https://wiki.fysetc.com/Mini12864_Panel/?fbclid=IwAR1FyjuNdVOOy9_xzky3qqo_WeM5h-4gpRnnWhQr_O1Ef3h0AFnFXmCehK8
195 190
   //
196 191
   #define DOGLCD_A0        16
197 192
   #define DOGLCD_CS        17
198
-  #ifndef RGB_LED_R_PIN
199
-    #define RGB_LED_R_PIN  25
200
-  #endif
201
-  #ifndef RGB_LED_G_PIN
202
-    #define RGB_LED_G_PIN  27
193
+
194
+  #define LCD_BACKLIGHT_PIN -1
195
+  #define KILL_PIN         41
196
+
197
+  #define LCD_RESET_PIN    23   // Must be high or open for LCD to operate normally.
198
+                                // Seems to work best if left open.
199
+
200
+  #define FYSETC_MINI_12864_REV_1_2
201
+  //#define FYSETC_MINI_12864_REV_2_0
202
+  //#define FYSETC_MINI_12864_REV_2_1
203
+  #if EITHER(FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0)
204
+    #ifndef RGB_LED_R_PIN
205
+      #define RGB_LED_R_PIN 25
206
+    #endif
207
+    #ifndef RGB_LED_G_PIN
208
+      #define RGB_LED_G_PIN 27
209
+    #endif
210
+    #ifndef RGB_LED_B_PIN
211
+      #define RGB_LED_B_PIN 29
212
+    #endif
213
+  #elif defined(FYSETC_MINI_12864_REV_2_1)
214
+    #define NEOPIXEL_LED
215
+    #define NEOPIXEL_TYPE   NEO_GRB  // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
216
+    #define NEOPIXEL_PIN    25       // LED driving pin on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba)
217
+    #define NEOPIXEL_PIXELS  3       // Number of LEDs in the strip
218
+    #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
219
+    #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
220
+    #define NEOPIXEL_STARTUP_TEST    // Cycle through colors at startup
221
+  #else
222
+    #error "Either FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0 or FYSETC_MINI_12864_REV_2_1 must be defined"
203 223
   #endif
204
-  #ifndef RGB_LED_B_PIN
205
-    #define RGB_LED_B_PIN  29
224
+
225
+  #if !defined(LED_USER_PRESET_STARTUP) && EITHER(FYSETC_MINI_12864_REV_2_0, FYSETC_MINI_12864_REV_2_1)
226
+    #error "LED_USER_PRESET_STARTUP must be enabled when using FYSETC_MINI_12864 REV 2.0 and later"
206 227
   #endif
207 228
 
208 229
 #elif HAS_GRAPHICAL_LCD
@@ -214,6 +235,11 @@
214 235
   #define LCD_PINS_D6      27
215 236
   #define LCD_PINS_D7      29
216 237
 
238
+  #if ENABLED(MKS_MINI_12864)
239
+    #define DOGLCD_CS      25
240
+    #define DOGLCD_A0      27
241
+  #endif
242
+
217 243
 #endif
218 244
 
219 245
 #if ENABLED(NEWPANEL)
@@ -222,20 +248,6 @@
222 248
   #define BTN_ENC          35
223 249
 #endif
224 250
 
225
-#if ENABLED(FYSETC_MINI_12864)
226
-  #define LCD_BACKLIGHT_PIN -1
227
-  #define LCD_RESET_PIN    23
228
-  #define KILL_PIN         41
229
-  #ifndef RGB_LED_R_PIN
230
-    #define RGB_LED_R_PIN  25
231
-  #endif
232
-  #ifndef RGB_LED_G_PIN
233
-    #define RGB_LED_G_PIN  27
234
-  #endif
235
-  #ifndef RGB_LED_B_PIN
236
-    #define RGB_LED_B_PIN  29
237
-  #endif
238
-#endif
239 251
 #ifndef RGB_LED_R_PIN
240 252
   #define RGB_LED_R_PIN     3
241 253
 #endif

+ 1
- 1
Marlin/src/pins/pins_GEN7_13.h Ver fichero

@@ -24,7 +24,7 @@
24 24
  * Gen7 v1.3 pin assignments
25 25
  */
26 26
 
27
- /**
27
+/**
28 28
  * Rev B    26 DEC 2016
29 29
  *
30 30
  * added pointer to a current Arduino IDE extension

+ 32
- 9
Marlin/src/pins/pins_RAMPS.h Ver fichero

@@ -436,7 +436,9 @@
436 436
       #endif
437 437
 
438 438
       #define BTN_ENC           35
439
-      #define SD_DETECT_PIN     49
439
+      #ifndef SD_DETECT_PIN
440
+        #define SD_DETECT_PIN   49
441
+      #endif
440 442
       #define KILL_PIN          41
441 443
 
442 444
       #if ENABLED(BQ_LCD_SMART_CONTROLLER)
@@ -526,7 +528,6 @@
526 528
 
527 529
       // From https://wiki.fysetc.com/Mini12864_Panel/?fbclid=IwAR1FyjuNdVOOy9_xzky3qqo_WeM5h-4gpRnnWhQr_O1Ef3h0AFnFXmCehK8
528 530
       #define BEEPER_PIN        37
529
-      #define LCD_RESET_PIN     23
530 531
 
531 532
       #define DOGLCD_A0         16
532 533
       #define DOGLCD_CS         17
@@ -537,14 +538,36 @@
537 538
 
538 539
       #define SD_DETECT_PIN     49
539 540
 
540
-      #ifndef RGB_LED_R_PIN
541
-        #define RGB_LED_R_PIN   25
542
-      #endif
543
-      #ifndef RGB_LED_G_PIN
544
-        #define RGB_LED_G_PIN   27
541
+      #define LCD_RESET_PIN     23   // Must be high or open for LCD to operate normally.
542
+                                     // Seems to work best if left open.
543
+
544
+      #define FYSETC_MINI_12864_REV_1_2
545
+      //#define FYSETC_MINI_12864_REV_2_0
546
+      //#define FYSETC_MINI_12864_REV_2_1
547
+      #if EITHER(FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0)
548
+        #ifndef RGB_LED_R_PIN
549
+          #define RGB_LED_R_PIN 25
550
+        #endif
551
+        #ifndef RGB_LED_G_PIN
552
+          #define RGB_LED_G_PIN 27
553
+        #endif
554
+        #ifndef RGB_LED_B_PIN
555
+          #define RGB_LED_B_PIN 29
556
+        #endif
557
+      #elif defined(FYSETC_MINI_12864_REV_2_1)
558
+        #define NEOPIXEL_LED
559
+        #define NEOPIXEL_TYPE   NEO_GRB  // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
560
+        #define NEOPIXEL_PIN    25       // LED driving pin on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba)
561
+        #define NEOPIXEL_PIXELS  3       // Number of LEDs in the strip
562
+        #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
563
+        #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
564
+        #define NEOPIXEL_STARTUP_TEST    // Cycle through colors at startup
565
+      #else
566
+        #error "Either FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0 or FYSETC_MINI_12864_REV_2_1 must be defined"
545 567
       #endif
546
-      #ifndef RGB_LED_B_PIN
547
-        #define RGB_LED_B_PIN   29
568
+
569
+      #if !defined(LED_USER_PRESET_STARTUP) && EITHER(FYSETC_MINI_12864_REV_2_0, FYSETC_MINI_12864_REV_2_1)
570
+        #error "LED_USER_PRESET_STARTUP must be enabled when using FYSETC_MINI_12864 REV 2.0 and later"
548 571
       #endif
549 572
 
550 573
     #elif ENABLED(MINIPANEL)

+ 59
- 22
Marlin/src/pins/pins_RAMPS_FD_V1.h Ver fichero

@@ -150,32 +150,71 @@
150 150
   #if ENABLED(NEWPANEL)
151 151
     #define LCD_PINS_RS    16
152 152
     #define LCD_PINS_ENABLE 17
153
-    #define LCD_PINS_D4    23
154
-    #define LCD_PINS_D5    25
155
-    #define LCD_PINS_D6    27
156
-    #define LCD_PINS_D7    29
157 153
   #endif
158 154
 
159 155
   #if ENABLED(FYSETC_MINI_12864)
160 156
     #define DOGLCD_CS      LCD_PINS_ENABLE
161 157
     #define DOGLCD_A0      LCD_PINS_RS
162
-  #elif ENABLED(MINIPANEL)
163
-    #define DOGLCD_CS      25
164
-    #define DOGLCD_A0      27
158
+
159
+    //#define FORCE_SOFT_SPI    // Use this if default of hardware SPI causes problems
160
+
161
+    #define LCD_RESET_PIN  23   // Must be high or open for LCD to operate normally.
162
+                                // Seems to work best if left open.
163
+
164
+    #define FYSETC_MINI_12864_REV_1_2
165
+    //#define FYSETC_MINI_12864_REV_2_0
166
+    //#define FYSETC_MINI_12864_REV_2_1
167
+    #if EITHER(FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0)
168
+      #ifndef RGB_LED_R_PIN
169
+        #define RGB_LED_R_PIN 25
170
+      #endif
171
+      #ifndef RGB_LED_G_PIN
172
+        #define RGB_LED_G_PIN 27
173
+      #endif
174
+      #ifndef RGB_LED_B_PIN
175
+        #define RGB_LED_B_PIN 29
176
+      #endif
177
+    #elif defined(FYSETC_MINI_12864_REV_2_1)
178
+      #define NEOPIXEL_LED
179
+      #define NEOPIXEL_TYPE NEO_GRB    // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
180
+      #define NEOPIXEL_PIN    25       // LED driving pin on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba)
181
+      #define NEOPIXEL_PIXELS  3       // Number of LEDs in the strip
182
+      #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
183
+      #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
184
+      #define NEOPIXEL_STARTUP_TEST    // Cycle through colors at startup
185
+    #else
186
+      #error "Either FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0 or FYSETC_MINI_12864_REV_2_1 must be defined"
187
+    #endif
188
+
189
+    #if !defined(LED_USER_PRESET_STARTUP) && EITHER(FYSETC_MINI_12864_REV_2_0, FYSETC_MINI_12864_REV_2_1)
190
+      #error "LED_USER_PRESET_STARTUP must be enabled when using FYSETC_MINI_12864 REV 2.0 and later"
191
+    #endif
192
+
193
+  #elif ENABLED(NEWPANEL)
194
+
195
+    #define LCD_PINS_D4    23
196
+    #define LCD_PINS_D5    25
197
+    #define LCD_PINS_D6    27
198
+    #define LCD_PINS_D7    29
199
+
200
+    #if ENABLED(MINIPANEL)
201
+      #define DOGLCD_CS    25
202
+      #define DOGLCD_A0    27
203
+    #endif
204
+
165 205
   #endif
166 206
 
167 207
   #if ANY(VIKI2, miniVIKI)
168
-    #define DOGLCD_A0           16
169
-    #define KILL_PIN            51
170
-    #define STAT_LED_BLUE_PIN   29
171
-    #define STAT_LED_RED_PIN    23
172
-    #define DOGLCD_CS           17
173
-    #define DOGLCD_SCK          76   // SCK_PIN   - These are required for DUE Hardware SPI
174
-    #define DOGLCD_MOSI         75   // MOSI_PIN
175
-    #define DOGLCD_MISO         74   // MISO_PIN
208
+    #define DOGLCD_A0      16
209
+    #define KILL_PIN       51
210
+    #define STAT_LED_BLUE_PIN 29
211
+    #define STAT_LED_RED_PIN 23
212
+    #define DOGLCD_CS      17
213
+    #define DOGLCD_SCK     76   // SCK_PIN   - Required for DUE Hardware SPI
214
+    #define DOGLCD_MOSI    75   // MOSI_PIN
215
+    #define DOGLCD_MISO    74   // MISO_PIN
176 216
   #endif
177 217
 
178
-
179 218
 #endif // ULTRA_LCD
180 219
 
181 220
 #if HAS_DRIVER(TMC2208)
@@ -201,10 +240,8 @@
201 240
 //
202 241
 // M3/M4/M5 - Spindle/Laser Control
203 242
 //
204
-#if ENABLED(SPINDLE_LASER_ENABLE) && !PIN_EXISTS(SPINDLE_LASER_ENA)
205
-  #if HOTENDS < 3
206
-    #define SPINDLE_LASER_ENA_PIN     45   // Use E2 ENA
207
-    #define SPINDLE_LASER_PWM_PIN     12   // MUST BE HARDWARE PWM
208
-    #define SPINDLE_DIR_PIN           47   // Use E2 DIR
209
-  #endif
243
+#if HOTENDS < 3 && ENABLED(SPINDLE_LASER_ENABLE) && !PIN_EXISTS(SPINDLE_LASER_ENA)
244
+  #define SPINDLE_LASER_ENA_PIN 45   // Use E2 ENA
245
+  #define SPINDLE_LASER_PWM_PIN 12   // MUST BE HARDWARE PWM
246
+  #define SPINDLE_DIR_PIN       47   // Use E2 DIR
210 247
 #endif

+ 1
- 0
Marlin/src/pins/pins_RAMPS_RE_ARM.h Ver fichero

@@ -320,6 +320,7 @@
320 320
       #define DOGLCD_MOSI  P0_18
321 321
       #define DOGLCD_CS    P1_09  // use Ethernet connector for EXP1 cable signals
322 322
       #define DOGLCD_A0    P1_14
323
+      #define FORCE_SOFT_SPI      // required on a Re-ARM system
323 324
     #else
324 325
       #define DOGLCD_CS    P0_26   // (63) J5-3 & AUX-2
325 326
       #define DOGLCD_A0    P2_06   // (59) J3-8 & AUX-2

+ 54
- 20
Marlin/src/pins/pins_RURAMPS4D_11.h Ver fichero

@@ -202,31 +202,24 @@
202 202
 //
203 203
 #if ENABLED(ULTRA_LCD)
204 204
 
205
-  #if EITHER(RADDS_DISPLAY, REPRAP_DISCOUNT_SMART_CONTROLLER)
206
-
205
+  #if ANY(RADDS_DISPLAY, REPRAP_DISCOUNT_SMART_CONTROLLER, REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
207 206
     #define BEEPER_PIN      62
208
-
209
-    #define LCD_PINS_RS     63
210
-    #define LCD_PINS_ENABLE 64
211 207
     #define LCD_PINS_D4     48
212 208
     #define LCD_PINS_D5     50
213 209
     #define LCD_PINS_D6     52
214 210
     #define LCD_PINS_D7     53
215
-
216 211
     #define SD_DETECT_PIN   51
212
+  #endif
217 213
 
218
-  #elif ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
214
+  #if EITHER(RADDS_DISPLAY, REPRAP_DISCOUNT_SMART_CONTROLLER)
219 215
 
220
-    #define BEEPER_PIN      62
216
+    #define LCD_PINS_RS     63
217
+    #define LCD_PINS_ENABLE 64
218
+
219
+  #elif ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
221 220
 
222 221
     #define LCD_PINS_RS     52
223 222
     #define LCD_PINS_ENABLE 53
224
-    #define LCD_PINS_D4     48
225
-    #define LCD_PINS_D5     50
226
-    #define LCD_PINS_D6     52
227
-    #define LCD_PINS_D7     53
228
-
229
-    #define SD_DETECT_PIN   51
230 223
 
231 224
   #elif HAS_SSD1306_OLED_I2C
232 225
 
@@ -234,16 +227,57 @@
234 227
     #define LCD_SDSS        10
235 228
     #define SD_DETECT_PIN   51
236 229
 
230
+  #elif ENABLED(FYSETC_MINI_12864)
231
+
232
+    #define BEEPER_PIN      62
233
+    #define DOGLCD_CS       64
234
+    #define DOGLCD_A0       63
235
+
236
+    //#define FORCE_SOFT_SPI     // Use this if default of hardware SPI causes problems
237
+
238
+    #define LCD_RESET_PIN   48   // Must be high or open for LCD to operate normally.
239
+                                 // Seems to work best if left open.
240
+
241
+    #define FYSETC_MINI_12864_REV_1_2
242
+    //#define FYSETC_MINI_12864_REV_2_0
243
+    //#define FYSETC_MINI_12864_REV_2_1
244
+    #if EITHER(FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0)
245
+      #define RGB_LED
246
+      #ifndef RGB_LED_R_PIN
247
+        #define RGB_LED_R_PIN 50   // D5
248
+      #endif
249
+      #ifndef RGB_LED_G_PIN
250
+        #define RGB_LED_G_PIN 52   // D6
251
+      #endif
252
+      #ifndef RGB_LED_B_PIN
253
+        #define RGB_LED_B_PIN 53   // D7
254
+      #endif
255
+    #elif defined(FYSETC_MINI_12864_REV_2_1)
256
+      #define NEOPIXEL_LED
257
+      #define NEOPIXEL_TYPE   NEO_GRB  // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
258
+      #define NEOPIXEL_PIN  50         // LED driving pin on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba)
259
+      #define NEOPIXEL_PIXELS  3       // Number of LEDs in the strip
260
+      #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
261
+      #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
262
+      #define NEOPIXEL_STARTUP_TEST    // Cycle through colors at startup
263
+    #else
264
+      #error "Either FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0 or FYSETC_MINI_12864_REV_2_1 must be defined"
265
+    #endif
266
+
267
+    #if !defined(LED_USER_PRESET_STARTUP) && EITHER(FYSETC_MINI_12864_REV_2_0, FYSETC_MINI_12864_REV_2_1)
268
+      #error "LED_USER_PRESET_STARTUP must be enabled when using FYSETC_MINI_12864 REV 2.0 and later"
269
+    #endif
270
+
237 271
   #elif ENABLED(SPARK_FULL_GRAPHICS)
238 272
 
239 273
     //http://doku.radds.org/dokumentation/other-electronics/sparklcd/
240 274
     #error "Oops! SPARK_FULL_GRAPHICS not supported with RURAMPS4D."
241
-    //#define LCD_PINS_D4     29//?
242
-    //#define LCD_PINS_ENABLE 27//?
243
-    //#define LCD_PINS_RS     25//?
244
-    //#define BTN_EN1         35//?
245
-    //#define BTN_EN2         33//?
246
-    //#define BTN_ENC         37//?
275
+    //#define LCD_PINS_D4     29   //?
276
+    //#define LCD_PINS_ENABLE 27   //?
277
+    //#define LCD_PINS_RS     25   //?
278
+    //#define BTN_EN1         35   //?
279
+    //#define BTN_EN2         33   //?
280
+    //#define BTN_ENC         37   //?
247 281
 
248 282
   #endif // SPARK_FULL_GRAPHICS
249 283
 

+ 48
- 14
Marlin/src/pins/pins_RURAMPS4D_13.h Ver fichero

@@ -188,31 +188,24 @@
188 188
 //
189 189
 #if ENABLED(ULTRA_LCD)
190 190
 
191
-  #if EITHER(RADDS_DISPLAY, REPRAP_DISCOUNT_SMART_CONTROLLER)
192
-
191
+  #if ANY(RADDS_DISPLAY, REPRAP_DISCOUNT_SMART_CONTROLLER, REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
193 192
     #define BEEPER_PIN      62
194
-
195
-    #define LCD_PINS_RS     63
196
-    #define LCD_PINS_ENABLE 64
197 193
     #define LCD_PINS_D4     48
198 194
     #define LCD_PINS_D5     50
199 195
     #define LCD_PINS_D6     52
200 196
     #define LCD_PINS_D7     53
201
-
202 197
     #define SD_DETECT_PIN   51
198
+  #endif
203 199
 
204
-  #elif ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
200
+  #if EITHER(RADDS_DISPLAY, REPRAP_DISCOUNT_SMART_CONTROLLER)
205 201
 
206
-    #define BEEPER_PIN      62
202
+    #define LCD_PINS_RS     63
203
+    #define LCD_PINS_ENABLE 64
204
+
205
+  #elif ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
207 206
 
208 207
     #define LCD_PINS_RS     52
209 208
     #define LCD_PINS_ENABLE 53
210
-    #define LCD_PINS_D4     48
211
-    #define LCD_PINS_D5     50
212
-    #define LCD_PINS_D6     52
213
-    #define LCD_PINS_D7     53
214
-
215
-    #define SD_DETECT_PIN   51
216 209
 
217 210
   #elif HAS_SSD1306_OLED_I2C
218 211
 
@@ -220,6 +213,47 @@
220 213
     #define LCD_SDSS        10
221 214
     #define SD_DETECT_PIN   51
222 215
 
216
+  #elif ENABLED(FYSETC_MINI_12864)
217
+
218
+    #define BEEPER_PIN      62
219
+    #define DOGLCD_CS       64
220
+    #define DOGLCD_A0       63
221
+
222
+    //#define FORCE_SOFT_SPI     // Use this if default of hardware SPI causes problems
223
+
224
+    #define LCD_RESET_PIN   48   // Must be high or open for LCD to operate normally.
225
+                                 // Seems to work best if left open.
226
+
227
+    #define FYSETC_MINI_12864_REV_1_2
228
+    //#define FYSETC_MINI_12864_REV_2_0
229
+    //#define FYSETC_MINI_12864_REV_2_1
230
+    #if EITHER(FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0)
231
+      #define RGB_LED
232
+      #ifndef RGB_LED_R_PIN
233
+        #define RGB_LED_R_PIN 50   // D5
234
+      #endif
235
+      #ifndef RGB_LED_G_PIN
236
+        #define RGB_LED_G_PIN 52   // D6
237
+      #endif
238
+      #ifndef RGB_LED_B_PIN
239
+        #define RGB_LED_B_PIN 53   // D7
240
+      #endif
241
+    #elif defined(FYSETC_MINI_12864_REV_2_1)
242
+      #define NEOPIXEL_LED
243
+      #define NEOPIXEL_TYPE   NEO_GRB  // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
244
+      #define NEOPIXEL_PIN  50         // LED driving pin on motherboard 4 => D4 (EXP2-5 on Printrboard) / 30 => PC7 (EXP3-13 on Rumba)
245
+      #define NEOPIXEL_PIXELS  3       // Number of LEDs in the strip
246
+      #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
247
+      #define NEOPIXEL_BRIGHTNESS 127  // Initial brightness (0-255)
248
+      #define NEOPIXEL_STARTUP_TEST    // Cycle through colors at startup
249
+    #else
250
+      #error "Either FYSETC_MINI_12864_REV_1_2, FYSETC_MINI_12864_REV_2_0 or FYSETC_MINI_12864_REV_2_1 must be defined"
251
+    #endif
252
+
253
+    #if !defined(LED_USER_PRESET_STARTUP) && EITHER(FYSETC_MINI_12864_REV_2_0, FYSETC_MINI_12864_REV_2_1)
254
+      #error "LED_USER_PRESET_STARTUP must be enabled when using FYSETC_MINI_12864 REV 2.0 and later"
255
+    #endif
256
+
223 257
   #elif ENABLED(MKS_MINI_12864)
224 258
 
225 259
     #define ORIG_BEEPER_PIN 62

+ 5
- 3
README.md Ver fichero

@@ -1,7 +1,9 @@
1 1
 # Marlin 3D Printer Firmware
2 2
 
3
-[![Build Status](https://travis-ci.org/MarlinFirmware/Marlin.svg?branch=RCBugFix)](https://travis-ci.org/MarlinFirmware/Marlin)
4
-[![Coverity Scan Build Status](https://scan.coverity.com/projects/2224/badge.svg)](https://scan.coverity.com/projects/2224)
3
+[![Build Status](https://travis-ci.org/MarlinFirmware/Marlin.svg?branch=bugfix-2.0.x)](https://travis-ci.org/MarlinFirmware/Marlin)
4
+![GitHub](https://img.shields.io/github/license/marlinfirmware/marlin.svg)
5
+![GitHub contributors](https://img.shields.io/github/contributors/marlinfirmware/marlin.svg)
6
+![GitHub Release Date](https://img.shields.io/github/release-date/marlinfirmware/marlin.svg)
5 7
 
6 8
 <img align="top" width=175 src="buildroot/share/pixmaps/logo/marlin-250.png" />
7 9
 
@@ -65,7 +67,7 @@ The current Marlin dev team consists of:
65 67
  - Roxanne Neufeld [[@Roxy-3D](https://github.com/Roxy-3D)] - USA
66 68
  - Bob Kuhn [[@Bob-the-Kuhn](https://github.com/Bob-the-Kuhn)] - USA
67 69
  - Chris Pepper [[@p3p](https://github.com/p3p)] - UK
68
- - João Brazio [[@jbrazio](https://github.com/jbrazio)] - Brazil
70
+ - João Brazio [[@jbrazio](https://github.com/jbrazio)] - Portugal
69 71
  - Erik van der Zalm [[@ErikZalm](https://github.com/ErikZalm)] - Netherlands &nbsp; [![Flattr Erik](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=ErikZalm&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software)
70 72
 
71 73
 ## License

+ 1
- 0
config/default/Configuration.h Ver fichero

@@ -2013,6 +2013,7 @@
2013 2013
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2014 2014
 // However, control resolution will be halved for each increment;
2015 2015
 // at zero value, there are 128 effective control positions.
2016
+// :[0,1,2,3,4,5,6,7]
2016 2017
 #define SOFT_PWM_SCALE 0
2017 2018
 
2018 2019
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/3DFabXYZ/Migbot/Configuration.h Ver fichero

@@ -2044,6 +2044,7 @@
2044 2044
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2045 2045
 // However, control resolution will be halved for each increment;
2046 2046
 // at zero value, there are 128 effective control positions.
2047
+// :[0,1,2,3,4,5,6,7]
2047 2048
 #define SOFT_PWM_SCALE 0
2048 2049
 
2049 2050
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/AlephObjects/TAZ4/Configuration.h Ver fichero

@@ -2033,6 +2033,7 @@
2033 2033
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2034 2034
 // However, control resolution will be halved for each increment;
2035 2035
 // at zero value, there are 128 effective control positions.
2036
+// :[0,1,2,3,4,5,6,7]
2036 2037
 #define SOFT_PWM_SCALE 0
2037 2038
 
2038 2039
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/AliExpress/CL-260/Configuration.h Ver fichero

@@ -2013,6 +2013,7 @@
2013 2013
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2014 2014
 // However, control resolution will be halved for each increment;
2015 2015
 // at zero value, there are 128 effective control positions.
2016
+// :[0,1,2,3,4,5,6,7]
2016 2017
 #define SOFT_PWM_SCALE 0
2017 2018
 
2018 2019
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/AliExpress/UM2pExt/Configuration.h Ver fichero

@@ -2024,6 +2024,7 @@
2024 2024
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2025 2025
 // However, control resolution will be halved for each increment;
2026 2026
 // at zero value, there are 128 effective control positions.
2027
+// :[0,1,2,3,4,5,6,7]
2027 2028
 #define SOFT_PWM_SCALE 0
2028 2029
 
2029 2030
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Anet/A2/Configuration.h Ver fichero

@@ -2015,6 +2015,7 @@
2015 2015
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2016 2016
 // However, control resolution will be halved for each increment;
2017 2017
 // at zero value, there are 128 effective control positions.
2018
+// :[0,1,2,3,4,5,6,7]
2018 2019
 #define SOFT_PWM_SCALE 0
2019 2020
 
2020 2021
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Anet/A2plus/Configuration.h Ver fichero

@@ -2015,6 +2015,7 @@
2015 2015
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2016 2016
 // However, control resolution will be halved for each increment;
2017 2017
 // at zero value, there are 128 effective control positions.
2018
+// :[0,1,2,3,4,5,6,7]
2018 2019
 #define SOFT_PWM_SCALE 0
2019 2020
 
2020 2021
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Anet/A6/Configuration.h Ver fichero

@@ -2167,6 +2167,7 @@
2167 2167
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2168 2168
 // However, control resolution will be halved for each increment;
2169 2169
 // at zero value, there are 128 effective control positions.
2170
+// :[0,1,2,3,4,5,6,7]
2170 2171
 #define SOFT_PWM_SCALE 0
2171 2172
 
2172 2173
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Anet/A8/Configuration.h Ver fichero

@@ -2028,6 +2028,7 @@
2028 2028
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2029 2029
 // However, control resolution will be halved for each increment;
2030 2030
 // at zero value, there are 128 effective control positions.
2031
+// :[0,1,2,3,4,5,6,7]
2031 2032
 #define SOFT_PWM_SCALE 0
2032 2033
 
2033 2034
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/AnyCubic/i3/Configuration.h Ver fichero

@@ -2023,6 +2023,7 @@
2023 2023
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2024 2024
 // However, control resolution will be halved for each increment;
2025 2025
 // at zero value, there are 128 effective control positions.
2026
+// :[0,1,2,3,4,5,6,7]
2026 2027
 #define SOFT_PWM_SCALE 0
2027 2028
 
2028 2029
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/ArmEd/Configuration.h Ver fichero

@@ -2014,6 +2014,7 @@
2014 2014
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2015 2015
 // However, control resolution will be halved for each increment;
2016 2016
 // at zero value, there are 128 effective control positions.
2017
+// :[0,1,2,3,4,5,6,7]
2017 2018
 #define SOFT_PWM_SCALE 0
2018 2019
 
2019 2020
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Azteeg/X5GT/Configuration.h Ver fichero

@@ -2013,6 +2013,7 @@
2013 2013
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2014 2014
 // However, control resolution will be halved for each increment;
2015 2015
 // at zero value, there are 128 effective control positions.
2016
+// :[0,1,2,3,4,5,6,7]
2016 2017
 #define SOFT_PWM_SCALE 0
2017 2018
 
2018 2019
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/BIBO/TouchX/cyclops/Configuration.h Ver fichero

@@ -2013,6 +2013,7 @@
2013 2013
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2014 2014
 // However, control resolution will be halved for each increment;
2015 2015
 // at zero value, there are 128 effective control positions.
2016
+// :[0,1,2,3,4,5,6,7]
2016 2017
 #define SOFT_PWM_SCALE 0
2017 2018
 
2018 2019
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/BIBO/TouchX/default/Configuration.h Ver fichero

@@ -2013,6 +2013,7 @@
2013 2013
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2014 2014
 // However, control resolution will be halved for each increment;
2015 2015
 // at zero value, there are 128 effective control positions.
2016
+// :[0,1,2,3,4,5,6,7]
2016 2017
 #define SOFT_PWM_SCALE 0
2017 2018
 
2018 2019
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/BQ/Hephestos/Configuration.h Ver fichero

@@ -2001,6 +2001,7 @@
2001 2001
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2002 2002
 // However, control resolution will be halved for each increment;
2003 2003
 // at zero value, there are 128 effective control positions.
2004
+// :[0,1,2,3,4,5,6,7]
2004 2005
 #define SOFT_PWM_SCALE 0
2005 2006
 
2006 2007
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/BQ/Hephestos_2/Configuration.h Ver fichero

@@ -2013,6 +2013,7 @@
2013 2013
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2014 2014
 // However, control resolution will be halved for each increment;
2015 2015
 // at zero value, there are 128 effective control positions.
2016
+// :[0,1,2,3,4,5,6,7]
2016 2017
 #define SOFT_PWM_SCALE 0
2017 2018
 
2018 2019
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/BQ/WITBOX/Configuration.h Ver fichero

@@ -2001,6 +2001,7 @@
2001 2001
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2002 2002
 // However, control resolution will be halved for each increment;
2003 2003
 // at zero value, there are 128 effective control positions.
2004
+// :[0,1,2,3,4,5,6,7]
2004 2005
 #define SOFT_PWM_SCALE 0
2005 2006
 
2006 2007
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Cartesio/Configuration.h Ver fichero

@@ -2012,6 +2012,7 @@
2012 2012
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2013 2013
 // However, control resolution will be halved for each increment;
2014 2014
 // at zero value, there are 128 effective control positions.
2015
+// :[0,1,2,3,4,5,6,7]
2015 2016
 #define SOFT_PWM_SCALE 0
2016 2017
 
2017 2018
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/CR-10/Configuration.h Ver fichero

@@ -2023,6 +2023,7 @@
2023 2023
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2024 2024
 // However, control resolution will be halved for each increment;
2025 2025
 // at zero value, there are 128 effective control positions.
2026
+// :[0,1,2,3,4,5,6,7]
2026 2027
 #define SOFT_PWM_SCALE 0
2027 2028
 
2028 2029
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/CR-10S/Configuration.h Ver fichero

@@ -2014,6 +2014,7 @@
2014 2014
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2015 2015
 // However, control resolution will be halved for each increment;
2016 2016
 // at zero value, there are 128 effective control positions.
2017
+// :[0,1,2,3,4,5,6,7]
2017 2018
 #define SOFT_PWM_SCALE 0
2018 2019
 
2019 2020
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/CR-10_5S/Configuration.h Ver fichero

@@ -2016,6 +2016,7 @@
2016 2016
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2017 2017
 // However, control resolution will be halved for each increment;
2018 2018
 // at zero value, there are 128 effective control positions.
2019
+// :[0,1,2,3,4,5,6,7]
2019 2020
 #define SOFT_PWM_SCALE 0
2020 2021
 
2021 2022
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/CR-10mini/Configuration.h Ver fichero

@@ -2032,6 +2032,7 @@
2032 2032
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2033 2033
 // However, control resolution will be halved for each increment;
2034 2034
 // at zero value, there are 128 effective control positions.
2035
+// :[0,1,2,3,4,5,6,7]
2035 2036
 #define SOFT_PWM_SCALE 0
2036 2037
 
2037 2038
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/CR-8/Configuration.h Ver fichero

@@ -2023,6 +2023,7 @@
2023 2023
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2024 2024
 // However, control resolution will be halved for each increment;
2025 2025
 // at zero value, there are 128 effective control positions.
2026
+// :[0,1,2,3,4,5,6,7]
2026 2027
 #define SOFT_PWM_SCALE 0
2027 2028
 
2028 2029
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/Ender-2/Configuration.h Ver fichero

@@ -2017,6 +2017,7 @@
2017 2017
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2018 2018
 // However, control resolution will be halved for each increment;
2019 2019
 // at zero value, there are 128 effective control positions.
2020
+// :[0,1,2,3,4,5,6,7]
2020 2021
 #define SOFT_PWM_SCALE 0
2021 2022
 
2022 2023
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/Ender-3/Configuration.h Ver fichero

@@ -2017,6 +2017,7 @@
2017 2017
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2018 2018
 // However, control resolution will be halved for each increment;
2019 2019
 // at zero value, there are 128 effective control positions.
2020
+// :[0,1,2,3,4,5,6,7]
2020 2021
 #define SOFT_PWM_SCALE 0
2021 2022
 
2022 2023
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Creality/Ender-4/Configuration.h Ver fichero

@@ -2023,6 +2023,7 @@
2023 2023
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2024 2024
 // However, control resolution will be halved for each increment;
2025 2025
 // at zero value, there are 128 effective control positions.
2026
+// :[0,1,2,3,4,5,6,7]
2026 2027
 #define SOFT_PWM_SCALE 0
2027 2028
 
2028 2029
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Einstart-S/Configuration.h Ver fichero

@@ -2019,6 +2019,7 @@
2019 2019
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2020 2020
 // However, control resolution will be halved for each increment;
2021 2021
 // at zero value, there are 128 effective control positions.
2022
+// :[0,1,2,3,4,5,6,7]
2022 2023
 #define SOFT_PWM_SCALE 0
2023 2024
 
2024 2025
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Felix/Configuration.h Ver fichero

@@ -1995,6 +1995,7 @@
1995 1995
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
1996 1996
 // However, control resolution will be halved for each increment;
1997 1997
 // at zero value, there are 128 effective control positions.
1998
+// :[0,1,2,3,4,5,6,7]
1998 1999
 #define SOFT_PWM_SCALE 0
1999 2000
 
2000 2001
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Felix/DUAL/Configuration.h Ver fichero

@@ -1995,6 +1995,7 @@
1995 1995
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
1996 1996
 // However, control resolution will be halved for each increment;
1997 1997
 // at zero value, there are 128 effective control positions.
1998
+// :[0,1,2,3,4,5,6,7]
1998 1999
 #define SOFT_PWM_SCALE 0
1999 2000
 
2000 2001
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/FlashForge/CreatorPro/Configuration.h Ver fichero

@@ -2004,6 +2004,7 @@
2004 2004
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2005 2005
 // However, control resolution will be halved for each increment;
2006 2006
 // at zero value, there are 128 effective control positions.
2007
+// :[0,1,2,3,4,5,6,7]
2007 2008
 #define SOFT_PWM_SCALE 0
2008 2009
 
2009 2010
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/FolgerTech/i3-2020/Configuration.h Ver fichero

@@ -2019,6 +2019,7 @@
2019 2019
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2020 2020
 // However, control resolution will be halved for each increment;
2021 2021
 // at zero value, there are 128 effective control positions.
2022
+// :[0,1,2,3,4,5,6,7]
2022 2023
 #define SOFT_PWM_SCALE 0
2023 2024
 
2024 2025
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Formbot/Raptor/Configuration.h Ver fichero

@@ -2118,6 +2118,7 @@
2118 2118
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2119 2119
 // However, control resolution will be halved for each increment;
2120 2120
 // at zero value, there are 128 effective control positions.
2121
+// :[0,1,2,3,4,5,6,7]
2121 2122
 #define SOFT_PWM_SCALE 0
2122 2123
 
2123 2124
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 7
- 0
config/examples/Formbot/T_Rex_2+/Configuration.h Ver fichero

@@ -2048,6 +2048,7 @@
2048 2048
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2049 2049
 // However, control resolution will be halved for each increment;
2050 2050
 // at zero value, there are 128 effective control positions.
2051
+// :[0,1,2,3,4,5,6,7]
2051 2052
 #define SOFT_PWM_SCALE 0
2052 2053
 
2053 2054
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can
@@ -2159,3 +2160,9 @@
2159 2160
 
2160 2161
 // Allow servo angle to be edited and saved to EEPROM
2161 2162
 //#define EDITABLE_SERVO_ANGLES
2163
+
2164
+#ifdef ROXYs_TRex
2165
+  #define LED_PIN     -1
2166
+  #define BEEPER_PIN  -1
2167
+  #define KILL_PIN    -1
2168
+#endif

+ 7
- 0
config/examples/Formbot/T_Rex_3/Configuration.h Ver fichero

@@ -2041,6 +2041,7 @@
2041 2041
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2042 2042
 // However, control resolution will be halved for each increment;
2043 2043
 // at zero value, there are 128 effective control positions.
2044
+// :[0,1,2,3,4,5,6,7]
2044 2045
 #define SOFT_PWM_SCALE 0
2045 2046
 
2046 2047
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can
@@ -2152,3 +2153,9 @@
2152 2153
 
2153 2154
 // Allow servo angle to be edited and saved to EEPROM
2154 2155
 //#define EDITABLE_SERVO_ANGLES
2156
+
2157
+#ifdef ROXYs_TRex
2158
+  #define LED_PIN     -1
2159
+  #define BEEPER_PIN  -1
2160
+  #define KILL_PIN    -1
2161
+#endif

+ 1
- 0
config/examples/Geeetech/A10M/Configuration.h Ver fichero

@@ -1998,6 +1998,7 @@
1998 1998
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
1999 1999
 // However, control resolution will be halved for each increment;
2000 2000
 // at zero value, there are 128 effective control positions.
2001
+// :[0,1,2,3,4,5,6,7]
2001 2002
 #define SOFT_PWM_SCALE 0
2002 2003
 
2003 2004
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Geeetech/A20M/Configuration.h Ver fichero

@@ -2002,6 +2002,7 @@
2002 2002
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2003 2003
 // However, control resolution will be halved for each increment;
2004 2004
 // at zero value, there are 128 effective control positions.
2005
+// :[0,1,2,3,4,5,6,7]
2005 2006
 #define SOFT_PWM_SCALE 0
2006 2007
 
2007 2008
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Geeetech/GT2560/Configuration.h Ver fichero

@@ -2028,6 +2028,7 @@
2028 2028
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2029 2029
 // However, control resolution will be halved for each increment;
2030 2030
 // at zero value, there are 128 effective control positions.
2031
+// :[0,1,2,3,4,5,6,7]
2031 2032
 #define SOFT_PWM_SCALE 0
2032 2033
 
2033 2034
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h Ver fichero

@@ -2002,6 +2002,7 @@
2002 2002
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2003 2003
 // However, control resolution will be halved for each increment;
2004 2004
 // at zero value, there are 128 effective control positions.
2005
+// :[0,1,2,3,4,5,6,7]
2005 2006
 #define SOFT_PWM_SCALE 0
2006 2007
 
2007 2008
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Geeetech/MeCreator2/Configuration.h Ver fichero

@@ -2020,6 +2020,7 @@
2020 2020
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2021 2021
 // However, control resolution will be halved for each increment;
2022 2022
 // at zero value, there are 128 effective control positions.
2023
+// :[0,1,2,3,4,5,6,7]
2023 2024
 #define SOFT_PWM_SCALE 0
2024 2025
 
2025 2026
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 1
- 0
config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h Ver fichero

@@ -2029,6 +2029,7 @@
2029 2029
 // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
2030 2030
 // However, control resolution will be halved for each increment;
2031 2031
 // at zero value, there are 128 effective control positions.
2032
+// :[0,1,2,3,4,5,6,7]
2032 2033
 #define SOFT_PWM_SCALE 0
2033 2034
 
2034 2035
 // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

+ 0
- 0
config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h Ver fichero


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio

Loading…
Cancelar
Guardar