After studing Manfredi's and Paul's joypad examples and after some hints from Alex Joni I was able to add a jog function to a joypad with little coding. The axis jog at a proportional speed to how far you push the stick and it is super easy to set up. I placed all the code in my postgui.hal file except the first line.That one was put in my main .hal file. This way the pins have been created by the time you get to the postgui.hal file and everything works. If your adding functions like or2 etc and you all ready have some in use just adjust the count and reference number to suit your configuration.
I: Bus=0003 Vendor=046d Product=c216 Version=0300 N: Name="Logitech Logitech Dual Action" P: Phys=usb-0000:00:03.2-2/input0 S: Sysfs=/class/input/input3 H: Handlers=event3 js0 B: EV=b B: KEY=fff 0 0 0 0 0 0 0 0 0 B: ABS=30027
# for remote joypad loadusr -W hal_input -KRAL Dual
HALUI = halui
In my case the joypad was named "Logitech Logitech Dual Action". Pick one of the names that is unique and use it.
If for example you have a Logitech mouse you won't want to use "Logitech" as the name for the hal_input.
Also, if you put TWO names in the line after the "-KRAL" you will get two copies of the input and you don't want that.
Add the following line to your postgui.hal file and use a number that makes sense for your machine. The number is units per minute. If you use this line skip the rest of this section. If you use the rest of this section skip this line!
setp halui.jog-speed 10
This feature makes the joypad safer to use as you must press a button before the joystick will move the machine. This is my preferred way to use it.
In your postgui.hal file add the following lines
loadrt or2 count=2 loadrt mux4 count=1
addf or2.0 servo-thread addf or2.1 servo-thread addf mux4.0 servo-thread
# set the jog speed for the joypad again use numbers that make sense for your machine setp mux4.0.in0 0 # this one must be 0 to prevent motion unless a button is pressed setp mux4.0.in1 25 setp mux4.0.in2 100 setp mux4.0.in3 200
# the following does the magic of setting the jog speeds net remote-speed-slow or2.0.in0 input.0.btn-joystick net remote-speed-medium or2.1.in0 input.0.btn-thumb net remote-speed-fast or2.0.in1 or2.1.in1 input.0.btn-thumb2
net joy-speed-1 mux4.0.sel0 <= or2.0.out net joy-speed-2 mux4.0.sel1 <= or2.1.out net joy-speed-final halui.jog-speed <= mux4.0.out
net joy-x-jog halui.jog.0.analog <= input.0.abs-x-position net joy-y-jog halui.jog.1.analog <= input.0.abs-y-position net joy-z-jog halui.jog.2.analog <= input.0.abs-rz-position
setp input.0.abs-y-scale -127.5 setp input.0.abs-rz-scale -127.5
2 You must press and hold a number button then move the joystick to get movement. Once it starts moving you can release the number, but as soon as you stop you have to press the number again before any movement will happen.
This is the joypad I used
If your system won't recognize the joypad you might have to look at hal_input man page and perhaps modify the permissions to access the device. Prepared a one line file as per the description in the man page.
SUBSYSTEM=="input", mode="0660", group="plugdev"
Name the file 51-plugdev.rules and save it in /etc/udev/rules.d
Enjoy Big John T