Files
grbl-sender/machine.h
T

82 lines
1.8 KiB
C++

#pragma once
#include "grbl_communication.h"
#include "grbl.h"
namespace grbl {
enum class grbl_machine_state {
init,
run_program,
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;
bool up_pressed = false;
bool down_pressed = false;
bool z_up_pressed = false;
bool z_down_pressed = false;
bool speed_fast_pressed = false;
bool speed_slow_pressed = false;
bool no_jogging() const;
};
static bool operator==(const jog_state& a, const jog_state& b) {
if (a.left_pressed != b.left_pressed ||
a.right_pressed != b.right_pressed ||
a.up_pressed != b.up_pressed ||
a.down_pressed != b.down_pressed ||
a.z_up_pressed != b.z_up_pressed ||
a.z_down_pressed != b.z_down_pressed ||
a.speed_fast_pressed != b.speed_fast_pressed ||
a.speed_slow_pressed != b.speed_slow_pressed) {
return false;
}
return true;
}
static bool operator!=(const jog_state& a, const jog_state& b) {
return !(a == b);
}
struct machine : public transport_callbacks {
machine();
~machine();
void connect();
void run_program(grbl::program pgm);
void request_jog(jog_state jog) const;
void cancel_jog() const;
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;
transport *pipe = nullptr;
grbl_machine_state state = grbl_machine_state::init;
program running_program;
size_t executed_instructions = 0;
void continue_program();
};
}