diff --git a/.gitignore b/.gitignore
index 95228f92..cafa4e3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,4 +7,5 @@ embedded/dist
*~
.pio/
.vscode/
-.history/
\ No newline at end of file
+.history/
+*.pyc
diff --git a/Grbl_Esp32/atari_1020.cpp b/Grbl_Esp32/Custom/atari_1020.cpp
similarity index 98%
rename from Grbl_Esp32/atari_1020.cpp
rename to Grbl_Esp32/Custom/atari_1020.cpp
index 342d73c6..a68080b0 100644
--- a/Grbl_Esp32/atari_1020.cpp
+++ b/Grbl_Esp32/Custom/atari_1020.cpp
@@ -23,9 +23,10 @@
This contains all the special features required to control an
Atari 1010 Pen Plotter
*/
-#include "grbl.h"
-#ifdef ATARI_1020
+// This file is enabled by defining CUSTOM_CODE_FILENAME "atari_1020.cpp"
+// in Machines/atari_1020.h, thus causing this file to be included
+// from ../custom_code.cpp
#define HOMING_PHASE_FULL_APPROACH 0 // move to right end
#define HOMING_PHASE_CHECK 1 // check reed switch
@@ -319,6 +320,3 @@ void user_m30() {
sprintf(gcode_line, "G90G0X%3.2f\r", ATARI_PAPER_WIDTH); //
inputBuffer.push(gcode_line);
}
-
-#endif
-
diff --git a/Grbl_Esp32/custom_code_template.cpp b/Grbl_Esp32/Custom/custom_code_template.cpp
similarity index 93%
rename from Grbl_Esp32/custom_code_template.cpp
rename to Grbl_Esp32/Custom/custom_code_template.cpp
index cd5b197f..89ae015d 100644
--- a/Grbl_Esp32/custom_code_template.cpp
+++ b/Grbl_Esp32/Custom/custom_code_template.cpp
@@ -30,7 +30,7 @@ Machines/template.h to a similar name.
Example:
Machines/my_machine.h
-my_machine.cpp
+Custom/my_machine.cpp
Edit machine.h to include your Machines/my_machine.h file
@@ -43,14 +43,6 @@ enabled with USE_ defines in Machines/my_machine.h
*/
-// It is necessary to include grbl.h so that the machine definitions
-// will be loaded before the remainder of this file is processed.
-#include "grbl.h"
-
-// !!! Change this to the MACHINE_name you chose in Machines/my_machine.h
-// The compiler will skip the rest of this file unless that name is defined
-#ifdef MACHINE_CUSTOM
-
#ifdef USE_MACHINE_INIT
/*
machine_init() is called when Grbl_ESP32 first starts. You can use it to do any
@@ -173,6 +165,3 @@ void machine_trinamic_setup() {
// If you add any additional functions specific to your machine that
// require calls from common code, guard their calls in the common code with
// #ifdef USE_WHATEVER and add function prototypes (also guarded) to grbl.h
-
-
-#endif
diff --git a/Grbl_Esp32/polar_coaster.cpp b/Grbl_Esp32/Custom/polar_coaster.cpp
similarity index 97%
rename from Grbl_Esp32/polar_coaster.cpp
rename to Grbl_Esp32/Custom/polar_coaster.cpp
index f7aa3414..6387fbba 100644
--- a/Grbl_Esp32/polar_coaster.cpp
+++ b/Grbl_Esp32/Custom/polar_coaster.cpp
@@ -28,7 +28,7 @@
How it works...
If you tell it to go to X10 Y10 Z10 in Cartesian space, for example, the equations
- will convert those values to the required joint values. In the case of a polar machine, X represents the radius,
+ will convert those values to the required joint values. In the case of a polar machine, X represents the radius,
Y represents the polar degrees and Z would be unchanged.
In most cases, a straight line in Cartesian space could cause a curve in the new system.
@@ -50,10 +50,9 @@
*/
-#include "grbl.h"
-
-#ifdef MACHINE_POLAR_COASTER
-#ifdef USE_KINEMATICS
+// This file is enabled by defining CUSTOM_CODE_FILENAME "polar_coaster.cpp"
+// in Machines/polar_coaster.h, thus causing this file to be included
+// from ../custom_code.cpp
void calc_polar(float *target_xyz, float *polar, float last_angle);
float abs_angle(float ang);
@@ -175,7 +174,6 @@ void inverse_kinematics(float *target, plan_line_data_t *pl_data, float *positio
// TO DO don't need a feedrate for rapids
}
-
/*
Forward kinematics converts position back to the original cartesian system. It is
typically used for reporting
@@ -264,8 +262,6 @@ float abs_angle(float ang) {
return ang;
}
-#endif
-
// Polar coaster has macro buttons, this handles those button pushes.
void user_defined_macro(uint8_t index)
{
@@ -298,6 +294,3 @@ void user_defined_macro(uint8_t index)
void user_m30() {
inputBuffer.push("$H\r");
}
-
-#endif
-
diff --git a/Grbl_Esp32/Machines/atari_1020.h b/Grbl_Esp32/Machines/atari_1020.h
index 328283b0..19bfa128 100644
--- a/Grbl_Esp32/Machines/atari_1020.h
+++ b/Grbl_Esp32/Machines/atari_1020.h
@@ -9,6 +9,8 @@
#define MACHINE_NAME "MACHINE_ATARI_1020"
+#define CUSTOM_CODE_FILENAME "Custom/atari_1020.cpp"
+
#ifdef USE_RMT_STEPS
#undef USE_RMT_STEPS
#endif
diff --git a/Grbl_Esp32/Machines/polar_coaster.h b/Grbl_Esp32/Machines/polar_coaster.h
index ad667100..b7485ac9 100644
--- a/Grbl_Esp32/Machines/polar_coaster.h
+++ b/Grbl_Esp32/Machines/polar_coaster.h
@@ -3,8 +3,9 @@
#define MACHINE_NAME "MACHINE_POLAR_COASTER"
-// This must be defined so that polar_coaster.cpp is not skipped
-#define MACHINE_POLAR_COASTER
+// This causes the custom code file to be included in the build
+// via ../custom_code.cpp
+#define CUSTOM_CODE_FILENAME "Custom/polar_coaster.cpp"
#define RADIUS_AXIS 0
#define POLAR_AXIS 1
diff --git a/Grbl_Esp32/Machines/template.h b/Grbl_Esp32/Machines/template.h
index 11f8acf3..885c3d89 100644
--- a/Grbl_Esp32/Machines/template.h
+++ b/Grbl_Esp32/Machines/template.h
@@ -34,14 +34,16 @@
// === Machine Name
// Change TEMPLATE to some name of your own choosing. That name
// will be shown in a Grbl startup message to identify your
-// configuration. If you need to implement custom code functions
-// as in custom_code_template.cpp, the beginning #ifdef in
-// your custom .cpp file must match your chosen MACHINE_name ,
-// so as to enable the compilation of your file and suppress
-// compilation of other custom .cpp files.
+// configuration.
#define MACHINE_NAME "MACHINE_TEMPLATE"
+// If your machine requires custom code as described below in
+// Special Features, you must copy Custom/custom_code_template.cpp
+// to a new name like Custom/my_custom_code.cpp, implement the
+// functions therein, and enable its use by defining:
+// #define CUSTOM_CODE_FILENAME "Custom/my_custom_code.cpp"
+
// === Number of axes
// You can set the number of axes that the machine supports
diff --git a/Grbl_Esp32/custom_code.cpp b/Grbl_Esp32/custom_code.cpp
new file mode 100644
index 00000000..1e400f9d
--- /dev/null
+++ b/Grbl_Esp32/custom_code.cpp
@@ -0,0 +1,8 @@
+// This file loads custom code from the Custom/ subdirectory if
+// CUSTOM_CODE_FILENAME is defined.
+
+#include "grbl.h"
+
+#ifdef CUSTOM_CODE_FILENAME
+ #include CUSTOM_CODE_FILENAME
+#endif
diff --git a/build-all.py b/build-all.py
index af19788d..502ed8d5 100644
--- a/build-all.py
+++ b/build-all.py
@@ -1,5 +1,10 @@
#!/usr/bin/env python2
+# Note: If you experience random errors running this script within
+# VSCode, try running it from a regular terminal window. Some VSCode
+# extensions seem to randomly interfere with the files that platformio
+# uses during compilation.
+
# Compile Grbl_ESP32 for each of the machines defined in Machines/ .
# Add-on files are built on top of a single base.
# This is useful for automated testing, to make sure you haven't broken something
@@ -9,31 +14,16 @@
# contain the word "error". If you need to see everything, for example to
# see the details of an errored build, include -v on the command line.
-from __future__ import print_function
-import os, subprocess, sys
+from builder import buildMachine
+import os, sys
+
+cmd = ['platformio','run']
-env = dict(os.environ)
verbose = '-v' in sys.argv
-def buildMachine(baseName, addName=None):
- displayName = baseName
- flags = '-DMACHINE_FILENAME=' + baseName
- if addName:
- displayName += ' + ' + addName
- flags += ' -DMACHINE_FILENAME2=' + addName
- print('Building machine ' + displayName)
- env['PLATFORMIO_BUILD_FLAGS'] = flags
- app = subprocess.Popen(['platformio','run'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1, env=env)
- for line in app.stdout:
- if verbose or "Took" in line or "error" in line.lower():
- print(line, end='')
- print()
-
adderBase = '3axis_v4.h'
for name in os.listdir('Grbl_Esp32/Machines'):
if name.startswith('add_'):
- buildMachine(adderBase, name)
+ buildMachine(adderBase, addName=name, verbose=verbose)
else:
- buildMachine(name)
-
-
+ buildMachine(name, verbose=verbose)
diff --git a/build-machine.py b/build-machine.py
index 7e7d6e62..cb668d91 100644
--- a/build-machine.py
+++ b/build-machine.py
@@ -1,18 +1,20 @@
#!/usr/bin/env python2
-# Compile Grbl_ESP32 for the machine listed on the command line, as in
-# ./build-machine.py 3xis_v4.h
+# Compile Grbl_ESP32 for each of the machines defined in Machines/ .
+# Add-on files are built on top of a single base.
+# This is useful for automated testing, to make sure you haven't broken something
-# Add-ons can be built by listing both the base name and the adder, as in
-# ./build-machine.py 3axis_v4.h add_esc_spindle.h
-
-# -q suppresses most messages
-# -u uploads the firmware to the target machine
+# The output is filtered so that the only lines you see are a single
+# success or failure line for each build, plus any preceding lines that
+# contain the word "error". If you need to see everything, for example to
+# see the details of an errored build, include -v on the command line.
from __future__ import print_function
-import os, subprocess, sys
+from builder import buildMachine
+import os, sys
+
+extraArgs=None
-cmd=['platformio','run']
verbose = '-v' in sys.argv or '-q' not in sys.argv
if '-v' in sys.argv:
sys.argv.remove('-v')
@@ -20,32 +22,14 @@ if '-q' in sys.argv:
sys.argv.remove('-q')
if '-u' in sys.argv:
sys.argv.remove('-u')
- cmd.append('--target=upload')
-
-env = dict(os.environ)
-
-def buildMachine(baseName, addName=None):
- displayName = baseName
- flags = '-DMACHINE_FILENAME=' + baseName
- if addName:
- displayName += ' + ' + addName
- flags += ' -DMACHINE_FILENAME2=' + addName
- print('Building machine ' + displayName)
- env['PLATFORMIO_BUILD_FLAGS'] = flags
- if verbose:
- subprocess.Popen(cmd, env=env).wait()
- else:
- app = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1, env=env)
- for line in app.stdout:
- if "Took" in line or 'Uploading' in line or "error" in line.lower():
- print(line, end='')
+ extraArgs = '--target=upload'
if len(sys.argv) == 2:
- buildMachine(sys.argv[1], None)
+ buildMachine(sys.argv[1], addName=None, verbose=verbose, extraArgs=extraArgs)
elif len(sys.argv) == 3:
- buildMachine(sys.argv[1], sys.argv[2])
+ buildMachine(sys.argv[1], addName=sys.argv[2], verbose=verbose, extraArgs=extraArgs)
else:
print("Usage: ./build-machine.py [-q] [-u] machine_name.h [add_name.h]")
print(' Build for the given machine and optional add-on regardless of machine.h')
print(' -q suppresses most messages')
- print(' -u uploads to the target after compilation')
\ No newline at end of file
+ print(' -u uploads to the target after compilation')
diff --git a/builder.py b/builder.py
new file mode 100644
index 00000000..d9b09780
--- /dev/null
+++ b/builder.py
@@ -0,0 +1,32 @@
+# This script is imported by build-machine.py and build-all.py
+# It performs a platformio build with a given base machine file
+# and an optional add-on file. The verbose argument controls
+# whether the full output is displayed, or filtered to show
+# only summary information. extraArgs can be used to perform
+# uploading after compilation.
+
+from __future__ import print_function
+import subprocess, os
+
+env = dict(os.environ)
+
+def buildMachine(baseName, addName=None, verbose=True, extraArgs=None):
+ cmd = ['platformio','run']
+ if extraArgs:
+ cmd.append(extraArgs)
+ displayName = baseName
+ flags = '-DMACHINE_FILENAME=' + baseName
+ if addName:
+ displayName += ' + ' + addName
+ flags += ' -DMACHINE_FILENAME2=' + addName
+ print('Building machine ' + displayName)
+ env['PLATFORMIO_BUILD_FLAGS'] = flags
+ if verbose:
+ app = subprocess.Popen(cmd, env=env)
+ else:
+ app = subprocess.Popen(cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1)
+ for line in app.stdout:
+ if "Took" in line or 'Uploading' in line or "error" in line.lower():
+ print(line, end='')
+ app.wait()
+ print()
diff --git a/platformio.ini b/platformio.ini
index 2ec4ff08..8b638982 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -28,4 +28,5 @@ framework = arduino
upload_speed = 512000
board_build.partitions = min_spiffs.csv
monitor_speed = 115200
-build_flags = -DCORE_DEBUG_LEVEL=0
+build_flags = -DCORE_DEBUG_LEVEL=0 -Wno-unused-variable -Wno-unused-function
+src_filter = +<*.h> +<*.s> +<*.S> +<*.cpp> +<*.c> +<*.ino> + -<.git/> - - - -