Prusa3d Marlin fork
menu.h
1 //menu.h
2 #ifndef _MENU_H
3 #define _MENU_H
4 
5 #include <inttypes.h>
6 #include "eeprom.h"
7 
8 #define MENU_DATA_SIZE 32
9 
10 //Function pointer to menu functions.
11 typedef void (*menu_func_t)(void);
12 
13 typedef struct
14 {
15  menu_func_t menu;
16  int8_t position;
18 
19 typedef struct
20 {
21  //Variables used when editing values.
22  const char* editLabel;
23  uint8_t editValueBits; // 8 or 16
24  void* editValuePtr;
25  int16_t currentValue;
26  int16_t minEditValue;
27  int16_t maxEditValue;
28  int16_t minJumpValue;
30 
31 extern uint8_t menu_data[MENU_DATA_SIZE];
32 
33 extern uint8_t menu_depth;
34 
37 enum ESeriousErrors {
38  MENU_BLOCK_NONE = 0,
39  MENU_BLOCK_THERMAL_ERROR = 0x01,
40 #ifdef THERMAL_MODEL
41  MENU_BLOCK_THERMAL_MODEL_AUTOTUNE = 0x02,
42 #endif
43  MENU_BLOCK_STATUS_SCREEN_M0 = 0x04,
44 }; // and possibly others in the future.
45 
49 extern uint8_t menu_block_mask;
50 
53 #define menu_set_block(x) menu_block_mask |= x;
54 #define menu_unset_block(x) menu_block_mask &= ~x;
55 #define menu_is_blocked(x) (menu_block_mask & x)
56 #define menu_is_any_block() (menu_block_mask != MENU_BLOCK_NONE)
57 
58 extern uint8_t menu_line;
59 extern uint8_t menu_item;
60 extern uint8_t menu_row;
61 
62 //scroll offset in the current menu
63 extern uint8_t menu_top;
64 extern uint8_t menu_clicked;
65 extern uint8_t menu_leaving;
66 
67 //function pointer to the currently active menu
68 extern menu_func_t menu_menu;
69 
70 extern void menu_data_reset(void);
71 
72 extern void menu_goto(menu_func_t menu, const int16_t encoder, bool reset_menu_state, const bool feedback=false);
73 
74 #define MENU_BEGIN() menu_start(); for(menu_row = 0; menu_row < LCD_HEIGHT; menu_row++, menu_line++) { menu_item = 0;
75 void menu_start(void);
76 
77 #define MENU_END() menu_end(); }
78 extern void menu_end(void);
79 
80 extern void menu_back(void);
81 extern void menu_back_no_reset(void);
82 extern void menu_back(uint8_t nLevel);
83 
84 extern void menu_back_if_clicked(void);
85 
86 extern void menu_submenu(menu_func_t submenu, const bool feedback=false);
87 extern void menu_submenu_no_reset(menu_func_t submenu, const bool feedback=false);
88 
89 extern void menu_item_ret(void);
90 
91 //extern int menu_draw_item_printf_P(char type_char, const char* format, ...);
92 
93 
94 //int menu_draw_item_puts_P_int16(char type_char, const char* str, int16_t val, );
95 
96 #define MENU_ITEM_DUMMY() menu_item_dummy()
97 extern void menu_item_dummy(void);
98 
99 #define MENU_ITEM_TEXT_P(str) do { menu_item_text_P(str); } while (0)
100 extern uint8_t menu_item_text_P(const char* str);
101 
102 #define MENU_ITEM_SUBMENU_P(str, submenu) do { menu_item_submenu_P(str, submenu); } while (0)
103 extern void menu_item_submenu_P(const char* str, menu_func_t submenu);
104 
105 #define MENU_ITEM_SUBMENU_E(sheet, submenu) do { menu_item_submenu_E(sheet, submenu); } while (0)
106 extern void menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu);
107 
108 #define MENU_ITEM_FUNCTION_E(sheet, submenu) do { menu_item_function_E(sheet, submenu); } while (0)
109 extern void menu_item_function_E(const Sheet &sheet, menu_func_t func);
110 
111 #define MENU_ITEM_BACK_P(str) do { menu_item_back_P(str); } while (0)
112 extern void menu_item_back_P(const char* str);
113 
114 // leaving menu - this condition must be immediately before MENU_ITEM_BACK_P
115 #define ON_MENU_LEAVE(func) do { if (menu_item_leave()){ func } } while (0)
116 extern bool menu_item_leave();
117 
118 #define MENU_ITEM_FUNCTION_P(str, func) do { menu_item_function_P(str, func); } while (0)
119 extern void menu_item_function_P(const char* str, menu_func_t func);
120 
121 #define MENU_ITEM_FUNCTION_NR_P(str, number, func, fn_par) do { menu_item_function_P(str, number, func, fn_par); } while (0)
122 extern void menu_item_function_P(const char* str, char number, void (*func)(uint8_t), uint8_t fn_par);
123 
124 #define MENU_ITEM_TOGGLE_P(str, toggle, func) do { menu_item_toggle_P(str, toggle, func, 0x02); } while (0)
125 #define MENU_ITEM_TOGGLE(str, toggle, func) do { menu_item_toggle_P(str, toggle, func, 0x00); } while (0)
126 extern void menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings);
127 
128 #define MENU_ITEM_GCODE_P(str, str_gcode) do { menu_item_gcode_P(str, str_gcode); } while (0)
129 extern void menu_item_gcode_P(const char* str, const char* str_gcode);
130 
131 
132 extern const char menu_fmt_int3[];
133 
134 extern const char menu_fmt_float31[];
135 extern const char menu_fmt_float13[];
136 
137 extern void menu_draw_float31(const char* str, float val);
138 
139 extern void menu_draw_float13(const char* str, float val);
140 
142 {
143  char c[19];
144 };
145 
146 extern void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer);
147 
148 #define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { menu_item_edit_P(str, pval, sizeof(*pval)*8, minval, maxval, 0); } while (0)
149 #define MENU_ITEM_EDIT_int3_jmp_P(str, pval, minval, maxval, jmpval) do { menu_item_edit_P(str, pval, sizeof(*pval)*8, minval, maxval, jmpval); } while (0)
150 extern void menu_item_edit_P(const char* str, void* pval, uint8_t pbits, int16_t min_val, int16_t max_val, int16_t jmp_val);
151 
152 extern void menu_progressbar_init(uint16_t total, const char* title);
153 extern void menu_progressbar_update(uint16_t newVal);
154 extern void menu_progressbar_finish(void);
155 
156 #endif //_MENU_H
Definition: menu.h:142
Definition: eeprom.h:30
Definition: menu.h:20
Definition: menu.h:14