Implemented report pins status.
This commit is contained in:
+40
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user