Implemented report pins status.

This commit is contained in:
2023-05-06 00:19:57 +03:00
parent 414344faaf
commit 4556ddb746
4 changed files with 123 additions and 10 deletions
+40 -3
View File
@@ -44,7 +44,12 @@ void grbl::machine::on_disconnected(grbl::transport *transport) {
grbl::realtime_status_report grbl::parse_status_report(std::string line, grbl::realtime_status_report& result) {
// grbl::realtime_status_report result;
auto l = line.substr(1, -1);
// pin values are always reset when a report arrives
// if there is no value in the Pn: field then it means
// no pin is active
result.signals.value = 0;
auto l = line.substr(1, line.size() - 2);
auto pieces = split_string(l, "|");
for (auto i = 0; i < pieces.size(); i++) {
if (i == 0) {
@@ -68,6 +73,38 @@ grbl::realtime_status_report grbl::parse_status_report(std::string line, grbl::r
auto p = split_string(elements[1], ",");
result.buffers_free = std::stoi(p[0]);
result.rx_chars_free = std::stoi(p[1]);
} else if (elements[0] == "Pn") {
for (auto& c: elements[1]) {
switch (c) {
case 'P':
result.signals.bit.probe = true;
break;
case 'X':
result.signals.bit.x_limit = true;
break;
case 'Y':
result.signals.bit.y_limit = true;
break;
case 'Z':
result.signals.bit.z_limit = true;
break;
case 'D':
result.signals.bit.door = true;
break;
case 'H':
result.signals.bit.hold = true;
break;
case 'R':
result.signals.bit.soft_reset = true;
break;
case 'S':
result.signals.bit.cycle_start = true;
break;
default:
std::cerr << "Unknown pin value [" << c << "] when parsing status report" << std::endl;
break;
}
}
} else {
// not implemented
}
@@ -640,7 +677,7 @@ void grbl::machine::request_jog_fixed(grbl::jog_direction dir, float distance, f
break;
}
command += std::to_string(distance) + " F" + std::to_string(feed);
pipe->send(command);
awaiting_responses++;
}
@@ -714,7 +751,7 @@ void grbl::machine_state_init::move_to_next_init_stage() {
switch (init_state) {
case init_stage::start:
init_state = init_stage::set_work_pos;
cnc->pipe->send("$10=1"); // machine pos in report, please
cnc->pipe->send("$10=511"); // machine pos in report, please. also sensors and buffers info
break;
case init_stage::set_work_pos:
init_state = init_stage::fetch_settings;