diff --git a/README.md b/README.md index ee4da54..617bd6f 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 20231216, see the [changelog](changelog.md) for details. +Latest build date is 20231222, 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. --- diff --git a/changelog.md b/changelog.md index 1590b06..12b6158 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,25 @@ ## grblHAL changelog +Build 20231222 + +Core: + +* Some minor fixes and changes. + +Drivers: + +* STM32F1xx: made timer assignments more flexible. Added support for PWM out on PB9. Ref. [core discussion 62](https://github.com/grblHAL/core/discussions/62). + +* STM32F4xx: fixed typos in SPI interface code for SPI3. + +Plugins: + +* Spindle: updated and verified code for second PWM spindle on top of aux outputs. Requires one PWM capable analog output and at least one digital. + +* Embroidery: no longer starts spindle if sync mode is disabled. + +--- + Build 20231218 Core: diff --git a/grbl.h b/grbl.h index abcbf6d..547554f 100644 --- a/grbl.h +++ b/grbl.h @@ -42,7 +42,7 @@ #else #define GRBL_VERSION "1.1f" #endif -#define GRBL_BUILD 20231218 +#define GRBL_BUILD 20231222 #define GRBL_URL "https://github.com/grblHAL" diff --git a/protocol.c b/protocol.c index 65daac8..21350b6 100644 --- a/protocol.c +++ b/protocol.c @@ -35,7 +35,7 @@ #include "machine_limits.h" #ifndef RT_QUEUE_SIZE -#define RT_QUEUE_SIZE 8 // must be a power of 2 +#define RT_QUEUE_SIZE 16 // must be a power of 2 #endif // Define line flags. Includes comment type tracking and line overflow detection. diff --git a/report.c b/report.c index 9267e81..0697a97 100644 --- a/report.c +++ b/report.c @@ -1464,94 +1464,101 @@ static void report_settings_detail (settings_format_t format, const setting_deta switch(format) { case SettingsFormat_HumanReadable: - hal.stream.write(ASCII_EOL "$"); - hal.stream.write(uitoa(setting->id + offset)); - hal.stream.write(": "); - if(setting->group == Group_Axis0) - hal.stream.write(axis_letter[offset]); - write_name(setting->name, suboffset); + { + bool reboot_newline = false; - switch(setting_datatype_to_external(setting->datatype)) { + hal.stream.write(ASCII_EOL "$"); + hal.stream.write(uitoa(setting->id + offset)); + hal.stream.write(": "); + if(setting->group == Group_Axis0) + hal.stream.write(axis_letter[offset]); + write_name(setting->name, suboffset); - case Format_AxisMask: - hal.stream.write(" as axismask"); - break; + switch(setting_datatype_to_external(setting->datatype)) { - case Format_Bool: - hal.stream.write(" as boolean"); - break; + case Format_AxisMask: + hal.stream.write(" as axismask"); + break; - case Format_Bitfield: - hal.stream.write(" as bitfield:"); - report_bitfield(setting->format, true); - break; + case Format_Bool: + hal.stream.write(" as boolean"); + break; - case Format_XBitfield: - hal.stream.write(" as bitfield where setting bit 0 enables the rest:"); - report_bitfield(setting->format, true); - break; + case Format_Bitfield: + hal.stream.write(" as bitfield:"); + report_bitfield(setting->format, true); + reboot_newline = true; + break; - case Format_RadioButtons: - hal.stream.write(":"); - report_bitfield(setting->format, false); - break; + case Format_XBitfield: + hal.stream.write(" as bitfield where setting bit 0 enables the rest:"); + report_bitfield(setting->format, true); + reboot_newline = true; + break; - case Format_IPv4: - hal.stream.write(" as IP address"); - break; + case Format_RadioButtons: + hal.stream.write(":"); + report_bitfield(setting->format, false); + reboot_newline = true; + break; - default: - if(setting->unit) { - hal.stream.write(" in "); - hal.stream.write(setting->unit); - } - break; - } + case Format_IPv4: + hal.stream.write(" as IP address"); + break; - if(setting->min_value && setting->max_value) { - hal.stream.write(", range: "); - hal.stream.write(setting->min_value); - hal.stream.write(" - "); - hal.stream.write(setting->max_value); - } else if(!setting_is_list(setting)) { - if(setting->min_value) { - hal.stream.write(", min: "); + default: + if(setting->unit) { + hal.stream.write(" in "); + hal.stream.write(setting->unit); + } + break; + } + + if(setting->min_value && setting->max_value) { + hal.stream.write(", range: "); hal.stream.write(setting->min_value); - } - if(setting->max_value) { - hal.stream.write(", max: "); + hal.stream.write(" - "); hal.stream.write(setting->max_value); + } else if(!setting_is_list(setting)) { + if(setting->min_value) { + hal.stream.write(", min: "); + hal.stream.write(setting->min_value); + } + if(setting->max_value) { + hal.stream.write(", max: "); + hal.stream.write(setting->max_value); + } } - } - if(setting->flags.reboot_required) - hal.stream.write(", reboot required"); + if(setting->flags.reboot_required) + hal.stream.write(reboot_newline ? ASCII_EOL ASCII_EOL "Reboot required." : ", reboot required"); #ifndef NO_SETTINGS_DESCRIPTIONS - // Add description if driver is capable of outputting it... - if(hal.stream.write_n) { - const char *description = setting_get_description((setting_id_t)(setting->id + offset)); - if(description && *description != '\0') { - char *lf; - hal.stream.write(ASCII_EOL); - if((lf = strstr(description, "\\n"))) while(lf) { + // Add description if driver is capable of outputting it... + if(hal.stream.write_n) { + const char *description = setting_get_description((setting_id_t)(setting->id + offset)); + if(description && *description != '\0') { + char *lf; hal.stream.write(ASCII_EOL); - hal.stream.write_n(description, lf - description); - description = lf + 2; - lf = strstr(description, "\\n"); + if((lf = strstr(description, "\\n"))) while(lf) { + hal.stream.write(ASCII_EOL); + hal.stream.write_n(description, lf - description); + description = lf + 2; + lf = strstr(description, "\\n"); + } + if(*description != '\0') { + hal.stream.write(ASCII_EOL); + hal.stream.write(description); + } } - if(*description != '\0') { - hal.stream.write(ASCII_EOL); - hal.stream.write(description); + if(setting->flags.reboot_required) { + if(description && *description != '\0') + hal.stream.write(ASCII_EOL ASCII_EOL); + hal.stream.write(SETTINGS_HARD_RESET_REQUIRED + 4); } } - if(setting->flags.reboot_required) { - if(description && *description != '\0') - hal.stream.write(ASCII_EOL ASCII_EOL); - hal.stream.write(SETTINGS_HARD_RESET_REQUIRED + 4); - } - } #endif + } break; case SettingsFormat_MachineReadable: diff --git a/spindle_control.c b/spindle_control.c index 44d0a8f..3a57429 100644 --- a/spindle_control.c +++ b/spindle_control.c @@ -631,6 +631,7 @@ void spindle_all_off (void) { spindle_ptrs_t *spindle; uint_fast8_t spindle_num = N_SYS_SPINDLE; + do { if((spindle = spindle_get(--spindle_num))) { spindle->param->rpm = spindle->param->rpm_overridden = 0.0f; @@ -642,6 +643,8 @@ void spindle_all_off (void) #endif } } while(spindle_num); + + system_add_rt_report(Report_Spindle); } /*! \brief Check if any of the enabled spindles is running.