Lots of work on status representation

This commit is contained in:
2023-04-28 14:50:58 +03:00
parent 796fd57ac3
commit 30ccb20846
8 changed files with 430 additions and 457 deletions
+66 -15
View File
@@ -5,6 +5,48 @@
namespace grbl {
enum class machine_status {
idle,
run,
hold,
jog,
alarm,
door,
check,
home,
sleep,
tool,
unknown
};
machine_status status_from_string(const std::string& status);
std::string status_to_string(const machine_status& status);
std::string alarm_to_string(int alarm);
struct realtime_status_report {
machine_status status;
std::string sub_status;
float work_pos[3] = {0};
float machine_pos[3] = {0};
size_t buffers_free = 0;
size_t rx_chars_free = 0;
size_t line_number = 0;
float feed_rate = 0;
float programmed_rpm = 0;
float actual_rpm = 0;
std::string signals;
float axis_offsets[3] = {0};
std::string coordinate_system;
std::string overrides;
std::string accessory_status;
bool mpg = false;
bool homing_complete = false;
std::string scaled_axis;
bool tool_length_reference_offset_set = false;
std::string firmware;
};
realtime_status_report parse_status_report(std::string line, grbl::realtime_status_report& result);
enum class grbl_machine_state {
init,
@@ -12,17 +54,6 @@ enum class grbl_machine_state {
idle,
};
enum class jog_direction {
up,
down,
left,
right,
up_left,
up_right,
down_left,
down_right
};
struct jog_state {
bool left_pressed = false;
bool right_pressed = false;
@@ -33,7 +64,7 @@ struct jog_state {
bool speed_fast_pressed = false;
bool speed_slow_pressed = false;
bool no_jogging() const;
[[nodiscard]] bool no_jogging() const;
};
static bool operator==(const jog_state& a, const jog_state& b) {
@@ -54,21 +85,41 @@ static bool operator!=(const jog_state& a, const jog_state& b) {
return !(a == b);
}
struct machine_listener {
virtual void on_connected() = 0;
virtual void on_disconnected() = 0;
virtual void on_realtime_status_report(realtime_status_report) = 0;
virtual void on_banner(std::string line) = 0;
virtual void on_message(std::string message) = 0;
virtual void on_alarm(int alarm) = 0;
};
struct machine : public transport_callbacks {
machine();
~machine();
void set_listener(grbl::machine_listener *listener);
void connect();
void run_program(grbl::program pgm);
void run_program(const grbl::program& pgm);
void request_jog(jog_state jog) const;
void cancel_jog() const;
realtime_status_report get_status() const { return last_report; };
void request_unlock();
void request_home();
void request_reset();
void request_cycle_start();
void request_feed_hold();
protected:
void on_connected(transport *transport) override;
void on_disconnected(transport *transport) override;
void on_line_received(std::string line, transport *transport) override;
void on_banner(std::string version, transport *transport) override;
realtime_status_report last_report{};
machine_listener* listener = nullptr;
transport *pipe = nullptr;
grbl_machine_state state = grbl_machine_state::init;
program running_program;