User Tools

Site Tools


bsd:notes:joystick

Joystick Research

  • :!: Joysticks on FreeBSD need to be at /dev/uhid# 1)
  • uhidd by-default does /dev/uvhid#, that can be symlinked to /dev/uhid# or be done automatically with uhidd -H uhid 2)
  • uhidd has a lot of flags in examples for keyboard/mouse/consumer, but a joystick only needs the virtual generic interface with uhidd -h (not all of -kmohs)
  • uhidd has to unbind whatever kernel driver is on the joystick with uhidd -u to take it over
  • :?: Seemingly once uhidd takes control of the original /dev/input/event# device, if it had evdev or joystick forced through xorg.conf that driver gets unloaded according to Xorg.0.log 3)
  • USB devices are by-default put into /dev/uhid# paths with older uhid and usb drivers 4)
  • 2024/09/09: uhidd is required to move game controllers to /dev/uhid# when using usbhid

uhidd

su -
pkg install 'uhidd'
dmesg | grep 'ugen'
uhidd -h -H 'uhid' -u '/dev/ugen0.6'

devd.conf

  • Last updated: 2024/09/13
su -
pkg install 'uhidd'
ee '/usr/local/etc/devd/sidewinder-precision-pro-joystick-uhidd.conf'
notify 0 {
        match "type" "ATTACH";
        match "ugen" "ugen[0-9]+.[0-9]+";
        match "vendor" "0x045e";
        match "product" "0x0008";
        action "/usr/local/sbin/uhidd -h -H uhid -u /dev/$ugen";
};

TODO

  • ld-elf.so.1 %LIBCUSE% error (thread)
su -l
mv '/usr/local/etc/devd/uhidd-devd.conf' '/usr/local/etc/devd/uhidd-devd.conf~'

TODO 2

  • This avoids needing uhidd (connect joystick within 3 seconds)
  • TODO: USB device reset command and devd
su - root -c "sysctl 'hw.usb.usbhid.enable=0' && sleep 3 && sysctl 'hw.usb.usbhid.enable=1'"
1)
flightgear, neverball, seemingly doomsday but it freezes on launch
2)
it assigns a specific uhid# automatically
3)
it sounds like causing evdev to re-probe on the newly-created uhid# device could work? there's a cdev mention with devd -d, but FlightGear shows buttons fine without joystick/evdev binding?
4)
using these older drivers prevents USB multimedia keys from working and presumably would require uhidd to solve; hence use the newer usbhid driver with hw.usb.usbhid.enable=“1” and uhidd as-needed on game controllers
/usr/local/www/wiki/data/pages/bsd/notes/joystick.txt · Last modified: by Sean Rhone