From 490d3f1220a32b7723533f31a192faec1066119a Mon Sep 17 00:00:00 2001 From: Sonny Jeon Date: Thu, 8 Dec 2016 23:17:45 -0700 Subject: [PATCH] Removed classic GUI interface. Fixed typo with line number support. - [config] Permanently removed classic GUI interface support. This unintentionally created a problem where some users/GUI devs used this compatibility mode and did not update to the new interface. So, there were two interfaces in use, rather than just one like it was intended. This removal should help everyone by forcing all GUIs to update and updated GUI not having to support yet another interface. - Fixed typo with line number support in jog mode. --- doc/log/commit_log_v1.1.txt | 23 ++ grbl/config.h | 16 - grbl/grbl.h | 2 +- grbl/jog.c | 2 +- grbl/report.c | 797 +++++++++++------------------------- grbl/settings.h | 15 +- 6 files changed, 266 insertions(+), 589 deletions(-) diff --git a/doc/log/commit_log_v1.1.txt b/doc/log/commit_log_v1.1.txt index 8e0b8a6b..f0c623ea 100644 --- a/doc/log/commit_log_v1.1.txt +++ b/doc/log/commit_log_v1.1.txt @@ -1,3 +1,26 @@ +---------------- +Date: 2016-12-04 +Author: chamnit +Subject: Fixed unintended laser mode pausing. Updated documentation. Min SS OVR lowered to 10%. + +- [laser] Tested a working version and pushed the wrong one for the +last! 20161203 was pausing upon every spindle speed change. That’s not +right. Fixed so nearly all motions are passed through and does not stop. + +- Minimum spindle speed override lower from 50% to 10%. Lasers could +use the lower speeds. + +- Fixed a very minor bug related to G80 error checking. Allowed no +error with non-modal motions with axis words. Not correct and fixed. + +- Fixed a compile error when disabling VARIABLE_SPINDLE + +- [doc] Updated some obsolete documentation. + +- [doc] Started a “Laser Mode” document that summarizes how Grbl’s new +laser mode works. + + ---------------- Date: 2016-12-03 Author: Sonny Jeon diff --git a/grbl/config.h b/grbl/config.h index 2cc03c2e..7529b250 100644 --- a/grbl/config.h +++ b/grbl/config.h @@ -287,22 +287,6 @@ #define REPORT_WCO_REFRESH_BUSY_COUNT 30 // (2-255) #define REPORT_WCO_REFRESH_IDLE_COUNT 10 // (2-255) Must be less than or equal to the busy count -// ----- COMPATIBILITY OPTIONS: ------ -// The following options enabled the old-style v0.9 Grbl interface. -// WARNING: DO NOT USE these compatibility options unless there is a really good reason to. If you are -// trying to use Grbl v1.1 with a GUI that supports a v0.9-style interface, it will still not likely work. -// A few things have been added, like override and accessory data and a new sleep state. These things will -// still likely require the GUI to be updated to handle these. In other words, IT WILL STILL NOT WORK! -// IT'S HIGHLY RECOMMENDED FOR GUIs TO UPDATE TO THE NEW INTERFACE FOR v1.1. Don't try to make it -// compatible with this old v0.9 style. It will be dropped in the near future. You have been warned. -// NOTE: The compiled size of Grbl with these options enabled will exceed the flash limit of FTDI-based -// Arduinos, like the Duemilanove and Nano. This will only fit on an Uno with the Optiboot bootloader. -// #define USE_CLASSIC_GRBL_INTERFACE // Default disabled. Uncomment to enable. -// #define REPORT_ALL_PIN_STATES // Default disabled. Uncomment to enable. Option obsolete in v1.1. -// #define REPORT_REALTIME_RATE // Disabled by default. Uncomment to enable. Option obsolete in v1.1. -// Enables minimal reporting feedback mode for GUIs, where human-readable strings are not as important. -// ----------------------------------- - // The temporal resolution of the acceleration management subsystem. A higher number gives smoother // acceleration, particularly noticeable on machines that run at very high feedrates, but may negatively // impact performance. The correct value for this parameter is machine dependent, so it's advised to diff --git a/grbl/grbl.h b/grbl/grbl.h index 3e9707c0..5b25b25e 100644 --- a/grbl/grbl.h +++ b/grbl/grbl.h @@ -23,7 +23,7 @@ // Grbl versioning system #define GRBL_VERSION "1.1e" -#define GRBL_VERSION_BUILD "20161204" +#define GRBL_VERSION_BUILD "20161208" // Define standard libraries used by Grbl. #include diff --git a/grbl/jog.c b/grbl/jog.c index e08119b1..553af77e 100644 --- a/grbl/jog.c +++ b/grbl/jog.c @@ -29,7 +29,7 @@ uint8_t jog_execute(plan_line_data_t *pl_data, parser_block_t *gc_block) pl_data->feed_rate = gc_block->values.f; pl_data->condition |= PL_COND_FLAG_NO_FEED_OVERRIDE; #ifdef USE_LINE_NUMBERS - pl_data->line_number = gc_block.values.n; + pl_data->line_number = gc_block->values.n; #endif if (bit_istrue(settings.flags,BITFLAG_SOFT_LIMIT_ENABLE)) { diff --git a/grbl/report.c b/grbl/report.c index 62a4607d..78cda83b 100644 --- a/grbl/report.c +++ b/grbl/report.c @@ -91,18 +91,16 @@ static void report_util_setting_string(uint8_t n) { } */ -#ifndef USE_CLASSIC_GRBL_INTERFACE - static void report_util_uint8_setting(uint8_t n, int val) { - report_util_setting_prefix(n); - print_uint8_base10(val); - report_util_line_feed(); // report_util_setting_string(n); - } - static void report_util_float_setting(uint8_t n, float val, uint8_t n_decimal) { - report_util_setting_prefix(n); - printFloat(val,n_decimal); - report_util_line_feed(); // report_util_setting_string(n); - } -#endif +static void report_util_uint8_setting(uint8_t n, int val) { + report_util_setting_prefix(n); + print_uint8_base10(val); + report_util_line_feed(); // report_util_setting_string(n); +} +static void report_util_float_setting(uint8_t n, float val, uint8_t n_decimal) { + report_util_setting_prefix(n); + printFloat(val,n_decimal); + report_util_line_feed(); // report_util_setting_string(n); +} // Handles the primary confirmation protocol response for streaming interfaces and human-feedback. @@ -118,59 +116,8 @@ void report_status_message(uint8_t status_code) case STATUS_OK: // STATUS_OK printPgmString(PSTR("ok\r\n")); break; default: - #ifdef USE_CLASSIC_GRBL_INTERFACE - printPgmString(PSTR("error: ")); - switch(status_code) { - case STATUS_EXPECTED_COMMAND_LETTER: - printPgmString(PSTR("Expected command letter")); break; - case STATUS_BAD_NUMBER_FORMAT: - printPgmString(PSTR("Bad number format")); break; - case STATUS_INVALID_STATEMENT: - printPgmString(PSTR("Invalid statement")); break; - case STATUS_NEGATIVE_VALUE: - printPgmString(PSTR("Value < 0")); break; - case STATUS_SETTING_DISABLED: - printPgmString(PSTR("Setting disabled")); break; - case STATUS_SETTING_STEP_PULSE_MIN: - printPgmString(PSTR("Value < 3 usec")); break; - case STATUS_SETTING_READ_FAIL: - printPgmString(PSTR("EEPROM read fail. Using defaults")); break; - case STATUS_IDLE_ERROR: - printPgmString(PSTR("Not idle")); break; - case STATUS_SYSTEM_GC_LOCK: - printPgmString(PSTR("G-code lock")); break; - case STATUS_SOFT_LIMIT_ERROR: - printPgmString(PSTR("Homing not enabled")); break; - case STATUS_OVERFLOW: - printPgmString(PSTR("Line overflow")); break; - #ifdef MAX_STEP_RATE_HZ - case STATUS_MAX_STEP_RATE_EXCEEDED: - printPgmString(PSTR("Step rate > 30kHz")); break; - #endif - case STATUS_CHECK_DOOR: - printPgmString(PSTR("Check Door")); break; - // case STATUS_LINE_LENGTH_EXCEEDED: // Supported on Grbl-Mega only. - // printPgmString(PSTR("Line length exceeded")); break; - case STATUS_TRAVEL_EXCEEDED: - printPgmString(PSTR("Travel exceeded")); break; - case STATUS_INVALID_JOG_COMMAND: - printPgmString(PSTR("Invalid jog command")); break; - // Common g-code parser errors. - case STATUS_GCODE_UNSUPPORTED_COMMAND: - printPgmString(PSTR("Unsupported command")); break; - case STATUS_GCODE_MODAL_GROUP_VIOLATION: - printPgmString(PSTR("Modal group violation")); break; - case STATUS_GCODE_UNDEFINED_FEED_RATE: - printPgmString(PSTR("Undefined feed rate")); break; - default: - // Remaining g-code parser errors with error codes - printPgmString(PSTR("Invalid gcode ID:")); - print_uint8_base10(status_code); // Print error code for user reference - } - #else - printPgmString(PSTR("error:")); - print_uint8_base10(status_code); - #endif + printPgmString(PSTR("error:")); + print_uint8_base10(status_code); report_util_line_feed(); } } @@ -178,28 +125,8 @@ void report_status_message(uint8_t status_code) // Prints alarm messages. void report_alarm_message(int8_t alarm_code) { - #ifdef USE_CLASSIC_GRBL_INTERFACE - printPgmString(PSTR("ALARM: ")); - switch (alarm_code) { - case ALARM_HARD_LIMIT_ERROR: - printPgmString(PSTR("Hard limit")); break; - case ALARM_SOFT_LIMIT_ERROR: - printPgmString(PSTR("Soft limit")); break; - case ALARM_ABORT_CYCLE: - printPgmString(PSTR("Abort during cycle")); break; - case ALARM_PROBE_FAIL_INITIAL: - case ALARM_PROBE_FAIL_CONTACT: - printPgmString(PSTR("Probe fail")); break; - case ALARM_HOMING_FAIL_RESET: - case ALARM_HOMING_FAIL_DOOR: - case ALARM_HOMING_FAIL_PULLOFF: - case ALARM_HOMING_FAIL_APPROACH: - printPgmString(PSTR("Homing fail")); break; - } - #else - printPgmString(PSTR("ALARM:")); - print_uint8_base10(alarm_code); - #endif + printPgmString(PSTR("ALARM:")); + print_uint8_base10(alarm_code); report_util_line_feed(); delay_ms(500); // Force delay to ensure message clears serial write buffer. } @@ -211,11 +138,7 @@ void report_alarm_message(int8_t alarm_code) // is installed, the message number codes are less than zero. void report_feedback_message(uint8_t message_code) { - #ifdef USE_CLASSIC_GRBL_INTERFACE - serial_write('['); - #else - printPgmString(PSTR("[MSG:")); - #endif + printPgmString(PSTR("[MSG:")); switch(message_code) { case MESSAGE_CRITICAL_EVENT: printPgmString(PSTR("Reset to continue")); break; @@ -252,26 +175,7 @@ void report_init_message() // Grbl help message void report_grbl_help() { - #ifdef USE_CLASSIC_GRBL_INTERFACE - printPgmString(PSTR("$$ (view Grbl settings)\r\n" - "$# (view # parameters)\r\n" - "$G (view parser state)\r\n" - "$I (view build info)\r\n" - "$N (view startup blocks)\r\n" - "$x=value (save Grbl setting)\r\n" - "$Nx=line (save startup block)\r\n" - "$J=line (jog)\r\n" - "$SLP (sleep mode)\r\n" - "$C (check gcode mode)\r\n" - "$X (kill alarm lock)\r\n" - "$H (run homing cycle)\r\n" - "~ (cycle start)\r\n" - "! (feed hold)\r\n" - "? (current status)\r\n" - "ctrl-x (reset Grbl)\r\n")); - #else - printPgmString(PSTR("[HLP:$$ $# $G $I $N $x=val $Nx=line $J=line $SLP $C $X $H ~ ! ? ctrl-x]\r\n")); - #endif + printPgmString(PSTR("[HLP:$$ $# $G $I $N $x=val $Nx=line $J=line $SLP $C $X $H ~ ! ? ctrl-x]\r\n")); } @@ -279,107 +183,46 @@ void report_grbl_help() { // NOTE: The numbering scheme here must correlate to storing in settings.c void report_grbl_settings() { // Print Grbl settings. - #ifdef USE_CLASSIC_GRBL_INTERFACE - printPgmString(PSTR("$0=")); print_uint8_base10(settings.pulse_microseconds); - printPgmString(PSTR(" (step pulse, usec)\r\n$1=")); print_uint8_base10(settings.stepper_idle_lock_time); - printPgmString(PSTR(" (step idle delay, msec)\r\n$2=")); print_uint8_base10(settings.step_invert_mask); - printPgmString(PSTR(" (step port invert mask)\r\n$3=")); print_uint8_base10(settings.dir_invert_mask); - printPgmString(PSTR(" (dir port invert mask)\r\n$4=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_INVERT_ST_ENABLE)); - printPgmString(PSTR(" (step enable invert, bool)\r\n$5=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_INVERT_LIMIT_PINS)); - printPgmString(PSTR(" (limit pins invert, bool)\r\n$6=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_INVERT_PROBE_PIN)); - printPgmString(PSTR(" (probe pin invert, bool)\r\n$10=")); print_uint8_base10(settings.status_report_mask); - printPgmString(PSTR(" (status report mask)\r\n$11=")); printFloat(settings.junction_deviation,N_DECIMAL_SETTINGVALUE); - printPgmString(PSTR(" (junction deviation, mm)\r\n$12=")); printFloat(settings.arc_tolerance,N_DECIMAL_SETTINGVALUE); - printPgmString(PSTR(" (arc tolerance, mm)\r\n$13=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_REPORT_INCHES)); - printPgmString(PSTR(" (report inches, bool)\r\n$20=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_SOFT_LIMIT_ENABLE)); - printPgmString(PSTR(" (soft limits, bool)\r\n$21=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_HARD_LIMIT_ENABLE)); - printPgmString(PSTR(" (hard limits, bool)\r\n$22=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_HOMING_ENABLE)); - printPgmString(PSTR(" (homing cycle, bool)\r\n$23=")); print_uint8_base10(settings.homing_dir_mask); - printPgmString(PSTR(" (homing dir invert mask)\r\n$24=")); printFloat(settings.homing_feed_rate,N_DECIMAL_SETTINGVALUE); - printPgmString(PSTR(" (homing feed, mm/min)\r\n$25=")); printFloat(settings.homing_seek_rate,N_DECIMAL_SETTINGVALUE); - printPgmString(PSTR(" (homing seek, mm/min)\r\n$26=")); print_uint8_base10(settings.homing_debounce_delay); - printPgmString(PSTR(" (homing debounce, msec)\r\n$27=")); printFloat(settings.homing_pulloff,N_DECIMAL_SETTINGVALUE); - printPgmString(PSTR(" (homing pull-off, mm)\r\n$30=")); printFloat(settings.rpm_max,N_DECIMAL_RPMVALUE); - printPgmString(PSTR(" (rpm max)\r\n$31=")); printFloat(settings.rpm_min,N_DECIMAL_RPMVALUE); - #ifdef VARIABLE_SPINDLE - printPgmString(PSTR(" (rpm min)\r\n$32=")); print_uint8_base10(bit_istrue(settings.flags,BITFLAG_LASER_MODE)); - printPgmString(PSTR(" (laser mode, bool)\r\n")); - #else - printPgmString(PSTR(" (rpm min)\r\n$32=0 (laser mode, bool)\r\n")); - #endif - // Print axis settings - uint8_t idx, set_idx; - uint8_t val = AXIS_SETTINGS_START_VAL; - for (set_idx=0; set_idx= MOTION_MODE_PROBE_TOWARD) { printPgmString(PSTR("38.")); print_uint8_base10(gc_state.modal.motion - (MOTION_MODE_PROBE_TOWARD-2)); @@ -515,79 +354,69 @@ void report_startup_line(uint8_t n, char *line) void report_execute_startup_message(char *line, uint8_t status_code) { - #ifdef USE_CLASSIC_GRBL_INTERFACE - printString(line); - report_status_message(status_code); - #else - serial_write('>'); - printString(line); - serial_write(':'); - report_status_message(status_code); - #endif + serial_write('>'); + printString(line); + serial_write(':'); + report_status_message(status_code); } // Prints build info line void report_build_info(char *line) { + printPgmString(PSTR("[VER:" GRBL_VERSION "." GRBL_VERSION_BUILD ":")); + printString(line); + report_util_feedback_line_feed(); + printPgmString(PSTR("[OPT:")); // Generate compile-time build option list + #ifdef VARIABLE_SPINDLE + serial_write('V'); + #endif + #ifdef USE_LINE_NUMBERS + serial_write('N'); + #endif + #ifdef ENABLE_M7 + serial_write('M'); + #endif + #ifdef COREXY + serial_write('C'); + #endif + #ifdef PARKING_ENABLE + serial_write('P'); + #endif + #ifdef HOMING_FORCE_SET_ORIGIN + serial_write('Z'); + #endif + #ifdef HOMING_SINGLE_AXIS_COMMANDS + serial_write('H'); + #endif + #ifdef LIMITS_TWO_SWITCHES_ON_AXES + serial_write('L'); + #endif + #ifdef ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES + serial_write('A'); + #endif #ifdef USE_CLASSIC_GRBL_INTERFACE - printPgmString(PSTR("[" GRBL_VERSION "." GRBL_VERSION_BUILD ":")); - printString(line); - #else - printPgmString(PSTR("[VER:" GRBL_VERSION "." GRBL_VERSION_BUILD ":")); - printString(line); - report_util_feedback_line_feed(); - printPgmString(PSTR("[OPT:")); // Generate compile-time build option list - #ifdef VARIABLE_SPINDLE - serial_write('V'); - #endif - #ifdef USE_LINE_NUMBERS - serial_write('N'); - #endif - #ifdef ENABLE_M7 - serial_write('M'); - #endif - #ifdef COREXY - serial_write('C'); - #endif - #ifdef PARKING_ENABLE - serial_write('P'); - #endif - #ifdef HOMING_FORCE_SET_ORIGIN - serial_write('Z'); - #endif - #ifdef HOMING_SINGLE_AXIS_COMMANDS - serial_write('H'); - #endif - #ifdef LIMITS_TWO_SWITCHES_ON_AXES - serial_write('L'); - #endif - #ifdef ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES - serial_write('A'); - #endif - #ifdef USE_CLASSIC_GRBL_INTERFACE - serial_write('R'); - #endif - #ifndef ENABLE_RESTORE_EEPROM_WIPE_ALL // NOTE: Shown when disabled. - serial_write('*'); - #endif - #ifndef ENABLE_RESTORE_EEPROM_DEFAULT_SETTINGS // NOTE: Shown when disabled. - serial_write('$'); - #endif - #ifndef ENABLE_RESTORE_EEPROM_CLEAR_PARAMETERS // NOTE: Shown when disabled. - serial_write('#'); - #endif - #ifndef ENABLE_BUILD_INFO_WRITE_COMMAND // NOTE: Shown when disabled. - serial_write('I'); - #endif - #ifndef FORCE_BUFFER_SYNC_DURING_EEPROM_WRITE // NOTE: Shown when disabled. - serial_write('E'); - #endif - #ifndef FORCE_BUFFER_SYNC_DURING_WCO_CHANGE // NOTE: Shown when disabled. - serial_write('W'); - #endif - // NOTE: Compiled values, like override increments/max/min values, may be added at some point later. - // These will likely have a comma delimiter to separate them. + serial_write('R'); + #endif + #ifndef ENABLE_RESTORE_EEPROM_WIPE_ALL // NOTE: Shown when disabled. + serial_write('*'); + #endif + #ifndef ENABLE_RESTORE_EEPROM_DEFAULT_SETTINGS // NOTE: Shown when disabled. + serial_write('$'); + #endif + #ifndef ENABLE_RESTORE_EEPROM_CLEAR_PARAMETERS // NOTE: Shown when disabled. + serial_write('#'); + #endif + #ifndef ENABLE_BUILD_INFO_WRITE_COMMAND // NOTE: Shown when disabled. + serial_write('I'); + #endif + #ifndef FORCE_BUFFER_SYNC_DURING_EEPROM_WRITE // NOTE: Shown when disabled. + serial_write('E'); #endif + #ifndef FORCE_BUFFER_SYNC_DURING_WCO_CHANGE // NOTE: Shown when disabled. + serial_write('W'); + #endif + // NOTE: Compiled values, like override increments/max/min values, may be added at some point later. + // These will likely have a comma delimiter to separate them. report_util_feedback_line_feed(); } @@ -609,128 +438,157 @@ void report_echo_line_received(char *line) // especially during g-code programs with fast, short line segments and high frequency reports (5-20Hz). void report_realtime_status() { - #ifdef USE_CLASSIC_GRBL_INTERFACE - - uint8_t idx; - int32_t current_position[N_AXIS]; // Copy current state of the system position variable - memcpy(current_position,sys_position,sizeof(sys_position)); - float print_position[N_AXIS]; - - // Report current machine state - switch (sys.state) { - case STATE_IDLE: printPgmString(PSTR("line_number; + plan_block_t * cur_block = plan_get_current_block(); + if (cur_block != NULL) { + uint32_t ln = cur_block->line_number; + if (ln > 0) { + printPgmString(PSTR("|Ln:")); + printInteger(ln); + } } - printInteger(ln); #endif + #endif - #ifdef REPORT_REALTIME_RATE - // Report realtime rate - printPgmString(PSTR(",F:")); + // Report realtime feed speed + #ifdef REPORT_FIELD_CURRENT_FEED_SPEED + #ifdef VARIABLE_SPINDLE + printPgmString(PSTR("|FS:")); printFloat_RateValue(st_get_realtime_rate()); - #endif + serial_write(','); + printFloat(sys.spindle_speed,N_DECIMAL_RPMVALUE); + #else + printPgmString(PSTR("|F:")); + printFloat_RateValue(st_get_realtime_rate()); + #endif + #endif - #ifdef REPORT_ALL_PIN_STATES - if (bit_istrue(settings.status_report_mask, - ( BITFLAG_RT_STATUS_LIMIT_PINS| BITFLAG_RT_STATUS_PROBE_PIN | BITFLAG_RT_STATUS_CONTROL_PINS ))) { - printPgmString(PSTR(",Pin:")); - if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_LIMIT_PINS)) { - print_uint8_base2_ndigit(limits_get_state(),N_AXIS); - } - printPgmString(PSTR("|")); - if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_PROBE_PIN)) { - if (probe_get_state()) { printPgmString(PSTR("1")); } - else { printPgmString(PSTR("0")); } - } - printPgmString(PSTR("|")); - if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_CONTROL_PINS)) { - print_uint8_base2_ndigit(system_control_get_state(),N_CONTROL_PIN); - } + #ifdef REPORT_FIELD_PIN_STATE + uint8_t lim_pin_state = limits_get_state(); + uint8_t ctrl_pin_state = system_control_get_state(); + uint8_t prb_pin_state = probe_get_state(); + if (lim_pin_state | ctrl_pin_state | prb_pin_state) { + printPgmString(PSTR("|Pn:")); + if (prb_pin_state) { serial_write('P'); } + if (lim_pin_state) { + if (bit_istrue(lim_pin_state,bit(X_AXIS))) { serial_write('X'); } + if (bit_istrue(lim_pin_state,bit(Y_AXIS))) { serial_write('Y'); } + if (bit_istrue(lim_pin_state,bit(Z_AXIS))) { serial_write('Z'); } } - #else - if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_LIMIT_PINS)) { - printPgmString(PSTR(",Lim:")); - print_uint8_base2_ndigit(limits_get_state(),N_AXIS); + if (ctrl_pin_state) { + #ifdef ENABLE_SAFETY_DOOR_INPUT_PIN + if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_SAFETY_DOOR)) { serial_write('D'); } + #endif + if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_RESET)) { serial_write('R'); } + if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_FEED_HOLD)) { serial_write('H'); } + if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_CYCLE_START)) { serial_write('S'); } } - #endif + } + #endif + + #ifdef REPORT_FIELD_WORK_COORD_OFFSET + if (sys.report_wco_counter > 0) { sys.report_wco_counter--; } + else { + if (sys.state & (STATE_HOMING | STATE_CYCLE | STATE_HOLD | STATE_JOG | STATE_SAFETY_DOOR)) { + sys.report_wco_counter = (REPORT_WCO_REFRESH_BUSY_COUNT-1); // Reset counter for slow refresh + } else { sys.report_wco_counter = (REPORT_WCO_REFRESH_IDLE_COUNT-1); } + if (sys.report_ovr_counter == 0) { sys.report_ovr_counter = 1; } // Set override on next report. + printPgmString(PSTR("|WCO:")); + report_util_axis_values(wco); + } + #endif - if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_OVERRIDES)) { - printPgmString(PSTR(",Ov:")); + #ifdef REPORT_FIELD_OVERRIDES + if (sys.report_ovr_counter > 0) { sys.report_ovr_counter--; } + else { + if (sys.state & (STATE_HOMING | STATE_CYCLE | STATE_HOLD | STATE_JOG | STATE_SAFETY_DOOR)) { + sys.report_ovr_counter = (REPORT_OVR_REFRESH_BUSY_COUNT-1); // Reset counter for slow refresh + } else { sys.report_ovr_counter = (REPORT_OVR_REFRESH_IDLE_COUNT-1); } + printPgmString(PSTR("|Ov:")); print_uint8_base10(sys.f_override); serial_write(','); print_uint8_base10(sys.r_override); serial_write(','); print_uint8_base10(sys.spindle_speed_ovr); - + uint8_t sp_state = spindle_get_state(); - uint8_t cl_state = coolant_get_state(); - if (sp_state | cl_state) { - printPgmString(PSTR(",A:")); + uint8_t cl_state = coolant_get_state(); + if (sp_state || cl_state) { + printPgmString(PSTR("|A:")); if (sp_state) { // != SPINDLE_STATE_DISABLE #ifdef VARIABLE_SPINDLE #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN @@ -750,187 +608,10 @@ void report_realtime_status() #endif } } - - printPgmString(PSTR(">\r\n")); - - #else - - uint8_t idx; - int32_t current_position[N_AXIS]; // Copy current state of the system position variable - memcpy(current_position,sys_position,sizeof(sys_position)); - float print_position[N_AXIS]; - system_convert_array_steps_to_mpos(print_position,current_position); - - // Report current machine state and sub-states - serial_write('<'); - switch (sys.state) { - case STATE_IDLE: printPgmString(PSTR("Idle")); break; - case STATE_CYCLE: printPgmString(PSTR("Run")); break; - case STATE_HOLD: - if (!(sys.suspend & SUSPEND_JOG_CANCEL)) { - printPgmString(PSTR("Hold:")); - if (sys.suspend & SUSPEND_HOLD_COMPLETE) { serial_write('0'); } // Ready to resume - else { serial_write('1'); } // Actively holding - break; - } // Continues to print jog state during jog cancel. - case STATE_JOG: printPgmString(PSTR("Jog")); break; - case STATE_HOMING: printPgmString(PSTR("Home")); break; - case STATE_ALARM: printPgmString(PSTR("Alarm")); break; - case STATE_CHECK_MODE: printPgmString(PSTR("Check")); break; - case STATE_SAFETY_DOOR: - printPgmString(PSTR("Door:")); - if (sys.suspend & SUSPEND_INITIATE_RESTORE) { - serial_write('3'); // Restoring - } else { - if (sys.suspend & SUSPEND_RETRACT_COMPLETE) { - if (sys.suspend & SUSPEND_SAFETY_DOOR_AJAR) { - serial_write('1'); // Door ajar - } else { - serial_write('0'); - } // Door closed and ready to resume - } else { - serial_write('2'); // Retracting - } - } - break; - case STATE_SLEEP: printPgmString(PSTR("Sleep")); break; - } - - float wco[N_AXIS]; - if (bit_isfalse(settings.status_report_mask,BITFLAG_RT_STATUS_POSITION_TYPE) || - (sys.report_wco_counter == 0) ) { - for (idx=0; idx< N_AXIS; idx++) { - // Apply work coordinate offsets and tool length offset to current position. - wco[idx] = gc_state.coord_system[idx]+gc_state.coord_offset[idx]; - if (idx == TOOL_LENGTH_OFFSET_AXIS) { wco[idx] += gc_state.tool_length_offset; } - if (bit_isfalse(settings.status_report_mask,BITFLAG_RT_STATUS_POSITION_TYPE)) { - print_position[idx] -= wco[idx]; - } - } - } - - // Report machine position - if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_POSITION_TYPE)) { - printPgmString(PSTR("|MPos:")); - } else { - printPgmString(PSTR("|WPos:")); - } - report_util_axis_values(print_position); - - // Returns planner and serial read buffer states. - #ifdef REPORT_FIELD_BUFFER_STATE - if (bit_istrue(settings.status_report_mask,BITFLAG_RT_STATUS_BUFFER_STATE)) { - printPgmString(PSTR("|Bf:")); - print_uint8_base10(plan_get_block_buffer_available()); - serial_write(','); - print_uint8_base10(serial_get_rx_buffer_available()); - } - #endif - - #ifdef USE_LINE_NUMBERS - #ifdef REPORT_FIELD_LINE_NUMBERS - // Report current line number - plan_block_t * cur_block = plan_get_current_block(); - if (cur_block != NULL) { - uint32_t ln = cur_block->line_number; - if (ln > 0) { - printPgmString(PSTR("|Ln:")); - printInteger(ln); - } - } - #endif - #endif - - // Report realtime feed speed - #ifdef REPORT_FIELD_CURRENT_FEED_SPEED - #ifdef VARIABLE_SPINDLE - printPgmString(PSTR("|FS:")); - printFloat_RateValue(st_get_realtime_rate()); - serial_write(','); - printFloat(sys.spindle_speed,N_DECIMAL_RPMVALUE); - #else - printPgmString(PSTR("|F:")); - printFloat_RateValue(st_get_realtime_rate()); - #endif - #endif - - #ifdef REPORT_FIELD_PIN_STATE - uint8_t lim_pin_state = limits_get_state(); - uint8_t ctrl_pin_state = system_control_get_state(); - uint8_t prb_pin_state = probe_get_state(); - if (lim_pin_state | ctrl_pin_state | prb_pin_state) { - printPgmString(PSTR("|Pn:")); - if (prb_pin_state) { serial_write('P'); } - if (lim_pin_state) { - if (bit_istrue(lim_pin_state,bit(X_AXIS))) { serial_write('X'); } - if (bit_istrue(lim_pin_state,bit(Y_AXIS))) { serial_write('Y'); } - if (bit_istrue(lim_pin_state,bit(Z_AXIS))) { serial_write('Z'); } - } - if (ctrl_pin_state) { - #ifdef ENABLE_SAFETY_DOOR_INPUT_PIN - if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_SAFETY_DOOR)) { serial_write('D'); } - #endif - if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_RESET)) { serial_write('R'); } - if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_FEED_HOLD)) { serial_write('H'); } - if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_CYCLE_START)) { serial_write('S'); } - } - } - #endif - - #ifdef REPORT_FIELD_WORK_COORD_OFFSET - if (sys.report_wco_counter > 0) { sys.report_wco_counter--; } - else { - if (sys.state & (STATE_HOMING | STATE_CYCLE | STATE_HOLD | STATE_JOG | STATE_SAFETY_DOOR)) { - sys.report_wco_counter = (REPORT_WCO_REFRESH_BUSY_COUNT-1); // Reset counter for slow refresh - } else { sys.report_wco_counter = (REPORT_WCO_REFRESH_IDLE_COUNT-1); } - if (sys.report_ovr_counter == 0) { sys.report_ovr_counter = 1; } // Set override on next report. - printPgmString(PSTR("|WCO:")); - report_util_axis_values(wco); - } - #endif - - #ifdef REPORT_FIELD_OVERRIDES - if (sys.report_ovr_counter > 0) { sys.report_ovr_counter--; } - else { - if (sys.state & (STATE_HOMING | STATE_CYCLE | STATE_HOLD | STATE_JOG | STATE_SAFETY_DOOR)) { - sys.report_ovr_counter = (REPORT_OVR_REFRESH_BUSY_COUNT-1); // Reset counter for slow refresh - } else { sys.report_ovr_counter = (REPORT_OVR_REFRESH_IDLE_COUNT-1); } - printPgmString(PSTR("|Ov:")); - print_uint8_base10(sys.f_override); - serial_write(','); - print_uint8_base10(sys.r_override); - serial_write(','); - print_uint8_base10(sys.spindle_speed_ovr); - - uint8_t sp_state = spindle_get_state(); - uint8_t cl_state = coolant_get_state(); - if (sp_state || cl_state) { - printPgmString(PSTR("|A:")); - if (sp_state) { // != SPINDLE_STATE_DISABLE - #ifdef VARIABLE_SPINDLE - #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN - serial_write('S'); // CW - #else - if (sp_state == SPINDLE_STATE_CW) { serial_write('S'); } // CW - else { serial_write('C'); } // CCW - #endif - #else - if (sp_state & SPINDLE_STATE_CW) { serial_write('S'); } // CW - else { serial_write('C'); } // CCW - #endif - } - if (cl_state & COOLANT_STATE_FLOOD) { serial_write('F'); } - #ifdef ENABLE_M7 - if (cl_state & COOLANT_STATE_MIST) { serial_write('M'); } - #endif - } - } - #endif - - serial_write('>'); - report_util_line_feed(); - #endif + + serial_write('>'); + report_util_line_feed(); } diff --git a/grbl/settings.h b/grbl/settings.h index 0e5047ac..0116b542 100644 --- a/grbl/settings.h +++ b/grbl/settings.h @@ -40,19 +40,8 @@ #define BITFLAG_INVERT_PROBE_PIN bit(7) // Define status reporting boolean enable bit flags in settings.status_report_mask -#ifdef USE_CLASSIC_GRBL_INTERFACE - #define BITFLAG_RT_STATUS_MACHINE_POSITION bit(0) - #define BITFLAG_RT_STATUS_WORK_POSITION bit(1) - #define BITFLAG_RT_STATUS_PLANNER_BUFFER bit(2) - #define BITFLAG_RT_STATUS_SERIAL_RX bit(3) - #define BITFLAG_RT_STATUS_LIMIT_PINS bit(4) - #define BITFLAG_RT_STATUS_PROBE_PIN bit(5) - #define BITFLAG_RT_STATUS_CONTROL_PINS bit(6) - #define BITFLAG_RT_STATUS_OVERRIDES bit(7) -#else - #define BITFLAG_RT_STATUS_POSITION_TYPE bit(0) - #define BITFLAG_RT_STATUS_BUFFER_STATE bit(1) -#endif +#define BITFLAG_RT_STATUS_POSITION_TYPE bit(0) +#define BITFLAG_RT_STATUS_BUFFER_STATE bit(1) // Define settings restore bitflags. #define SETTINGS_RESTORE_DEFAULTS bit(0)