2 This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
3 Smoothie 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.
4 Smoothie 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.
5 You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
19 #define THEPANEL Panel::instance
23 class ModifyValuesScreen
;
27 class Panel
: public Module
{
31 static Panel
* instance
;
33 void on_module_loaded();
34 uint32_t button_tick(uint32_t dummy
);
35 uint32_t encoder_tick(uint32_t dummy
);
36 void on_idle(void* argument
);
37 void on_main_loop(void* argument
);
38 void on_set_public_data(void* argument
);
39 void on_second_tick(void* argument
);
40 void enter_screen(PanelScreen
* screen
);
43 // Encoder and buttons
44 uint32_t on_up(uint32_t dummy
);
45 uint32_t on_down(uint32_t dummy
);
46 uint32_t on_back(uint32_t dummy
);
47 uint32_t on_select(uint32_t dummy
);
48 uint32_t refresh_tick(uint32_t dummy
);
49 uint32_t encoder_check(uint32_t dummy
);
50 bool counter_change();
52 int get_encoder_resolution() const { return encoder_click_resolution
; }
55 void enter_menu_mode(bool force
= false);
56 void setup_menu(uint16_t rows
, uint16_t lines
);
57 void setup_menu(uint16_t rows
);
60 uint16_t max_screen_lines() { return screen_lines
; }
61 uint16_t get_menu_current_line() { return menu_current_line
; }
64 bool enter_control_mode(float passed_normal_increment
, float passed_pressed_increment
);
65 void set_control_value(float value
);
66 float get_control_value();
67 bool control_value_change();
68 void control_value_update();
69 float get_jogging_speed(char axis
) { return jogging_speed_mm_min
[axis
-'X']; }
70 float get_default_hotend_temp() { return default_hotend_temperature
; }
71 float get_default_bed_temp() { return default_bed_temperature
; }
73 // file playing from sd
74 bool is_playing() const;
75 bool is_suspended() const;
76 void set_playing_file(string f
);
77 const char* get_playing_file() { return playing_file
; }
79 string
getMessage() { return message
; }
80 bool hasMessage() { return message
.size() > 0; }
82 uint16_t get_screen_lines() const { return screen_lines
; }
84 // public as it is directly accessed by screens... not good
85 // TODO pass lcd into ctor of each sub screen
87 PanelScreen
* custom_screen
;
89 using encoder_cb_t
= std::function
<void(int ticks
)>;
90 bool enter_direct_encoder_mode(encoder_cb_t fnc
);
92 // as panelscreen accesses private fields in Panel
93 friend class PanelScreen
;
98 bool mount_external_sd(bool on
);
100 PinName extsd_spi_cs
;
105 int menu_selected_line
;
111 float normal_increment
;
112 int control_normal_counter
;
113 float control_base_value
;
124 PanelScreen
* top_screen
;
125 PanelScreen
* current_screen
;
127 float jogging_speed_mm_min
[3];
128 float default_hotend_temperature
;
129 float default_bed_temperature
;
132 encoder_cb_t encoder_cb_fnc
;
134 uint16_t screen_lines
;
135 uint16_t menu_current_line
;
136 char playing_file
[20];
137 uint8_t extsd_spi_channel
;
142 bool control_value_changed
:1;
143 bool external_sd_enable
:1;
144 volatile bool counter_changed
:1;
145 volatile bool click_changed
:1;
146 volatile bool refresh_flag
:1;
147 volatile bool do_buttons
:1;
148 volatile bool do_encoder
:1;
151 int encoder_click_resolution
:3;