Skip to content
This repository has been archived by the owner on Jan 14, 2024. It is now read-only.

Commit

Permalink
Added limits override input and handling to core and iMXRT1062 driver
Browse files Browse the repository at this point in the history
and some other extensions. See the changelog for details.
  • Loading branch information
terjeio committed Dec 12, 2020
1 parent fbb618b commit 4627412
Show file tree
Hide file tree
Showing 14 changed files with 116 additions and 47 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ It has been written to complement grblHAL and has features such as proper keyboa

---

Latest build date is 20201205, see the [changelog](changelog.md) for details.
Latest build date is 20201212, see the [changelog](changelog.md) for details.

---

Expand Down
10 changes: 10 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
## grblHAL changelog

Build 20201212 (test only):
* Error 7 is no longer issued on startup if non-volatile storage \(Flash/EEPROM/FRAM\) for settings is not available.
* [Alarm substate](https://github.com/terjeio/grblHAL/wiki/Report-extensions#realtime-report) \(if available\) is always added to the real-time report if a complete report is requested by sending `0x87`.
* Added input signal and handling for limit switches override.
The pin is pulled high and requires a normally open \(NO\) push switch for operation. When closed limit pins are excluded from the status report and alarm 12 will not be raised if a limit switch is asserted _on a soft reset_ when "Hard limits" and "Strict mode" is enabled with `$21`.
This allows normal operation so that a manual pull-off can be done before e.g. homing the machine.
Currently only the iMXRT1062 \(Teensy 4.x\) driver has support for this, for now by reassigning the safety door input when this is not used for its intended purpose.
__NOTE:__ A override will _not_ affect handling of homing and limit switch events elsewhere.
* Now adds `ODO` to `NEWOPT` tag values if odometer data is available.

Build 20201205 (test only):
* Updated _[my_plugin.c](templates/my_plugin.c)_ [template](templates/README.md) with settings details for `$HELP` and `$ES`/`$EG` enumerations.
* Settings/setting groups handling enhanced, moved some to plugins and added sorting (requres enough heap).
Expand Down
83 changes: 56 additions & 27 deletions drivers/IMXRT1062/grblHAL_Teensy4/src/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,15 @@ static void ppi_timeout_isr (void);
#include "usb_serial_pjrc.h"
#endif

#if defined(ENABLE_SAFETY_DOOR_INPUT_PIN) && defined(SAFETY_DOOR_PIN)
#define SAFETY_DOOR_ENABLE 1
#else
#define SAFETY_DOOR_ENABLE 0
#ifdef SAFETY_DOOR_PIN
//#define LIMITS_OVERRIDE_PIN SAFETY_DOOR_PIN
#endif
#endif

#define DEBOUNCE_QUEUE 8 // Must be a power of 2

#define F_BUS_MHZ (F_BUS_ACTUAL / 1000000)
Expand Down Expand Up @@ -145,9 +154,12 @@ static gpio_t spindleEnable, spindleDir;
#endif

// Optional I/O
#ifdef SAFETY_DOOR_PIN
#if SAFETY_DOOR_ENABLE
static gpio_t SafetyDoor;
#endif
#ifdef LIMITS_OVERRIDE_PIN
static gpio_t LimitsOverride;
#endif
#ifdef A_AXIS
static gpio_t stepA, dirA, LimitA;
#endif
Expand Down Expand Up @@ -235,51 +247,54 @@ static gpio_t QEI_A, QEI_B;

static input_signal_t inputpin[] = {
#if ESTOP_ENABLE
{ .id = Input_EStop, .port = &Reset, .pin = RESET_PIN, .group = INPUT_GROUP_CONTROL },
{ .id = Input_EStop, .port = &Reset, .pin = RESET_PIN, .group = INPUT_GROUP_CONTROL },
#else
{ .id = Input_Reset, .port = &Reset, .pin = RESET_PIN, .group = INPUT_GROUP_CONTROL },
{ .id = Input_Reset, .port = &Reset, .pin = RESET_PIN, .group = INPUT_GROUP_CONTROL },
#endif
{ .id = Input_FeedHold, .port = &FeedHold, .pin = FEED_HOLD_PIN, .group = INPUT_GROUP_CONTROL },
{ .id = Input_CycleStart, .port = &CycleStart, .pin = CYCLE_START_PIN, .group = INPUT_GROUP_CONTROL },
#ifdef SAFETY_DOOR_PIN
{ .id = Input_SafetyDoor, .port = &SafetyDoor , .pin = SAFETY_DOOR_PIN, .group = INPUT_GROUP_CONTROL },
{ .id = Input_FeedHold, .port = &FeedHold, .pin = FEED_HOLD_PIN, .group = INPUT_GROUP_CONTROL },
{ .id = Input_CycleStart, .port = &CycleStart, .pin = CYCLE_START_PIN, .group = INPUT_GROUP_CONTROL },
#if SAFETY_DOOR_ENABLE
{ .id = Input_SafetyDoor, .port = &SafetyDoor, .pin = SAFETY_DOOR_PIN, .group = INPUT_GROUP_CONTROL },
#endif
#if defined(LIMITS_OVERRIDE_PIN)
{ .id = Input_LimitsOverride, .port = &LimitsOverride, .pin = LIMITS_OVERRIDE_PIN, .group = INPUT_GROUP_CONTROL },
#endif
{ .id = Input_Probe, .port = &Probe, .pin = PROBE_PIN, .group = INPUT_GROUP_PROBE },
{ .id = Input_LimitX, .port = &LimitX, .pin = X_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
{ .id = Input_Probe, .port = &Probe, .pin = PROBE_PIN, .group = INPUT_GROUP_PROBE },
{ .id = Input_LimitX, .port = &LimitX, .pin = X_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
#ifdef X2_LIMIT_PIN
{ .id = Input_LimitX_Max, .port = &LimitX2, .pin = X2_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
{ .id = Input_LimitX_Max, .port = &LimitX2, .pin = X2_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
#endif
{ .id = Input_LimitY, .port = &LimitY, .pin = Y_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
{ .id = Input_LimitY, .port = &LimitY, .pin = Y_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
#ifdef Y2_LIMIT_PIN
{ .id = Input_LimitY_Max, .port = &LimitY2, .pin = Y2_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
{ .id = Input_LimitY_Max, .port = &LimitY2, .pin = Y2_LIMIT_PIN, .group = INPUT_GROUP_LIMIT },
#endif
{ .id = Input_LimitZ, .port = &LimitZ, .pin = Z_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
{ .id = Input_LimitZ, .port = &LimitZ, .pin = Z_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
#ifdef Z2_LIMIT_PIN
, { .id = Input_LimitZ_Max, .port = &LimitZ2, .pin = Z2_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
, { .id = Input_LimitZ_Max, .port = &LimitZ2, .pin = Z2_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
#endif
#ifdef A_LIMIT_PIN
, { .id = Input_LimitA, .port = &LimitA, .pin = A_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
, { .id = Input_LimitA, .port = &LimitA, .pin = A_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
#endif
#ifdef B_LIMIT_PIN
, { .id = Input_LimitB, .port = &LimitB, .pin = B_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
, { .id = Input_LimitB, .port = &LimitB, .pin = B_LIMIT_PIN, .group = INPUT_GROUP_LIMIT }
#endif
#if MPG_MODE_ENABLE
, { .id = Input_ModeSelect, .port = &ModeSelect, .pin = MODE_PIN, .group = INPUT_GROUP_MPG }
, { .id = Input_ModeSelect, .port = &ModeSelect, .pin = MODE_PIN, .group = INPUT_GROUP_MPG }
#endif
#if KEYPAD_ENABLE && defined(KEYPAD_STROBE_PIN)
, { .id = Input_KeypadStrobe, .port = &KeypadStrobe, .pin = KEYPAD_STROBE_PIN, .group = INPUT_GROUP_KEYPAD }
, { .id = Input_KeypadStrobe, .port = &KeypadStrobe, .pin = KEYPAD_STROBE_PIN, .group = INPUT_GROUP_KEYPAD }
#endif
#ifdef SPINDLE_INDEX_PIN
, { .id = Input_SpindleIndex, .port = &SpindleIndex, .pin = SPINDLE_INDEX_PIN, .group = INPUT_GROUP_SPINDLE_INDEX }
, { .id = Input_SpindleIndex, .port = &SpindleIndex, .pin = SPINDLE_INDEX_PIN, .group = INPUT_GROUP_SPINDLE_INDEX }
#endif
#if QEI_ENABLE
, { .id = Input_QEI_A, .port = &QEI_A, .pin = QEI_A_PIN, .group = INPUT_GROUP_QEI }
, { .id = Input_QEI_B, .port = &QEI_B, .pin = QEI_B_PIN, .group = INPUT_GROUP_QEI }
, { .id = Input_QEI_A, .port = &QEI_A, .pin = QEI_A_PIN, .group = INPUT_GROUP_QEI }
, { .id = Input_QEI_B, .port = &QEI_B, .pin = QEI_B_PIN, .group = INPUT_GROUP_QEI }
#if QEI_SELECT_ENABLED
, { .id = Input_QEI_Select, .port = &QEI_Select, .pin = QEI_SELECT_PIN, .group = INPUT_GROUP_QEI_SELECT }
, { .id = Input_QEI_Select, .port = &QEI_Select, .pin = QEI_SELECT_PIN, .group = INPUT_GROUP_QEI_SELECT }
#endif
#if QEI_INDEX_ENABLED
, { .id = Input_QEI_Index, .port = &QEI_Index, .pin = QEI_INDEX_PIN, .group = INPUT_GROUP_QEI }
, { .id = Input_QEI_Index, .port = &QEI_Index, .pin = QEI_INDEX_PIN, .group = INPUT_GROUP_QEI }
#endif
#endif
};
Expand Down Expand Up @@ -1016,13 +1031,17 @@ inline static control_signals_t systemGetState (void)
#endif
signals.feed_hold = (FeedHold.reg->DR & FeedHold.bit) != 0;
signals.cycle_start = (CycleStart.reg->DR & CycleStart.bit) != 0;
#if defined(ENABLE_SAFETY_DOOR_INPUT_PIN) && defined(SAFETY_DOOR_PIN)
#if SAFETY_DOOR_ENABLE
signals.safety_door_ajar = (SafetyDoor.reg->DR & SafetyDoor.bit) != 0;
#endif

if(settings.control_invert.value)
signals.value ^= settings.control_invert.value;

#ifdef LIMITS_OVERRIDE_PIN
signals.limits_override = (LimitsOverride.reg->DR & LimitsOverride.bit) == 0;
#endif

return signals;
}

Expand Down Expand Up @@ -1479,12 +1498,19 @@ static void settings_changed (settings_t *settings)
signal->irq_mode = control_fei.cycle_start ? IRQ_Mode_Falling : IRQ_Mode_Rising;
break;

#if SAFETY_DOOR_ENABLE
case Input_SafetyDoor:
pullup = !settings->control_disable_pullup.safety_door_ajar;
signal->debounce = hal.driver_cap.software_debounce;
signal->irq_mode = control_fei.safety_door_ajar ? IRQ_Mode_Falling : IRQ_Mode_Rising;
break;

#endif
#ifdef LIMITS_OVERRIDE_PIN
case Input_LimitsOverride:
pullup = true;
signal->debounce = false;
break;
#endif
case Input_Probe:
pullup = hal.driver_cap.probe_pull_up;
break;
Expand Down Expand Up @@ -2042,7 +2068,7 @@ bool driver_init (void)
options[strlen(options) - 1] = '\0';

hal.info = "iMXRT1062";
hal.driver_version = "201025";
hal.driver_version = "201212";
#ifdef BOARD_NAME
hal.board = BOARD_NAME;
#endif
Expand Down Expand Up @@ -2162,8 +2188,11 @@ bool driver_init (void)
#if ESTOP_ENABLE
hal.driver_cap.e_stop = On;
#endif
#ifdef SAFETY_DOOR_PIN
#if SAFETY_DOOR_ENABLE
hal.driver_cap.safety_door = On;
#endif
#ifdef LIMITS_OVERRIDE_PIN
hal.driver_cap.limits_override = On;
#endif
hal.driver_cap.software_debounce = On;
hal.driver_cap.step_pulse_delay = On;
Expand Down
1 change: 1 addition & 0 deletions drivers/IMXRT1062/grblHAL_Teensy4/src/driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ typedef enum {
Input_FeedHold,
Input_CycleStart,
Input_SafetyDoor,
Input_LimitsOverride,
Input_EStop,
Input_ModeSelect,
Input_LimitX,
Expand Down
14 changes: 8 additions & 6 deletions drivers/MSP432/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -460,11 +460,6 @@ inline static axes_signals_t limitsGetState()
if (settings.limits.invert.mask)
signals.value ^= settings.limits.invert.mask;

#if LIMITS_OVERRIDE_ENABLE
if(!BITBAND_PERI(LIMITS_OVERRIDE_PORT->IN, LIMITS_OVERRIDE_SWITCH_PIN))
signals.value = 0;
#endif

return signals;
}

Expand Down Expand Up @@ -529,6 +524,10 @@ static control_signals_t systemGetState (void)
if(settings.control_invert.mask)
signals.value ^= settings.control_invert.mask;

#if LIMITS_OVERRIDE_ENABLE
signals.limits_override = BITBAND_PERI(LIMITS_OVERRIDE_PORT->IN, LIMITS_OVERRIDE_SWITCH_PIN) == 0;
#endif

return signals;
}

Expand Down Expand Up @@ -1415,7 +1414,7 @@ bool driver_init (void)
#endif

hal.info = "MSP432";
hal.driver_version = "201125";
hal.driver_version = "201212";
#ifdef BOARD_NAME
hal.board = BOARD_NAME;
#endif
Expand Down Expand Up @@ -1498,6 +1497,9 @@ bool driver_init (void)
hal.driver_cap.e_stop = On;
#endif
hal.driver_cap.safety_door = On;
#if LIMITS_OVERRIDE_ENABLE
hal.driver_cap.limits_override = On;
#endif
hal.driver_cap.control_pull_up = On;
hal.driver_cap.limits_pull_up = On;
hal.driver_cap.probe_pull_up = On;
Expand Down
3 changes: 3 additions & 0 deletions drivers/MSP432/driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@
#ifndef CNC_BOOSTERPACK_A4998
#define CNC_BOOSTERPACK_A4998 0
#endif
#ifndef LIMITS_OVERRIDE_ENABLE
#define LIMITS_OVERRIDE_ENABLE 0
#endif

#define CNC_BOOSTERPACK 0

Expand Down
2 changes: 1 addition & 1 deletion grbl/grbl.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#else
#define GRBL_VERSION "1.1f"
#endif
#define GRBL_VERSION_BUILD "20201205"
#define GRBL_VERSION_BUILD "20201212"

// The following symbols are set here if not already set by the compiler or in config.h
// Do NOT change here!
Expand Down
4 changes: 3 additions & 1 deletion grbl/hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ typedef union {
atc :1,
no_gcode_message_handling :1,
dual_spindle :1,
unassigned :3;
limits_override :1,
odometers :1,
unassigned :1;
};
} driver_cap_t;

Expand Down
3 changes: 2 additions & 1 deletion grbl/nvs_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,8 @@ bool nvs_buffer_init (void)
physical_nvs.memcpy_to_flash(nvsbuffer);
else if(physical_nvs.memcpy_to_nvs)
physical_nvs.memcpy_to_nvs(0, nvsbuffer, GRBL_NVS_SIZE + hal.nvs.driver_area.size, false);
grbl.report.status_message(Status_SettingReadFail);
if(physical_nvs.type != NVS_None)
grbl.report.status_message(Status_SettingReadFail);
}
} else
protocol_enqueue_rt_command(nvs_warning);
Expand Down
10 changes: 7 additions & 3 deletions grbl/protocol.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,13 @@ bool protocol_main_loop (void)
system_raise_alarm(Alarm_HomingRequried);
grbl.report.feedback_message(Message_HomingCycleRequired);
} else if (settings.limits.flags.hard_enabled && settings.limits.flags.check_at_init && hal.limits.get_state().value) {
// Check that no limit switches are engaged to make sure everything is good to go.
system_raise_alarm(Alarm_LimitsEngaged);
grbl.report.feedback_message(Message_CheckLimits);
if(sys.alarm == Alarm_LimitsEngaged && hal.control.get_state().limits_override)
set_state(STATE_IDLE); // Clear alarm state to enable limit switch pulloff.
else {
// Check that no limit switches are engaged to make sure everything is good to go.
system_raise_alarm(Alarm_LimitsEngaged);
grbl.report.feedback_message(Message_CheckLimits);
}
} else if(sys.cold_start && (settings.flags.force_initialization_alarm || hal.control.get_state().reset)) {
set_state(STATE_ALARM); // Ensure alarm state is set.
grbl.report.feedback_message(Message_AlarmLock);
Expand Down
7 changes: 5 additions & 2 deletions grbl/report.c
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@ void report_grbl_settings (bool all)
if(all)
report_uint_setting(Setting_StatusReportMask, (uint32_t)settings.status_report.mask);
else
report_uint_setting(Setting_StatusReportMask, settings.status_report.mask & 0x3);
report_uint_setting(Setting_StatusReportMask, settings.status_report.mask & ~0b11);
report_float_setting(Setting_JunctionDeviation, settings.junction_deviation, N_DECIMAL_SETTINGVALUE);
report_float_setting(Setting_ArcTolerance, settings.arc_tolerance, N_DECIMAL_SETTINGVALUE);
report_uint_setting(Setting_ReportInches, settings.flags.report_inches);
Expand Down Expand Up @@ -1151,6 +1151,9 @@ void report_build_info (char *line, bool extended)
if(hal.driver_cap.spindle_sync)
strcat(buf, "SS,");

if(hal.driver_cap.odometers)
strcat(buf, "ODO,");

#ifdef PID_LOG
strcat(buf, "PID,");
#endif
Expand Down Expand Up @@ -1352,7 +1355,7 @@ void report_realtime_status (void)
if(!probe_state.connected)
*append++ = 'O';

if (lim_pin_state.value)
if (lim_pin_state.value && !hal.control.get_state().limits_override)
append = axis_signals_tostring(append, lim_pin_state);

if (ctrl_pin_state.value) {
Expand Down
19 changes: 16 additions & 3 deletions grbl/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,11 @@ static const setting_detail_t setting_detail[] = {
{ Setting_InvertStepperEnable, Group_Stepper, "Invert step enable pin(s)", NULL, Format_AxisMask, NULL, NULL, NULL },
{ Setting_LimitPinsInvertMask, Group_Limits, "Invert limit pins", NULL, Format_AxisMask, NULL, NULL, NULL },
{ Setting_InvertProbePin, Group_Probing, "Invert probe pin", NULL, Format_Bool, NULL, NULL, NULL },
#if COMPATIBILITY_LEVEL <= 1
{ Setting_StatusReportMask, Group_General, "Status report options", NULL, Format_Bitfield, "Position in machine coordinate,Buffer state,Line numbers,Feed & speed,Pin state,Work coordinate offset,Overrides,Probe coordinates,Buffer sync on WCO change,Parser state,Alarm substatus,Run substatus", NULL, NULL },
#else
{ Setting_StatusReportMask, Group_General, "Status report options", NULL, Format_Bitfield, "Position in machine coordinate,Buffer state", NULL, NULL },
#endif
{ Setting_JunctionDeviation, Group_General, "Junction deviation", "mm", Format_Decimal, "#####0.000", NULL, NULL },
{ Setting_ArcTolerance, Group_General, "Arc tolerance", "mm", Format_Decimal, "#####0.000", NULL, NULL },
{ Setting_ReportInches, Group_General, "Report in inches", NULL, Format_Bool, NULL, NULL, NULL },
Expand All @@ -304,8 +308,16 @@ static const setting_detail_t setting_detail[] = {
{ Setting_LimitPullUpDisableMask, Group_Limits, "Pullup disable limit pins", NULL, Format_AxisMask, NULL, NULL, NULL },
{ Setting_ProbePullUpDisable, Group_Probing, "Pullup disable probe pin", NULL, Format_Bool, NULL, NULL, NULL },
{ Setting_SoftLimitsEnable, Group_Limits, "Soft limits enable", NULL, Format_Bool, NULL, NULL, NULL },
#if COMPATIBILITY_LEVEL <= 1
{ Setting_HardLimitsEnable, Group_Limits, "Hard limits enable", NULL, Format_XBitfield, "Enable,Strict mode", NULL, NULL },
#else
{ Setting_HardLimitsEnable, Group_Limits, "Hard limits enable", NULL, Format_Bool, NULL, NULL, NULL },
#endif
#if COMPATIBILITY_LEVEL <= 1
{ Setting_HomingEnable, Group_Homing, "Homing cycle", NULL, Format_XBitfield, "Enable,Enable single axis commands,Homing on startup required,Set machine origin to 0,Two switches shares one input pin,Allow manual,Override locks", NULL, NULL },
#else
{ Setting_HomingEnable, Group_Homing, "Homing cycle enable", NULL, Format_Bool, NULL, NULL, NULL },
#endif
{ Setting_HomingDirMask, Group_Homing, "Homing direction invert", NULL, Format_AxisMask, NULL, NULL, NULL },
{ Setting_HomingFeedRate, Group_Homing, "Homing locate feed rate", "mm/min", Format_Decimal, "#####0.0", NULL, NULL },
{ Setting_HomingSeekRate, Group_Homing, "Homing search seek rate", "mm/min", Format_Decimal, "#####0.0", NULL, NULL },
Expand Down Expand Up @@ -870,8 +882,8 @@ status_code_t settings_store_global_setting (setting_type_t setting, char *svalu
#if COMPATIBILITY_LEVEL <= 1
settings.status_report.mask = int_value;
#else
int_value &= 0b111;
settings.status_report.mask = (settings.status_report.mask & ~0b111) | int_value;
int_value &= 0b11;
settings.status_report.mask = (settings.status_report.mask & ~0b11) | int_value;
#endif
break;

Expand Down Expand Up @@ -1243,7 +1255,8 @@ void settings_init() {
if(!read_global_settings()) {
settings_restore_t settings = settings_all;
settings.defaults = 1; // Ensure global settings get restored
grbl.report.status_message(Status_SettingReadFail);
if(hal.nvs.type != NVS_None)
grbl.report.status_message(Status_SettingReadFail);
settings_restore(settings); // Force restore all non-volatile storage data.
report_init();
#if COMPATIBILITY_LEVEL <= 1
Expand Down
2 changes: 1 addition & 1 deletion grbl/stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
#endif

#ifndef BLOCK_TX_BUFFER_SIZE
#define BLOCK_TX_BUFFER_SIZE 200
#define BLOCK_TX_BUFFER_SIZE 256
#endif

// Serial baud rate
Expand Down
3 changes: 2 additions & 1 deletion grbl/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ typedef union {
probe_disconnected :1,
motor_fault :1,
motor_warning :1,
unassigned :4,
limits_override :1,
unassigned :3,
probe_triggered :1, // used for probe protection
deasserted :1; // this flag is set if signals are deasserted. Note: do NOT pass on to Grbl control_interrupt_handler if set.
};
Expand Down

0 comments on commit 4627412

Please sign in to comment.