HALUI(1)
π halui β the HAL User Interface π
okay so bestie, welcome to halui, aka the HAL User Interface β this is the HALUI(1) page and we are SO back. if you've ever wanted to run LinuxCNC off a panel full of physical knobs, switches and LEDs instead of, like, a keyboard, this is literally your moment. no cap. ποΈβ¨
πΈ NAME πΈ
halui β observe HAL pins and command LinuxCNC through NML. that's the whole vibe. π
π¦ SYNOPSIS π¦
halui [-ini <path-to-INI>]
β¨ DESCRIPTION β¨
so halui is what you use to build a User Interface out of hardware knobs and switches. it exports a big number of pins (like, an iconic amount), and then it acts accordingly whenever those pins change. you wire your real-world buttons into those pins, and halui does the thing. that's it, that's the whole personality. π
π OPTIONS π
-inifilename β use filename as the configuration file. heads up bestie:haluimust find thenmlfile specified in the INI, and usually that file lives in the same folder as the INI β so it genuinely makes sense to runhaluifrom that folder. π«Ά
π USAGE π
when you run it, halui will export a large number of pins. you connect those to your physical knobs & switches & leds, and when a change is noticed, halui triggers an appropriate event. main character energy fr fr.
halui expects the signals to be debounced, so if you need to (like, bad knob contact type beat) connect the physical button to a HAL debounce filter first. π
π PINS π
π Abort
halui.abortbit in β pin for clearing most errors. (the panic button of the group chat, basically.)
π§ Tool
halui.tool.length-offset.afloat out β current applied tool length offset for the A axishalui.tool.length-offset.bfloat out β current applied tool length offset for the B axishalui.tool.length-offset.cfloat out β current applied tool length offset for the C axishalui.tool.length-offset.ufloat out β current applied tool length offset for the U axishalui.tool.length-offset.vfloat out β current applied tool length offset for the V axishalui.tool.length-offset.wfloat out β current applied tool length offset for the W axishalui.tool.length-offset.xfloat out β current applied tool length offset for the X axishalui.tool.length-offset.yfloat out β current applied tool length offset for the Y axishalui.tool.length-offset.zfloat out β current applied tool length offset for the Z axishalui.tool.diameterfloat out β Current tool diameter, or0if no tool is loaded.halui.tool.numberu32 out β current selected tool
π Spindle
halui.spindle.N.brake-is-onbit out β status pin that tells us if brake is onhalui.spindle.N.brake-offbit in β pin for deactivating the spindle brakehalui.spindle.N.brake-onbit in β pin for activating the spindle brakehalui.spindle.N.decreasebit in β a rising edge on this pin decreases the current spindle speed by100halui.spindle.N.forwardbit in β a rising edge on this pin makes the spindle go forwardhalui.spindle.N.increasebit in β a rising edge on this pin increases the current spindle speed by100halui.spindle.N.is-onbit out β status pin telling if the spindle is onhalui.spindle.N.reversebit in β a rising edge on this pin makes the spindle go reversehalui.spindle.N.runs-backwardbit out β status pin telling if the spindle is running backwardhalui.spindle.N.runs-forwardbit out β status pin telling if the spindle is running forwardhalui.spindle.N.startbit in β a rising edge on this pin starts the spindlehalui.spindle.N.stopbit in β a rising edge on this pin stops the spindle
ποΈ Spindle Override
(SO = spindle override. FO = feed override) β yes bestie, they're different, keep up π
halui.spindle.N.override.count-enablebit in (default:TRUE) β When TRUE, modify spindle override when counts changes.halui.spindle.N.override.countss32 in β counts X scale = spindle override percentagehalui.spindle.N.override.decreasebit in β pin for decreasing the SO (-=scale)halui.spindle.N.override.direct-valuebit in β pin to enable direct spindle override value inputhalui.spindle.N.override.increasebit in β pin for increasing the SO (+=scale)halui.spindle.N.override.resetbit in β pin for resetting the scale SO value (scale=1.0)halui.spindle.N.override.scalefloat in β pin for setting the scale of counts for SOhalui.spindle.N.override.valuefloat out β current FO value
π Program
halui.program.block-delete.is-onbit out β status pin telling that block delete is onhalui.program.block-delete.offbit in β pin for requesting that block delete is offhalui.program.block-delete.onbit in β pin for requesting that block delete is onhalui.program.is-idlebit out β status pin telling that no program is runninghalui.program.is-pausedbit out β status pin telling that a program is pausedhalui.program.is-runningbit out β status pin telling that a program is runninghalui.program.optional-stop.is-onbit out β status pin telling that the optional stop is onhalui.program.optional-stop.offbit in β pin requesting that the optional stop is offhalui.program.optional-stop.onbit in β pin requesting that the optional stop is onhalui.program.pausebit in β pin for pausing a programhalui.program.resumebit in β pin for resuming a programhalui.program.runbit in β pin for running a programhalui.program.stepbit in β pin for stepping in a programhalui.program.stopbit in β pin for stopping a program (note: this pin does the same thing ashalui.abort)
π Mode
halui.mode.autobit in β pin for requesting auto modehalui.mode.is-autobit out β pin for auto mode is onhalui.mode.is-jointbit out β pin showing joint by joint jog mode is onhalui.mode.is-manualbit out β pin for manual mode is onhalui.mode.is-mdibit out β pin for MDI mode is onhalui.mode.is-teleopbit out β pin showing coordinated jog mode is onhalui.mode.jointbit in β pin for requesting joint by joint jog modehalui.mode.manualbit in β pin for requesting manual modehalui.mode.mdibit in β pin for requesting MDI modehalui.mode.teleopbit in β pin for requesting coordinated jog mode
β¨οΈ MDI (optional)
halui.mdi-command-XXbit in βhaluilooks for INI variables named[HALUI]MDI_COMMAND, and exports a pin for each command it finds. When the pin is driven TRUE,haluiruns the specified MDI command.XXis a two digit number starting at00. If no[HALUI]MDI_COMMANDvariables are set in the INI file, nohalui.mdi-command-XXpins will be exported byhalui. (so it's giving optional, and if you don't set it up, the pins literally don't exist. iconic behavior. β¨)
π¨ Mist coolant
halui.mist.is-onbit out β pin for mist is onhalui.mist.offbit in β pin for stopping misthalui.mist.onbit in β pin for starting mist
π Max-velocity
halui.max-velocity.count-enablebit in (default:TRUE) β When True, modify max velocity whenhalui.max-velocity.countschanges.halui.max-velocity.countss32 in β When.count-enableis True,haluichanges the max velocity in response to changes to this pin. It's usually connected to an MPG encoder on an operator's panel or jog pendant. When.count-enableis False,haluiignores this pin.halui.max-velocity.direct-valuebit in β When this pin is True,haluicommands the max velocity directly to (.counts*.scale). When this pin is False,haluicommands the max velocity in a relative way: change max velocity by an amount equal to (change in.counts*.scale).halui.max-velocity.increasebit in β A positive edge (a False to True transition) on this pin increases the max velocity by the value of the.scalepin. (Note thathaluialways responds to this pin, independent of the.count-enablepin.)halui.max-velocity.decreasebit in β A positive edge (a False to True transition) on this pin decreases the max velocity by the value of the.scalepin. (Note thathaluialways responds to this pin, independent of the.count-enablepin.)halui.max-velocity.scalefloat in β This pin controls the scale of changes to the max velocity. Each unit change in.counts, and each positive edge on.increaseand.decrease, changes the max velocity by.scale. The units of the.scalepin are machine-units per second.halui.max-velocity.valuefloat out β Current value for maximum velocity, in machine-units per second.
π Machine
halui.machine.units-per-mmfloat out β pin for machine units-per-mm (inch:1/25.4, mm:1) according to INI file setting:[TRAJ]LINEAR_UNITShalui.machine.is-onbit out β pin for machine is On/Offhalui.machine.offbit in β pin for setting machine Offhalui.machine.onbit in β pin for setting machine On
π’οΈ Lube
halui.lube.is-onbit out β pin for lube is onhalui.lube.offbit in β pin for stopping lubehalui.lube.onbit in β pin for starting lube
π¦Ώ Joint (N = joint number (0 ... num_joints-1))
halui.joint.N.selectbit in β pin for selecting joint Nhalui.joint.N.is-selectedbit out β status pin that joint N is selectedhalui.joint.N.has-faultbit out β status pin telling that joint N has a faulthalui.joint.N.homebit in β pin for homing joint Nhalui.joint.N.is-homedbit out β status pin telling that joint N is homedhalui.joint.N.on-hard-max-limitbit out β status pin telling that joint N is on the positive hardware limithalui.joint.N.on-hard-min-limitbit out β status pin telling that joint N is on the negative hardware limithalui.joint.N.on-soft-max-limitbit out β status pin telling that joint N is on the positive software limithalui.joint.N.on-soft-min-limitbit out β status pin telling that joint N is on the negative software limithalui.joint.N.override-limitsbit out β status pin telling that joint N's limits are temporarily overriddenhalui.joint.N.unhomebit in β pin for unhoming joint Nhalui.joint.selectedu32 out β selected joint number (0...num_joints-1)halui.joint.selected.has-faultbit out β status pin selected joint is faultedhalui.joint.selected.homebit in β pin for homing the selected jointhalui.joint.selected.is-homedbit out β status pin telling that the selected joint is homedhalui.joint.selected.on-hard-max-limitbit out β status pin telling that the selected joint is on the positive hardware limithalui.joint.selected.on-hard-min-limitbit out β status pin telling that the selected joint is on the negative hardware limithalui.joint.selected.on-soft-max-limitbit out β status pin telling that the selected joint is on the positive software limithalui.joint.selected.on-soft-min-limit(bit out) β status pin, and it's telling you that the selected joint is sitting on its negative software limit. like, it's pressed up against the wall bestie πhalui.joint.selected.override-limits(bit out) β status pin saying the selected joint's limits are temporarily overridden πhalui.joint.selected.unhome(bit in) β pin for unhoming the selected joint (yes you can un-home it, we don't judge) π
π¦ Joint jogging π¦
(N = joint number (0 ... num_joints-1))
halui.joint.jog-deadband(float in) β pin for setting the jog analog deadband. Translation: jog analog inputs that are smaller/slower than this (in absolute value) just get ignored. little baby wiggles don't count β¨halui.joint.jog-speed(float in) β pin for setting jog speed for plus/minus jogging πhalui.joint.N.analog(float in) β pin for jogging joint N using a float value (e.g. joystick πΉοΈ). The value, typically set between0.0andΒ±1.0, is used as a jog-speed multiplier.halui.joint.N.increment(float in) β pin for setting the jog increment for joint N when using increment-plus/minushalui.joint.N.increment-minus(bit in) β a rising edge will will make joint N jog in the negative direction by the increment amounthalui.joint.N.increment-plus(bit in) β a rising edge will will make joint N jog in the positive direction by the increment amounthalui.joint.N.minus(bit in) β pin for jogging joint N in negative direction at thehalui.joint.jog-speedvelocityhalui.joint.N.plus(bit in) β pin for jogging joint N in positive direction at thehalui.joint.jog-speedvelocityhalui.joint.selected.increment(float in) β pin for setting the jog increment for the selected joint when using increment-plus/minushalui.joint.selected.increment-minus(bit in) β a rising edge will will make the selected joint jog in the negative direction by the increment amounthalui.joint.selected.increment-plus(bit in) β a rising edge will will make the selected joint jog in the positive direction by the increment amounthalui.joint.selected.minus(bit in) β pin for jogging the selected joint in negative direction at thehalui.joint.jog-speedvelocityhalui.joint.selected.plusβ pin for jogging the selected joint (bit in) in positive direction at thehalui.joint.jog-speedvelocity
π Axis π
(L = axis letter (xyzabcuvw)
halui.axis.L.select(bit in) β pin for selecting axis by letter π€halui.axis.L.is-selected(bit out) β status pin that axis L is selected (main character confirmed π)halui.axis.L.pos-commanded(float out float out) β Commanded axis position in machine coordinateshalui.axis.L.pos-feedback(float out float out) β Feedback axis position in machine coordinateshalui.axis.L.pos-relative(float out float out) β Commanded axis position in relative coordinates
π§ Axis Jogging π§
(L = axis letter (xyzabcuvw)
halui.axis.jog-deadband(float in) β pin for setting jog analog deadband (jog analog inputs smaller/slower than this (in absolute value) are ignored) π«Άhalui.axis.jog-speed(float in) β pin for setting jog speed for plus/minus jogging.halui.axis.L.analog(float in) β pin for jogging the axis L using a float value (e.g. joystick πΉοΈ). The value, typically set between0.0andΒ±1.0, is used as a jog-speed multiplier.halui.axis.L.increment(float in) β pin for setting the jog increment for axis L when using increment-plus/minushalui.axis.L.increment-minus(bit in) β a rising edge will will make axis L jog in the negative direction by the increment amounthalui.axis.L.increment-plus(bit in) β a rising edge will will make axis L jog in the positive direction by the increment amounthalui.axis.L.minus(bit in) β pin for jogging axis L in negative direction at thehalui.axis.jog-speedvelocityhalui.axis.L.plus(bit in) β pin for jogging axis L in positive direction at thehalui.axis.jog-speedvelocityhalui.axis.selected(u32 out) β selected axis (by index:0:x1:y2:z3:a4:b5:cr6:u7:v8:w) πhalui.axis.selected.increment(float in) β pin for setting the jog increment for the selected axis when using increment-plus/minushalui.axis.selected.increment-minus(bit in) β a rising edge will will make the selected axis jog in the negative direction by the increment amounthalui.axis.selected.increment-plus(bit in) β a rising edge will will make the selected axis jog in the positive direction by the increment amounthalui.axis.selected.minus(bit in) β pin for jogging the selected axis in negative direction at thehalui.axis.jog-speedvelocityhalui.axis.selected.plusβ pin for jogging the selected axis (bit in) in positive direction at thehalui.axis.jog-speedvelocity
π§ Flood coolant π§
halui.flood.is-on(bit out) β pin for flood is onhalui.flood.off(bit in) β pin for stopping floodhalui.flood.on(bit in) β pin for starting flood
π Feed Override π
halui.feed-override.count-enable(bit in (default: TRUE)) β WhenTRUE, modify feed override when counts changes.halui.feed-override.counts(s32 in) β counts X scale = feed override percentagehalui.feed-override.decrease(bit in) β pin for decreasing the FO (-=scale)halui.feed-override.direct-value(bit in) β pin to enable direct value feed override inputhalui.feed-override.increase(bit in) β pin for increasing the FO (+=scale)halui.feed-override.reset(bit in) β pin for resetting the FO (scale=1.0)halui.feed-override.scale(float in) β pin for setting the scale on changing the FOhalui.feed-override.value(float out) β current feed override value
π₯ Rapid Override π₯
halui.rapid-override.count-enable(bit in (default: TRUE)) β WhenTRUE, modify rapid override when counts changes.halui.rapid-override.counts(s32 in) β counts X scale = rapid override percentagehalui.rapid-override.decrease(bit in) β pin for decreasing the rapid override (-=scale)halui.rapid-override.direct-value(bit in) β pin to enable direct value rapid override inputhalui.rapid-override.increase(bit in) β pin for increasing the rapid override (+=scale)halui.rapid-override.reset(bit in) β pin for resetting the rapid override (scale=1.0)halui.rapid-override.scale(float in) β pin for setting the scale on changing the rapid overridehalui.rapid-override.value(float out) β current rapid override value
π E-stop π (the panic button, respect her)
halui.estop.activate(bit in) β pin for setting E-stop (LinuxCNC internal) Onhalui.estop.is-activated(bit out) β pin for displaying E-stop state (LinuxCNC internal) On/Offhalui.estop.reset(bit in) β pin for resetting E-stop (LinuxCNC internal) Off
π Homing π
halui.home-all(bit in) β pin for requesting home-all (only available when a valid homing sequence is specified) π₯Ί
π SEE ALSO π
π BUGS π
None known at this time. (iconic behaviour honestly, not a single bug to report β¨)
βοΈ AUTHOR βοΈ
Written by Alex Joni, as part of the LinuxCNC project. Updated by John Thornton
π£ REPORTING BUGS π£
Report bugs at https://github.com/LinuxCNC/linuxcnc/issues
π COPYRIGHT π
Copyright Β© 2006 Alex Joni.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
and that's the whole page bestie, you ate it UP π This was the LinuxCNC Documentation version, dated 2006-07-22, and yes β HALUI(1) is her whole name π
go forth and wire up some pins, mwah π«Άβ¨
π¦ where this page comes from
- 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
- Copyright (c) 2006 Alex Joni
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms