SHUTTLE(1)
β¨ SHUTTLE β¨
okay bestie, gather round, because this one is a whole vibe π
it lives in the HAL User's Manual, and it's called SHUTTLE(1) β yes, all caps, main character energy only π₯
π¦ NAME π¦
shuttle β control HAL pins with the ShuttleXpress, ShuttlePRO, and ShuttlePRO2 device made by Contour Design. periodt.
πΈ SYNOPSIS πΈ
loadusr shuttle [DEVICE ...]
that's it, that's the whole summoning ritual β¨
π DESCRIPTION π
so shuttle is a non-realtime HAL component, and what it does is interface Contour Design's ShuttleXpress, ShuttlePRO, and ShuttlePRO2 devices with LinuxCNC's HAL. it's giving matchmaker, honestly π«Ά
if the driver is started without command-line arguments, it will probe all /dev/hidraw* device files for Shuttle devices, and use all devices found. if it is started with command-line arguments, it will only probe the devices specified. no cap.
now let's talk about the devices themselves, because they are each a little icon π
- the ShuttleXpress has five momentary buttons, a 10 counts/revolution jog wheel with detents, and a 15-position spring-loaded outer wheel that returns to center when released.
- the ShuttlePRO has 13 momentary buttons, a 10 counts/revolution jog wheel with detents, and a 15-position spring-loaded outer wheel that returns to center when released.
- the ShuttlePRO2 has 15 momentary buttons, a 10 counts/revolution jog wheel with detents, and a 15-position spring-loaded outer wheel that returns to center when released.
likeβ¦ the wheel math is identical across all three, only the button count is doing the growing π
π UDEV π
the shuttle driver needs read permission to the Shuttle devices' /dev/hidraw* device files. the way you do that is by adding a file /etc/udev/rules.d/99-shuttle.rules, with the following contents:
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0b33", ATTRS{idProduct}=="0020", MODE="0444"
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="05f3", ATTRS{idProduct}=="0240", MODE="0444"
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0b33", ATTRS{idProduct}=="0030", MODE="0444"
the LinuxCNC Debian package installs an appropriate udev file automatically, but if you are building LinuxCNC from source and are not using the Debian packaging, you'll need to install this file by hand. π
and if you install the file by hand, you'll also need to tell udev to reload its rules files by running udevadm control --reload-rules. don't skip this step bestie, it's the "press send" of the whole operation π¨
β οΈ A warning about the Jog Wheel β οΈ
okay this part is important so listen up π«’
the Shuttle devices have an internal 8-bit counter for the current jog-wheel position. the shuttle driver can not know this value until the Shuttle device sends its first event. when the first event comes into the driver, the driver uses the device's reported jog-wheel position to initialize counts to 0.
which means: if the first event is generated by a jog-wheel move, that first move will be lost. π gone. never happened. rip to that one click.
but here's the slay part β any user interaction with the Shuttle device will generate an event, informing the driver of the jog-wheel position. so if you (for example) push one of the buttons at startup, the jog-wheel will work fine and notice the first click. little ritual, big payoff β¨
π Pins π
all HAL pin names are prefixed with shuttle followed by the index of the device (the order in which the driver found them), for example "shuttle.0" or "shuttle.2". so like, the vibes are numbered π§
(bit out) (prefix).button-(number)(bit out) (prefix).button-(number)-notβ the momentary buttons.(number)identifies which button corresponds to the HAL pin. thebutton-(number)pins are True when the button is pushed, and thebutton-(number)-notpins are True when the button is not pushed.(s32 out) (prefix).countsβ accumulated counts from the jog wheel (the inner wheel). π(s32 out) (prefix).spring-wheel-s32β the current deflection of the spring-wheel (the outer wheel). it's0at rest, and ranges from-7at the counter-clockwise extreme to+7at the clockwise extreme.(float out) (prefix).spring-wheel-fβ the current deflection of the spring-wheel (the outer wheel). it's0.0at rest,-1.0at the counter-clockwise extreme, and+1.0at the clockwise extreme. (the Shuttle devices report the spring-wheel position as an integer from-7to+7, so this pin reports only 15 discrete values in its range.) lowkey a glow-down in resolution but we still love her π
and that's the whole page, bestie!! π this beauty comes to you from the LinuxCNC Documentation, dated 2011-01-13 β old money, timeless energy, still eating π β¨ bye!! ππ¦
π¦ where this page comes from
- debian bookworm: linuxcnc-uspace 2.9.0~pre1+git20230208.f1270d6ed7-1+deb12u2 Β· GFDL-1.1-or-later
- debian trixie: linuxcnc-uspace 1:2.9.4-2+deb13u1 Β· GFDL-1.1-or-later
- ubuntu questing: linuxcnc-uspace 1:2.9.4-2ubuntu2
- ubuntu resolute: linuxcnc-uspace 1:2.9.4-2ubuntu4 Β· GFDL-1.1-or-later
- ubuntu stonking: linuxcnc-uspace 1:2.9.4-2ubuntu4 Β· GFDL-1.1-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms