tree: 909697967e9ff958ed1afd696a70e2238eb7875c [path history] [tgz]
  1. Config/
  2. hardware/
  3. .gitignore
  4. Descriptors.c
  5. Descriptors.h
  6. grip.cpp
  7. Joystick.c
  8. Joystick.h
  9. Joystick.hex
  10. makefile

Gravis GrIP to HID adapter

GRiP is (or was?) a custom protocol designed by Gravis to allow their gamepad to use more than 4 buttons on the PC joystick port. The Gravis Gamepad Pro is one of the best PC gamepads ever manufactured, and the USB version is not that common (and also looks less nice with the black plastic).

This interface allows to use these gamepads on an USB port, for modern machines where the traditional gameport is not available. It supports up to 4 gamepads (2 gameports, each allowing to use 2 gamepads thanks to Gravis chaining system).

The gamepads are each reported as a separate USB report, and show up as 4 independant gamepads on both Windows and Haiku. Buttons are assigned in this order: green, yellow, red, blue, L1, R1, start, select, R2, L2. This order is reasonable (but not perfect) while allowing to reuse the bits received from the gamepad almost directly to fill the HID report. The only change needed is inverting the Y axis, because USB wants the up direction to be lowest values.

It is powered by an AT90USB AVR microcontroller, because these implement USB in hardware and make it easy to implement an HID device.

You need the LUFA USB stack to compile this project. I am not including it to avoid code duplication. Download and extract it yourself, or set the LUFA_PATH variable to where you already have it when compiling.

Further reading on GrIP

I have built some boards and can ship them to you if you don't want to build one yourself. The cost for an assembled and tested board is 15€ (covering the cost of components and shipping). Contact me if you are interested in getting one.