vcswatch reports that
this package seems to have a new changelog entry (version
1:2.10.0~pre2, distribution
UNRELEASED) and new commits
in its VCS. You should consider whether it's time to make
an upload.
Here are the relevant commit messages:
commit 3f582d0f8fa31c8fc8ecfeef3526df6deb74d662
Merge: 60dd807b 45f9e0ce
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Oct 9 15:48:14 2026 +0200
Merge pull request #4622 from SyncTwin/synctwin/check-ini-e-option
linuxcnc_check_ini: make -e/--error work
commit 60dd807b6c652cccc2065c69d4efa16ab5fcbe76
Merge: 376e24ad 3624a45d
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Oct 9 15:47:30 2026 +0200
Merge pull request #4637 from grandixximo/bldc-4625-comp-guard
halcompile: allocate fake params for personality-masked params
commit 376e24adf3be0b6da4af8c2b63321a10960fcb49
Merge: 8f05c9d4 db154c41
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Oct 9 15:43:16 2026 +0200
Merge pull request #4654 from BsAtHome/fix_fc44-include-order
emcmodule: Reorder include to prevent duplicate define error
commit db154c41b595967400416ef0b4f5d3f28900dd72
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Thu Oct 8 16:55:30 2026 +0200
emcmodule: Reorder include to prevent duplicate define error
commit 8f05c9d47b3c97c2aaed37aedfbc60b58d41e02c
Merge: 46a388fd 0a1ef870
Author: andypugh <andy@bodgesoc.org>
Date: Thu Oct 8 00:20:32 2026 +0100
Merge pull request #4641 from LinuxCNC/andypugh/PR4519_followup
Update MDI helpers for new D word in G33 and G76.
commit 46a388fd15a477b4bf2ce090919b0273074e7fc1
Merge: 7f67ef2e ba58691c
Author: Rene Hopf <renehopf@mac.com>
Date: Wed Oct 7 11:28:14 2026 +0200
Merge pull request #4649 from rene-dev/fix-msg2str-debug
commit ba58691c2125e3c4c816fccc8ab08cbb69db4157
Author: Rene Hopf <renehopf@mac.com>
Date: Wed Oct 7 10:16:30 2026 +0200
task: only call msg2str() when EMC_DEBUG_TASK_ISSUE is set
0869c90e38 replaced the 'if (emc_debug & EMC_DEBUG_TASK_ISSUE)' guard
around the 'Issuing ...' debug print with log_debug(), which checks the
flag inside the function. Its arguments are evaluated before the call,
so msg2str() ran for every issued command: it encoded the whole message
to ASCII for nothing, and the first call built the CMS display-ASCII
updater, whose constructor prints the CMS_DISPLAY_ASCII_UPDATER
warning reported in #4627.
Put the guard back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
commit 0a1ef8706e7314d5673144a136d2ead80a677e1f
Author: andypugh <andy@bodgesoc.org>
Date: Wed Oct 7 00:54:48 2026 +0100
Fix formatting in mdi_text.py
commit 7f67ef2e45255b8a3610840ab7780d1b86a2568d
Merge: 3f156d1a 7855121d
Author: Rene Hopf <renehopf@mac.com>
Date: Tue Oct 6 14:20:22 2026 +0200
Merge pull request #4627 from rene-dev/nml-cleanup2
Nml cleanup
commit 7855121d7f05f5d297df10d4846bc5bdf8331897
Author: Rene Hopf <renehopf@mac.com>
Date: Tue Oct 6 13:44:52 2026 +0200
remove unused NML messages
Nothing in the tree sends any of these:
- EMC_TOOL_HALT had no handler either.
- EMC_TOOL_UNLOAD, EMC_TRAJ_ABORT, EMC_TRAJ_PAUSE and EMC_TRAJ_RESUME
were handled by task, but no GUI, halui, linuxcncrsh or the Python
and Tcl bindings ever sends them. GUIs pause and resume through
EMC_TASK_PLAN_PAUSE/RESUME and abort through EMC_TASK_ABORT.
emcTrajPause(), emcTrajResume() and emcTrajAbort() stay, task calls
them itself. emcToolUnload() was only reachable through
EMC_TOOL_UNLOAD and goes with it.
An external program speaking NML directly that sends one of these will
now get "ignoring issue of unknown command".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
commit 4df0d4beaf3a74e410579304aa8299a2364a148c
Author: Rene Hopf <renehopf@mac.com>
Date: Tue Oct 6 13:40:17 2026 +0200
libnml: remove unused files
Nothing in LinuxCNC reaches any of these; linking every libnml user
with --gc-sections discards all of it.
- cms/cmssvrp.cc, os_intf/inetnull.cc, os_intf/inetfile.hh: never
built.
- os_intf/timer.cc: RCS_TIMER, replaced by linuxcnc::CyclicTimer.
timer.hh keeps the etime()/esleep() declarations libnml still uses.
- cms/cms_pm.cc: CMS::update() for the POSEMATH types. The only one
any message uses is PM_CARTESIAN (EMC_TRAJ_CIRCULAR_MOVE), which
moves to cms.cc.
- nml/nmldiag.cc, nml/nmldiag.hh: NML_DIAGNOSTICS_INFO::print() and
nml_print_diag_list(), reachable only through the equally unused
NML::get_diagnostics_info(), which goes too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
commit 840126506df10bdba1c481887219089267daae72
Author: Rene Hopf <renehopf@mac.com>
Date: Tue Oct 6 12:15:38 2026 +0200
fixup! fix cppcheck
commit 7b22f3717b6483940dd56d4265c9054dc0325552
Author: Rene Hopf <renehopf@mac.com>
Date: Tue Oct 6 12:15:38 2026 +0200
fixup! replace rcs_print with libfmt, remove nml dependency from interplist
commit 0869c90e383a172ad303d182cf74eef1f4d354b0
Author: Rene Hopf <renehopf@mac.com>
Date: Tue Oct 6 12:15:37 2026 +0200
fixup! replace rcs_print with libfmt, remove nml dependency from interplist
commit b57499c08ae4fe8e40af61e55350507743b1fbd3
Author: Rene Hopf <renehopf@mac.com>
Date: Sun Sep 20 17:27:37 2026 +0200
fix cppcheck
commit 1ea510dce0095f8f0bdd016ba39ce17c0a6562fc
Author: Rene Hopf <renehopf@mac.com>
Date: Sat Sep 19 20:24:58 2026 +0200
replace rcs_print with libfmt, remove nml dependency from interplist
commit 0fb2cf2817da95b11c980af624bde581544cb83e
Author: andypugh <andy@bodgesoc.org>
Date: Tue Oct 6 09:53:19 2026 +0100
Fix syntax error in G33 command parameters
commit 2a1e2e60e1a65f7e03d0f344a9ed0c36a8a61ad5
Author: andypugh <andypugh@Geekom.bodgesoc.org>
Date: Sun Oct 4 19:07:48 2026 +0100
Update MDI helpers for new D word in G33 and G76. Also add $ for multi-spindle configs
commit 3624a45d68f4fc633676cda34ad68a0d147db51c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 5 21:07:56 2026 +0800
halcompile: allocate a fake param when personality masks a param
A param masked out by personality was never allocated, so its accessor
handle stayed NULL and reading it killed the realtime thread (#4625).
Allocate a fake param in the personality else branch, per BsAtHome's
review: the handle always points at HAL-owned storage, exported or
not, and a masked param reads back zero.
commit e6ed165fb76d9d33ee654ca18ec3ca614867beb3
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 5 20:29:39 2026 +0800
Revert "halcompile: back masked params with zeroed storage, warn on access"
This reverts commit 3822d1e47864ad02732e74a2904ee562e872b29b.
commit 3f156d1a70f7c8750262d95c211af329e7ef1fb2
Merge: 929be84f e43723f5
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 5 08:39:24 2026 +0800
Merge pull request #4519 from 85vmh/spindle_sync_motion_start_angle_control
Add spindle angle offset (D word) for G33 and G76 threading
commit 929be84f2d21147774124432284d92ac586e868e
Merge: 5c18701b d0332262
Author: andypugh <andy@bodgesoc.org>
Date: Sun Oct 4 22:28:08 2026 +0100
Merge pull request #4634 from grandixximo/sserial-globals-dup-check
hostmot2: fix bounds of the sserial global duplicate check
commit 5c18701bf5ef270c897a0865b6df60a9275c965f
Merge: 7e57f5e3 2e1f94f6
Author: andypugh <andy@bodgesoc.org>
Date: Sun Oct 4 22:27:22 2026 +0100
Merge pull request #4633 from grandixximo/sserial-hal-malloc-checks
hostmot2: check hal_malloc results in sserial and abs_encoder setup
commit 7e57f5e3ca54df81c000aa170c56e8ab348e7bf4
Merge: f43ab823 603b30fd
Author: andypugh <andy@bodgesoc.org>
Date: Sun Oct 4 22:26:25 2026 +0100
Merge pull request #4635 from grandixximo/sserial-encoder-h-pins
hostmot2: use the H entry's pins for two-part sserial encoders
commit e43723f558cc47b51037f4ff6a132cb3adbd9c11
Author: andypugh <andy@bodgesoc.org>
Date: Sun Oct 4 19:10:53 2026 +0100
Fix formatting of else statement in tp.c
Typo when resolving conflicts
commit 70b93942a677ca1b08f54b0c909650b29b480ac7
Merge: dae3be85 f43ab823
Author: andypugh <andy@bodgesoc.org>
Date: Sun Oct 4 18:09:46 2026 +0100
Merge branch 'master' into spindle_sync_motion_start_angle_control
commit f43ab823a401f4ebb2cb9e540ce243a9088a86bd
Merge: 0cd00073 3822d1e4
Author: andypugh <andy@bodgesoc.org>
Date: Sun Oct 4 17:14:20 2026 +0100
Merge pull request #4626 from grandixximo/fix-4625-bldc-offset
halcompile: back masked params with zeroed storage, warn on access
commit 0cd00073631b5880470757eeda4b0809c41f9eb6
Merge: 056f2fd8 284e4efd
Author: andypugh <andy@bodgesoc.org>
Date: Sun Oct 4 17:11:32 2026 +0100
Merge pull request #4453 from grandixximo/g33-sync-origin
tp: keep the G33 sync origin on the spindle index
commit d03322624e6c4ba4888e782347eb274de78b60bf
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 4 21:10:36 2026 +0800
hostmot2: fix bounds of the sserial global duplicate check
The loop that tells process records apart from globals ran with
i <= num_confs, reading one entry past the confs array, and
dereferenced chan->confs even when the remote has no process records
at all (confs == NULL), crashing the driver load on such a device.
Bound the loop to num_confs, which also skips it safely for a
globals-only remote.
commit 2e1f94f6e2c579d7fcc37c6952796ed5b1e45bc1
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 4 21:10:36 2026 +0800
hostmot2: check hal_malloc results in sserial and abs_encoder setup
The load path dereferenced hal_malloc results without a check. On HAL
shared-memory exhaustion, or on a garbage global/conf count read from
an unresponsive remote, the next statement wrote through NULL and
killed the loading process with no useful message. Fail with -ENOMEM
and the channel name instead.
commit 603b30fd35c44c24ed0b644f56022a91219b21ca
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 4 21:10:36 2026 +0800
hostmot2: use the H entry's pins for two-part sserial encoders
LBP_ENCODER_L entries get no HAL pins, but the two-part Fanuc encoder
reassembly fell through into the encoder body with whichever entry
completed the pair. When a format lists the H part before the L part
the body ran on the L entry's pins and dereferenced handles that were
never created. Redirect the body to the matching LBP_ENCODER_H
entry's pin set, and refuse the pair with an error when no H entry
exists.
commit 3822d1e47864ad02732e74a2904ee562e872b29b
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 4 17:43:26 2026 +0800
halcompile: back masked params with zeroed storage, warn on access
A param masked out by personality is never exported, so its accessor
handle stayed NULL; reading it dereferenced NULL and killed the
realtime thread (#4625). Pre-conversion such params were plain struct
fields and read back zero.
Point each param's handle at a zeroed instance-local backing store
before the guarded hal_param_new_*() call, restoring the old behavior.
Reading 0 can hide a genuine logic error, so a personality-masked
param also gets a masked flag, set when the export is skipped; the
generated accessors print a one-time message naming the param on
first access.
Fixes #4625.
commit 056f2fd807fcc40178efcf680b3cc7d251d8bc1d
Merge: f7ccc4fc b4a4f1c6
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 4 12:38:17 2026 +0800
Merge pull request #4628 from SyncTwin/synctwin/homing-dot-final-move
docs: homing.dot: no HOME_DELAY before the final move
commit b4a4f1c6ccf681f617fc6b6e1f24bf87a527e26f
Author: yurc <yurik.x@gmail.com>
Date: Sun Oct 4 06:35:09 2026 +0300
docs: homing.dot: HOME_FINAL_MOVE_START does not wait HOME_DELAY
Since the 2022 homing state-machine rework the HOME_FINAL_MOVE_START
state plans the final move as soon as the joint has stopped (and, for a
negative HOME_SEQUENCE, the other joints of the sequence are ready);
there is no HOME_DELAY pause before it (src/emc/motion/homing.c, the
timer branch of this state has no break). The diagram still showed
'after HOME_DELAY' on that edge. Describe the actual behavior; no code
change.
See #4621.
commit b42a8cbb4a1b9888f781911316e0ea48299ac13b
Author: Rene Hopf <renehopf@mac.com>
Date: Sat Sep 19 19:56:28 2026 +0200
remove dependency on libnml string handling
commit 9dc6ac36f384ef83f665ff3368022de451609c1e
Author: Rene Hopf <renehopf@mac.com>
Date: Sat Sep 19 19:13:27 2026 +0200
remove unused libnml linkage from, motionlogger
commit f5c8ef9e008c129ceb693a9692c97a7a6c1f96e4
Author: Rene Hopf <renehopf@mac.com>
Date: Sat Sep 19 19:12:31 2026 +0200
replace libnml timing functions with std::chrono
commit 45f9e0ced8fd073961df2b07ce15c2d0adc98409
Author: yurc <yurik.x@gmail.com>
Date: Sat Oct 3 20:40:26 2026 +0300
linuxcnc_check_ini: make -e/--error work
The option loop tested "-h" with a plain "if" after the "-e" branch, so
"-e" fell through to the "else" and the script exited with
"Unhandled option: '-e'" (exit code 2). Use "elif".
Reproduce: linuxcnc_check_ini -e any.ini
before: Unhandled option: '-e'
after: the INI file is checked and warnings are treated as errors.
commit f7ccc4fc9101c54cc074eacd410374c714fac8f5
Merge: c4e2e789 898e29a5
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Fri Oct 2 00:59:28 2026 -0400
Merge pull request #4611 from BsAtHome/hal64-halcmd-64-clean
hal: Make halcmd 64-bit clean after HAL API break
commit c4e2e789bdfc17e41b3ee6571d1c6f7c1f967a2d
Merge: 87c20722 6d71648c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Fri Oct 2 00:59:23 2026 -0400
Merge pull request #4610 from BsAtHome/hal64_components-64-clean
hal: Make .comp components 64-bit clean after HAL API break
commit 87c2072252081f7f2411d9b4dc58592402ecc1ef
Merge: 9c9083cb aa9f52fc
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Fri Oct 2 00:59:18 2026 -0400
Merge pull request #4609 from BsAtHome/hal64_drivers-64-clean
hal: Make hal_gm and hal_ppmc drivers 64-bit clean after HAL API break
commit 9c9083cbce2e34cb4eacc758005b2238a28ea4b9
Merge: eb82097a 386f49fb
Author: c-morley <c-morley@users.noreply.github.com>
Date: Thu Oct 1 11:41:20 2026 -0700
Merge pull request #4607 from grandixximo/qtvcp-preview-offsets
qtvcp: write the var file before reloading the preview on offset changes
commit aa9f52fc6fa499ebd457fc5fe4dbd2917bff0b35
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Wed Sep 30 21:41:39 2026 +0200
hal: Make hal_gm and hal_ppmc drivers 64-bit clean after HAL API break.
commit eb82097af8423037c2647ee2395d4beeaf596526
Merge: 703b666d 2656c7f2
Author: Greg Carl <26096779+snowgoer540@users.noreply.github.com>
Date: Wed Sep 30 20:29:55 2026 -0400
Merge pull request #4592 from LinuxCNC/pr-qtplasmac-dual-code
qtplasmac: fix dual-code button's optional inidicator
commit 898e29a5a61ae9d23d5ac633ed970f8ee5b6649f
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Wed Sep 30 22:11:07 2026 +0200
hal: Make halcmd 64-bit clean after HAL API break.
commit 6d71648c328553c3e281b746d70419f3d938cc85
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Wed Sep 30 21:47:48 2026 +0200
hal: Make .comp components 64-bit clean after HAL API break.
commit 703b666d5db2db52b6a790a6afa1d4b498609634
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Sep 30 15:15:59 2026 -0400
docs: fix pin/param documentation errors found by a docs-vs-code sweep (#4606)
* docs: fix leftover old/wrong HAL type names in hy_vfd.1 and demux_generic.9
* docs: correct rtcomps component reference against current sources
* docs: fix pin/param errors in driver docs verified against sources
* docs: fix man1 pin errors and omissions found by docs/code sweep
* docs: fix halmodule.adoc table column count
* docs: fix pin errors in hostmot2/sserial/hm2_eth man pages
* docs: rename old HAL type names in hostmot2/sserial/hm2_eth man pages
* docs: normalize type/dir tag style in hostmot2 and sserial man pages
* docs: state prefixes once and use relative pin names in hostmot2 and sserial man pages
* docs: unify prefix specification markup in hostmot2 and sserial man pages
* docs: drop unbalanced closing bold markers after italic placeholders
commit 0c329cd40ec73b50c28daf02fe15f3aeff5e335a
Merge: 563ae1c6 813f0ffc
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Sep 30 11:06:23 2026 -0400
Merge pull request #4608 from grandixximo/nutating-kins-type2
xyzacb_trsrn, xyzbca_trsrn: declare the tool kinematics type
commit 813f0ffc5c365f78a099dd0dabc62f3f6fdb1f05
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 1 00:32:30 2026 +1000
switchkins docs: kinematicsTypeFlags() must cover every kinstype a module switches to
A module that implements kinematicsTypeFlags() itself returns -1 only for kinstypes it does not provide, since G12.1 refuses those; the header and the switchable kinematics chapter now say so.
commit 94c7cf7c75e691ad1005f56ad1dc36a5d29260d7
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 1 00:15:33 2026 +1000
xyzacb_trsrn, xyzbca_trsrn: declare the tool kinematics type
Both modules switch to a type 2, the tool kinematics the nutating TWP sims select with G12.1 P2 from their G53.n remap, but kinematicsTypeFlags() declared only types 0 and 1. The interpreter reads -1 as a type the module does not provide and refuses G12.1 P2, so every G53.1, G53.3 and G53.6 in those sims failed. Type 2 now returns 0: provided, neither identity nor primary.
The preview's SELECT_KINS_TYPE printed a line on every call, which floods the terminal once a program switches kinematics in a loop; it is now a silent stub like the other canon calls the preview ignores.
Reported by Sigma1912.
commit 2656c7f248613383c0653087da4cf3e090c65000
Author: Greg Carl <26096779+snowgoer540@users.noreply.github.com>
Date: Sun Sep 27 12:25:41 2026 -0400
qtplasmac: fix dual-code button's optional inidicator
Previously this used "setCheckable", but user button actions are based on "pressed" and "released", and checkable works from "clicked". Since the GUI was also toggling setChecked, it created a race. Allowing qt to determine whether or not it was to be checked or not also did not work reliably. Changed to manually handling the button's sytling which is congruent with what is done elsewhere in the GUI very reliably.
commit 563ae1c6beea559b5cdf3c4c8e958cd9f040145f
Merge: 66c2b1b4 54c6f6b3
Author: BsAtHome <bertho@vagrearg.org>
Date: Tue Sep 29 21:20:22 2026 +0200
Merge pull request #4605 from grandixximo/halui-mdi-restore-race
halui: clear the MDI flag in the same pass that restores the mode
commit 386f49fb664b3b9ad99ad838bdaceae593b4505e
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Sep 29 22:24:57 2026 +1000
qtvcp: write the var file before reloading the preview on offset changes
The preview reads offsets from the var file, which the interpreter only writes when it synchs. Offset actions reloaded before that happened: the CALL_MDI ones did not wait for the MDI, and the others had no mode change to trigger the write when already in MDI mode.
Run them through one helper that waits, requests a plan synch, restores the previous mode and reloads.
commit 66c2b1b4b5c1cf1df271444919c423ce6ddc7cd1
Merge: e7e2c5d8 1458d97b
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Sep 29 21:25:57 2026 +1000
Merge pull request #4602 from BsAtHome/fix_cppcheck-2.19
cppcheck: Fix problems that are detected with cppcheck 2.19+
commit e7e2c5d829c8635b794006de0e0745b2e62efff8
Merge: ab5c2db9 183c2802
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Sep 29 20:28:38 2026 +1000
Merge pull request #4596 from BsAtHome/hal64_update-docs
docs: Update to reflect the HAL API changes
commit ab5c2db9cb4474fcb0ebd693cbf0a46ca906bc21
Merge: 60478a29 7923fdc3
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Sep 29 20:26:26 2026 +1000
Merge pull request #4599 from BsAtHome/hal64_update-man9
docs: Update man9 pages to reflect the HAL API changes.
commit 60478a29254d309ff407528bc52e22cd8717f054
Merge: 5a08c14b 572949c6
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Sep 29 20:26:12 2026 +1000
Merge pull request #4597 from BsAtHome/hal64_update-man1
docs: Update man1 pages to reflect the HAL API changes.
commit 572949c631c7c91e538ddf3434b6831e9ab178f4
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Mon Sep 28 12:31:29 2026 +0200
docs: Update man1 pages to reflect the HAL API changes.
commit 7923fdc32e56ee07115e960945e428a96a04ac0f
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Mon Sep 28 12:43:36 2026 +0200
docs: Update man9 pages to reflect the HAL API changes.
commit 5a08c14ba8bcb660d9dca1d24c59c6e164a8a351
Merge: 8d3e540a bb026d4c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Sep 29 17:06:12 2026 +1000
Merge pull request #4598 from BsAtHome/hal64_update-man3
docs: Update man3 pages after uses_fp arg was removed in HAL API changes
commit 54c6f6b338cf416de25a65fef26affac01a61d2c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Sep 29 11:45:51 2026 +1000
halui: clear the MDI flag in the same pass that restores the mode
When a halui MDI command finishes, modify_hal_pins() restores the Task mode that was active before it, then clears halui_sent_mdi. Both steps tested emcStatus->status == DONE separately, but the restore goes through emcCommandSend(), which refreshes emcStatus while it waits for the echo. If Task echoes the restore while still reporting EXEC, the restore fires and the clear is skipped.
The stale flag makes the next sendMdiCommand() keep the old halui_old_mode instead of recording the current mode, so halui later restores the wrong mode. In tests/halui/mdi this shows up as "timeout waiting for task mode to get to 3 (it's 2)" (reported by Bertho in #4604) or "get to 2 (it's 1)", depending on which restore the Task stall hits.
Take the DONE decision once, before the restore, and use it for both steps.
commit 8d3e540accaefb6541d414eb946babbb7d3b46c6
Merge: 49119ab8 085f656c
Author: BsAtHome <bertho@vagrearg.org>
Date: Mon Sep 28 22:26:59 2026 +0200
Merge pull request #4593 from grandixximo/halmodule-port-read
halmodule: fix inverted success check in port read() and peek()
commit 183c28026519b8b2a9d7f47c587b8830b41c1aca
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Mon Sep 28 12:16:40 2026 +0200
docs: Update to reflect the HAL API changes.
commit bb026d4c9662199aa08ff0a12a2d7a5496701bf3
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Mon Sep 28 12:35:27 2026 +0200
docs: Update man3 pages after uses_fp arg was removed in HAL API changes.
commit 1458d97bcd70e199a3407ac4bf4cd6a50bcf9eda
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Mon Sep 28 14:24:15 2026 +0200
cppcheck: Fix problems that are detected with cppcheck 2.19+.
commit 085f656c20bfa338796e6e1c4cb1144e2aa0711f
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Sep 28 16:52:05 2026 +1000
halmodule: fix inverted success check in port read() and peek()
hal_port_read() and hal_port_peek() return true when the bytes were copied. The check was inverted, so a successful read or peek returned False, and read() had already consumed the data. Add tests/halmodule/port covering write, peek, peek_commit and read.
commit 284e4efd3acd8f60f862398d2e9624daf44973c8
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 23 12:56:43 2026 +1000
tp: keep the G33 sync origin on the spindle index
When the axis reached synchronized velocity the position-sync loop moved the sync origin to wherever the axis had got to, folding the lead-in ramp lag into the thread's phase. That lag grows with the square of the spindle speed, so the same thread cut at a different RPM landed at a different Z (issue #3455).
Leave the origin at the index and let the tracking loop close the error instead, and warn when the segment is too short for it to do so.
The Technical Info block in the G33 docs described a start point worked out from the spindle speed and the acceleration limits, which the planner never did. It now describes what the planner does, and what lead-in the move needs.
Measured on a sim lathe, K0.1 in/rev, three G33 passes at 240/960/240 rpm in one program. Z offset from the ideal thread was 0.039/0.405/0.039 mm before and is 0.005/0.020/0.005 mm after, so the shift between the two speeds drops from 0.366 mm to 0.015 mm. The residual is half a servo cycle of travel and is linear in speed.
commit dae3be85e1cc2abaf519ae27a26666d4836e5bfd
Author: 85vmh <vasimihalca@gmail.com>
Date: Sat Sep 12 20:52:51 2026 +0200
Add spindle angle offset (D word) for G33 and G76 threading
Why
---
Spindle synchronized motion always starts at the spindle index pulse, so every
threading pass begins at the same angular position. Cutting a multi-start thread
means starting successive passes at a fixed angle past the index instead, and
there was no way to ask for that.
D on G33 and G76 now gives that start angle in degrees. The synchronized move is
held at rest after the index until the spindle has turned through it. D is
optional and defaults to zero, which is the existing behaviour of starting at the
index pulse; a two-start thread is cut by running the program twice, with D0 and
D180.
What changed
------------
Interpreter: interp_check.cc accepts D on G33 and G76, which previously rejected
it as "D word with no G41 ... to use it". convert_straight() and
convert_threading_cycle() read it and pass it to the canon layer. A negative D is
taken as its magnitude rather than rejected -- the value is a delay past the
index and has no direction.
Canon and NML: START_SPEED_FEED_SYNCH() gains an angle_degrees parameter,
defaulted to 0.0 so the interface and its non-task implementations stay source
compatible. EMC_TRAJ_SET_SPINDLESYNC carries angular_offset_degrees, which
reaches the planner through emcTrajSetSpindleSync() and EMCMOT_SET_SPINDLESYNC.
Planner: tpSetSpindleSync() converts degrees to revolutions once and stores it in
tp->spindle.pending_offset; tcSetupState() copies that into each TC as it is
queued, so the passes of a G76 cycle each carry their own value rather than
reading whatever the TP holds when they run. The hold itself is in
tpSyncPositionMode(): spindle.revs resets to 0 at the index pulse, so while it is
below the requested offset the move is held at target_vel 0. On reaching the
angle, spindle.offset is set to the current revs so position mode starts tracking
from zero error there. tpCheckAtSpeed() skips the sync_accel ramp when an offset
is requested, because that ramp exists to catch the axis up to an already-turning
spindle, which is what the hold is there to prevent.
The hold is scoped to one index pulse by tp->spindle.angle_hold_pending, armed
where the index wait is armed and cleared once the angle is reached. This matters
for G76 with an entry taper: such a pass emits three synchronized moves, all
carrying the same angle_offset, and only the first of them follows an index
pulse. Without the flag the later segments also reset spindle.offset, discarding
the value tpCompleteSegment() accumulates and shifting the thread phase part way
through a pass.
Compatibility: the canon signature change is a break in the public interface
tests/interp/compile guards, so use-rs274.cc is updated -- per that test's README
this is noted deliberately. canonmodule.cc spells out its argument list so the
C++ default survives into Python; a bare function pointer would have made the new
argument mandatory and broken every existing three-argument caller.
Docs: the D word is documented for both G33 and G76, including that it defaults
to zero, that a negative value is used as its magnitude, and that values of 360
or more are not reduced. The letter table in overview.adoc gains the second
meaning of D. A note under G33 Technical Info records that a D offset holds the
axis at rest instead of using the usual post-index acceleration compensation.
Testing
-------
tests/interp/g76-d-word (new) runs the interpreter over G33 and G76 with no D,
with D, and with a negative D, and checks what reaches the canon layer. saicanon
prints the angle only when one was asked for, so the expected output of the
existing g33.1 and g76 tests is unchanged.
tests/motion/spindle-angle-offset (new) runs a sim machine with sim_spindle,
whose index pulse resets spindle.0.revs -- the same reset D is measured against.
It samples Z, X, revs and the index pin every servo period and checks that G33
without D starts at the index, that D180 waits half a turn longer, that D-180
behaves identically to D180, that a G76 cycle with D180 starts half a turn later
than an otherwise identical cycle without it, and that both G76 cycles still cut
the programmed pitch. Each angle check is a difference between two passes,
because detecting that the tool has started moving costs a fixed amount of
rotation that only cancels that way.
The new test was confirmed to fail when the hold is disabled. tests/interp and
tests/motion pass in full, 90 tests, with tests/interp/compile skipped as it
already was.
Not covered by the tests
------------------------
The segment scoping described above is not caught by any automated test. It was
confirmed by restoring the unscoped version and rerunning: the test still passes,
because core_sim.hal feeds motor-pos-cmd straight back as motor-pos-fb, so the
simulated axis tracks perfectly and the discrepancy the fault feeds on is
essentially zero. Reproducing it needs a machine, or a sim with a servo model
that has real following error. Reviewers with a lathe are asked to look at a
G76 pass with an entry taper (L1 or L3) and a D word.
tests/interp/compile is still disabled and still does not link, for the unrelated
and pre-existing reason that it is also missing SET_MOTION_CONTROL_MODE. Only the
START_SPEED_FEED_SYNCH signature was brought up to date here.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>