Browse Source

Merge branch 'RCBugFix' into translations

Michael Conradt 8 years ago
parent
commit
f3a7a5c99b
85 changed files with 2520 additions and 913 deletions
  1. 92
    20
      .travis.yml
  2. 72
    13
      Marlin/Conditionals.h
  3. 18
    3
      Marlin/Configuration.h
  4. 33
    3
      Marlin/Configuration_adv.h
  5. 15
    11
      Marlin/M100_Free_Mem_Chk.cpp
  6. 13
    11
      Marlin/Marlin.h
  7. 338
    243
      Marlin/Marlin_main.cpp
  8. 32
    17
      Marlin/SanityCheck.h
  9. 1
    0
      Marlin/Sd2Card.cpp
  10. 4
    4
      Marlin/cardreader.cpp
  11. 14
    14
      Marlin/configuration_store.cpp
  12. 3
    4
      Marlin/dogm_lcd_implementation.h
  13. 18
    3
      Marlin/example_configurations/Felix/Configuration.h
  14. 18
    3
      Marlin/example_configurations/Felix/Configuration_DUAL.h
  15. 33
    3
      Marlin/example_configurations/Felix/Configuration_adv.h
  16. 18
    3
      Marlin/example_configurations/Hephestos/Configuration.h
  17. 33
    3
      Marlin/example_configurations/Hephestos/Configuration_adv.h
  18. 18
    3
      Marlin/example_configurations/Hephestos_2/Configuration.h
  19. 33
    3
      Marlin/example_configurations/Hephestos_2/Configuration_adv.h
  20. 18
    3
      Marlin/example_configurations/K8200/Configuration.h
  21. 33
    3
      Marlin/example_configurations/K8200/Configuration_adv.h
  22. 18
    3
      Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
  23. 18
    3
      Marlin/example_configurations/RigidBot/Configuration.h
  24. 33
    3
      Marlin/example_configurations/RigidBot/Configuration_adv.h
  25. 18
    3
      Marlin/example_configurations/SCARA/Configuration.h
  26. 33
    3
      Marlin/example_configurations/SCARA/Configuration_adv.h
  27. 18
    3
      Marlin/example_configurations/TAZ4/Configuration.h
  28. 33
    3
      Marlin/example_configurations/TAZ4/Configuration_adv.h
  29. 18
    3
      Marlin/example_configurations/WITBOX/Configuration.h
  30. 33
    3
      Marlin/example_configurations/WITBOX/Configuration_adv.h
  31. 18
    3
      Marlin/example_configurations/adafruit/ST7565/Configuration.h
  32. 18
    3
      Marlin/example_configurations/delta/biv2.5/Configuration.h
  33. 33
    3
      Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
  34. 18
    3
      Marlin/example_configurations/delta/generic/Configuration.h
  35. 33
    3
      Marlin/example_configurations/delta/generic/Configuration_adv.h
  36. 18
    3
      Marlin/example_configurations/delta/kossel_mini/Configuration.h
  37. 33
    3
      Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
  38. 18
    3
      Marlin/example_configurations/delta/kossel_pro/Configuration.h
  39. 33
    3
      Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
  40. 18
    3
      Marlin/example_configurations/delta/kossel_xl/Configuration.h
  41. 33
    3
      Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
  42. 18
    3
      Marlin/example_configurations/makibox/Configuration.h
  43. 33
    3
      Marlin/example_configurations/makibox/Configuration_adv.h
  44. 18
    3
      Marlin/example_configurations/tvrrug/Round2/Configuration.h
  45. 33
    3
      Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
  46. 0
    3
      Marlin/fonts/README.fonts
  47. 7
    1
      Marlin/language.h
  48. 1
    0
      Marlin/language_an.h
  49. 1
    0
      Marlin/language_bg.h
  50. 1
    0
      Marlin/language_ca.h
  51. 1
    0
      Marlin/language_cn.h
  52. 5
    3
      Marlin/language_cz.h
  53. 11
    10
      Marlin/language_da.h
  54. 20
    10
      Marlin/language_de.h
  55. 3
    0
      Marlin/language_en.h
  56. 43
    29
      Marlin/language_es.h
  57. 1
    0
      Marlin/language_eu.h
  58. 1
    0
      Marlin/language_fi.h
  59. 29
    14
      Marlin/language_fr.h
  60. 51
    36
      Marlin/language_it.h
  61. 4
    3
      Marlin/language_kana.h
  62. 4
    3
      Marlin/language_kana_utf8.h
  63. 24
    5
      Marlin/language_nl.h
  64. 1
    0
      Marlin/language_pl.h
  65. 1
    0
      Marlin/language_pt-br.h
  66. 1
    0
      Marlin/language_pt-br_utf8.h
  67. 15
    1
      Marlin/language_pt.h
  68. 16
    2
      Marlin/language_pt_utf8.h
  69. 1
    0
      Marlin/language_ru.h
  70. 2
    2
      Marlin/macros.h
  71. 14
    32
      Marlin/pins.h
  72. 0
    2
      Marlin/pins_FELIX2.h
  73. 1
    1
      Marlin/pins_MEGATRONICS_3.h
  74. 23
    14
      Marlin/planner.cpp
  75. 14
    0
      Marlin/scripts/findMissingTranslations.sh
  76. 4
    4
      Marlin/stepper.cpp
  77. 77
    0
      Marlin/stopwatch.cpp
  78. 99
    0
      Marlin/stopwatch.h
  79. 4
    4
      Marlin/temperature.cpp
  80. 1
    1
      Marlin/temperature.h
  81. 104
    0
      Marlin/twibus.cpp
  82. 122
    0
      Marlin/twibus.h
  83. 313
    240
      Marlin/ultralcd.cpp
  84. 39
    22
      Marlin/ultralcd.h
  85. 7
    29
      Marlin/ultralcd_implementation_hitachi_HD44780.h

+ 92
- 20
.travis.yml View File

@@ -1,12 +1,13 @@
1 1
 ---
2 2
 language: c
3
-
3
+  #
4 4
 before_install:
5 5
   # Travis runs a detached head. We need to find the current branch
6 6
   - git checkout `git branch --contains HEAD | grep -v '*'`
7 7
   # Also tags for the root(s) of the minor version(s)
8 8
   - git fetch origin --tags
9 9
   - mkdir ~/bin
10
+  #
10 11
 install:
11 12
   # Install arduino 1.6.4
12 13
   - wget http://downloads-02.arduino.cc/arduino-1.6.4-linux64.tar.xz
@@ -26,144 +27,215 @@ install:
26 27
   - mv LiquidCrystal_I2C/LiquidCrystal_I2C /usr/local/share/arduino/libraries/LiquidCrystal_I2C
27 28
   - git clone https://github.com/lincomatic/LiquidTWI2.git
28 29
   - mv LiquidTWI2 /usr/local/share/arduino/libraries/LiquidTWI2
30
+  #
29 31
 before_script:
30 32
   # arduino requires an X server even with command line
31 33
   # https://github.com/arduino/Arduino/issues/1981
32 34
   - Xvfb :1 -screen 0 1024x768x16 &> xvfb.log &
33 35
   # change back to home directory for compiling
34 36
   - cd $TRAVIS_BUILD_DIR
37
+  #
35 38
 script:
36
-  # build default config
37
-  - build_marlin
39
+  #
38 40
   # Backup Configuration.h, Configuration_adv.h, and pins_RAMPS_14.h
41
+  #
39 42
   - cp Marlin/Configuration.h Marlin/Configuration.h.backup
40 43
   - cp Marlin/Configuration_adv.h Marlin/Configuration_adv.h.backup
41 44
   - cp Marlin/pins_RAMPS_14.h Marlin/pins_RAMPS_14.h.backup
42
-  # add sensor for bed
45
+  #
46
+  # Build with the default configurations
47
+  #
48
+  - build_marlin
49
+  #
50
+  # Test heated bed temperature sensor
51
+  #
43 52
   - opt_set TEMP_SENSOR_BED 1
44 53
   - build_marlin
45
-  # change extruder numbers from 1 to 2
54
+  #
55
+  # Test 2 extruders on basic RAMPS 1.4
56
+  #
46 57
   - opt_set MOTHERBOARD BOARD_RAMPS_14_EEB
47 58
   - opt_set EXTRUDERS 2
48 59
   - opt_set TEMP_SENSOR_1 1
49
-  #- cat Marlin/Configuration.h
50 60
   - build_marlin
51
-  # change extruder numbers from 2 to 3, needs to be a board with 3 extruders defined in pins.h 
61
+  #
62
+  # Test 3 extruders on RUMBA (can use any board with >=3 extruders defined)
63
+  #
52 64
   - opt_set MOTHERBOARD BOARD_RUMBA
53 65
   - opt_set EXTRUDERS 3
54 66
   - opt_set TEMP_SENSOR_2 1
55 67
   - build_marlin
56
-  # enable PIDTEMPBED 
68
+  #
69
+  # Test PIDTEMPBED
70
+  #
57 71
   - restore_configs
58 72
   - opt_enable PIDTEMPBED
59 73
   - build_marlin
60
-  # enable AUTO_BED_LEVELING
74
+  #
75
+  # Test AUTO_BED_LEVELING & DEBUG_LEVELING_FEATURE
76
+  #
61 77
   - restore_configs
62
-  - opt_enable ENABLE_AUTO_BED_LEVELING
78
+  - opt_enable ENABLE_AUTO_BED_LEVELING DEBUG_LEVELING_FEATURE
63 79
   - build_marlin
64
-  # enable AUTO_BED_LEVELING with servos
65
-  - restore_configs
66
-  - opt_enable ENABLE_AUTO_BED_LEVELING NUM_SERVOS Z_ENDSTOP_SERVO_NR SERVO_ENDSTOP_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
80
+  #
81
+  # Test AUTO_BED_LEVELING & DEBUG_LEVELING_FEATURE with Servos
82
+  #
83
+  - opt_enable NUM_SERVOS Z_ENDSTOP_SERVO_NR SERVO_ENDSTOP_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
67 84
   - build_marlin
68
-  # enable EEPROM_SETTINGS & EEPROM_CHITCHAT
85
+  #
86
+  # Test EEPROM_SETTINGS & EEPROM_CHITCHAT
87
+  #
69 88
   - restore_configs
70 89
   - opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT
71 90
   - build_marlin
91
+  #
72 92
   ### LCDS ###
93
+  #
94
+  #
73 95
   # ULTIMAKERCONTROLLER
96
+  #
74 97
   - restore_configs
75 98
   - opt_enable ULTIMAKERCONTROLLER
76 99
   - build_marlin
100
+  #
77 101
   # MAKRPANEL
78
-  # Needs to use melzi and sanguino hardware
102
+  # Needs to use Melzi and Sanguino hardware
103
+  #
79 104
   #- restore_configs
80 105
   #- opt_enable MAKRPANEL
81 106
   #- build_marlin
107
+  #
82 108
   # REPRAP_DISCOUNT_SMART_CONTROLLER
109
+  #
83 110
   - restore_configs
84 111
   - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT
85 112
   - build_marlin
113
+  #
86 114
   # G3D_PANEL
115
+  #
87 116
   - restore_configs
88 117
   - opt_enable G3D_PANEL SDSUPPORT
89 118
   - build_marlin
119
+  #
90 120
   # REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
121
+  #
91 122
   - restore_configs
92
-  - opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
123
+  - opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT
93 124
   - build_marlin
125
+  #
94 126
   # REPRAPWORLD_KEYPAD
127
+  #
95 128
   # Cant find configuration details to get it to compile
96 129
   #- restore_configs
97 130
   #- opt_enable ULTRA_LCD REPRAPWORLD_KEYPAD REPRAPWORLD_KEYPAD_MOVE_STEP
98 131
   #- build_marlin
132
+  #
99 133
   # RA_CONTROL_PANEL
134
+  #
100 135
   - restore_configs
101 136
   - opt_enable RA_CONTROL_PANEL
102 137
   - build_marlin
138
+  #
103 139
   ### I2C PANELS ###
140
+  #
104 141
   # LCD_I2C_SAINSMART_YWROBOT
105 142
   # Failing at the moment needs different library 
106 143
   #- restore_configs
107 144
   #- opt_enable LCD_I2C_SAINSMART_YWROBOT
108 145
   #- build_marlin
146
+  #
109 147
   # LCD_I2C_PANELOLU2
148
+  #
110 149
   - restore_configs
111 150
   - opt_enable LCD_I2C_PANELOLU2
112 151
   - build_marlin
152
+  #
113 153
   # LCD_I2C_VIKI
154
+  #
114 155
   - restore_configs
115 156
   - opt_enable LCD_I2C_VIKI
116 157
   - build_marlin
158
+  #
117 159
   # LCM1602
160
+  #
118 161
   - restore_configs
119 162
   - opt_enable LCM1602
120 163
   - build_marlin
164
+  #
121 165
   # Enable FILAMENTCHANGEENABLE
166
+  #
122 167
   - restore_configs
123
-  - opt_enable FILAMENTCHANGEENABLE
168
+  - opt_enable FILAMENTCHANGEENABLE ULTIMAKERCONTROLLER
124 169
   - build_marlin
170
+  #
125 171
   # Enable filament sensor
172
+  #
126 173
   - restore_configs
127 174
   - opt_enable FILAMENT_WIDTH_SENSOR
128 175
   - build_marlin
176
+  #
129 177
   # Enable filament sensor with LCD display
130
-  - restore_configs
131
-  - opt_enable ULTIMAKERCONTROLLER FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY
178
+  #
179
+  - opt_enable ULTIMAKERCONTROLLER FILAMENT_LCD_DISPLAY
132 180
   - build_marlin
181
+  #
133 182
   # Enable COREXY
183
+  #
134 184
   - restore_configs
135 185
   - opt_enable COREXY
136 186
   - build_marlin
187
+  #
137 188
   # Enable COREXZ
189
+  #
138 190
   - restore_configs
139 191
   - opt_enable COREXZ
140 192
   - build_marlin
193
+  #
141 194
   # Enable Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS
195
+  #
142 196
   - restore_configs
143 197
   - opt_enable_adv Z_DUAL_STEPPER_DRIVERS Z_DUAL_ENDSTOPS
144 198
   - pins_set RAMPS_14 X_MAX_PIN -1
145 199
   - opt_set_adv Z2_MAX_PIN 2
146 200
   - build_marlin
147
-  - restore_configs
201
+  #
202
+  #
148 203
   ######## Example Configurations ##############
204
+  #
149 205
   # Delta Config (generic)
206
+  - restore_configs
150 207
   - use_example_configs delta/generic
151 208
   - build_marlin
209
+  #
152 210
   # Delta Config (generic) + ABL + ALLEN_KEY
211
+  #
153 212
   - use_example_configs delta/generic
154 213
   - opt_disable DISABLE_MIN_ENDSTOPS
155 214
   - opt_enable AUTO_BED_LEVELING_FEATURE Z_PROBE_ALLEN_KEY
156 215
   - build_marlin
216
+  #
157 217
   # Delta Config (Mini Kossel)
218
+  #
158 219
   - use_example_configs delta/kossel_mini
159 220
   - build_marlin
221
+  #
160 222
   # Makibox Config  need to check board type for Teensy++ 2.0
223
+  #
161 224
   #- use_example_configs makibox
162 225
   #- build_marlin
226
+  #
163 227
   # SCARA Config
228
+  #
164 229
   - use_example_configs SCARA
165 230
   - build_marlin
231
+  #
166 232
   # tvrrug Config need to check board type for sanguino atmega644p
233
+  #
167 234
   #- use_example_configs tvrrug/Round2
168 235
   #- build_marlin
236
+  #
237
+  #
169 238
   ######## Board Types #############
239
+  #
240
+  # To be added in nightly test branch
241
+  #

+ 72
- 13
Marlin/Conditionals.h View File

@@ -275,20 +275,28 @@
275 275
   #include "Arduino.h"
276 276
 
277 277
   /**
278
-   * ENDSTOPPULLUPS
278
+   * Set ENDSTOPPULLUPS for unused endstop switches
279 279
    */
280 280
   #if ENABLED(ENDSTOPPULLUPS)
281
-    #if DISABLED(DISABLE_MAX_ENDSTOPS)
281
+    #if ENABLED(USE_XMAX_PLUG)
282 282
       #define ENDSTOPPULLUP_XMAX
283
+    #endif
284
+    #if ENABLED(USE_YMAX_PLUG)
283 285
       #define ENDSTOPPULLUP_YMAX
286
+    #endif
287
+    #if ENABLED(USE_ZMAX_PLUG)
284 288
       #define ENDSTOPPULLUP_ZMAX
285 289
     #endif
286
-    #if DISABLED(DISABLE_MIN_ENDSTOPS)
290
+    #if ENABLED(USE_XMIN_PLUG)
287 291
       #define ENDSTOPPULLUP_XMIN
292
+    #endif
293
+    #if ENABLED(USE_YMIN_PLUG)
288 294
       #define ENDSTOPPULLUP_YMIN
295
+    #endif
296
+    #if ENABLED(USE_ZMIN_PLUG)
289 297
       #define ENDSTOPPULLUP_ZMIN
290 298
     #endif
291
-    #if DISABLED(DISABLE_Z_MIN_PROBE_ENDSTOP)
299
+    #if ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP)
292 300
       #define ENDSTOPPULLUP_ZMIN_PROBE
293 301
     #endif
294 302
   #endif
@@ -440,7 +448,9 @@
440 448
     #define HEATER_0_USES_THERMISTOR
441 449
   #endif
442 450
 
443
-  #if TEMP_SENSOR_1 == -1
451
+  #if TEMP_SENSOR_1 <= -2
452
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_1
453
+  #elif TEMP_SENSOR_1 == -1
444 454
     #define HEATER_1_USES_AD595
445 455
   #elif TEMP_SENSOR_1 == 0
446 456
     #undef HEATER_1_MINTEMP
@@ -450,7 +460,9 @@
450 460
     #define HEATER_1_USES_THERMISTOR
451 461
   #endif
452 462
 
453
-  #if TEMP_SENSOR_2 == -1
463
+  #if TEMP_SENSOR_2 <= -2
464
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_2
465
+  #elif TEMP_SENSOR_2 == -1
454 466
     #define HEATER_2_USES_AD595
455 467
   #elif TEMP_SENSOR_2 == 0
456 468
     #undef HEATER_2_MINTEMP
@@ -460,7 +472,9 @@
460 472
     #define HEATER_2_USES_THERMISTOR
461 473
   #endif
462 474
 
463
-  #if TEMP_SENSOR_3 == -1
475
+  #if TEMP_SENSOR_3 <= -2
476
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_3
477
+  #elif TEMP_SENSOR_3 == -1
464 478
     #define HEATER_3_USES_AD595
465 479
   #elif TEMP_SENSOR_3 == 0
466 480
     #undef HEATER_3_MINTEMP
@@ -470,7 +484,9 @@
470 484
     #define HEATER_3_USES_THERMISTOR
471 485
   #endif
472 486
 
473
-  #if TEMP_SENSOR_BED == -1
487
+  #if TEMP_SENSOR_BED <= -2
488
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_BED
489
+  #elif TEMP_SENSOR_BED == -1
474 490
     #define BED_USES_AD595
475 491
   #elif TEMP_SENSOR_BED == 0
476 492
     #undef BED_MINTEMP
@@ -496,13 +512,54 @@
496 512
   #define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1)
497 513
 
498 514
   /**
515
+   * Z_DUAL_ENDSTOPS endstop reassignment
516
+   */
517
+  #if ENABLED(Z_DUAL_ENDSTOPS)
518
+    #define _XMIN_ 100
519
+    #define _YMIN_ 200
520
+    #define _ZMIN_ 300
521
+    #define _XMAX_ 101
522
+    #define _YMAX_ 201
523
+    #define _ZMAX_ 301
524
+    const bool Z2_MAX_ENDSTOP_INVERTING =
525
+      #if Z2_USE_ENDSTOP == _XMAX_
526
+        X_MAX_ENDSTOP_INVERTING
527
+        #define Z2_MAX_PIN X_MAX_PIN
528
+        #undef USE_XMAX_PLUG
529
+      #elif Z2_USE_ENDSTOP == _YMAX_
530
+        Y_MAX_ENDSTOP_INVERTING
531
+        #define Z2_MAX_PIN Y_MAX_PIN
532
+        #undef USE_YMAX_PLUG
533
+      #elif Z2_USE_ENDSTOP == _ZMAX_
534
+        Z_MAX_ENDSTOP_INVERTING
535
+        #define Z2_MAX_PIN Z_MAX_PIN
536
+        #undef USE_ZMAX_PLUG
537
+      #elif Z2_USE_ENDSTOP == _XMIN_
538
+        X_MIN_ENDSTOP_INVERTING
539
+        #define Z2_MAX_PIN X_MIN_PIN
540
+        #undef USE_XMIN_PLUG
541
+      #elif Z2_USE_ENDSTOP == _YMIN_
542
+        Y_MIN_ENDSTOP_INVERTING
543
+        #define Z2_MAX_PIN Y_MIN_PIN
544
+        #undef USE_YMIN_PLUG
545
+      #elif Z2_USE_ENDSTOP == _ZMIN_
546
+        Z_MIN_ENDSTOP_INVERTING
547
+        #define Z2_MAX_PIN Z_MIN_PIN
548
+        #undef USE_ZMIN_PLUG
549
+      #else
550
+        0
551
+      #endif
552
+    ;
553
+  #endif
554
+
555
+  /**
499 556
    * Shorthand for pin tests, used wherever needed
500 557
    */
501
-  #define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 != -2)
502
-  #define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0)
503
-  #define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0)
504
-  #define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0)
505
-  #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0)
558
+  #define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 > -2)
559
+  #define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0 && TEMP_SENSOR_1 > -2)
560
+  #define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0 && TEMP_SENSOR_2 > -2)
561
+  #define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0 && TEMP_SENSOR_3 > -2)
562
+  #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2)
506 563
   #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
507 564
   #define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
508 565
   #define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
@@ -581,6 +638,8 @@
581 638
 
582 639
   #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
583 640
 
641
+  #define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675))
642
+
584 643
   /**
585 644
    * Helper Macros for heaters and extruder fan
586 645
    */

+ 18
- 3
Marlin/Configuration.h View File

@@ -346,8 +346,22 @@
346 346
 // Enable this option for Toshiba steppers
347 347
 //#define CONFIG_STEPPERS_TOSHIBA
348 348
 
349
+//===========================================================================
350
+//============================== Endstop Settings ===========================
351
+//===========================================================================
352
+
349 353
 // @section homing
350 354
 
355
+// Specify here all the endstop connectors that are connected to any endstop or probe.
356
+// Almost all printers will be using one per axis. Probes will use one or more of the
357
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
358
+#define USE_XMIN_PLUG
359
+#define USE_YMIN_PLUG
360
+#define USE_ZMIN_PLUG
361
+//#define USE_XMAX_PLUG
362
+//#define USE_YMAX_PLUG
363
+//#define USE_ZMAX_PLUG
364
+
351 365
 // coarse Endstop Settings
352 366
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
353 367
 
@@ -370,8 +384,6 @@ const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
370 384
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
371 385
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
372 386
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
373
-//#define DISABLE_MAX_ENDSTOPS
374
-//#define DISABLE_MIN_ENDSTOPS
375 387
 
376 388
 //===========================================================================
377 389
 //============================= Z Probe Options =============================
@@ -709,9 +721,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
709 721
 // Host Keepalive
710 722
 //
711 723
 // By default Marlin will send a busy status message to the host
712
-// every 10 seconds when it can't accept commands.
724
+// every couple of seconds when it can't accept commands.
713 725
 //
714 726
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
727
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
728
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
729
+#endif
715 730
 
716 731
 //
717 732
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 15
- 11
Marlin/M100_Free_Mem_Chk.cpp View File

@@ -137,8 +137,10 @@ void gcode_M100() {
137 137
   // other vital statistics that define the memory pool.
138 138
   //
139 139
   if (code_seen('F')) {
140
-    int max_addr = (int) __brkval;
141
-    int max_cnt = 0;
140
+    #if 0
141
+      int max_addr = (int) __brkval;
142
+      int max_cnt = 0;
143
+    #endif
142 144
     int block_cnt = 0;
143 145
     ptr = (unsigned char*) __brkval;
144 146
     sp = top_of_stack();
@@ -155,10 +157,12 @@ void gcode_M100() {
155 157
           i += j;
156 158
           block_cnt++;
157 159
         }
158
-        if (j > max_cnt) {      // We don't do anything with this information yet
159
-          max_cnt  = j;     // but we do know where the biggest free memory block is.
160
-          max_addr = (int) ptr + i;
161
-        }
160
+        #if 0
161
+          if (j > max_cnt) {      // We don't do anything with this information yet
162
+            max_cnt  = j;     // but we do know where the biggest free memory block is.
163
+            max_addr = (int) ptr + i;
164
+          }
165
+        #endif
162 166
       }
163 167
     }
164 168
     if (block_cnt > 1)
@@ -176,10 +180,10 @@ void gcode_M100() {
176 180
     x = code_value();
177 181
     SERIAL_ECHOLNPGM("Corrupting free memory block.\n");
178 182
     ptr = (unsigned char*) __brkval;
179
-    SERIAL_ECHOPAIR("\n__brkval : ", (long) ptr);
183
+    SERIAL_ECHOPAIR("\n__brkval : ", ptr);
180 184
     ptr += 8;
181 185
     sp = top_of_stack();
182
-    SERIAL_ECHOPAIR("\nStack Pointer : ", (long) sp);
186
+    SERIAL_ECHOPAIR("\nStack Pointer : ", sp);
183 187
     SERIAL_ECHOLNPGM("\n");
184 188
     n = sp - ptr - 64;    // -64 just to keep us from finding interrupt activity that
185 189
     // has altered the stack.
@@ -200,10 +204,10 @@ void gcode_M100() {
200 204
   if (m100_not_initialized || code_seen('I')) {       // If no sub-command is specified, the first time
201 205
     SERIAL_ECHOLNPGM("Initializing free memory block.\n");    // this happens, it will Initialize.
202 206
     ptr = (unsigned char*) __brkval;        // Repeated M100 with no sub-command will not destroy the
203
-    SERIAL_ECHOPAIR("\n__brkval : ", (long) ptr);     // state of the initialized free memory pool.
207
+    SERIAL_ECHOPAIR("\n__brkval : ", ptr);     // state of the initialized free memory pool.
204 208
     ptr += 8;
205 209
     sp = top_of_stack();
206
-    SERIAL_ECHOPAIR("\nStack Pointer : ", (long) sp);
210
+    SERIAL_ECHOPAIR("\nStack Pointer : ", sp);
207 211
     SERIAL_ECHOLNPGM("\n");
208 212
     n = sp - ptr - 64;    // -64 just to keep us from finding interrupt activity that
209 213
     // has altered the stack.
@@ -213,7 +217,7 @@ void gcode_M100() {
213 217
       *(ptr + i) = (unsigned char) 0xe5;
214 218
     for (i = 0; i < n; i++) {
215 219
       if (*(ptr + i) != (unsigned char) 0xe5) {
216
-        SERIAL_ECHOPAIR("? address : ", (unsigned long) ptr + i);
220
+        SERIAL_ECHOPAIR("? address : ", ptr + i);
217 221
         SERIAL_ECHOPAIR("=", *(ptr + i));
218 222
         SERIAL_ECHOLNPGM("\n");
219 223
       }

+ 13
- 11
Marlin/Marlin.h View File

@@ -65,6 +65,8 @@ typedef unsigned long millis_t;
65 65
 
66 66
 #include "WString.h"
67 67
 
68
+#include "stopwatch.h"
69
+
68 70
 #ifdef USBCON
69 71
   #if ENABLED(BLUETOOTH)
70 72
     #define MYSERIAL bluetoothSerial
@@ -101,13 +103,15 @@ extern const char echomagic[] PROGMEM;
101 103
 #define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
102 104
 #define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
103 105
 
104
-#define SERIAL_ECHOPAIR(name,value) do{ serial_echopair_P(PSTR(name),(value)); }while(0)
106
+#define SERIAL_ECHOPAIR(name,value) (serial_echopair_P(PSTR(name),(value)))
105 107
 
106 108
 void serial_echopair_P(const char* s_P, int v);
107 109
 void serial_echopair_P(const char* s_P, long v);
108 110
 void serial_echopair_P(const char* s_P, float v);
109 111
 void serial_echopair_P(const char* s_P, double v);
110 112
 void serial_echopair_P(const char* s_P, unsigned long v);
113
+FORCE_INLINE void serial_echopair_P(const char* s_P, bool v) { serial_echopair_P(s_P, (int)v); }
114
+FORCE_INLINE void serial_echopair_P(const char* s_P, void *v) { serial_echopair_P(s_P, (unsigned long)v); }
111 115
 
112 116
 // Things to write to serial from Program memory. Saves 400 to 2k of RAM.
113 117
 FORCE_INLINE void serialprintPGM(const char* str) {
@@ -323,6 +327,10 @@ extern bool axis_homed[3]; // axis[n].is_homed
323 327
   extern float zprobe_zoffset;
324 328
 #endif
325 329
 
330
+#if ENABLED(HOST_KEEPALIVE_FEATURE)
331
+  extern uint8_t host_keepalive_interval;
332
+#endif
333
+
326 334
 #if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
327 335
   extern float extrude_min_temp;
328 336
 #endif
@@ -341,8 +349,7 @@ extern bool axis_homed[3]; // axis[n].is_homed
341 349
   extern bool filament_sensor;  //indicates that filament sensor readings should control extrusion
342 350
   extern float filament_width_meas; //holds the filament diameter as accurately measured
343 351
   extern int8_t measurement_delay[];  //ring buffer to delay measurement
344
-  extern int delay_index1, delay_index2;  //ring buffer index. used by planner, temperature, and main code
345
-  extern float delay_dist; //delay distance counter
352
+  extern int filwidth_delay_index1, filwidth_delay_index2;  //ring buffer index. used by planner, temperature, and main code
346 353
   extern int meas_delay_cm; //delay distance
347 354
 #endif
348 355
 
@@ -357,8 +364,8 @@ extern bool axis_homed[3]; // axis[n].is_homed
357 364
   extern float retract_recover_length, retract_recover_length_swap, retract_recover_feedrate;
358 365
 #endif
359 366
 
360
-extern millis_t print_job_start_ms;
361
-extern millis_t print_job_stop_ms;
367
+// Print job timer
368
+extern Stopwatch print_job_timer;
362 369
 
363 370
 // Handling multiple extruders pins
364 371
 extern uint8_t active_extruder;
@@ -368,15 +375,10 @@ extern uint8_t active_extruder;
368 375
   extern void digipot_i2c_init();
369 376
 #endif
370 377
 
371
-#if HAS_TEMP_0 || HAS_TEMP_BED || ENABLED(HEATER_0_USES_MAX6675)
378
+#if HAS_TEMP_HOTEND || HAS_TEMP_BED
372 379
   void print_heaterstates();
373 380
 #endif
374 381
 
375 382
 extern void calculate_volumetric_multipliers();
376 383
 
377
-// Print job timer related functions
378
-millis_t print_job_timer();
379
-bool print_job_start(millis_t t = 0);
380
-bool print_job_stop(bool force = false);
381
-
382 384
 #endif //MARLIN_H

+ 338
- 243
Marlin/Marlin_main.cpp
File diff suppressed because it is too large
View File


+ 32
- 17
Marlin/SanityCheck.h View File

@@ -368,27 +368,29 @@
368 368
  * Test Heater, Temp Sensor, and Extruder Pins; Sensor Type must also be set.
369 369
  */
370 370
 #if EXTRUDERS > 3
371
-  #if !HAS_HEATER_3
371
+  #if TEMP_SENSOR_3 == 0
372
+    #error TEMP_SENSOR_3 is required with 4 EXTRUDERS.
373
+  #elif !HAS_HEATER_3
372 374
     #error HEATER_3_PIN not defined for this board.
373 375
   #elif !PIN_EXISTS(TEMP_3)
374 376
     #error TEMP_3_PIN not defined for this board.
375 377
   #elif !PIN_EXISTS(E3_STEP) || !PIN_EXISTS(E3_DIR) || !PIN_EXISTS(E3_ENABLE)
376 378
     #error E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board.
377
-  #elif TEMP_SENSOR_3 == 0
378
-    #error TEMP_SENSOR_3 is required with 4 EXTRUDERS.
379 379
   #endif
380 380
 #elif EXTRUDERS > 2
381
-  #if !HAS_HEATER_2
381
+  #if TEMP_SENSOR_2 == 0
382
+    #error TEMP_SENSOR_2 is required with 3 or more EXTRUDERS.
383
+  #elif !HAS_HEATER_2
382 384
     #error HEATER_2_PIN not defined for this board.
383 385
   #elif !PIN_EXISTS(TEMP_2)
384 386
     #error TEMP_2_PIN not defined for this board.
385 387
   #elif !PIN_EXISTS(E2_STEP) || !PIN_EXISTS(E2_DIR) || !PIN_EXISTS(E2_ENABLE)
386 388
     #error E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board.
387
-  #elif TEMP_SENSOR_2 == 0
388
-    #error TEMP_SENSOR_2 is required with 3 or more EXTRUDERS.
389 389
   #endif
390 390
 #elif EXTRUDERS > 1
391
-  #if !PIN_EXISTS(TEMP_1)
391
+  #if TEMP_SENSOR_1 == 0
392
+    #error TEMP_SENSOR_1 is required with 2 or more EXTRUDERS.
393
+  #elif !PIN_EXISTS(TEMP_1)
392 394
     #error TEMP_1_PIN not defined for this board.
393 395
   #elif !PIN_EXISTS(E1_STEP) || !PIN_EXISTS(E1_DIR) || !PIN_EXISTS(E1_ENABLE)
394 396
     #error E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board.
@@ -401,12 +403,8 @@
401 403
   #endif
402 404
 #endif
403 405
 
404
-#if TEMP_SENSOR_1 == 0
405
-  #if EXTRUDERS > 1
406
-    #error TEMP_SENSOR_1 is required with 2 or more EXTRUDERS.
407
-  #elif ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
408
-    #error TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT.
409
-  #endif
406
+#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) && TEMP_SENSOR_1 == 0
407
+  #error TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT.
410 408
 #endif
411 409
 
412 410
 #if !HAS_HEATER_0
@@ -420,6 +418,19 @@
420 418
 #endif
421 419
 
422 420
 /**
421
+ * Endstops
422
+ */
423
+#if DISABLED(USE_XMIN_PLUG) && DISABLED(USE_XMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _XMAX_ && Z2_USE_ENDSTOP <= _XMIN_)
424
+ #error You must enable USE_XMIN_PLUG or USE_XMAX_PLUG
425
+#elif DISABLED(USE_YMIN_PLUG) && DISABLED(USE_YMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _YMAX_ && Z2_USE_ENDSTOP <= _YMIN_)
426
+ #error You must enable USE_YMIN_PLUG or USE_YMAX_PLUG
427
+#elif DISABLED(USE_ZMIN_PLUG) && DISABLED(USE_ZMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _ZMAX_ && Z2_USE_ENDSTOP <= _ZMIN_)
428
+ #error You must enable USE_ZMIN_PLUG or USE_ZMAX_PLUG
429
+#elif ENABLED(Z_DUAL_ENDSTOPS) && !Z2_USE_ENDSTOP
430
+ #error You must set Z2_USE_ENDSTOP with Z_DUAL_ENDSTOPS
431
+#endif
432
+
433
+/**
423 434
  * Warnings for old configurations
424 435
  */
425 436
 #if WATCH_TEMP_PERIOD > 500
@@ -445,17 +456,21 @@
445 456
 #elif defined(CUSTOM_MENDEL_NAME)
446 457
   #error CUSTOM_MENDEL_NAME is now CUSTOM_MACHINE_NAME. Please update your configuration.
447 458
 #elif defined(HAS_AUTOMATIC_VERSIONING)
448
-  #error HAS_AUTOMATIC_VERSIONING deprecated - use USE_AUTOMATIC_VERSIONING instead
459
+  #error HAS_AUTOMATIC_VERSIONING is now USE_AUTOMATIC_VERSIONING. Please update your configuration.
449 460
 #elif defined(ENABLE_AUTO_BED_LEVELING)
450
-  #error ENABLE_AUTO_BED_LEVELING deprecated - use AUTO_BED_LEVELING_FEATURE instead
461
+  #error ENABLE_AUTO_BED_LEVELING is now AUTO_BED_LEVELING_FEATURE. Please update your configuration.
451 462
 #elif defined(SDSLOW)
452
-  #error SDSLOW deprecated - set SPI_SPEED to SPI_HALF_SPEED instead
463
+  #error SDSLOW deprecated. Set SPI_SPEED to SPI_HALF_SPEED instead.
453 464
 #elif defined(SDEXTRASLOW)
454
-  #error SDEXTRASLOW deprecated - set SPI_SPEED to SPI_QUARTER_SPEED instead
465
+  #error SDEXTRASLOW deprecated. Set SPI_SPEED to SPI_QUARTER_SPEED instead.
455 466
 #elif defined(Z_RAISE_BEFORE_HOMING)
456 467
   #error Z_RAISE_BEFORE_HOMING is deprecated. Use MIN_Z_HEIGHT_FOR_HOMING instead.
457 468
 #elif defined(FILAMENT_SENSOR)
458 469
   #error FILAMENT_SENSOR is deprecated. Use FILAMENT_WIDTH_SENSOR instead.
470
+#elif defined(DISABLE_MAX_ENDSTOPS) || defined(DISABLE_MIN_ENDSTOPS)
471
+  #error DISABLE_MAX_ENDSTOPS and DISABLE_MIN_ENDSTOPS deprecated. Use individual USE_*_PLUG options instead.
472
+#elif ENABLED(Z_DUAL_ENDSTOPS) && !defined(Z2_USE_ENDSTOP)
473
+  #error Z_DUAL_ENDSTOPS settings are simplified. Just set Z2_USE_ENDSTOP to the endstop you want to repurpose for Z2
459 474
 #endif
460 475
 
461 476
 #endif //SANITYCHECK_H

+ 1
- 0
Marlin/Sd2Card.cpp View File

@@ -365,6 +365,7 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) {
365 365
   #if DISABLED(SOFTWARE_SPI)
366 366
     return setSckRate(sckRateID);
367 367
   #else  // SOFTWARE_SPI
368
+    UNUSED(sckRateID);
368 369
     return true;
369 370
   #endif  // SOFTWARE_SPI
370 371
 

+ 4
- 4
Marlin/cardreader.cpp View File

@@ -348,11 +348,11 @@ void CardReader::openFile(char* name, bool read, bool push_current/*=false*/) {
348 348
   char *dirname_start, *dirname_end;
349 349
   if (name[0] == '/') {
350 350
     dirname_start = &name[1];
351
-    while (dirname_start > 0) {
351
+    while (dirname_start != NULL) {
352 352
       dirname_end = strchr(dirname_start, '/');
353 353
       //SERIAL_ECHO("start:");SERIAL_ECHOLN((int)(dirname_start - name));
354 354
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
355
-      if (dirname_end > 0 && dirname_end > dirname_start) {
355
+      if (dirname_end != NULL && dirname_end > dirname_start) {
356 356
         char subdirname[FILENAME_LENGTH];
357 357
         strncpy(subdirname, dirname_start, dirname_end - dirname_start);
358 358
         subdirname[dirname_end - dirname_start] = 0;
@@ -429,11 +429,11 @@ void CardReader::removeFile(char* name) {
429 429
   char *dirname_start, *dirname_end;
430 430
   if (name[0] == '/') {
431 431
     dirname_start = strchr(name, '/') + 1;
432
-    while (dirname_start > 0) {
432
+    while (dirname_start != NULL) {
433 433
       dirname_end = strchr(dirname_start, '/');
434 434
       //SERIAL_ECHO("start:");SERIAL_ECHOLN((int)(dirname_start - name));
435 435
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
436
-      if (dirname_end > 0 && dirname_end > dirname_start) {
436
+      if (dirname_end != NULL && dirname_end > dirname_start) {
437 437
         char subdirname[FILENAME_LENGTH];
438 438
         strncpy(subdirname, dirname_start, dirname_end - dirname_start);
439 439
         subdirname[dirname_end - dirname_start] = 0;

+ 14
- 14
Marlin/configuration_store.cpp View File

@@ -328,7 +328,7 @@ void Config_StoreSettings()  {
328 328
 
329 329
   // Report storage size
330 330
   SERIAL_ECHO_START;
331
-  SERIAL_ECHOPAIR("Settings Stored (", (unsigned long)i);
331
+  SERIAL_ECHOPAIR("Settings Stored (", i);
332 332
   SERIAL_ECHOLNPGM(" bytes)");
333 333
 }
334 334
 
@@ -507,7 +507,7 @@ void Config_RetrieveSettings() {
507 507
     // Report settings retrieved and length
508 508
     SERIAL_ECHO_START;
509 509
     SERIAL_ECHO(ver);
510
-    SERIAL_ECHOPAIR(" stored settings retrieved (", (unsigned long)i);
510
+    SERIAL_ECHOPAIR(" stored settings retrieved (", i);
511 511
     SERIAL_ECHOLNPGM(" bytes)");
512 512
   }
513 513
 
@@ -730,9 +730,9 @@ void Config_PrintSettings(bool forReplay) {
730 730
       SERIAL_ECHOLNPGM("Mesh bed leveling:");
731 731
       CONFIG_ECHO_START;
732 732
     }
733
-    SERIAL_ECHOPAIR("  M420 S", (unsigned long)mbl.active);
734
-    SERIAL_ECHOPAIR(" X", (unsigned long)MESH_NUM_X_POINTS);
735
-    SERIAL_ECHOPAIR(" Y", (unsigned long)MESH_NUM_Y_POINTS);
733
+    SERIAL_ECHOPAIR("  M420 S", mbl.active);
734
+    SERIAL_ECHOPAIR(" X", MESH_NUM_X_POINTS);
735
+    SERIAL_ECHOPAIR(" Y", MESH_NUM_Y_POINTS);
736 736
     SERIAL_EOL;
737 737
     for (uint8_t y = 0; y < MESH_NUM_Y_POINTS; y++) {
738 738
       for (uint8_t x = 0; x < MESH_NUM_X_POINTS; x++) {
@@ -783,14 +783,14 @@ void Config_PrintSettings(bool forReplay) {
783 783
       SERIAL_ECHOLNPGM("Material heatup parameters:");
784 784
       CONFIG_ECHO_START;
785 785
     }
786
-    SERIAL_ECHOPAIR("  M145 S0 H", (unsigned long)plaPreheatHotendTemp);
787
-    SERIAL_ECHOPAIR(" B", (unsigned long)plaPreheatHPBTemp);
788
-    SERIAL_ECHOPAIR(" F", (unsigned long)plaPreheatFanSpeed);
786
+    SERIAL_ECHOPAIR("  M145 S0 H", plaPreheatHotendTemp);
787
+    SERIAL_ECHOPAIR(" B", plaPreheatHPBTemp);
788
+    SERIAL_ECHOPAIR(" F", plaPreheatFanSpeed);
789 789
     SERIAL_EOL;
790 790
     CONFIG_ECHO_START;
791
-    SERIAL_ECHOPAIR("  M145 S1 H", (unsigned long)absPreheatHotendTemp);
792
-    SERIAL_ECHOPAIR(" B", (unsigned long)absPreheatHPBTemp);
793
-    SERIAL_ECHOPAIR(" F", (unsigned long)absPreheatFanSpeed);
791
+    SERIAL_ECHOPAIR("  M145 S1 H", absPreheatHotendTemp);
792
+    SERIAL_ECHOPAIR(" B", absPreheatHPBTemp);
793
+    SERIAL_ECHOPAIR(" F", absPreheatFanSpeed);
794 794
     SERIAL_EOL;
795 795
   #endif // ULTIPANEL
796 796
 
@@ -805,7 +805,7 @@ void Config_PrintSettings(bool forReplay) {
805 805
         if (forReplay) {
806 806
           for (uint8_t i = 0; i < EXTRUDERS; i++) {
807 807
             CONFIG_ECHO_START;
808
-            SERIAL_ECHOPAIR("  M301 E", (unsigned long)i);
808
+            SERIAL_ECHOPAIR("  M301 E", i);
809 809
             SERIAL_ECHOPAIR(" P", PID_PARAM(Kp, i));
810 810
             SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, i)));
811 811
             SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, i)));
@@ -848,7 +848,7 @@ void Config_PrintSettings(bool forReplay) {
848 848
       SERIAL_ECHOLNPGM("LCD Contrast:");
849 849
       CONFIG_ECHO_START;
850 850
     }
851
-    SERIAL_ECHOPAIR("  M250 C", (unsigned long)lcd_contrast);
851
+    SERIAL_ECHOPAIR("  M250 C", lcd_contrast);
852 852
     SERIAL_EOL;
853 853
   #endif
854 854
 
@@ -882,7 +882,7 @@ void Config_PrintSettings(bool forReplay) {
882 882
       SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries");
883 883
       CONFIG_ECHO_START;
884 884
     }
885
-    SERIAL_ECHOPAIR("  M209 S", (unsigned long)(autoretract_enabled ? 1 : 0));
885
+    SERIAL_ECHOPAIR("  M209 S", (autoretract_enabled ? 1 : 0));
886 886
     SERIAL_EOL;
887 887
 
888 888
   #endif // FWRETRACT

+ 3
- 4
Marlin/dogm_lcd_implementation.h View File

@@ -334,9 +334,8 @@ static void lcd_implementation_status_screen() {
334 334
     }
335 335
 
336 336
     u8g.setPrintPos(80,48);
337
-    if (print_job_start_ms != 0) {
338
-      uint16_t time = (((print_job_stop_ms > print_job_start_ms)
339
-                       ? print_job_stop_ms : millis()) - print_job_start_ms) / 60000;
337
+    uint16_t time = print_job_timer.duration() / 60;
338
+    if (time != 0) {
340 339
       lcd_print(itostr2(time/60));
341 340
       lcd_print(':');
342 341
       lcd_print(itostr2(time%60));
@@ -599,7 +598,7 @@ void lcd_implementation_drawedit(const char* pstr, const char* value) {
599 598
 
600 599
 #endif //SDSUPPORT
601 600
 
602
-#define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
601
+#define lcd_implementation_drawmenu_back(sel, row, pstr) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
603 602
 #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
604 603
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
605 604
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')

+ 18
- 3
Marlin/example_configurations/Felix/Configuration.h View File

@@ -328,8 +328,22 @@
328 328
 // Enable this option for Toshiba steppers
329 329
 //#define CONFIG_STEPPERS_TOSHIBA
330 330
 
331
+//===========================================================================
332
+//============================== Endstop Settings ===========================
333
+//===========================================================================
334
+
331 335
 // @section homing
332 336
 
337
+// Specify here all the endstop connectors that are connected to any endstop or probe.
338
+// Almost all printers will be using one per axis. Probes will use one or more of the
339
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
340
+#define USE_XMIN_PLUG
341
+#define USE_YMIN_PLUG
342
+#define USE_ZMIN_PLUG
343
+//#define USE_XMAX_PLUG
344
+//#define USE_YMAX_PLUG
345
+//#define USE_ZMAX_PLUG
346
+
333 347
 // coarse Endstop Settings
334 348
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
335 349
 
@@ -352,8 +366,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
352 366
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
353 367
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
354 368
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
355
-#define DISABLE_MAX_ENDSTOPS
356
-//#define DISABLE_MIN_ENDSTOPS
357 369
 
358 370
 //===========================================================================
359 371
 //============================= Z Probe Options =============================
@@ -692,9 +704,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
692 704
 // Host Keepalive
693 705
 //
694 706
 // By default Marlin will send a busy status message to the host
695
-// every 10 seconds when it can't accept commands.
707
+// every couple of seconds when it can't accept commands.
696 708
 //
697 709
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
710
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
711
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
712
+#endif
698 713
 
699 714
 //
700 715
 // M100 Free Memory Watcher

+ 18
- 3
Marlin/example_configurations/Felix/Configuration_DUAL.h View File

@@ -325,8 +325,22 @@
325 325
 // Enable this option for Toshiba steppers
326 326
 //#define CONFIG_STEPPERS_TOSHIBA
327 327
 
328
+//===========================================================================
329
+//============================== Endstop Settings ===========================
330
+//===========================================================================
331
+
328 332
 // @section homing
329 333
 
334
+// Specify here all the endstop connectors that are connected to any endstop or probe.
335
+// Almost all printers will be using one per axis. Probes will use one or more of the
336
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
337
+#define USE_XMIN_PLUG
338
+#define USE_YMIN_PLUG
339
+#define USE_ZMIN_PLUG
340
+//#define USE_XMAX_PLUG
341
+//#define USE_YMAX_PLUG
342
+//#define USE_ZMAX_PLUG
343
+
330 344
 // coarse Endstop Settings
331 345
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
332 346
 
@@ -349,8 +363,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
349 363
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
350 364
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
351 365
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
352
-#define DISABLE_MAX_ENDSTOPS
353
-//#define DISABLE_MIN_ENDSTOPS
354 366
 
355 367
 //===========================================================================
356 368
 //============================= Z Probe Options =============================
@@ -689,9 +701,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
689 701
 // Host Keepalive
690 702
 //
691 703
 // By default Marlin will send a busy status message to the host
692
-// every 10 seconds when it can't accept commands.
704
+// every couple of seconds when it can't accept commands.
693 705
 //
694 706
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
707
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
708
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
709
+#endif
695 710
 
696 711
 //
697 712
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/Felix/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/Hephestos/Configuration.h View File

@@ -338,8 +338,22 @@
338 338
 // Enable this option for Toshiba steppers
339 339
 //#define CONFIG_STEPPERS_TOSHIBA
340 340
 
341
+//===========================================================================
342
+//============================== Endstop Settings ===========================
343
+//===========================================================================
344
+
341 345
 // @section homing
342 346
 
347
+// Specify here all the endstop connectors that are connected to any endstop or probe.
348
+// Almost all printers will be using one per axis. Probes will use one or more of the
349
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
350
+#define USE_XMIN_PLUG
351
+#define USE_YMIN_PLUG
352
+#define USE_ZMIN_PLUG
353
+//#define USE_XMAX_PLUG
354
+//#define USE_YMAX_PLUG
355
+//#define USE_ZMAX_PLUG
356
+
343 357
 // coarse Endstop Settings
344 358
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
345 359
 
@@ -362,8 +376,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
362 376
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363 377
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
364 378
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
365
-#define DISABLE_MAX_ENDSTOPS
366
-//#define DISABLE_MIN_ENDSTOPS
367 379
 
368 380
 //===========================================================================
369 381
 //============================= Z Probe Options =============================
@@ -701,9 +713,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo
701 713
 // Host Keepalive
702 714
 //
703 715
 // By default Marlin will send a busy status message to the host
704
-// every 10 seconds when it can't accept commands.
716
+// every couple of seconds when it can't accept commands.
705 717
 //
706 718
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
719
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
720
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
721
+#endif
707 722
 
708 723
 //
709 724
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/Hephestos/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/Hephestos_2/Configuration.h View File

@@ -340,8 +340,22 @@
340 340
 // Enable this option for Toshiba steppers
341 341
 //#define CONFIG_STEPPERS_TOSHIBA
342 342
 
343
+//===========================================================================
344
+//============================== Endstop Settings ===========================
345
+//===========================================================================
346
+
343 347
 // @section homing
344 348
 
349
+// Specify here all the endstop connectors that are connected to any endstop or probe.
350
+// Almost all printers will be using one per axis. Probes will use one or more of the
351
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
352
+#define USE_XMIN_PLUG
353
+#define USE_YMIN_PLUG
354
+#define USE_ZMIN_PLUG
355
+//#define USE_XMAX_PLUG
356
+//#define USE_YMAX_PLUG
357
+//#define USE_ZMAX_PLUG
358
+
345 359
 // coarse Endstop Settings
346 360
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
347 361
 
@@ -364,8 +378,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true;  // set to true to invert the logic o
364 378
 const bool Y_MAX_ENDSTOP_INVERTING = true;  // set to true to invert the logic of the endstop.
365 379
 const bool Z_MAX_ENDSTOP_INVERTING = true;  // set to true to invert the logic of the endstop.
366 380
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
367
-#define DISABLE_MAX_ENDSTOPS
368
-//#define DISABLE_MIN_ENDSTOPS
369 381
 
370 382
 //===========================================================================
371 383
 //============================= Z Probe Options =============================
@@ -703,9 +715,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
703 715
 // Host Keepalive
704 716
 //
705 717
 // By default Marlin will send a busy status message to the host
706
-// every 10 seconds when it can't accept commands.
718
+// every couple of seconds when it can't accept commands.
707 719
 //
708 720
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
721
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
722
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
723
+#endif
709 724
 
710 725
 //
711 726
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/Hephestos_2/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/K8200/Configuration.h View File

@@ -363,8 +363,22 @@
363 363
 // Enable this option for Toshiba steppers
364 364
 //#define CONFIG_STEPPERS_TOSHIBA
365 365
 
366
+//===========================================================================
367
+//============================== Endstop Settings ===========================
368
+//===========================================================================
369
+
366 370
 // @section homing
367 371
 
372
+// Specify here all the endstop connectors that are connected to any endstop or probe.
373
+// Almost all printers will be using one per axis. Probes will use one or more of the
374
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
375
+#define USE_XMIN_PLUG
376
+#define USE_YMIN_PLUG
377
+#define USE_ZMIN_PLUG
378
+//#define USE_XMAX_PLUG
379
+//#define USE_YMAX_PLUG
380
+//#define USE_ZMAX_PLUG
381
+
368 382
 // coarse Endstop Settings
369 383
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
370 384
 
@@ -387,8 +401,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
387 401
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
388 402
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
389 403
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
390
-#define DISABLE_MAX_ENDSTOPS
391
-//#define DISABLE_MIN_ENDSTOPS
392 404
 
393 405
 //===========================================================================
394 406
 //============================= Z Probe Options =============================
@@ -726,9 +738,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
726 738
 // Host Keepalive
727 739
 //
728 740
 // By default Marlin will send a busy status message to the host
729
-// every 10 seconds when it can't accept commands.
741
+// every couple of seconds when it can't accept commands.
730 742
 //
731 743
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
744
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
745
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
746
+#endif
732 747
 
733 748
 //
734 749
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/K8200/Configuration_adv.h View File

@@ -207,9 +207,7 @@
207 207
   //#define Z_DUAL_ENDSTOPS
208 208
 
209 209
   #if ENABLED(Z_DUAL_ENDSTOPS)
210
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
211
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
212
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
210
+    #define Z2_USE_ENDSTOP _XMAX_
213 211
   #endif
214 212
 
215 213
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -661,6 +659,38 @@ const unsigned int dropsegments = 2; //everything with less than this number of
661 659
 
662 660
 #endif
663 661
 
662
+/**
663
+ * TWI/I2C BUS
664
+ *
665
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
666
+ * machines. Enabling this will allow you to send and receive I2C data from slave
667
+ * devices on the bus.
668
+ *
669
+ * ; Example #1
670
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
671
+ * ; It uses multiple M155 commands with one B<base 10> arg
672
+ * M155 A63  ; Target slave address
673
+ * M155 B77  ; M
674
+ * M155 B97  ; a
675
+ * M155 B114 ; r
676
+ * M155 B108 ; l
677
+ * M155 B105 ; i
678
+ * M155 B110 ; n
679
+ * M155 S1   ; Send the current buffer
680
+ *
681
+ * ; Example #2
682
+ * ; Request 6 bytes from slave device with address 0x63
683
+ * M156 A63 B5
684
+ *
685
+ * ; Example #3
686
+ * ; Example serial output of a M156 request
687
+ * echo:i2c-reply: from:63 bytes:5 data:hello
688
+ */
689
+
690
+// @section i2cbus
691
+
692
+//#define EXPERIMENTAL_I2CBUS
693
+
664 694
 #include "Conditionals.h"
665 695
 #include "SanityCheck.h"
666 696
 

+ 18
- 3
Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h View File

@@ -346,8 +346,22 @@
346 346
 // Enable this option for Toshiba steppers
347 347
 //#define CONFIG_STEPPERS_TOSHIBA
348 348
 
349
+//===========================================================================
350
+//============================== Endstop Settings ===========================
351
+//===========================================================================
352
+
349 353
 // @section homing
350 354
 
355
+// Specify here all the endstop connectors that are connected to any endstop or probe.
356
+// Almost all printers will be using one per axis. Probes will use one or more of the
357
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
358
+#define USE_XMIN_PLUG
359
+#define USE_YMIN_PLUG
360
+#define USE_ZMIN_PLUG
361
+//#define USE_XMAX_PLUG
362
+//#define USE_YMAX_PLUG
363
+//#define USE_ZMAX_PLUG
364
+
351 365
 // coarse Endstop Settings
352 366
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
353 367
 
@@ -370,8 +384,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
370 384
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
371 385
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
372 386
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
373
-//#define DISABLE_MAX_ENDSTOPS
374
-//#define DISABLE_MIN_ENDSTOPS
375 387
 
376 388
 //===========================================================================
377 389
 //============================= Z Probe Options =============================
@@ -709,9 +721,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
709 721
 // Host Keepalive
710 722
 //
711 723
 // By default Marlin will send a busy status message to the host
712
-// every 10 seconds when it can't accept commands.
724
+// every couple of seconds when it can't accept commands.
713 725
 //
714 726
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
727
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
728
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
729
+#endif
715 730
 
716 731
 //
717 732
 // M100 Free Memory Watcher

+ 18
- 3
Marlin/example_configurations/RigidBot/Configuration.h View File

@@ -340,8 +340,22 @@
340 340
 // Enable this option for Toshiba steppers
341 341
 //#define CONFIG_STEPPERS_TOSHIBA
342 342
 
343
+//===========================================================================
344
+//============================== Endstop Settings ===========================
345
+//===========================================================================
346
+
343 347
 // @section homing
344 348
 
349
+// Specify here all the endstop connectors that are connected to any endstop or probe.
350
+// Almost all printers will be using one per axis. Probes will use one or more of the
351
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
352
+#define USE_XMIN_PLUG
353
+#define USE_YMIN_PLUG
354
+#define USE_ZMIN_PLUG
355
+//#define USE_XMAX_PLUG
356
+//#define USE_YMAX_PLUG
357
+//#define USE_ZMAX_PLUG
358
+
345 359
 // coarse Endstop Settings
346 360
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
347 361
 
@@ -364,8 +378,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
364 378
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
365 379
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
366 380
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
367
-//#define DISABLE_MAX_ENDSTOPS
368
-//#define DISABLE_MIN_ENDSTOPS
369 381
 
370 382
 //===========================================================================
371 383
 //============================= Z Probe Options =============================
@@ -704,9 +716,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
704 716
 // Host Keepalive
705 717
 //
706 718
 // By default Marlin will send a busy status message to the host
707
-// every 10 seconds when it can't accept commands.
719
+// every couple of seconds when it can't accept commands.
708 720
 //
709 721
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
722
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
723
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
724
+#endif
710 725
 
711 726
 //
712 727
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/RigidBot/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/SCARA/Configuration.h View File

@@ -354,8 +354,22 @@
354 354
 // Enable this option for Toshiba steppers
355 355
 //#define CONFIG_STEPPERS_TOSHIBA
356 356
 
357
+//===========================================================================
358
+//============================== Endstop Settings ===========================
359
+//===========================================================================
360
+
357 361
 // @section homing
358 362
 
363
+// Specify here all the endstop connectors that are connected to any endstop or probe.
364
+// Almost all printers will be using one per axis. Probes will use one or more of the
365
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
366
+#define USE_XMIN_PLUG
367
+#define USE_YMIN_PLUG
368
+//#define USE_ZMIN_PLUG
369
+//#define USE_XMAX_PLUG
370
+//#define USE_YMAX_PLUG
371
+#define USE_ZMAX_PLUG
372
+
359 373
 // coarse Endstop Settings
360 374
 //#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
361 375
 
@@ -378,8 +392,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
378 392
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
379 393
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
380 394
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
381
-//#define DISABLE_MAX_ENDSTOPS
382
-//#define DISABLE_MIN_ENDSTOPS
383 395
 
384 396
 //===========================================================================
385 397
 //============================= Z Probe Options =============================
@@ -717,9 +729,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
717 729
 // Host Keepalive
718 730
 //
719 731
 // By default Marlin will send a busy status message to the host
720
-// every 10 seconds when it can't accept commands.
732
+// every couple of seconds when it can't accept commands.
721 733
 //
722 734
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
735
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
736
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
737
+#endif
723 738
 
724 739
 //
725 740
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/SCARA/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/TAZ4/Configuration.h View File

@@ -367,8 +367,22 @@
367 367
 // Enable this option for Toshiba steppers
368 368
 //#define CONFIG_STEPPERS_TOSHIBA
369 369
 
370
+//===========================================================================
371
+//============================== Endstop Settings ===========================
372
+//===========================================================================
373
+
370 374
 // @section homing
371 375
 
376
+// Specify here all the endstop connectors that are connected to any endstop or probe.
377
+// Almost all printers will be using one per axis. Probes will use one or more of the
378
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
379
+#define USE_XMIN_PLUG
380
+#define USE_YMIN_PLUG
381
+#define USE_ZMIN_PLUG
382
+//#define USE_XMAX_PLUG
383
+//#define USE_YMAX_PLUG
384
+//#define USE_ZMAX_PLUG
385
+
372 386
 // coarse Endstop Settings
373 387
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
374 388
 
@@ -391,8 +405,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
391 405
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
392 406
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
393 407
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
394
-#define DISABLE_MAX_ENDSTOPS
395
-//#define DISABLE_MIN_ENDSTOPS
396 408
 
397 409
 //===========================================================================
398 410
 //============================= Z Probe Options =============================
@@ -730,9 +742,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
730 742
 // Host Keepalive
731 743
 //
732 744
 // By default Marlin will send a busy status message to the host
733
-// every 10 seconds when it can't accept commands.
745
+// every couple of seconds when it can't accept commands.
734 746
 //
735 747
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
748
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
749
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
750
+#endif
736 751
 
737 752
 //
738 753
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/TAZ4/Configuration_adv.h View File

@@ -209,9 +209,7 @@
209 209
   //#define Z_DUAL_ENDSTOPS
210 210
 
211 211
   #if ENABLED(Z_DUAL_ENDSTOPS)
212
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
213
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
214
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
212
+    #define Z2_USE_ENDSTOP _XMAX_
215 213
   #endif
216 214
 
217 215
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -663,6 +661,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
663 661
 
664 662
 #endif
665 663
 
664
+/**
665
+ * TWI/I2C BUS
666
+ *
667
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
668
+ * machines. Enabling this will allow you to send and receive I2C data from slave
669
+ * devices on the bus.
670
+ *
671
+ * ; Example #1
672
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
673
+ * ; It uses multiple M155 commands with one B<base 10> arg
674
+ * M155 A63  ; Target slave address
675
+ * M155 B77  ; M
676
+ * M155 B97  ; a
677
+ * M155 B114 ; r
678
+ * M155 B108 ; l
679
+ * M155 B105 ; i
680
+ * M155 B110 ; n
681
+ * M155 S1   ; Send the current buffer
682
+ *
683
+ * ; Example #2
684
+ * ; Request 6 bytes from slave device with address 0x63
685
+ * M156 A63 B5
686
+ *
687
+ * ; Example #3
688
+ * ; Example serial output of a M156 request
689
+ * echo:i2c-reply: from:63 bytes:5 data:hello
690
+ */
691
+
692
+// @section i2cbus
693
+
694
+//#define EXPERIMENTAL_I2CBUS
695
+
666 696
 #include "Conditionals.h"
667 697
 #include "SanityCheck.h"
668 698
 

+ 18
- 3
Marlin/example_configurations/WITBOX/Configuration.h View File

@@ -338,8 +338,22 @@
338 338
 // Enable this option for Toshiba steppers
339 339
 //#define CONFIG_STEPPERS_TOSHIBA
340 340
 
341
+//===========================================================================
342
+//============================== Endstop Settings ===========================
343
+//===========================================================================
344
+
341 345
 // @section homing
342 346
 
347
+// Specify here all the endstop connectors that are connected to any endstop or probe.
348
+// Almost all printers will be using one per axis. Probes will use one or more of the
349
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
350
+#define USE_XMIN_PLUG
351
+#define USE_YMIN_PLUG
352
+#define USE_ZMIN_PLUG
353
+//#define USE_XMAX_PLUG
354
+//#define USE_YMAX_PLUG
355
+//#define USE_ZMAX_PLUG
356
+
343 357
 // coarse Endstop Settings
344 358
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
345 359
 
@@ -362,8 +376,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
362 376
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363 377
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
364 378
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
365
-//#define DISABLE_MAX_ENDSTOPS
366
-//#define DISABLE_MIN_ENDSTOPS
367 379
 
368 380
 //===========================================================================
369 381
 //============================= Z Probe Options =============================
@@ -701,9 +713,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo
701 713
 // Host Keepalive
702 714
 //
703 715
 // By default Marlin will send a busy status message to the host
704
-// every 10 seconds when it can't accept commands.
716
+// every couple of seconds when it can't accept commands.
705 717
 //
706 718
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
719
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
720
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
721
+#endif
707 722
 
708 723
 //
709 724
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/WITBOX/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/adafruit/ST7565/Configuration.h View File

@@ -346,8 +346,22 @@
346 346
 // Enable this option for Toshiba steppers
347 347
 //#define CONFIG_STEPPERS_TOSHIBA
348 348
 
349
+//===========================================================================
350
+//============================== Endstop Settings ===========================
351
+//===========================================================================
352
+
349 353
 // @section homing
350 354
 
355
+// Specify here all the endstop connectors that are connected to any endstop or probe.
356
+// Almost all printers will be using one per axis. Probes will use one or more of the
357
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
358
+#define USE_XMIN_PLUG
359
+#define USE_YMIN_PLUG
360
+#define USE_ZMIN_PLUG
361
+//#define USE_XMAX_PLUG
362
+//#define USE_YMAX_PLUG
363
+//#define USE_ZMAX_PLUG
364
+
351 365
 // coarse Endstop Settings
352 366
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
353 367
 
@@ -370,8 +384,6 @@ const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
370 384
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
371 385
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
372 386
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
373
-//#define DISABLE_MAX_ENDSTOPS
374
-//#define DISABLE_MIN_ENDSTOPS
375 387
 
376 388
 //===========================================================================
377 389
 //============================= Z Probe Options =============================
@@ -709,9 +721,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
709 721
 // Host Keepalive
710 722
 //
711 723
 // By default Marlin will send a busy status message to the host
712
-// every 10 seconds when it can't accept commands.
724
+// every couple of seconds when it can't accept commands.
713 725
 //
714 726
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
727
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
728
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
729
+#endif
715 730
 
716 731
 //
717 732
 // M100 Free Memory Watcher

+ 18
- 3
Marlin/example_configurations/delta/biv2.5/Configuration.h View File

@@ -381,8 +381,22 @@
381 381
 // Enable this option for Toshiba steppers
382 382
 //#define CONFIG_STEPPERS_TOSHIBA
383 383
 
384
+//===========================================================================
385
+//============================== Endstop Settings ===========================
386
+//===========================================================================
387
+
384 388
 // @section homing
385 389
 
390
+// Specify here all the endstop connectors that are connected to any endstop or probe.
391
+// Almost all printers will be using one per axis. Probes will use one or more of the
392
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
393
+//#define USE_XMIN_PLUG
394
+//#define USE_YMIN_PLUG
395
+//#define USE_ZMIN_PLUG
396
+#define USE_XMAX_PLUG
397
+#define USE_YMAX_PLUG
398
+#define USE_ZMAX_PLUG
399
+
386 400
 // coarse Endstop Settings
387 401
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
388 402
 
@@ -405,8 +419,6 @@ const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
405 419
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
406 420
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
407 421
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
408
-//#define DISABLE_MAX_ENDSTOPS
409
-#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
410 422
 
411 423
 //===========================================================================
412 424
 //============================= Z Probe Options =============================
@@ -831,9 +843,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo
831 843
 // Host Keepalive
832 844
 //
833 845
 // By default Marlin will send a busy status message to the host
834
-// every 10 seconds when it can't accept commands.
846
+// every couple of seconds when it can't accept commands.
835 847
 //
836 848
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
849
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
850
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
851
+#endif
837 852
 
838 853
 //
839 854
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/biv2.5/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -657,6 +655,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
657 655
 
658 656
 #endif
659 657
 
658
+/**
659
+ * TWI/I2C BUS
660
+ *
661
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
662
+ * machines. Enabling this will allow you to send and receive I2C data from slave
663
+ * devices on the bus.
664
+ *
665
+ * ; Example #1
666
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
667
+ * ; It uses multiple M155 commands with one B<base 10> arg
668
+ * M155 A63  ; Target slave address
669
+ * M155 B77  ; M
670
+ * M155 B97  ; a
671
+ * M155 B114 ; r
672
+ * M155 B108 ; l
673
+ * M155 B105 ; i
674
+ * M155 B110 ; n
675
+ * M155 S1   ; Send the current buffer
676
+ *
677
+ * ; Example #2
678
+ * ; Request 6 bytes from slave device with address 0x63
679
+ * M156 A63 B5
680
+ *
681
+ * ; Example #3
682
+ * ; Example serial output of a M156 request
683
+ * echo:i2c-reply: from:63 bytes:5 data:hello
684
+ */
685
+
686
+// @section i2cbus
687
+
688
+//#define EXPERIMENTAL_I2CBUS
689
+
660 690
 #include "Conditionals.h"
661 691
 #include "SanityCheck.h"
662 692
 

+ 18
- 3
Marlin/example_configurations/delta/generic/Configuration.h View File

@@ -381,8 +381,22 @@
381 381
 // Enable this option for Toshiba steppers
382 382
 //#define CONFIG_STEPPERS_TOSHIBA
383 383
 
384
+//===========================================================================
385
+//============================== Endstop Settings ===========================
386
+//===========================================================================
387
+
384 388
 // @section homing
385 389
 
390
+// Specify here all the endstop connectors that are connected to any endstop or probe.
391
+// Almost all printers will be using one per axis. Probes will use one or more of the
392
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
393
+//#define USE_XMIN_PLUG
394
+//#define USE_YMIN_PLUG
395
+#define USE_ZMIN_PLUG // a Z probe
396
+#define USE_XMAX_PLUG
397
+#define USE_YMAX_PLUG
398
+#define USE_ZMAX_PLUG
399
+
386 400
 // coarse Endstop Settings
387 401
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
388 402
 
@@ -405,8 +419,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
405 419
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
406 420
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
407 421
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
408
-//#define DISABLE_MAX_ENDSTOPS
409
-#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
410 422
 
411 423
 //===========================================================================
412 424
 //============================= Z Probe Options =============================
@@ -831,9 +843,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo
831 843
 // Host Keepalive
832 844
 //
833 845
 // By default Marlin will send a busy status message to the host
834
-// every 10 seconds when it can't accept commands.
846
+// every couple of seconds when it can't accept commands.
835 847
 //
836 848
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
849
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
850
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
851
+#endif
837 852
 
838 853
 //
839 854
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/generic/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -657,6 +655,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
657 655
 
658 656
 #endif
659 657
 
658
+/**
659
+ * TWI/I2C BUS
660
+ *
661
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
662
+ * machines. Enabling this will allow you to send and receive I2C data from slave
663
+ * devices on the bus.
664
+ *
665
+ * ; Example #1
666
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
667
+ * ; It uses multiple M155 commands with one B<base 10> arg
668
+ * M155 A63  ; Target slave address
669
+ * M155 B77  ; M
670
+ * M155 B97  ; a
671
+ * M155 B114 ; r
672
+ * M155 B108 ; l
673
+ * M155 B105 ; i
674
+ * M155 B110 ; n
675
+ * M155 S1   ; Send the current buffer
676
+ *
677
+ * ; Example #2
678
+ * ; Request 6 bytes from slave device with address 0x63
679
+ * M156 A63 B5
680
+ *
681
+ * ; Example #3
682
+ * ; Example serial output of a M156 request
683
+ * echo:i2c-reply: from:63 bytes:5 data:hello
684
+ */
685
+
686
+// @section i2cbus
687
+
688
+//#define EXPERIMENTAL_I2CBUS
689
+
660 690
 #include "Conditionals.h"
661 691
 #include "SanityCheck.h"
662 692
 

+ 18
- 3
Marlin/example_configurations/delta/kossel_mini/Configuration.h View File

@@ -381,8 +381,22 @@
381 381
 // Enable this option for Toshiba steppers
382 382
 //#define CONFIG_STEPPERS_TOSHIBA
383 383
 
384
+//===========================================================================
385
+//============================== Endstop Settings ===========================
386
+//===========================================================================
387
+
384 388
 // @section homing
385 389
 
390
+// Specify here all the endstop connectors that are connected to any endstop or probe.
391
+// Almost all printers will be using one per axis. Probes will use one or more of the
392
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
393
+//#define USE_XMIN_PLUG
394
+//#define USE_YMIN_PLUG
395
+//#define USE_ZMIN_PLUG
396
+#define USE_XMAX_PLUG
397
+#define USE_YMAX_PLUG
398
+#define USE_ZMAX_PLUG
399
+
386 400
 // coarse Endstop Settings
387 401
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
388 402
 
@@ -405,8 +419,6 @@ const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
405 419
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
406 420
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
407 421
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
408
-//#define DISABLE_MAX_ENDSTOPS
409
-//#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
410 422
 
411 423
 //===========================================================================
412 424
 //============================= Z Probe Options =============================
@@ -835,9 +847,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
835 847
 // Host Keepalive
836 848
 //
837 849
 // By default Marlin will send a busy status message to the host
838
-// every 10 seconds when it can't accept commands.
850
+// every couple of seconds when it can't accept commands.
839 851
 //
840 852
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
853
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
854
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
855
+#endif
841 856
 
842 857
 //
843 858
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -656,6 +654,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
656 654
 
657 655
 #endif
658 656
 
657
+/**
658
+ * TWI/I2C BUS
659
+ *
660
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
661
+ * machines. Enabling this will allow you to send and receive I2C data from slave
662
+ * devices on the bus.
663
+ *
664
+ * ; Example #1
665
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
666
+ * ; It uses multiple M155 commands with one B<base 10> arg
667
+ * M155 A63  ; Target slave address
668
+ * M155 B77  ; M
669
+ * M155 B97  ; a
670
+ * M155 B114 ; r
671
+ * M155 B108 ; l
672
+ * M155 B105 ; i
673
+ * M155 B110 ; n
674
+ * M155 S1   ; Send the current buffer
675
+ *
676
+ * ; Example #2
677
+ * ; Request 6 bytes from slave device with address 0x63
678
+ * M156 A63 B5
679
+ *
680
+ * ; Example #3
681
+ * ; Example serial output of a M156 request
682
+ * echo:i2c-reply: from:63 bytes:5 data:hello
683
+ */
684
+
685
+// @section i2cbus
686
+
687
+//#define EXPERIMENTAL_I2CBUS
688
+
659 689
 #include "Conditionals.h"
660 690
 #include "SanityCheck.h"
661 691
 

+ 18
- 3
Marlin/example_configurations/delta/kossel_pro/Configuration.h View File

@@ -370,8 +370,22 @@
370 370
 // Enable this option for Toshiba steppers
371 371
 //#define CONFIG_STEPPERS_TOSHIBA
372 372
 
373
+//===========================================================================
374
+//============================== Endstop Settings ===========================
375
+//===========================================================================
376
+
373 377
 // @section homing
374 378
 
379
+// Specify here all the endstop connectors that are connected to any endstop or probe.
380
+// Almost all printers will be using one per axis. Probes will use one or more of the
381
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
382
+//#define USE_XMIN_PLUG
383
+//#define USE_YMIN_PLUG
384
+#define USE_ZMIN_PLUG // a Z probe
385
+#define USE_XMAX_PLUG
386
+#define USE_YMAX_PLUG
387
+#define USE_ZMAX_PLUG
388
+
375 389
 // coarse Endstop Settings
376 390
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
377 391
 
@@ -394,8 +408,6 @@ const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
394 408
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
395 409
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
396 410
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
397
-//#define DISABLE_MAX_ENDSTOPS
398
-//#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
399 411
 
400 412
 //===========================================================================
401 413
 //============================= Z Probe Options =============================
@@ -828,9 +840,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
828 840
 // Host Keepalive
829 841
 //
830 842
 // By default Marlin will send a busy status message to the host
831
-// every 10 seconds when it can't accept commands.
843
+// every couple of seconds when it can't accept commands.
832 844
 //
833 845
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
846
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
847
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
848
+#endif
834 849
 
835 850
 //
836 851
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h View File

@@ -206,9 +206,7 @@
206 206
   //#define Z_DUAL_ENDSTOPS
207 207
 
208 208
   #if ENABLED(Z_DUAL_ENDSTOPS)
209
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
210
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
211
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
209
+    #define Z2_USE_ENDSTOP _XMAX_
212 210
   #endif
213 211
 
214 212
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -661,6 +659,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
661 659
 
662 660
 #endif
663 661
 
662
+/**
663
+ * TWI/I2C BUS
664
+ *
665
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
666
+ * machines. Enabling this will allow you to send and receive I2C data from slave
667
+ * devices on the bus.
668
+ *
669
+ * ; Example #1
670
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
671
+ * ; It uses multiple M155 commands with one B<base 10> arg
672
+ * M155 A63  ; Target slave address
673
+ * M155 B77  ; M
674
+ * M155 B97  ; a
675
+ * M155 B114 ; r
676
+ * M155 B108 ; l
677
+ * M155 B105 ; i
678
+ * M155 B110 ; n
679
+ * M155 S1   ; Send the current buffer
680
+ *
681
+ * ; Example #2
682
+ * ; Request 6 bytes from slave device with address 0x63
683
+ * M156 A63 B5
684
+ *
685
+ * ; Example #3
686
+ * ; Example serial output of a M156 request
687
+ * echo:i2c-reply: from:63 bytes:5 data:hello
688
+ */
689
+
690
+// @section i2cbus
691
+
692
+//#define EXPERIMENTAL_I2CBUS
693
+
664 694
 #include "Conditionals.h"
665 695
 #include "SanityCheck.h"
666 696
 

+ 18
- 3
Marlin/example_configurations/delta/kossel_xl/Configuration.h View File

@@ -374,8 +374,22 @@
374 374
 // Enable this option for Toshiba steppers
375 375
 //#define CONFIG_STEPPERS_TOSHIBA
376 376
 
377
+//===========================================================================
378
+//============================== Endstop Settings ===========================
379
+//===========================================================================
380
+
377 381
 // @section homing
378 382
 
383
+// Specify here all the endstop connectors that are connected to any endstop or probe.
384
+// Almost all printers will be using one per axis. Probes will use one or more of the
385
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
386
+//#define USE_XMIN_PLUG
387
+//#define USE_YMIN_PLUG
388
+#define USE_ZMIN_PLUG // a Z probe
389
+#define USE_XMAX_PLUG
390
+#define USE_YMAX_PLUG
391
+#define USE_ZMAX_PLUG
392
+
379 393
 // coarse Endstop Settings
380 394
 //#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
381 395
 
@@ -398,8 +412,6 @@ const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
398 412
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
399 413
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
400 414
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
401
-//#define DISABLE_MAX_ENDSTOPS
402
-//#define DISABLE_MIN_ENDSTOPS
403 415
 
404 416
 //===========================================================================
405 417
 //============================= Z Probe Options =============================
@@ -745,9 +757,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
745 757
 // Host Keepalive
746 758
 //
747 759
 // By default Marlin will send a busy status message to the host
748
-// every 10 seconds when it can't accept commands.
760
+// every couple of seconds when it can't accept commands.
749 761
 //
750 762
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
763
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
764
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
765
+#endif
751 766
 
752 767
 //
753 768
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/makibox/Configuration.h View File

@@ -349,8 +349,22 @@
349 349
 // Enable this option for Toshiba steppers
350 350
 //#define CONFIG_STEPPERS_TOSHIBA
351 351
 
352
+//===========================================================================
353
+//============================== Endstop Settings ===========================
354
+//===========================================================================
355
+
352 356
 // @section homing
353 357
 
358
+// Specify here all the endstop connectors that are connected to any endstop or probe.
359
+// Almost all printers will be using one per axis. Probes will use one or more of the
360
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
361
+#define USE_XMIN_PLUG
362
+#define USE_YMIN_PLUG
363
+#define USE_ZMIN_PLUG
364
+//#define USE_XMAX_PLUG
365
+//#define USE_YMAX_PLUG
366
+//#define USE_ZMAX_PLUG
367
+
354 368
 // coarse Endstop Settings
355 369
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
356 370
 
@@ -373,8 +387,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
373 387
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
374 388
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
375 389
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
376
-//#define DISABLE_MAX_ENDSTOPS
377
-//#define DISABLE_MIN_ENDSTOPS
378 390
 
379 391
 //===========================================================================
380 392
 //============================= Z Probe Options =============================
@@ -712,9 +724,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the l
712 724
 // Host Keepalive
713 725
 //
714 726
 // By default Marlin will send a busy status message to the host
715
-// every 10 seconds when it can't accept commands.
727
+// every couple of seconds when it can't accept commands.
716 728
 //
717 729
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
730
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
731
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
732
+#endif
718 733
 
719 734
 //
720 735
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/makibox/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 18
- 3
Marlin/example_configurations/tvrrug/Round2/Configuration.h View File

@@ -336,8 +336,22 @@
336 336
 // Enable this option for Toshiba steppers
337 337
 #define CONFIG_STEPPERS_TOSHIBA
338 338
 
339
+//===========================================================================
340
+//============================== Endstop Settings ===========================
341
+//===========================================================================
342
+
339 343
 // @section homing
340 344
 
345
+// Specify here all the endstop connectors that are connected to any endstop or probe.
346
+// Almost all printers will be using one per axis. Probes will use one or more of the
347
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
348
+#define USE_XMIN_PLUG
349
+#define USE_YMIN_PLUG
350
+#define USE_ZMIN_PLUG
351
+//#define USE_XMAX_PLUG
352
+//#define USE_YMAX_PLUG
353
+//#define USE_ZMAX_PLUG
354
+
341 355
 // coarse Endstop Settings
342 356
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
343 357
 
@@ -360,8 +374,6 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
360 374
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
361 375
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
362 376
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363
-//#define DISABLE_MAX_ENDSTOPS
364
-//#define DISABLE_MIN_ENDSTOPS
365 377
 
366 378
 //===========================================================================
367 379
 //============================= Z Probe Options =============================
@@ -703,9 +715,12 @@ const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the lo
703 715
 // Host Keepalive
704 716
 //
705 717
 // By default Marlin will send a busy status message to the host
706
-// every 10 seconds when it can't accept commands.
718
+// every couple of seconds when it can't accept commands.
707 719
 //
708 720
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
721
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
722
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
723
+#endif
709 724
 
710 725
 //
711 726
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h View File

@@ -201,9 +201,7 @@
201 201
   //#define Z_DUAL_ENDSTOPS
202 202
 
203 203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207 205
   #endif
208 206
 
209 207
 #endif // Z_DUAL_STEPPER_DRIVERS
@@ -655,6 +653,38 @@ const unsigned int dropsegments = 5; //everything with less than this number of
655 653
 
656 654
 #endif
657 655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658 688
 #include "Conditionals.h"
659 689
 #include "SanityCheck.h"
660 690
 

+ 0
- 3
Marlin/fonts/README.fonts View File

@@ -21,6 +21,3 @@ For the second half of the font we now support up to 11x11 pixel.
21 21
     #else // fall-back
22 22
  * Add your font to the list of permitted fonts in 'language_en.h'
23 23
     ... || ENABLED(DISPLAY_CHARSET_YOUR_NEW_FONT) ... )
24
-
25
-
26
-Especially the Kana font should be revised by someone who knows what he/she does. I am only a west-European with very little knowledge about this script.

+ 7
- 1
Marlin/language.h View File

@@ -82,6 +82,12 @@
82 82
 #endif
83 83
 
84 84
 #ifndef DEFAULT_SOURCE_URL
85
+  /**
86
+   * The SOURCE_CODE_URL is the location where users will find the Marlin Source
87
+   * Code which is installed on the device. In most cases —unless the manufacturer
88
+   * has a distinct Github fork— the Source Code URL should just be the main
89
+   * Marlin repository.
90
+   */
85 91
   #define DEFAULT_SOURCE_URL "https://github.com/MarlinFirmware/Marlin"
86 92
 #endif
87 93
 
@@ -225,7 +231,7 @@
225 231
 #define MSG_T_MINTEMP                       "MINTEMP triggered"
226 232
 
227 233
 // Debug
228
-#define MSG_DEBUG_PREFIX                    "DEBUG: "
234
+#define MSG_DEBUG_PREFIX                    "DEBUG:"
229 235
 #define MSG_DEBUG_OFF                       "off"
230 236
 #define MSG_DEBUG_ECHO                      "ECHO"
231 237
 #define MSG_DEBUG_INFO                      "INFO"

+ 1
- 0
Marlin/language_an.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Establir zero"

+ 1
- 0
Marlin/language_bg.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Задай Начало"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Изходна точка"

+ 1
- 0
Marlin/language_ca.h View File

@@ -46,6 +46,7 @@
46 46
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
47 47
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
48 48
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
49
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
49 50
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
50 51
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
51 52
 #define MSG_SET_ORIGIN                      "Establir origen"

+ 1
- 0
Marlin/language_cn.h View File

@@ -43,6 +43,7 @@
43 43
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
44 44
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
45 45
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
46
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
46 47
 #define MSG_SET_HOME_OFFSETS                "\xbe\xbf\xbb\xbc\xbd\xc0\xc1"
47 48
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
48 49
 #define MSG_SET_ORIGIN                      "\xbe\xbf\xbc\xbd"

+ 5
- 3
Marlin/language_cz.h View File

@@ -47,10 +47,11 @@
47 47
 #define MSG_DISABLE_STEPPERS                "Uvolnit motory"
48 48
 #define MSG_AUTO_HOME                       "Domovska pozice"
49 49
 #define MSG_LEVEL_BED_HOMING                "Mereni podlozky"
50
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
51
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
50
+#define MSG_LEVEL_BED_WAITING               "Kliknutim spustte"
51
+#define MSG_LEVEL_BED_DONE                  "Mereni hotovo!"
52
+#define MSG_LEVEL_BED_CANCEL                "Storno"
52 53
 #define MSG_SET_HOME_OFFSETS                "Nastavit ofsety"
53
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
54
+#define MSG_HOME_OFFSETS_APPLIED            "Ofsety nastaveny"
54 55
 #define MSG_SET_ORIGIN                      "Nastavit pocatek"
55 56
 #define MSG_PREHEAT_PLA                     "Zahrat PLA"
56 57
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
@@ -77,6 +78,7 @@
77 78
 #define MSG_MOVE_1MM                        "Posunout o 1mm"
78 79
 #define MSG_MOVE_10MM                       "Posunout o 10mm"
79 80
 #define MSG_SPEED                           "Rychlost"
81
+#define MSG_BED_Z                           "Vyska podl."
80 82
 #define MSG_NOZZLE                          "Tryska"
81 83
 #define MSG_BED                             "Podlozka"
82 84
 #define MSG_FAN_SPEED                       "Rychlost vent."

+ 11
- 10
Marlin/language_da.h View File

@@ -44,10 +44,11 @@
44 44
 #define MSG_COOLDOWN                        "Afkøl"
45 45
 #define MSG_DISABLE_STEPPERS                "Slå stepper fra"
46 46
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
47
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
48
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
49
-#define MSG_SET_HOME_OFFSETS                "Sæt home offsets"
50
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
47
+#define MSG_LEVEL_BED_WAITING               "Tryk for at starte"
48
+#define MSG_LEVEL_BED_DONE                  "Justering er færdig!"
49
+#define MSG_LEVEL_BED_CANCEL                "Annuller"
50
+#define MSG_SET_HOME_OFFSETS                "Sæt forskyding til udgangsposition"
51
+#define MSG_HOME_OFFSETS_APPLIED            "Forskydninger er tilføjet"
51 52
 #define MSG_SET_ORIGIN                      "Sæt origin"
52 53
 #define MSG_SWITCH_PS_ON                    "Slå strøm til"
53 54
 #define MSG_SWITCH_PS_OFF                   "Slå strøm fra"
@@ -83,8 +84,8 @@
83 84
 #define MSG_MAX                             " \002 Max"
84 85
 #define MSG_FACTOR                          " \002 Fact"
85 86
 #define MSG_AUTOTEMP                        "Autotemp"
86
-#define MSG_ON                              "On "
87
-#define MSG_OFF                             "Off"
87
+#define MSG_ON                              "Til "
88
+#define MSG_OFF                             "Fra"
88 89
 #define MSG_PID_P                           "PID-P"
89 90
 #define MSG_PID_I                           "PID-I"
90 91
 #define MSG_PID_D                           "PID-D"
@@ -127,10 +128,10 @@
127 128
 #define MSG_DWELL                           "Dvale..."
128 129
 #define MSG_USERWAIT                        "Venter på bruger..."
129 130
 #define MSG_RESUMING                        "Forsætter printet"
130
-#define MSG_PRINT_ABORTED                   "Print annuleret"
131
-#define MSG_NO_MOVE                         "No move."
132
-#define MSG_KILLED                          "KILLED. "
133
-#define MSG_STOPPED                         "STOPPED. "
131
+#define MSG_PRINT_ABORTED                   "Print annulleret"
132
+#define MSG_NO_MOVE                         "Ingen bevægelse."
133
+#define MSG_KILLED                          "DRÆBT. "
134
+#define MSG_STOPPED                         "STOPPET. "
134 135
 #define MSG_CONTROL_RETRACT                 "Tilbagetraek mm"
135 136
 #define MSG_CONTROL_RETRACT_SWAP            "Skift Re.mm"
136 137
 #define MSG_CONTROL_RETRACTF                "Tilbagetræk V"

+ 20
- 10
Marlin/language_de.h View File

@@ -43,10 +43,11 @@
43 43
 #define MSG_DISABLE_STEPPERS                "Motoren Aus" // M84
44 44
 #define MSG_AUTO_HOME                       "Home" // G28
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
46
+#define MSG_LEVEL_BED_WAITING               "Klick für Start"
47
+#define MSG_LEVEL_BED_DONE                  "Fertig"
48
+#define MSG_LEVEL_BED_CANCEL                "Abbruch"
48 49
 #define MSG_SET_HOME_OFFSETS                "Setze Home hier"
49
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
+#define MSG_HOME_OFFSETS_APPLIED            "Offsets aktiv"
50 51
 #define MSG_SET_ORIGIN                      "Setze Null hier" //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
51 52
 #define MSG_PREHEAT_PLA                     "Vorwärmen PLA"
52 53
 #define MSG_PREHEAT_PLA_N                   "Vorwärmen PLA "
@@ -61,8 +62,10 @@
61 62
 #define MSG_COOLDOWN                        "Abkühlen"
62 63
 #define MSG_SWITCH_PS_ON                    "Netzteil Ein"
63 64
 #define MSG_SWITCH_PS_OFF                   "Netzteil Aus"
65
+#define MSG_EXTRUDE                         "Extrude"
64 66
 #define MSG_RETRACT                         "Retract"
65 67
 #define MSG_MOVE_AXIS                       "Bewegen"
68
+#define MSG_LEVEL_BED                       "Bett Korrektur"
66 69
 #define MSG_MOVE_X                          "X"
67 70
 #define MSG_MOVE_Y                          "Y"
68 71
 #define MSG_MOVE_Z                          "Z"
@@ -71,6 +74,7 @@
71 74
 #define MSG_MOVE_1MM                        " 1.0 mm"
72 75
 #define MSG_MOVE_10MM                       "10.0 mm"
73 76
 #define MSG_SPEED                           "Geschw."
77
+#define MSG_BED_Z                           "Bett Z"
74 78
 #define MSG_NOZZLE                          "Düse"
75 79
 #define MSG_BED                             "Bett"
76 80
 #define MSG_FAN_SPEED                       "Lüftergeschw."
@@ -99,6 +103,7 @@
99 103
 #define MSG_VTRAV_MIN                       "VTrav min"
100 104
 #define MSG_AMAX                            "A max " // space by purpose
101 105
 #define MSG_A_RETRACT                       "A Retract"
106
+#define MSG_A_TRAVEL                        "A Travel"
102 107
 #define MSG_XSTEPS                          "X steps/mm"
103 108
 #define MSG_YSTEPS                          "Y steps/mm"
104 109
 #define MSG_ZSTEPS                          "Z steps/mm"
@@ -146,6 +151,13 @@
146 151
 #define MSG_BABYSTEP_Y                      "Babystep Y"
147 152
 #define MSG_BABYSTEP_Z                      "Babystep Z"
148 153
 #define MSG_ENDSTOP_ABORT                   "Endstop Abbr. Ein"
154
+#define MSG_HEATING_FAILED_LCD              "Err: Heizt langsam"
155
+#define MSG_ERR_REDUNDANT_TEMP              "Err: Temp. Redundanz"
156
+#define MSG_THERMAL_RUNAWAY                 "Err: Temp. Messung"
157
+#define MSG_ERR_MAXTEMP                     "Err: Max-Temp."
158
+#define MSG_ERR_MINTEMP                     "Err: Min-Temp."
159
+#define MSG_ERR_MAXTEMP_BED                 "Err: Max-Temp. Bett"
160
+#define MSG_ERR_MINTEMP_BED                 "Err: Min-Temp. Bett"
149 161
 #define MSG_END_HOUR                        "Stunden"
150 162
 #define MSG_END_MINUTE                      "Minuten"
151 163
 #define MSG_HEATING                         "Aufheizen..."
@@ -163,12 +175,10 @@
163 175
 #define MSG_ERR_MAXTEMP_BED                 "Temp. Bett ueberschr."
164 176
 #define MSG_ERR_MAXTEMP_BED                 "Temp. Bett unterschr."
165 177
 
166
-#if ENABLED(DELTA_CALIBRATION_MENU)
167
-  #define MSG_DELTA_CALIBRATE               "Delta kalibrieren"
168
-  #define MSG_DELTA_CALIBRATE_X             "Kalibriere X"
169
-  #define MSG_DELTA_CALIBRATE_Y             "Kalibriere Y"
170
-  #define MSG_DELTA_CALIBRATE_Z             "Kalibriere Z"
171
-  #define MSG_DELTA_CALIBRATE_CENTER        "Kalibriere Mitte"
172
-#endif // DELTA_CALIBRATION_MENU
178
+#define MSG_DELTA_CALIBRATE                 "Delta kalibrieren"
179
+#define MSG_DELTA_CALIBRATE_X               "Kalibriere X"
180
+#define MSG_DELTA_CALIBRATE_Y               "Kalibriere Y"
181
+#define MSG_DELTA_CALIBRATE_Z               "Kalibriere Z"
182
+#define MSG_DELTA_CALIBRATE_CENTER          "Kalibriere Mitte"
173 183
 
174 184
 #endif // LANGUAGE_DE_H

+ 3
- 0
Marlin/language_en.h View File

@@ -70,6 +70,9 @@
70 70
 #ifndef MSG_LEVEL_BED_DONE
71 71
   #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
72 72
 #endif
73
+#ifndef MSG_LEVEL_BED_CANCEL
74
+  #define MSG_LEVEL_BED_CANCEL                "Cancel"
75
+#endif
73 76
 #ifndef MSG_SET_HOME_OFFSETS
74 77
   #define MSG_SET_HOME_OFFSETS                "Set home offsets"
75 78
 #endif

+ 43
- 29
Marlin/language_es.h View File

@@ -39,32 +39,33 @@
39 39
 #define MSG_SD_INSERTED                     "Tarjeta colocada"
40 40
 #define MSG_SD_REMOVED                      "Tarjeta retirada"
41 41
 #define MSG_MAIN                            "Menu principal"
42
-#define MSG_AUTOSTART                       "Autostart"
42
+#define MSG_AUTOSTART                       "Inicio automatico"
43 43
 #define MSG_DISABLE_STEPPERS                "Apagar motores"
44 44
 #define MSG_AUTO_HOME                       "Llevar al origen"
45
-#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
+#define MSG_LEVEL_BED_HOMING                "Origen XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
-#define MSG_SET_HOME_OFFSETS                "Ajustar offsets"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
49
+#define MSG_SET_HOME_OFFSETS                "Ajustar desfases"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
-#define MSG_SET_ORIGIN                      "Establecer cero"
51
+#define MSG_SET_ORIGIN                      "Establecer origen"
51 52
 #define MSG_PREHEAT_PLA                     "Precalentar PLA"
52
-#define MSG_PREHEAT_PLA_N                   "Precalentar PLA "
53
-#define MSG_PREHEAT_PLA_ALL                 "Precal. PLA Todo"
54
-#define MSG_PREHEAT_PLA_BEDONLY             "Precal. PLA Base"
55
-#define MSG_PREHEAT_PLA_SETTINGS            "Ajustar temp. PLA"
53
+#define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
54
+#define MSG_PREHEAT_PLA_ALL                 MSG_PREHEAT_PLA "Todo"
55
+#define MSG_PREHEAT_PLA_BEDONLY             MSG_PREHEAT_PLA"Plataforma"
56
+#define MSG_PREHEAT_PLA_SETTINGS            MSG_PREHEAT_PLA "Config"
56 57
 #define MSG_PREHEAT_ABS                     "Precalentar ABS"
57
-#define MSG_PREHEAT_ABS_N                   "Precalentar ABS "
58
-#define MSG_PREHEAT_ABS_ALL                 "Precal. ABS Todo"
59
-#define MSG_PREHEAT_ABS_BEDONLY             "Precal. ABS Base"
60
-#define MSG_PREHEAT_ABS_SETTINGS            "Ajustar temp. ABS"
58
+#define MSG_PREHEAT_ABS_N                   MSG_PREHEAT_ABS " "
59
+#define MSG_PREHEAT_ABS_ALL                 MSG_PREHEAT_ABS "Todo"
60
+#define MSG_PREHEAT_ABS_BEDONLY             MSG_PREHEAT_ABS "Plataforma"
61
+#define MSG_PREHEAT_ABS_SETTINGS            MSG_PREHEAT_ABS "Config"
61 62
 #define MSG_COOLDOWN                        "Enfriar"
62 63
 #define MSG_SWITCH_PS_ON                    "Encender"
63 64
 #define MSG_SWITCH_PS_OFF                   "Apagar"
64 65
 #define MSG_EXTRUDE                         "Extruir"
65 66
 #define MSG_RETRACT                         "Retraer"
66 67
 #define MSG_MOVE_AXIS                       "Mover ejes"
67
-#define MSG_LEVEL_BED                       "Nivelar cama"
68
+#define MSG_LEVEL_BED                       "Nivelar plataforma"
68 69
 #define MSG_MOVE_X                          "Mover X"
69 70
 #define MSG_MOVE_Y                          "Mover Y"
70 71
 #define MSG_MOVE_Z                          "Mover Z"
@@ -73,22 +74,22 @@
73 74
 #define MSG_MOVE_1MM                        "Mover 1mm"
74 75
 #define MSG_MOVE_10MM                       "Mover 10mm"
75 76
 #define MSG_SPEED                           "Velocidad"
76
-#define MSG_NOZZLE                          "Fusor"
77
-#define MSG_BED                             "Base"
77
+#define MSG_NOZZLE                          "Boquilla"
78
+#define MSG_BED                             "Plataforma"
78 79
 #define MSG_FAN_SPEED                       "Ventilador"
79 80
 #define MSG_FLOW                            "Flujo"
80 81
 #define MSG_CONTROL                         "Control"
81 82
 #define MSG_MIN                             LCD_STR_THERMOMETER " Min"
82 83
 #define MSG_MAX                             LCD_STR_THERMOMETER " Max"
83 84
 #define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
84
-#define MSG_AUTOTEMP                        "Autotemp"
85
-#define MSG_ON                              "On"
86
-#define MSG_OFF                             "Off"
85
+#define MSG_AUTOTEMP                        "Temperatura Automatica"
86
+#define MSG_ON                              "Encender"
87
+#define MSG_OFF                             "Apagar"
87 88
 #define MSG_PID_P                           "PID-P"
88 89
 #define MSG_PID_I                           "PID-I"
89 90
 #define MSG_PID_D                           "PID-D"
90 91
 #define MSG_PID_C                           "PID-C"
91
-#define MSG_ACC                             "Acel"
92
+#define MSG_ACC                             "Aceleracion"
92 93
 #define MSG_VXY_JERK                        "Vxy-jerk"
93 94
 #define MSG_VZ_JERK                         "Vz-jerk"
94 95
 #define MSG_VE_JERK                         "Ve-jerk"
@@ -98,9 +99,9 @@
98 99
 #define MSG_Z                               "z"
99 100
 #define MSG_E                               "e"
100 101
 #define MSG_VMIN                            "Vmin"
101
-#define MSG_VTRAV_MIN                       "Vvacio min"
102
-#define MSG_AMAX                            "Amax"
103
-#define MSG_A_RETRACT                       "A-retrac."
102
+#define MSG_VTRAV_MIN                       "Vel. viaje min"
103
+#define MSG_AMAX                            "Acel. max"
104
+#define MSG_A_RETRACT                       "Acel. retrac."
104 105
 #define MSG_XSTEPS                          "X pasos/mm"
105 106
 #define MSG_YSTEPS                          "Y pasos/mm"
106 107
 #define MSG_ZSTEPS                          "Z pasos/mm"
@@ -113,23 +114,23 @@
113 114
 #define MSG_CONTRAST                        "Contraste"
114 115
 #define MSG_STORE_EPROM                     "Guardar memoria"
115 116
 #define MSG_LOAD_EPROM                      "Cargar memoria"
116
-#define MSG_RESTORE_FAILSAFE                "Rest. de emergen."
117
+#define MSG_RESTORE_FAILSAFE                "Restaurar memoria."
117 118
 #define MSG_REFRESH                         "Volver a cargar"
118 119
 #define MSG_WATCH                           "Monitorizar"
119 120
 #define MSG_PREPARE                         "Preparar"
120 121
 #define MSG_TUNE                            "Ajustar"
121 122
 #define MSG_PAUSE_PRINT                     "Pausar impresion"
122
-#define MSG_RESUME_PRINT                    "Reanudar impres."
123
+#define MSG_RESUME_PRINT                    "Reanudar impresion"
123 124
 #define MSG_STOP_PRINT                      "Detener impresion"
124 125
 #define MSG_CARD_MENU                       "Menu de SD"
125 126
 #define MSG_NO_CARD                         "No hay tarjeta SD"
126 127
 #define MSG_DWELL                           "Reposo..."
127 128
 #define MSG_USERWAIT                        "Esperando ordenes"
128 129
 #define MSG_RESUMING                        "Resumiendo impre."
129
-#define MSG_PRINT_ABORTED                   "Print aborted"
130
+#define MSG_PRINT_ABORTED                   "Impresion cancelada"
130 131
 #define MSG_NO_MOVE                         "Sin movimiento"
131
-#define MSG_KILLED                          "PARADA DE EMERG."
132
-#define MSG_STOPPED                         "PARADA"
132
+#define MSG_KILLED                          "Parada de emergencia."
133
+#define MSG_STOPPED                         "Detenida"
133 134
 #define MSG_CONTROL_RETRACT                 "Retraer mm"
134 135
 #define MSG_CONTROL_RETRACT_SWAP            "Interc. Retraer mm"
135 136
 #define MSG_CONTROL_RETRACTF                "Retraer  V"
@@ -137,19 +138,32 @@
137 138
 #define MSG_CONTROL_RETRACT_RECOVER         "DesRet +mm"
138 139
 #define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Interc. DesRet +mm"
139 140
 #define MSG_CONTROL_RETRACT_RECOVERF        "DesRet V"
140
-#define MSG_AUTORETRACT                     "AutoRetr."
141
+#define MSG_AUTORETRACT                     "Retraccion Auto."
141 142
 #define MSG_FILAMENTCHANGE                  "Cambiar filamento"
142 143
 #define MSG_INIT_SDCARD                     "Iniciando tarjeta"
143 144
 #define MSG_CNG_SDCARD                      "Cambiar tarjeta"
144 145
 #define MSG_ZPROBE_OUT                      "Sonda Z fuera"
145 146
 #define MSG_YX_UNHOMED                      "Reiniciar X/Y y Z"
146
-#define MSG_ZPROBE_ZOFFSET                  "Offset Z"
147
+#define MSG_ZPROBE_ZOFFSET                  "Desfase Z"
147 148
 #define MSG_BABYSTEP_X                      "Micropaso X"
148 149
 #define MSG_BABYSTEP_Y                      "Micropaso Y"
149 150
 #define MSG_BABYSTEP_Z                      "Micropaso Z"
150 151
 #define MSG_ENDSTOP_ABORT                   "Endstop abort"
151 152
 #define MSG_END_HOUR                        "horas"
152 153
 #define MSG_END_MINUTE                      "minutos"
154
+#define MSG_BED_Z                           "Plataforma Z"
155
+#define MSG_A_TRAVEL                        "Acel. Viaje"
156
+#define MSG_HEATING_FAILED_LCD              "Error: al calentar"
157
+#define MSG_ERR_REDUNDANT_TEMP              "Error: temperatura redundante"
158
+#define MSG_THERMAL_RUNAWAY                 "Error de temperatura"
159
+#define MSG_ERR_MAXTEMP                     "Error: Temp Maxima"
160
+#define MSG_ERR_MINTEMP                     "Error: Temp Minima"
161
+#define MSG_ERR_MAXTEMP_BED                 "Error: Temp Max Plataforma"
162
+#define MSG_ERR_MINTEMP_BED                 "Error: Temp Min Plataforma"
163
+#define MSG_HEATING                         "Calentando..."
164
+#define MSG_HEATING_COMPLETE                "Calentamiento Completo"
165
+#define MSG_BED_HEATING                     "Calentando plataforma ..."
166
+#define MSG_BED_DONE                        "Plataforma Caliente"
153 167
 
154 168
 #if ENABLED(DELTA_CALIBRATION_MENU)
155 169
   #define MSG_DELTA_CALIBRATE               "Calibracion Delta"

+ 1
- 0
Marlin/language_eu.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Hasiera ipini"

+ 1
- 0
Marlin/language_fi.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Aseta origo"

+ 29
- 14
Marlin/language_fr.h View File

@@ -42,12 +42,13 @@
42 42
 #define MSG_MAIN                            "Menu principal"
43 43
 #define MSG_AUTOSTART                       "Demarrage auto"
44 44
 #define MSG_DISABLE_STEPPERS                "Arreter moteurs"
45
-#define MSG_AUTO_HOME                       "Home auto."
46
-#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
47
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
48
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
49
-#define MSG_SET_HOME_OFFSETS                "Set home offsets"
50
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
45
+#define MSG_AUTO_HOME                       "Origine auto."
46
+#define MSG_LEVEL_BED_HOMING                "Origine XYZ"
47
+#define MSG_LEVEL_BED_WAITING               "Cliquer pour commencer"
48
+#define MSG_LEVEL_BED_DONE                  "Mise a niveau OK!"
49
+#define MSG_LEVEL_BED_CANCEL                "Annuler"
50
+#define MSG_SET_HOME_OFFSETS                "Regler decal. origine"
51
+#define MSG_HOME_OFFSETS_APPLIED            "Decalages appliques"
51 52
 #define MSG_SET_ORIGIN                      "Regler origine"
52 53
 #define MSG_PREHEAT_PLA                     "Prechauffage PLA"
53 54
 #define MSG_PREHEAT_PLA_N                   "Prechauff. PLA "
@@ -109,8 +110,8 @@
109 110
 #define MSG_TEMPERATURE                     "Temperature"
110 111
 #define MSG_MOTION                          "Mouvement"
111 112
 #define MSG_VOLUMETRIC                      "Filament"
112
-#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
113
-#define MSG_FILAMENT_DIAM                   "Fil. Dia."
113
+#define MSG_VOLUMETRIC_ENABLED              "E en mm3"
114
+#define MSG_FILAMENT_DIAM                   "Diam. Fil."
114 115
 #define MSG_CONTRAST                        "Contraste LCD"
115 116
 #define MSG_STORE_EPROM                     "Sauver config"
116 117
 #define MSG_LOAD_EPROM                      "Lire config"
@@ -144,20 +145,34 @@
144 145
 #define MSG_CNG_SDCARD                      "Changer de carte"
145 146
 #define MSG_ZPROBE_OUT                      "Z sonde exte. lit"
146 147
 #define MSG_YX_UNHOMED                      "Rev. dans XY av.Z"
147
-#define MSG_ZPROBE_ZOFFSET                  "Offset Z"
148
+#define MSG_ZPROBE_ZOFFSET                  "Decalage Z"
148 149
 #define MSG_BABYSTEP_X                      "Babystep X"
149 150
 #define MSG_BABYSTEP_Y                      "Babystep Y"
150 151
 #define MSG_BABYSTEP_Z                      "Babystep Z"
151 152
 #define MSG_ENDSTOP_ABORT                   "Butee abandon"
152 153
 #define MSG_END_HOUR                        "heures"
153 154
 #define MSG_END_MINUTE                      "minutes"
155
+#define MSG_BED_Z                           "Plateau Z"
156
+#define MSG_A_TRAVEL                        "A-Depl."
157
+#define MSG_HEATING_FAILED_LCD              "Erreur de chauffe"
158
+#define MSG_ERR_REDUNDANT_TEMP              "Err: ERREUR TEMP. REDONDANTE"
159
+#define MSG_THERMAL_RUNAWAY                 "EMBALLEMENT THERMIQUE"
160
+#define MSG_ERR_MAXTEMP                     "Err: TEMP. MAX"
161
+#define MSG_ERR_MINTEMP                     "Err: TEMP. MIN"
162
+#define MSG_ERR_MAXTEMP_BED                 "Err: TEMP. MAX PLATEAU"
163
+#define MSG_ERR_MINTEMP_BED                 "Err: TEMP. MIN PLATEAU"
164
+#define MSG_HEATING                         "En chauffe..."
165
+#define MSG_HEATING_COMPLETE                "Chauffe terminee"
166
+#define MSG_BED_HEATING                     "Plateau en chauffe..."
167
+#define MSG_BED_DONE                        "Chauffe plateau terminee"
168
+
154 169
 
155 170
 #if ENABLED(DELTA_CALIBRATION_MENU)
156
-  #define MSG_DELTA_CALIBRATE               "Delta Calibration"
157
-  #define MSG_DELTA_CALIBRATE_X             "Calibrate X"
158
-  #define MSG_DELTA_CALIBRATE_Y             "Calibrate Y"
159
-  #define MSG_DELTA_CALIBRATE_Z             "Calibrate Z"
160
-  #define MSG_DELTA_CALIBRATE_CENTER        "Calibrate Center"
171
+  #define MSG_DELTA_CALIBRATE               "Calibration Delta"
172
+  #define MSG_DELTA_CALIBRATE_X             "Calibrer X"
173
+  #define MSG_DELTA_CALIBRATE_Y             "Calibrer Y"
174
+  #define MSG_DELTA_CALIBRATE_Z             "Calibrer Z"
175
+  #define MSG_DELTA_CALIBRATE_CENTER        "Calibrer centre"
161 176
 #endif // DELTA_CALIBRATION_MENU
162 177
 
163 178
 #endif // LANGUAGE_FR_H

+ 51
- 36
Marlin/language_it.h View File

@@ -42,29 +42,30 @@
42 42
 #define MSG_AUTOSTART                       "Autostart"
43 43
 #define MSG_DISABLE_STEPPERS                "Disabilita Motori"
44 44
 #define MSG_AUTO_HOME                       "Auto Home"
45
-#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
-#define MSG_SET_HOME_OFFSETS                "Setta offset home"
49
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
45
+#define MSG_LEVEL_BED_HOMING                "Home assi XYZ"
46
+#define MSG_LEVEL_BED_WAITING               "Premi per Iniziare"
47
+#define MSG_LEVEL_BED_DONE                  "Livel. terminato!"
48
+#define MSG_LEVEL_BED_CANCEL                "Annulla"
49
+#define MSG_SET_HOME_OFFSETS                "Imp. offset home"
50
+#define MSG_HOME_OFFSETS_APPLIED            "Offset applicato"
50 51
 #define MSG_SET_ORIGIN                      "Imposta Origine"
51 52
 #define MSG_PREHEAT_PLA                     "Preriscalda PLA"
52
-#define MSG_PREHEAT_PLA_N                   "Preriscalda PLA "
53
-#define MSG_PREHEAT_PLA_ALL                 "Prer. PLA Tutto"
54
-#define MSG_PREHEAT_PLA_BEDONLY             "Prer. PLA Piatto"
55
-#define MSG_PREHEAT_PLA_SETTINGS            "Config. prer. PLA"
53
+#define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
54
+#define MSG_PREHEAT_PLA_ALL                 MSG_PREHEAT_PLA " Tutto"
55
+#define MSG_PREHEAT_PLA_BEDONLY             MSG_PREHEAT_PLA " Piatto"
56
+#define MSG_PREHEAT_PLA_SETTINGS            MSG_PREHEAT_PLA " conf"
56 57
 #define MSG_PREHEAT_ABS                     "Preriscalda ABS"
57
-#define MSG_PREHEAT_ABS_N                   "Preriscalda ABS "
58
-#define MSG_PREHEAT_ABS_ALL                 "Prer. ABS Tutto"
59
-#define MSG_PREHEAT_ABS_BEDONLY             "Prer. ABS Piatto"
60
-#define MSG_PREHEAT_ABS_SETTINGS            "Config. prer. ABS"
58
+#define MSG_PREHEAT_ABS_N                   MSG_PREHEAT_ABS " "
59
+#define MSG_PREHEAT_ABS_ALL                 MSG_PREHEAT_ABS " Tutto"
60
+#define MSG_PREHEAT_ABS_BEDONLY             MSG_PREHEAT_ABS " Piatto"
61
+#define MSG_PREHEAT_ABS_SETTINGS            MSG_PREHEAT_ABS " conf"
61 62
 #define MSG_COOLDOWN                        "Raffredda"
62 63
 #define MSG_SWITCH_PS_ON                    "Accendi aliment."
63 64
 #define MSG_SWITCH_PS_OFF                   "Spegni aliment."
64 65
 #define MSG_EXTRUDE                         "Estrudi"
65 66
 #define MSG_RETRACT                         "Ritrai"
66 67
 #define MSG_MOVE_AXIS                       "Muovi Asse"
67
-#define MSG_LEVEL_BED                       "Livellamento piano"
68
+#define MSG_LEVEL_BED                       "Livella piano"
68 69
 #define MSG_MOVE_X                          "Muovi X"
69 70
 #define MSG_MOVE_Y                          "Muovi Y"
70 71
 #define MSG_MOVE_Z                          "Muovi Z"
@@ -72,34 +73,34 @@
72 73
 #define MSG_MOVE_01MM                       "Muovi di 0.1mm"
73 74
 #define MSG_MOVE_1MM                        "Muovi di   1mm"
74 75
 #define MSG_MOVE_10MM                       "Muovi di  10mm"
75
-#define MSG_SPEED                           "Velcità"
76
+#define MSG_SPEED                           "Velocità"
76 77
 #define MSG_NOZZLE                          "Ugello"
77 78
 #define MSG_BED                             "Piatto"
78
-#define MSG_FAN_SPEED                       "Ventola"
79
+#define MSG_FAN_SPEED                       "Velocità ventola"
79 80
 #define MSG_FLOW                            "Flusso"
80 81
 #define MSG_CONTROL                         "Controllo"
81 82
 #define MSG_MIN                             LCD_STR_THERMOMETER " Min"
82 83
 #define MSG_MAX                             LCD_STR_THERMOMETER " Max"
83 84
 #define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
84 85
 #define MSG_AUTOTEMP                        "Autotemp"
85
-#define MSG_ON                              "ON "
86
-#define MSG_OFF                             "OFF"
86
+#define MSG_ON                              "On "
87
+#define MSG_OFF                             "Off"
87 88
 #define MSG_PID_P                           "PID-P"
88 89
 #define MSG_PID_I                           "PID-I"
89 90
 #define MSG_PID_D                           "PID-D"
90 91
 #define MSG_PID_C                           "PID-C"
91
-#define MSG_ACC                             "Accel."
92
+#define MSG_ACC                             "Accel"
92 93
 #define MSG_VXY_JERK                        "Vxy-jerk"
93 94
 #define MSG_VZ_JERK                         "Vz-jerk"
94 95
 #define MSG_VE_JERK                         "Ve-jerk"
95
-#define MSG_VMAX                            "Vmax"
96
+#define MSG_VMAX                            "Vmax "
96 97
 #define MSG_X                               "x"
97 98
 #define MSG_Y                               "y"
98 99
 #define MSG_Z                               "z"
99 100
 #define MSG_E                               "e"
100 101
 #define MSG_VMIN                            "Vmin"
101 102
 #define MSG_VTRAV_MIN                       "VTrav min"
102
-#define MSG_AMAX                            "Amax"
103
+#define MSG_AMAX                            "Amax "
103 104
 #define MSG_A_RETRACT                       "A-retract"
104 105
 #define MSG_XSTEPS                          "Xpassi/mm"
105 106
 #define MSG_YSTEPS                          "Ypassi/mm"
@@ -107,42 +108,42 @@
107 108
 #define MSG_ESTEPS                          "Epassi/mm"
108 109
 #define MSG_TEMPERATURE                     "Temperatura"
109 110
 #define MSG_MOTION                          "Movimento"
110
-#define MSG_VOLUMETRIC                      "Filament"
111
-#define MSG_VOLUMETRIC_ENABLED              "E in mm³"
111
+#define MSG_VOLUMETRIC                      "Filamento"
112
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
112 113
 #define MSG_FILAMENT_DIAM                   "Diam. filo"
113 114
 #define MSG_CONTRAST                        "Contrasto LCD"
114
-#define MSG_STORE_EPROM                     "Salva in EEPROM"
115
-#define MSG_LOAD_EPROM                      "Carica da EEPROM"
116
-#define MSG_RESTORE_FAILSAFE                "Impostaz. default"
115
+#define MSG_STORE_EPROM                     "Salva in memoria"
116
+#define MSG_LOAD_EPROM                      "Carica da memoria"
117
+#define MSG_RESTORE_FAILSAFE                "Ripristina imp."
117 118
 #define MSG_REFRESH                         "Aggiorna"
118 119
 #define MSG_WATCH                           "Guarda"
119 120
 #define MSG_PREPARE                         "Prepara"
120
-#define MSG_TUNE                            "Adatta"
121
+#define MSG_TUNE                            "Regola"
121 122
 #define MSG_PAUSE_PRINT                     "Pausa"
122 123
 #define MSG_RESUME_PRINT                    "Riprendi stampa"
123 124
 #define MSG_STOP_PRINT                      "Arresta stampa"
124
-#define MSG_CARD_MENU                       "SD Card Menu"
125
-#define MSG_NO_CARD                         "No SD Card"
125
+#define MSG_CARD_MENU                       "Stampa da SD"
126
+#define MSG_NO_CARD                         "SD non presente"
126 127
 #define MSG_DWELL                           "Sospensione..."
127
-#define MSG_USERWAIT                        "Attendi Utente..."
128
+#define MSG_USERWAIT                        "Attendi Utente.."
128 129
 #define MSG_RESUMING                        "Riprendi Stampa"
129
-#define MSG_PRINT_ABORTED                   "Stampa abortita"
130
+#define MSG_PRINT_ABORTED                   "Stampa annullata"
130 131
 #define MSG_NO_MOVE                         "Nessun Movimento"
131
-#define MSG_KILLED                          "UCCISO "
132
-#define MSG_STOPPED                         "ARRESTATO "
132
+#define MSG_KILLED                          "UCCISO. "
133
+#define MSG_STOPPED                         "ARRESTATO. "
133 134
 #define MSG_CONTROL_RETRACT                 "Ritrai mm"
134 135
 #define MSG_CONTROL_RETRACT_SWAP            "Scamb. Ritrai mm"
135 136
 #define MSG_CONTROL_RETRACTF                "Ritrai  V"
136 137
 #define MSG_CONTROL_RETRACT_ZLIFT           "Salta mm"
137 138
 #define MSG_CONTROL_RETRACT_RECOVER         "UnRet +mm"
138
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Scamb. UnRet +mm"
139
+#define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Scamb. UnRet+mm"
139 140
 #define MSG_CONTROL_RETRACT_RECOVERF        "UnRet  V"
140
-#define MSG_AUTORETRACT                     "AutoArretramento"
141
+#define MSG_AUTORETRACT                     "AutoRitrai"
141 142
 #define MSG_FILAMENTCHANGE                  "Cambia filamento"
142 143
 #define MSG_INIT_SDCARD                     "Iniz. SD-Card"
143 144
 #define MSG_CNG_SDCARD                      "Cambia SD-Card"
144 145
 #define MSG_ZPROBE_OUT                      "Z probe out. bed"
145
-#define MSG_YX_UNHOMED                      "Home X/Y before Z"
146
+#define MSG_YX_UNHOMED                      "Home X/Y prima di Z"
146 147
 #define MSG_ZPROBE_ZOFFSET                  "Z Offset"
147 148
 #define MSG_BABYSTEP_X                      "Babystep X"
148 149
 #define MSG_BABYSTEP_Y                      "Babystep Y"
@@ -150,6 +151,20 @@
150 151
 #define MSG_ENDSTOP_ABORT                   "Finecorsa abort"
151 152
 #define MSG_END_HOUR                        "ore"
152 153
 #define MSG_END_MINUTE                      "minuti"
154
+#define MSG_BED_Z                           "piatto Z"
155
+#define MSG_A_TRAVEL                        "A-Spostamento"
156
+#define MSG_HEATING_FAILED_LCD              "Riscald. Fallito"
157
+#define MSG_ERR_REDUNDANT_TEMP              "Err: TEMP RIDONDANTI"
158
+#define MSG_THERMAL_RUNAWAY                 "TEMP FUORI CONTROLLO"
159
+#define MSG_ERR_MAXTEMP                     "Err: TEMP MASSIMA"
160
+#define MSG_ERR_MINTEMP                     "Err: TEMP MINIMA"
161
+#define MSG_ERR_MAXTEMP_BED                 "Err: TEMP MASSIMA PIATTO"
162
+#define MSG_ERR_MINTEMP_BED                 "Err: TEMP MINIMA PIATTO"
163
+#define MSG_HEATING                         "Riscaldamento.."
164
+#define MSG_HEATING_COMPLETE                "Risc. completato"
165
+#define MSG_BED_HEATING                     "Risc. Piatto.."
166
+#define MSG_BED_DONE                        "Piatto Pronto"
167
+
153 168
 
154 169
 #if ENABLED(DELTA_CALIBRATION_MENU)
155 170
   #define MSG_DELTA_CALIBRATE               "Calibraz. Delta"

+ 4
- 3
Marlin/language_kana.h View File

@@ -45,10 +45,11 @@
45 45
 #define MSG_DISABLE_STEPPERS                "\xd3\xb0\xc0\xb0\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xcc"         // "Disable steppers"
46 46
 #define MSG_AUTO_HOME                       "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3"                     // "Auto home"
47 47
 #define MSG_LEVEL_BED_HOMING                "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3"                     // "Homing XYZ"
48
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
49
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_WAITING               "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xb2\xbc"                     //"Click to Begin"
49
+#define MSG_LEVEL_BED_DONE                  "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xdd\xd8\xae\xb3"             //"Leveling Done!"
50
+#define MSG_LEVEL_BED_CANCEL                "\xc4\xd8\xd4\xd2"                                             //"Cancel"
50 51
 #define MSG_SET_HOME_OFFSETS                "\xb7\xbc\xde\xad\xdd\xb5\xcc\xbe\xaf\xc4\xbe\xaf\xc3\xb2"     // "Set home offsets"
51
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
52
+#define MSG_HOME_OFFSETS_APPLIED            "\xb5\xcc\xbe\xaf\xc4\x20\xc3\xb7\xd6\xb3\xbb\xda\xcf\xbc\xc0" //"Offsets applied"
52 53
 #define MSG_SET_ORIGIN                      "\xb7\xbc\xde\xad\xdd\xbe\xaf\xc4"                             // "Set origin"
53 54
 #define MSG_PREHEAT_PLA                     "PLA \xd6\xc8\xc2"                                             // "Preheat PLA"
54 55
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "

+ 4
- 3
Marlin/language_kana_utf8.h View File

@@ -49,10 +49,11 @@
49 49
 #define MSG_DISABLE_STEPPERS                "モーターデンゲン オフ"            // "Disable steppers"
50 50
 #define MSG_AUTO_HOME                       "ゲンテンニイドウ"                // "Auto home"
51 51
 #define MSG_LEVEL_BED_HOMING                "ゲンテンニイドウ"                // "Homing XYZ"
52
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
53
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
52
+#define MSG_LEVEL_BED_WAITING               "レベリングカイシ"                //"Click to Begin"
53
+#define MSG_LEVEL_BED_DONE                  "レベリングカンリョウ"              //"Leveling Done!"
54
+#define MSG_LEVEL_BED_CANCEL                "トリヤメ"                      //"Cancel"
54 55
 #define MSG_SET_HOME_OFFSETS                "キジュンオフセットセッテイ"         // "Set home offsets"
55
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
56
+#define MSG_HOME_OFFSETS_APPLIED            "オフセット テキヨウサレマシタ"       //"Offsets applied"
56 57
 #define MSG_SET_ORIGIN                      "キジュンセット"                 // "Set origin"
57 58
 #define MSG_PREHEAT_PLA                     "PLA ヨネツ"                   // "Preheat PLA"
58 59
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "

+ 24
- 5
Marlin/language_nl.h View File

@@ -38,14 +38,15 @@
38 38
 #define WELCOME_MSG                         MACHINE_NAME " gereed."
39 39
 #define MSG_SD_INSERTED                     "Kaart ingestoken"
40 40
 #define MSG_SD_REMOVED                      "Kaart verwijderd"
41
-#define MSG_MAIN                            "Main"
41
+#define MSG_MAIN                            "Hoofdmenu"
42 42
 #define MSG_AUTOSTART                       "Autostart"
43 43
 #define MSG_DISABLE_STEPPERS                "Motoren uit"
44 44
 #define MSG_AUTO_HOME                       "Auto home"
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
-#define MSG_SET_HOME_OFFSETS                "Set home offsets"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
49
+#define MSG_SET_HOME_OFFSETS                "Zet home offsets"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Nulpunt instellen"
51 52
 #define MSG_PREHEAT_PLA                     "PLA voorverwarmen"
@@ -127,8 +128,8 @@
127 128
 #define MSG_RESUMING                        "Print hervatten"
128 129
 #define MSG_PRINT_ABORTED                   "Print afgebroken"
129 130
 #define MSG_NO_MOVE                         "Geen beweging."
130
-#define MSG_KILLED                          "AFGEBROKEN. "
131
-#define MSG_STOPPED                         "GESTOPT. "
131
+#define MSG_KILLED                          "Afgebroken. "
132
+#define MSG_STOPPED                         "Gestopt. "
132 133
 #define MSG_CONTROL_RETRACT                 "Retract mm"
133 134
 #define MSG_CONTROL_RETRACT_SWAP            "Ruil Retract mm"
134 135
 #define MSG_CONTROL_RETRACTF                "Retract  F"
@@ -139,7 +140,7 @@
139 140
 #define MSG_AUTORETRACT                     "AutoRetr."
140 141
 #define MSG_FILAMENTCHANGE                  "Verv. Filament"
141 142
 #define MSG_INIT_SDCARD                     "Init. SD kaart"
142
-#define MSG_CNG_SDCARD                      "Verv. SD card"
143
+#define MSG_CNG_SDCARD                      "Verv. SD Kaart"
143 144
 #define MSG_ZPROBE_OUT                      "Z probe uit. bed"
144 145
 #define MSG_YX_UNHOMED                      "Home X/Y voor Z"
145 146
 #define MSG_ZPROBE_ZOFFSET                  "Z Offset"
@@ -149,6 +150,24 @@
149 150
 #define MSG_ENDSTOP_ABORT                   "Endstop afbr."
150 151
 #define MSG_END_HOUR                        "uur"
151 152
 #define MSG_END_MINUTE                      "minuten"
153
+#define MSG_BED_Z                           "Bed Z"
154
+#define MSG_A_TRAVEL                        "A-travel"
155
+#define MSG_HEATING_FAILED_LCD              "voorverw. fout"
156
+#define MSG_ERR_REDUNDANT_TEMP              "Redun. temp fout"
157
+#define MSG_THERMAL_RUNAWAY                 "Therm. wegloop"
158
+#define MSG_ERR_MAXTEMP                     "Err: Max. temp"
159
+#define MSG_ERR_MINTEMP                     "Err: Min. temp"
160
+#define MSG_ERR_MAXTEMP_BED                 "Err: Max.tmp bed"
161
+#define MSG_ERR_MINTEMP_BED                 "Err: Min.tmp bed"
162
+#define MSG_HEATING                         "Voorwarmen..."
163
+#define MSG_HEATING_COMPLETE                "Voorverw. kompl."
164
+#define MSG_BED_HEATING                     "Bed voorverw."
165
+#define MSG_BED_DONE                        "Bed is voorverw."
166
+#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
167
+#define MSG_LEVEL_BED_WAITING               "Klik voor begin"
168
+#define MSG_LEVEL_BED_DONE                  "Bed level kompl."
169
+#define MSG_LEVEL_BED_CANCEL                "Bed level afbr."
170
+#define MSG_HOME_OFFSETS_APPLIED            "H offset toegep."
152 171
 
153 172
 #if ENABLED(DELTA_CALIBRATION_MENU)
154 173
   #define MSG_DELTA_CALIBRATE               "Delta Calibratie"

+ 1
- 0
Marlin/language_pl.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Ustaw punkt zero"

+ 1
- 0
Marlin/language_pt-br.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Ajustar Jogo"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Ajustar orig."

+ 1
- 0
Marlin/language_pt-br_utf8.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Ajustar Jogo"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Ajustar orig."

+ 15
- 1
Marlin/language_pt.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Definir desvio"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Definir origem"
@@ -72,6 +73,7 @@
72 73
 #define MSG_MOVE_1MM                        "Mover 1mm"
73 74
 #define MSG_MOVE_10MM                       "Mover 10mm"
74 75
 #define MSG_SPEED                           "Velocidade"
76
+#define MSG_BED_Z                           "Base Z"
75 77
 #define MSG_NOZZLE                          LCD_STR_THERMOMETER " Bico"
76 78
 #define MSG_BED                             LCD_STR_THERMOMETER " Base"
77 79
 #define MSG_FAN_SPEED                       "Vel. ventoinha"
@@ -103,7 +105,8 @@
103 105
 #define MSG_VMIN                            "Vmin"
104 106
 #define MSG_VTRAV_MIN                       "VTrav min"
105 107
 #define MSG_AMAX                            "Amax "
106
-#define MSG_A_RETRACT                       "A-retract"
108
+#define MSG_A_RETRACT                       "A-retraccao"
109
+#define MSG_A_TRAVEL                        "A-movimento"
107 110
 #define MSG_XSTEPS                          "X passo/mm"
108 111
 #define MSG_YSTEPS                          "Y passo/mm"
109 112
 #define MSG_ZSTEPS                          "Z passo/mm"
@@ -151,8 +154,19 @@
151 154
 #define MSG_BABYSTEP_Y                      "Babystep Y"
152 155
 #define MSG_BABYSTEP_Z                      "Babystep Z"
153 156
 #define MSG_ENDSTOP_ABORT                   "Fim de curso"
157
+#define MSG_HEATING_FAILED_LCD              "Aquecimento falhou"
158
+#define MSG_ERR_REDUNDANT_TEMP              "Err: REDUNDANT TEMP ERROR"
159
+#define MSG_THERMAL_RUNAWAY                 "THERMAL RUNAWAY"
160
+#define MSG_ERR_MAXTEMP                     "Err: T Maxima"
161
+#define MSG_ERR_MINTEMP                     "Err: T Minima"
162
+#define MSG_ERR_MAXTEMP_BED                 "Err: T Base Maxima"
163
+#define MSG_ERR_MINTEMP_BED                 "Err: T Base Minima"
154 164
 #define MSG_END_HOUR                        "horas"
155 165
 #define MSG_END_MINUTE                      "minutos"
166
+#define MSG_HEATING                         "Aquecendo..."
167
+#define MSG_HEATING_COMPLETE                "Aquecida."
168
+#define MSG_BED_HEATING                     "Aquecendo base.."
169
+#define MSG_BED_DONE                        "Base aquecida."
156 170
 
157 171
 #if ENABLED(DELTA_CALIBRATION_MENU)
158 172
   #define MSG_DELTA_CALIBRATE             "Calibracao Delta"

+ 16
- 2
Marlin/language_pt_utf8.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Definir desvio"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Definir origem"
@@ -72,6 +73,7 @@
72 73
 #define MSG_MOVE_1MM                        "Mover 1mm"
73 74
 #define MSG_MOVE_10MM                       "Mover 10mm"
74 75
 #define MSG_SPEED                           "Velocidade"
76
+#define MSG_BED_Z                           "Base Z"
75 77
 #define MSG_NOZZLE                          LCD_STR_THERMOMETER " Bico"
76 78
 #define MSG_BED                             LCD_STR_THERMOMETER " Base"
77 79
 #define MSG_FAN_SPEED                       "Vel. ventoinha"
@@ -103,7 +105,8 @@
103 105
 #define MSG_VMIN                            "Vmin"
104 106
 #define MSG_VTRAV_MIN                       "VTrav min"
105 107
 #define MSG_AMAX                            "Amax "
106
-#define MSG_A_RETRACT                       "A-retract"
108
+#define MSG_A_RETRACT                       "A-retracção"
109
+#define MSG_A_TRAVEL                        "A-movimento"
107 110
 #define MSG_XSTEPS                          "X passo/mm"
108 111
 #define MSG_YSTEPS                          "Y passo/mm"
109 112
 #define MSG_ZSTEPS                          "Z passo/mm"
@@ -127,7 +130,7 @@
127 130
 #define MSG_CARD_MENU                       "Imprimir do SD"
128 131
 #define MSG_NO_CARD                         "Sem cartão SD"
129 132
 #define MSG_DWELL                           "Em espera..."
130
-#define MSG_USERWAIT                        "A espera de ordem"
133
+#define MSG_USERWAIT                        "Á espera de ordem"
131 134
 #define MSG_RESUMING                        "Retomando impressão"
132 135
 #define MSG_PRINT_ABORTED                   "Impressão cancelada"
133 136
 #define MSG_NO_MOVE                         "Sem movimento"
@@ -151,8 +154,19 @@
151 154
 #define MSG_BABYSTEP_Y                      "Babystep Y"
152 155
 #define MSG_BABYSTEP_Z                      "Babystep Z"
153 156
 #define MSG_ENDSTOP_ABORT                   "Fim de curso"
157
+#define MSG_HEATING_FAILED_LCD              "Aquecimento falhou"
158
+#define MSG_ERR_REDUNDANT_TEMP              "Err: REDUNDANT TEMP ERROR"
159
+#define MSG_THERMAL_RUNAWAY                 "THERMAL RUNAWAY"
160
+#define MSG_ERR_MAXTEMP                     "Err: T Máxima"
161
+#define MSG_ERR_MINTEMP                     "Err: T Mínima"
162
+#define MSG_ERR_MAXTEMP_BED                 "Err: T Base Máxima"
163
+#define MSG_ERR_MINTEMP_BED                 "Err: T Base Mínima"
154 164
 #define MSG_END_HOUR                        "horas"
155 165
 #define MSG_END_MINUTE                      "minutos"
166
+#define MSG_HEATING                         "Aquecendo..."
167
+#define MSG_HEATING_COMPLETE                "Aquecida."
168
+#define MSG_BED_HEATING                     "Aquecendo base.."
169
+#define MSG_BED_DONE                        "Base aquecida."
156 170
 
157 171
 #if ENABLED(DELTA_CALIBRATION_MENU)
158 172
   #define MSG_DELTA_CALIBRATE             "Calibração Delta"

+ 1
- 0
Marlin/language_ru.h View File

@@ -45,6 +45,7 @@
45 45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46 46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47 47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48 49
 #define MSG_SET_HOME_OFFSETS                "Запомнить парковку"
49 50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50 51
 #define MSG_SET_ORIGIN                      "Запомнить ноль"

+ 2
- 2
Marlin/macros.h View File

@@ -24,8 +24,8 @@
24 24
 #define MACROS_H
25 25
 
26 26
 // Macros to make a string from a macro
27
-#define STRINGIFY_(n) #n
28
-#define STRINGIFY(n) STRINGIFY_(n)
27
+#define STRINGIFY_(M) #M
28
+#define STRINGIFY(M) STRINGIFY_(M)
29 29
 
30 30
 // Macros for bit masks
31 31
 #define TEST(n,b) (((n)&_BV(b))!=0)

+ 14
- 32
Marlin/pins.h View File

@@ -209,55 +209,37 @@
209 209
   #endif
210 210
 #endif
211 211
 
212
-#if ENABLED(DISABLE_MAX_ENDSTOPS)
213
-  #undef X_MAX_PIN
214
-  #undef Y_MAX_PIN
215
-  #undef Z_MAX_PIN
216
-  #define X_MAX_PIN          -1
217
-  #define Y_MAX_PIN          -1
218
-  #define Z_MAX_PIN          -1
219
-#endif
220
-
221
-#if ENABLED(DISABLE_MIN_ENDSTOPS)
222
-  #undef X_MIN_PIN
223
-  #undef Y_MIN_PIN
224
-  #undef Z_MIN_PIN
225
-  #define X_MIN_PIN          -1
226
-  #define Y_MIN_PIN          -1
227
-  #define Z_MIN_PIN          -1
228
-#endif
229
-
230 212
 #if ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP) || DISABLED(Z_MIN_PROBE_ENDSTOP) // Allow code to compile regardless of Z_MIN_PROBE_ENDSTOP setting.
231 213
   #undef Z_MIN_PROBE_PIN
232 214
   #define Z_MIN_PROBE_PIN    -1
233 215
 #endif
234 216
 
235
-#if ENABLED(DISABLE_XMAX_ENDSTOP)
217
+#if DISABLED(USE_XMAX_PLUG)
236 218
   #undef X_MAX_PIN
237 219
   #define X_MAX_PIN          -1
238 220
 #endif
239 221
 
240
-#if ENABLED(DISABLE_XMIN_ENDSTOP)
241
-  #undef X_MIN_PIN
242
-  #define X_MIN_PIN          -1
243
-#endif
244
-
245
-#if ENABLED(DISABLE_YMAX_ENDSTOP)
222
+#if DISABLED(USE_YMAX_PLUG)
246 223
   #undef Y_MAX_PIN
247 224
   #define Y_MAX_PIN          -1
248 225
 #endif
249 226
 
250
-#if ENABLED(DISABLE_YMIN_ENDSTOP)
251
-  #undef Y_MIN_PIN
252
-  #define Y_MIN_PIN          -1
253
-#endif
254
-
255
-#if ENABLED(DISABLE_ZMAX_ENDSTOP)
227
+#if DISABLED(USE_ZMAX_PLUG)
256 228
   #undef Z_MAX_PIN
257 229
   #define Z_MAX_PIN          -1
258 230
 #endif
259 231
 
260
-#if ENABLED(DISABLE_ZMIN_ENDSTOP)
232
+#if DISABLED(USE_XMIN_PLUG)
233
+  #undef X_MIN_PIN
234
+  #define X_MIN_PIN          -1
235
+#endif
236
+
237
+#if DISABLED(USE_YMIN_PLUG)
238
+  #undef Y_MIN_PIN
239
+  #define Y_MIN_PIN          -1
240
+#endif
241
+
242
+#if DISABLED(USE_ZMIN_PLUG)
261 243
   #undef Z_MIN_PIN
262 244
   #define Z_MIN_PIN          -1
263 245
 #endif

+ 0
- 2
Marlin/pins_FELIX2.h View File

@@ -29,8 +29,6 @@
29 29
 #undef HEATER_1_PIN
30 30
 #define HEATER_1_PIN        7 // EXTRUDER 2
31 31
 
32
-#define DISABLE_MAX_ENDSTOPS
33
-
34 32
 #undef SDPOWER
35 33
 #define SDPOWER             1
36 34
 

+ 1
- 1
Marlin/pins_MEGATRONICS_3.h View File

@@ -39,7 +39,7 @@
39 39
 #define SERVO0_PIN         46 //AUX3-6
40 40
 #define SERVO1_PIN         47 //AUX3-5
41 41
 #define SERVO2_PIN         48 //AUX3-4
42
-#define SERVO2_PIN         49 //AUX3-3
42
+#define SERVO3_PIN         49 //AUX3-3
43 43
 
44 44
 #define X_STEP_PIN         58
45 45
 #define X_DIR_PIN          57

+ 23
- 14
Marlin/planner.cpp View File

@@ -852,25 +852,34 @@ float junction_deviation = 0.1;
852 852
   block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0
853 853
 
854 854
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
855
+    static float filwidth_e_count = 0, filwidth_delay_dist = 0;
856
+
855 857
     //FMM update ring buffer used for delay with filament measurements
856
-    if (extruder == FILAMENT_SENSOR_EXTRUDER_NUM && delay_index2 > -1) {  //only for extruder with filament sensor and if ring buffer is initialized
858
+    if (extruder == FILAMENT_SENSOR_EXTRUDER_NUM && filwidth_delay_index2 >= 0) {  //only for extruder with filament sensor and if ring buffer is initialized
859
+
860
+      const int MMD_CM = MAX_MEASUREMENT_DELAY + 1, MMD_MM = MMD_CM * 10;
861
+
862
+      // increment counters with next move in e axis
863
+      filwidth_e_count += delta_mm[E_AXIS];
864
+      filwidth_delay_dist += delta_mm[E_AXIS];
857 865
 
858
-      const int MMD = MAX_MEASUREMENT_DELAY + 1, MMD10 = MMD * 10;
866
+      // Only get new measurements on forward E movement
867
+      if (filwidth_e_count > 0.0001) {
859 868
 
860
-      delay_dist += delta_mm[E_AXIS];  // increment counter with next move in e axis
861
-      while (delay_dist >= MMD10) delay_dist -= MMD10; // loop around the buffer
862
-      while (delay_dist < 0) delay_dist += MMD10;
869
+        // Loop the delay distance counter (modulus by the mm length)
870
+        while (filwidth_delay_dist >= MMD_MM) filwidth_delay_dist -= MMD_MM;
863 871
 
864
-      delay_index1 = delay_dist / 10.0;  // calculate index
865
-      delay_index1 = constrain(delay_index1, 0, MAX_MEASUREMENT_DELAY); // (already constrained above)
872
+        // Convert into an index into the measurement array
873
+        filwidth_delay_index1 = (int)(filwidth_delay_dist / 10.0 + 0.0001);
866 874
 
867
-      if (delay_index1 != delay_index2) { // moved index
868
-        int8_t meas_sample = widthFil_to_size_ratio() - 100;  // Subtract 100 to reduce magnitude - to store in a signed char
869
-        while (delay_index1 != delay_index2) {
870
-          // Increment and loop around buffer
871
-          if (++delay_index2 >= MMD) delay_index2 -= MMD;
872
-          delay_index2 = constrain(delay_index2, 0, MAX_MEASUREMENT_DELAY);
873
-          measurement_delay[delay_index2] = meas_sample;
875
+        // If the index has changed (must have gone forward)...
876
+        if (filwidth_delay_index1 != filwidth_delay_index2) {
877
+          filwidth_e_count = 0; // Reset the E movement counter
878
+          int8_t meas_sample = widthFil_to_size_ratio() - 100; // Subtract 100 to reduce magnitude - to store in a signed char
879
+          do {
880
+            filwidth_delay_index2 = (filwidth_delay_index2 + 1) % MMD_CM; // The next unused slot
881
+            measurement_delay[filwidth_delay_index2] = meas_sample;       // Store the measurement
882
+          } while (filwidth_delay_index1 != filwidth_delay_index2);       // More slots to fill?
874 883
         }
875 884
       }
876 885
     }

+ 14
- 0
Marlin/scripts/findMissingTranslations.sh View File

@@ -0,0 +1,14 @@
1
+#!/bin/bash
2
+IGNORE_DEFINES="LANGUAGE_EN_H MAPPER_NON SIMULATE_ROMFONT DISPLAY_CHARSET_ISO10646_1 MSG_H1 MSG_H2 MSG_H3 MSG_H4 MSG_MOVE_E1 MSG_MOVE_E2 MSG_MOVE_E3 MSG_MOVE_E4 MSG_N1 MSG_N2 MSG_N3 MSG_N4 MSG_DIAM_E1 MSG_DIAM_E2 MSG_DIAM_E3 MSG_DIAM_E4 MSG_E1 MSG_E2 MSG_E3 MSG_E4"
3
+
4
+for i in `awk '/#define/{print $2}' language_en.h`; do
5
+  for j in `ls language_*.h | grep -v language_en.h`; do
6
+    t=$(grep -c "${i}" ${j})
7
+    if [ "$t" -eq 0 ]; then
8
+      for k in ${IGNORE_DEFINES}; do
9
+        [ "${k}" == "${i}" ] && continue 2;
10
+      done
11
+      echo "${j},${i}"
12
+    fi
13
+  done
14
+done

+ 4
- 4
Marlin/stepper.cpp View File

@@ -294,20 +294,20 @@ void checkHitEndstops() {
294 294
     SERIAL_ECHO_START;
295 295
     SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT);
296 296
     if (TEST(endstop_hit_bits, X_MIN)) {
297
-      SERIAL_ECHOPAIR(" X:", (float)endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]);
297
+      SERIAL_ECHOPAIR(" X:", endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]);
298 298
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "X");
299 299
     }
300 300
     if (TEST(endstop_hit_bits, Y_MIN)) {
301
-      SERIAL_ECHOPAIR(" Y:", (float)endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]);
301
+      SERIAL_ECHOPAIR(" Y:", endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]);
302 302
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Y");
303 303
     }
304 304
     if (TEST(endstop_hit_bits, Z_MIN)) {
305
-      SERIAL_ECHOPAIR(" Z:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
305
+      SERIAL_ECHOPAIR(" Z:", endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
306 306
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Z");
307 307
     }
308 308
     #if ENABLED(Z_MIN_PROBE_ENDSTOP)
309 309
       if (TEST(endstop_hit_bits, Z_MIN_PROBE)) {
310
-        SERIAL_ECHOPAIR(" Z_MIN_PROBE:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
310
+        SERIAL_ECHOPAIR(" Z_MIN_PROBE:", endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
311 311
         LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "ZP");
312 312
       }
313 313
     #endif

+ 77
- 0
Marlin/stopwatch.cpp View File

@@ -0,0 +1,77 @@
1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 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
+
23
+#include "Marlin.h"
24
+#include "stopwatch.h"
25
+
26
+Stopwatch::Stopwatch() {
27
+   this->reset();
28
+ }
29
+
30
+void Stopwatch::stop() {
31
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::stop()");
32
+  if (!this->isRunning()) return;
33
+
34
+  this->status = STPWTCH_STOPPED;
35
+  this->stopTimestamp = millis();
36
+}
37
+
38
+void Stopwatch::pause() {
39
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::pause()");
40
+  if (!this->isRunning()) return;
41
+
42
+  this->status = STPWTCH_PAUSED;
43
+  this->stopTimestamp = millis();
44
+}
45
+
46
+void Stopwatch::start() {
47
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::start()");
48
+  if (this->isRunning()) return;
49
+
50
+  if (this->isPaused()) this->accumulator = this->duration();
51
+  else this->reset();
52
+
53
+  this->status = STPWTCH_RUNNING;
54
+  this->startTimestamp = millis();
55
+}
56
+
57
+void Stopwatch::reset() {
58
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::reset()");
59
+
60
+  this->status = STPWTCH_STOPPED;
61
+  this->startTimestamp = 0;
62
+  this->stopTimestamp = 0;
63
+  this->accumulator = 0;
64
+}
65
+
66
+bool Stopwatch::isRunning() {
67
+  return (this->status == STPWTCH_RUNNING) ? true : false;
68
+}
69
+
70
+bool Stopwatch::isPaused() {
71
+  return (this->status == STPWTCH_PAUSED) ? true : false;
72
+}
73
+
74
+uint16_t Stopwatch::duration() {
75
+  return (((this->isRunning()) ? millis() : this->stopTimestamp)
76
+          - this->startTimestamp) / 1000 + this->accumulator;
77
+}

+ 99
- 0
Marlin/stopwatch.h View File

@@ -0,0 +1,99 @@
1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 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
+
23
+#ifndef STOPWATCH_H
24
+#define STOPWATCH_H
25
+
26
+enum StopwatchStatus {
27
+  STPWTCH_STOPPED = 0x0,
28
+  STPWTCH_RUNNING = 0x1,
29
+  STPWTCH_PAUSED  = 0x2
30
+};
31
+
32
+/**
33
+ * @brief Stopwatch class
34
+ * @details This class acts as a timer proving stopwatch functionality including
35
+ * the ability to pause the running time counter.
36
+ */
37
+class Stopwatch {
38
+  private:
39
+    StopwatchStatus status;
40
+    uint16_t accumulator;
41
+    uint32_t startTimestamp;
42
+    uint32_t stopTimestamp;
43
+
44
+  public:
45
+    /**
46
+     * @brief Class constructor
47
+     */
48
+    Stopwatch();
49
+
50
+    /**
51
+     * @brief Stops the stopwatch
52
+     * @details Stops the running timer, it will silently ignore the request if
53
+     * no timer is currently running.
54
+     */
55
+    void stop();
56
+
57
+    /**
58
+     * @brief Pauses the stopwatch
59
+     * @details Pauses the running timer, it will silently ignore the request if
60
+     * no timer is currently running.
61
+     */
62
+    void pause();
63
+
64
+    /**
65
+     * @brief Starts the stopwatch
66
+     * @details Starts the timer, it will silently ignore the request if the
67
+     * timer is already running.
68
+     */
69
+    void start();
70
+
71
+    /**
72
+     * @brief Resets the stopwatch
73
+     * @details Resets all settings to their default values.
74
+     */
75
+    void reset();
76
+
77
+    /**
78
+     * @brief Checks if the timer is running
79
+     * @details Returns true if the timer is currently running, false otherwise.
80
+     * @return bool
81
+     */
82
+    bool isRunning();
83
+
84
+    /**
85
+     * @brief Checks if the timer is paused
86
+     * @details Returns true if the timer is currently paused, false otherwise.
87
+     * @return bool
88
+     */
89
+    bool isPaused();
90
+
91
+    /**
92
+     * @brief Gets the running time
93
+     * @details Returns the total number of seconds the timer has been running.
94
+     * @return uint16_t
95
+     */
96
+    uint16_t duration();
97
+};
98
+
99
+#endif //STOPWATCH_H

+ 4
- 4
Marlin/temperature.cpp View File

@@ -350,7 +350,7 @@ void PID_autotune(float temp, int extruder, int ncycles, bool set_result/*=false
350 350
     }
351 351
     // Every 2 seconds...
352 352
     if (ms > temp_ms + 2000) {
353
-      #if HAS_TEMP_0 || HAS_TEMP_BED || ENABLED(HEATER_0_USES_MAX6675)
353
+      #if HAS_TEMP_HOTEND || HAS_TEMP_BED
354 354
         print_heaterstates();
355 355
         SERIAL_EOL;
356 356
       #endif
@@ -705,7 +705,7 @@ void manage_heater() {
705 705
   // Control the extruder rate based on the width sensor
706 706
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
707 707
     if (filament_sensor) {
708
-      meas_shift_index = delay_index1 - meas_delay_cm;
708
+      meas_shift_index = filwidth_delay_index1 - meas_delay_cm;
709 709
       if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1;  //loop around buffer if needed
710 710
 
711 711
       // Get the delayed info and add 100 to reconstitute to a percent of
@@ -1175,7 +1175,7 @@ void disable_all_heaters() {
1175 1175
   setTargetBed(0);
1176 1176
 
1177 1177
   // If all heaters go down then for sure our print job has stopped
1178
-  print_job_stop(true);
1178
+  print_job_timer.stop();
1179 1179
 
1180 1180
   #define DISABLE_HEATER(NR) { \
1181 1181
     setTargetHotend(NR, 0); \
@@ -1183,7 +1183,7 @@ void disable_all_heaters() {
1183 1183
     WRITE_HEATER_ ## NR (LOW); \
1184 1184
   }
1185 1185
 
1186
-  #if HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675)
1186
+  #if HAS_TEMP_HOTEND
1187 1187
     setTargetHotend(0, 0);
1188 1188
     soft_pwm[0] = 0;
1189 1189
     WRITE_HEATER_0P(LOW); // Should HEATERS_PARALLEL apply here? Then change to DISABLE_HEATER(0)

+ 1
- 1
Marlin/temperature.h View File

@@ -83,7 +83,7 @@ extern float current_temperature_bed;
83 83
 
84 84
   #if ENABLED(PID_PARAMS_PER_EXTRUDER)
85 85
     extern float Kp[EXTRUDERS], Ki[EXTRUDERS], Kd[EXTRUDERS], Kc[EXTRUDERS]; // one param per extruder
86
-    #define PID_PARAM(param,e) param[e] // use macro to point to array value
86
+    #define PID_PARAM(param, e) param[e] // use macro to point to array value
87 87
   #else
88 88
     extern float Kp, Ki, Kd, Kc; // one param per extruder - saves 20 or 36 bytes of ram (inc array pointer)
89 89
     #define PID_PARAM(param, e) param // use macro to point directly to value

+ 104
- 0
Marlin/twibus.cpp View File

@@ -0,0 +1,104 @@
1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 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
+
23
+#include "Marlin.h"
24
+
25
+#if ENABLED(EXPERIMENTAL_I2CBUS)
26
+
27
+#include "twibus.h"
28
+
29
+#include <Wire.h>
30
+
31
+TWIBus::twibus() {
32
+  Wire.begin(); // We use no address so we will join the BUS as the master
33
+  this->reset();
34
+}
35
+
36
+void TWIBus::reset() {
37
+  this->addr = 0;
38
+  this->buffer_s = 0;
39
+  this->buffer[0] = 0x00;
40
+}
41
+
42
+void TWIBus::address(uint8_t addr) {
43
+  this->addr = addr;
44
+
45
+  if (DEBUGGING(INFO)) {
46
+    SERIAL_ECHOPAIR("TWIBus::sendto: ", this->addr);
47
+    SERIAL_EOL;
48
+  }
49
+}
50
+
51
+void TWIBus::addbyte(char c) {
52
+  if (buffer_s >= sizeof(this->buffer)) return;
53
+  this->buffer[this->buffer_s++] = c;
54
+
55
+  if (DEBUGGING(INFO)) {
56
+    SERIAL_ECHOPAIR("TWIBus::addbyte: ", this->buffer[this->buffer_s -1]);
57
+    SERIAL_EOL;
58
+  }
59
+}
60
+
61
+void TWIBus::send() {
62
+  if (!this->addr) return;
63
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("TWIBus::send()");
64
+
65
+  Wire.beginTransmission(this->addr);
66
+  Wire.write(this->buffer, this->buffer_s);
67
+  Wire.endTransmission();
68
+
69
+    // Reset the buffer after sending the data
70
+  this->reset();
71
+}
72
+
73
+void TWIBus::reqbytes(uint8_t bytes) {
74
+  if (!this->addr) return;
75
+  if (DEBUGGING(INFO)) {
76
+    SERIAL_ECHOPAIR("TWIBus::reqbytes(): ", bytes);
77
+    SERIAL_EOL;
78
+  }
79
+
80
+  millis_t t = millis();
81
+  Wire.requestFrom(this->addr, bytes);
82
+
83
+    // requestFrom() is a blocking function
84
+  while (Wire.available() < bytes) {
85
+    if (millis() - t >= this->timeout) break;
86
+    else continue;
87
+  }
88
+
89
+  SERIAL_ECHO_START;
90
+  SERIAL_ECHOPAIR("i2c-reply: from:", this->addr);
91
+  SERIAL_ECHOPAIR(" bytes:", Wire.available());
92
+  SERIAL_ECHOPGM (" data:");
93
+
94
+    // Protect against buffer overflows if the number of received bytes
95
+    // is less than the number of requested bytes
96
+  uint8_t wba = Wire.available();
97
+  for (int i = 0; i < wba; i++) SERIAL_CHAR(Wire.read());
98
+  SERIAL_EOL;
99
+
100
+  // Reset the buffer after sending the data
101
+  this->reset();
102
+}
103
+
104
+#endif //EXPERIMENTAL_I2CBUS

+ 122
- 0
Marlin/twibus.h View File

@@ -0,0 +1,122 @@
1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 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
+
23
+#ifndef TWIBUS_H
24
+#define TWIBUS_H
25
+
26
+/**
27
+ * TWIBUS class
28
+ *
29
+ * This class implements a wrapper around the two wire (I2C) bus, it allows
30
+ * Marlin to send and request data from any slave device on the bus. This is
31
+ * an experimental feature and it's inner workings as well as public facing
32
+ * interface are prune to change in the future.
33
+ *
34
+ * The two main consumers of this class are M155 and M156, where M155 allows
35
+ * Marlin to send a I2C packet to a device (please be aware that no repeated
36
+ * starts are possible), this can be done in caching method by calling multiple
37
+ * times M155 B<byte-1 value in base 10> or a one liner M155, have a look at
38
+ * the gcode_M155() function for more information. M156 allows Marlin to
39
+ * request data from a device, the received data is then relayed into the serial
40
+ * line for host interpretation.
41
+ *
42
+ */
43
+class TWIBus {
44
+  private:
45
+    /**
46
+     * @brief Timeout value in milliseconds
47
+     * @details For blocking operations this constant value will set the max
48
+     * amount of time Marlin will keep waiting for a reply. Useful is something
49
+     * goes wrong on the bus and the SDA/SCL lines are held up by another device.
50
+     */
51
+    const int timeout = 5;
52
+
53
+    /**
54
+     * @brief Target device address
55
+     * @description This stores, until the buffer is flushed, the target device
56
+     * address, take not we do follow Arduino 7bit addressing.
57
+     */
58
+    uint8_t addr = 0;
59
+
60
+    /**
61
+     * @brief Number of bytes on buffer
62
+     * @description This var holds the total number of bytes on our buffer
63
+     * waiting to be flushed to the bus.
64
+     */
65
+    uint8_t buffer_s = 0;
66
+
67
+    /**
68
+     * @brief Internal buffer
69
+     * @details This is a fixed buffer, TWI command cannot be longer than this
70
+     */
71
+    char buffer[30];
72
+
73
+
74
+  public:
75
+    /**
76
+     * @brief Class constructor
77
+     * @details Initialized the TWI bus and clears the buffer
78
+     */
79
+    TWIBus();
80
+
81
+    /**
82
+     * @brief Reset the buffer
83
+     * @details Brings the internal buffer to a known-empty state
84
+     */
85
+    void reset();
86
+
87
+    /**
88
+     * @brief Send the buffer data to the bus
89
+     * @details Flushed the buffer into the bus targeting the cached slave device
90
+     * address.
91
+     */
92
+    void send();
93
+
94
+    /**
95
+     * @brief Add one byte to the buffer
96
+     * @details Adds the byte to the buffer in a sequential way, if buffer is full
97
+     * the request is silently ignored.
98
+     *
99
+     * @param c a data byte
100
+     */
101
+    void addbyte(char c);
102
+
103
+    /**
104
+     * @brief Sets the target slave address
105
+     * @details The target slave address is stored so it can be later used when
106
+     * the complete packet needs to be sent over the bus.
107
+     *
108
+     * @param addr 7-bit integer address
109
+     */
110
+    void address(uint8_t addr);
111
+
112
+    /**
113
+     * @brief Request data from slave device
114
+     * @details Requests data from a slave device, when the data is received it will
115
+     * be relayed to the serial line using a parser-friendly formatting.
116
+     *
117
+     * @param bytes the number of bytes to request
118
+     */
119
+    void reqbytes(uint8_t bytes);
120
+};
121
+
122
+#endif //TWIBUS_H

+ 313
- 240
Marlin/ultralcd.cpp View File

@@ -111,13 +111,10 @@ static void lcd_status_screen();
111 111
 
112 112
   #if ENABLED(MANUAL_BED_LEVELING)
113 113
     #include "mesh_bed_leveling.h"
114
-    static void _lcd_level_bed();
115
-    static void _lcd_level_bed_homing();
116
-    static void lcd_level_bed();
117 114
   #endif
118 115
 
119 116
   /* Different types of actions that can be used in menu items. */
120
-  static void menu_action_back(menuFunc_t data);
117
+  static void menu_action_back();
121 118
   static void menu_action_submenu(menuFunc_t data);
122 119
   static void menu_action_gcode(const char* pgcode);
123 120
   static void menu_action_function(menuFunc_t data);
@@ -188,9 +185,9 @@ static void lcd_status_screen();
188 185
    *   menu_action_[type](arg3...)
189 186
    *
190 187
    * Examples:
191
-   *   MENU_ITEM(back, MSG_WATCH, lcd_status_screen)
192
-   *     lcd_implementation_drawmenu_back(sel, row, PSTR(MSG_WATCH), lcd_status_screen)
193
-   *     menu_action_back(lcd_status_screen)
188
+   *   MENU_ITEM(back, MSG_WATCH)
189
+   *     lcd_implementation_drawmenu_back(sel, row, PSTR(MSG_WATCH))
190
+   *     menu_action_back()
194 191
    *
195 192
    *   MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause)
196 193
    *     lcd_implementation_drawmenu_function(sel, row, PSTR(MSG_PAUSE_PRINT), lcd_sdcard_pause)
@@ -267,14 +264,25 @@ static void lcd_status_screen();
267 264
   uint8_t currentMenuViewOffset;              /* scroll offset in the current menu */
268 265
   millis_t next_button_update_ms;
269 266
   uint8_t lastEncoderBits;
270
-  uint32_t encoderPosition, prevEncoderPosition;
267
+  uint32_t encoderPosition;
271 268
   #if PIN_EXISTS(SD_DETECT)
272 269
     uint8_t lcd_sd_status;
273 270
   #endif
274 271
 
275 272
 #endif // ULTIPANEL
276 273
 
277
-menuFunc_t currentMenu = lcd_status_screen; /* function pointer to the currently active menu */
274
+typedef struct {
275
+  menuFunc_t menu_function;
276
+  #if ENABLED(ULTIPANEL)
277
+    uint32_t encoder_position;
278
+  #endif
279
+} menuPosition;
280
+
281
+menuFunc_t currentMenu = lcd_status_screen; // pointer to the currently active menu handler
282
+
283
+menuPosition menu_history[10];
284
+uint8_t menu_history_depth = 0;
285
+
278 286
 millis_t next_lcd_update_ms;
279 287
 uint8_t lcd_status_update_delay;
280 288
 bool ignore_click = false;
@@ -285,7 +293,7 @@ enum LCDHandlerAction {
285 293
   LCD_DRAW_UPDATE_NONE,
286 294
   LCD_DRAW_UPDATE_CALL_REDRAW,
287 295
   LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW,
288
-  LCD_DRAW_UPDATE_CALL_NO_REDRAW,
296
+  LCD_DRAW_UPDATE_CALL_NO_REDRAW
289 297
 };
290 298
 
291 299
 uint8_t lcdDrawUpdate = LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW; // Set 1 or 2 when the LCD needs to draw, decrements after every draw. Set to 2 in LCD routines so the LCD gets at least 1 full redraw (first redraw is partial)
@@ -294,7 +302,6 @@ uint8_t lcdDrawUpdate = LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW; // Set 1 or 2 when th
294 302
 const char* editLabel;
295 303
 void* editValue;
296 304
 int32_t minEditValue, maxEditValue;
297
-menuFunc_t prevMenu = NULL;           // return here after editing (also prevEncoderPosition)
298 305
 menuFunc_t callbackFunc;              // call this after editing
299 306
 
300 307
 // place-holders for Ki and Kd edits
@@ -302,6 +309,7 @@ float raw_Ki, raw_Kd;
302 309
 
303 310
 /**
304 311
  * General function to go directly to a menu
312
+ * Remembers the previous position
305 313
  */
306 314
 static void lcd_goto_menu(menuFunc_t menu, const bool feedback = false, const uint32_t encoder = 0) {
307 315
   if (currentMenu != menu) {
@@ -311,26 +319,40 @@ static void lcd_goto_menu(menuFunc_t menu, const bool feedback = false, const ui
311 319
       encoderPosition = encoder;
312 320
       if (feedback) lcd_quick_feedback();
313 321
     #endif
314
-    // For LCD_PROGRESS_BAR re-initialize the custom characters
322
+    if (menu == lcd_status_screen) {
323
+      defer_return_to_status = false;
324
+      menu_history_depth = 0;
325
+    }
315 326
     #if ENABLED(LCD_PROGRESS_BAR)
327
+      // For LCD_PROGRESS_BAR re-initialize custom characters
316 328
       lcd_set_custom_characters(menu == lcd_status_screen);
317 329
     #endif
318 330
   }
319 331
 }
320 332
 
321
-inline void lcd_save_previous_menu() {
322
-  prevMenu = currentMenu;
323
-  #if ENABLED(ULTIPANEL)
324
-    prevEncoderPosition = encoderPosition;
325
-  #endif
326
-}
333
+static void lcd_return_to_status() { lcd_goto_menu(lcd_status_screen); }
327 334
 
328
-static void lcd_goto_previous_menu() {
329
-  lcd_goto_menu(prevMenu, true
335
+inline void lcd_save_previous_menu() {
336
+  if (menu_history_depth < COUNT(menu_history)) {
337
+    menu_history[menu_history_depth].menu_function = currentMenu;
330 338
     #if ENABLED(ULTIPANEL)
331
-      , prevEncoderPosition
339
+      menu_history[menu_history_depth].encoder_position = encoderPosition;
332 340
     #endif
333
-  );
341
+    ++menu_history_depth;
342
+  }
343
+}
344
+
345
+static void lcd_goto_previous_menu(bool feedback=false) {
346
+  if (menu_history_depth > 0) {
347
+    --menu_history_depth;
348
+    lcd_goto_menu(menu_history[menu_history_depth].menu_function, feedback
349
+      #if ENABLED(ULTIPANEL)
350
+        , menu_history[menu_history_depth].encoder_position
351
+      #endif
352
+    );
353
+  }
354
+  else
355
+    lcd_return_to_status();
334 356
 }
335 357
 
336 358
 /**
@@ -410,13 +432,13 @@ static void lcd_status_screen() {
410 432
     }
411 433
 
412 434
     #if ENABLED(ULTIPANEL_FEEDMULTIPLY)
435
+      int new_frm = feedrate_multiplier + int(encoderPosition);
413 436
       // Dead zone at 100% feedrate
414
-      if ((feedrate_multiplier < 100 && (feedrate_multiplier + int(encoderPosition)) > 100) ||
415
-          (feedrate_multiplier > 100 && (feedrate_multiplier + int(encoderPosition)) < 100)) {
416
-        encoderPosition = 0;
437
+      if ((feedrate_multiplier < 100 && new_frm > 100) || (feedrate_multiplier > 100 && new_frm < 100)) {
417 438
         feedrate_multiplier = 100;
439
+        encoderPosition = 0;
418 440
       }
419
-      if (feedrate_multiplier == 100) {
441
+      else if (feedrate_multiplier == 100) {
420 442
         if (int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE) {
421 443
           feedrate_multiplier += int(encoderPosition) - (ENCODER_FEEDRATE_DEADZONE);
422 444
           encoderPosition = 0;
@@ -427,7 +449,7 @@ static void lcd_status_screen() {
427 449
         }
428 450
       }
429 451
       else {
430
-        feedrate_multiplier += int(encoderPosition);
452
+        feedrate_multiplier = new_frm;
431 453
         encoderPosition = 0;
432 454
       }
433 455
     #endif // ULTIPANEL_FEEDMULTIPLY
@@ -439,9 +461,13 @@ static void lcd_status_screen() {
439 461
 
440 462
 #if ENABLED(ULTIPANEL)
441 463
 
442
-static void lcd_return_to_status() {
443
-  defer_return_to_status = false;
444
-  lcd_goto_menu(lcd_status_screen);
464
+inline void line_to_current(AxisEnum axis) {
465
+  #if ENABLED(DELTA)
466
+    calculate_delta(current_position);
467
+    plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
468
+  #else
469
+    plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
470
+  #endif
445 471
 }
446 472
 
447 473
 #if ENABLED(SDSUPPORT)
@@ -469,7 +495,7 @@ static void lcd_return_to_status() {
469 495
 
470 496
 static void lcd_main_menu() {
471 497
   START_MENU();
472
-  MENU_ITEM(back, MSG_WATCH, lcd_status_screen);
498
+  MENU_ITEM(back, MSG_WATCH);
473 499
   if (movesplanned() || IS_SD_PRINTING) {
474 500
     MENU_ITEM(submenu, MSG_TUNE, lcd_tune_menu);
475 501
   }
@@ -508,13 +534,11 @@ static void lcd_main_menu() {
508 534
   END_MENU();
509 535
 }
510 536
 
511
-#if ENABLED(SDSUPPORT) && ENABLED(MENU_ADDAUTOSTART)
512
-  static void lcd_autostart_sd() {
513
-    card.autostart_index = 0;
514
-    card.setroot();
515
-    card.checkautostart(true);
516
-  }
517
-#endif
537
+/**
538
+ *
539
+ * "Tune" submenu items
540
+ *
541
+ */
518 542
 
519 543
 /**
520 544
  * Set the home offset based on the current_position
@@ -529,7 +553,7 @@ void lcd_set_home_offsets() {
529 553
 
530 554
   static void _lcd_babystep(const int axis, const char* msg) {
531 555
     ENCODER_DIRECTION_NORMAL();
532
-    if (encoderPosition != 0) {
556
+    if (encoderPosition) {
533 557
       int distance =  (int)encoderPosition * BABYSTEP_MULTIPLICATOR;
534 558
       encoderPosition = 0;
535 559
       lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_REDRAW;
@@ -559,7 +583,7 @@ void lcd_set_home_offsets() {
559 583
       #endif
560 584
     }
561 585
     if (lcdDrawUpdate) lcd_implementation_drawedit(msg, NULL);
562
-    if (LCD_CLICKED) lcd_goto_previous_menu();
586
+    if (LCD_CLICKED) lcd_goto_previous_menu(true);
563 587
   }
564 588
 
565 589
   #if ENABLED(BABYSTEP_XY)
@@ -612,7 +636,7 @@ static void lcd_tune_menu() {
612 636
   //
613 637
   // ^ Main
614 638
   //
615
-  MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
639
+  MENU_ITEM(back, MSG_MAIN);
616 640
 
617 641
   //
618 642
   // Speed:
@@ -722,10 +746,17 @@ static void lcd_tune_menu() {
722 746
   END_MENU();
723 747
 }
724 748
 
749
+/**
750
+ *
751
+ * "Prepare" submenu items
752
+ *
753
+ */
725 754
 void _lcd_preheat(int endnum, const float temph, const float tempb, const int fan) {
726 755
   if (temph > 0) setTargetHotend(temph, endnum);
727 756
   #if TEMP_SENSOR_BED != 0
728 757
     setTargetBed(tempb);
758
+  #else
759
+    UNUSED(tempb);
729 760
   #endif
730 761
   #if FAN_COUNT > 0
731 762
     #if FAN_COUNT > 1
@@ -733,6 +764,8 @@ void _lcd_preheat(int endnum, const float temph, const float tempb, const int fa
733 764
     #else
734 765
       fanSpeeds[0] = fan;
735 766
     #endif
767
+  #else
768
+    UNUSED(fan);
736 769
   #endif
737 770
   lcd_return_to_status();
738 771
 }
@@ -778,7 +811,7 @@ void _lcd_preheat(int endnum, const float temph, const float tempb, const int fa
778 811
 
779 812
   static void lcd_preheat_pla_menu() {
780 813
     START_MENU();
781
-    MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
814
+    MENU_ITEM(back, MSG_PREPARE);
782 815
     #if EXTRUDERS == 1
783 816
       MENU_ITEM(function, MSG_PREHEAT_PLA, lcd_preheat_pla0);
784 817
     #else
@@ -800,7 +833,7 @@ void _lcd_preheat(int endnum, const float temph, const float tempb, const int fa
800 833
 
801 834
   static void lcd_preheat_abs_menu() {
802 835
     START_MENU();
803
-    MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
836
+    MENU_ITEM(back, MSG_PREPARE);
804 837
     #if EXTRUDERS == 1
805 838
       MENU_ITEM(function, MSG_PREHEAT_ABS, lcd_preheat_abs0);
806 839
     #else
@@ -830,6 +863,158 @@ void lcd_cooldown() {
830 863
   lcd_return_to_status();
831 864
 }
832 865
 
866
+#if ENABLED(SDSUPPORT) && ENABLED(MENU_ADDAUTOSTART)
867
+
868
+  static void lcd_autostart_sd() {
869
+    card.autostart_index = 0;
870
+    card.setroot();
871
+    card.checkautostart(true);
872
+  }
873
+
874
+#endif
875
+
876
+#if ENABLED(MANUAL_BED_LEVELING)
877
+
878
+  /**
879
+   *
880
+   * "Prepare" > "Bed Leveling" handlers
881
+   *
882
+   */
883
+
884
+  static int _lcd_level_bed_position;
885
+
886
+  /**
887
+   * MBL Wait for controller movement and clicks:
888
+   *   - Movement adjusts the Z axis
889
+   *   - Click saves the Z and goes to the next mesh point
890
+   */
891
+  static void _lcd_level_bed_procedure() {
892
+    static bool mbl_wait_for_move = false;
893
+    // Menu handlers may be called in a re-entrant fashion
894
+    // if they call st_synchronize or plan_buffer_line. So
895
+    // while waiting for a move we just ignore new input.
896
+    if (mbl_wait_for_move) {
897
+      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
898
+      return;
899
+    }
900
+
901
+    ENCODER_DIRECTION_NORMAL();
902
+
903
+    // Encoder wheel adjusts the Z position
904
+    if (encoderPosition && movesplanned() <= 3) {
905
+      refresh_cmd_timeout();
906
+      current_position[Z_AXIS] += float((int)encoderPosition) * (MBL_Z_STEP);
907
+      if (min_software_endstops) NOLESS(current_position[Z_AXIS], Z_MIN_POS);
908
+      if (max_software_endstops) NOMORE(current_position[Z_AXIS], Z_MAX_POS);
909
+      encoderPosition = 0;
910
+      line_to_current(Z_AXIS);
911
+      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
912
+    }
913
+
914
+    // Update on first display, then only on updates to Z position
915
+    if (lcdDrawUpdate) {
916
+      float v = current_position[Z_AXIS] - MESH_HOME_SEARCH_Z;
917
+      lcd_implementation_drawedit(PSTR(MSG_MOVE_Z), ftostr43(v + (v < 0 ? -0.0001 : 0.0001), '+'));
918
+    }
919
+
920
+    // We want subsequent calls, but don't force redraw
921
+    // Set here so it can be overridden by lcd_return_to_status below
922
+    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
923
+
924
+    // Click sets the current Z and moves to the next position
925
+    static bool debounce_click = false;
926
+    if (LCD_CLICKED) {
927
+      if (!debounce_click) {
928
+        debounce_click = true; // ignore multiple "clicks" in a row
929
+        int ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS),
930
+            iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
931
+        if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
932
+        mbl.set_z(ix, iy, current_position[Z_AXIS]);
933
+        _lcd_level_bed_position++;
934
+        if (_lcd_level_bed_position == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS)) {
935
+          lcd_return_to_status();
936
+          LCD_ALERTMESSAGEPGM(MSG_LEVEL_BED_DONE);
937
+          #if HAS_BUZZER
938
+            buzz(200, 659);
939
+            buzz(200, 698);
940
+          #endif
941
+          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
942
+          line_to_current(Z_AXIS);
943
+          st_synchronize();
944
+          mbl.active = 1;
945
+          enqueue_and_echo_commands_P(PSTR("G28"));
946
+        }
947
+        else {
948
+          #if ENABLED(NEWPANEL)
949
+            lcd_quick_feedback();
950
+          #endif
951
+          mbl_wait_for_move = true;
952
+          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
953
+          line_to_current(Z_AXIS);
954
+          ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS);
955
+          iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
956
+          if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
957
+          current_position[X_AXIS] = mbl.get_x(ix);
958
+          current_position[Y_AXIS] = mbl.get_y(iy);
959
+          line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
960
+          st_synchronize();
961
+          mbl_wait_for_move = false;
962
+          encoderPosition = 0;
963
+        }
964
+      }
965
+    }
966
+    else {
967
+      debounce_click = false;
968
+    }
969
+  }
970
+
971
+  static void _lcd_level_bed_homing_done() {
972
+    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_WAITING), NULL);
973
+    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
974
+    if (LCD_CLICKED) {
975
+      current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
976
+      plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
977
+      current_position[X_AXIS] = MESH_MIN_X;
978
+      current_position[Y_AXIS] = MESH_MIN_Y;
979
+      line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
980
+      _lcd_level_bed_position = 0;
981
+      lcd_goto_menu(_lcd_level_bed_procedure, true);
982
+    }
983
+  }
984
+
985
+  /**
986
+   * MBL Move to mesh starting point
987
+   */
988
+  static void _lcd_level_bed_homing() {
989
+    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
990
+    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
991
+    if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])
992
+      lcd_goto_menu(_lcd_level_bed_homing_done);
993
+  }
994
+
995
+  /**
996
+   * MBL Continue Bed Leveling...
997
+   */
998
+  static void _lcd_level_bed_continue() {
999
+    defer_return_to_status = true;
1000
+    axis_known_position[X_AXIS] = axis_known_position[Y_AXIS] = axis_known_position[Z_AXIS] = false;
1001
+    mbl.reset();
1002
+    enqueue_and_echo_commands_P(PSTR("G28"));
1003
+    lcd_goto_menu(_lcd_level_bed_homing);
1004
+  }
1005
+
1006
+  /**
1007
+   * MBL entry-point
1008
+   */
1009
+  static void lcd_level_bed() {
1010
+    START_MENU();
1011
+    MENU_ITEM(back, MSG_LEVEL_BED_CANCEL);
1012
+    MENU_ITEM(submenu, MSG_LEVEL_BED, _lcd_level_bed_continue);
1013
+    END_MENU();
1014
+  }
1015
+
1016
+#endif  // MANUAL_BED_LEVELING
1017
+
833 1018
 /**
834 1019
  *
835 1020
  * "Prepare" submenu
@@ -842,7 +1027,7 @@ static void lcd_prepare_menu() {
842 1027
   //
843 1028
   // ^ Main
844 1029
   //
845
-  MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1030
+  MENU_ITEM(back, MSG_MAIN);
846 1031
 
847 1032
   //
848 1033
   // Auto Home
@@ -918,7 +1103,7 @@ static void lcd_prepare_menu() {
918 1103
 
919 1104
   static void lcd_delta_calibrate_menu() {
920 1105
     START_MENU();
921
-    MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1106
+    MENU_ITEM(back, MSG_MAIN);
922 1107
     MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
923 1108
     MENU_ITEM(gcode, MSG_DELTA_CALIBRATE_X, PSTR("G0 F8000 X-77.94 Y-45 Z0"));
924 1109
     MENU_ITEM(gcode, MSG_DELTA_CALIBRATE_Y, PSTR("G0 F8000 X77.94 Y-45 Z0"));
@@ -929,15 +1114,6 @@ static void lcd_prepare_menu() {
929 1114
 
930 1115
 #endif // DELTA_CALIBRATION_MENU
931 1116
 
932
-inline void line_to_current(AxisEnum axis) {
933
-  #if ENABLED(DELTA)
934
-    calculate_delta(current_position);
935
-    plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
936
-  #else
937
-    plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
938
-  #endif
939
-}
940
-
941 1117
 /**
942 1118
  *
943 1119
  * "Prepare" > "Move Axis" submenu
@@ -945,11 +1121,10 @@ inline void line_to_current(AxisEnum axis) {
945 1121
  */
946 1122
 
947 1123
 float move_menu_scale;
948
-static void lcd_move_menu_axis();
949 1124
 
950
-static void _lcd_move(const char* name, AxisEnum axis, int min, int max) {
1125
+static void _lcd_move(const char* name, AxisEnum axis, float min, float max) {
951 1126
   ENCODER_DIRECTION_NORMAL();
952
-  if ((encoderPosition != 0) && (movesplanned() <= 3)) {
1127
+  if (encoderPosition && movesplanned() <= 3) {
953 1128
     refresh_cmd_timeout();
954 1129
     current_position[axis] += float((int)encoderPosition) * move_menu_scale;
955 1130
     if (min_software_endstops) NOLESS(current_position[axis], min);
@@ -959,18 +1134,18 @@ static void _lcd_move(const char* name, AxisEnum axis, int min, int max) {
959 1134
     lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_REDRAW;
960 1135
   }
961 1136
   if (lcdDrawUpdate) lcd_implementation_drawedit(name, ftostr31(current_position[axis]));
962
-  if (LCD_CLICKED) lcd_goto_previous_menu();
1137
+  if (LCD_CLICKED) lcd_goto_previous_menu(true);
963 1138
 }
964 1139
 #if ENABLED(DELTA)
965 1140
   static float delta_clip_radius_2 =  (DELTA_PRINTABLE_RADIUS) * (DELTA_PRINTABLE_RADIUS);
966 1141
   static int delta_clip( float a ) { return sqrt(delta_clip_radius_2 - a*a); }
967
-  static void lcd_move_x() { int clip = delta_clip(current_position[Y_AXIS]); _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, max(X_MIN_POS, -clip), min(X_MAX_POS, clip)); }
968
-  static void lcd_move_y() { int clip = delta_clip(current_position[X_AXIS]); _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, max(Y_MIN_POS, -clip), min(Y_MAX_POS, clip)); }
1142
+  static void lcd_move_x() { int clip = delta_clip(current_position[Y_AXIS]); _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, max(min_pos[X_AXIS], -clip), min(max_pos[X_AXIS], clip)); }
1143
+  static void lcd_move_y() { int clip = delta_clip(current_position[X_AXIS]); _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, max(min_pos[Y_AXIS], -clip), min(max_pos[Y_AXIS], clip)); }
969 1144
 #else
970
-  static void lcd_move_x() { _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, X_MIN_POS, X_MAX_POS); }
971
-  static void lcd_move_y() { _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, Y_MIN_POS, Y_MAX_POS); }
1145
+  static void lcd_move_x() { _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, min_pos[X_AXIS], max_pos[X_AXIS]); }
1146
+  static void lcd_move_y() { _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, min_pos[Y_AXIS], max_pos[Y_AXIS]); }
972 1147
 #endif
973
-static void lcd_move_z() { _lcd_move(PSTR(MSG_MOVE_Z), Z_AXIS, Z_MIN_POS, Z_MAX_POS); }
1148
+static void lcd_move_z() { _lcd_move(PSTR(MSG_MOVE_Z), Z_AXIS, min_pos[Z_AXIS], max_pos[Z_AXIS]); }
974 1149
 static void lcd_move_e(
975 1150
   #if EXTRUDERS > 1
976 1151
     uint8_t e
@@ -981,7 +1156,7 @@ static void lcd_move_e(
981 1156
     unsigned short original_active_extruder = active_extruder;
982 1157
     active_extruder = e;
983 1158
   #endif
984
-  if ((encoderPosition != 0) && (movesplanned() <= 3)) {
1159
+  if (encoderPosition && movesplanned() <= 3) {
985 1160
     current_position[E_AXIS] += float((int)encoderPosition) * move_menu_scale;
986 1161
     encoderPosition = 0;
987 1162
     line_to_current(E_AXIS);
@@ -1005,7 +1180,7 @@ static void lcd_move_e(
1005 1180
     #endif //EXTRUDERS > 1
1006 1181
     lcd_implementation_drawedit(pos_label, ftostr31(current_position[E_AXIS]));
1007 1182
   }
1008
-  if (LCD_CLICKED) lcd_goto_previous_menu();
1183
+  if (LCD_CLICKED) lcd_goto_previous_menu(true);
1009 1184
   #if EXTRUDERS > 1
1010 1185
     active_extruder = original_active_extruder;
1011 1186
   #endif
@@ -1028,13 +1203,22 @@ static void lcd_move_e(
1028 1203
  *
1029 1204
  */
1030 1205
 
1031
-static void lcd_move_menu_axis() {
1206
+#if ENABLED(DELTA) || ENABLED(SCARA)
1207
+  #define _MOVE_XYZ_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
1208
+#else
1209
+  #define _MOVE_XYZ_ALLOWED true
1210
+#endif
1211
+
1212
+static void _lcd_move_menu_axis() {
1032 1213
   START_MENU();
1033
-  MENU_ITEM(back, MSG_MOVE_AXIS, lcd_move_menu);
1034
-  MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x);
1035
-  MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y);
1214
+  MENU_ITEM(back, MSG_MOVE_AXIS);
1215
+
1216
+  if (_MOVE_XYZ_ALLOWED) {
1217
+    MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x);
1218
+    MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y);
1219
+  }
1036 1220
   if (move_menu_scale < 10.0) {
1037
-    MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z);
1221
+    if (_MOVE_XYZ_ALLOWED) MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z);
1038 1222
     #if EXTRUDERS == 1
1039 1223
       MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e);
1040 1224
     #else
@@ -1053,15 +1237,15 @@ static void lcd_move_menu_axis() {
1053 1237
 
1054 1238
 static void lcd_move_menu_10mm() {
1055 1239
   move_menu_scale = 10.0;
1056
-  lcd_move_menu_axis();
1240
+  _lcd_move_menu_axis();
1057 1241
 }
1058 1242
 static void lcd_move_menu_1mm() {
1059 1243
   move_menu_scale = 1.0;
1060
-  lcd_move_menu_axis();
1244
+  _lcd_move_menu_axis();
1061 1245
 }
1062 1246
 static void lcd_move_menu_01mm() {
1063 1247
   move_menu_scale = 0.1;
1064
-  lcd_move_menu_axis();
1248
+  _lcd_move_menu_axis();
1065 1249
 }
1066 1250
 
1067 1251
 /**
@@ -1072,8 +1256,11 @@ static void lcd_move_menu_01mm() {
1072 1256
 
1073 1257
 static void lcd_move_menu() {
1074 1258
   START_MENU();
1075
-  MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
1076
-  MENU_ITEM(submenu, MSG_MOVE_10MM, lcd_move_menu_10mm);
1259
+  MENU_ITEM(back, MSG_PREPARE);
1260
+
1261
+  if (_MOVE_XYZ_ALLOWED)
1262
+    MENU_ITEM(submenu, MSG_MOVE_10MM, lcd_move_menu_10mm);
1263
+
1077 1264
   MENU_ITEM(submenu, MSG_MOVE_1MM, lcd_move_menu_1mm);
1078 1265
   MENU_ITEM(submenu, MSG_MOVE_01MM, lcd_move_menu_01mm);
1079 1266
   //TODO:X,Y,Z,E
@@ -1088,7 +1275,7 @@ static void lcd_move_menu() {
1088 1275
 
1089 1276
 static void lcd_control_menu() {
1090 1277
   START_MENU();
1091
-  MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1278
+  MENU_ITEM(back, MSG_MAIN);
1092 1279
   MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu);
1093 1280
   MENU_ITEM(submenu, MSG_MOTION, lcd_control_motion_menu);
1094 1281
   MENU_ITEM(submenu, MSG_VOLUMETRIC, lcd_control_volumetric_menu);
@@ -1146,10 +1333,16 @@ static void lcd_control_menu() {
1146 1333
   // Helpers for editing PID Ki & Kd values
1147 1334
   // grab the PID value out of the temp variable; scale it; then update the PID driver
1148 1335
   void copy_and_scalePID_i(int e) {
1336
+    #if DISABLED(PID_PARAMS_PER_EXTRUDER)
1337
+      UNUSED(e);
1338
+    #endif
1149 1339
     PID_PARAM(Ki, e) = scalePID_i(raw_Ki);
1150 1340
     updatePID();
1151 1341
   }
1152 1342
   void copy_and_scalePID_d(int e) {
1343
+    #if DISABLED(PID_PARAMS_PER_EXTRUDER)
1344
+      UNUSED(e);
1345
+    #endif
1153 1346
     PID_PARAM(Kd, e) = scalePID_d(raw_Kd);
1154 1347
     updatePID();
1155 1348
   }
@@ -1191,7 +1384,7 @@ static void lcd_control_temperature_menu() {
1191 1384
   //
1192 1385
   // ^ Control
1193 1386
   //
1194
-  MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1387
+  MENU_ITEM(back, MSG_CONTROL);
1195 1388
 
1196 1389
   //
1197 1390
   // Nozzle:
@@ -1323,7 +1516,7 @@ static void lcd_control_temperature_menu() {
1323 1516
  */
1324 1517
 static void lcd_control_temperature_preheat_pla_settings_menu() {
1325 1518
   START_MENU();
1326
-  MENU_ITEM(back, MSG_TEMPERATURE, lcd_control_temperature_menu);
1519
+  MENU_ITEM(back, MSG_TEMPERATURE);
1327 1520
   MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &plaPreheatFanSpeed, 0, 255);
1328 1521
   #if TEMP_SENSOR_0 != 0
1329 1522
     MENU_ITEM_EDIT(int3, MSG_NOZZLE, &plaPreheatHotendTemp, HEATER_0_MINTEMP, HEATER_0_MAXTEMP - 15);
@@ -1344,7 +1537,7 @@ static void lcd_control_temperature_preheat_pla_settings_menu() {
1344 1537
  */
1345 1538
 static void lcd_control_temperature_preheat_abs_settings_menu() {
1346 1539
   START_MENU();
1347
-  MENU_ITEM(back, MSG_TEMPERATURE, lcd_control_temperature_menu);
1540
+  MENU_ITEM(back, MSG_TEMPERATURE);
1348 1541
   MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &absPreheatFanSpeed, 0, 255);
1349 1542
   #if TEMP_SENSOR_0 != 0
1350 1543
     MENU_ITEM_EDIT(int3, MSG_NOZZLE, &absPreheatHotendTemp, HEATER_0_MINTEMP, HEATER_0_MAXTEMP - 15);
@@ -1365,7 +1558,7 @@ static void lcd_control_temperature_preheat_abs_settings_menu() {
1365 1558
  */
1366 1559
 static void lcd_control_motion_menu() {
1367 1560
   START_MENU();
1368
-  MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1561
+  MENU_ITEM(back, MSG_CONTROL);
1369 1562
   #if ENABLED(AUTO_BED_LEVELING_FEATURE)
1370 1563
     MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
1371 1564
   #endif
@@ -1418,7 +1611,7 @@ static void lcd_control_motion_menu() {
1418 1611
  */
1419 1612
 static void lcd_control_volumetric_menu() {
1420 1613
   START_MENU();
1421
-  MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1614
+  MENU_ITEM(back, MSG_CONTROL);
1422 1615
 
1423 1616
   MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &volumetric_enabled, calculate_volumetric_multipliers);
1424 1617
 
@@ -1448,7 +1641,7 @@ static void lcd_control_volumetric_menu() {
1448 1641
 #if ENABLED(HAS_LCD_CONTRAST)
1449 1642
   static void lcd_set_contrast() {
1450 1643
     ENCODER_DIRECTION_NORMAL();
1451
-    if (encoderPosition != 0) {
1644
+    if (encoderPosition) {
1452 1645
       #if ENABLED(U8GLIB_LM6059_AF)
1453 1646
         lcd_contrast += encoderPosition;
1454 1647
         lcd_contrast &= 0xFF;
@@ -1467,7 +1660,7 @@ static void lcd_control_volumetric_menu() {
1467 1660
         lcd_implementation_drawedit(PSTR(MSG_CONTRAST), itostr2(lcd_contrast));
1468 1661
       #endif
1469 1662
     }
1470
-    if (LCD_CLICKED) lcd_goto_previous_menu();
1663
+    if (LCD_CLICKED) lcd_goto_previous_menu(true);
1471 1664
   }
1472 1665
 #endif // HAS_LCD_CONTRAST
1473 1666
 
@@ -1479,7 +1672,7 @@ static void lcd_control_volumetric_menu() {
1479 1672
 #if ENABLED(FWRETRACT)
1480 1673
   static void lcd_control_retract_menu() {
1481 1674
     START_MENU();
1482
-    MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1675
+    MENU_ITEM(back, MSG_CONTROL);
1483 1676
     MENU_ITEM_EDIT(bool, MSG_AUTORETRACT, &autoretract_enabled);
1484 1677
     MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT, &retract_length, 0, 100);
1485 1678
     #if EXTRUDERS > 1
@@ -1520,7 +1713,7 @@ static void lcd_control_volumetric_menu() {
1520 1713
     if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) return; // nothing to do (so don't thrash the SD card)
1521 1714
     uint16_t fileCnt = card.getnrfilenames();
1522 1715
     START_MENU();
1523
-    MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1716
+    MENU_ITEM(back, MSG_MAIN);
1524 1717
     card.getWorkDirName();
1525 1718
     if (card.filename[0] == '/') {
1526 1719
       #if !PIN_EXISTS(SD_DETECT)
@@ -1589,7 +1782,7 @@ static void lcd_control_volumetric_menu() {
1589 1782
       lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \
1590 1783
     if (isClicked) { \
1591 1784
       *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \
1592
-      lcd_goto_previous_menu(); \
1785
+      lcd_goto_previous_menu(true); \
1593 1786
     } \
1594 1787
     return isClicked; \
1595 1788
   } \
@@ -1599,7 +1792,6 @@ static void lcd_control_volumetric_menu() {
1599 1792
     lcd_save_previous_menu(); \
1600 1793
     \
1601 1794
     lcdDrawUpdate = LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW; \
1602
-    currentMenu = menu_edit_ ## _name; \
1603 1795
     \
1604 1796
     editLabel = pstr; \
1605 1797
     editValue = ptr; \
@@ -1616,14 +1808,14 @@ static void lcd_control_volumetric_menu() {
1616 1808
     currentMenu = menu_edit_callback_ ## _name; \
1617 1809
     callbackFunc = callback; \
1618 1810
   }
1619
-menu_edit_type(int, int3, itostr3, 1)
1620
-menu_edit_type(float, float3, ftostr3, 1)
1621
-menu_edit_type(float, float32, ftostr32, 100)
1622
-menu_edit_type(float, float43, ftostr43, 1000)
1623
-menu_edit_type(float, float5, ftostr5, 0.01)
1624
-menu_edit_type(float, float51, ftostr51, 10)
1625
-menu_edit_type(float, float52, ftostr52, 100)
1626
-menu_edit_type(unsigned long, long5, ftostr5, 0.01)
1811
+menu_edit_type(int, int3, itostr3, 1);
1812
+menu_edit_type(float, float3, ftostr3, 1);
1813
+menu_edit_type(float, float32, ftostr32, 100);
1814
+menu_edit_type(float, float43, ftostr43, 1000);
1815
+menu_edit_type(float, float5, ftostr5, 0.01);
1816
+menu_edit_type(float, float51, ftostr51, 10);
1817
+menu_edit_type(float, float52, ftostr52, 100);
1818
+menu_edit_type(unsigned long, long5, ftostr5, 0.01);
1627 1819
 
1628 1820
 /**
1629 1821
  *
@@ -1662,7 +1854,7 @@ menu_edit_type(unsigned long, long5, ftostr5, 0.01)
1662 1854
     lcd_move_y();
1663 1855
   }
1664 1856
   static void reprapworld_keypad_move_home() {
1665
-    enqueue_and_echo_commands_P((PSTR("G28"))); // move all axis home
1857
+    enqueue_and_echo_commands_P(PSTR("G28")); // move all axes home
1666 1858
   }
1667 1859
 #endif // REPRAPWORLD_KEYPAD
1668 1860
 
@@ -1712,7 +1904,7 @@ void lcd_quick_feedback() {
1712 1904
  * Menu actions
1713 1905
  *
1714 1906
  */
1715
-static void menu_action_back(menuFunc_t func) { lcd_goto_menu(func); }
1907
+static void menu_action_back() { lcd_goto_previous_menu(); }
1716 1908
 static void menu_action_submenu(menuFunc_t func) { lcd_save_previous_menu(); lcd_goto_menu(func); }
1717 1909
 static void menu_action_gcode(const char* pgcode) { enqueue_and_echo_commands_P(pgcode); }
1718 1910
 static void menu_action_function(menuFunc_t func) { (*func)(); }
@@ -1720,18 +1912,20 @@ static void menu_action_function(menuFunc_t func) { (*func)(); }
1720 1912
 #if ENABLED(SDSUPPORT)
1721 1913
 
1722 1914
   static void menu_action_sdfile(const char* filename, char* longFilename) {
1915
+    UNUSED(longFilename);
1723 1916
     card.openAndPrintFile(filename);
1724 1917
     lcd_return_to_status();
1725 1918
   }
1726 1919
 
1727 1920
   static void menu_action_sddirectory(const char* filename, char* longFilename) {
1921
+    UNUSED(longFilename);
1728 1922
     card.chdir(filename);
1729 1923
     encoderPosition = 0;
1730 1924
   }
1731 1925
 
1732 1926
 #endif //SDSUPPORT
1733 1927
 
1734
-static void menu_action_setting_edit_bool(const char* pstr, bool* ptr) { *ptr = !(*ptr); }
1928
+static void menu_action_setting_edit_bool(const char* pstr, bool* ptr) {UNUSED(pstr); *ptr = !(*ptr); }
1735 1929
 static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr, menuFunc_t callback) {
1736 1930
   menu_action_setting_edit_bool(pstr, ptr);
1737 1931
   (*callback)();
@@ -1909,13 +2103,22 @@ void lcd_update() {
1909 2103
     #if ENABLED(ULTIPANEL)
1910 2104
 
1911 2105
       #if ENABLED(REPRAPWORLD_KEYPAD)
1912
-        if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
1913
-        if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN)   reprapworld_keypad_move_z_down();
1914
-        if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT)   reprapworld_keypad_move_x_left();
1915
-        if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT)  reprapworld_keypad_move_x_right();
1916
-        if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)   reprapworld_keypad_move_y_down();
1917
-        if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)     reprapworld_keypad_move_y_up();
1918
-        if (REPRAPWORLD_KEYPAD_MOVE_HOME)     reprapworld_keypad_move_home();
2106
+
2107
+        #if ENABLED(DELTA) || ENABLED(SCARA)
2108
+          #define _KEYPAD_MOVE_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2109
+        #else
2110
+          #define _KEYPAD_MOVE_ALLOWED true
2111
+        #endif
2112
+
2113
+        if (REPRAPWORLD_KEYPAD_MOVE_HOME)       reprapworld_keypad_move_home();
2114
+        if (_KEYPAD_MOVE_ALLOWED) {
2115
+          if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
2116
+          if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN)   reprapworld_keypad_move_z_down();
2117
+          if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT)   reprapworld_keypad_move_x_left();
2118
+          if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT)  reprapworld_keypad_move_x_right();
2119
+          if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)   reprapworld_keypad_move_y_down();
2120
+          if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)     reprapworld_keypad_move_y_up();
2121
+        }
1919 2122
       #endif
1920 2123
 
1921 2124
       bool encoderPastThreshold = (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP);
@@ -2000,7 +2203,7 @@ void lcd_update() {
2000 2203
       // Return to Status Screen after a timeout
2001 2204
       if (defer_return_to_status)
2002 2205
         return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
2003
-      else if (currentMenu != lcd_status_screen && millis() > return_to_status_ms) {
2206
+      else if (currentMenu != lcd_status_screen && ms > return_to_status_ms) {
2004 2207
         lcd_return_to_status();
2005 2208
       }
2006 2209
 
@@ -2031,6 +2234,10 @@ void lcd_ignore_click(bool b) {
2031 2234
 }
2032 2235
 
2033 2236
 void lcd_finishstatus(bool persist=false) {
2237
+  #if !(ENABLED(LCD_PROGRESS_BAR) && (PROGRESS_MSG_EXPIRE > 0))
2238
+    UNUSED(persist);
2239
+  #endif
2240
+
2034 2241
   #if ENABLED(LCD_PROGRESS_BAR)
2035 2242
     progress_bar_ms = millis();
2036 2243
     #if PROGRESS_MSG_EXPIRE > 0
@@ -2473,138 +2680,4 @@ char* ftostr52(const float& x) {
2473 2680
   return conv;
2474 2681
 }
2475 2682
 
2476
-#if ENABLED(MANUAL_BED_LEVELING)
2477
-
2478
-  static int _lcd_level_bed_position;
2479
-
2480
-  /**
2481
-   * MBL Wait for controller movement and clicks:
2482
-   *   - Movement adjusts the Z axis
2483
-   *   - Click saves the Z and goes to the next mesh point
2484
-   */
2485
-  static void _lcd_level_bed_procedure() {
2486
-    static bool mbl_wait_for_move = false;
2487
-    // Menu handlers may be called in a re-entrant fashion
2488
-    // if they call st_synchronize or plan_buffer_line. So
2489
-    // while waiting for a move we just ignore new input.
2490
-    if (mbl_wait_for_move) {
2491
-      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2492
-      return;
2493
-    }
2494
-
2495
-    ENCODER_DIRECTION_NORMAL();
2496
-
2497
-    // Encoder wheel adjusts the Z position
2498
-    if (encoderPosition != 0 && movesplanned() <= 3) {
2499
-      refresh_cmd_timeout();
2500
-      current_position[Z_AXIS] += float((int)encoderPosition) * (MBL_Z_STEP);
2501
-      if (min_software_endstops) NOLESS(current_position[Z_AXIS], Z_MIN_POS);
2502
-      if (max_software_endstops) NOMORE(current_position[Z_AXIS], Z_MAX_POS);
2503
-      encoderPosition = 0;
2504
-      line_to_current(Z_AXIS);
2505
-      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2506
-    }
2507
-
2508
-    // Update on first display, then only on updates to Z position
2509
-    if (lcdDrawUpdate) {
2510
-      float v = current_position[Z_AXIS] - MESH_HOME_SEARCH_Z;
2511
-      lcd_implementation_drawedit(PSTR(MSG_MOVE_Z), ftostr43(v + (v < 0 ? -0.0001 : 0.0001), '+'));
2512
-    }
2513
-
2514
-    // We want subsequent calls, but don't force redraw
2515
-    // Set here so it can be overridden by lcd_return_to_status below
2516
-    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2517
-
2518
-    // Click sets the current Z and moves to the next position
2519
-    static bool debounce_click = false;
2520
-    if (LCD_CLICKED) {
2521
-      if (!debounce_click) {
2522
-        debounce_click = true; // ignore multiple "clicks" in a row
2523
-        int ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS),
2524
-            iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
2525
-        if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
2526
-        mbl.set_z(ix, iy, current_position[Z_AXIS]);
2527
-        _lcd_level_bed_position++;
2528
-        if (_lcd_level_bed_position == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS)) {
2529
-          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
2530
-          mbl_wait_for_move = true;
2531
-          line_to_current(Z_AXIS);
2532
-          st_synchronize();
2533
-          mbl.active = 1;
2534
-          enqueue_and_echo_commands_P(PSTR("G28"));
2535
-          mbl_wait_for_move = false;
2536
-          lcd_return_to_status();
2537
-          #if ENABLED(NEWPANEL)
2538
-            lcd_quick_feedback();
2539
-          #endif
2540
-          LCD_ALERTMESSAGEPGM(MSG_LEVEL_BED_DONE);
2541
-          #if HAS_BUZZER
2542
-            buzz(200, 659);
2543
-            buzz(200, 698);
2544
-          #endif
2545
-        }
2546
-        else {
2547
-          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
2548
-          line_to_current(Z_AXIS);
2549
-          ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS);
2550
-          iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
2551
-          if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
2552
-          current_position[X_AXIS] = mbl.get_x(ix);
2553
-          current_position[Y_AXIS] = mbl.get_y(iy);
2554
-          line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
2555
-        }
2556
-      }
2557
-    }
2558
-    else {
2559
-      debounce_click = false;
2560
-    }
2561
-  }
2562
-
2563
-  static void _lcd_level_bed_homing_done() {
2564
-    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_WAITING), NULL);
2565
-    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2566
-    if (LCD_CLICKED) {
2567
-      current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
2568
-      plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2569
-      current_position[X_AXIS] = MESH_MIN_X;
2570
-      current_position[Y_AXIS] = MESH_MIN_Y;
2571
-      line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
2572
-      _lcd_level_bed_position = 0;
2573
-      lcd_goto_menu(_lcd_level_bed_procedure, true);
2574
-    }
2575
-  }
2576
-
2577
-  /**
2578
-   * MBL Move to mesh starting point
2579
-   */
2580
-  static void _lcd_level_bed_homing() {
2581
-    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
2582
-    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2583
-    if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])
2584
-      lcd_goto_menu(_lcd_level_bed_homing_done);
2585
-  }
2586
-
2587
-  /**
2588
-   * MBL Continue Bed Leveling...
2589
-   */
2590
-  static void _lcd_level_bed_continue() {
2591
-    defer_return_to_status = true;
2592
-    axis_known_position[X_AXIS] = axis_known_position[Y_AXIS] = axis_known_position[Z_AXIS] = false;
2593
-    mbl.reset();
2594
-    enqueue_and_echo_commands_P(PSTR("G28"));
2595
-    lcd_goto_menu(_lcd_level_bed_homing, true);
2596
-  }
2597
-
2598
-  /**
2599
-   * MBL entry-point
2600
-   */
2601
-  static void lcd_level_bed() {
2602
-    START_MENU();
2603
-    MENU_ITEM(back, "Cancel", lcd_prepare_menu);
2604
-    MENU_ITEM(submenu, MSG_LEVEL_BED, _lcd_level_bed_continue);
2605
-    END_MENU();
2606
-  }
2607
-
2608
-#endif  // MANUAL_BED_LEVELING
2609
-
2610 2683
 #endif // ULTRA_LCD

+ 39
- 22
Marlin/ultralcd.h View File

@@ -65,9 +65,6 @@
65 65
   #if ENABLED(ULTIPANEL)
66 66
     void lcd_buttons_update();
67 67
     extern volatile uint8_t buttons;  //the last checked buttons in a bit array.
68
-    #if ENABLED(REPRAPWORLD_KEYPAD)
69
-      extern volatile uint8_t buttons_reprapworld_keypad; // to store the keypad shift register values
70
-    #endif
71 68
   #else
72 69
     FORCE_INLINE void lcd_buttons_update() {}
73 70
   #endif
@@ -89,33 +86,52 @@
89 86
   void lcd_ignore_click(bool b=true);
90 87
   bool lcd_blink();
91 88
 
89
+  #if ENABLED(ULTIPANEL) && ENABLED(REPRAPWORLD_KEYPAD)
90
+
91
+    #define REPRAPWORLD_BTN_OFFSET 0 // bit offset into buttons for shift register values
92
+
93
+    #define BLEN_REPRAPWORLD_KEYPAD_F3     0
94
+    #define BLEN_REPRAPWORLD_KEYPAD_F2     1
95
+    #define BLEN_REPRAPWORLD_KEYPAD_F1     2
96
+    #define BLEN_REPRAPWORLD_KEYPAD_DOWN   3
97
+    #define BLEN_REPRAPWORLD_KEYPAD_RIGHT  4
98
+    #define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
99
+    #define BLEN_REPRAPWORLD_KEYPAD_UP     6
100
+    #define BLEN_REPRAPWORLD_KEYPAD_LEFT   7
101
+
102
+    #define EN_REPRAPWORLD_KEYPAD_F3      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F3))
103
+    #define EN_REPRAPWORLD_KEYPAD_F2      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F2))
104
+    #define EN_REPRAPWORLD_KEYPAD_F1      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F1))
105
+    #define EN_REPRAPWORLD_KEYPAD_DOWN    (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_DOWN))
106
+    #define EN_REPRAPWORLD_KEYPAD_RIGHT   (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_RIGHT))
107
+    #define EN_REPRAPWORLD_KEYPAD_MIDDLE  (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
108
+    #define EN_REPRAPWORLD_KEYPAD_UP      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_UP))
109
+    #define EN_REPRAPWORLD_KEYPAD_LEFT    (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_LEFT))
110
+
111
+    #define REPRAPWORLD_KEYPAD_MOVE_Z_DOWN  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F3)
112
+    #define REPRAPWORLD_KEYPAD_MOVE_Z_UP    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F2)
113
+    #define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_DOWN)
114
+    #define REPRAPWORLD_KEYPAD_MOVE_X_RIGHT (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_RIGHT)
115
+    #define REPRAPWORLD_KEYPAD_MOVE_HOME    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_MIDDLE)
116
+    #define REPRAPWORLD_KEYPAD_MOVE_Y_UP    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_UP)
117
+    #define REPRAPWORLD_KEYPAD_MOVE_X_LEFT  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_LEFT)
118
+
119
+  #endif //ULTIPANEL && REPRAPWORLD_KEYPAD
120
+
92 121
   #if ENABLED(NEWPANEL)
122
+
93 123
     #define EN_C (_BV(BLEN_C))
94 124
     #define EN_B (_BV(BLEN_B))
95 125
     #define EN_A (_BV(BLEN_A))
96 126
 
97 127
     #if ENABLED(REPRAPWORLD_KEYPAD)
98
-      #define EN_REPRAPWORLD_KEYPAD_F3 (_BV(BLEN_REPRAPWORLD_KEYPAD_F3))
99
-      #define EN_REPRAPWORLD_KEYPAD_F2 (_BV(BLEN_REPRAPWORLD_KEYPAD_F2))
100
-      #define EN_REPRAPWORLD_KEYPAD_F1 (_BV(BLEN_REPRAPWORLD_KEYPAD_F1))
101
-      #define EN_REPRAPWORLD_KEYPAD_UP (_BV(BLEN_REPRAPWORLD_KEYPAD_UP))
102
-      #define EN_REPRAPWORLD_KEYPAD_RIGHT (_BV(BLEN_REPRAPWORLD_KEYPAD_RIGHT))
103
-      #define EN_REPRAPWORLD_KEYPAD_MIDDLE (_BV(BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
104
-      #define EN_REPRAPWORLD_KEYPAD_DOWN (_BV(BLEN_REPRAPWORLD_KEYPAD_DOWN))
105
-      #define EN_REPRAPWORLD_KEYPAD_LEFT (_BV(BLEN_REPRAPWORLD_KEYPAD_LEFT))
106
-
107 128
       #define LCD_CLICKED ((buttons&EN_C) || (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F1))
108
-      #define REPRAPWORLD_KEYPAD_MOVE_Z_UP (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F2)
109
-      #define REPRAPWORLD_KEYPAD_MOVE_Z_DOWN (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F3)
110
-      #define REPRAPWORLD_KEYPAD_MOVE_X_LEFT (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_LEFT)
111
-      #define REPRAPWORLD_KEYPAD_MOVE_X_RIGHT (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_RIGHT)
112
-      #define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_DOWN)
113
-      #define REPRAPWORLD_KEYPAD_MOVE_Y_UP (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_UP)
114
-      #define REPRAPWORLD_KEYPAD_MOVE_HOME (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_MIDDLE)
115 129
     #else
116 130
       #define LCD_CLICKED (buttons&EN_C)
117
-    #endif //REPRAPWORLD_KEYPAD
118
-  #else
131
+    #endif
132
+
133
+  #else //!NEWPANEL
134
+
119 135
     //atomic, do not change
120 136
     #define B_LE (_BV(BL_LE))
121 137
     #define B_UP (_BV(BL_UP))
@@ -127,7 +143,8 @@
127 143
     #define EN_A (_BV(BLEN_A))
128 144
 
129 145
     #define LCD_CLICKED ((buttons&B_MI)||(buttons&B_ST))
130
-  #endif//NEWPANEL
146
+
147
+  #endif //!NEWPANEL
131 148
 
132 149
 #else //no LCD
133 150
   FORCE_INLINE void lcd_update() {}

+ 7
- 29
Marlin/ultralcd_implementation_hitachi_HD44780.h View File

@@ -98,31 +98,8 @@ extern volatile uint8_t buttons;  //an extended version of the last checked butt
98 98
     #endif
99 99
 
100 100
   #elif ENABLED(REPRAPWORLD_KEYPAD)
101
-    // define register bit values, don't change it
102
-    #define BLEN_REPRAPWORLD_KEYPAD_F3 0
103
-    #define BLEN_REPRAPWORLD_KEYPAD_F2 1
104
-    #define BLEN_REPRAPWORLD_KEYPAD_F1 2
105
-    #define BLEN_REPRAPWORLD_KEYPAD_UP 6
106
-    #define BLEN_REPRAPWORLD_KEYPAD_RIGHT 4
107
-    #define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
108
-    #define BLEN_REPRAPWORLD_KEYPAD_DOWN 3
109
-    #define BLEN_REPRAPWORLD_KEYPAD_LEFT 7
110
-
111
-    #define REPRAPWORLD_BTN_OFFSET 0 // bit offset into buttons for shift register values
112
-
113
-    #define EN_REPRAPWORLD_KEYPAD_F3 (_BV(BLEN_REPRAPWORLD_KEYPAD_F3+REPRAPWORLD_BTN_OFFSET))
114
-    #define EN_REPRAPWORLD_KEYPAD_F2 (_BV(BLEN_REPRAPWORLD_KEYPAD_F2+REPRAPWORLD_BTN_OFFSET))
115
-    #define EN_REPRAPWORLD_KEYPAD_F1 (_BV(BLEN_REPRAPWORLD_KEYPAD_F1+REPRAPWORLD_BTN_OFFSET))
116
-    #define EN_REPRAPWORLD_KEYPAD_UP (_BV(BLEN_REPRAPWORLD_KEYPAD_UP+REPRAPWORLD_BTN_OFFSET))
117
-    #define EN_REPRAPWORLD_KEYPAD_RIGHT (_BV(BLEN_REPRAPWORLD_KEYPAD_RIGHT+REPRAPWORLD_BTN_OFFSET))
118
-    #define EN_REPRAPWORLD_KEYPAD_MIDDLE (_BV(BLEN_REPRAPWORLD_KEYPAD_MIDDLE+REPRAPWORLD_BTN_OFFSET))
119
-    #define EN_REPRAPWORLD_KEYPAD_DOWN (_BV(BLEN_REPRAPWORLD_KEYPAD_DOWN+REPRAPWORLD_BTN_OFFSET))
120
-    #define EN_REPRAPWORLD_KEYPAD_LEFT (_BV(BLEN_REPRAPWORLD_KEYPAD_LEFT+REPRAPWORLD_BTN_OFFSET))
121
-
122
-    //#define LCD_CLICKED ((buttons&EN_C) || (buttons&EN_REPRAPWORLD_KEYPAD_F1))
123
-    //#define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN (buttons&EN_REPRAPWORLD_KEYPAD_DOWN)
124
-    //#define REPRAPWORLD_KEYPAD_MOVE_Y_UP (buttons&EN_REPRAPWORLD_KEYPAD_UP)
125
-    //#define REPRAPWORLD_KEYPAD_MOVE_HOME (buttons&EN_REPRAPWORLD_KEYPAD_MIDDLE)
101
+
102
+    // REPRAPWORLD_KEYPAD defined in ultralcd.h
126 103
 
127 104
   #elif ENABLED(NEWPANEL)
128 105
     #define LCD_CLICKED (buttons&EN_C)
@@ -739,9 +716,9 @@ static void lcd_implementation_status_screen() {
739 716
 
740 717
     lcd.setCursor(LCD_WIDTH - 6, 2);
741 718
     lcd.print(LCD_STR_CLOCK[0]);
742
-    if (print_job_start_ms != 0) {
743
-      uint16_t time = (((print_job_stop_ms > print_job_start_ms)
744
-                       ? print_job_stop_ms : millis()) - print_job_start_ms) / 60000;
719
+
720
+    uint16_t time = print_job_timer.duration() / 60;
721
+    if (time != 0) {
745 722
       lcd.print(itostr2(time / 60));
746 723
       lcd.print(':');
747 724
       lcd.print(itostr2(time % 60));
@@ -873,6 +850,7 @@ void lcd_implementation_drawedit(const char* pstr, const char* value) {
873 850
 #if ENABLED(SDSUPPORT)
874 851
 
875 852
   static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat, char post_char) {
853
+    UNUSED(pstr);
876 854
     char c;
877 855
     uint8_t n = LCD_WIDTH - concat;
878 856
     lcd.setCursor(0, row);
@@ -899,7 +877,7 @@ void lcd_implementation_drawedit(const char* pstr, const char* value) {
899 877
 
900 878
 #endif //SDSUPPORT
901 879
 
902
-#define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
880
+#define lcd_implementation_drawmenu_back(sel, row, pstr) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
903 881
 #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
904 882
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
905 883
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')

Loading…
Cancel
Save