diff --git a/README.md b/README.md
index 2cf1570..4ee4102 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ It has been written to complement grblHAL and has features such as proper keyboa
---
-Latest build date is 20230718, see the [changelog](changelog.md) for details.
+Latest build date is 20230729, see the [changelog](changelog.md) for details.
__NOTE:__ A settings reset will be performed on an update of builds earlier than 20230125. Backup and restore of settings is recommended.
__IMPORTANT!__ A new setting has been introduced for ganged axes motors in build 20211121.
I have only bench tested this for a couple of drivers, correct function should be verified after updating by those who have more than three motors configured.
diff --git a/changelog.md b/changelog.md
index 1aed1f1..4530916 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,13 @@
## grblHAL changelog
+20230729
+
+Core:
+
+* Fix for ioSender issue [#319](https://github.com/terjeio/ioSender/issues/319), improved handling of sycle start input signal had side-effects.
+
+---
+
20230724
Core:
@@ -136,6 +144,8 @@ To be addressed in a later revision if someone with a Modbus TCP capable spindle
* Motors and encoder: updated for core setting handling improvements.
+---
+
Build 20230607
Core:
diff --git a/grbl.h b/grbl.h
index 23e5e7a..bed5b38 100644
--- a/grbl.h
+++ b/grbl.h
@@ -42,7 +42,7 @@
#else
#define GRBL_VERSION "1.1f"
#endif
-#define GRBL_BUILD 20230724
+#define GRBL_BUILD 20230729
#define GRBL_URL "https://github.com/grblHAL"
diff --git a/report.c b/report.c
index d7ffcf9..486d14d 100644
--- a/report.c
+++ b/report.c
@@ -1205,8 +1205,7 @@ void report_realtime_status (void)
axes_signals_t lim_pin_state = limit_signals_merge(hal.limits.get_state());
control_signals_t ctrl_pin_state = hal.control.get_state();
- if(sys.report.cycle_start)
- ctrl_pin_state.cycle_start = On;
+ ctrl_pin_state.cycle_start |= sys.report.cycle_start;
if (lim_pin_state.value | ctrl_pin_state.value | probe_state.triggered | !probe_state.connected | sys.flags.block_delete_enabled) {
@@ -1214,16 +1213,16 @@ void report_realtime_status (void)
strcpy(buf, "|Pn:");
- if (probe_state.triggered)
+ if(probe_state.triggered)
*append++ = 'P';
if(!probe_state.connected)
*append++ = 'O';
- if (lim_pin_state.value && !hal.control.get_state().limits_override)
+ if(lim_pin_state.value && !ctrl_pin_state.limits_override)
append = axis_signals_tostring(append, lim_pin_state);
- if (ctrl_pin_state.value)
+ if(ctrl_pin_state.value)
append = control_signals_tostring(append, ctrl_pin_state);
*append = '\0';
diff --git a/state_machine.c b/state_machine.c
index e56d5fc..46a6c26 100644
--- a/state_machine.c
+++ b/state_machine.c
@@ -193,8 +193,6 @@ void state_update (rt_exec_t rt_exec)
{
if((rt_exec & EXEC_SAFETY_DOOR) && sys_state != STATE_SAFETY_DOOR)
state_set(STATE_SAFETY_DOOR);
- else if(rt_exec & EXEC_CYCLE_START)
- sys.report.cycle_start = settings.status_report.pin_state;
stateHandler(rt_exec);
}
diff --git a/stream.c b/stream.c
index 56c2f50..ef1b6eb 100644
--- a/stream.c
+++ b/stream.c
@@ -159,7 +159,12 @@ ISR_CODE bool ISR_FUNC(stream_buffer_all)(char c)
ISR_CODE bool ISR_FUNC(stream_enqueue_realtime_command)(char c)
{
- return hal.stream.enqueue_rt_command ? hal.stream.enqueue_rt_command(c) : protocol_enqueue_realtime_command(c);
+ bool drop = hal.stream.enqueue_rt_command ? hal.stream.enqueue_rt_command(c) : protocol_enqueue_realtime_command(c);
+
+ if(drop && (c == CMD_CYCLE_START || c == CMD_CYCLE_START_LEGACY))
+ sys.report.cycle_start = settings.status_report.pin_state;
+
+ return drop;
}
static bool is_connected (void)
diff --git a/system.c b/system.c
index fc1c8bb..47f61b4 100644
--- a/system.c
+++ b/system.c
@@ -140,8 +140,10 @@ ISR_CODE void ISR_FUNC(control_interrupt_handler)(control_signals_t signals)
}
} else if (signals.feed_hold)
system_set_exec_state_flag(EXEC_FEED_HOLD);
- else if (signals.cycle_start)
+ else if (signals.cycle_start) {
system_set_exec_state_flag(EXEC_CYCLE_START);
+ sys.report.cycle_start = settings.status_report.pin_state;
+ }
}
}
}