OSX Joymap (https://sourceforge.net/p/osxjoymap)

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

https://sourceforge.net/p/osxjoymap