Skip to content
Commits on Feb 11, 2015
  1. @chamnit

    File re-organization. New Makefile.

    chamnit committed
    - Re-organized source code files into a ‘grbl’ directory to lessen one
    step in compiling Grbl through the Arduino IDE.
    - Added an ‘examples’ directory with an upload .INO sketch to further
    simplify compiling and uploading Grbl via the Arduino IDE.
    - Updated the Makefile with regard to the source code no longer being
    in the root directory. All files generated by compiling is placed in a
    separate ‘build’ directory to keep things tidy. The makefile should
    operate in the same way as it did before.
Commits on Feb 10, 2015
  1. @chamnit

    Bug fix for certain motions. Re-org of includes.

    chamnit committed
    - Critical bug fix for diagonal motions that continue on the same
    direction or return in the exact opposite direction. This issue could
    cause Grbl to crash intermittently due to a numerical round-off error.
    Grbl versions prior to v0.9g shouldn’t have this issue.
    - Reorganized all of the includes used by Grbl. Centralized it into a
    single “grbl.h” include. This will help simplify the compiling and
    uploading process through the Arduino IDE.
    - Added an example .INO file for users to simply open and run when
    compiling and uploading through the IDE. More to come later.
Commits on Jan 15, 2015
  1. @chamnit

    Lot of refactoring for the future. CoreXY support.

    chamnit committed
    - Rudimentary CoreXY kinematics support. Didn’t test, but homing and
    feed holds should work. See config.h. Please report successes and
    issues as we find bugs.
    - G40 (disable cutter comp) is now “supported”. Meaning that Grbl will
    no longer issue an error when typically sent in g-code program header.
    - Refactored coolant and spindle state setting into separate functions
    for future features.
    - Configuration option for fixing homing behavior when there are two
    limit switches on the same axis sharing an input pin.
    - Created a new “grbl.h” that will eventually be used as the main
    include file for Grbl. Also will help simply uploading through the
    Arduino IDE
    - Separated out the alarms execution flags from the realtime (used be
    called runtime) execution flag variable. Now reports exactly what
    caused the alarm. Expandable for new alarms later on.
    - Refactored the homing cycle to support CoreXY.
    - Applied @EliteEng updates to Mega2560 support. Some pins were
    - Created a central step to position and vice versa function. Needed
    for non-traditional cartesian machines. Should make it easier later.
    - Removed the new CPU map for the Uno. No longer going to used. There
    will be only one configuration to keep things uniform.
Commits on Aug 7, 2014
  1. @chamnit

    Updated licensing

    chamnit committed
Commits on Aug 4, 2014
  1. @chamnit

    Probing cycle and view build info bug fixes.

    chamnit committed
    - Probing cycle would drop into a QUEUED state, if multiple G38.2 are
    sent. It would not honor the auto cycle start flags. To fix, the auto
    cycle start state is saved at the beginning of the probing cycle and
    restored at the end, since the feed hold it uses to stop a triggered
    probe will disable the auto start flag. For now it’s a patch, rather
    than a permanent fix.
    - protocol_buffer_synchronize() also has a failure case. Auto cycle
    start does not get executed when the system is waiting in here, so if
    it’s in a QUEUED state already, it won’t resume. Patched here, but not
    fully resolved.
    - Fixed a problem with the “view build info” command. The EEPROM write
    would do weird things and corrupt the EEPROM. Not sure exactly what
    caused it, but it’s likely a compiler problem with an improperly
    defined EEPROM address. It didn’t have enough room to store a full
    string. To fix, the build info EEPROM range was increased and the max
    number of STARTUP_BLOCKS was reduced to 2 from 3.
    - Lastly, when a $I view build info is used for the first time, it
    would normally show an EEPROM read error, since it wasn’t cleared or
    wasn’t therein the first place. It will now not show that error. A
    patch rather than a permanent fix again.
Commits on Jul 26, 2014
  1. @chamnit

    Settings refactoring. Bug fixes. Misc new features.

    chamnit committed
    This is likely the last major change to the v0.9 code base before push
    to master. Only two minor things remain on the agenda (CoreXY support,
    force clear EEPROM, and an extremely low federate bug).
    - NEW! Grbl is now compile-able and may be flashed directly through the
    Arduino IDE. Only minor changes were required for this compatibility.
    See the Wiki to learn how to do it.
    - New status reporting mask to turn on and off what Grbl sends back.
    This includes machine coordinates, work coordinates, serial RX buffer
    usage, and planner buffer usage. Expandable to more information on user
    request, but that’s it for now.
    - Settings have been completely renumbered to allow for future new
    settings to be installed without having to constantly reshuffle and
    renumber all of the settings every time.
    - All settings masks have been standardized to mean bit 0 = X, bit 1 =
    Y, and bit 2 = Z, to reduce confusion on how they work. The invert
    masks used by the internal Grbl system were updated to accommodate this
    change as well.
    - New invert probe pin setting, which does what it sounds like.
    - Fixed a probing cycle bug, where it would freeze intermittently, and
    removed some redundant code.
    - Homing may now be set to the origin wherever the limit switches are.
    Traditionally machine coordinates should always be in negative space,
    but when limit switches on are on the opposite side, the machine
    coordinate would be set to -max_travel for the axis. Now you can always
    make it [0,0,0] via a compile-time option in config.h. (Soft limits
    routine was updated to account for this as well.)
     - Probe coordinate message immediately after a probing cycle may now
    be turned off via a compile-time option in config.h. By default the
    probing location is always reported.
    - Reduced the N_ARC_CORRECTION default value to reflect the changes in
    how circles are generated by an arc tolerance, rather than a fixed arc
    segment setting.
    - Increased the incoming line buffer limit from 70 to 80 characters.
    Had some extra memory space to invest into this.
    - Fixed a bug where tool number T was not being tracked and reported
    - Added a print free memory function for debugging purposes. Not used
    - Realtime rate report should now work during feed holds, but it hasn’t
    been tested yet.
    - Updated the streaming scripts with MIT-license and added the simple
    streaming to the main script to allow for settings to be sent.
    - Some minor code refactoring to improve flash efficiency. Reduced the
    flash by several hundred KB, which was re-invested in some of these new
Commits on Jul 7, 2014
  1. @chamnit

    Isolate atomic bit flag for execution.

    chamnit committed
    - Denoted bit_true_atomic only for sys.execute bit settings. All other
    bit_true type calls are for local variables only and don’t need atomic
    access. Still looking into other ways of setting these flags without
    requiring atomic access, but this is a patch for now.
  2. @chamnit

    Merge pull request #436 from kfoltman/dev

    chamnit committed
    Fixed atomic access to flags in sys.execute.
Commits on Jul 2, 2014
  1. @chamnit

    Minor bug fixes and updates. Line number tracking.

    chamnit committed
    - Line number tracking was getting truncated at 255, since it was using
    wrong variable type. Fixed it with a trunc().
    - Increased the max number line allowed by Grbl to 9999999 from the
    g-code standard 99999. The latter seems to be an arbitrary number, so
    we are allowing larger ones for at least one known use case scenario.
    - Created a new test directory to contain some testing g-code to proof
    the firmware. Only got started with one test case so far. More will be
    inserted as needed.
    - Some other commenting updates to clarify certain aspects of the code.
Commits on Jun 26, 2014
  1. @kfoltman

    Fixed atomic access to flags in sys.execute.

    kfoltman committed
    This seems to fix the bug that caused Grbl to hang during some operations,
    especially jogging.
Commits on May 25, 2014
  1. @chamnit

    Major g-code parser overhaul. 100%* compliant. Other related updates.

    chamnit committed
    - Completely overhauled the g-code parser. It’s now 100%* compliant. (*
    may have some bugs). Being compliant, here are some of the major
    - SMALLER and JUST AS FAST! A number of optimizations were found that
    sped things up and allowed for the more thorough error-checking to be
    installed without a speed hit. Trimmed a lot of ‘fat’ in the parser and
    still was able to make it significantly smaller than it was.
    - No default feed rate setting! Removed completely! This doesn’t exist
    in the g-code standard. So, it now errors out whenever it’s undefined
    for motions that require it (G1/2/3/38.2).
    - Any g-code parser error expunges the ENTIRE block. This means all
    information is lost and not passed on to the running state. Before some
    of the states would remain, which could have led to some problems.
    - If the g-code block passes all of the error-checks, the g-code state
    is updated and all motions are executed according to the order of
    - Changes in spindle speed, when already running, will update the
    output pin accordingly. This fixes a bug, where it wouldn’t update the
    - Update g-code parser error reporting. Errors now return detailed
    information of what exact went wrong. The most common errors return a
    short text description. For less common errors, the parser reports
    ‘Invalid gcode ID:20’, where 20 is a error ID. A list of error code IDs
    and their descriptions will be documented for user reference elsewhere
    to save flash space.
    - Other notable changes:
    - Added a print integer routine for uint8 variables. This saved
    significant flash space by switching from a heavier universal print
    integer routine.
    - Saved some flash space with our own short hypotenuse calculation
    - Some arc computation flash and memory optimizations.
Commits on Mar 1, 2014
  1. @chamnit

    G38.2 probe feature rough draft installed. Working but needs testing.

    chamnit committed
    - G38.2 straight probe now supported. Rough draft. May be tweaked more
    as testing ramps up.
    - G38.2 requires at least one axis word. Multiple axis words work too.
    When commanded, the probe cycle will move at the last ‘F’ feed rate
    specified in a straight line.
    - During a probe cycle: If the probe pin goes low (normal high), Grbl
    will record that immediate position and engage a feed hold. Meaning
    that the CNC machine will move a little past the probe switch point, so
    keep federates low to stop sooner. Once stopped, Grbl will issue a move
    to go back to the recorded probe trigger point.
    - During a probe cycle: If the probe switch does not engage by the time
    the machine has traveled to its target coordinates, Grbl will issue an
    ALARM and the user will be forced to reset Grbl. (Currently G38.3 probe
    without error isn’t supported, but would be easy to implement later.)
    - After a successful probe, Grbl will send a feedback message
    containing the recorded probe coordinates in the machine coordinate
    system. This is as the g-code standard on probe parameters specifies.
    - The recorded probe parameters are retained in Grbl memory and can be
    viewed with the ‘$#’ print parameters command. Upon a power-cycle, not
    a soft-reset, Grbl will re-zero these values.
    - Moved ‘$#’ command to require IDLE or ALARM mode, because it accesses
    EEPROM to fetch the coordinate system offsets.
    - Updated the Grbl version to v0.9d.
    - The probe cycle is subject to change upon testing or user-feedback.
Commits on Feb 15, 2014
  1. @chamnit

    Homing and feed hold bug fixes.

    chamnit committed
    WARNING: Bugs may still exist. This branch is a work in progress and
    will be pushed to the edge branch when at beta stability. Use at your
    own risk.
    - Homing freezing issue fixed. Had to do with the cycle stop flag being
    set incorrectly after the homing cycles and before the pull-off
    maneuver. Now resets the stepper motors before this can happen.
    - Fixed an issue with a rare feed hold failure. Had to do with feed
    hold ending exactly at the end of a block. The runtime protocol now
    sets the QUEUED and IDLE states appropriately when this occurs. Still
    need to clean this code up however, as it’s patched rather than written
    - Updated version build via $I command.
    - Forgot to comment on a new feature for the last commit. Since steps
    are integers and millimeters traveled are floats, the old step segment
    generator ignored the step fraction differences in generating the
    segment velocities. Didn’t see like it would be much of a big deal, but
    there were instances that this would be a problem, especially for very
    slow feed rates. The stepper algorithm now micro-adjusts the segment
    velocities based on the step fractions not executed from the previous
    segment. This ensures that Grbl generates the velocity profiles EXACTLY
    and noticeably improves overall acceleration performance.
Commits on Feb 9, 2014
  1. @chamnit

    Refactoring and lots of bug fixes. Updated homing cycle.

    chamnit committed
    WARNING: There are still some bugs to be worked out. Please use caution
    if you test this firmware.
    - Feed holds work much better, but there are still some failure
    conditions that need to be worked out. This is the being worked on
    currently and a fix is planned to be pushed next.
    - Homing cycle refactoring: Slight adjustment of the homing cycle to
    allow for limit pins to be shared by different axes, as long as the
    shared limit pins are not homed on the same cycle. Also, removed the
    LOCATE_CYCLE portion of the homing cycle configuration. It was
    - Limit pin sharing: (See above). To clear up one or two limit pins for
    other IO, limit pins can now be shared. For example, the Z-limit can be
    shared with either X or Y limit pins, because it’s on a separate homing
    cycle. Hard limit will still work exactly as before.
    - Spindle pin output fixed. The pins weren’t getting initialized
    - Fixed a cycle issue where streaming was working almost like a single
    block mode. This was caused by a problem with the spindle_run() and
    coolant_run() commands and issuing an unintended planner buffer sync.
    - Refactored the cycle_start, feed_hold, and other runtime routines
    into the runtime command module, where they should be handled here
    only. These were redundant.
    - Moved some function calls around into more appropriate source code
    - Fixed the reporting of spindle state.
Commits on Jan 11, 2014
  1. @chamnit

    Lots of re-organization and cleaning-up. Some bug fixes.

    chamnit committed
    - Added a new source and header file called system. These files contain
    the system commands and variables, as well as all of the system headers
    and standard libraries Grbl uses. Centralizing some of the code.
    - Re-organized the include headers throughout the source code.
    - ENABLE_M7 define was missing from config.h. Now there.
    - SPINDLE_MAX_RPM and SPINDLE_MIN_RPM now defined in config.h. No
    uncommenting to prevent user issues. Minimum spindle RPM now provides
    the lower, near 0V, scale adjustment, i.e. some spindles can go really
    slow so why use up our 256 voltage bins for them?
    - Remove some persistent variables from coolant and spindle control.
    They were redundant.
    - Removed a VARIABLE_SPINDLE define in cpu_map.h that shouldn’t have
    been there.
    - Changed the DEFAULT_ARC_TOLERANCE to 0.002mm to improve arc tracing.
    Before we had issues with performance, no longer.
    - Fixed a bug with the hard limits and the software debounce feature
    enabled. The invert limit pin setting wasn’t honored.
    - Fixed a bug with the homing direction mask. Now is like it used to
    be. At least for now.
    - Re-organized main.c to serve as only as the reset/initialization
    routine. Makes things a little bit clearer in terms of execution
    - Re-organized protocol.c as the overall master control unit for
    execution procedures. Not quite there yet, but starting to make a
    little more sense in how things are run.
    - Removed updating of old settings records. So many new settings have
    been added that it’s not worth adding the code to migrate old user
    - Tweaked spindle_control.c a bit and made it more clear and consistent
    with other parts of Grbl.
    - Tweaked the stepper disable bit code in stepper.c. Requires less
    flash memory.
Commits on Jan 5, 2014
  1. @chamnit
  2. @chamnit

    New build info feature. (per @Analogreality request)

    chamnit committed
    - New build info feature. Hidden command ‘$I’ will print the build info
    for your Grbl firmware. Users may also write an identifying message
    within it via ‘$I=‘ with up to 32 characters. (no more, or else it will
    - Adjusted the max number of startup lines to 3. Majority of people
    will only need one.
    - Fixed a compile error with spindle_control.c. A rogue #endif was
    causing problems.
Commits on Dec 31, 2013
  1. @chamnit

    Minor bug fixes: Homing travel calculations. Cycle resuming after spi…

    chamnit committed
    …ndle and dwell commands.
    - Homing travel calculations fixed. It was computing the min travel
    rather than max.
    - Auto-start disable and pausing after spindle or dwell commands.
    Related to plan_synchronize() function call. Now fixed, but still need
    to work on the system state.
    - Pushed a fix to make this branch more Arduino IDE compatible. Removed
    extern call in nuts_bolts.c
    - Updated the stepper configuration option of enabling or disabling the
    new Adaptive Multi-Axis Step Smoothing Algorithm. Now works either way.
    - Updated some copyright info.
  2. @chamnit

    Incomplete push but working. Lots more stuff. More to come.

    chamnit committed
    - NEW! An active multi-axis step smoothing algorithm that automatically
    adjusts dependent on step frequency. This solves the long standing
    issue to aliasing when moving with multiple axes. Similar in scheme to
    Smoothieware, but more advanced in ensuring a more consistent CPU
    overhead throughout all frequencies while maintaining step exactness.
    - Switched from Timer2 to Timer0 for the Step Port Reset Interrupt.
    Mainly to free up hardware PWM pins.
    - Seperated the direction and step pin assignments, so we can now move
    them to seperate ports. This means that we can more easily support 4+
    axes in the future.
    - Added a setting for inverting the limit pins, as so many users have
    request. Better late than never.
    - Bug fix related to EEPROM calls when in cycle. The EEPROM would kill
    the stepper motion. Now protocol mandates that the system be either in
    IDLE or ALARM to access or change any settings.
    - Bug fix related to resuming the cycle after a spindle or dwell
    command if auto start has been disabled. This fix is somewhat temporary
    or more of a patch. Doesn’t work with a straight call-response
    streaming protocol, but works fine with serial buffer pre-filling
    streaming that most clients use.
    - Renamed the pin_map.h to cpu_map.h to more accurately describe what
    the file is.
    - Pushed an auto start bug fix upon re-initialization.
    - Much more polishing to do!
Commits on Dec 30, 2013
  1. @chamnit

    Merge branch 'dev' of into dev

    chamnit committed
Commits on Oct 30, 2013
  1. @chamnit

    Merge branch 'dev_2' into dev

    chamnit committed
Commits on Feb 26, 2013
  1. @rustyoz

    integrating soft limits

    rustyoz committed
Commits on Nov 26, 2012
  1. @chamnit
Commits on Nov 16, 2012
  1. @chamnit

    Added Grbl state in status report. Removed switch support.

    chamnit committed
    - Added Grbl state (Idle, Running, Queued, Hold, etc) to the real-time
    status reporting feature as feedback to the user of what Grbl is doing.
    Updated the help message to reflect this change.
    - Removed switches (dry run, block delete, single block mode). To keep
    Grbl simple and not muddled up from things that can easily be taken
    care of by an external interface, these were removed.
    - Check g-code mode was retained, but the command was moved to '$C'
    from '$S0'.
Commits on Nov 15, 2012
  1. @chamnit

    Re-factored system states and alarm management. Serial baud support g…

    chamnit committed
    …reater than 57600.
    - Refactored system states to be more clear and concise. Alarm locks
    processes when position is unknown to indicate to user something has
    gone wrong.
    - Changed mc_alarm to mc_reset, which now manages the system reset
    function. Centralizes it.
    - Renamed '$X' kill homing lock to kill alarm lock.
    - Created an alarm error reporting method to clear up what is an alarm:
    message vs a status error: message. For GUIs mainly. Alarm codes are
    negative. Status codes are positive.
    - Serial baud support upto 115200. Previous baudrate calc was unstable
    for 57600 and above.
    - Alarm state locks out all g-code blocks, including startup scripts,
    but allows user to access settings and internal commands. For example,
    to disable hard limits, if they are problematic.
    - Hard limits do not respond in an alarm state.
    - Fixed a problem with the hard limit interrupt during the homing
    cycle. The interrupt register is still active during the homing cycle
    and still signal the interrupt to trigger when re-enabled. Instead,
    just disabled the register.
    - Homing rate adjusted. All axes move at homing seek rate, regardless
    of how many axes move at the same time. This is unlike how the stepper
    module does it as a point to point rate.
    - New config.h settings to disable the homing rate adjustment and the
    force homing upon powerup.
    - Reduced the number of startup lines back down to 2 from 3. This
    discourages users from placing motion block in there, which can be very
    - Startup blocks now run only after an alarm-free reset or after a
    homing cycle. Does not run when $X kill is called. For satefy reasons
Commits on Nov 8, 2012
  1. @chamnit

    More tweaks. Removed dry run. Trimmed all messages to save flash space.

    chamnit committed
    - Removed the dry run switch. It was getting overly complicated for
    what it needed to do. In practice, single block mode and feed rate
    overrides (coming in next release) does a much better job with dry runs
    than 'dry run'.
    - Trimmed all of Grbl's messages from help, status, feedback to
    settings. Saved 0.6KB+ of flash space that could be used for v0.9
    - Removed some settings inits when set. Will depend on user to power
    cycle to get some of these to reload.
    - Fixed a bug with settings version not re-writing old settings, when
    it should. Thanks Alden!
Commits on Nov 6, 2012
  1. @chamnit

    Tweaks and bug fixes. Increase to 3 startup blocks. Remove purge/adde…

    chamnit committed
    …d unlock command
    - Increased the number of startup blocks to 3 for no good reason other
    than it doesn't increase the flash size.
    - Removed the purge buffer command and replaced with an disable homing
    lock command.
    - Homing now blocks all g-code commands (not system commands) until the
    homing cycle has been performed or the disable homing lock is sent.
    Homing is required upon startup or if Grbl loses it position. This is
    for safety reasons.
    - Cleaned up some of the Grbl states and re-organized it to be little
    more cohesive.
    - Cleaned up the feedback and status messages to not use so much flash
    space, as it's a premium now.
     - Check g-code and dry run switches how are mutually exclusive and
    can't be enabled when the other is. And automatically resets Grbl when
    - Some bug fixes and other minor tweaks.
Commits on Nov 5, 2012
  1. @chamnit

    Tweaked dry run and check g-code switches. Now resets when toggled off.

    chamnit committed
    - To make managing the code easier and to help ensure a user starts
    with a fresh reset, the functionality of check g-code and dry run has
    been changed to automatically perform a soft reset when toggled off.
    Position will not be lost, unless there is a cycle active. Feed hold
    before toggling off it needed.
    This is mainly a safety issue. If a user dry runs a program and kills
    it mid-program, and then restarts it thinking to run it as normal, the
    g-code modes that we're set may not be what they expect, and very bad
    things can happen.
    - NOTE: Grbl is at 83.5% of flash capacity. Not a lot of room left, but
    I think we can squeeze in some more!
Commits on Nov 4, 2012
  1. @chamnit

    Runtime command pinned out! Re-organized coolant pins.

    chamnit committed
    - Pinned out cycle start(A2), feed hold(A1), and reset(A0) runtime
    commands. These pins are held high with the internal pull-up resistor
    enabled. All you have to do is connect a normally-open switch to the
    pin and ground. That's it.
    - Moved the coolant control pins to A3 (and the optional mist control
    to A4).
    - Moved all of the MASK defines into the config.h file to centralize
  2. @chamnit

    Tweaks and minor bug fixes. Added purge buffer command.

    chamnit committed
    - Added a purge buffer (and lock) command. This is an advanced option
    to clear any queued blocks in the buffer in the event of system
    position being lost or homed. These queued blocks will likely not move
    correctly if not purged. In typical use, the purging command releases
    the homing axes lock in case a user need to move the axes off their
    hard limit switches, but position is not guaranteed. Homing is advised
    immediately after.
    - Created a system-wide sync current position function. Cleans up some
    of the repetitive tasks in various places in the code that do the same
    - Removed the clear all switches command '$S'. Not really needed and
    helped clean up a sync call.
    - Other minor tweaks. Readme updated slightly..
Commits on Nov 3, 2012
  1. @chamnit

    New startup script setting. New dry run, check gcode switches. New sy…

    chamnit committed
    …stem state variable. Lots of reorganizing.
    (All v0.8 features installed. Still likely buggy, but now thourough
    testing will need to start to squash them all. As soon as we're done,
    this will be pushed to master and v0.9 development will be started.
    Please report ANY issues to us so we can get this rolled out ASAP.)
    - User startup script! A user can now save one (up to 5 as compile-time
    option) block of g-code in EEPROM memory. This will be run everytime
    Grbl resets. Mainly to be used as a way to set your preferences, like
    G21, G54, etc.
    - New dry run and check g-code switches. Dry run moves ALL motions at
    rapids rate ignoring spindle, coolant, and dwell commands. For rapid
    physical proofing of your code. The check g-code switch ignores all
    motion and provides the user a way to check if there are any errors in
    their program that Grbl may not like.
    - Program restart! (sort of). Program restart is typically an advanced
    feature that allows users to restart a program mid-stream. The check
    g-code switch can perform this feature by enabling the switch at the
    start of the program, and disabling it at the desired point with some
    minimal changes.
    - New system state variable. This state variable tracks all of the
    different state processes that Grbl performs, i.e. cycle start, feed
    hold, homing, etc. This is mainly for making managing of these task
    easier and more clear.
    - Position lost state variable. Only when homing is enabled, Grbl will
    refuse to move until homing is completed and position is known. This is
    mainly for safety. Otherwise, it will let users fend for themselves.
    - Moved the default settings defines into config.h. The plan is to
    eventually create a set of config.h's for particular as-built machines
    to help users from doing it themselves.
    - Moved around misc defines into .h files. And lots of other little
Commits on Nov 2, 2012
  1. @chamnit

    Added block delete, opt stop, single block mode. New parser state and…

    chamnit committed
    … parameter feedback. Overhauled '$' command.
    NOTE: Another incremental update. Likely buggy, still a ways to go
    before everything is installed, such as startup blocks.
    - Changed the '$' command to print help. '$$' now prints Grbl settings.
    The help now instructs the user of runtime commands, switch toggling,
    homing, etc. Jogging will be added to these in v0.9.
    - Added switches: block delete, opt stop, and single block mode.
    - Now can print the g-code parser state and persistent parameters
    (coord sys) to view what Grbl has internally.
    - Made the gc struct in the g-code parser global to be able to print
    the states. Also moved coordinate system tracking from sys to gc struct.
    - Changed up the welcome flag and updated version to v0.8c.
    - Removed spindle speed from gcode parser. Not used.
Commits on Nov 1, 2012
  1. @chamnit

    New report module. 6 persistent work coordinates. New G-codes and set…

    chamnit committed
    …tings. README and minor bug updates
    (NOTE: This push is likely buggy so proceed with caution. Just
    uploading to let people know where we're going.)
    - New report.c module. Moved all feedback functions into this module to
    centralize these processes. Includes realtime status reports, status
    messages, feedback messages.
    - Official support 6 work coordinate systems (G54-G59), which are
    persistently held in EEPROM memory.
    - New g-code support: G28.1, G30.1 stores current machine position as a
    home position into EEPROM. G10 L20 Px stores current machine position
    into work coordinates without needing to explicitly send XYZ words.
    - Homing performed with '$H' command. G28/G30 no longer start the
    homing cycle. This is how it's supposed to be.
    - New settings: Stepper enable invert and n_arc correction installed.
    - Updated and changed up some limits and homing functionality. Pull-off
    travel will now move after the homing cycle regardless of hard limits
    enabled. Fixed direction of pull-off travel (went wrong way).
    - Started on designing an internal Grbl command protocol based on the
    '$' settings letter. Commands with non numeric characters after '$'
    will perform switch commands, homing cycle, jogging, printing
    paramters, etc. Much more to do here.
    - Updated README to reflect all of the new features.
Commits on Oct 22, 2012
  1. @chamnit
  2. @chamnit

    New alarm method. Re(re)organized status messages.

    chamnit committed
    - Installed a new 'alarm' method to centralize motion kills across
    alarm or reset events. Right now, this is controlled by system abort
    and hard limits. But, in the future, a g-code parser error may call
    this too as a safety feature.
    - Re(re)organized status messages to just print all errors, regardless
    from where it was called. This centralizes them into one place.
    - Misc messages method installed for any user feedback that is not a
    confirmation or error. Mainly so that there is a place to perform
    warnings and such.
    - New stuff installed and still made the flash size smaller by saving
    flash space from clearing out repeated '\r\n' pgmstrings.
    - Fixed a bug where hard limits message would print everytime a system
    abort was sent.
Something went wrong with that request. Please try again.