EMC2 Logitech GamePad: Triggger Button Name Change

I just updated EMC2 on the Sherline CNC mill from 2.4.6 to 2.4.7 (which mis-identifies itself as 2.4.6 on the splash screen) and the Axis UI failed to start. A bit of digging shows that the name of Button 1 (the left button in the right-hand quad, clearly labeled 1) has inexplicably changed from btn-trigger to btn-joystick.

Logitech Gamepad Pendant
Logitech Gamepad Pendant

Most likely the change has nothing to do with EMC2, because (I think) those names bubble up from the HID driver that actually talks to the hardware and that stuff has also been updated; this is all on Ubuntu 10.04 LTS. But in any event, the name is now different.

That requires a tweak to the Eagle schematics, which will regenerate Logitech_Gamepad.hal, but you can just edit the latter file and change btn-trigger to btn-joystick.

As nearly as I can tell, changing the pin name in the Logitech library component, saving the library, then updating the library in the schematic doesn’t do squat. Evidently, Eagle keeps track of which components you’ve used and won’t update them unless you do some manual gymnatistics, which makes a certain amount of sense.

That means one must:

  • Delete both “gates” of the old component (INPUT.0.BUTTONS first, then INPUT.0)
  • Make sure you’re on Page 2 where the basic gate will go
  • Add the revised LOGITECH_DUAL_ACTION_GAMEPAD to get the INPUT.1 “gate”
  • Rename it to INPUT.0
  • Use Move to jiggle it around a bit to ensure its pins get hitched up to the existing nets
  • Switch to Page 1 where the button nets lie in wait
  • Type invoke input.0 into the Eagle command line
  • Pick -BUTTONS from the list to select that “gate”
  • Position that gate appropriately
  • Use Move to jiggle the gate
  • Save everything
  • Run the Eagle2Hal ULP to get a new HAL output file
  • Put that file where it’ll do the most good

There, now, wasn’t that obvious?

The modified Logitech_Gamepad.hal file:

# HAL config file automatically generated by Eagle-CAD ULP:
# [/mnt/bulkdata/Project Files/eagle/ulp/hal-write-2.4.ulp]
# (C) Martin Schoeneck.de 2008
# Mods Ed Nisley 2010
# Path        [/mnt/bulkdata/Project Files/eagle/projects/EMC2 HAL Configuration/]
# ProjectName [Logitech Gamepad - 2.4.7]
# File name   [/mnt/bulkdata/Project Files/eagle/projects/EMC2 HAL Configuration/Logitech Gamepad - 2.4.7.hal]
# Created     [10:40:31 11-Nov-2011]

####################################################
# Load realtime and userspace modules
loadrt constant		count=16
loadrt and2		count=17
loadrt flipflop		count=4
loadrt mux2		count=5
loadrt mux4		count=1
loadrt not		count=8
loadrt or2		count=10
loadrt scale		count=7
loadrt timedelay		count=1
loadrt toggle		count=1
loadrt wcomp		count=6

####################################################
# Hook functions into threads
addf toggle.0		servo-thread
addf wcomp.1		servo-thread
addf wcomp.2		servo-thread
addf wcomp.3		servo-thread
addf and2.0		servo-thread
addf and2.4		servo-thread
addf and2.3		servo-thread
addf and2.2		servo-thread
addf and2.1		servo-thread
addf constant.6		servo-thread
addf constant.5		servo-thread
addf constant.4		servo-thread
addf constant.3		servo-thread
addf constant.2		servo-thread
addf constant.1		servo-thread
addf constant.0		servo-thread
addf constant.7		servo-thread
addf constant.8		servo-thread
addf scale.1		servo-thread
addf scale.2		servo-thread
addf scale.3		servo-thread
addf mux4.0		servo-thread
addf mux2.0		servo-thread
addf scale.4		servo-thread
addf scale.0		servo-thread
addf wcomp.5		servo-thread
addf wcomp.4		servo-thread
addf wcomp.0		servo-thread
addf flipflop.1		servo-thread
addf flipflop.0		servo-thread
addf and2.5		servo-thread
addf and2.6		servo-thread
addf and2.7		servo-thread
addf and2.8		servo-thread
addf flipflop.2		servo-thread
addf flipflop.3		servo-thread
addf or2.4		servo-thread
addf or2.8		servo-thread
addf or2.7		servo-thread
addf or2.6		servo-thread
addf or2.5		servo-thread
addf or2.3		servo-thread
addf or2.2		servo-thread
addf or2.1		servo-thread
addf or2.0		servo-thread
addf not.1		servo-thread
addf not.2		servo-thread
addf not.3		servo-thread
addf not.4		servo-thread
addf not.5		servo-thread
addf not.6		servo-thread
addf not.7		servo-thread
addf not.0		servo-thread
addf constant.9		servo-thread
addf mux2.1		servo-thread
addf mux2.2		servo-thread
addf mux2.3		servo-thread
addf mux2.4		servo-thread
addf constant.10		servo-thread
addf constant.11		servo-thread
addf scale.5		servo-thread
addf scale.6		servo-thread
addf constant.12		servo-thread
addf constant.13		servo-thread
addf timedelay.0		servo-thread
addf constant.14		servo-thread
addf constant.15		servo-thread
addf and2.16		servo-thread
addf and2.15		servo-thread
addf and2.14		servo-thread
addf and2.13		servo-thread
addf and2.12		servo-thread
addf and2.11		servo-thread
addf and2.10		servo-thread
addf and2.9		servo-thread
addf or2.9		servo-thread

####################################################
# Set parameters

####################################################
# Set constants
setp constant.0.value	+0.02
setp constant.1.value	-0.02
setp constant.2.value	60
setp constant.3.value	1.00
setp constant.4.value	0.10
setp constant.5.value	0.50
setp constant.6.value	0.10
setp constant.7.value	+0.5
setp constant.8.value	-0.5
setp constant.9.value	0.0
setp constant.10.value	[TRAJ]MAX_LINEAR_VELOCITY
setp constant.11.value	[TRAJ]MAX_ANGULAR_VELOCITY
setp constant.12.value	-1.0
setp constant.13.value	0.1
setp constant.14.value	0.020
setp constant.15.value	0.000

####################################################
# Connect Modules with nets
net a-button-minus or2.2.in0 input.0.btn-joystick and2.15.in0
net a-button-plus or2.2.in1 input.0.btn-thumb2 and2.16.in0
net a-buttons-active or2.2.out or2.3.in0 or2.4.in1
net a-disable not.7.out and2.5.in1
net a-enable or2.4.in0 flipflop.3.out not.7.in mux2.4.sel
net a-jog wcomp.2.in input.0.abs-z-position mux2.4.in1
net a-knob-active not.2.out and2.7.in1
net a-knob-inactive wcomp.2.out not.2.in and2.6.in1
net a-select and2.8.in0 and2.7.out
net a-set flipflop.3.set and2.8.out
net angular_motion or2.4.out mux2.0.sel
net any-buttons-active mux4.0.sel0 or2.8.out
net az-buttons-active or2.3.out or2.8.in1 or2.9.in0
net az-reset flipflop.2.reset and2.6.out flipflop.3.reset
net button-crawl scale.4.out mux4.0.in3
net button-fast scale.2.out mux4.0.in1 scale.4.in
net jog-crawl toggle.0.out mux4.0.sel1
net jog-speed halui.jog-speed mux4.0.out
net knob-crawl mux4.0.in2 scale.3.out
net knob-fast mux4.0.in0 scale.1.out scale.3.in
net n_1 constant.10.out mux2.0.in0
net n_2 and2.0.in0 input.0.btn-top2
net n_3 and2.0.in1 input.0.btn-base
net n_4 and2.0.out halui.abort
net n_5 halui.mode.manual input.0.btn-base3
net n_6 wcomp.0.max wcomp.1.max wcomp.2.max wcomp.3.max constant.0.out
net n_7 halui.program.resume input.0.btn-base4
net n_8 wcomp.0.min wcomp.1.min wcomp.2.min wcomp.3.min constant.1.out
net n_9 mux2.0.in1 constant.11.out
net n_10 constant.12.out scale.5.gain scale.6.gain
net n_11 or2.0.in0 input.0.btn-base5
net n_12 or2.0.in1 input.0.btn-base6
net n_13 constant.9.out mux2.1.in0 mux2.2.in0 mux2.3.in0 mux2.4.in0
net n_14 mux2.1.out halui.jog.0.analog
net n_15 toggle.0.in or2.0.out
net n_16 constant.2.out scale.0.gain
net n_17 constant.5.out scale.1.gain
net n_18 constant.3.out scale.2.gain
net n_19 constant.4.out scale.3.gain
net n_20 scale.4.gain constant.6.out
net n_21 halui.jog.1.analog mux2.2.out
net n_22 mux2.2.in1 scale.5.out
net n_23 scale.6.out mux2.3.in1
net n_24 constant.13.out halui.jog-deadband
net n_25 wcomp.4.max constant.7.out wcomp.5.max
net n_26 constant.8.out wcomp.4.min wcomp.5.min
net n_27 mux2.3.out halui.jog.2.analog
net n_28 halui.jog.3.analog mux2.4.out
net n_29 timedelay.0.out and2.9.in1 and2.10.in1 and2.12.in1 and2.11.in1 and2.13.in1 and2.14.in1 and2.16.in1 and2.15.in1
net n_30 and2.9.out halui.jog.0.minus
net n_31 or2.9.out timedelay.0.in
net n_32 constant.14.out timedelay.0.on-delay
net n_33 constant.15.out timedelay.0.off-delay
net n_34 and2.10.out halui.jog.0.plus
net n_35 and2.11.out halui.jog.1.minus
net n_36 halui.jog.1.plus and2.12.out
net n_37 and2.13.out halui.jog.2.minus
net n_38 and2.14.out halui.jog.2.plus
net n_39 and2.15.out halui.jog.3.minus
net n_40 and2.16.out halui.jog.3.plus
net vel-per-minute scale.0.out scale.1.in scale.2.in
net vel-per-second mux2.0.out scale.0.in
net x-buttons-active or2.7.in0 or2.5.out
net x-disable not.4.out and2.4.in1
net x-enable not.4.in flipflop.0.out mux2.1.sel
net x-hat-jog wcomp.4.in input.0.abs-hat0x-position
net x-hat-minus wcomp.4.under or2.5.in1 and2.9.in0
net x-hat-plus or2.5.in0 wcomp.4.over and2.10.in0
net x-jog wcomp.0.in input.0.abs-x-position mux2.1.in1
net x-knob-active not.0.out and2.1.in0
net x-knob-inactive wcomp.0.out not.0.in and2.2.in0 and2.3.in0
net x-set and2.1.out flipflop.0.set
net xy-buttons-active or2.7.out or2.8.in0 or2.9.in1
net xy-reset flipflop.0.reset and2.2.out flipflop.1.reset
net y-buttons-active or2.6.out or2.7.in1
net y-disable not.5.out and2.1.in1
net y-enable flipflop.1.out not.5.in mux2.2.sel
net y-hat-jog wcomp.5.in input.0.abs-hat0y-position
net y-hat-minus wcomp.5.under or2.6.in1 and2.12.in0
net y-hat-plus or2.6.in0 wcomp.5.over and2.11.in0
net y-jog wcomp.1.in input.0.abs-y-position scale.5.in
net y-knob-active not.1.out and2.3.in1
net y-knob-inactive not.1.in wcomp.1.out and2.2.in1
net y-select and2.4.in0 and2.3.out
net y-set flipflop.1.set and2.4.out
net z-button-minus or2.1.in0 input.0.btn-thumb and2.13.in0
net z-button-plus or2.1.in1 input.0.btn-top and2.14.in0
net z-buttons-active or2.1.out or2.3.in1
net z-disable not.6.out and2.8.in1
net z-enable not.6.in flipflop.2.out mux2.3.sel
net z-jog wcomp.3.in input.0.abs-rz-position scale.6.in
net z-knob-active not.3.out and2.5.in0
net z-knob-inactive not.3.in wcomp.3.out and2.7.in0 and2.6.in0
net z-set and2.5.out flipflop.2.set