diff --git a/.gitignore b/.gitignore
index 8b541400..1e09f0dd 100755
--- a/.gitignore
+++ b/.gitignore
@@ -16,4 +16,5 @@ build/
bin/
*.xcodeproj/project.xcworkspace/xcuserdata/rob.xcuserdatad/UserInterfaceState.xcuserstate
.DS_Store
-TcfTransactionLog.csv
\ No newline at end of file
+TcfTransactionLog.csv
+TinyG2/TinyG2.elf
diff --git a/Extras/.gitignore b/Extras/.gitignore
deleted file mode 100644
index 02babe23..00000000
--- a/Extras/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-newlib-1.20.0/
-newlib-1.20.0.tar.gz
diff --git a/Reference/.gitignore b/Reference/.gitignore
new file mode 100644
index 00000000..4ab513ce
--- /dev/null
+++ b/Reference/.gitignore
@@ -0,0 +1 @@
+newlib*
diff --git a/Reference/Makefile b/Reference/Makefile
new file mode 100644
index 00000000..b13ee63e
--- /dev/null
+++ b/Reference/Makefile
@@ -0,0 +1,22 @@
+## In order to download and decompress the reference coded *useful* for symbolic debugging,
+## Just call "make" from this directory.
+
+# Program paths
+WGET=wget
+TAR=tar xzvf
+TOUCH=touch
+
+# Newlib locations
+NEWLIB_VERSION=1.20.0
+NEWLIB_URL=ftp://sources.redhat.com/pub/newlib/newlib-$(NEWLIB_VERSION).tar.gz
+NEWLIB_DIRECTORY=./newlib-$(NEWLIB_VERSION)/
+
+
+# Rules
+all: $(NEWLIB_DIRECTORY)
+
+$(NEWLIB_DIRECTORY): | newlib-$(NEWLIB_VERSION).tar.gz
+ $(TAR) $|
+
+newlib-$(NEWLIB_VERSION).tar.gz:
+ $(WGET) $(NEWLIB_URL)
\ No newline at end of file
diff --git a/TinyG2/TinyG2.cppproj b/TinyG2/TinyG2.cppproj
index 30b662f4..87624fc9 100755
--- a/TinyG2/TinyG2.cppproj
+++ b/TinyG2/TinyG2.cppproj
@@ -1,4 +1,4 @@
-
+
2.0
@@ -18,8 +18,7 @@
Native
true
false
-
-
+ exception_table
1
3.5.0
JTAG
@@ -30,13 +29,13 @@
000028014099
127.0.0.1
- 2144
+ 1180
False
JTAG
- 250000
+ 0
1000000
150000
false
@@ -45,6 +44,7 @@
0
0
0
+ 8500000
@@ -706,6 +706,9 @@
compile
+
+ compile
+
\ No newline at end of file
diff --git a/TinyG2/controller.cpp b/TinyG2/controller.cpp
index 7fa73148..241296c1 100755
--- a/TinyG2/controller.cpp
+++ b/TinyG2/controller.cpp
@@ -9,7 +9,7 @@
* it under the terms of the GNU General Public License, version 2 as published by the
* Free Software Foundation. You should have received a copy of the GNU General Public
* License, version 2 along with the software. If not, see .
- *
+ *
* As a special exception, you may use this file as part of a software library without
* restriction. Specifically, if other files instantiate templates or use macros or
* inline functions from this file, or you compile this file and link it with other
@@ -187,7 +187,7 @@ static status_t _command_dispatch()
// printf("printf test2 %d %f...\n", 10, 10.003);
status_t status;
-
+
strcpy(cs.in_buf, "$fb");
// read input line or return if not a completed line
diff --git a/TinyG2/main.cpp b/TinyG2/main.cpp
index 0bf048e8..145b6d70 100755
--- a/TinyG2/main.cpp
+++ b/TinyG2/main.cpp
@@ -52,7 +52,7 @@ extern void SysTick_Handler( void )
#define DEV_STDERR 0
static void _application_init(void);
-
+
//globals
status_t errcode;
@@ -60,8 +60,6 @@ status_t errcode;
void setup( void )
{
- USBDevice.attach();
-// delay(5000);
SerialUSB.begin(115200);
_application_init();
}
@@ -77,7 +75,8 @@ void loop( void )
int main( void )
{
init();
-// delay(1);
+ delay(1);
+ USBDevice.attach();
setup();
for (;;) {
diff --git a/TinyG2/stepper.cpp b/TinyG2/stepper.cpp
index 890478d1..80813b9e 100755
--- a/TinyG2/stepper.cpp
+++ b/TinyG2/stepper.cpp
@@ -426,8 +426,13 @@ void _load_move()
// sps.move_type = MOVE_TYPE_ALINE;
sps.move_type = true;
sps.timer_ticks = 100000;
- sps.timer_ticks_X_substeps = 1000;
+ sps.timer_ticks_X_substeps = 1000000;
sps.timer_period = 64000;
+
+ st.m[MOTOR_1].steps = 90000;
+ st.m[MOTOR_1].counter = -sps.timer_ticks;
+ st.timer_ticks_X_substeps = sps.timer_ticks_X_substeps;
+
/*
// handle aline loads first (most common case) NB: there are no more lines, only alines
// if (sps.move_type == MOVE_TYPE_ALINE) {
diff --git a/TinyG2/tinyg2.h b/TinyG2/tinyg2.h
index 43f5d7da..b30c4383 100755
--- a/TinyG2/tinyg2.h
+++ b/TinyG2/tinyg2.h
@@ -1,222 +1,222 @@
-/*
- * tinyg2.h - tinyg2 main header - Application GLOBALS
- * Part of TinyG2 project
- *
- * Copyright (c) 2013 Alden S. Hart Jr.
- * Copyright (c) 2013 Robert Giseburt
- *
- * This file ("the software") is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2 as published by the
- * Free Software Foundation. You should have received a copy of the GNU General Public
- * License, version 2 along with the software. If not, see .
- *
- * As a special exception, you may use this file as part of a software library without
- * restriction. Specifically, if other files instantiate templates or use macros or
- * inline functions from this file, or you compile this file and link it with other
- * files to produce an executable, this file does not by itself cause the resulting
- * executable to be covered by the GNU General Public License. This exception does not
- * however invalidate any other reasons why the executable file might be covered by the
- * GNU General Public License.
- *
- * THE SOFTWARE IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY
- * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
- * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
- * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-/* Is this code over documented? Possibly.
- * We try to follow this (at least we are evolving to it). It's worth a read.
- * ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc
- */
-#ifndef _TINYG2_H_
-#define _TINYG2_H_
-
-// common system includes
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-#include "Arduino.h"
-
+/*
+ * tinyg2.h - tinyg2 main header - Application GLOBALS
+ * Part of TinyG2 project
+ *
+ * Copyright (c) 2013 Alden S. Hart Jr.
+ * Copyright (c) 2013 Robert Giseburt
+ *
+ * This file ("the software") is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2 as published by the
+ * Free Software Foundation. You should have received a copy of the GNU General Public
+ * License, version 2 along with the software. If not, see .
+ *
+ * As a special exception, you may use this file as part of a software library without
+ * restriction. Specifically, if other files instantiate templates or use macros or
+ * inline functions from this file, or you compile this file and link it with other
+ * files to produce an executable, this file does not by itself cause the resulting
+ * executable to be covered by the GNU General Public License. This exception does not
+ * however invalidate any other reasons why the executable file might be covered by the
+ * GNU General Public License.
+ *
+ * THE SOFTWARE IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY
+ * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+ * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+/* Is this code over documented? Possibly.
+ * We try to follow this (at least we are evolving to it). It's worth a read.
+ * ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc
+ */
+#ifndef _TINYG2_H_
+#define _TINYG2_H_
+
+// common system includes
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "Arduino.h"
+
#ifdef __cplusplus
extern "C"{
#endif // __cplusplus
-
-// NOTE: This header requires be included previously
-
-#define TINYG_FIRMWARE_BUILD 004.12 // _command_dispatch tests after uint8_t conversion
-#define TINYG_FIRMWARE_VERSION 0.01 // major version
-#define TINYG_HARDWARE_VERSION 0.01 // board revision number (Native Arduino Due)
-
-#define TINYG2_HARDWARE_VERSION_MAX TINYG2_HARDWARE_VERSION
-
-/****** DEVELOPMENT SETTINGS ******/
-
-//#define __CANNED_STARTUP // run any canned startup moves
-//#define __DISABLE_PERSISTENCE // disable EEPROM writes for faster simulation
-//#define __SUPPRESS_STARTUP_MESSAGES // what it says
-//#define __UNIT_TESTS // master enable for unit tests; uncomment modules in .h files
-//#define __DEBUG // complies debug functions found in test.c
-
-// UNIT_TESTS exist for various modules are can be enabled at the end of their .h files
-
-/****** OPERATING SETTINGS *******/
-
-void tg_setup(void);
-
-/*************************************************************************
- * Help during conversion from char to uint8_t for strings
- */
-#define strncpy(d,s,l) (uint8_t *)strncpy((char *)d, (char *)s, l)
-#define strpbrk(d,s) (uint8_t* )strpbrk((char *)d, (char *)s)
-#define strcpy(d,s) (uint8_t *)strcpy((char *)d, (char *)s)
-#define strcat(d,s) (uint8_t *)strcat((char *)d, (char *)s)
-#define strstr(d,s) (uint8_t *)strstr((char *)d, (char *)s)
-#define strchr(d,s) (uint8_t *)strchr((char *)d, (char)s)
-#define strcmp(d,s) strcmp((char *)d, (char *)s)
-#define strtod(d,s) strtod((char *)d, (char **)s)
-#define strlen(s) strlen((char *)s)
-
-//#define sprintf(a,b) sprintf(char *)a, (char *)b)
-
-/*************************************************************************
- * TinyG application-specific prototypes, defines and globals
- */
-#define MAGICNUM 0x12EF // used for memory integrity assertions
-
-Motate::pin_number indicator_led_pin_num = 13;
-static Motate::OutputPin IndicatorLed;
-
-#define AXES 6 // number of axes supported in this version
-#define MOTORS 4 // number of motors on the board
-#define COORDS 6 // number of supported coordinate systems (1-6)
-#define PWMS 2 // number of supported PWM channels
-
-// If you change COORDS you must adjust the entries in cfgArray table in config.c
-
-/* Axes, motors & PWM channels must be defines (not enums) so #ifdef can be used
- * NB: Using defines can have side effects if anythign else in the code uses A, B, X... etc.
- * The "side effect safe" min and max routines had this side effect.
- * Alternate enum is: enum tgAxes { X=0, Y, Z, A, B, C };
- */
-
-#define AXIS_X 0
-#define AXIS_Y 1
-#define AXIS_Z 2
-#define AXIS_A 3
-#define AXIS_B 4
-#define AXIS_C 5
-#define AXIS_U 6 // reserved
-#define AXIS_V 7 // reserved
-#define AXIS_W 8 // reserved
-
-#define MOTOR_1 0 // define motor numbers and array indexes
-#define MOTOR_2 1 // must be defines. enums don't work
-#define MOTOR_3 2
-#define MOTOR_4 3
-
-#define PWM_1 0
-#define PWM_2 1
-
-/* Error and status codes
- *
- * Any changes to the ranges also require changing the message strings and
- * string array in controller.c
- *
- * ritorno is a handy way to provide exception returns
- * It returns only if an error occurred. (ritorno is Italian for return)
- */
-typedef uint8_t status_t;
-extern status_t errcode;
-#define ritorno(a) if((errcode=a) != STAT_OK) { return(errcode); }
-
-// OS, communications and low-level status (must align with XIO_xxxx codes in xio.h)
-#define STAT_OK 0 // function completed OK
-#define STAT_ERROR 1 // generic error return (EPERM)
-#define STAT_EAGAIN 2 // function would block here (call again)
-#define STAT_NOOP 3 // function had no-operation
-#define STAT_COMPLETE 4 // operation is complete
-#define STAT_TERMINATE 5 // operation terminated (gracefully)
-#define STAT_RESET 6 // operation was hard reset (sig kill)
-#define STAT_EOL 7 // function returned end-of-line
-#define STAT_EOF 8 // function returned end-of-file
-#define STAT_FILE_NOT_OPEN 9
-#define STAT_FILE_SIZE_EXCEEDED 10
-#define STAT_NO_SUCH_DEVICE 11
-#define STAT_BUFFER_EMPTY 12
-#define STAT_BUFFER_FULL 13
-#define STAT_BUFFER_FULL_FATAL 14
-#define STAT_INITIALIZING 15 // initializing - not ready for use
-#define STAT_ERROR_16 16
-#define STAT_ERROR_17 17
-#define STAT_ERROR_18 18
-#define STAT_ERROR_19 19 // NOTE: XIO codes align to here
-
-// Internal errors and startup messages
-#define STAT_INTERNAL_ERROR 20 // unrecoverable internal error
-#define STAT_INTERNAL_RANGE_ERROR 21 // number range other than by user input
-#define STAT_FLOATING_POINT_ERROR 22 // number conversion error
-#define STAT_DIVIDE_BY_ZERO 23
-#define STAT_INVALID_ADDRESS 24
-#define STAT_READ_ONLY_ADDRESS 25
-#define STAT_INIT_FAIL 26
-#define STAT_SHUTDOWN 27
-#define STAT_MEMORY_CORRUPTION 28
-#define STAT_ERROR_29 29
-#define STAT_ERROR_30 30
-#define STAT_ERROR_31 31
-#define STAT_ERROR_32 32
-#define STAT_ERROR_33 33
-#define STAT_ERROR_34 34
-#define STAT_ERROR_35 35
-#define STAT_ERROR_36 36
-#define STAT_ERROR_37 37
-#define STAT_ERROR_38 38
-#define STAT_ERROR_39 39
-
-// Input errors (400's, if you will)
-#define STAT_UNRECOGNIZED_COMMAND 40 // parser didn't recognize the command
-#define STAT_EXPECTED_COMMAND_LETTER 41 // malformed line to parser
-#define STAT_BAD_NUMBER_FORMAT 42 // number format error
-#define STAT_INPUT_EXCEEDS_MAX_LENGTH 43// input string is too long
-#define STAT_INPUT_VALUE_TOO_SMALL 44 // input error: value is under minimum
-#define STAT_INPUT_VALUE_TOO_LARGE 45 // input error: value is over maximum
-#define STAT_INPUT_VALUE_RANGE_ERROR 46 // input error: value is out-of-range
-#define STAT_INPUT_VALUE_UNSUPPORTED 47 // input error: value is not supported
-#define STAT_JSON_SYNTAX_ERROR 48 // JSON input string is not well formed
-#define STAT_JSON_TOO_MANY_PAIRS 49 // JSON input string has too many JSON pairs
-#define STAT_JSON_TOO_LONG 50 // JSON output exceeds buffer size
-#define STAT_NO_BUFFER_SPACE 51 // Buffer pool is full and cannot perform this operation
-#define STAT_ERROR_52 52
-#define STAT_ERROR_53 53
-#define STAT_ERROR_54 54
-#define STAT_ERROR_55 55
-#define STAT_ERROR_56 56
-#define STAT_ERROR_57 57
-#define STAT_ERROR_58 58
-#define STAT_ERROR_59 59
-
-// Gcode and machining errors
-#define STAT_ZERO_LENGTH_MOVE 60 // move is zero length
-#define STAT_GCODE_BLOCK_SKIPPED 61 // block is too short - was skipped
-#define STAT_GCODE_INPUT_ERROR 62 // general error for gcode input
-#define STAT_GCODE_FEEDRATE_ERROR 63 // move has no feedrate
-#define STAT_GCODE_AXIS_WORD_MISSING 64 // command requires at least one axis present
-#define STAT_MODAL_GROUP_VIOLATION 65 // gcode modal group error
-#define STAT_HOMING_CYCLE_FAILED 66 // homing cycle did not complete
-#define STAT_MAX_TRAVEL_EXCEEDED 67
-#define STAT_MAX_SPINDLE_SPEED_EXCEEDED 68
-#define STAT_ARC_SPECIFICATION_ERROR 69 // arc specification error
-
+
+// NOTE: This header requires be included previously
+
+#define TINYG_FIRMWARE_BUILD 004.12 // _command_dispatch tests after uint8_t conversion
+#define TINYG_FIRMWARE_VERSION 0.01 // major version
+#define TINYG_HARDWARE_VERSION 0.01 // board revision number (Native Arduino Due)
+
+#define TINYG2_HARDWARE_VERSION_MAX TINYG2_HARDWARE_VERSION
+
+/****** DEVELOPMENT SETTINGS ******/
+
+//#define __CANNED_STARTUP // run any canned startup moves
+//#define __DISABLE_PERSISTENCE // disable EEPROM writes for faster simulation
+//#define __SUPPRESS_STARTUP_MESSAGES // what it says
+//#define __UNIT_TESTS // master enable for unit tests; uncomment modules in .h files
+//#define __DEBUG // complies debug functions found in test.c
+
+// UNIT_TESTS exist for various modules are can be enabled at the end of their .h files
+
+/****** OPERATING SETTINGS *******/
+
+void tg_setup(void);
+
+/*************************************************************************
+ * Help during conversion from char to uint8_t for strings
+ */
+#define strncpy(d,s,l) (uint8_t *)strncpy((char *)d, (char *)s, l)
+#define strpbrk(d,s) (uint8_t* )strpbrk((char *)d, (char *)s)
+#define strcpy(d,s) (uint8_t *)strcpy((char *)d, (char *)s)
+#define strcat(d,s) (uint8_t *)strcat((char *)d, (char *)s)
+#define strstr(d,s) (uint8_t *)strstr((char *)d, (char *)s)
+#define strchr(d,s) (uint8_t *)strchr((char *)d, (char)s)
+#define strcmp(d,s) strcmp((char *)d, (char *)s)
+#define strtod(d,s) strtod((char *)d, (char **)s)
+#define strlen(s) strlen((char *)s)
+
+//#define sprintf(a,b) sprintf(char *)a, (char *)b)
+
+/*************************************************************************
+ * TinyG application-specific prototypes, defines and globals
+ */
+#define MAGICNUM 0x12EF // used for memory integrity assertions
+
+Motate::pin_number indicator_led_pin_num = 13;
+static Motate::OutputPin IndicatorLed;
+
+#define AXES 6 // number of axes supported in this version
+#define MOTORS 4 // number of motors on the board
+#define COORDS 6 // number of supported coordinate systems (1-6)
+#define PWMS 2 // number of supported PWM channels
+
+// If you change COORDS you must adjust the entries in cfgArray table in config.c
+
+/* Axes, motors & PWM channels must be defines (not enums) so #ifdef can be used
+ * NB: Using defines can have side effects if anythign else in the code uses A, B, X... etc.
+ * The "side effect safe" min and max routines had this side effect.
+ * Alternate enum is: enum tgAxes { X=0, Y, Z, A, B, C };
+ */
+
+#define AXIS_X 0
+#define AXIS_Y 1
+#define AXIS_Z 2
+#define AXIS_A 3
+#define AXIS_B 4
+#define AXIS_C 5
+#define AXIS_U 6 // reserved
+#define AXIS_V 7 // reserved
+#define AXIS_W 8 // reserved
+
+#define MOTOR_1 0 // define motor numbers and array indexes
+#define MOTOR_2 1 // must be defines. enums don't work
+#define MOTOR_3 2
+#define MOTOR_4 3
+
+#define PWM_1 0
+#define PWM_2 1
+
+/* Error and status codes
+ *
+ * Any changes to the ranges also require changing the message strings and
+ * string array in controller.c
+ *
+ * ritorno is a handy way to provide exception returns
+ * It returns only if an error occurred. (ritorno is Italian for return)
+ */
+ typedef uint8_t status_t;
+extern status_t errcode;
+#define ritorno(a) if((errcode=a) != STAT_OK) { return(errcode); }
+
+// OS, communications and low-level status (must align with XIO_xxxx codes in xio.h)
+#define STAT_OK 0 // function completed OK
+#define STAT_ERROR 1 // generic error return (EPERM)
+#define STAT_EAGAIN 2 // function would block here (call again)
+#define STAT_NOOP 3 // function had no-operation
+#define STAT_COMPLETE 4 // operation is complete
+#define STAT_TERMINATE 5 // operation terminated (gracefully)
+#define STAT_RESET 6 // operation was hard reset (sig kill)
+#define STAT_EOL 7 // function returned end-of-line
+#define STAT_EOF 8 // function returned end-of-file
+#define STAT_FILE_NOT_OPEN 9
+#define STAT_FILE_SIZE_EXCEEDED 10
+#define STAT_NO_SUCH_DEVICE 11
+#define STAT_BUFFER_EMPTY 12
+#define STAT_BUFFER_FULL 13
+#define STAT_BUFFER_FULL_FATAL 14
+#define STAT_INITIALIZING 15 // initializing - not ready for use
+#define STAT_ERROR_16 16
+#define STAT_ERROR_17 17
+#define STAT_ERROR_18 18
+#define STAT_ERROR_19 19 // NOTE: XIO codes align to here
+
+// Internal errors and startup messages
+#define STAT_INTERNAL_ERROR 20 // unrecoverable internal error
+#define STAT_INTERNAL_RANGE_ERROR 21 // number range other than by user input
+#define STAT_FLOATING_POINT_ERROR 22 // number conversion error
+#define STAT_DIVIDE_BY_ZERO 23
+#define STAT_INVALID_ADDRESS 24
+#define STAT_READ_ONLY_ADDRESS 25
+#define STAT_INIT_FAIL 26
+#define STAT_SHUTDOWN 27
+#define STAT_MEMORY_CORRUPTION 28
+#define STAT_ERROR_29 29
+#define STAT_ERROR_30 30
+#define STAT_ERROR_31 31
+#define STAT_ERROR_32 32
+#define STAT_ERROR_33 33
+#define STAT_ERROR_34 34
+#define STAT_ERROR_35 35
+#define STAT_ERROR_36 36
+#define STAT_ERROR_37 37
+#define STAT_ERROR_38 38
+#define STAT_ERROR_39 39
+
+// Input errors (400's, if you will)
+#define STAT_UNRECOGNIZED_COMMAND 40 // parser didn't recognize the command
+#define STAT_EXPECTED_COMMAND_LETTER 41 // malformed line to parser
+#define STAT_BAD_NUMBER_FORMAT 42 // number format error
+#define STAT_INPUT_EXCEEDS_MAX_LENGTH 43// input string is too long
+#define STAT_INPUT_VALUE_TOO_SMALL 44 // input error: value is under minimum
+#define STAT_INPUT_VALUE_TOO_LARGE 45 // input error: value is over maximum
+#define STAT_INPUT_VALUE_RANGE_ERROR 46 // input error: value is out-of-range
+#define STAT_INPUT_VALUE_UNSUPPORTED 47 // input error: value is not supported
+#define STAT_JSON_SYNTAX_ERROR 48 // JSON input string is not well formed
+#define STAT_JSON_TOO_MANY_PAIRS 49 // JSON input string has too many JSON pairs
+#define STAT_JSON_TOO_LONG 50 // JSON output exceeds buffer size
+#define STAT_NO_BUFFER_SPACE 51 // Buffer pool is full and cannot perform this operation
+#define STAT_ERROR_52 52
+#define STAT_ERROR_53 53
+#define STAT_ERROR_54 54
+#define STAT_ERROR_55 55
+#define STAT_ERROR_56 56
+#define STAT_ERROR_57 57
+#define STAT_ERROR_58 58
+#define STAT_ERROR_59 59
+
+// Gcode and machining errors
+#define STAT_ZERO_LENGTH_MOVE 60 // move is zero length
+#define STAT_GCODE_BLOCK_SKIPPED 61 // block is too short - was skipped
+#define STAT_GCODE_INPUT_ERROR 62 // general error for gcode input
+#define STAT_GCODE_FEEDRATE_ERROR 63 // move has no feedrate
+#define STAT_GCODE_AXIS_WORD_MISSING 64 // command requires at least one axis present
+#define STAT_MODAL_GROUP_VIOLATION 65 // gcode modal group error
+#define STAT_HOMING_CYCLE_FAILED 66 // homing cycle did not complete
+#define STAT_MAX_TRAVEL_EXCEEDED 67
+#define STAT_MAX_SPINDLE_SPEED_EXCEEDED 68
+#define STAT_ARC_SPECIFICATION_ERROR 69 // arc specification error
+
#ifdef __cplusplus
}
#endif // __cplusplus
-
-#endif // _TINYG2_H_
+
+#endif // _TINYG2_H_
diff --git a/TinyG2/xio.h b/TinyG2/xio.h
index 263297df..1f7022a4 100755
--- a/TinyG2/xio.h
+++ b/TinyG2/xio.h
@@ -147,4 +147,4 @@ Binary Oct Dec Hex Glyph
111 1100 174 124 7C |
111 1101 175 125 7D }
111 1110 176 126 7E ~
-*/
\ No newline at end of file
+*/