gnea\grbl-Mega  1.0f
Source Code Documentation ( Internal Workings )
report.c
Go to the documentation of this file.
1 /*
2  report.c - reporting and messaging methods
3  Part of Grbl
4 
5  Copyright (c) 2012-2016 Sungeun K. Jeon for Gnea Research LLC
6 
7  Grbl is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  Grbl is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with Grbl. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 /*
22  This file functions as the primary feedback interface for Grbl. Any outgoing data, such
23  as the protocol status messages, feedback messages, and status reports, are stored here.
24  For the most part, these functions primarily are called from protocol.c methods. If a
25  different style feedback is desired (i.e. JSON), then a user can change these following
26  methods to accomodate their needs.
27 */
28 
29 #include "grbl.h"
30 
33 static void report_util_line_feed() { printPgmString(PSTR("\r\n")); }
34 static void report_util_feedback_line_feed() { serial_write(']'); report_util_line_feed(); }
35 static void report_util_gcode_modes_G() { printPgmString(PSTR(" G")); }
36 static void report_util_gcode_modes_M() { printPgmString(PSTR(" M")); }
37 // static void report_util_comment_line_feed() { serial_write(')'); report_util_line_feed(); }
38 static void report_util_axis_values(float *axis_value) {
39  uint8_t idx;
40  for (idx=0; idx<N_AXIS; idx++) {
41  printFloat_CoordValue(axis_value[idx]);
42  if (idx < (N_AXIS-1)) { serial_write(','); }
43  }
44 }
45 
46 /*
47 static void report_util_setting_string(uint8_t n) {
48  serial_write(' ');
49  serial_write('(');
50  switch(n) {
51  case 0: printPgmString(PSTR("stp pulse")); break;
52  case 1: printPgmString(PSTR("idl delay")); break;
53  case 2: printPgmString(PSTR("stp inv")); break;
54  case 3: printPgmString(PSTR("dir inv")); break;
55  case 4: printPgmString(PSTR("stp en inv")); break;
56  case 5: printPgmString(PSTR("lim inv")); break;
57  case 6: printPgmString(PSTR("prb inv")); break;
58  case 10: printPgmString(PSTR("rpt")); break;
59  case 11: printPgmString(PSTR("jnc dev")); break;
60  case 12: printPgmString(PSTR("arc tol")); break;
61  case 13: printPgmString(PSTR("rpt inch")); break;
62  case 20: printPgmString(PSTR("sft lim")); break;
63  case 21: printPgmString(PSTR("hrd lim")); break;
64  case 22: printPgmString(PSTR("hm cyc")); break;
65  case 23: printPgmString(PSTR("hm dir inv")); break;
66  case 24: printPgmString(PSTR("hm feed")); break;
67  case 25: printPgmString(PSTR("hm seek")); break;
68  case 26: printPgmString(PSTR("hm delay")); break;
69  case 27: printPgmString(PSTR("hm pulloff")); break;
70  case 30: printPgmString(PSTR("rpm max")); break;
71  case 31: printPgmString(PSTR("rpm min")); break;
72  case 32: printPgmString(PSTR("laser")); break;
73  default:
74  n -= AXIS_SETTINGS_START_VAL;
75  uint8_t idx = 0;
76  while (n >= AXIS_SETTINGS_INCREMENT) {
77  n -= AXIS_SETTINGS_INCREMENT;
78  idx++;
79  }
80  serial_write(n+'x');
81  switch (idx) {
82  case 0: printPgmString(PSTR(":stp/mm")); break;
83  case 1: printPgmString(PSTR(":mm/min")); break;
84  case 2: printPgmString(PSTR(":mm/s^2")); break;
85  case 3: printPgmString(PSTR(":mm max")); break;
86  }
87  break;
88  }
89  report_util_comment_line_feed();
90 }
91 */
92 
93 static void report_util_uint8_setting(uint8_t n, int val) {
95  print_uint8_base10(val);
96  report_util_line_feed();
97 }
98 static void report_util_float_setting(uint8_t n, float val, uint8_t n_decimal) {
100  printFloat(val,n_decimal);
101  report_util_line_feed();
102 }
103 
105 // For every incoming line, this method responds with an 'ok' for a successful command or an
106 // 'error:' to indicate some error event with the line or some critical system error during
107 // operation. Errors events can originate from the g-code parser, settings module, or asynchronously
108 // from a critical error, such as a triggered hard limit. Interface should always monitor for these
109 // responses.
110 void report_status_message(uint8_t status_code)
111 {
112  switch(status_code) {
113  case STATUS_OK:
114  printPgmString(PSTR("ok\r\n")); break;
115  default:
116  printPgmString(PSTR("error:"));
117  print_uint8_base10(status_code);
118  report_util_line_feed();
119  }
120 }
122 void report_alarm_message(uint8_t alarm_code)
123 {
124  printPgmString(PSTR("ALARM:"));
125  print_uint8_base10(alarm_code);
126  report_util_line_feed();
127  delay_ms(500);
128 }
130 // user feedback for things that are not of the status/alarm message protocol. These are
131 // messages such as setup warnings, switch toggling, and how to exit alarms.
132 //
134 // is installed, the message number codes are less than zero.
135 void report_feedback_message(uint8_t message_code)
136 {
137  printPgmString(PSTR("[MSG:"));
138  switch(message_code) {
140  printPgmString(PSTR("Reset to continue")); break;
141  case MESSAGE_ALARM_LOCK:
142  printPgmString(PSTR("'$H'|'$X' to unlock")); break;
144  printPgmString(PSTR("Caution: Unlocked")); break;
145  case MESSAGE_ENABLED:
146  printPgmString(PSTR("Enabled")); break;
147  case MESSAGE_DISABLED:
148  printPgmString(PSTR("Disabled")); break;
150  printPgmString(PSTR("Check Door")); break;
152  printPgmString(PSTR("Check Limits")); break;
153  case MESSAGE_PROGRAM_END:
154  printPgmString(PSTR("Pgm End")); break;
156  printPgmString(PSTR("Restoring defaults")); break;
158  printPgmString(PSTR("Restoring spindle")); break;
159  case MESSAGE_SLEEP_MODE:
160  printPgmString(PSTR("Sleeping")); break;
161  }
162  report_util_feedback_line_feed();
163 }
164 
167 {
168  printPgmString(PSTR("\r\nGrbl " GRBL_VERSION " ['$' for help]\r\n"));
169 }
172  printPgmString(PSTR("[HLP:$$ $# $G $I $N $x=val $Nx=line $J=line $SLP $C $X $H ~ ! ? ctrl-x]\r\n"));
173 }
174 
176 //
179 // Print Grbl settings.
180  report_util_uint8_setting(0,settings.pulse_microseconds);
181  report_util_uint8_setting(1,settings.stepper_idle_lock_time);
182  report_util_uint8_setting(2,settings.step_invert_mask);
183  report_util_uint8_setting(3,settings.dir_invert_mask);
184  report_util_uint8_setting(4,bit_istrue(settings.flags,BITFLAG_INVERT_ST_ENABLE));
185  report_util_uint8_setting(5,bit_istrue(settings.flags,BITFLAG_INVERT_LIMIT_PINS));
186  report_util_uint8_setting(6,bit_istrue(settings.flags,BITFLAG_INVERT_PROBE_PIN));
187  report_util_uint8_setting(10,settings.status_report_mask);
188  report_util_float_setting(11,settings.junction_deviation,N_DECIMAL_SETTINGVALUE);
189  report_util_float_setting(12,settings.arc_tolerance,N_DECIMAL_SETTINGVALUE);
190  report_util_uint8_setting(13,bit_istrue(settings.flags,BITFLAG_REPORT_INCHES));
191  report_util_uint8_setting(20,bit_istrue(settings.flags,BITFLAG_SOFT_LIMIT_ENABLE));
192  report_util_uint8_setting(21,bit_istrue(settings.flags,BITFLAG_HARD_LIMIT_ENABLE));
193  report_util_uint8_setting(22,bit_istrue(settings.flags,BITFLAG_HOMING_ENABLE));
194  report_util_uint8_setting(23,settings.homing_dir_mask);
195  report_util_float_setting(24,settings.homing_feed_rate,N_DECIMAL_SETTINGVALUE);
196  report_util_float_setting(25,settings.homing_seek_rate,N_DECIMAL_SETTINGVALUE);
197  report_util_uint8_setting(26,settings.homing_debounce_delay);
198  report_util_float_setting(27,settings.homing_pulloff,N_DECIMAL_SETTINGVALUE);
199  report_util_float_setting(30,settings.rpm_max,N_DECIMAL_RPMVALUE);
200  report_util_float_setting(31,settings.rpm_min,N_DECIMAL_RPMVALUE);
201  report_util_uint8_setting(32,bit_istrue(settings.flags,BITFLAG_LASER_MODE));
202 // Print axis settings
203  uint8_t idx, set_idx;
204  uint8_t val = AXIS_SETTINGS_START_VAL;
205  for (set_idx=0; set_idx<AXIS_N_SETTINGS; set_idx++) {
206  for (idx=0; idx<N_AXIS; idx++) {
207  switch (set_idx) {
208  case 0: report_util_float_setting(val+idx,settings.steps_per_mm[idx],N_DECIMAL_SETTINGVALUE); break;
209  case 1: report_util_float_setting(val+idx,settings.max_rate[idx],N_DECIMAL_SETTINGVALUE); break;
210  case 2: report_util_float_setting(val+idx,settings.acceleration[idx]/(60*60),N_DECIMAL_SETTINGVALUE); break;
211  case 3: report_util_float_setting(val+idx,-settings.max_travel[idx],N_DECIMAL_SETTINGVALUE); break;
212  }
213  }
215  }
216 }
217 
219 // successful probe or upon a failed probe with the G38.3 without errors command (if supported).
220 // These values are retained until Grbl is power-cycled, whereby they will be re-zeroed.
222 {
223 // Report in terms of machine position.
224  printPgmString(PSTR("[PRB:"));
225  float print_position[N_AXIS];
227  report_util_axis_values(print_position);
228  serial_write(':');
230  report_util_feedback_line_feed();
231 }
232 
235 {
236  float coord_data[N_AXIS];
237  uint8_t coord_select;
238  for (coord_select = 0; coord_select <= SETTING_INDEX_NCOORD; coord_select++) {
239  if (!(settings_read_coord_data(coord_select,coord_data))) {
241  return;
242  }
243  printPgmString(PSTR("[G"));
244  switch (coord_select) {
245  case 6: printPgmString(PSTR("28")); break;
246  case 7: printPgmString(PSTR("30")); break;
247  default: print_uint8_base10(coord_select+54); break;
248  }
249  serial_write(':');
250  report_util_axis_values(coord_data);
251  report_util_feedback_line_feed();
252  }
253  printPgmString(PSTR("[G92:"));
254  report_util_axis_values(gc_state.coord_offset);
255  report_util_feedback_line_feed();
256  printPgmString(PSTR("[TLO:"));
258  report_util_feedback_line_feed();
260 }
261 
264 {
265  printPgmString(PSTR("[GC:G"));
267  printPgmString(PSTR("38."));
269  } else {
271  }
272 
273  report_util_gcode_modes_G();
275 
276  report_util_gcode_modes_G();
278 
279  report_util_gcode_modes_G();
281 
282  report_util_gcode_modes_G();
284 
285  report_util_gcode_modes_G();
287 
289  report_util_gcode_modes_M();
290  switch (gc_state.modal.program_flow) {
291  case PROGRAM_FLOW_PAUSED : serial_write('0'); break;
292 // case PROGRAM_FLOW_OPTIONAL_STOP : serial_write('1'); break; //!< M1 is ignored and not supported.
296  break;
297  }
298  }
299 
300  report_util_gcode_modes_M();
301  switch (gc_state.modal.spindle) {
302  case SPINDLE_ENABLE_CW : serial_write('3'); break;
303  case SPINDLE_ENABLE_CCW : serial_write('4'); break;
304  case SPINDLE_DISABLE : serial_write('5'); break;
305  }
306 
307  report_util_gcode_modes_M();
308  if (gc_state.modal.coolant) {
311  } else { serial_write('9'); }
312 
313  printPgmString(PSTR(" T"));
315 
316  printPgmString(PSTR(" F"));
318 
319  printPgmString(PSTR(" S"));
321 
322  report_util_feedback_line_feed();
323 }
325 void report_startup_line(uint8_t n, char *line)
326 {
327  printPgmString(PSTR("$N"));
329  serial_write('=');
330  printString(line);
331  report_util_line_feed();
332 }
333 
334 void report_execute_startup_message(char *line, uint8_t status_code)
335 {
336  serial_write('>');
337  printString(line);
338  serial_write(':');
339  report_status_message(status_code);
340 }
342 void report_build_info(char *line)
343 {
344  printPgmString(PSTR("[VER:" GRBL_VERSION "." GRBL_VERSION_BUILD ":"));
345  printString(line);
346  report_util_feedback_line_feed();
347  printPgmString(PSTR("[OPT:"));
348  serial_write('V');
349  serial_write('N');
350  serial_write('M');
351  #ifdef COREXY
352  serial_write('C');
353  #endif
354  #ifdef PARKING_ENABLE
355  serial_write('P');
356  #endif
357  #ifdef HOMING_FORCE_SET_ORIGIN
358  serial_write('Z');
359  #endif
360  #ifdef HOMING_SINGLE_AXIS_COMMANDS
361  serial_write('H');
362  #endif
363  #ifdef LIMITS_TWO_SWITCHES_ON_AXES
364  serial_write('L');
365  #endif
366  #ifdef ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES
367  serial_write('A');
368  #endif
369  #ifndef ENABLE_RESTORE_EEPROM_WIPE_ALL
370  serial_write('*');
372  #endif
373  #ifndef ENABLE_RESTORE_EEPROM_DEFAULT_SETTINGS
374  serial_write('$');
376  #endif
377  #ifndef ENABLE_RESTORE_EEPROM_CLEAR_PARAMETERS
378  serial_write('#');
380  #endif
381  #ifndef ENABLE_BUILD_INFO_WRITE_COMMAND
382  serial_write('I');
384  #endif
385  #ifndef FORCE_BUFFER_SYNC_DURING_EEPROM_WRITE
386  serial_write('E');
388  #endif
389  #ifndef FORCE_BUFFER_SYNC_DURING_WCO_CHANGE
390  serial_write('W');
392  #endif
393 //
395 // These will likely have a comma delimiter to separate them.
396 
397  report_util_feedback_line_feed();
398 }
399 
401 // and has been sent into protocol_execute_line() routine to be executed by Grbl.
403 {
404  printPgmString(PSTR("[echo: ")); printString(line);
405  report_util_feedback_line_feed();
406 }
407 
408 
409 // Prints real-time data. This function grabs a real-time snapshot of the stepper subprogram
410 // and the actual location of the CNC machine. Users may change the following function to their
411 // specific needs, but the desired real-time data report must be as short as possible. This is
412 // requires as it minimizes the computational overhead and allows grbl to keep running smoothly,
413 // especially during g-code programs with fast, short line segments and high frequency reports (5-20Hz).
415 {
416  uint8_t idx;
417  int32_t current_position[N_AXIS];
418  memcpy(current_position,sys_position,sizeof(sys_position));
419  float print_position[N_AXIS];
420  system_convert_array_steps_to_mpos(print_position,current_position);
421 
422 // Report current machine state and sub-states
423  serial_write('<');
424  switch (sys.state) {
425  case STATE_IDLE: printPgmString(PSTR("Idle")); break;
426  case STATE_CYCLE: printPgmString(PSTR("Run")); break;
427  case STATE_HOLD:
428  if (!(sys.suspend & SUSPEND_JOG_CANCEL)) {
429  printPgmString(PSTR("Hold:"));
431  else { serial_write('1'); }
432  break;
433  }
434  case STATE_JOG: printPgmString(PSTR("Jog")); break;
435  case STATE_HOMING: printPgmString(PSTR("Home")); break;
436  case STATE_ALARM: printPgmString(PSTR("Alarm")); break;
437  case STATE_CHECK_MODE: printPgmString(PSTR("Check")); break;
438  case STATE_SAFETY_DOOR:
439  printPgmString(PSTR("Door:"));
441  serial_write('3');
442  } else {
445  serial_write('1');
446  } else {
447  serial_write('0');
448  }
449  } else {
450  serial_write('2');
451  }
452  }
453  break;
454  case STATE_SLEEP: printPgmString(PSTR("Sleep")); break;
455  }
456 
457  float wco[N_AXIS];
459  (sys.report_wco_counter == 0) ) {
460  for (idx=0; idx< N_AXIS; idx++) {
461 // Apply work coordinate offsets and tool length offset to current position.
462  wco[idx] = gc_state.coord_system[idx]+gc_state.coord_offset[idx];
463  if (idx == TOOL_LENGTH_OFFSET_AXIS) { wco[idx] += gc_state.tool_length_offset; }
465  print_position[idx] -= wco[idx];
466  }
467  }
468  }
469 
470 // Report machine position
472  printPgmString(PSTR("|MPos:"));
473  } else {
474  printPgmString(PSTR("|WPos:"));
475  }
476  report_util_axis_values(print_position);
477 
478 // Returns planner and serial read buffer states.
479  #ifdef REPORT_FIELD_BUFFER_STATE
481  printPgmString(PSTR("|Bf:"));
483  serial_write(',');
485  }
486  #endif
487 
488  #ifdef REPORT_FIELD_LINE_NUMBERS
489 // Report current line number
490  plan_block_t * cur_block = plan_get_current_block();
491  if (cur_block != NULL) {
492  uint32_t ln = cur_block->line_number;
493  if (ln > 0) {
494  printPgmString(PSTR("|Ln:"));
495  printInteger(ln);
496  }
497  }
498  #endif
499 
500 // Report realtime feed speed
501  #ifdef REPORT_FIELD_CURRENT_FEED_SPEED
502  printPgmString(PSTR("|FS:"));
504  serial_write(',');
506  #endif
507 
508  #ifdef REPORT_FIELD_PIN_STATE
509  uint8_t lim_pin_state = limits_get_state();
510  uint8_t ctrl_pin_state = system_control_get_state();
511  uint8_t prb_pin_state = probe_get_state();
512  if (lim_pin_state | ctrl_pin_state | prb_pin_state) {
513  printPgmString(PSTR("|Pn:"));
514  if (prb_pin_state) { serial_write('P'); }
515  if (lim_pin_state) {
516  if (bit_istrue(lim_pin_state,bit(X_AXIS))) { serial_write('X'); }
517  if (bit_istrue(lim_pin_state,bit(Y_AXIS))) { serial_write('Y'); }
518  if (bit_istrue(lim_pin_state,bit(Z_AXIS))) { serial_write('Z'); }
519  }
520  if (ctrl_pin_state) {
521  #ifdef ENABLE_SAFETY_DOOR_INPUT_PIN
522  if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_SAFETY_DOOR)) { serial_write('D'); }
523  #endif
524  if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_RESET)) { serial_write('R'); }
525  if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_FEED_HOLD)) { serial_write('H'); }
526  if (bit_istrue(ctrl_pin_state,CONTROL_PIN_INDEX_CYCLE_START)) { serial_write('S'); }
527  }
528  }
529  #endif
530 
531  #ifdef REPORT_FIELD_WORK_COORD_OFFSET
533  else {
537  if (sys.report_ovr_counter == 0) { sys.report_ovr_counter = 1; }
538  printPgmString(PSTR("|WCO:"));
539  report_util_axis_values(wco);
540  }
541  #endif
542 
543  #ifdef REPORT_FIELD_OVERRIDES
545  else {
549  printPgmString(PSTR("|Ov:"));
551  serial_write(',');
553  serial_write(',');
555 
556  uint8_t sp_state = spindle_get_state();
557  uint8_t cl_state = coolant_get_state();
558  if (sp_state || cl_state) {
559  printPgmString(PSTR("|A:"));
560  if (sp_state) {
561  if (sp_state == SPINDLE_STATE_CW) { serial_write('S'); }
562  else { serial_write('C'); }
563  }
564  if (cl_state & COOLANT_STATE_FLOOD) { serial_write('F'); }
565  if (cl_state & COOLANT_STATE_MIST) { serial_write('M'); }
566  }
567  }
568  #endif
569 
570  serial_write('>');
571  report_util_line_feed();
572 }
573 
574 
575 #ifdef DEBUG
576  void report_realtime_debug()
577  {
578 
579  }
580 #endif
#define BITFLAG_INVERT_ST_ENABLE
Definition: settings.h:37
uint8_t homing_dir_mask
Definition: settings.h:94
plan_block_t * plan_get_current_block()
Returns address of first planner block, if available. Called by various main program functions...
Definition: planner.c:231
void report_init_message()
Welcome message.
Definition: report.c:166
int32_t line_number
Block line number for real-time reporting. Copied from pl_line_data.
Definition: planner.h:56
#define N_AXIS
Axis array index values. Must start with 0 and be continuous.
Definition: nuts_bolts.h:30
void report_grbl_help()
Grbl help message.
Definition: report.c:171
uint8_t probe_get_state()
Returns the probe pin state. Triggered = true. Called by gcode parser and probe state monitor...
Definition: probe.c:49
void report_grbl_settings()
Grbl global settings print out.
Definition: report.c:178
#define STATE_HOLD
Active feed hold.
Definition: system.h:77
#define Y_AXIS
Definition: nuts_bolts.h:32
#define SPINDLE_ENABLE_CCW
NOTE: Uses planner condition bit flag)
Definition: gcode.h:108
void system_convert_array_steps_to_mpos(float *position, int32_t *steps)
Updates a machine 'position' array based on the 'step' array sent.
Definition: system.c:295
uint8_t spindle_speed_ovr
Spindle speed value in percent.
Definition: system.h:121
#define MESSAGE_SLEEP_MODE
Definition: report.h:81
#define SUSPEND_SAFETY_DOOR_AJAR
Tracks safety door state for resuming.
Definition: system.h:88
#define PROGRAM_FLOW_PAUSED
M0.
Definition: gcode.h:89
float acceleration[N_AXIS]
Definition: settings.h:77
uint8_t plane_select
NOTE: Don't track. Only default supported.
Definition: gcode.h:169
void report_status_message(uint8_t status_code)
Handles the primary confirmation protocol response for streaming interfaces and human-feedback.
Definition: report.c:110
uint8_t settings_read_coord_data(uint8_t coord_select, float *coord_data)
Read selected coordinate data from EEPROM. Updates pointed coord_data value.
Definition: settings.c:160
#define BITFLAG_RT_STATUS_POSITION_TYPE
Define status reporting boolean enable bit flags in settings.status_report_mask.
Definition: settings.h:44
#define MESSAGE_DISABLED
Definition: report.h:75
#define CONTROL_PIN_INDEX_FEED_HOLD
Definition: system.h:101
void report_alarm_message(uint8_t alarm_code)
Prints alarm messages.
Definition: report.c:122
#define BITFLAG_RT_STATUS_BUFFER_STATE
Definition: settings.h:45
float tool_length_offset
Tracks tool length offset value when enabled.
Definition: gcode.h:209
void report_realtime_status()
Prints realtime status report.
Definition: report.c:414
#define SUSPEND_INITIATE_RESTORE
(Safety door only) Flag to initiate resume procedures from a cycle start.
Definition: system.h:86
gc_modal_t modal
Definition: gcode.h:196
float homing_feed_rate
Definition: settings.h:95
#define REPORT_OVR_REFRESH_BUSY_COUNT
Some status report data isn't necessary for realtime, only intermittently, because the values don't...
Definition: config.h:253
float rpm_max
Definition: settings.h:89
float homing_seek_rate
Definition: settings.h:96
void report_ngc_parameters()
Prints Grbl NGC parameters (coordinate offsets, probing)
Definition: report.c:234
uint8_t suspend
System suspend bitflag variable that manages holds, cancels, and safety door.
Definition: system.h:114
#define MESSAGE_PROGRAM_END
Definition: report.h:78
void report_feedback_message(uint8_t message_code)
Prints feedback messages. This serves as a centralized method to provide additional.
Definition: report.c:135
#define PL_COND_FLAG_COOLANT_MIST
Definition: planner.h:40
uint8_t status_report_mask
Mask to indicate desired report data.
Definition: settings.h:85
uint8_t system_control_get_state()
Returns control pin state as a uint8 bitfield. Each bit indicates the input pin state, where.
Definition: system.c:39
float arc_tolerance
Definition: settings.h:87
#define MESSAGE_ALARM_LOCK
Definition: report.h:72
#define BITFLAG_SOFT_LIMIT_ENABLE
Definition: settings.h:40
#define TOOL_LENGTH_OFFSET_AXIS
Sets the maximum step rate allowed to be written as a Grbl setting. This option enables an error...
Definition: config.h:299
#define REPORT_WCO_REFRESH_IDLE_COUNT
(2-255) Must be less than or equal to the busy count
Definition: config.h:256
float st_get_realtime_rate()
Called by realtime status reporting to fetch the current speed being executed. This value...
Definition: stepper.c:1001
uint8_t state
Tracks the current system state of Grbl.
Definition: system.h:112
#define MOTION_MODE_PROBE_TOWARD
G38.2 (Do not alter value)
Definition: gcode.h:73
#define PROGRAM_FLOW_COMPLETED_M2
NOTE: Not supported, but valid and ignored.
Definition: gcode.h:92
float feed_rate
Millimeters/min.
Definition: gcode.h:199
#define MESSAGE_RESTORE_DEFAULTS
Definition: report.h:79
#define AXIS_SETTINGS_START_VAL
Definition: settings.h:69
uint8_t spindle_get_state()
Returns current spindle output state. Overrides may alter it from programmed states.
#define PROGRAM_FLOW_COMPLETED_M30
M30 (Do not alter value)
Definition: gcode.h:93
uint8_t distance
{G90,G91}
Definition: gcode.h:166
#define BITFLAG_LASER_MODE
Definition: settings.h:36
#define SUSPEND_RETRACT_COMPLETE
(Safety door only) Indicates retraction and de-energizing is complete.
Definition: system.h:85
#define MESSAGE_ENABLED
Definition: report.h:74
uint8_t f_override
Feed rate override value in percent.
Definition: system.h:119
#define COOLANT_STATE_MIST
#define BITFLAG_HOMING_ENABLE
Definition: settings.h:39
#define GRBL_VERSION_BUILD
Definition: grbl.h:25
#define REPORT_WCO_REFRESH_BUSY_COUNT
(2-255)
Definition: config.h:255
#define MESSAGE_CHECK_LIMITS
Definition: report.h:77
#define X_AXIS
Axis indexing value.
Definition: nuts_bolts.h:31
uint8_t report_wco_counter
Tracks when to add work coordinate offset data to status reports.
Definition: system.h:124
#define SPINDLE_DISABLE
Modal Group M7: Spindle control.
Definition: gcode.h:105
#define bit(n)
Bit field and masking macros.
Definition: nuts_bolts.h:57
#define AXIS_N_SETTINGS
Define Grbl axis settings numbering scheme. Starts at START_VAL, every INCREMENT, over N_SETTINGS...
Definition: settings.h:68
uint8_t feed_rate
{G93,G94}
Definition: gcode.h:164
float junction_deviation
Definition: settings.h:86
void serial_write(uint8_t data)
Writes one byte to the TX serial buffer. Called by main program.
Definition: serial.c:84
#define STATE_SLEEP
Sleep state.
Definition: system.h:80
#define Z_AXIS
Definition: nuts_bolts.h:33
#define GRBL_VERSION
Grbl versioning system.
Definition: grbl.h:24
void report_startup_line(uint8_t n, char *line)
Prints specified startup line.
Definition: report.c:325
#define STATE_CYCLE
Cycle is running or motions are being executed.
Definition: system.h:76
#define CONTROL_PIN_INDEX_CYCLE_START
Definition: system.h:102
void report_build_info(char *line)
Prints build info line.
Definition: report.c:342
#define SPINDLE_STATE_CW
uint8_t flags
Contains default boolean settings.
Definition: settings.h:92
uint8_t coord_select
{G54,G55,G56,G57,G58,G59}
Definition: gcode.h:173
#define STATE_CHECK_MODE
G-code check mode. Locks out planner and motion only.
Definition: system.h:74
#define PL_COND_FLAG_COOLANT_FLOOD
Definition: planner.h:39
void report_probe_parameters()
Prints current probe parameters. Upon a probe command, these parameters are updated upon a...
Definition: report.c:221
void report_gcode_modes()
Print current gcode parser mode state.
Definition: report.c:263
uint8_t probe_succeeded
Tracks if last probing cycle was successful.
Definition: system.h:117
uint8_t coolant_get_state()
Returns current coolant output state. Overrides may alter it from programmed state.
uint8_t step_invert_mask
Definition: settings.h:82
#define MESSAGE_ALARM_UNLOCK
Definition: report.h:73
#define STATE_ALARM
In alarm state. Locks out all g-code processes. Allows settings access.
Definition: system.h:73
#define CONTROL_PIN_INDEX_RESET
Definition: system.h:100
#define N_DECIMAL_SETTINGVALUE
Decimals for floating point setting values.
Definition: config.h:138
void report_echo_line_received(char *line)
Prints the character string line Grbl has received from the user, which has been pre-parsed,.
Definition: report.c:402
system_t sys
Declare system global variable structure.
Definition: main.c:25
uint16_t homing_debounce_delay
Definition: settings.h:97
int32_t sys_position[N_AXIS]
NOTE: These position variables may need to be declared as volatiles, if problems arise.
Definition: system.h:130
uint8_t report_ovr_counter
Tracks when to add override data to status reports.
Definition: system.h:123
uint8_t dir_invert_mask
Definition: settings.h:83
#define MESSAGE_SAFETY_DOOR_AJAR
Definition: report.h:76
uint8_t coolant
{M7,M8,M9}
Definition: gcode.h:177
#define N_DECIMAL_RPMVALUE
RPM value in rotations per min.
Definition: config.h:139
float steps_per_mm[N_AXIS]
Definition: settings.h:75
#define SPINDLE_ENABLE_CW
M3 (.
Definition: gcode.h:106
#define bit_isfalse(x, mask)
Definition: nuts_bolts.h:61
float homing_pulloff
Definition: settings.h:98
float max_travel[N_AXIS]
Definition: settings.h:78
uint8_t plan_get_block_buffer_available()
Returns the number of available blocks are in the planner buffer.
Definition: planner.c:492
#define BITFLAG_REPORT_INCHES
NOTE: Check settings_reset() when moving to next version.
Definition: settings.h:35
#define CONTROL_PIN_INDEX_SAFETY_DOOR
Definition: system.h:99
float rpm_min
Definition: settings.h:90
#define BITFLAG_HARD_LIMIT_ENABLE
Definition: settings.h:38
float max_rate[N_AXIS]
Definition: settings.h:76
uint8_t spindle
{M3,M4,M5}
Definition: gcode.h:178
uint8_t serial_get_rx_buffer_available()
Returns the number of bytes available in the RX serial buffer.
Definition: serial.c:36
memcpy(block_coord_system, gc_state.coord_system, sizeof(gc_state.coord_system))
uint8_t r_override
Rapids override value in percent.
Definition: system.h:120
settings_t settings
Definition: settings.c:24
#define MESSAGE_CRITICAL_EVENT
Define Grbl feedback message codes. Valid values (0-255).
Definition: report.h:71
uint8_t pulse_microseconds
Definition: settings.h:81
void report_execute_startup_message(char *line, uint8_t status_code)
Definition: report.c:334
#define MESSAGE_SPINDLE_RESTORE
Definition: report.h:80
void report_util_setting_prefix(uint8_t n)
Internal report utilities to reduce flash with repetitive tasks turned into functions.
Definition: report.c:32
float spindle_speed
Definition: system.h:125
float coord_system[N_AXIS]
Current work coordinate system (G54+). Stores offset from absolute machine.
Definition: gcode.h:205
float spindle_speed
RPM.
Definition: gcode.h:198
uint8_t program_flow
NOTE: Don't track. Only default supported.
Definition: gcode.h:176
#define COOLANT_STATE_FLOOD
uint8_t units
{G20,G21}
Definition: gcode.h:165
uint8_t tool
Tracks tool number. NOT USED.
Definition: gcode.h:200
#define STATE_JOG
Jogging mode.
Definition: system.h:78
uint8_t motion
{G0,G1,G2,G3,G38.2,G80}
Definition: gcode.h:163
#define STATE_HOMING
Performing homing cycle.
Definition: system.h:75
int32_t sys_probe_position[N_AXIS]
Last probe position in machine coordinates and steps.
Definition: system.h:131
float coord_offset[N_AXIS]
Retains the G92 coordinate offset (work coordinates) relative to.
Definition: gcode.h:207
#define BITFLAG_INVERT_LIMIT_PINS
Definition: settings.h:41
#define AXIS_SETTINGS_INCREMENT
NOTE: Reserving settings values >= 100 for axis settings. Up to 255.
Definition: settings.h:71
#define SUSPEND_HOLD_COMPLETE
Indicates initial feed hold is complete.
Definition: system.h:83
#define SUSPEND_JOG_CANCEL
Indicates a jog cancel in process and to reset buffers when complete.
Definition: system.h:90
#define STATUS_SETTING_READ_FAIL
Definition: report.h:30
This struct stores a linear movement of a g-code block motion with its critical "nominal" values...
Definition: planner.h:46
void delay_ms(uint16_t ms)
Delays variable defined milliseconds. Compiler compatibility fix for _delay_ms(),.
Definition: nuts_bolts.c:129
parser_state_t gc_state
Declare gc extern struct.
Definition: gcode.c:35
#define REPORT_OVR_REFRESH_IDLE_COUNT
(1-255) Must be less than or equal to the busy count
Definition: config.h:254
#define STATUS_OK
Define Grbl status codes. Valid values (0-255)
Definition: report.h:23
#define SETTING_INDEX_NCOORD
Total number of system stored (from index 0)
Definition: settings.h:61
uint8_t limits_get_state()
Returns limit state as a bit-wise uint8 variable. Each bit indicates an axis limit, where.
Definition: limits.c:66
uint8_t stepper_idle_lock_time
If max value 255, steppers do not disable.
Definition: settings.h:84
#define STATE_IDLE
Define system state bit map. The state variable primarily tracks the individual functions.
Definition: system.h:72
#define bit_istrue(x, mask)
Definition: nuts_bolts.h:60
#define BITFLAG_INVERT_PROBE_PIN
Definition: settings.h:42
#define STATE_SAFETY_DOOR
Safety door is ajar. Feed holds and de-energizes system.
Definition: system.h:79