From 8fee2930f5eec9676244d94e64e29c7a3e76657e Mon Sep 17 00:00:00 2001 From: Terje Io Date: Fri, 29 Nov 2024 18:17:26 +0100 Subject: [PATCH] Added (or rather repurposed) field for build date to settings structure in preparation for coming changes. Added code guards in order to free some memory for STM32F103 variants with 128K flash. Changed Stop (0x19) real-time command behaviour, active tool offset and coordinate system will now be kept. Ref. issue #610. --- changelog.md | 38 ++++++++++++++++++++++++++++++++++++++ crossbar.h | 4 ++++ gcode.c | 13 +++++++++++-- gcode.h | 2 +- grbl.h | 2 +- grbllib.c | 2 +- protocol.c | 2 +- settings.c | 11 +++++++++-- settings.h | 16 ++++++++++++---- stepper2.c | 2 +- stream_file.c | 2 +- 11 files changed, 80 insertions(+), 14 deletions(-) diff --git a/changelog.md b/changelog.md index 22998db..4d4c981 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,43 @@ ## grblHAL changelog +Build 20241128 + +Core: + +* Added (or rather repurposed) field for build date to settings structure in preparation for coming changes. + +* Added code guards in order to free some memory for STM32F103 variants with 128K flash. Ref. [STM32F1xx driver issue #59](https://github.com/grblHAL/STM32F1xx/issues/59). + +* Changed Stop (`0x19`) real-time command behaviour, active tool offset and coordinate system will now be kept. Ref. [issue #610](https://github.com/grblHAL/core/issues/610). + +Drivers: + +* All: updated for core change (settings structure). + +* SAM3X8E: fixed missing probe input for Protoneer v3 board. Ref. [issue #31](https://github.com/grblHAL/SAM3X8E/issues/31) + +* RP2040: switched to SDK v2.0.0 and added initial support for RP2350 (Pico 2). The Web Builder will be updated a little later for this change. + +Plugins: + +* Trinamic: removed superfluous semicolon.Ref. [issue #15](https://github.com/grblHAL/Plugins_motor/issues/15). + +* Networking: added some files to _CMakeLists.txt_, used by RP2350 driver. + +--- + +Build 20241121 + +Core: + +* downgrading settings reset backup + +Plugins: + +* Trinamic: removed superfluous semicolon. https://github.com/grblHAL/Plugins_motor/issues/15 + +--- + 20241121 Core: diff --git a/crossbar.h b/crossbar.h index 6627bac..0c13722 100644 --- a/crossbar.h +++ b/crossbar.h @@ -263,6 +263,7 @@ PROGMEM static const pin_name_t pin_names[] = { { .function = Input_LimitZ_Max, .name = "Z limit max" }, { .function = Input_HomeZ, .name = "Z home" }, { .function = Input_HomeZ_2, .name = "Z home 2" }, +#ifndef NO_SETTINGS_DESCRIPTIONS { .function = Input_SpindleIndex, .name = "Spindle index" }, { .function = Input_SpindlePulse, .name = "Spindle pulse" }, { .function = Input_Aux0, .name = "Aux in 0" }, @@ -285,6 +286,7 @@ PROGMEM static const pin_name_t pin_names[] = { { .function = Input_Analog_Aux5, .name = "Aux analog in 5" }, { .function = Input_Analog_Aux6, .name = "Aux analog in 6" }, { .function = Input_Analog_Aux7, .name = "Aux analog in 7" }, +#endif { .function = Output_StepX, .name = "X step" }, { .function = Output_StepX_2, .name = "X2 step" }, { .function = Output_StepY, .name = "Y step" }, @@ -344,6 +346,7 @@ PROGMEM static const pin_name_t pin_names[] = { { .function = Input_LimitV_Max, .name = "V limit max" }, { .function = Input_HomeV, .name = "V home" }, #endif +#ifndef NO_SETTINGS_DESCRIPTIONS { .function = Output_MotorChipSelect, .name = "Motor CS" }, { .function = Output_MotorChipSelectX, .name = "Motor CSX" }, { .function = Output_MotorChipSelectY, .name = "Motor CSY" }, @@ -418,6 +421,7 @@ PROGMEM static const pin_name_t pin_names[] = { { .function = Bidirectional_MotorUARTM5, .name = "UART M5" }, { .function = Bidirectional_MotorUARTM6, .name = "UART M6" }, { .function = Bidirectional_MotorUARTM7, .name = "UART M7" } +#endif }; typedef enum { diff --git a/gcode.c b/gcode.c index e557b00..b99d140 100644 --- a/gcode.c +++ b/gcode.c @@ -288,7 +288,7 @@ plane_t *gc_get_plane_data (plane_t *plane, plane_select_t select) return plane; } -void gc_init (void) +void gc_init (bool stop) { #if COMPATIBILITY_LEVEL > 1 memset(&gc_state, 0, sizeof(parser_state_t)); @@ -302,11 +302,20 @@ void gc_init (void) if(grbl.tool_table.n_tools == 0) memset(grbl.tool_table.tool, 0, sizeof(tool_data_t)); } else { + + coord_system_id_t coord_system_id = gc_state.modal.coord_system.id; + tool_offset_mode_t tool_offset_mode = gc_state.modal.tool_offset_mode; + memset(&gc_state, 0, offsetof(parser_state_t, g92_coord_offset)); gc_state.tool_pending = gc_state.tool->tool_id; if(hal.tool.select) hal.tool.select(gc_state.tool, false); - // TODO: restore offsets, tool offset mode? + + if(stop) { + // Restore offsets, tool offset mode + gc_state.modal.coord_system.id = coord_system_id; + gc_state.modal.tool_offset_mode = tool_offset_mode; + } } #endif diff --git a/gcode.h b/gcode.h index 5a6ef53..fc4af71 100644 --- a/gcode.h +++ b/gcode.h @@ -654,7 +654,7 @@ typedef struct { } parser_block_t; // Initialize the parser -void gc_init (void); +void gc_init (bool stop); char *gc_normalize_block (char *block, status_code_t *status, char **message); diff --git a/grbl.h b/grbl.h index c846921..1905ae6 100644 --- a/grbl.h +++ b/grbl.h @@ -42,7 +42,7 @@ #else #define GRBL_VERSION "1.1f" #endif -#define GRBL_BUILD 20241120 +#define GRBL_BUILD 20241128 #define GRBL_URL "https://github.com/grblHAL" diff --git a/grbllib.c b/grbllib.c index 4ac139b..a7317fd 100644 --- a/grbllib.c +++ b/grbllib.c @@ -368,7 +368,7 @@ int grbl_enter (void) // Reset primary systems. hal.stream.reset_read_buffer(); // Clear input stream buffer - gc_init(); // Set g-code parser to default state + gc_init(false); // Set g-code parser to default state hal.limits.enable(settings.limits.flags.hard_enabled, (axes_signals_t){0}); plan_reset(); // Clear block buffer and planner variables st_reset(); // Clear stepper subsystem variables. diff --git a/protocol.c b/protocol.c index 4e85ef1..3d197a3 100644 --- a/protocol.c +++ b/protocol.c @@ -579,7 +579,7 @@ bool protocol_exec_rt_system (void) sys.flags.keep_input = Off; - gc_init(); + gc_init(true); plan_reset(); if(sys.alarm_pending == Alarm_ProbeProtect) { st_go_idle(); diff --git a/settings.c b/settings.c index 122fa00..c0a1f7c 100644 --- a/settings.c +++ b/settings.c @@ -54,7 +54,8 @@ const settings_restore_t settings_all = { PROGMEM const settings_t defaults = { - .version = SETTINGS_VERSION, + .version.id = SETTINGS_VERSION, +// .version.build = (GRBL_BUILD - 20000000UL), #if DEFAULT_LASER_MODE .mode = Mode_Laser, @@ -2367,7 +2368,7 @@ bool read_global_settings () settings.control_invert.mask |= limits_override.mask; settings.control_disable_pullup.mask &= ~limits_override.mask; - return ok && settings.version == SETTINGS_VERSION; + return ok && settings.version.id == SETTINGS_VERSION; } @@ -3176,5 +3177,11 @@ void settings_init (void) details->on_changed(&settings, changed); } while((details = details->next)); +/* + if(!settings.fs_options.downgrading && settings.version.build != (GRBL_BUILD - 20000000UL)) { + settings.version.build = (GRBL_BUILD - 20000000UL); + settings_write_global(); + } +*/ setting_details.on_changed = hal.settings_changed; } diff --git a/settings.h b/settings.h index b4c0418..f6cb847 100644 --- a/settings.h +++ b/settings.h @@ -573,7 +573,7 @@ typedef union { no_restore_position_after_M6 :1, no_unlock_after_estop :1; }; -} settingflags_t; +} settingflags_t; // TODO: -> 16 bit typedef union { uint8_t value; @@ -750,7 +750,8 @@ typedef union { struct { uint8_t sd_mount_on_boot :1, lfs_hidden :1, - unused :6; + unused :5, + downgrading :1; // TODO: move to system flags }; } fs_options_t; @@ -803,11 +804,18 @@ typedef struct { toolchange_mode_t mode; } tool_change_settings_t; +typedef union { + uint32_t value; + struct { + uint32_t id :8; // = SETTINGS_VERSION, incremented on structure changes. + uint32_t build :24; // Build date, format YYMMDD. + }; +} settings_version_t; + // Global persistent settings (Stored from byte NVS_ADDR_GLOBAL onwards) typedef struct { // Settings struct version - uint32_t version; -// uint32_t build_date; // TODO: add in next settings version?, set to GRBL_BUILD + settings_version_t version; float junction_deviation; float arc_tolerance; float g73_retract; diff --git a/stepper2.c b/stepper2.c index 57bfa5d..00f251e 100644 --- a/stepper2.c +++ b/stepper2.c @@ -218,7 +218,7 @@ Binds motor 0 as a spindle. */ bool st2_motor_bind_spindle (uint_fast8_t axis_idx) { - if(motors && axis_idx > Z_AXIS) { + if(motors && N_AXIS > 3 && axis_idx > Z_AXIS) { motors->idx = axis_idx; motors->axis.mask = 1 << axis_idx; diff --git a/stream_file.c b/stream_file.c index 4406fd5..e1eb9bd 100644 --- a/stream_file.c +++ b/stream_file.c @@ -171,7 +171,7 @@ vfs_file_t *stream_redirect_read (char *filename, status_message_ptr status_hand void stream_redirect_close (vfs_file_t *file) { - rd_stream_t *stream = rd_streams, *prev_stream; + rd_stream_t *stream = rd_streams, *prev_stream = NULL; if(stream) do { if(stream->file_new == file) {