view BUGS @ 632:85e104fe14c2

Date: Sun, 1 Jun 2003 15:38:45 -0700 (PDT) From: Jeff Brown <jabrown@caida.org> Subject: [patch] SDL-1.2.5 + FreeBSD joystick axes, hat fixes Hello again! When I sent in some SDL fixes last December, I found out they'd already been fixed in the CVS version. This time, I checked the repository before bugging you. =) I'm using SDL-1.2.5 on a FreeBSD 4.6.2-RELEASE system, and in the course of getting my multi-analog-axis USB controller (with a hat switch!) working with d2x-sdl -- the SDL port of the Descent 2 engine -- I came across a few problems: 1) The second analog stick is reported as a slider in one direction, and "Rz" in the other. SDL was ignoring the Rz axis, so I added Rx/Ry/Rz to the set of things SDL considers to be axes. 2) After the above change, the set of JOYAXE_* axes for my gamepad was {0,1,3,7}; however, d2x-sdl expects the axes to be contiguously numbered from 0, which seems like a pretty reasonable expectation, rather than having to scan the entire space of axes that SDL may or may not have. So, I added a table lookup which maps the JOYAXE_* axis numbers to 0,1,... in the order they're detected by SDL_SYS_JoystickOpen(), when reporting them to the application. I also added a function "usage_to_joyaxe()" which maps the USB HUG_* usage values to JOYAXE_values, since the repeated case statements testing for HUG_* were getting out of hand. 3) The BSD joystick driver had no hat support, so I added it. It looks like our USB library can only support one hat switch per device, which makes life easy. The patch against SDL-1.2.5 which implements these changes is at: http://www.caida.org/~jabrown/patches/sdl-1.2.5-bsdhat.diff After applying, SDL's "testjoystick" reports all activity from my gamepad correctly, and d2x works too (though it needed some other fixes). Moving on... There is also a problem with slightly different USBHID library interfaces on different versions of FreeBSD. I wasn't going to mention this since the FreeBSD port for SDL-1.2.5 (and not SDL itself) was doing the FreeBSD version-specific patching, so I e-mailed the port maintainer with this change. However, I see that you've incorporated the FreeBSD version-checking stuff into the CVS version of SDL, so now it's relevant for you too. The problem is, the FreeBSD #if tests don't work right for FreeBSD 4.6.2-RELEASE. There may be other versions with this problem, but I've only tested 4.6.2-R. The following patch against your latest CVS version fixes this: --- SDL_sysjoystick.c-1.16 Tue Apr 15 09:02:08 2003 +++ SDL_sysjoystick.c Sun Jun 1 15:10:28 2003 @@ -420,6 +420,8 @@ # else len = hid_report_size(rd, repinfo[repind].kind, r->rid); # endif +# elif (__FreeBSD_version == 460002) + len = hid_report_size(rd, r->rid, repinfo[repind].kind); # else len = hid_report_size(rd, repinfo[repind].kind, &r->rid); #endif I hope this is all useful to you. I've been getting myself dizzy playing Descent 2 with it, all morning! -Jeff Brown P.S. My USB controller is a Thrustmaster Firestorm Dual Analog 2. That's probably irrelevant, but I threw it in for completeness.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 02 Jun 2003 14:50:22 +0000
parents 8e3ce997621c
children 8bedd6d61642
line wrap: on
line source


All:
	Audio rate conversion is only implemented by multiplying or dividing
	by a power of two.  This is a side-effect of the requirement that the
	raw audio buffer size be a power of two, and can hopefully be fixed.
	This means 8 KHz audio converted to 22 KHz ends up being 16 KHz. :-/

	When the implementation is writing directly to video memory the mouse
	cursor doesn't work properly.  Applications which do this should use
	their own mouse cursor and call SDL_ShowCursor(0) to hide the system
	cursor.

Linux:
	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.

	The keyboard modifiers are not set to the correct state on startup.

	The AAlib, GGI, and SVGAlib video drivers are not heavily tested.

Win32:
	The MCI driver can't tell if the CD-ROM drive is paused or stopped.

	The SDL_INIT_EVENTTHREAD flag is not supported on Win32
	(Idea: create a separate DirectInput polling thread)
	The main purpose of this flag is for smooth cursor motion in
	fullscreen environments.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	This requires the ToUnicode() API which is only implemented on
	Windows NT/2000, not on Windows 95/98.
	Latin-1 keyboard input works fine.

	Joysticks are only supported under the Win32 MultiMedia API,
	DirectInput support is not yet implemented.

BeOS:
	BePPC is not supported, apparently not even by Be Inc.

	SDL_WM_GrabInput() is not implemented.
	Does anyone know how to do this?  SDL_WM_GrabInput() is designed
	to prevent the user from switching input and mouse focus away from
	the SDL application.

	Continuous relative mouse motion is not implemented.

	Wide UNICODE character input (Kanji, etc.) has not been tested.
	Latin-1 keyboard input works fine.

MacOS:
	Palette handling isn't implemented in windowed mode yet.

	Audio hasn't been extensively tested, in particular the locking
	isn't implemented and mixer routines may not call malloc() or free()
	because they are called at interrupt time.

	SDL_WM_GrabInput() is not implemented.
	Does anyone know how to do this?  SDL_WM_GrabInput() is designed
	to prevent the user from switching input and mouse focus away from
	the SDL application.

	Continuous relative mouse motion is not implemented.

	SDL_AddTimer() and SDL_RemoveTimer() haven't been implemented yet.

	Not all of the keys are properly recognized on the keyboard.

MacOS X:
	CD-ROM functions are not implemented yet.

	Joystick code is not extensively tested yet.

	Resizeable windows aren't implemented yet.

	Depth switching for windowed mode isn't implemented yet.
	
	Palette handling isn't implemented in windowed mode yet.
	
	Command-line arguments dialog is not implemented yet.

	Fullscreen drawing has some artifacts.
	
	Fullscreen OpenGL for the software renderer is broken.

	Some OpenGL parameters are not accounted for, for example color bits customization.
	
	Continuous mouse motion perhaps is not as smooth as it should be.

	SDL_WM_GrabInput() is implemented, but it "freezes" the hardware
	cursor in the center of the window/screen.  Also, mouse moved events
	are not generated, and the keyboard cannot be grabbed.

	MacOS X seems to have a broken pthread_cancel() implementation.

FreeBSD:
	pthread_cancel() isn't supported by FreeBSD 3.X, so threads don't
	work on versions of FreeBSD earlier than 4.0.

	The CD-ROM handling doesn't work completely.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.

	The keyboard modifiers are not set to the correct state on startup.

Solaris:
	The joystick functions are not implemented yet.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.

	The keyboard modifiers are not set to the correct state on startup.

IRIX:
	The CD-ROM handling doesn't work completely.

	The joystick functions are not implemented yet.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.

	The keyboard modifiers are not set to the correct state on startup.

EPOC:
    Only Crystal version of Epoc/SymbianOS is currently supported.

    SDL is implemented in static library only. SDL uses static/global
    variables and that is not allowed in EPOC dll libraries.

    Sound is not yet supported.

    Joystick, OpenGL and cdrom is not supported (think about cdrom in a cell phone:-).
    
    No console output screen. Printing to stdout do not have any effect.

OpenBSD:  -= NOT YET SUPPORTED =-
	This is reported to work, but I haven't verified this.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.

	The keyboard modifiers are not set to the correct state on startup.

OSF/Tru64:  -= NOT YET SUPPORTED =-
	The audio functions are not implemented yet.

	Joysticks and CD-ROM functions are not implemented yet.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.

	The keyboard modifiers are not set to the correct state on startup.

AIX:  -= NOT YET SUPPORTED =-
	This port has only been tested with AIX 4.3.3

	The OpenGL support doesn't work yet.

	The joystick subsystem isn't implemented yet.

	Endian detection doesn't work yet - needs a unique CPP symbol.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.

	The keyboard modifiers are not set to the correct state on startup.

	The AIX port was done by Carsten.Griwodz@KOM.tu-darmstadt.de
	More information on this port is available at:
	http://www.kom.e-technik.tu-darmstadt.de/~griff/SDL/

QNX:  -= NOT YET SUPPORTED =-
	Only static libraries are being made, no shared ones.
 
	The only hardware surface is the primary view surface.
 
	Fullscreen doesn't display correctly.
 
AmigaOS:  -= NOT YET SUPPORTED =-
	The OpenGL support isn't implemented yet.

	SDL_WM_GrabInput() is not implemented.
	Does anyone know how to do this?  SDL_WM_GrabInput() is designed
	to prevent the user from switching input and mouse focus away from
	the SDL application.

	Continuous relative mouse motion is not implemented.

	The AmigaOS port was done by Gabriele.Greco@galactica.it