97 lines
3.3 KiB
Plaintext
97 lines
3.3 KiB
Plaintext
|
FreeBSD joystick support
|
||
|
------------------------
|
||
|
|
||
|
FreeBSD supports two flavors of joysticks: analog and USB. By default,
|
||
|
non-root users do not have access to these devices on FreeBSD, and the
|
||
|
required devices may not even be created yet. Please browse the below
|
||
|
notes before writing to the plib mailing list.
|
||
|
|
||
|
Contents of this file:
|
||
|
-----------
|
||
|
Analog joysticks
|
||
|
USB joysticks
|
||
|
Testing the joysticks
|
||
|
Compiling and linking
|
||
|
|
||
|
Analog joysticks
|
||
|
----------------
|
||
|
|
||
|
Plib uses the joy(4) interface to analog joysticks. You will need to
|
||
|
make sure the device files exist:
|
||
|
ls -l /dev/joy*
|
||
|
|
||
|
If they do not yet exist, create them (logged in as root):
|
||
|
cd /dev
|
||
|
sh MAKEDEV joy
|
||
|
|
||
|
By default, they will have permissions that do not allow unprivileged
|
||
|
users access to them:
|
||
|
crw-r----- 1 root operator 51, 0 Aug 30 16:59 joy0
|
||
|
crw-r----- 1 root operator 51, 1 Aug 30 16:59 joy1
|
||
|
|
||
|
You may wish to consider making the devices world read/writable:
|
||
|
chmod a+rw /dev/joy*
|
||
|
|
||
|
Users of xdm(1) or any of its more modern successors may wish to look
|
||
|
into GiveConsole and TakeConsole or its equivalent.
|
||
|
|
||
|
If you do not have a joystick driver compiled into you kernel, you can
|
||
|
load one dynamically with the command
|
||
|
kldload joy
|
||
|
When in doubt, check the FreeBSD handbook about making sure this driver
|
||
|
is loaded every time you reboot.
|
||
|
|
||
|
|
||
|
USB joysticks
|
||
|
-------------
|
||
|
|
||
|
Plib uses the usbhid(3) interface to USB joysticks. Joysticks will show
|
||
|
up as generic USB Human Interface Devices (uhid). Because the USB design
|
||
|
allows an almost unlimited number of USB buses and USB devices, you should
|
||
|
make sure you have enough devices in /dev to deal with your devices.
|
||
|
When in doubt, create a few extra to make sure. If you have insufficient
|
||
|
USB or uhid devices, your joystick may not appear at all, or it may
|
||
|
disappear if you connect your USB devices in a different order.
|
||
|
Fortunately, device nodes are free. For example, you might see this:
|
||
|
ls -al /dev/usb* /dev/uhid*
|
||
|
crw-rw---- 1 root operator 108, 255 Apr 12 01:44 /dev/usb
|
||
|
crw-rw---- 1 root operator 108, 0 Apr 12 01:44 /dev/usb0
|
||
|
crw-rw---- 1 root operator 122, 0 Apr 12 01:44 /dev/uhid0
|
||
|
|
||
|
This shows you have one usb interface (/dev/usb itself doesn't count), and
|
||
|
one uhid device. Make a few extra with
|
||
|
cd /dev
|
||
|
sh MAKEDEV usb0 usb1 usb2 usb3 uhid0 uhid1 uhid2 uhid3
|
||
|
(you can leave out the devices that exist already).
|
||
|
|
||
|
Next, you'll have to think about permissions. Both the /dev/usb0..3
|
||
|
(but not /dev/usb) have to be world readable, as well as the uhid devices.
|
||
|
This command will take care of it:
|
||
|
chmod a+r /dev/usb?* /dev/uhid*
|
||
|
(yes, the "?*" after /dev/usb is intentional).
|
||
|
|
||
|
Obviously, any permission change you make is at your own risk! XDM users
|
||
|
may use the GiveConsole/TakeConsole mechanism as an alternative.
|
||
|
|
||
|
Plib will complain if /dev/uhid* or /dev/usb* exist but are
|
||
|
unreadable with your current privileges.
|
||
|
|
||
|
|
||
|
Testing the joysticks
|
||
|
---------------------
|
||
|
|
||
|
Users of FlightGear can quickly test their joysticks with the js_demo
|
||
|
program.
|
||
|
|
||
|
|
||
|
Compiling and linking
|
||
|
---------------------
|
||
|
|
||
|
Compile plib on FreeBSD with the same compiler options as used for the
|
||
|
other libraries you may use. In particular, if you use pthreads anywhere
|
||
|
in your application, you should compile Plib with
|
||
|
g++ -pthread
|
||
|
|
||
|
Applications linking to recent Plib's -ljs should add -lusbhid to the
|
||
|
link command line in the Makefile.
|