forked from RF1000community/Repetier-Firmware
/
uimenu.h
1062 lines (905 loc) · 51.8 KB
/
uimenu.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
This file is part of the Repetier-Firmware for RF devices from Conrad Electronic SE.
Repetier-Firmware is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Repetier-Firmware is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Repetier-Firmware. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(UI_MENU_H) && defined(UI_MAIN)
#define UI_MENU_H
/*
The menu configuration uses dynamic strings. These dynamic strings can contain
a placeholder for special values. During print these placeholder are exchanged
by their current value. Everything else is printed exactly as written.
A placeholder always has 3 chars. It starts with a % followed by 2 characters
defining the value. You can use any placeholder in any position, also it doesn't
always make sense.
List of placeholder:
%11 : Kill Line if Millingmode
%ec : Current extruder temperature
%eb : Current heated bed temperature
%e0..9 : Temp. of extruder 0..9
%er : Extruder relative mode
%Ec : Target temperature of current extruder
%Eb : Target temperature of heated bed
%E0-9 : Target temperature of extruder 0..9
%os : Status message
%oB : Buffer length
%om : Speed multiplier
%op : Is double or quadstepping?
%of : flow multiplier
%oc : Connection baudrate
%o0..9 : Output level extruder 0..9 is % including %sign
%oC : Output level current extruder
%ob : Output level heated bed
%%% : The % char
%x0 : X position
%x1 : Y position
%x2 : Z position
%hx : X homed
%hy : Y homed
%hz : Z homed
%ha : all homed
%x3 : Current extruder position
%sx : State of x min endstop
%sX : State of x max endstop
%sy : State of y min endstop
%sY : State of y max endstop
%sz : State of z min endstop
%sZ : State of z max endstop
%sC : State of the z compensation
%sS : State of the z compensation -> SensiblePressure
%sM : State of the z compensation -> SensiblePressureDigits
%do : Debug echo state
%di : Debug info state
%de : Debug error state
%dd : Debug dry run state
%db : beeper state
%O0 : OPS mode = 0
%O1 : OPS mode = 1
%O2 : OPS mode = 2
%Or : OPS retract distance
%Ob : OPS backslash distance
%Od : OPS min distance
%Oa : OPS move after
%ax : X acceleration during print moves
%ay : Y acceleration during print moves
%az : Z acceleration during print moves
%aX : X acceleration during travel moves
%aY : Y acceleration during travel moves
%aZ : Z acceleration during travel moves
%aj : Max. jerk
%aJ : Max. Z-jerk
%fx : Max. feedrate x direction
%fy : Max. feedrate y direction
%fz : Max. feedrate z direction
%fe : Max. feedrate current extruder
%fX : Homing feedrate x direction
%fY : Homing feedrate y direction
%fZ : Homing feedrate z direction
%Fs : Fan speed
%Fh : Fan frequency in Hz
%Fm : Fan modulation type PWM or PDM
%PN : Printer name
%Se : Steps per mm current extruder
%S0 : Steps per mm extruder0
%S1 : Steps per mm extruder1
%Sz : Mikrometer per Z-Single_Step (Z_Axis)
%SM : Matrix has changed in Ram and is ready to Save. -> *)
%is : Stepper inactive time in seconds
%ip : Max. inactive time in seconds
%X0..9 : Extruder selected marker
%Xi : PID I gain
%Xp : PID P gain
%Xd : PID D gain
%Xm : PID drive min
%XM : PID drive max
%XD : PID max
%XS : Temperature Sensor
%Xw : Extruder watch period in seconds
%XT : Extruder wait retract temperature
%XU : Extruder wait retract unit
%Xh : Extruder heat manager (BangBang/PID)
%Xa : Advance K value
%Xl : Advance L value
%Xb : E0 Advance L value
%Xc : E1 Advance L value
%Xg : Printer::stepsDoublerFrequency
%Xf : Extruder max. start feedrate
%XF : Extruder max. feedrate
%XA : Extruder max. acceleration
%XZ : Milling special max. acceleration
// RF specific:
%s1 : current value of the strain gauge
%Dx : scan step size x
%Dy : scan step size y
%lo : light state
%li : Light: White/Color
%ou : 230V output on/off
%ol : FET1 output on/off
%on : FET2 output on/off
%OM : operating mode
%OZ : z endstop type
%z0 : Z Offset
%zm : Z Scale
%zs : Z-Schraube korrektur mm
%zS : Z-Schraube korrektur Umdrehungen
%zF : Z-Schraube falsch
%zD : Z-Schraube richtung
%mt : miller type
%mY : menu yes
%mN : menu no
%m1 : message line 1
%m2 : message line 2
%m3 : message line 3
%m4 : message line 4
%Oa : Active Extruder
%OE : Extruder offset X [mm]
%OF : Extruder offset Y [mm]
%OS : Extruder spring displacement Z [mm]
%px : mode of the Position X menu
%py : mode of the Position Y menu
%pz : mode of the Position Z menu
%pl : g_nEmergencyPauseDigitsMin [1700/kg]
%ph : g_nEmergencyPauseDigitsMax [1700/kg]
%pL : g_nZEmergencyStopAllMin [1700/kg]
%pH : g_nZEmergencyStopAllMax [1700/kg]
%HB : active heat bed z matrix
%HO : active heat bed min z offset in um
%WP : active work part z matrix
%Z1-Z4: Page5 service intervall
%Z5-Z8: Page4 printing/milling time
%MX : Motorcurrent X
%MY : Motorcurrent Y
%MZ : Motorcurrent Z
%M0 : Motorcurrent T0
%M1 : Motorcurrent T1
%Ca : Caliper Active Reading
%Cm : Caliper Average
%Cs : Caliper Filament Standard
%Cc : Caliper Correction
%Cn : needed flow multi for measurement
%FH : Digit Homing to Zero ON/OFF
%FC : Digits force-bend-hotend-down Compensation Z ON/OFF
*/
// Define precision for temperatures. With small displays only integer values fit.
#ifndef UI_TEMP_PRECISION
#if UI_COLS>16
#define UI_TEMP_PRECISION 1
#else
#define UI_TEMP_PRECISION 0
#endif // UI_COLS>16
#endif // UI_TEMP_PRECISION
/* ============= PAGES DEFINITION =============
If you are not iside a menu, the firmware displays pages with information.
Especially if you have only a small display it is convenient to have
more then one information page.
*/
/* Define your pages using dynamic strings. To define a page use
UI_PAGE4(name,row1,row2,row3,row4);
for 4 row displays and
UI_PAGE2(name,row1,row2);
for 2 row displays. You can add additional pages or change the default pages like you want.
*/
#if UI_ROWS>=6 && UI_DISPLAY_TYPE==5
// graphic main status
UI_PAGE6(ui_page1,"\xa %e0/%E0\xb0 X:%x0",
#if NUM_EXTRUDER>1
"\xa %e1/%E1\xb0 Y:%x1",
#else
"\xa -----/---\xb0 Y:%x1",
#endif // NUM_EXTRUDER>1
#if HAVE_HEATED_BED==true
"\xe %eb/%Eb\xb0 Z:%x2",
#else
"\xb -----/---\xb0 Z:%x2",
#endif // HAVE_HEATED_BED==true
"Mul:%om", "Buf:%oB", "%os");
#if EEPROM_MODE!=0
UI_PAGE4(ui_page2,"%Z5","%Z6","%Z7","%Z8")
#define UI_PRINTTIME_PAGES ,&ui_page2
#define UI_PRINTTIME_COUNT 1
#else
#define UI_PRINTTIME_PAGES
#define UI_PRINTTIME_COUNT 0
#endif // EEPROM_MODE!=0
/* Merge pages together. Use the following pattern:
#define UI_PAGES {&name1,&name2,&name3} */
#define UI_PAGES {&ui_page1 UI_PRINTTIME_PAGES}
// How many pages do you want to have. Minimum is 1.
#define UI_NUM_PAGES 1+UI_PRINTTIME_COUNT
#elif UI_ROWS>=4
#if HAVE_HEATED_BED==true
#if UI_COLS<=16
UI_PAGE4(ui_page1,"%U1%ec/%EcB%eB/%Eb%U2","Z:%x2 mm %sC%hz",UI_TEXT_STRAIN_GAUGE,"%os")
#else
UI_PAGE4(ui_page1,"%U1%ec/%Ec\002 B%eB/%Eb\002%U2","Z:%x2 mm %sC%hz",UI_TEXT_STRAIN_GAUGE,"%os")
#endif // UI_COLS<=16
#else
UI_PAGE4(ui_page1,UI_TEXT_PAGE_EXTRUDER,"Z:%x2 mm %sC%hz",UI_TEXT_STRAIN_GAUGE,"%os")
#endif // HAVE_HEATED_BED==true
UI_PAGE4(ui_page2,"X:%x0 mm %hx","Y:%x1 mm %hy","Z:%x2 mm %sC%hz","%os")
#if NUM_EXTRUDER>1
UI_PAGE4(ui_page3,UI_TEXT_PAGE_EXTRUDER1,UI_TEXT_PAGE_EXTRUDER2,UI_TEXT_PAGE_BED,"%os")
#else
UI_PAGE4(ui_page3,UI_TEXT_PAGE_EXTRUDER1,"",UI_TEXT_PAGE_BED,"%os")
#endif // NUM_EXTRUDER>1
#if EEPROM_MODE!=0
UI_PAGE4(ui_page4,"%Z5","%Z6","%Z7","%Z8")
#define UI_PRINTTIME_PAGES ,&ui_page4
#define UI_PRINTTIME_COUNT 1
#else
#define UI_PRINTTIME_PAGES
#define UI_PRINTTIME_COUNT 0
#endif // EEPROM_MODE!=0
#if EEPROM_MODE!=0 && FEATURE_SERVICE_INTERVAL
UI_PAGE4(ui_page5,"%Z1","%Z2","%Z3","%Z4")
#define UI_SERVICE_PAGES ,&ui_page5
#define UI_SERVICE_COUNT 1
#else
#define UI_SERVICE_PAGES
#define UI_SERVICE_COUNT 0
#endif // EEPROM_MODE && FEATURE_SERVICE_INTERVAL
#if UI_COLS<=16
UI_PAGE4(ui_page_mod,UI_TEXT_STRAIN_GAUGE_SPEED,
"zO: %z0um zM: %HB",
"sO: %sSum%sM",
"Z: %x2mm %sC%hz")
#else
UI_PAGE4(ui_page_mod,UI_TEXT_STRAIN_GAUGE_SPEED,
"zO: %z0 um zMat: %HB",
"sO: %sS um %sM",
"Z: %x2 mm %sC%hz")
#endif // EEPROM_MODE && FEATURE_SERVICE_INTERVAL
#define UI_MOD_PAGES &ui_page_mod
#define UI_MOD_COUNT 1
/* Merge pages together. Use the following pattern:
#define UI_PAGES {&name1,&name2,&name3} */
#define UI_PAGES {&ui_page1,UI_MOD_PAGES,&ui_page2,&ui_page3 UI_PRINTTIME_PAGES UI_SERVICE_PAGES}
// How many pages do you want to have. Minimum is 1.
#define UI_NUM_PAGES 3+UI_PRINTTIME_COUNT+UI_SERVICE_COUNT+UI_MOD_COUNT
#else
UI_PAGE2(ui_page1,UI_TEXT_PAGE_EXTRUDER,UI_TEXT_PAGE_BED)
UI_PAGE2(ui_page2,"X:%x0 Y:%x1","%os")
UI_PAGE2(ui_page3,"Z:%x2 mm %sC%hz","%os")
/* Merge pages together. Use the following pattern:
#define UI_PAGES {&name1,&name2,&name3} */
#define UI_PAGES {&ui_page1,&ui_page2,&ui_page3}
// How many pages do you want to have. Minimum is 1.
#define UI_NUM_PAGES 3
#endif // UI_ROWS>=4
/* ============ MENU definition ================
The menu works the same as pages. In addion you need to define what the lines do
or where to jump to. For that reason, the menu structure needs to be entered in
reverse order. Starting from the leaves, the menu structure is defined.
*/
/*
At first define all actions available in the menu. The actions define, what the
next/previous button will do. All menu actions work the same:
next/previous changes the value
ok sets the value if not already done and goes back to previous menu.
*/
// error/warning/information message
UI_MENU_ACTION4(ui_menu_message,UI_ACTION_DUMMY,"%m1","%m2","%m3","%m4")
/** \brief Positions submenus */
#if UI_ROWS>=4
UI_MENU_ACTION4C(ui_menu_xpos,UI_ACTION_XPOSITION,UI_TEXT_ACTION_XPOSITION4)
UI_MENU_ACTION4C(ui_menu_ypos,UI_ACTION_YPOSITION,UI_TEXT_ACTION_YPOSITION4)
UI_MENU_ACTION4C(ui_menu_zpos,UI_ACTION_ZPOSITION,UI_TEXT_ACTION_ZPOSITION4)
UI_MENU_ACTION4C(ui_menu_zpos_notest,UI_ACTION_ZPOSITION,UI_TEXT_ACTION_ZPOSITION4)
UI_MENU_ACTION4C(ui_menu_xpos_fast,UI_ACTION_XPOSITION_FAST,UI_TEXT_ACTION_XPOSITION_FAST4)
UI_MENU_ACTION4C(ui_menu_ypos_fast,UI_ACTION_YPOSITION_FAST,UI_TEXT_ACTION_YPOSITION_FAST4)
UI_MENU_ACTION4C(ui_menu_zpos_fast,UI_ACTION_ZPOSITION_FAST,UI_TEXT_ACTION_ZPOSITION_FAST4)
UI_MENU_ACTION4C(ui_menu_zpos_fast_notest,UI_ACTION_ZPOSITION_FAST_NOTEST,UI_TEXT_ACTION_ZPOSITION_FAST4)
#endif // UI_ROWS>=4
UI_MENU_ACTION2C(ui_menu_epos,UI_ACTION_EPOSITION,UI_TEXT_ACTION_EPOSITION_FAST2)
/* Next step is to define submenus leading to the action. */
/** \brief Positionening menu */
#if FEATURE_SET_TO_XY_ORIGIN
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_quick_xy_origin,UI_TEXT_SET_XY_ORIGIN,UI_ACTION_SET_XY_ORIGIN,0,MENU_MODE_PRINTER)
#define SET_TO_XY_ORIGIN_ENTRY ,&ui_menu_quick_xy_origin
#define SET_TO_XY_ORIGIN_COUNT 1
#else
#define SET_TO_XY_ORIGIN_ENTRY
#define SET_TO_XY_ORIGIN_COUNT 0
#endif // FEATURE_SET_TO_XY_ORIGIN
UI_MENU_ACTIONCOMMAND(ui_menu_back,UI_TEXT_BACK,UI_ACTION_BACK)
#if UI_HAS_BACK_KEY==0
#define UI_MENU_ADDCONDBACK &ui_menu_back,
#define UI_MENU_BACKCNT 1
#else
#define UI_MENU_ADDCONDBACK
#define UI_MENU_BACKCNT 0
#endif // UI_HAS_BACK_KEY==0
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_home_all,UI_TEXT_HOME_ALL,UI_ACTION_HOME_ALL,0, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_ACTIONCOMMAND(ui_menu_home_x,UI_TEXT_HOME_X,UI_ACTION_HOME_X)
UI_MENU_ACTIONCOMMAND(ui_menu_home_y,UI_TEXT_HOME_Y,UI_ACTION_HOME_Y)
UI_MENU_ACTIONCOMMAND(ui_menu_home_z,UI_TEXT_HOME_Z,UI_ACTION_HOME_Z)
UI_MENU_ACTIONSELECTOR(ui_menu_go_xpos,UI_TEXT_X_POSITION,ui_menu_xpos)
UI_MENU_ACTIONSELECTOR(ui_menu_go_ypos,UI_TEXT_Y_POSITION,ui_menu_ypos)
UI_MENU_ACTIONSELECTOR(ui_menu_go_zpos,UI_TEXT_Z_POSITION,ui_menu_zpos)
UI_MENU_ACTIONSELECTOR(ui_menu_go_zpos_notest,UI_TEXT_Z_POSITION,ui_menu_zpos_notest)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_go_epos,UI_TEXT_E_POSITION,ui_menu_epos,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
//Nibbels: Das Einstellmenü für die Z-Step-Höhe:
#if FEATURE_EXTENDED_BUTTONS
UI_MENU_ACTIONCOMMAND(ui_menu_config_single_steps,UI_TEXT_CONFIG_SINGLE_STEPS,UI_ACTION_CONFIG_SINGLE_STEPS)
#define UI_CONFIG_SINGLE_STEPS ,&ui_menu_config_single_steps
#define UI_CONFIG_SINGLE_STEPS_CNT 1
#else
#define UI_CONFIG_SINGLE_STEPS
#define UI_CONFIG_SINGLE_STEPS_CNT 0
#endif // FEATURE_EXTENDED_BUTTONS
#if !UI_SPEEDDEPENDENT_POSITIONING
UI_MENU_ACTIONSELECTOR(ui_menu_go_xfast,UI_TEXT_X_POS_FAST,ui_menu_xpos_fast)
UI_MENU_ACTIONSELECTOR(ui_menu_go_yfast,UI_TEXT_Y_POS_FAST,ui_menu_ypos_fast)
UI_MENU_ACTIONSELECTOR(ui_menu_go_zfast,UI_TEXT_Z_POS_FAST,ui_menu_zpos_fast)
UI_MENU_ACTIONSELECTOR(ui_menu_go_zfast_notest,UI_TEXT_Z_POS_FAST,ui_menu_zpos_fast_notest)
#define UI_SPEED 2
#define UI_SPEED_X ,&ui_menu_go_xfast,&ui_menu_go_xpos
#define UI_SPEED_Y ,&ui_menu_go_yfast,&ui_menu_go_ypos
#define UI_SPEED_Z ,&ui_menu_go_zfast,&ui_menu_go_zpos
#define UI_SPEED_Z_NOTEST ,&ui_menu_go_zfast_notest,&ui_menu_go_zpos_notest
#else
#define UI_SPEED 1
#define UI_SPEED_X ,&ui_menu_go_xpos
#define UI_SPEED_Y ,&ui_menu_go_ypos
#define UI_SPEED_Z ,&ui_menu_go_zpos
#define UI_SPEED_Z_NOTEST ,&ui_menu_go_zpos_notest
#endif // UI_SPEEDDEPENDENT_POSITIONING
#define UI_MENU_POSITIONS {UI_MENU_ADDCONDBACK &ui_menu_home_all,&ui_menu_home_x,&ui_menu_home_y,&ui_menu_home_z UI_SPEED_X UI_SPEED_Y UI_SPEED_Z UI_CONFIG_SINGLE_STEPS SET_TO_XY_ORIGIN_ENTRY ,&ui_menu_go_epos}
UI_MENU(ui_menu_positions,UI_MENU_POSITIONS,5 + 3 * UI_SPEED + UI_MENU_BACKCNT + UI_CONFIG_SINGLE_STEPS_CNT+SET_TO_XY_ORIGIN_COUNT)
UI_MENU_ACTIONCOMMAND(ui_menu_z_mode,UI_TEXT_Z_MODE,UI_ACTION_ZMODE)
#define UI_MENU_Z_MODE_COUNT 1
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_heat_bed_scan,UI_TEXT_DO_HEAT_BED_SCAN,UI_ACTION_RF_SCAN_HEAT_BED,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_HEAT_BED_SCAN_COUNT 1
#if FEATURE_PRECISE_HEAT_BED_SCAN
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_heat_bed_scan_pla,UI_TEXT_HEAT_BED_SCAN_PLA,UI_ACTION_RF_SCAN_HEAT_BED_PLA,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_heat_bed_scan_abs,UI_TEXT_HEAT_BED_SCAN_ABS,UI_ACTION_RF_SCAN_HEAT_BED_ABS,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_HEAT_BED_MODE_COND , &ui_menu_heat_bed_scan_pla, &ui_menu_heat_bed_scan_abs
#define UI_MENU_HEAT_BED_MODE_COUNT 2
#else
#define UI_MENU_HEAT_BED_MODE_COND
#define UI_MENU_HEAT_BED_MODE_COUNT 0
#endif // FEATURE_PRECISE_HEAT_BED_SCAN
#if FEATURE_HEAT_BED_Z_COMPENSATION
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_mhier_z_scan,UI_TEXT_DO_MHIER_BED_SCAN,UI_ACTION_RF_DO_MHIER_BED_SCAN,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_mhier_auto_matrix_leveling,UI_TEXT_DO_MHIER_AUTO_MATRIX_LEVELING,UI_ACTION_RF_DO_MHIER_AUTO_MATRIX_LEVELING,MENU_MODE_PRINTER,MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_HEAT_MHIER_COND , &ui_menu_mhier_z_scan , &ui_menu_mhier_auto_matrix_leveling
#define UI_MENU_HEAT_MHIER_COUNT 2
#else
#define UI_MENU_HEAT_MHIER_COND
#define UI_MENU_HEAT_MHIER_COUNT 0
#endif // FEATURE_HEAT_BED_Z_COMPENSATION
#if NUM_EXTRUDER>1
UI_MENU_ACTION2C(ui_menu_extruder_offsetz2,UI_ACTION_EXTRUDER_OFFSET_Z,UI_TEXT_EXTRUDER_OFFSET_Z2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_extruder_offset_z,UI_TEXT_EXTRUDER_OFFSET_Z,ui_menu_extruder_offsetz2, MENU_MODE_PRINTER, MENU_MODE_MILLER)
#define EXTRUDER_OFFSET_TYPE_ENTRY_Z ,&ui_menu_extruder_offset_z
#define EXTRUDER_OFFSET_TYPE_COUNT_Z 1
#else
#define EXTRUDER_OFFSET_TYPE_ENTRY_Z
#define EXTRUDER_OFFSET_TYPE_COUNT_Z 0
#endif // NUM_EXTRUDER>1
#if FEATURE_HEAT_BED_Z_COMPENSATION
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_save_active_zMatrix,UI_TEXT_DO_SAVE_ACTIVE_ZMATRIX,UI_ACTION_RF_DO_SAVE_ACTIVE_ZMATRIX,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_SAVE_ACTIVE_ZMATRIX , &ui_menu_save_active_zMatrix
#define UI_MENU_SAVE_ACTIVE_ZMATRIX_COUNT 1
#else
#define UI_MENU_SAVE_ACTIVE_ZMATRIX
#define UI_MENU_SAVE_ACTIVE_ZMATRIX_COUNT 0
#endif // FEATURE_HEAT_BED_Z_COMPENSATION
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_work_part_scan,UI_TEXT_DO_WORK_PART_SCAN,UI_ACTION_RF_SCAN_WORK_PART,0,MENU_MODE_PRINTER | MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_WORKPART_SCAN_COUNT 1
UI_MENU_ACTION4C(ui_menu_zoffset,UI_ACTION_ZOFFSET,UI_TEXT_ACTION_ZOFFSET)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_zoffset_z,UI_TEXT_Z_OFFSET,ui_menu_zoffset,MENU_MODE_PRINTER,0)
#define UI_MENU_Z_OFFSET_COUNT 1
UI_MENU_CHANGEACTION_FILTER(ui_menu_set_z_matrix_heat_bed,UI_TEXT_SET_Z_MATRIX_HEAT_BED,UI_ACTION_RF_SET_Z_MATRIX_HEAT_BED,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_SET_Z_MATRIX_COUNT 1
/** \brief Z calibration menu */
#if FEATURE_MILLING_MODE
#if FEATURE_FIND_Z_ORIGIN
// in case the milling mode is enabled, we need the following menus
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_set_z_origin,UI_TEXT_SET_Z_ORIGIN,UI_ACTION_SET_Z_ORIGIN,0,MENU_MODE_PRINTER)
#define UI_MENU_SET_Z_ORIGIN_ENTRY , &ui_menu_set_z_origin
#define UI_MENU_SET_Z_ORIGIN_COUNT 1
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_find_z_origin,UI_TEXT_FIND_Z_ORIGIN,UI_ACTION_RF_FIND_Z_ORIGIN,0,MENU_MODE_PRINTER)
#define UI_MENU_FIND_Z_ORIGIN_COND ,&ui_menu_find_z_origin
#define UI_MENU_FIND_Z_ORIGIN_COUNT 1
#else
#define UI_MENU_SET_Z_ORIGIN_ENTRY
#define UI_MENU_SET_Z_ORIGIN_COUNT 0
#define UI_MENU_FIND_Z_ORIGIN_COND
#define UI_MENU_FIND_Z_ORIGIN_COUNT 0
#endif // FEATURE_FIND_Z_ORIGIN
UI_MENU_CHANGEACTION_FILTER(ui_menu_set_z_matrix_work_part,UI_TEXT_SET_Z_MATRIX_WORK_PART,UI_ACTION_RF_SET_Z_MATRIX_WORK_PART,0,MENU_MODE_PRINTER)
#define UI_MENU_SET_Z_MATRIX_MILLING_COUNT 1
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_set_xy_start,UI_TEXT_SET_SCAN_XY_START,UI_ACTION_RF_SET_SCAN_XY_START,0,MENU_MODE_PRINTER)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_set_xy_end,UI_TEXT_SET_SCAN_XY_END,UI_ACTION_RF_SET_SCAN_XY_END,0,MENU_MODE_PRINTER)
UI_MENU_CHANGEACTION_FILTER(ui_menu_set_delta_x,UI_TEXT_SET_SCAN_DELTA_X,UI_ACTION_RF_SET_SCAN_DELTA_X,0,MENU_MODE_PRINTER)
UI_MENU_CHANGEACTION_FILTER(ui_menu_set_delta_y,UI_TEXT_SET_SCAN_DELTA_Y,UI_ACTION_RF_SET_SCAN_DELTA_Y,0,MENU_MODE_PRINTER)
#define UI_MENU_SET_YX_MILLING_COND ,&ui_menu_set_xy_start, &ui_menu_set_xy_end, &ui_menu_set_delta_x, &ui_menu_set_delta_y
#define UI_MENU_SET_YX_MILLING_COUNT 4
#define UI_MENU_Z {UI_MENU_ADDCONDBACK &ui_menu_heat_bed_scan UI_MENU_HEAT_BED_MODE_COND UI_MENU_HEAT_MHIER_COND, &ui_menu_zoffset_z EXTRUDER_OFFSET_TYPE_ENTRY_Z, &ui_menu_z_mode, &ui_menu_work_part_scan UI_MENU_SET_Z_ORIGIN_ENTRY UI_MENU_FIND_Z_ORIGIN_COND, &ui_menu_set_z_matrix_heat_bed UI_MENU_SAVE_ACTIVE_ZMATRIX, &ui_menu_set_z_matrix_work_part UI_MENU_SET_YX_MILLING_COND}
UI_MENU(ui_menu_z,UI_MENU_Z,UI_MENU_BACKCNT + UI_MENU_HEAT_BED_SCAN_COUNT + UI_MENU_HEAT_BED_MODE_COUNT + UI_MENU_HEAT_MHIER_COUNT + UI_MENU_Z_OFFSET_COUNT + EXTRUDER_OFFSET_TYPE_COUNT_Z + UI_MENU_Z_MODE_COUNT + UI_MENU_WORKPART_SCAN_COUNT + UI_MENU_SET_Z_ORIGIN_COUNT + UI_MENU_FIND_Z_ORIGIN_COUNT + UI_MENU_SET_Z_MATRIX_COUNT + UI_MENU_SAVE_ACTIVE_ZMATRIX_COUNT + UI_MENU_SET_Z_MATRIX_MILLING_COUNT + UI_MENU_SET_YX_MILLING_COUNT )
#else
#define UI_MENU_Z {UI_MENU_ADDCONDBACK &ui_menu_heat_bed_scan UI_MENU_HEAT_BED_MODE_COND UI_MENU_HEAT_MHIER_COND ,&ui_menu_zoffset_z EXTRUDER_OFFSET_TYPE_ENTRY_Z, &ui_menu_z_mode, &ui_menu_set_z_matrix_heat_bed UI_MENU_SAVE_ACTIVE_ZMATRIX}
UI_MENU(ui_menu_z,UI_MENU_Z,UI_MENU_BACKCNT + UI_MENU_HEAT_BED_SCAN_COUNT + UI_MENU_HEAT_BED_MODE_COUNT + UI_MENU_HEAT_MHIER_COUNT + UI_MENU_Z_OFFSET_COUNT + EXTRUDER_OFFSET_TYPE_COUNT_Z + UI_MENU_Z_MODE_COUNT + UI_MENU_SET_Z_MATRIX_COUNT + UI_MENU_SAVE_ACTIVE_ZMATRIX_COUNT )
#endif // FEATURE_MILLING_MODE
/** \brief Extruder menu */
UI_MENU_CHANGEACTION_FILTER(ui_menu_quick_flowmultiply,UI_TEXT_FLOW_MULTIPLY,UI_ACTION_FLOWRATE_MULTIPLY,MENU_MODE_PRINTER,0)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_quick_preheat_pla,UI_TEXT_PREHEAT_PLA,UI_ACTION_PREHEAT_PLA,MENU_MODE_PRINTER,0)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_quick_preheat_abs,UI_TEXT_PREHEAT_ABS,UI_ACTION_PREHEAT_ABS,MENU_MODE_PRINTER,0)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_quick_cooldown,UI_TEXT_COOLDOWN,UI_ACTION_COOLDOWN,MENU_MODE_PRINTER,0)
UI_MENU_CHANGEACTION(ui_menu_ext_temp0,UI_TEXT_EXTR0_TEMP,UI_ACTION_EXTRUDER0_TEMP)
UI_MENU_CHANGEACTION(ui_menu_ext_temp1,UI_TEXT_EXTR1_TEMP,UI_ACTION_EXTRUDER1_TEMP)
UI_MENU_CHANGEACTION(ui_menu_bed_temp, UI_TEXT_BED_TEMP,UI_ACTION_HEATED_BED_TEMP)
UI_MENU_ACTIONCOMMAND(ui_menu_active_extruder,UI_TEXT_ACTIVE_EXTRUDER,UI_ACTION_ACTIVE_EXTRUDER)
//UI_MENU_ACTIONCOMMAND(ui_menu_ext_sel1,UI_TEXT_EXTR1_SELECT,UI_ACTION_SELECT_EXTRUDER1);
UI_MENU_ACTIONCOMMAND(ui_menu_ext_off0,UI_TEXT_EXTR0_OFF,UI_ACTION_EXTRUDER0_OFF)
UI_MENU_ACTIONCOMMAND(ui_menu_ext_off1,UI_TEXT_EXTR1_OFF,UI_ACTION_EXTRUDER1_OFF)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_ext_origin,UI_TEXT_SET_E_ORIGIN,UI_ACTION_SET_E_ORIGIN,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED )
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_extruder_unmount_filament,UI_TEXT_UNMOUNT_FILAMENT,UI_ACTION_UNMOUNT_FILAMENT,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_extruder_mount_filament,UI_TEXT_MOUNT_FILAMENT,UI_ACTION_MOUNT_FILAMENT,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#if NUM_EXTRUDER>1
#define UI_MENU_EXTCOND &ui_menu_ext_temp0,&ui_menu_ext_temp1,&ui_menu_ext_off0,&ui_menu_ext_off1,&ui_menu_active_extruder,
#define UI_MENU_EXTCNT 5
#elif NUM_EXTRUDER>2
UI_MENU_CHANGEACTION(ui_menu_ext_temp2,UI_TEXT_EXTR2_TEMP,UI_ACTION_EXTRUDER2_TEMP)
UI_MENU_ACTIONCOMMAND(ui_menu_ext_sel2,UI_TEXT_EXTR2_SELECT,UI_ACTION_SELECT_EXTRUDER2)
UI_MENU_ACTIONCOMMAND(ui_menu_ext_off2,UI_TEXT_EXTR2_OFF,UI_ACTION_EXTRUDER2_OFF)
#define UI_MENU_EXTCOND &ui_menu_ext_temp0,&ui_menu_ext_temp1,&ui_menu_ext_temp2,&ui_menu_ext_off0,&ui_menu_ext_off1,&ui_menu_ext_off2,&ui_menu_ext_sel0,&ui_menu_ext_sel1,&ui_menu_ext_sel1,
#define UI_MENU_EXTCNT 9
#else
#define UI_MENU_EXTCOND &ui_menu_ext_temp0,&ui_menu_ext_off0,
#define UI_MENU_EXTCNT 2
#endif // NUM_EXTRUDER>1
#if HAVE_HEATED_BED==true
#define UI_MENU_BEDCOND &ui_menu_bed_temp,
#define UI_MENU_BEDCNT 1
#else
#define UI_MENU_BEDCOND
#define UI_MENU_BEDCNT 0
#endif // HAVE_HEATED_BED==true
#define UI_MENU_EXTRUDER {UI_MENU_ADDCONDBACK UI_MENU_BEDCOND UI_MENU_EXTCOND &ui_menu_go_epos, &ui_menu_quick_preheat_pla, &ui_menu_quick_preheat_abs, &ui_menu_quick_cooldown, &ui_menu_extruder_mount_filament, &ui_menu_extruder_unmount_filament, &ui_menu_quick_flowmultiply, &ui_menu_ext_origin}
UI_MENU(ui_menu_extruder,UI_MENU_EXTRUDER,UI_MENU_BACKCNT+UI_MENU_BEDCNT+UI_MENU_EXTCNT+4+3+1)
/** \brief Caliper Filament Reader menu */
#if FEATURE_READ_CALIPER
UI_MENU_ACTIONCOMMAND( ui_menu_cal_directread,UI_TEXT_CAL_DIRECT_READ,UI_ACTION_CAL_RESET)
UI_MENU_CHANGEACTION ( ui_menu_cal_correct, UI_TEXT_CAL_CORRECT, UI_ACTION_CAL_CORRECT)
UI_MENU_ACTIONCOMMAND( ui_menu_cal_showreset, UI_TEXT_CAL_SHOW, UI_ACTION_CAL_SET)
UI_MENU_CHANGEACTION ( ui_menu_cal_standard, UI_TEXT_CAL_STANDARD, UI_ACTION_CAL_STANDARD)
#define UI_MENU_CONF_CALIPER {UI_MENU_ADDCONDBACK &ui_menu_cal_directread, &ui_menu_cal_correct, &ui_menu_cal_showreset, &ui_menu_cal_standard}
UI_MENU(ui_menu_settings_cal,UI_MENU_CONF_CALIPER,UI_MENU_BACKCNT+4)
UI_MENU_SUBMENU_FILTER(ui_menu_conf_cal, UI_TEXT_CAL_CONF_MENU, ui_menu_settings_cal, MENU_MODE_PRINTER,0)
#define UI_MENU_CONFIGURATION_CAL_COND &ui_menu_conf_cal,
#define UI_MENU_CONFIGURATION_CAL_COUNT 1
#else //FEATURE_READ_CALIPER
#define UI_MENU_CONFIGURATION_CAL_COND
#define UI_MENU_CONFIGURATION_CAL_COUNT 0
#endif //FEATURE_READ_CALIPER
/** \brief Quick menu */
#if PS_ON_PIN>=0
UI_MENU_ACTIONCOMMAND(ui_menu_quick_power,UI_TEXT_POWER,UI_ACTION_POWER)
#define MENU_PSON_COUNT 1
#define MENU_PSON_ENTRY ,&ui_menu_quick_power
#else
#define MENU_PSON_COUNT 0
#define MENU_PSON_ENTRY
#endif // PS_ON_PIN>=0
UI_MENU_ACTION4C(ui_menu_quick_stop_print_ack, UI_ACTION_SD_STOP_ACK, UI_TEXT_STOP_PRINT_ACK)
//das stoppen kann auch über den repetierserver laufen, wenn man dem "RequestStop:" schickt, also parallel machen!! und für normale drucke das menü auch zulassen:
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_quick_stop_print, UI_TEXT_STOP_PRINT, ui_menu_quick_stop_print_ack, MENU_MODE_SD_PRINTING | MENU_MODE_PRINTING, MENU_MODE_MILLER)
UI_MENU_ACTION4C(ui_menu_quick_stop_mill_ack, UI_ACTION_SD_STOP_ACK, UI_TEXT_STOP_MILL_ACK)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_quick_stop_mill, UI_TEXT_STOP_MILL, ui_menu_quick_stop_mill_ack, MENU_MODE_SD_PRINTING | MENU_MODE_PRINTING, MENU_MODE_PRINTER)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_quick_stopstepper,UI_TEXT_DISABLE_STEPPER,UI_ACTION_DISABLE_STEPPER,0, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_CHANGEACTION(ui_menu_quick_speedmultiply,UI_TEXT_SPEED_MULTIPLY,UI_ACTION_FEEDRATE_MULTIPLY)
#if FEATURE_OUTPUT_FINISHED_OBJECT
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_quick_output_object,UI_TEXT_OUTPUT_OBJECT,UI_ACTION_RF_OUTPUT_OBJECT,0, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define OUTPUT_OBJECT_COUNT 1
#define OUTPUT_OBJECT_ENTRY ,&ui_menu_quick_output_object
#else
#define OUTPUT_OBJECT_COUNT 0
#define OUTPUT_OBJECT_ENTRY
#endif // FEATURE_OUTPUT_FINISHED_OBJECT
#if FEATURE_PARK
UI_MENU_ACTIONCOMMAND(ui_menu_quick_park,UI_TEXT_PARK_HEAT_BED,UI_ACTION_RF_PARK)
#define PARK_COUNT 1
#define PARK_ENTRY ,&ui_menu_quick_park
#else
#define PARK_COUNT 0
#define PARK_ENTRY
#endif // FEATURE_PARK
#if FEATURE_230V_OUTPUT
UI_MENU_ACTIONCOMMAND(ui_menu_toggle_230V_output,UI_TEXT_230V_OUTPUT,UI_ACTION_230V_OUTPUT)
#define OUTPUT_230V_ENTRY ,&ui_menu_toggle_230V_output
#define OUTPUT_230V_COUNT 1
#else
#define OUTPUT_230V_ENTRY
#define OUTPUT_230V_COUNT 0
#endif // FEATURE_230V_OUTPUT
#if FEATURE_CASE_LIGHT //Output X19 @RF2000/RF1000
UI_MENU_ACTIONCOMMAND(ui_menu_light_mode,UI_TEXT_LIGHTS_ONOFF,UI_ACTION_LIGHTS_ONOFF)
#define LIGHT_MODE_ENTRY ,&ui_menu_light_mode
#define LIGHT_MODE_COUNT 1
#else
#define LIGHT_MODE_ENTRY
#define LIGHT_MODE_COUNT 0
#endif // FEATURE_CASE_LIGHT
#if FEATURE_24V_FET_OUTPUTS
UI_MENU_ACTIONCOMMAND(ui_menu_toggle_FET1_output,UI_TEXT_FET1_OUTPUT,UI_ACTION_FET1_OUTPUT)
#define OUTPUT_FET1_ENTRY ,&ui_menu_toggle_FET1_output
#define OUTPUT_FET1_COUNT 1
#else
#define OUTPUT_FET1_ENTRY
#define OUTPUT_FET1_COUNT 0
#endif // FEATURE_24V_FET_OUTPUTS
#if FEATURE_24V_FET_OUTPUTS
UI_MENU_ACTIONCOMMAND(ui_menu_toggle_FET2_output,UI_TEXT_FET2_OUTPUT,UI_ACTION_FET2_OUTPUT)
#define OUTPUT_FET2_ENTRY ,&ui_menu_toggle_FET2_output
#define OUTPUT_FET2_COUNT 1
#else
#define OUTPUT_FET2_ENTRY
#define OUTPUT_FET2_COUNT 0
#endif // FEATURE_24V_FET_OUTPUTS
#if FEATURE_RESET_VIA_MENU
UI_MENU_ACTION4C(ui_menu_quick_reset_ack,UI_ACTION_RF_RESET_ACK,UI_TEXT_RESET_ACK)
UI_MENU_ACTIONSELECTOR(ui_menu_quick_reset,UI_TEXT_RESET,ui_menu_quick_reset_ack)
#define RESET_VIA_MENU_COUNT 1
#define RESET_VIA_MENU_ENTRY ,&ui_menu_quick_reset
#else
#define RESET_VIA_MENU_COUNT 0
#define RESET_VIA_MENU_ENTRY
#endif // FEATURE_RESET_VIA_MENU
#ifdef DEBUG_PRINT
UI_MENU_ACTIONCOMMAND(ui_menu_quick_debug,"Write Debug",UI_ACTION_WRITE_DEBUG)
#define DEBUG_PRINT_COUNT 1
#define DEBUG_PRINT_EXTRA ,&ui_menu_quick_debug
#else
#define DEBUG_PRINT_COUNT 0
#define DEBUG_PRINT_EXTRA
#endif // DEBUG_PRINT
//das LIGHT_MODE_ENTRY ist der X19! Könnte verwirrend sein... RGB-Light gibts in Configuration->General
#define UI_MENU_QUICK {UI_MENU_ADDCONDBACK &ui_menu_quick_stop_print, &ui_menu_home_all, &ui_menu_quick_stopstepper, &ui_menu_quick_stop_mill OUTPUT_OBJECT_ENTRY ,&ui_menu_quick_speedmultiply, UI_MENU_CONFIGURATION_CAL_COND &ui_menu_quick_flowmultiply PARK_ENTRY OUTPUT_230V_ENTRY LIGHT_MODE_ENTRY OUTPUT_FET1_ENTRY OUTPUT_FET2_ENTRY RESET_VIA_MENU_ENTRY MENU_PSON_ENTRY DEBUG_PRINT_EXTRA }
UI_MENU(ui_menu_quick,UI_MENU_QUICK,6+UI_MENU_BACKCNT+MENU_PSON_COUNT+DEBUG_PRINT_COUNT+OUTPUT_OBJECT_COUNT+UI_MENU_CONFIGURATION_CAL_COUNT+PARK_COUNT+OUTPUT_230V_COUNT+LIGHT_MODE_COUNT+OUTPUT_FET1_COUNT+OUTPUT_FET2_COUNT+RESET_VIA_MENU_COUNT)
/** \brief Fan menu */
#if FAN_PIN>-1 && FEATURE_FAN_CONTROL
UI_MENU_CHANGEACTION(ui_menu_fan_fanspeed, UI_TEXT_ACTION_FANSPEED,UI_ACTION_FANSPEED)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_fan_off,UI_TEXT_FAN_OFF,UI_ACTION_FAN_OFF,MENU_MODE_FAN_RUNNING,0)
UI_MENU_ACTIONCOMMAND(ui_menu_fan_25,UI_TEXT_FAN_25,UI_ACTION_FAN_25)
UI_MENU_ACTIONCOMMAND(ui_menu_fan_50,UI_TEXT_FAN_50,UI_ACTION_FAN_50)
UI_MENU_ACTIONCOMMAND(ui_menu_fan_75,UI_TEXT_FAN_75,UI_ACTION_FAN_75)
UI_MENU_ACTIONCOMMAND(ui_menu_fan_full,UI_TEXT_FAN_FULL,UI_ACTION_FAN_FULL)
UI_MENU_CHANGEACTION_FILTER(ui_menu_fan_hz, UI_TEXT_FAN_HZ, UI_ACTION_FAN_HZ, 0, MENU_MODE_FAN_MODE_PDM)
UI_MENU_ACTIONCOMMAND( ui_menu_fan_mode,UI_TEXT_FAN_MODE,UI_ACTION_FAN_MODE)
#define UI_MENU_FANHZMODE_CNT 2
#define UI_MENU_FAN {UI_MENU_ADDCONDBACK &ui_menu_fan_fanspeed,&ui_menu_fan_off,&ui_menu_fan_25,&ui_menu_fan_50,&ui_menu_fan_75,&ui_menu_fan_full}
UI_MENU(ui_menu_fan,UI_MENU_FAN,UI_MENU_BACKCNT+6)
UI_MENU_SUBMENU_FILTER(ui_menu_fan_sub,UI_TEXT_FANSPEED,ui_menu_fan,MENU_MODE_PRINTER,0)
#define UI_MENU_FAN_COND &ui_menu_fan_sub,
#define UI_MENU_FAN_CNT 1
#else
#define UI_MENU_FAN_COND
#define UI_MENU_FAN_CNT 0
#endif // FAN_PIN>-1 && FEATURE_FAN_CONTROL
#define UI_MENU_CONF_FAN {UI_MENU_ADDCONDBACK &ui_menu_fan_mode,&ui_menu_fan_hz}
UI_MENU(ui_menu_settings_fan,UI_MENU_CONF_FAN,UI_MENU_BACKCNT+1+1)
/** \brief Configuration->Fan menu */
UI_MENU_SUBMENU_FILTER(ui_menu_conf_fan, UI_TEXT_FAN_CONF_MENU, ui_menu_settings_fan, MENU_MODE_PRINTER,0)
#define UI_MENU_CONFIGURATION_FAN_COND &ui_menu_conf_fan,
#define UI_MENU_CONFIGURATION_FAN_COUNT 1
/** \brief SD card menu */
#ifdef SDSUPPORT
#define UI_MENU_SD_FILESELECTOR {&ui_menu_back}
UI_MENU_FILESELECT(ui_menu_sd_fileselector,UI_MENU_SD_FILESELECTOR,1)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_print_file, UI_TEXT_PRINT_FILE, UI_ACTION_SD_PRINT, MENU_MODE_SD_MOUNTED, MENU_MODE_MILLER | MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_pause_print, UI_TEXT_PAUSE_PRINT, UI_ACTION_SD_PAUSE, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING, MENU_MODE_PAUSED | MENU_MODE_MILLER)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_continue_print, UI_TEXT_CONTINUE_PRINT, UI_ACTION_SD_CONTINUE, MENU_MODE_PAUSED, MENU_MODE_MILLER)
UI_MENU_ACTION4C(ui_menu_sd_stop_print_ack, UI_ACTION_SD_STOP_ACK, UI_TEXT_STOP_PRINT_ACK)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_sd_stop_print, UI_TEXT_STOP_PRINT, ui_menu_sd_stop_print_ack, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING, MENU_MODE_MILLER)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_mill_file, UI_TEXT_MILL_FILE, UI_ACTION_SD_PRINT, MENU_MODE_SD_MOUNTED, MENU_MODE_PRINTER | MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_pause_mill, UI_TEXT_PAUSE_MILL, UI_ACTION_SD_PAUSE, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING, MENU_MODE_PAUSED | MENU_MODE_PRINTER)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_continue_mill, UI_TEXT_CONTINUE_MILL, UI_ACTION_SD_CONTINUE, MENU_MODE_PAUSED, MENU_MODE_PRINTER)
UI_MENU_ACTION4C(ui_menu_sd_stop_mill_ack, UI_ACTION_SD_STOP_ACK, UI_TEXT_STOP_MILL_ACK)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_sd_stop_mill, UI_TEXT_STOP_MILL, ui_menu_sd_stop_mill_ack, MENU_MODE_SD_PRINTING, MENU_MODE_PRINTER)
#if defined(SDCARDDETECT) && SDCARDDETECT>-1
#define UI_MOUNT_CNT 0
#define UI_MOUNT_CMD
#else
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_unmount,UI_TEXT_UNMOUNT_CARD,UI_ACTION_SD_UNMOUNT,MENU_MODE_SD_MOUNTED, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_mount,UI_TEXT_MOUNT_CARD,UI_ACTION_SD_MOUNT,0,MENU_MODE_SD_MOUNTED)
#define UI_MOUNT_CNT 2
#define UI_MOUNT_CMD ,&ui_menu_sd_mount,&ui_menu_sd_unmount
#endif // (SDCARDDETECT) && SDCARDDETECT>-1
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_sd_delete,UI_TEXT_DELETE_FILE,UI_ACTION_SD_DELETE,MENU_MODE_SD_MOUNTED, MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_SD {UI_MENU_ADDCONDBACK &ui_menu_sd_print_file,&ui_menu_sd_mill_file,&ui_menu_sd_pause_print,&ui_menu_sd_pause_mill,&ui_menu_sd_stop_print,&ui_menu_sd_stop_mill,&ui_menu_sd_continue_print,&ui_menu_sd_continue_mill,&ui_menu_sd_delete UI_MOUNT_CMD}
UI_MENU(ui_menu_sd,UI_MENU_SD,UI_MENU_BACKCNT+9+UI_MOUNT_CNT)
UI_MENU_SUBMENU_FILTER(ui_menu_sd_sub,UI_TEXT_SD_CARD,ui_menu_sd,0, MENU_MODE_PRINTING)
#define UI_MENU_SD_COND &ui_menu_sd_sub,
#define UI_MENU_SD_CNT 1
#else
#define UI_MENU_SD_COND
#define UI_MENU_SD_CNT 0
#endif // SDSUPPORT
#if SHOW_DEBUGGING_MENU
/** \brief Debugging menu */
UI_MENU_ACTIONCOMMAND(ui_menu_debug_echo, UI_TEXT_DBG_ECHO, UI_ACTION_DEBUG_ECHO)
UI_MENU_ACTIONCOMMAND(ui_menu_debug_info, UI_TEXT_DBG_INFO, UI_ACTION_DEBUG_INFO)
UI_MENU_ACTIONCOMMAND(ui_menu_debug_error, UI_TEXT_DBG_ERROR, UI_ACTION_DEBUG_ERROR)
UI_MENU_ACTIONCOMMAND(ui_menu_debug_dryrun, UI_TEXT_DBG_DRYRUN, UI_ACTION_DEBUG_DRYRUN)
#define UI_MENU_DEBUGGING {UI_MENU_ADDCONDBACK &ui_menu_debug_echo,&ui_menu_debug_info,&ui_menu_debug_error,&ui_menu_debug_dryrun}
UI_MENU(ui_menu_debugging,UI_MENU_DEBUGGING,4+UI_MENU_BACKCNT)
#endif // SHOW_DEBUGGING_MENU
/** \brief Acceleration settings */
UI_MENU_CHANGEACTION_FILTER(ui_menu_accel_printx, UI_TEXT_PRINT_X, UI_ACTION_PRINT_ACCEL_X, 0, MENU_MODE_MILLER)
UI_MENU_CHANGEACTION_FILTER(ui_menu_accel_printy, UI_TEXT_PRINT_Y, UI_ACTION_PRINT_ACCEL_Y, 0, MENU_MODE_MILLER)
UI_MENU_CHANGEACTION_FILTER(ui_menu_accel_printz, UI_TEXT_PRINT_Z, UI_ACTION_PRINT_ACCEL_Z, 0, MENU_MODE_MILLER)
UI_MENU_CHANGEACTION(ui_menu_accel_travelx, UI_TEXT_MOVE_X, UI_ACTION_MOVE_ACCEL_X)
UI_MENU_CHANGEACTION(ui_menu_accel_travely, UI_TEXT_MOVE_Y, UI_ACTION_MOVE_ACCEL_Y)
UI_MENU_CHANGEACTION(ui_menu_accel_travelz, UI_TEXT_MOVE_Z, UI_ACTION_MOVE_ACCEL_Z)
UI_MENU_CHANGEACTION(ui_menu_accel_jerk, UI_TEXT_JERK, UI_ACTION_MAX_JERK)
UI_MENU_CHANGEACTION(ui_menu_accel_zjerk, UI_TEXT_ZJERK, UI_ACTION_MAX_ZJERK)
#define UI_MENU_ACCEL {UI_MENU_ADDCONDBACK &ui_menu_accel_printx, &ui_menu_accel_printy, &ui_menu_accel_printz, &ui_menu_accel_travelx, &ui_menu_accel_travely, &ui_menu_accel_travelz, &ui_menu_accel_jerk, &ui_menu_accel_zjerk}
UI_MENU(ui_menu_accel,UI_MENU_ACCEL,8+UI_MENU_BACKCNT)
/** \brief Feedrates */
UI_MENU_CHANGEACTION(ui_menu_feedrate_maxx, UI_TEXT_FEED_MAX_X, UI_ACTION_MAX_FEEDRATE_X)
UI_MENU_CHANGEACTION(ui_menu_feedrate_maxy, UI_TEXT_FEED_MAX_Y, UI_ACTION_MAX_FEEDRATE_Y)
UI_MENU_CHANGEACTION(ui_menu_feedrate_maxz, UI_TEXT_FEED_MAX_Z, UI_ACTION_MAX_FEEDRATE_Z)
UI_MENU_CHANGEACTION(ui_menu_feedrate_homex, UI_TEXT_FEED_HOME_X, UI_ACTION_HOMING_FEEDRATE_X)
UI_MENU_CHANGEACTION(ui_menu_feedrate_homey, UI_TEXT_FEED_HOME_Y, UI_ACTION_HOMING_FEEDRATE_Y)
UI_MENU_CHANGEACTION(ui_menu_feedrate_homez, UI_TEXT_FEED_HOME_Z, UI_ACTION_HOMING_FEEDRATE_Z)
#define UI_MENU_FEEDRATE {UI_MENU_ADDCONDBACK &ui_menu_quick_speedmultiply, &ui_menu_feedrate_maxx, &ui_menu_feedrate_maxy, &ui_menu_feedrate_maxz, &ui_menu_feedrate_homex, &ui_menu_feedrate_homey, &ui_menu_feedrate_homez}
UI_MENU(ui_menu_feedrate,UI_MENU_FEEDRATE,6+1+UI_MENU_BACKCNT)
/** \brief General configuration settings */
/** \brief Configuration->General menu */
UI_MENU_ACTION2C(ui_menu_stepper2,UI_ACTION_STEPPER_INACTIVE,UI_TEXT_STEPPER_OFF2)
UI_MENU_ACTION2C(ui_menu_maxinactive2,UI_ACTION_MAX_INACTIVE,UI_TEXT_ALL_OFF2)
UI_MENU_CHANGEACTION(ui_menu_general_baud,UI_TEXT_BAUDRATE,UI_ACTION_BAUDRATE)
UI_MENU_ACTIONSELECTOR(ui_menu_general_stepper_inactive,UI_TEXT_STEPPER_OFF,ui_menu_stepper2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_general_max_inactive,UI_TEXT_ALL_OFF,ui_menu_maxinactive2,MENU_MODE_PRINTER,0)
#if FEATURE_BEEPER
UI_MENU_ACTIONCOMMAND(ui_menu_general_beeper,UI_TEXT_BEEPER,UI_ACTION_BEEPER)
#define BEEPER_MODE_COUNT 1
#define BEEPER_MODE_ENTRY ,&ui_menu_general_beeper
#else
#define BEEPER_MODE_COUNT 0
#define BEEPER_MODE_ENTRY
#endif // FEATURE_BEEPER
#if FEATURE_RGB_LIGHT_EFFECTS
UI_MENU_CHANGEACTION(ui_menu_toggle_rgb_light,UI_TEXT_RGB_LIGHT_MODE,UI_ACTION_RGB_LIGHT_MODE)
#define RGB_LIGHT_ENTRY ,&ui_menu_toggle_rgb_light
#define RGB_LIGHT_COUNT 1
#else
#define RGB_LIGHT_ENTRY
#define RGB_LIGHT_COUNT 0
#endif // FEATURE_RGB_LIGHT_EFFECTS
#if FEATURE_MILLING_MODE
UI_MENU_ACTIONCOMMAND(ui_menu_operating_mode,UI_TEXT_OPERATING_MODE,UI_ACTION_OPERATING_MODE)
#define OPERATING_MODE_ENTRY ,&ui_menu_operating_mode
#define OPERATING_MODE_COUNT 1
#if MOTHERBOARD == DEVICE_TYPE_RF1000
UI_MENU_ACTIONCOMMAND(ui_menu_z_endstop_type,UI_TEXT_Z_ENDSTOP_TYPE,UI_ACTION_Z_ENDSTOP_TYPE)
#define Z_ENDSTOP_TYPE_ENTRY ,&ui_menu_z_endstop_type
#define Z_ENDSTOP_TYPE_COUNT 1
#else
#define Z_ENDSTOP_TYPE_ENTRY
#define Z_ENDSTOP_TYPE_COUNT 0
#endif // MOTHERBOARD == DEVICE_TYPE_RF1000
#if FEATURE_CONFIGURABLE_MILLER_TYPE
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_miller_type,UI_TEXT_MILLER_TYPE,UI_ACTION_MILLER_TYPE,MENU_MODE_MILLER,0)
#define MILLER_TYPE_ENTRY ,&ui_menu_miller_type
#define MILLER_TYPE_COUNT 1
#else
#define MILLER_TYPE_ENTRY
#define MILLER_TYPE_COUNT 0
#endif // FEATURE_CONFIGURABLE_MILLER_TYPE
#else
#define OPERATING_MODE_ENTRY
#define OPERATING_MODE_COUNT 0
#define Z_ENDSTOP_TYPE_ENTRY
#define Z_ENDSTOP_TYPE_COUNT 0
#define MILLER_TYPE_ENTRY
#define MILLER_TYPE_COUNT 0
#endif // FEATURE_MILLING_MODE
#if NUM_EXTRUDER>1
UI_MENU_ACTION2C(ui_menu_extruder_offsetx2,UI_ACTION_EXTRUDER_OFFSET_X,UI_TEXT_EXTRUDER_OFFSET_X2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_extruder_offset_x,UI_TEXT_EXTRUDER_OFFSET_X,ui_menu_extruder_offsetx2, MENU_MODE_PRINTER, MENU_MODE_MILLER)
UI_MENU_ACTION2C(ui_menu_extruder_offsety2,UI_ACTION_EXTRUDER_OFFSET_Y,UI_TEXT_EXTRUDER_OFFSET_Y2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_extruder_offset_y,UI_TEXT_EXTRUDER_OFFSET_Y,ui_menu_extruder_offsety2, MENU_MODE_PRINTER, MENU_MODE_MILLER)
#define EXTRUDER_OFFSET_TYPE_ENTRY_XY ,&ui_menu_extruder_offset_x ,&ui_menu_extruder_offset_y
#define EXTRUDER_OFFSET_TYPE_COUNT_XY 2
#else
#define EXTRUDER_OFFSET_TYPE_ENTRY_XY
#define EXTRUDER_OFFSET_TYPE_COUNT_XY 0
#endif // NUM_EXTRUDER>1
#if FEATURE_EMERGENCY_PAUSE
UI_MENU_ACTION4C(ui_menu_emergency_pause_min2,UI_ACTION_EMERGENCY_PAUSE_MIN,UI_TEXT_EMERGENCY_PAUSE_MIN2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_emergency_pause_min,UI_TEXT_EMERGENCY_PAUSE_MIN,ui_menu_emergency_pause_min2, MENU_MODE_PRINTER, 0)
UI_MENU_ACTION4C(ui_menu_emergency_pause_max2,UI_ACTION_EMERGENCY_PAUSE_MAX,UI_TEXT_EMERGENCY_PAUSE_MAX2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_emergency_pause_max,UI_TEXT_EMERGENCY_PAUSE_MAX,ui_menu_emergency_pause_max2, MENU_MODE_PRINTER, 0)
#define EMERGENCY_PAUSE_MINMAX_ENTRY &ui_menu_emergency_pause_min ,&ui_menu_emergency_pause_max
#define EMERGENCY_PAUSE_MINMAX_COUNT 2
#else
#define EMERGENCY_PAUSE_MINMAX_ENTRY
#define EMERGENCY_PAUSE_MINMAX_COUNT 0
#endif // FEATURE_EMERGENCY_PAUSE
#if FEATURE_EMERGENCY_STOP_ALL
UI_MENU_ACTION4C(ui_menu_emergency_zstop_min2,UI_ACTION_EMERGENCY_ZSTOP_MIN,UI_TEXT_EMERGENCY_ZSTOP_MIN2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_emergency_zstop_min,UI_TEXT_EMERGENCY_ZSTOP_MIN,ui_menu_emergency_zstop_min2, MENU_MODE_PRINTER, 0)
UI_MENU_ACTION4C(ui_menu_emergency_zstop_max2,UI_ACTION_EMERGENCY_ZSTOP_MAX,UI_TEXT_EMERGENCY_ZSTOP_MAX2)
UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_emergency_zstop_max,UI_TEXT_EMERGENCY_ZSTOP_MAX,ui_menu_emergency_zstop_max2, MENU_MODE_PRINTER, 0)
#define EMERGENCY_ZSTOP_MINMAX_ENTRY ,&ui_menu_emergency_zstop_min ,&ui_menu_emergency_zstop_max
#define EMERGENCY_ZSTOP_MINMAX_COUNT 2
#else
#define EMERGENCY_ZSTOP_MINMAX_ENTRY
#define EMERGENCY_ZSTOP_MINMAX_COUNT 0
#endif // FEATURE_EMERGENCY_STOP_ALL
#if FEATURE_ZERO_DIGITS
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_zero_digits_homing,UI_TEXT_DO_FEATURE_ZERO_DIGITS,UI_ACTION_FEATURE_ZERO_DIGITS,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_FEATURE_ZERO_DIGITS , &ui_menu_zero_digits_homing
#define UI_MENU_FEATURE_ZERO_DIGITS_COUNT 1
#else
#define UI_MENU_FEATURE_ZERO_DIGITS
#define UI_MENU_FEATURE_ZERO_DIGITS_COUNT 0
#endif // FEATURE_ZERO_DIGITS
#if FEATURE_DIGIT_Z_COMPENSATION
UI_MENU_ACTIONCOMMAND_FILTER(ui_menu_digits_cmp,UI_TEXT_DO_DIGIT_COMPENSATION,UI_ACTION_DIGIT_COMPENSATION,MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
#define UI_MENU_FEATURE_DIGITS_CMP , &ui_menu_digits_cmp
#define UI_MENU_FEATURE_DIGITS_CMP_COUNT 1
#else
#define UI_MENU_FEATURE_DIGITS_CMP
#define UI_MENU_FEATURE_DIGITS_CMP_COUNT 0
#endif // FEATURE_DIGIT_Z_COMPENSATION
#define UI_MENU_DMS {UI_MENU_ADDCONDBACK EMERGENCY_PAUSE_MINMAX_ENTRY EMERGENCY_ZSTOP_MINMAX_ENTRY UI_MENU_FEATURE_ZERO_DIGITS UI_MENU_FEATURE_DIGITS_CMP}
UI_MENU(ui_menu_dms,UI_MENU_DMS,UI_MENU_BACKCNT+EMERGENCY_PAUSE_MINMAX_COUNT+EMERGENCY_ZSTOP_MINMAX_COUNT+UI_MENU_FEATURE_ZERO_DIGITS_COUNT+UI_MENU_FEATURE_DIGITS_CMP_COUNT)
/** \brief Configuration->DMS Features menu */
UI_MENU_SUBMENU_FILTER(ui_menu_conf_dms, UI_TEXT_DMS, ui_menu_dms, MENU_MODE_PRINTER, 0)
#define UI_MENU_CONFIGURATION_DMS_COND &ui_menu_conf_dms,
#define UI_MENU_CONFIGURATION_DMS_COUNT 1
//############################################################### PID MENU
UI_MENU_ACTION4C(ui_menu_pid_choose_classicpid_ack,UI_ACTION_CHOOSE_CLASSICPID,UI_TEXT_PID_ACK)
UI_MENU_ACTIONSELECTOR(ui_menu_pid_choose_classicpid,UI_ACTION_TEXT_CLASSICPID,ui_menu_pid_choose_classicpid_ack)
UI_MENU_ACTION4C(ui_menu_pid_choose_lesserintegral_ack,UI_ACTION_CHOOSE_LESSERINTEGRAL,UI_TEXT_PID_ACK)
UI_MENU_ACTIONSELECTOR(ui_menu_pid_choose_lesserintegral,UI_ACTION_TEXT_PESSEN,ui_menu_pid_choose_lesserintegral_ack)
UI_MENU_ACTION4C(ui_menu_pid_choose_some_ack,UI_ACTION_CHOOSE_SOME,UI_TEXT_PID_ACK)
UI_MENU_ACTIONSELECTOR(ui_menu_pid_choose_some,UI_ACTION_TEXT_SOME,ui_menu_pid_choose_some_ack)
UI_MENU_ACTION4C(ui_menu_pid_choose_no_ack,UI_ACTION_CHOOSE_NO,UI_TEXT_PID_ACK)
UI_MENU_ACTIONSELECTOR(ui_menu_pid_choose_no,UI_ACTION_TEXT_NO,ui_menu_pid_choose_no_ack)
UI_MENU_ACTION4C(ui_menu_pid_choose_tyreus_lyben_ack,UI_ACTION_CHOOSE_TYREUS_LYBEN,UI_TEXT_PID_ACK)
UI_MENU_ACTIONSELECTOR(ui_menu_pid_choose_tyreus_lyben,UI_ACTION_TEXT_TYREUS_LYBEN,ui_menu_pid_choose_tyreus_lyben_ack)
UI_MENU_CHANGEACTION(ui_menu_pid_choose_drivemin,UI_TEXT_EXTR_DMIN,UI_ACTION_CHOOSE_DMIN)
UI_MENU_CHANGEACTION(ui_menu_pid_choose_drivemax,UI_TEXT_EXTR_DMAX,UI_ACTION_CHOOSE_DMAX)
UI_MENU_CHANGEACTION(ui_menu_pid_choose_PIDmax,UI_TEXT_EXTR_PMAX,UI_ACTION_CHOOSE_PIDMAX)
UI_MENU_CHANGEACTION(ui_menu_pid_choose_sensor,UI_TEXT_EXTR_SENSOR_TYPE,UI_ACTION_CHOOSE_SENSOR)
#define UI_MENU_PID_CHOOSE {UI_MENU_ADDCONDBACK &ui_menu_pid_choose_classicpid ,&ui_menu_pid_choose_lesserintegral, &ui_menu_pid_choose_some, &ui_menu_pid_choose_no, &ui_menu_pid_choose_tyreus_lyben, &ui_menu_pid_choose_drivemin, &ui_menu_pid_choose_drivemax, &ui_menu_pid_choose_PIDmax, &ui_menu_pid_choose_sensor}
UI_MENU(ui_menu_pid_choose,UI_MENU_PID_CHOOSE,8) //8 ??? mit 9 gabs probleme. ???
UI_MENU_SUBMENU(ui_menu_pid_ext0_cond, UI_TEXT_EXTRUDER " 0", ui_menu_pid_choose)
#define UI_MENU_PID_EXT0_COND &ui_menu_pid_ext0_cond
#define UI_MENU_PID_EXT0_COUNT 1
#if NUM_EXTRUDER>1
UI_MENU_SUBMENU(ui_menu_pid_ext1_cond, UI_TEXT_EXTRUDER " 1", ui_menu_pid_choose)
#define UI_MENU_PID_EXT1_COND ,&ui_menu_pid_ext1_cond
#define UI_MENU_PID_EXT1_COUNT 1
#else
#define UI_MENU_PID_EXT1_COND
#define UI_MENU_PID_EXT1_COUNT 0
#endif //NUM_EXTRUDER>1
#if HAVE_HEATED_BED==true
UI_MENU_SUBMENU(ui_menu_pid_bed_cond, UI_TEXT_BED, ui_menu_pid_choose)
#define UI_MENU_PID_BED_COND ,&ui_menu_pid_bed_cond
#define UI_MENU_PID_BED_COUNT 1
#else
#define UI_MENU_PID_BED_COND
#define UI_MENU_PID_BED_COUNT 0
#endif // HAVE_HEATED_BED==true
#define UI_MENU_PID_COND {UI_MENU_ADDCONDBACK UI_MENU_PID_EXT0_COND UI_MENU_PID_EXT1_COND UI_MENU_PID_BED_COND}
#define UI_MENU_PID_COUNT UI_MENU_BACKCNT + UI_MENU_PID_EXT0_COUNT + UI_MENU_PID_EXT1_COUNT + UI_MENU_PID_BED_COUNT
UI_MENU(ui_menu_pid,UI_MENU_PID_COND,UI_MENU_PID_COUNT)
//############################################################### PID MENU
//############################################################### MOTOR MENU
//hier wird davon ausgegangen dass 1 extruder immer da ist und der zweite optional. Auch im Millingmode.
UI_MENU_CHANGEACTION(ui_menu_motor_x,UI_TEXT_MOTOR_X,UI_ACTION_CHOOSE_MOTOR_X)
#define UI_MENU_MOTOR_X_COND &ui_menu_motor_x
#define UI_MENU_MOTOR_X_COUNT 1
UI_MENU_CHANGEACTION(ui_menu_motor_y,UI_TEXT_MOTOR_Y,UI_ACTION_CHOOSE_MOTOR_Y)
#define UI_MENU_MOTOR_Y_COND ,&ui_menu_motor_y
#define UI_MENU_MOTOR_Y_COUNT 1
UI_MENU_CHANGEACTION(ui_menu_motor_z,UI_TEXT_MOTOR_Z,UI_ACTION_CHOOSE_MOTOR_Z)
#define UI_MENU_MOTOR_Z_COND ,&ui_menu_motor_z
#define UI_MENU_MOTOR_Z_COUNT 1
UI_MENU_CHANGEACTION_FILTER(ui_menu_motor_e0, UI_TEXT_MOTOR_E0, UI_ACTION_CHOOSE_MOTOR_E0, MENU_MODE_PRINTER,0) //extruder nur bei printermode
UI_MENU_CHANGEACTION_FILTER(ui_menu_motorsteps_e0,UI_TEXT_EXTR_STEPS0, UI_ACTION_EXTR_STEPS_E0, MENU_MODE_PRINTER,0)
UI_MENU_CHANGEACTION_FILTER(ui_menu_advanceL_e0, UI_TEXT_EXTR_ADVANCE_L_E0, UI_ACTION_ADVANCE_L_E0, MENU_MODE_PRINTER,0)
#define UI_MENU_MOTOR_E0_COND ,&ui_menu_motor_e0, &ui_menu_motorsteps_e0, &ui_menu_advanceL_e0
#define UI_MENU_MOTOR_E0_COUNT 3
//UI_ACTION_EXTR_STEPS
#if NUM_EXTRUDER>1
UI_MENU_CHANGEACTION_FILTER(ui_menu_motor_e1, UI_TEXT_MOTOR_E1, UI_ACTION_CHOOSE_MOTOR_E1, MENU_MODE_PRINTER,0) //extruder nur bei printermode
UI_MENU_CHANGEACTION_FILTER(ui_menu_motorsteps_e1,UI_TEXT_EXTR_STEPS1, UI_ACTION_EXTR_STEPS_E1, MENU_MODE_PRINTER,0)
UI_MENU_CHANGEACTION_FILTER(ui_menu_advanceL_e1, UI_TEXT_EXTR_ADVANCE_L_E1, UI_ACTION_ADVANCE_L_E1, MENU_MODE_PRINTER,0)
#define UI_MENU_MOTOR_E1_COND ,&ui_menu_motor_e1, &ui_menu_motorsteps_e1, &ui_menu_advanceL_e1
#define UI_MENU_MOTOR_E1_COUNT 3
#else
#define UI_MENU_MOTOR_E1_COND
#define UI_MENU_MOTOR_E1_COUNT 0
#endif //NUM_EXTRUDER>1
UI_MENU_CHANGEACTION(ui_menu_freq_dbl,UI_TEXT_FREQ_DBL,UI_ACTION_FREQ_DBL)
#define UI_MENU_FREQ_DBL_COND ,&ui_menu_freq_dbl
#define UI_MENU_FREQ_DBL_COUNT 1
#define UI_MENU_MOTOR_COND {UI_MENU_ADDCONDBACK UI_MENU_MOTOR_X_COND UI_MENU_MOTOR_Y_COND UI_MENU_MOTOR_Z_COND UI_MENU_MOTOR_E0_COND UI_MENU_MOTOR_E1_COND UI_MENU_FREQ_DBL_COND}
#define UI_MENU_MOTOR_COUNT UI_MENU_BACKCNT + UI_MENU_MOTOR_X_COUNT + UI_MENU_MOTOR_Y_COUNT + UI_MENU_MOTOR_Z_COUNT + UI_MENU_MOTOR_E0_COUNT + UI_MENU_MOTOR_E1_COUNT + UI_MENU_FREQ_DBL_COUNT
UI_MENU(ui_menu_motor,UI_MENU_MOTOR_COND,UI_MENU_MOTOR_COUNT)
//############################################################### MOTOR MENU
#define UI_MENU_GENERAL {UI_MENU_ADDCONDBACK &ui_menu_general_baud,&ui_menu_general_stepper_inactive,&ui_menu_general_max_inactive BEEPER_MODE_ENTRY RGB_LIGHT_ENTRY OPERATING_MODE_ENTRY Z_ENDSTOP_TYPE_ENTRY MILLER_TYPE_ENTRY EXTRUDER_OFFSET_TYPE_ENTRY_XY}
UI_MENU(ui_menu_general,UI_MENU_GENERAL,UI_MENU_BACKCNT+1+1+1+BEEPER_MODE_COUNT+RGB_LIGHT_COUNT+OPERATING_MODE_COUNT+Z_ENDSTOP_TYPE_COUNT+MILLER_TYPE_COUNT+EXTRUDER_OFFSET_TYPE_COUNT_XY)
/** \brief Configuration menu */
UI_MENU_SUBMENU(ui_menu_conf_general, UI_TEXT_GENERAL, ui_menu_general)
UI_MENU_SUBMENU_FILTER(ui_menu_conf_accel, UI_TEXT_ACCELERATION, ui_menu_accel, MENU_MODE_PRINTER, MENU_MODE_MILLER)
#if FEATURE_MILLING_MODE
UI_MENU_CHANGEACTION_FILTER(ui_menu_help_accel_mill,UI_TEXT_ACCEL_MILL,UI_ACTION_MILL_ACCELERATION,MENU_MODE_MILLER,MENU_MODE_PRINTER)
#define UI_MENU_ACCEL_MILL_COND &ui_menu_help_accel_mill,
#define UI_MENU_ACCEL_MILL_COUNT 1
#else
#define UI_MENU_ACCEL_MILL_COND
#define UI_MENU_ACCEL_MILL_COUNT 0
#endif //FEATURE_MILLING_MODE
UI_MENU_SUBMENU(ui_menu_conf_feed, UI_TEXT_FEEDRATE, ui_menu_feedrate)
UI_MENU_SUBMENU_FILTER(ui_menu_conf_pid, UI_TEXT_TEMPERATURES, ui_menu_pid, MENU_MODE_PRINTER, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED)
//#if MENU_MODE_PRINTER
//#define MENU_MODE_PRINTER_COUNT 1
//#else
//#define MENU_MODE_PRINTER_COUNT 0
//#endif //MENU_MODE_PRINTER
UI_MENU_SUBMENU(ui_menu_conf_motor, UI_TEXT_STEPPER, ui_menu_motor)