[SDL] Force feedback joystick actuator patch - alpha

J. Grant sdl@libsdl.org
Fri Mar 7 21:47:08 2003


This is a multi-part message in MIME format.
--------------060500070407030704070102
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hi All,

OK, I've got it all working perfectly now.  It has been tested on
PS2Linux and my pc a little too. (patch is attached)

Included in this patch:
2003-03-07
  * Force feedback actuator API for SDL:
     SDL_JoystickNumActuators();
     SDL_JoystickSetActuator();
     SDL_JoystickGetActuatorType();
     SDL_JoystickGetActuatorRange();

  * PS2Linux native joystick module - supporting plain digital, Analog
    and DualShock 1/2 controllers.

  * PS2Linux implementation of force feedback API.

  * Other joystick modules patched with dummy functions to work with the
    new API.

  * testactuator.c created to test the actuator API and the PS2Linux
    implementation.

  * testjoysticktext.c created to test the joystick in text mode.

  * testjoystick.c modifed to return info about the actuators on the device.

  * testjoystick.c added extra argv[2] to select the analog stick other
    than 0.

  * testjoystick.c modified to avoid analog stick display going off the
    edge of screen (overscan issue).

  * added startup printf usage help to testjoystick, and aditional
    programs by myself.

  * configure.in and PS2Linux makefile.am patched to support the new
    features.

  * added extra generated filenames to .cvsignore (so that "diff -X
    SDL12/.cvsignore" provides clean output).

  * renamed several "Playstation 2" comments to "PS2Linux in
    configure.in (for clarity, because I have been doing some native PS2).


It has been great fun implementing all of this.  Now it would be great
if more platforms were supported by this API addition.  If someone else
with a force feedback joystick can code up another platform module this
would be great.

I am on ICQ 11122941 if anyone uses ICQ at all.

Cheers

JG




--------------060500070407030704070102
Content-Type: application/gzip;
 name="ps2linux-actuators-09.patch.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="ps2linux-actuators-09.patch.gz"

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
--------------060500070407030704070102--