Skip to content

Commit 7cab5ea

Browse files
committed
Fix for crash on hard limits triggered, tuned code, ref #16.
1 parent a93ef19 commit 7cab5ea

File tree

5 files changed

+44
-40
lines changed

5 files changed

+44
-40
lines changed

src/driver.c

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
Part of grblHAL
55
6-
Copyright (c) 2020-2024 Terje Io
6+
Copyright (c) 2020-2025 Terje Io
77
88
grblHAL is free software: you can redistribute it and/or modify
99
it under the terms of the GNU General Public License as published by
@@ -170,17 +170,12 @@ static void stepperPulseStartDelayed (stepper_t *stepper)
170170

171171
static limit_signals_t limitsGetState()
172172
{
173-
limit_signals_t signals = {
174-
.min.mask = 0,
175-
.max.mask = 0,
176-
.min2.mask = 0,
177-
.max2.mask = 0
178-
};
173+
limit_signals_t signals = {0};
179174

180175
signals.min.value = gpio[LIMITS_PORT0].state.value;
181176

182177
if (settings.limits.invert.mask)
183-
signals.min.value ^= settings.limits.invert.mask;
178+
signals.min.mask ^= settings.limits.invert.mask;
184179

185180
return signals;
186181
}
@@ -198,12 +193,7 @@ static void StepperDisableMotors (axes_signals_t axes, squaring_mode_t mode)
198193
// Each bitfield bit indicates an axis limit, where triggered is 1 and not triggered is 0.
199194
static limit_signals_t limitsGetHomeState()
200195
{
201-
limit_signals_t signals = {
202-
.min.mask = 0,
203-
.max.mask = 0,
204-
.min2.mask = 0,
205-
.max2.mask = 0
206-
};
196+
limit_signals_t signals = {0};
207197

208198
if(motors_0.mask) {
209199

@@ -241,12 +231,13 @@ static void limitsEnable (bool on, axes_signals_t homing_cycle)
241231

242232
static control_signals_t systemGetState (void)
243233
{
244-
control_signals_t signals = {0};
234+
control_signals_t signals;
245235

246-
signals.value = gpio[CONTROL_PORT].state.value;
236+
signals.mask = gpio[CONTROL_PORT].state.value;
237+
signals.limits_override = settings.control_invert.limits_override;
247238

248239
if(settings.control_invert.mask)
249-
signals.value ^= settings.control_invert.mask;
240+
signals.mask ^= settings.control_invert.mask;
250241

251242
return signals;
252243
}
@@ -438,7 +429,7 @@ bool driver_init ()
438429
systick_timer.enable = 1;
439430

440431
hal.info = "Simulator";
441-
hal.driver_version = "250328";
432+
hal.driver_version = "251002";
442433
hal.driver_setup = driver_setup;
443434
hal.rx_buffer_size = RX_BUFFER_SIZE;
444435
hal.f_step_timer = F_CPU;

src/grbl_interface.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
Copyright (c) 2012 Jens Geisler
77
Copyright (c) 2014-2015 Adam Shelly
88
9-
2020-2021 - modified for grblHAL by Terje Io
9+
2020-2025 - modified for grblHAL by Terje Io
1010
1111
Grbl is free software: you can redistribute it and/or modify
1212
it under the terms of the GNU General Public License as published by
@@ -126,6 +126,10 @@ void grbl_per_byte (void)
126126
break;
127127

128128
case '?':
129+
protocol_enqueue_realtime_command(CMD_STATUS_REPORT);
130+
break;
131+
132+
case '@':
129133
protocol_enqueue_realtime_command(CMD_STATUS_REPORT_ALL);
130134
break;
131135

src/mcu.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
Part of GrblHAL
55
6-
Copyright (c) 2020 Terje Io
6+
Copyright (c) 2020-2025 Terje Io
77
88
Grbl is free software: you can redistribute it and/or modify
99
it under the terms of the GNU General Public License as published by
@@ -133,23 +133,23 @@ void mcu_master_clock (void)
133133
}
134134
}
135135

136-
void mcu_gpio_set (gpio_port_t *port, uint8_t pins, uint8_t mask)
136+
void mcu_gpio_set (gpio_port_t *port, uint16_t pins, uint16_t mask)
137137
{
138138
port->state.value = (port->state.value & ~mask) | (pins & mask);
139139
}
140140

141-
uint8_t mcu_gpio_get (gpio_port_t *port, uint8_t mask)
141+
uint8_t mcu_gpio_get (gpio_port_t *port, uint16_t mask)
142142
{
143143
return port->state.value & mask;
144144
}
145145

146-
void mcu_gpio_toggle_in (gpio_port_t *port, uint8_t pins)
146+
void mcu_gpio_toggle_in (gpio_port_t *port, uint16_t pins)
147147
{
148148
mcu_gpio_in(port, (port->state.value & pins) ^ pins, pins);
149149
}
150150

151151
// Set input pin, trigger interrupt if enabled
152-
void mcu_gpio_in (gpio_port_t *port, uint8_t pins, uint8_t mask)
152+
void mcu_gpio_in (gpio_port_t *port, uint16_t pins, uint16_t mask)
153153
{
154154
pins &= mask;
155155

src/mcu.h

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
Part of GrblHAL
55
6-
Copyright (c) 2020 Terje Io
6+
Copyright (c) 2020-2025 Terje Io
77
88
Grbl is free software: you can redistribute it and/or modify
99
it under the terms of the GNU General Public License as published by
@@ -73,17 +73,25 @@ typedef struct
7373
} mcu_uart_t;
7474

7575
typedef union {
76-
uint8_t value;
77-
uint8_t mask;
76+
uint16_t value;
77+
uint16_t mask;
7878
struct {
79-
uint8_t pin0 :1,
80-
pin1 :1,
81-
pin2 :1,
82-
pin3 :1,
83-
pin4 :1,
84-
pin5 :1,
85-
pin6 :1,
86-
pin7 :1;
79+
uint16_t pin0 :1,
80+
pin1 :1,
81+
pin2 :1,
82+
pin3 :1,
83+
pin4 :1,
84+
pin5 :1,
85+
pin6 :1,
86+
pin7 :1,
87+
pin8 :1,
88+
pin9 :1,
89+
pin10 :1,
90+
pin11 :1,
91+
pin12 :1,
92+
pin13 :1,
93+
pin14 :1,
94+
pin15 :1;
8795
};
8896
} gpio_pins_t;
8997

@@ -111,10 +119,10 @@ void mcu_enable_interrupts (void);
111119
void mcu_disable_interrupts (void);
112120
void mcu_master_clock (void);
113121
void mcu_register_irq_handler (interrupt_handler handler, irq_num_t irq_num);
114-
void mcu_gpio_set (gpio_port_t *port, uint8_t pins, uint8_t mask);
115-
uint8_t mcu_gpio_get (gpio_port_t *port, uint8_t mask);
116-
void mcu_gpio_in (gpio_port_t *port, uint8_t pins, uint8_t mask);
117-
void mcu_gpio_toggle_in (gpio_port_t *port, uint8_t pin);
122+
void mcu_gpio_set (gpio_port_t *port, uint16_t pins, uint16_t mask);
123+
uint8_t mcu_gpio_get (gpio_port_t *port, uint16_t mask);
124+
void mcu_gpio_in (gpio_port_t *port, uint16_t pins, uint16_t mask);
125+
void mcu_gpio_toggle_in (gpio_port_t *port, uint16_t pins);
118126
void simulate_serial (void);
119127

120128
#endif

src/serial.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
Part of grblHAL
77
8-
Copyright (c) 2017-2021 Terje Io
8+
Copyright (c) 2017-2025 Terje Io
99
1010
Grbl is free software: you can redistribute it and/or modify
1111
it under the terms of the GNU General Public License as published by
@@ -134,6 +134,7 @@ const io_stream_t *serialInit (void)
134134
{
135135
static const io_stream_t stream = {
136136
.type = StreamType_Serial,
137+
.is_connected = stream_connected,
137138
.read = serialGetC,
138139
.write = serialWriteS,
139140
.write_char = serialPutC,

0 commit comments

Comments
 (0)