diff --git a/README.md b/README.md
index 58a59dc..a71101c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
## grblHAL ##
-Latest build date is 20250604, see the [changelog](changelog.md) for details.
+Latest build date is 20250611, see the [changelog](changelog.md) for details.
> [!NOTE]
> A settings reset will be performed on an update of builds prior to 20241208. Backup and restore of settings is recommended.
diff --git a/changelog.md b/changelog.md
index 7b86a8b..3690c42 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,15 @@
## grblHAL changelog
+Build 20250611
+
+Core:
+
+* Fix for hardfault due to recent control pins handling change - affects at least RP2040/RP2350 MCUs.
+
+* No longer outputs settings/settings data for `$14` \(inversion\) and `$17` \(pullup disable\) if no control inputs are configured.
+
+---
+
Build 20250609
Core:
diff --git a/grbl.h b/grbl.h
index add6ada..bbe5a5a 100644
--- a/grbl.h
+++ b/grbl.h
@@ -42,7 +42,7 @@
#else
#define GRBL_VERSION "1.1f"
#endif
-#define GRBL_BUILD 20250609
+#define GRBL_BUILD 20250611
#define GRBL_URL "https://github.com/grblHAL"
diff --git a/pin_bits_masks.h b/pin_bits_masks.h
index b473c98..8c57369 100644
--- a/pin_bits_masks.h
+++ b/pin_bits_masks.h
@@ -250,11 +250,12 @@ static inline aux_ctrl_t *aux_ctrl_remap_explicit (void *port, uint8_t pin, uint
uint_fast8_t idx;
- for(idx = 0; ctrl_pin == NULL && aux_ctrl[idx].pin != 0xFF && idx < sizeof(aux_ctrl) / sizeof(aux_ctrl_t); idx++) {
+ for(idx = 0; ctrl_pin == NULL && idx < sizeof(aux_ctrl) / sizeof(aux_ctrl_t) && aux_ctrl[idx].pin != 0xFF; idx++) {
if(aux_ctrl[idx].pin == pin && aux_ctrl[idx].port == port) {
ctrl_pin = &aux_ctrl[idx];
ctrl_pin->aux_port = aux_port;
ctrl_pin->input = input;
+ break;
}
}
}
diff --git a/settings.c b/settings.c
index e02bbf5..980e063 100644
--- a/settings.c
+++ b/settings.c
@@ -1857,6 +1857,11 @@ static bool is_setting_available (const setting_detail_t *setting, uint_fast16_t
available = hal.driver_cap.pwm_spindle && spindle_get_caps(false).laser;
break;
+ case Setting_ControlInvertMask:
+ case Setting_ControlPullUpDisableMask:
+ available = hal.signals_cap.bits & ~(control_signals_t){ .probe_triggered = On }.bits;
+ break;
+
case Setting_SpindleInvertMask:
available = spindle_get_caps(false).gpio_controlled;
break;
@@ -2010,10 +2015,10 @@ PROGMEM static const setting_detail_t setting_detail[] = {
{ Setting_JunctionDeviation, Group_General, "Junction deviation", "mm", Format_Decimal, "#####0.000", NULL, NULL, Setting_IsLegacy, &settings.junction_deviation, NULL, NULL },
{ Setting_ArcTolerance, Group_General, "Arc tolerance", "mm", Format_Decimal, "#####0.000", NULL, NULL, Setting_IsLegacy, &settings.arc_tolerance, NULL, NULL },
{ Setting_ReportInches, Group_General, "Report in inches", NULL, Format_Bool, NULL, NULL, NULL, Setting_IsLegacyFn, set_report_inches, get_int, NULL },
- { Setting_ControlInvertMask, Group_ControlSignals, "Invert control inputs", NULL, Format_Bitfield, control_signals, NULL, NULL, Setting_IsExpandedFn, set_control_invert, get_int, NULL },
+ { Setting_ControlInvertMask, Group_ControlSignals, "Invert control inputs", NULL, Format_Bitfield, control_signals, NULL, NULL, Setting_IsExpandedFn, set_control_invert, get_int, is_setting_available },
{ Setting_CoolantInvertMask, Group_Coolant, "Invert coolant outputs", NULL, Format_Bitfield, coolant_signals, NULL, NULL, Setting_IsExtended, &settings.coolant.invert.mask, NULL, NULL },
{ Setting_SpindleInvertMask, Group_Spindle, "Invert spindle signals", NULL, Format_Bitfield, spindle_signals, NULL, NULL, Setting_IsExtendedFn, set_spindle_invert, get_int, is_setting_available, { .reboot_required = On } },
- { Setting_ControlPullUpDisableMask, Group_ControlSignals, "Pullup disable control inputs", NULL, Format_Bitfield, control_signals, NULL, NULL, Setting_IsExtendedFn, set_control_disable_pullup, get_int, NULL },
+ { Setting_ControlPullUpDisableMask, Group_ControlSignals, "Pullup disable control inputs", NULL, Format_Bitfield, control_signals, NULL, NULL, Setting_IsExtendedFn, set_control_disable_pullup, get_int, is_setting_available },
{ Setting_LimitPullUpDisableMask, Group_Limits, "Pullup disable limit inputs", NULL, Format_AxisMask, NULL, NULL, NULL, Setting_IsExtended, &settings.limits.disable_pullup.mask, NULL, NULL },
{ Setting_ProbePullUpDisable, Group_Probing, "Pullup disable probe inputs", NULL, Format_Bitfield, probe_signals, NULL, NULL, Setting_IsLegacyFn, set_probe_disable_pullup, get_int, is_setting_available },
{ Setting_SoftLimitsEnable, Group_Limits, "Soft limits enable", NULL, Format_Bool, NULL, NULL, NULL, Setting_IsLegacyFn, set_soft_limits_enable, get_int, NULL },