Emit motion control mode events

This commit is contained in:
CNC Local
2026-05-22 05:39:59 +08:00
parent e941c9bbb4
commit 44e024e49c
7 changed files with 121 additions and 1 deletions

View File

@@ -302,7 +302,31 @@ void SET_FEED_MODE(int, int) {
}
}
void SET_MOTION_CONTROL_MODE(CANON_MOTION_MODE, double) {
void SET_MOTION_CONTROL_MODE(CANON_MOTION_MODE mode, double tolerance) {
int reserved = 0;
switch (mode) {
case CANON_EXACT_PATH:
reserved = 611;
break;
case CANON_EXACT_STOP:
reserved = 612;
break;
case CANON_CONTINUOUS:
reserved = 640;
break;
default:
reserved = 0;
break;
}
if (active_sink) {
CncSimEvent event{};
event.version = 1;
event.type = CNC_SIM_EVENT_COMMENT;
event.line = event_line();
event.feed = tolerance;
event.reserved = reserved;
active_sink->emit_raw(event);
}
}
void SET_NAIVECAM_TOLERANCE(double) {

View File

@@ -323,6 +323,22 @@ int SmokeGcodeParser::parse(const char *program, size_t program_len, std::string
if (stop_if_callback_aborted(sink_, error)) {
return -1;
}
} else if (g == 61) {
emit_comment_state(sink_, line_number, g_code_is(word.value, 61.1) ? 612 : 611);
if (stop_if_callback_aborted(sink_, error)) {
return -1;
}
} else if (g == 64) {
CncSimEvent event{};
event.version = 1;
event.type = CNC_SIM_EVENT_COMMENT;
event.line = line_number;
event.feed = words.count('P') ? words.at('P') : 0.0;
event.reserved = 640;
sink_.emit_raw(event);
if (stop_if_callback_aborted(sink_, error)) {
return -1;
}
} else if (g == 0 || g == 1 || g == 2 || g == 3) {
modal_motion = g;
} else if (g == 4) {