Notes on Path Pilot 1.8.2 source code

27 Nov 2015 03:10 - 27 Nov 2015 03:12 #65848 by jepler
Executive Summary

Someone who used the written offer for the GPL source code from Tormach was kind enough to redistribute the tarball to me.

I compressed (xz) the archive and made it available at

Path Pilot (version 1.8.2) is a fork of a prerelease of LinuxCNC 2.6.0 with significant back-ports (e.g., the planner that is new in LinuxCNC 2.7.x) changes not incorporated into LinuxCNC (e.g., inifile settings for default tolerances, single-stepping changes, a default preview plot size limit in AXIS/gremlin, remap changes, and other changes I don't grok at first glance), and some things that are worrying (removing the path whitelist checking of module_helper).

Organization seems to have linuxcnc/ as one subdirectory, and other stuff in sibling directories. A script implies that git submodules are probably in play.

It also includes significant non-linuxcnc portions, e.g., in depends:
check_operatorsudo  mesaflash  numlockx  shifttest  time-admin-wrapper truetype-tracer

In lib/ are files including a modified binary copy of libgtk "with FileChooser restricted to ~/gcode." (quoted text plus patch in lib/gtklibpatch.txt)

As yet, I have not investigated whether the source files build and work for me.

File details

File size 223774720 (214MB) latest dated files are 2015-07-21 14:01

Cryptographic checksums:
c7917534468b02fa609ccabc03dccc12  pathpilot_source-1.8.2.tar.xz
838c36835746e8b3c5a00c9c99c2649b  pathpilot_source.tar

47c9b81c3f588a11c14d24363492e09806a5bf9c  pathpilot_source-1.8.2.tar.xz
e51a14be8a3c8c9952668bde7294b9221cecc200  pathpilot_source.tar

Rambling narrative

this archive also contains a large number of object files such as ./linuxcnc/src/xor2.ko that are created by a linuxcnc build process.

Organization seems to have linuxcnc/ as one subdirectory, and other stuff in sibling directories.

this archive also contains a large number of object files such as ./linuxcnc/src/xor2.ko that are created by a linuxcnc build process. Organization seems to have linuxcnc/ as one subdirectory, and other stuff in sibling directories.

this archive also contains a large number of object files such as ./linuxcnc/src/xor2.ko that are created by a linuxcnc build process.

version.txt says "v1.8.2". This version numbering is unrelated to LinuxCNC's. linuxcnc/version.txt says "2.6.0~pre". linuxcnc/debian/changelog's latest entries pertain to the 2.5.3 release

At a first glance, this means that the forking point of pathpilot is between these two revisions:
ce9835a Release 2.5.3          (July 23, 2013)
3f5e5a5 2.6.0~pre1 changelog   (April 7, 2014)

so I went prospecting with the help of a shell alias
$ f () { git rev-list --first-parent $range -- $1 | while read rev; do git log -1 --abbrev-commit --format="%H %aD %s" $rev ; git diff --shortstat --exit-code $rev -- $1 && echo MATCH; echo; done | less; }
$ range=ce9835a..3f5e5a5 f src/hal/drivers/mesa-hostmot2/encoder.c
81876a9c1563246b0e19f7230a3577bdcc6cc227 Mon, 7 Apr 2014 01:35:55 +0200 hm2: muxed encoder: add support for FilterRate and Muxed Skew register.
 1 file changed, 15 insertions(+), 77 deletions(-)

3923028b51b8ca2b4e7e2ae80b0896302e64ac56 Mon, 7 Apr 2014 01:33:00 +0200 hm2: add support for muxed encoder version 4
 1 file changed, 1 insertion(+), 3 deletions(-)

7c112e5b77f0adb6094207645ef31bb49b4d1a1b Sun, 23 Feb 2014 17:57:00 +0100 Merge branch 'master' of ssh://

91efbf5fe8da8e1d5c023c45a94a3303cf29c27f Thu, 15 Aug 2013 21:46:18 +0100 Merge remote branch 'origin/master' into hm2-resolver-fix-for-master
 1 file changed, 24 insertions(+), 5 deletions(-)

Diffing against linuxcnc at this ref (7c112e5b) starts to produce results both mundane
diff --git a/src/emc/ini/ b/src/emc/ini/
index 29d8c27..4d5d1e4 100644
--- a/src/emc/ini/
+++ b/src/emc/ini/
@@ -42,6 +42,20 @@ static int loadTool(IniFile *toolInifile)
     const char *inistring;
     if (NULL != (inistring = toolInifile->Find("TOOL_TABLE", "EMCIO"))) {
+        // see if filename starts with '~'
+        if (inistring[0] == '~') {
+            // get user's HOME directory from environment
+            char *home;
+            char full_path[LINELEN];
+            if ((home = getenv("HOME")) != NULL) {
+                // start with the path to the HOME directory
+                strcpy(full_path, home);
+                // skip the '~'
+                strcat(full_path, &inistring[1]);
+                inistring = full_path;
+            }
+        }
        if (0 != emcToolSetToolTableFile(inistring)) {
            rcs_print("bad return value from emcToolSetToolTableFile\n");
            retval = -1;
and interesting
diff --git a/src/emc/motion/command.c b/src/emc/motion/command.c
index ada126d..6307a38 100644
--- a/src/emc/motion/command.c
+++ b/src/emc/motion/command.c
@@ -81,6 +83,52 @@ extern void check_stuff(const char *msg);
+ * Helper function to execute a single step command.
+ * This sets the appropriate flags so that the trajectory planner runs just the
+ * next segment.
+ */
+STATIC int do_step_cmd(struct state_tag_t const * const tag) {
+    if(!emcmotStatus->paused) {
+        reportError(_("MOTION: can't STEP while already executing"));
+        return -1;
+    }
+    if (!tag) {
+        reportError(_("MOTION: invalid ID trying to do a STEP"));
+        return -1;
+    }
+    emcmotDebug->idForStep = tag->fields[GM_FIELD_STEPPING_ID];
+    rtapi_print_msg(RTAPI_MSG_DBG," idForStep = %d, line = %d\n",
+            emcmotDebug->idForStep,
+            tag->fields[GM_FIELD_LINE_NUMBER]);
+    emcmotDebug->stepping = 1;
+    tpResume(&emcmotDebug->tp);
+    emcmotStatus->paused = 1;
+    return 0;
+ * Check if a move has been added to an empty queue, and trigger a step command
+ * if necessary.
+ * This assumes that single-stepping is done in task, and so receiving a new
+ * motion command on an empty queue while stepping will only happen when a step
+ * command is issued to task.
+ */
+STATIC int do_firstmove_step(struct state_tag_t const * const tag) {
+    if(!emcmotStatus->paused || emcmotStatus->depth > 0) {
+        return -1;
+    }
+    do_step_cmd(tag);
+    return 0;
 /* loops through the active joints and checks if any are not homed */
 int checkAllHomed(void) {
     int joint_num;
Last edit: 27 Nov 2015 03:12 by jepler.
The following user(s) said Thank You: BigJohnT, jtc, eFalegname, 5axisormore, rafferty, geoffs, GEC

Please Log in or Create an account to join the conversation.

25 Dec 2015 09:14 #67311 by tkamsker
Hi Question
iĺl try to have a look what are they doing so thank you for that tarball
But did you get it to compile ?
Happy christmas

Please Log in or Create an account to join the conversation.

09 May 2016 02:31 #74388 by smgvbest

I've been working on compiling PathPilot from the sources and have a few notes
My build environment is based on "ubuntu-10.04-linuxcnc3-i386.iso" running in a VM
create the ID operator and use it. it seems to have less problems when you do
I created ~/pathpilot_source and put the tar there

Here is a list of make options you can use
Tormach highly editing the basic LinuxCNC Makefile
install-dep			# Install system-wide dependencies needed to run linuxcnc and GUI
lathe-tarball			# Create encrypted tarball for CNC lathe with mill references removed
tarball				# Create encrypted tarball for mill and lathe  
			  			used to create updates posted on website
all-tarball			# Create encrypted tarball including everything even unreleased projects
list-tgp				# Check tarball by extracting to a local folder
run					# Launch the GUI with the configuration stored in $(MACHINE_CONFIG) or launch config picker if this file does not exist
build			       # Compile all objects
install				# Build and install all files to the run directory
git-commands		# Install symlinks for git scripts to $(GIT_SYMLINK_DIR)
git-hooks  			# Setup git hooks by symlinking hook scripts into .git/hooks
clean-git-hooks		# Clean installed git hooks by unlinking them in .git/hooks
first					# Run this command on a fresh clone to do all the setup steps
default				# Automatically configure linuxcnc and dependencies and build
configure-sim		# Explicitly configure linuxcnc for local simulation build
depends			# Compile and install dependencies
purge-packages		# Purge packages not needed on the machine controller
linuxcnc-modules       # Build linuxcnc and all kernel modules
python				# Copy over all tormach python files to the appropriate folder structure in run.
build-clean			# Remove all files in the run folder
clean				# Recursively clean compiled objects and libraries
distclean			# Recursively clean all generated files (the nuclear option)
strip					# Search for all compiled objects and strip out debugging symbols
resources			# Copy resource files needed for GUI to $HOME/tmc

To get a working build environment after expanding the source tarball run
make install-dep
make install
make python # note sure if these two are really needed or not yet
make resources
make run # this setsup and runs pathpilot for first time. it will run with a 5i25 config file

it may take less that that but that is what I had to do to get it to work
the install-dep takes some time to complete, about 500+MB download

some basic notes

it was missing after make run

# note source does not include final images for pathpilot (tormach may consider these pro proprietary)
# quick fix, install v1.8.2.tgp from tormach download and put into update folder.
# note a diff of 1.8.2 installed from source and 1.8.2 from tgp have differences

I commented out the section of code in operator_login with $SHUTDOWN_CONTROLER in my sources folder to prevent ti from overwriting my change this way it never shutdown after an update

Manually Configure file with
echo `pwd`~/tmc/configs/tormach_lathe/tormach_lathe_5i25.ini > ~/config_file.txt

To Manually extract a *.tgp file
*.tgp # updates files are gpg password protect with moravianvalley
gpg --yes --no-use-agent --symmetric --output ~/v1.8.2.tgz --passphrase=moravianvalley v1.8.2.tgp

to get it fully working I have to apply the v1.8.2 update then all worked fine (graphics mostly)
it is a case of missing files the makefile is not completing from what I can tell.

All the python code is there to edit the interface including the *.ui or *.glade files.
if you want to play with these launch the software update and In the search box type in glade and look for GTK+ 2 User Interface Builder and install. I've also install eclipse C/C++ to work on source files.

That's all for now.
but wanted to show what's been going on

Please Log in or Create an account to join the conversation.

09 May 2016 07:37 - 09 May 2016 10:39 #74395 by cncbasher
the only differences i am aware of are indeed the graphics , tormach have copyrighted them , the version of graphics given in the source cd are more of a hand drawn variant as against the installed version .
i am not aware of any other differences , so if you find any , i would appricate a call , so it can be further investigated
i would be interested to know of Missing files ,

adding the pathpilot sources to the iso , will require the linuxcnc pre-requsites being installed , as if your building linuxcnc on it's own
it's easier to get linuxcnc build 2.6.3 source to build first , and then add the requirements for pathpilot. is a python script for using remap from the linuxcnc sources , this is called from your ini script .
Last edit: 09 May 2016 10:39 by cncbasher.

Please Log in or Create an account to join the conversation.

11 May 2016 23:13 #74535 by smgvbest

I'm going to repeat what I did and be sure I didn't introduce anything else accidentally before I post any differences.

Please Log in or Create an account to join the conversation.

Moderators: cncbasher
Time to create page: 0.090 seconds
Powered by Kunena Forum