|
ee180efd
|
2020-12-20T12:08:49
|
|
Fixed bug 5406 - Upstreaming DragonFlyBSD changes from DeltaPorts (patch from David Carlier)
|
|
cbe13d23
|
2020-12-18T13:10:36
|
|
Fixed controller hotplug detection when joystick thread is not enabled
|
|
f0577bc9
|
2020-12-18T10:09:06
|
|
ControllerList: setup the ps5 default deadzone to match PS4 instead of defaulting to same a XboxOne/Switch
|
|
90456670
|
2020-12-17T14:11:00
|
|
more "'for' loop initial declarations are only allowed in C99 mode" fixes
|
|
f484abbd
|
2020-12-15T14:57:51
|
|
Added Android mapping for the Xbox One Series X controller over Bluetooth
|
|
637d425e
|
2020-12-15T00:11:10
|
|
whitespace.
|
|
e65e4fd3
|
2020-12-14T09:48:51
|
|
Fixed detecting the guide button on Xbox One S controllers over Bluetooth on Linux
|
|
8795ca70
|
2020-12-14T09:15:47
|
|
Fixed bug 5241 - SDL on Linux needs a way to turn deadzones off
pj5085
I added some printf to verify the math being done. Of the three joysticks I have, it works correctly for at least two, and seems to work correctly for the third. I say "seems to" because, for the third joystick, the values never go through the AxisCorrect function, and thus never hit my printf statements, even though they did in the version I wrote my patch against. I'm not sure what's going on there, but it at least seems to be working correctly in as much as I can tell.
I note this result in particular, for an SNES Gamepad (min=0, max=255):
Joystick value 0 becomes -32768
Joystick value 127 becomes 0
Joystick value 255 becomes 32767
Without the code that forces a zero point, the 127 input value would become -129, so I think you see why I added that code to turn it into zero. However, I think Kai Krakow has a point about how SDL shouldn't assume that there should be a center.
Obviously in the majority of cases there actually should be a center, and the code that turns that 127 into an actual 0 is creating only a 0.2% error over 0.4% of this joystick's range. However, what if there is an axis that is some kind of special control, like a 4-position switch, and, for whatever reason, the joystick reports it as an axis with 4 possible values, 0 to 3? In that case, mutilating the two center values to the same value is much more of an error and and turns that 4-position switch into a 3-position switch. If any joystick does this with a 2-position switch, then this code would render that control entirely useless as it would report the same value with the switch in either position. Obviously the code could require that there be at least N possible values, to guess whether something is a proper axis or just some kind of switch, but the choice of N would be arbitrary and that's ugly.
I guess the real problem here is that my gamepad is just kind of broken. It should be reporting a range of -1 to +1 since that's what it actually does. Also, as Kai Krakow points out, it's probably not SDL's place to fix broken hardware. I'll add that, if SDL does fix broken hardware, it should probably actually know that it's broken rather than be merely guessing that it is.
So, to the extent that SDL is able to do stuff like this, perhaps it's something better left for the user to configure in some kind of config file.
|
|
b6e63625
|
2020-12-13T15:32:24
|
|
fix bug #5395: handle old systems where inotify_init1 is not available
|
|
80e5c689
|
2020-12-13T01:20:38
|
|
Fixed the PS5 controller not disconnecting when powered off
|
|
db0a2025
|
2020-12-12T23:48:02
|
|
Fixed bug 5241 - SDL on Linux needs a way to turn deadzones off
pj5085
It occurred to me that my simple patch that comments out a few lines of code does not correctly remove the dead zone since the calculation presumably assumes the dead zone has been cut out of the range. Then, while looking into how to make it output the correct range of values, I realized SDL wasn't returning the correct range of values to begin with.
This line of code was already present:
printf("Values = { %d, %d, %d, %d, %d }\n", absinfo.value, absinfo.minimum, absinfo.maximum, absinfo.fuzz, absinfo.flat);
For my joystick this yeilds:
Values = { 0, -127, 127, 0, 15 }
Then this code calculates the coefficients:
In SDL1:
joystick->hwdata->abs_correct[i].coef[0] = (absinfo.maximum + absinfo.minimum) / 2 - absinfo.flat;
joystick->hwdata->abs_correct[i].coef[1] = (absinfo.maximum + absinfo.minimum) / 2 + absinfo.flat;
t = ((absinfo.maximum - absinfo.minimum) / 2 - 2 * absinfo.flat);
if ( t != 0 ) {
joystick->hwdata->abs_correct[i].coef[2] = (1 << 29) / t;
} else {
joystick->hwdata->abs_correct[i].coef[2] = 0;
}
In SDL2:
joystick->hwdata->abs_correct[i].coef[0] = (absinfo.maximum + absinfo.minimum) - 2 * absinfo.flat;
joystick->hwdata->abs_correct[i].coef[1] = (absinfo.maximum + absinfo.minimum) + 2 * absinfo.flat;
t = ((absinfo.maximum - absinfo.minimum) - 4 * absinfo.flat);
if (t != 0) {
joystick->hwdata->abs_correct[i].coef[2] = (1 << 28) / t;
} else {
joystick->hwdata->abs_correct[i].coef[2] = 0;
}
Neither calculates the correct coefficients for the code in the AxisCorrect function.
In SDL1:
if ( value > correct->coef[0] ) {
if ( value < correct->coef[1] ) {
return 0;
}
value -= correct->coef[1];
} else {
value -= correct->coef[0];
}
value *= correct->coef[2];
value >>= 14;
In SDL2:
value *= 2;
if (value > correct->coef[0]) {
if (value < correct->coef[1]) {
return 0;
}
value -= correct->coef[1];
} else {
value -= correct->coef[0];
}
In SDL1, the calculated coefficients are coef[0]=15, coef[1]=-15 and coef[2]=5534751. So with a full-scale input of 127, it calculates an output value of 37835, which is considerably out of range.
In SDL2, the calculated coefficients are coef[0]=30, coef[1]=-30, and coef[2]=1383687. So with a full-scale input of 127, it calculates the same output value of 37835.
I tested it with the 3 joysticks I have, and it produces out-of-range values for all of them.
Anyway, since dead zones are garbage, I just deleted all of that junk and wrote some code that takes the absinfo.minimum and absinfo.maximum values and uses them to scale the axis range to -32767 through +32767.
I also made it detect when a range doesn't have an integer center point, e.g. the center of -128 to + 127 is -0.5. In such cases, if either value to the side of the center is provided, it zeros it, but it otherwise doesn't implement any kind of dead zone. This seemed important with my gamepad which provides only the values of 0, 127, and 255, since without this hack it would never be centered.
Also, the previous minimum output value was -32768, but as that creates an output range that has no true center, I changed the minimum value to -32767.
I tested it with the 3 joystick devices I have and it seems to create correct values for all of them.
|
|
0ccb3afd
|
2020-12-12T22:33:11
|
|
Fixed polling values after SYN_DROPPED event
|
|
9ee0e888
|
2020-12-12T22:11:00
|
|
Whoops, make the hint actually default to false
|
|
13a4caf1
|
2020-12-12T22:08:02
|
|
Fixed bug 4286 - Joystick subsystem causes "not responding" when app is in the background
Added a hint to control whether a separate thread should be used for joystick events.
This is off by default because dispatching messages in other threads appears to cause problems on some versions of Windows.
|
|
797a6910
|
2020-12-09T20:28:51
|
|
Fixed bug 5375 - WGI: Fix HSTRING memory leak.
Joel Linn
TLDR; https://godbolt.org/z/43fd8G
Let's deduce this from C++ reference code:
https://docs.microsoft.com/en-us/cpp/cppcx/wrl/how-to-activate-and-use-a-windows-runtime-component-using-wrl?view=msvc-160
At the bottom of the page there is this snippet:
```
int wmain()
{
/* ... more code ... */
// Get the domain part of the URI.
HString domainName;
hr = uri->get_Domain(domainName.GetAddressOf());
if (FAILED(hr))
{
return PrintError(__LINE__, hr);
}
// Print the domain name and return.
wprintf_s(L"Domain name: %s\n", domainName.GetRawBuffer(nullptr));
// All smart pointers and RAII objects go out of scope here.
}
```
`HString` is defined in `corewrappers.h` and the call chain for the destructor is:
`~HString() -> Release() -> ::WindowsDeleteString()`
QED
|
|
a77a0715
|
2020-12-09T07:50:15
|
|
Disabled raw input debug output
|
|
cb361896
|
2020-12-09T07:16:22
|
|
Fixed bug 5235 - All internal sources should include SDL_assert.h
Ryan C. Gordon
We should really stick this in SDL_internal.h or something so it's always available.
|
|
f2fff217
|
2020-12-09T06:24:40
|
|
Fixed bug 5374 - WGI: Use fast-pass strings.
Joel Linn
Eliminate additional heap allocation for short-lived HSTRINGs.
Uses `WindowsCreateStringReference()` to disable reference counting and memory management by the Window Runtime.
|
|
c9723c40
|
2020-12-07T09:38:21
|
|
Fixed potential hang in joystick close if the rumble thread is blocked for some reason
It's still possible to hang when shutting down, if the rumble thread is still hung, but it won't block indefinitely at runtime.
|
|
09909d02
|
2020-12-03T19:44:47
|
|
Fixed handling of BACK button on newer Xbox One S controllers
|
|
54e5136b
|
2020-12-03T18:17:04
|
|
Refactored Xbox One Bluetooth protocol and verified Xbox One S, Xbox Series X, and Xbox One Elite Series 2 controllers
|
|
1031231b
|
2020-12-03T18:17:03
|
|
Fixed duplicating a device between XInput and HIDAPI
|
|
59f28b7f
|
2020-12-03T18:17:01
|
|
Fixed whitespace
|
|
c78ca2d1
|
2020-12-01T13:38:42
|
|
Fixed bug 5371 - Rawinput: Fix truncating cast of string length.
Joel Linn
Fixes an implicit truncation of a string length on 64bit systems.
|
|
a3ccf9ad
|
2020-12-01T13:36:41
|
|
Fixed bug 5373 - [PATCH] Rawinput: Get correlated XInput battery info
Joel Linn
Currently the rawinput driver always reports a device as "wired". This changes that to "unknown" and updates it once the device is correlated with xinput.
|
|
e3966e25
|
2020-11-30T13:04:30
|
|
Use the correct internal API for updating the battery level for PS5 controllers
|
|
f4ed07de
|
2020-11-30T13:02:34
|
|
We don't know whether the PS5 controller is Bluetooth or not when we open it
|
|
1f2f536b
|
2020-11-27T18:57:40
|
|
Fixed XInput correlation for raw input controllers after hotplug events
|
|
1c865c46
|
2020-11-27T18:57:36
|
|
Load the raw input device list at init time so it's available when DirectInput is doing device detection
|
|
a0c5bfa3
|
2020-11-27T13:08:40
|
|
Moved raw input event processing from the main thread to the joystick thread
This allows fast joystick event delivery regardless of what the main thread is doing.
|
|
4fbefbe2
|
2020-11-27T11:33:53
|
|
Sort the raw input axes by usage, so X comes before Y, etc.
|
|
4ddac485
|
2020-11-27T11:33:51
|
|
Backed out minor optimization that prevented correlation_id from being set
|
|
8973a258
|
2020-11-27T10:44:56
|
|
Enable dispatching of WM_INPUT_DEVICE_CHANGE events directly, in case the application hasn't created a window with the normal message loop
|
|
e8adc648
|
2020-11-27T10:44:55
|
|
Enable dispatching of WM_INPUT events directly, in case the application hasn't created a window with the normal message loop
|
|
0252235e
|
2020-11-27T10:44:53
|
|
Recheck devices if another API queries raw input for a new device
|
|
a7dede7e
|
2020-11-27T10:44:51
|
|
Re-enable axis correlation for raw input controllers, for twin stick shooters that don't need face buttons
|
|
ce77966d
|
2020-11-27T10:44:49
|
|
Fixed RAWINPUT_IsDevicePresent() not returning TRUE for Xbox One controllers
|
|
8a449de2
|
2020-11-27T10:44:47
|
|
Fixed Xbox 360 wireless controller being picked up by WGI when it's being managed by RAWINPUT
|
|
37c9e4af
|
2020-11-27T06:03:15
|
|
Fixed processing WM_INPUT_DEVICE_CHANGE at startup
|
|
248fc75b
|
2020-11-27T05:53:56
|
|
Correlate just based on buttons, joystick axes are not as precise and could potentially cause incorrect uncorrelation.
It's okay if the triggers aren't precise until someone presses a button on their controller.
|
|
e7e615de
|
2020-11-27T05:53:54
|
|
Removed extraneous windows message pumping
Most of the raw input events are dispatched in the main windows message loop. We only dispatch device change messages separately when we need them to be completely up to date.
|
|
2931eccd
|
2020-11-27T05:53:52
|
|
Fixed detecting Bluetooth raw input devices, which have device names longer than 128 characters
|
|
849ce803
|
2020-11-27T05:53:50
|
|
Renamed SDL_JOYSTICK_RAWINPUT_GAMING_INPUT to SDL_JOYSTICK_RAWINPUT_WGI
|
|
219a28dd
|
2020-11-27T03:45:05
|
|
Fixed D-pad uncorrelating raw input controllers (thanks Jimbly!)
|
|
3fbff2a4
|
2020-11-26T10:47:33
|
|
SDL_rawinputjoystick.c: fix ambiguous 'else' warning
src/joystick/windows/SDL_rawinputjoystick.c: In function 'RAWINPUT_HandleStatePacket':
src/joystick/windows/SDL_rawinputjoystick.c:1343:9: warning: suggest explicit braces to avoid ambiguous 'else'
|
|
845b9033
|
2020-11-25T16:46:42
|
|
Implemented trigger rumble for raw input controllers
|
|
517be808
|
2020-11-25T16:05:19
|
|
Implemented battery status for Bluetooth Xbox One controllers
Also switched the rumble loop count to 0xEB (one hour) to match Windows driver
|
|
6a7f29cd
|
2020-11-25T11:31:17
|
|
Fixed compiling on tvOS
|
|
9ec2cf56
|
2020-11-25T10:31:59
|
|
Fixed building with Windows.Gaming.Input enabled
|
|
3c07dd12
|
2020-11-25T10:28:48
|
|
Strip an extra '.' off of the HORI manufacturer name
|
|
159d1b3d
|
2020-11-25T01:35:45
|
|
Don't set the serial number after the controller is opened
We'll use the USB value instead so it's available as soon as it's opened.
|
|
7d92b14f
|
2020-11-25T01:18:18
|
|
Simplified Xbox One controller initialization state, and don't query for the serial number.
|
|
9fc4a4c9
|
2020-11-24T22:25:26
|
|
Revamped Xbox One HIDAPI init sequence
Added support for querying the controller serial number on newer firmware
|
|
e4b7d9a2
|
2020-11-24T07:56:59
|
|
Removed usage of TARGET_OS_OSX for building with older SDKs
|
|
a5cde4cb
|
2020-11-24T07:29:55
|
|
Fixed trying to use @available() on older SDK
|
|
97782e6c
|
2020-11-24T07:11:49
|
|
Don't try to call IOS_SupportedHIDDevice() if it's not defined
|
|
a063b9fb
|
2020-11-24T07:06:31
|
|
Fixed compiler warning
|
|
c63bbb06
|
2020-11-24T06:55:33
|
|
Including SDL_config_iphoneos.h enables MFI controller code
|
|
7a05dbf4
|
2020-11-24T06:42:53
|
|
Fixed building on FreeBSD
Alex S
Looks like we have a collision with https://hg.libsdl.org/SDL/rev/cd774daff9f6. (Again, the headers in the base system are intended for drivers and should not be used for compiling non-base applications. At least that's the policy for now: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=240964#c19.)
|
|
feab9d42
|
2020-11-24T06:40:13
|
|
5363 - Memory leak of joystick->sensors in SDL_JoystickClose
Mathieu Eyraud
Joystick->sensors is never freed.
|
|
34bea84a
|
2020-11-23T23:03:55
|
|
Fixed bug 5335 - Patch: enable joystick/haptic/evdev support by default on FreeBSD
Alex S
Ah, that's not quite enough. You need to:
1. rename src/joystick/bsd/SDL_sysjoystick.c to something;
2. regenerate configure.
|
|
1e943e2a
|
2020-11-23T22:59:22
|
|
Fixed building with an older SDK and macOS target
|
|
e44bf8a0
|
2020-11-23T21:18:37
|
|
Fixed bug 5359 - Incorrect sensor data from DualShock4
multiply gyro values by sensitivity
When the hardware calibration fails, values read from sensors need to be multiplied by default sensitivity (16 for gyro, 1 for accelerometer).
|
|
c8c818d7
|
2020-11-23T21:14:37
|
|
Fixed bug 5360 - non-libudev joystick detection doesn't see controllers that were already connected
Simon McVittie
When watching for hotplug events we can poll the inotify fd, but we
still need to scan /dev/input once per process, otherwise we'll fail
to detect devices that were already connected.
|
|
8e2746cf
|
2020-11-23T21:10:48
|
|
joystick: Don't use udev in Flatpak or pressure-vessel container
Flatpak[1] and pressure-vessel[2] are known to use user namespaces,
therefore udev event notification via netlink won't work reliably.
Both frameworks provide a filesystem API that libraries can use to
detect them. Do that, and automatically fall back from udev-based
device discovery to the inotify-based fallback introduced in Bug #5337.
[1] <https://flatpak.org/>
[2] <https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/tree/master/pressure-vessel>
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
e9869e07
|
2020-11-23T21:08:19
|
|
Fixed bug 5335 - enable joystick/haptic/evdev support by default on FreeBSD
Alex S
Evdev headers aren't actually included in the base system (well, it has a private copy), they are available through the devel/evdev-proto port instead. We also have devel/libinotify and devel/libudev-devd shims, I didn't verify whether they work with SDL.
|
|
62e39b5f
|
2020-11-23T20:57:14
|
|
Fixed building with an older SDK and macOS target
|
|
268aa456
|
2020-11-23T20:26:28
|
|
Fixed compiling with SDL_JOYSTICK_RAWINPUT disabled
|
|
eaa53a19
|
2020-11-23T22:16:07
|
|
joystick: On Linux, don't try to close an invalid inotify file descriptor.
|
|
5c957747
|
2020-11-23T22:14:22
|
|
joystick: Fix up Linux joystick code to (mostly) compile on FreeBSD.
|
|
179bd665
|
2020-11-23T18:27:43
|
|
Don't enable PS5 controller support if DS4Windows is running - they conflict.
|
|
5b3616c3
|
2020-11-23T18:24:05
|
|
Generalized the raw input controller driver and moved XInput/WGI detection into it for XInput devices
This fixes bad report parsing for various newer Xbox controllers, and this driver is now preferred over XInput, since it handles more than 4 controllers.
|
|
2e8e3854
|
2020-11-21T17:59:15
|
|
Fixed compile warning
|
|
fd894467
|
2020-11-21T14:13:26
|
|
Fixed building on Mac OS X on the command line and with an older macOS SDK
|
|
1df593fb
|
2020-11-21T13:15:33
|
|
Fixed bug 5355 - Add GameController Framework support to macOS
C.W. Betts
This patch adds support to the GameController framework on macOS Big Sur and later, adding support for MFi controllers as well as rumble support for PS4 and Xbox One. There is some code to make sure that the IOKit joystick handler doesn't include two controllers at once.
While the GameController framework is present in earlier versions of macOS, there was no public, approved way of checking if a specific IOHIDDevice is a controller that GameController could handle. This was changed in Big Sur.
|
|
870841c4
|
2020-11-21T11:59:01
|
|
Reset the LED state after Bluetooth connection has completed on the PS5 controller
|
|
549010f2
|
2020-11-20T13:24:49
|
|
It takes 2 packets to stop audio haptics and start emulated rumble on the PS5 controller
|
|
bf7d198d
|
2020-11-19T19:09:42
|
|
The HORI Fighting Commander should only show up as an XInput Switch Controller on Windows
|
|
6cb7f9e3
|
2020-11-19T19:09:40
|
|
Respect SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS for Nintendo Switch Pro controllers using the HIDAPI driver
|
|
99807665
|
2020-11-19T19:09:38
|
|
Respect SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS for the Nintendo Switch Pro controller on Linux
|
|
7366693f
|
2020-11-19T19:09:36
|
|
Added support for a few more controllers on Linux
|
|
ffb4d960
|
2020-11-19T19:09:34
|
|
Disabled Xbox protocol debugging
|
|
c9b097e6
|
2020-11-19T13:31:16
|
|
Clarify the meaning of the rumble enable bits for the PS5 controller
|
|
c85623d7
|
2020-11-19T13:10:14
|
|
Re-enable haptic audio after rumble on PS5 controller
Also make sure we don't set any other state when we're not intending to, and added more interesting effects which are currently not exposed via API
|
|
8c3196da
|
2020-11-18T21:33:11
|
|
Fixed some compiler warnings
|
|
45f14375
|
2020-11-18T20:34:12
|
|
Experimenting with requesting the serial number on an Xbox One controller
|
|
963d8b3f
|
2020-11-18T20:34:10
|
|
Fixed bits in the initial Xbox One protocol ack
|
|
cd51a51f
|
2020-11-18T20:34:08
|
|
Updated with a better understanding of the Xbox One controller protocol
|
|
51ea6a6d
|
2020-11-17T22:09:52
|
|
Don't send controller gyro and accelerometer updates if the values haven't changed.
This keeps SDL_PollEvent() from returning data continuously when polling controller state.
|
|
463d84a8
|
2020-11-17T10:56:56
|
|
Added support for the PS5 controller gyro and accelerometer
|
|
fcb21aa8
|
2020-11-17T10:30:20
|
|
Added API for sensors on game controllers
Added support for the PS4 controller gyro and accelerometer on iOS and HIDAPI drivers
Also fixed an issue with the accelerometer on iOS having inverted axes
|
|
d140d887
|
2020-11-16T17:36:47
|
|
Added SDL_JoystickGetSerial() and SDL_GameControllerGetSerial()
|
|
7bbea0bb
|
2020-11-16T15:10:02
|
|
Fixed build warning
|
|
71e32f5e
|
2020-11-16T15:00:15
|
|
Added SDL_crc32()
|
|
3d48fc05
|
2020-11-16T13:21:02
|
|
Added notes about the pad lights on the PS5 controller
|
|
4514ad57
|
2020-11-16T13:07:11
|
|
Fixed updating LED state when starting application with Bluetooth PS5 controller connected
|
|
a37e3ae2
|
2020-11-16T11:21:58
|
|
Implemented PS5 effects over Bluetooth
|
|
c6c116e8
|
2020-11-16T10:51:13
|
|
Implemented setting the LED color on the PS5 controller
|
|
aa7c3eae
|
2020-11-16T09:16:01
|
|
Fixed size of rumble packet
|
|
f28c01a4
|
2020-11-16T09:11:15
|
|
Fixed rumble order on PS5
|