HALUI(1)

πŸ“¦
version 2.9.4 Β· 2 versions
, in debian trixie, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– 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 πŸŽ€

  • -ini filename β€” use filename as the configuration file. heads up bestie: halui must find the nml file specified in the INI, and usually that file lives in the same folder as the INI β€” so it genuinely makes sense to run halui from 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.abort bit in β€” pin for clearing most errors. (the panic button of the group chat, basically.)

πŸ”§ Tool

  • halui.tool.length-offset.a float out β€” current applied tool length offset for the A axis
  • halui.tool.length-offset.b float out β€” current applied tool length offset for the B axis
  • halui.tool.length-offset.c float out β€” current applied tool length offset for the C axis
  • halui.tool.length-offset.u float out β€” current applied tool length offset for the U axis
  • halui.tool.length-offset.v float out β€” current applied tool length offset for the V axis
  • halui.tool.length-offset.w float out β€” current applied tool length offset for the W axis
  • halui.tool.length-offset.x float out β€” current applied tool length offset for the X axis
  • halui.tool.length-offset.y float out β€” current applied tool length offset for the Y axis
  • halui.tool.length-offset.z float out β€” current applied tool length offset for the Z axis
  • halui.tool.diameter float out β€” Current tool diameter, or 0 if no tool is loaded.
  • halui.tool.number u32 out β€” current selected tool

πŸŒ€ Spindle

  • halui.spindle.N.brake-is-on bit out β€” status pin that tells us if brake is on
  • halui.spindle.N.brake-off bit in β€” pin for deactivating the spindle brake
  • halui.spindle.N.brake-on bit in β€” pin for activating the spindle brake
  • halui.spindle.N.decrease bit in β€” a rising edge on this pin decreases the current spindle speed by 100
  • halui.spindle.N.forward bit in β€” a rising edge on this pin makes the spindle go forward
  • halui.spindle.N.increase bit in β€” a rising edge on this pin increases the current spindle speed by 100
  • halui.spindle.N.is-on bit out β€” status pin telling if the spindle is on
  • halui.spindle.N.reverse bit in β€” a rising edge on this pin makes the spindle go reverse
  • halui.spindle.N.runs-backward bit out β€” status pin telling if the spindle is running backward
  • halui.spindle.N.runs-forward bit out β€” status pin telling if the spindle is running forward
  • halui.spindle.N.start bit in β€” a rising edge on this pin starts the spindle
  • halui.spindle.N.stop bit 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-enable bit in (default: TRUE) β€” When TRUE, modify spindle override when counts changes.
  • halui.spindle.N.override.counts s32 in β€” counts X scale = spindle override percentage
  • halui.spindle.N.override.decrease bit in β€” pin for decreasing the SO (-=scale)
  • halui.spindle.N.override.direct-value bit in β€” pin to enable direct spindle override value input
  • halui.spindle.N.override.increase bit in β€” pin for increasing the SO (+=scale)
  • halui.spindle.N.override.reset bit in β€” pin for resetting the scale SO value (scale=1.0)
  • halui.spindle.N.override.scale float in β€” pin for setting the scale of counts for SO
  • halui.spindle.N.override.value float out β€” current FO value

πŸ“œ Program

  • halui.program.block-delete.is-on bit out β€” status pin telling that block delete is on
  • halui.program.block-delete.off bit in β€” pin for requesting that block delete is off
  • halui.program.block-delete.on bit in β€” pin for requesting that block delete is on
  • halui.program.is-idle bit out β€” status pin telling that no program is running
  • halui.program.is-paused bit out β€” status pin telling that a program is paused
  • halui.program.is-running bit out β€” status pin telling that a program is running
  • halui.program.optional-stop.is-on bit out β€” status pin telling that the optional stop is on
  • halui.program.optional-stop.off bit in β€” pin requesting that the optional stop is off
  • halui.program.optional-stop.on bit in β€” pin requesting that the optional stop is on
  • halui.program.pause bit in β€” pin for pausing a program
  • halui.program.resume bit in β€” pin for resuming a program
  • halui.program.run bit in β€” pin for running a program
  • halui.program.step bit in β€” pin for stepping in a program
  • halui.program.stop bit in β€” pin for stopping a program (note: this pin does the same thing as halui.abort)

πŸ”€ Mode

  • halui.mode.auto bit in β€” pin for requesting auto mode
  • halui.mode.is-auto bit out β€” pin for auto mode is on
  • halui.mode.is-joint bit out β€” pin showing joint by joint jog mode is on
  • halui.mode.is-manual bit out β€” pin for manual mode is on
  • halui.mode.is-mdi bit out β€” pin for MDI mode is on
  • halui.mode.is-teleop bit out β€” pin showing coordinated jog mode is on
  • halui.mode.joint bit in β€” pin for requesting joint by joint jog mode
  • halui.mode.manual bit in β€” pin for requesting manual mode
  • halui.mode.mdi bit in β€” pin for requesting MDI mode
  • halui.mode.teleop bit in β€” pin for requesting coordinated jog mode

⌨️ MDI (optional)

  • halui.mdi-command-XX bit in β€” halui looks for INI variables named [HALUI]MDI_COMMAND, and exports a pin for each command it finds. When the pin is driven TRUE, halui runs the specified MDI command. XX is a two digit number starting at 00. If no [HALUI]MDI_COMMAND variables are set in the INI file, no halui.mdi-command-XX pins will be exported by halui. (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-on bit out β€” pin for mist is on
  • halui.mist.off bit in β€” pin for stopping mist
  • halui.mist.on bit in β€” pin for starting mist

πŸš€ Max-velocity

  • halui.max-velocity.count-enable bit in (default: TRUE) β€” When True, modify max velocity when halui.max-velocity.counts changes.
  • halui.max-velocity.counts s32 in β€” When .count-enable is True, halui changes 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-enable is False, halui ignores this pin.
  • halui.max-velocity.direct-value bit in β€” When this pin is True, halui commands the max velocity directly to (.counts * .scale). When this pin is False, halui commands the max velocity in a relative way: change max velocity by an amount equal to (change in .counts * .scale).
  • halui.max-velocity.increase bit in β€” A positive edge (a False to True transition) on this pin increases the max velocity by the value of the .scale pin. (Note that halui always responds to this pin, independent of the .count-enable pin.)
  • halui.max-velocity.decrease bit in β€” A positive edge (a False to True transition) on this pin decreases the max velocity by the value of the .scale pin. (Note that halui always responds to this pin, independent of the .count-enable pin.)
  • halui.max-velocity.scale float in β€” This pin controls the scale of changes to the max velocity. Each unit change in .counts, and each positive edge on .increase and .decrease, changes the max velocity by .scale. The units of the .scale pin are machine-units per second.
  • halui.max-velocity.value float out β€” Current value for maximum velocity, in machine-units per second.

🏭 Machine

  • halui.machine.units-per-mm float out β€” pin for machine units-per-mm (inch:1/25.4, mm:1) according to INI file setting: [TRAJ]LINEAR_UNITS
  • halui.machine.is-on bit out β€” pin for machine is On/Off
  • halui.machine.off bit in β€” pin for setting machine Off
  • halui.machine.on bit in β€” pin for setting machine On

πŸ›’οΈ Lube

  • halui.lube.is-on bit out β€” pin for lube is on
  • halui.lube.off bit in β€” pin for stopping lube
  • halui.lube.on bit in β€” pin for starting lube

🦿 Joint (N = joint number (0 ... num_joints-1))

  • halui.joint.N.select bit in β€” pin for selecting joint N
  • halui.joint.N.is-selected bit out β€” status pin that joint N is selected
  • halui.joint.N.has-fault bit out β€” status pin telling that joint N has a fault
  • halui.joint.N.home bit in β€” pin for homing joint N
  • halui.joint.N.is-homed bit out β€” status pin telling that joint N is homed
  • halui.joint.N.on-hard-max-limit bit out β€” status pin telling that joint N is on the positive hardware limit
  • halui.joint.N.on-hard-min-limit bit out β€” status pin telling that joint N is on the negative hardware limit
  • halui.joint.N.on-soft-max-limit bit out β€” status pin telling that joint N is on the positive software limit
  • halui.joint.N.on-soft-min-limit bit out β€” status pin telling that joint N is on the negative software limit
  • halui.joint.N.override-limits bit out β€” status pin telling that joint N's limits are temporarily overridden
  • halui.joint.N.unhome bit in β€” pin for unhoming joint N
  • halui.joint.selected u32 out β€” selected joint number (0 ... num_joints-1)
  • halui.joint.selected.has-fault bit out β€” status pin selected joint is faulted
  • halui.joint.selected.home bit in β€” pin for homing the selected joint
  • halui.joint.selected.is-homed bit out β€” status pin telling that the selected joint is homed
  • halui.joint.selected.on-hard-max-limit bit out β€” status pin telling that the selected joint is on the positive hardware limit
  • halui.joint.selected.on-hard-min-limit bit out β€” status pin telling that the selected joint is on the negative hardware limit
  • halui.joint.selected.on-soft-max-limit bit out β€” status pin telling that the selected joint is on the positive software limit
  • halui.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 between 0.0 and Β±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/minus
  • halui.joint.N.increment-minus (bit in) β€” a rising edge will will make joint N jog in the negative direction by the increment amount
  • halui.joint.N.increment-plus (bit in) β€” a rising edge will will make joint N jog in the positive direction by the increment amount
  • halui.joint.N.minus (bit in) β€” pin for jogging joint N in negative direction at the halui.joint.jog-speed velocity
  • halui.joint.N.plus (bit in) β€” pin for jogging joint N in positive direction at the halui.joint.jog-speed velocity
  • halui.joint.selected.increment (float in) β€” pin for setting the jog increment for the selected joint when using increment-plus/minus
  • halui.joint.selected.increment-minus (bit in) β€” a rising edge will will make the selected joint jog in the negative direction by the increment amount
  • halui.joint.selected.increment-plus (bit in) β€” a rising edge will will make the selected joint jog in the positive direction by the increment amount
  • halui.joint.selected.minus (bit in) β€” pin for jogging the selected joint in negative direction at the halui.joint.jog-speed velocity
  • halui.joint.selected.plus β€” pin for jogging the selected joint (bit in) in positive direction at the halui.joint.jog-speed velocity

🌈 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 coordinates
  • halui.axis.L.pos-feedback (float out float out) β€” Feedback axis position in machine coordinates
  • halui.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 between 0.0 and Β±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/minus
  • halui.axis.L.increment-minus (bit in) β€” a rising edge will will make axis L jog in the negative direction by the increment amount
  • halui.axis.L.increment-plus (bit in) β€” a rising edge will will make axis L jog in the positive direction by the increment amount
  • halui.axis.L.minus (bit in) β€” pin for jogging axis L in negative direction at the halui.axis.jog-speed velocity
  • halui.axis.L.plus (bit in) β€” pin for jogging axis L in positive direction at the halui.axis.jog-speed velocity
  • halui.axis.selected (u32 out) β€” selected axis (by index: 0:x 1:y 2:z 3:a 4:b 5:cr 6:u 7:v 8:w) πŸ“‡
  • halui.axis.selected.increment (float in) β€” pin for setting the jog increment for the selected axis when using increment-plus/minus
  • halui.axis.selected.increment-minus (bit in) β€” a rising edge will will make the selected axis jog in the negative direction by the increment amount
  • halui.axis.selected.increment-plus (bit in) β€” a rising edge will will make the selected axis jog in the positive direction by the increment amount
  • halui.axis.selected.minus (bit in) β€” pin for jogging the selected axis in negative direction at the halui.axis.jog-speed velocity
  • halui.axis.selected.plus β€” pin for jogging the selected axis (bit in) in positive direction at the halui.axis.jog-speed velocity

πŸ’§ Flood coolant πŸ’§

  • halui.flood.is-on (bit out) β€” pin for flood is on
  • halui.flood.off (bit in) β€” pin for stopping flood
  • halui.flood.on (bit in) β€” pin for starting flood

πŸ“ Feed Override πŸ“

  • halui.feed-override.count-enable (bit in (default: TRUE)) β€” When TRUE, modify feed override when counts changes.
  • halui.feed-override.counts (s32 in) β€” counts X scale = feed override percentage
  • halui.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 input
  • halui.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 FO
  • halui.feed-override.value (float out) β€” current feed override value

πŸ”₯ Rapid Override πŸ”₯

  • halui.rapid-override.count-enable (bit in (default: TRUE)) β€” When TRUE, modify rapid override when counts changes.
  • halui.rapid-override.counts (s32 in) β€” counts X scale = rapid override percentage
  • halui.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 input
  • halui.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 override
  • halui.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) On
  • halui.estop.is-activated (bit out) β€” pin for displaying E-stop state (LinuxCNC internal) On/Off
  • halui.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 πŸ‘€

axis(1), iocontrol(1)

πŸ› 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 Β© 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