This package provides joystick mapping support for a limited
set of applications in Mac OS X.
The intention is to provide an equivalent interface to
joymap for linux (http://linuxjoymap.sourceforge.net/).
The best way to do this is probably with kernel extensions
(.kext). Developments in Mac OS X makes this approach
less desirable (to me), since maintaining a signed kext could limit
the applicability of this work.
Instead, joymap for OSX uses DYLD_INSERT_LIBRARIES
to replace the IOKit implementation for an application,
and simulate a joystick in the library layer.
The program assumes a HOTAS kind of layout, where each product
occurs only once in the system (a current limitation).
The IOKit replacement library communicates with the joymap
process using a unix socket.
RUDIMENTARY INSTALLATION AND USAGE
==================================
Make the package with:
make
This creates two dylib files which you can place wherever you wish:
* joymap_iokit.dylib
* joymap_boxer.dylib
There are also two CLI applications that are built:
* joymap
* jsinfo
jsinfo can be used to examine the existing joystick devices, or
the programmed virtual joystick.
./jsinfo (shows a list of devices with vendor and product)
./jsinfo -v (shows additional element information)
./jsinfo vendor product (Continuosly display button and axes values)
The program loadmap is used to load a joystick configuration as specified
the doc subfolder, including a joystick program to allow more advanced
programming of joystick actions. The loadmap program opens a socket in
$HOME/.joymap to publish virtual joystick information to any program
which includes joymap_iokit.dylib or joymap_boxer.dylib.
Some example programs are included in the doc subfolder.
To benefit from the virtual joystick you need to launch
the application with DYLD_INSERT_LIBRARIES. For example:
DYLD_INSERT_LIBRARIES=$HOME/joymap/joymap_boxer.dylib open /Applications/Boxer.app
You can use the joymap_boxer.dylib for Boxer (available from http://boxerapp.com/)
(which does not use the newer IOKIT libraries) and joymap_iokit.dylib for
applications that do use the newer IOKIT libraries. For example wine (https://www.winehq.org/).
The libraries *only* simulate a joystick, not a keyboard or mouse.
The loadmap program simulates the keyboard and mouse directly, so it
can be used to simulate keyboard and mouse events using the joystick
for any program.
LIMITATIONS
===========
This is a work in development. Although I find it usable in the current state,
the implementation is incomplete.
* Queues aren't implemented.
* Anything that falls back to using mach_port in some way will not work.
* For the latter case I have resorted to custom built libraries (such as the boxer dylib).
Use of the software is entirely at your own risk.
EXAMPLES
=========
In addition to the examples in the documentation folder, a more complicated example for X-Wing
is available at the end of this page.
Source code is available at