Commit Graph

202 Commits

Author SHA1 Message Date
shuffle2 e38ddfd787 Merge pull request #4111 from EmptyChaos/startup-perf-langs
InputCommon: Fix slow startup on some Windows systems with language packs (Issue 9744)
2016-10-03 04:02:54 -07:00
shuffle2 2747fd3a0d Merge pull request #4102 from ligfx/quartz_input
Add Quartz/CoreGraphics controller interface for default k&m events
2016-10-03 03:13:58 -07:00
Jasper St. Pierre 928d05ec47 InputCommon: Remove the Xlib backend
The XInput2 backend is more performant, so let's default to it and
remove the old, core-only backend.
2016-09-04 10:44:22 -07:00
Jasper St. Pierre 2b640a4f7d XInput2: Only do a round trip when the mouse has moved
This should cut down on round trips and blocking calls dramatically
during gameplay.
2016-09-04 10:44:22 -07:00
EmptyChaos 17e4bd9575 InputCommon: Fix slow startup on some Windows systems
Rewrite GetXInputGUIDS to use SetupAPI instead of WMI Queries. When
using a language pack where the system language and user/program
language differ, Windows starts taking a VERY long time (10+ seconds)
to complete Queries for Win32_PNPEntity objects (it's probably
translating every single string since it transfers every single one
from the WMI server into memory in the program).

Fixes Issue 9744.
2016-08-11 09:30:36 +10:00
Michael Maltese 0f5951e324 And pull KeycodeToName into its own function 2016-08-09 19:59:45 -07:00
Michael Maltese d1594f9529 use a std::map instead of running through the AOS 2016-08-09 19:54:59 -07:00
Michael Maltese a5cc054bd1 use std::to_string instead of sstream 2016-08-09 17:45:41 -07:00
Michael Maltese 6097d30288 clang-format and cleaning up Key::GetName 2016-08-09 17:23:30 -07:00
Michael Maltese 3889e4d4b2 style fixes 2016-08-09 15:52:02 -07:00
Michael Maltese 3dc8136e14 Add Quartz/CoreGraphics controller interface for default k&m events 2016-08-08 09:38:22 -07:00
Léo Lam 77fab5940c InputConfigDiag: Don't prevent closing dialog if device not found
There is no reason to prevent the user from closing the config dialog
if the device is not found. It's not very good UX…

Also fixes ExpressionParser to return NO_DEVICE if the device doesn't
exist instead of SUCCESS.
2016-07-30 10:00:55 +02:00
Léo Lam 135641404a evdev: Add hotplugging support
This adds hotplugging support to the evdev input backend. We use
libudev to monitor changes to input devices in a separate thread.
Removed devices are removed from the devices list, and new devices
are added to the list.

The effect is that controllers are usable immediately after plugging
them without having to manually refresh devices (if they were
configured to be used, of course).
2016-07-29 17:18:40 +02:00
Léo Lam 3926db624d ControllerInterface: Don't block on UpdateInput()
Changes UpdateInput() to skip if we can't lock the mutex, instead of
potentially blocking the CPU thread and causing a short but noticeable
frame drop.
2016-07-29 17:18:40 +02:00
Léo Lam 93f5df4195 ControllerInterface: Add RemoveDevice()
This adds RemoveDevice() to ControllerInterface, fixes ExpressionParser
and some other code to support device removals without crashing,
and adds an IsValid() method to Device, to prepare for hotplugging.
2016-07-29 17:18:37 +02:00
Léo Lam 0d783f0869 ControllerInterface: Add a way to register callbacks
This adds RegisterHotplugCallback() to register a callback which will
be invoked by the input backends' hotplug threads when there is a new
device, so that Core (GCKeyboard, GCPad, Wiimote, Hotkey) can reload
the configuration without adding a dependency to Core from InputCommon.
2016-07-29 17:16:22 +02:00
Léo Lam 788e19f54d ControllerInterface: Make the ID assigning code common
This makes the device ID assigning code common to all backends, by
moving it to AddDevice() instead of copy-pasting or replicating
the logic in the backends.

Also, to prepare for hotplugging, instead of relying on a name usage
count, the new ID assigning system always starts from ID 0 and tries
to assign the first ID that is not used.
2016-07-14 10:50:53 +02:00
Scott Mansell e0839a9478 Strip whitespace from Evdev and OSX controller names. 2016-07-12 14:19:07 +12:00
Léo Lam 6cc4591226 evdev: Clamp axis values to the 0.0-1.0 range
The values are expected to be in the 0.0-1.0 range (as indicated by the
comment), and other parts of Dolphin also expect it to be in that range
since the "full" axis has a -1.0 to 1.0 range.  However, this is not
always the case and fvalue can end up being outside of the range. This
clamps fvalue to always be in the 0.0 and 1.0 range.
2016-07-11 14:00:09 +02:00
Mat M cf50ed82bb Merge pull request #3943 from ShadowsFriend/nopch-fix
ControllerInterface: Include memory to fix building without pch
2016-06-26 02:13:47 -04:00
Lioncash 55916b963d Device: Use std::tie for DeviceQualifier's operator== 2016-06-25 23:45:37 -04:00
Christian Widmer be922730b3 ControllerInterface: Include memory to fix building without pch
All affected files use shared_ptr but do not include memory which breaks
building without precompiled headers.
2016-06-26 05:42:29 +02:00
Léo Lam 8678133e87 ControllerInterface: Switch to std::shared_ptr
Small cleanup by using std::shared_ptr and getting rid of
ciface.Devices() which just returned the m_devices (which defeats the
point of making m_devices protected).

Incidentally, this should make the code safer when we have
different threads accessing devices in the future (for hotplug?).

A lot of code use Device references directly so there is
no easy way to remove FindDevice() and make those unique_ptrs.
2016-06-25 21:46:39 +02:00
Léo Lam 9b075556ea Fix a small formatting issue 2016-06-25 13:46:53 +02:00
Léo Lam d3e2ae35ff ControllerInterface: Add synchronisation
Since we may have to add/access devices from different threads, this
adds synchronisation to anything that touches m_devices.
2016-06-25 13:46:53 +02:00
Léo Lam fd29e5c4cc ControllerInterface: Don't pass m_devices to the backends
Previously, the devices vector would be passed to all backends. They
would then manually push_back to it to add new devices. This was fine
but caused issues when trying to add synchronisation.

Instead, backends now call AddDevice() to fill m_devices so that it is
not accessible from the outside.
2016-06-25 13:46:53 +02:00
Pierre Bourdon 3570c7f03a Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
mimimi085181 fcd5170cff XInput: Apply Rumble/Motor output only on changes (again)
Disclaimer: I can't test if this works on xbox one controllers, i don't have one. But i have conformed that this UpdateMotors() is related to rumble for emulated wiimotes.

This partially reverts commit "XInput: Apply immediately as well" (1958a10b6f) from pr # https://github.com/dolphin-emu/dolphin/pull/1560

Hopefully this fixes the xbox one controller rumble issue:
https://bugs.dolphin-emu.org/issues/9071

And in theory it might reduce the used usb bandwidth, as it was originally intended before pr 1560.

@JMC47: Please do a good amount of testing, to see if this breaks rumble for wiimotes or gamecube controllers emulated with xinput devices.
2016-04-23 13:45:10 +02:00
Ryan Houdek 36af9981c7 Merge pull request #3595 from Sonicadvance1/Android_headless
[Android] Headless support
2016-02-06 20:08:58 -05:00
Nick Tiberi e7ad0fd600 normalize and check upper/lower bounds of hats input on OS X 2016-02-05 16:40:59 -05:00
Ryan Houdek 6305f09467 Use cmake to determine if we are enabling the Android Controller Interface 2016-02-05 10:54:17 -06:00
mathieui 64e2f93f38 [Pipe input] Make the commands locale-unaware
Setting axis values in an automated way should not be locale-aware as
strtod is.
2016-01-20 22:48:22 +01:00
booto b89c79b9f2 Comment change to reflect what code does 2016-01-10 02:42:56 +08:00
Ryan Houdek 74478addeb Move Android JNI bits from DolphinWX to the Android folder. 2016-01-06 15:36:44 -06:00
Phatcat f62054e467 Android: More analog input configurations
Lets the user set the following in intervals of 10 between 10 and 100;
- Stick/Radius (default 100,000000)
- Triggers/Threshold (default 90,000000)
- Tilt/Modifier/Range (default 50,000000) + mapped Tilt/Modifier button
to the configurations for wiimotes & nunchuks
2016-01-04 13:35:04 +01:00
skidau f96f90b334 Ignored the mouse position unless the cursor is over the Dolphin window.
Fixes issue 8673.
2015-12-24 09:44:26 +11:00
Phatcat ca9c9b7135 Wiimote + Extensions for Android 2015-12-02 21:58:54 +01:00
spxtr 4faf958fee Fix some bugs in Pipe input parsing.
If there were two commands in the buffer at once, it would only run the
first because of an error in UpdateInput.

If you sent the command "SET C" it would segfault because of a logic
issue in ParseCommand.
2015-11-03 20:26:23 -08:00
Lioncash e76b1f2d56 Merge pull request #3170 from spxtr/pipes
Implemented GC Controller inputs via named pipes.
2015-10-28 16:39:57 -04:00
spxtr d9d6cf8eda GC controller input using named pipes
Currently only works on unix, but can be extended to other systems. Can
also be extended to do wiimotes.

Searches the Pipes folder for readable named pipes and creates a dolphin
input device out of them. Send controller inputs to the game by writing
to the file. Commands are described in Pipes.h.
2015-10-24 20:20:03 -07:00
catzilla4 867a1beb9f Added some headers to allow Dolphin to compile in my environment. 2015-10-06 19:09:57 -05:00
Lioncash a30681834c InputCommon: Use NSNumber numeric literals in Obj-C code 2015-10-02 13:23:46 -04:00
Lioncash 19ac565e0d Common: Move asserts to their own header 2015-09-26 18:51:27 -04:00
Lioncash c3332604fa ControllerInterface: Fix -Winconsistent-missing-override warnings on OSX 2015-09-17 15:15:15 -04:00
Lioncash 88c9c6d086 ExpressionParser: Make all control paths return a value in operator std::string 2015-09-09 22:41:47 -04:00
Lioncash 22635c1800 Add missing override specifiers 2015-09-05 22:40:19 -04:00
Lioncash 633be0387d General: Remove unimplemented function prototypes 2015-09-05 22:01:07 -04:00
Tillmann Karras b3ff66dc7a evdev: don't pass null path to the kernel 2015-08-15 12:51:34 +02:00
Rohit Nirmal ac54bbe02d Fix building with PCH disabled. 2015-08-04 12:59:34 -05:00
Tillmann Karras 5a05187b3b Fix some warnings
reorder, sign-compare, pessimizing-move
2015-08-04 10:58:24 +02:00
Gabriel Corona 2722f3f337 Stable device identifier for evdev 2015-08-02 01:51:06 +02:00
Lioncash 7ee0e75633 Remove unnecessary virtual keywords 2015-07-30 10:33:08 -04:00
sigmabeta 1cb07b1c48 Android: Wiimote UI Fixup 2015-07-23 23:17:16 -04:00
Ryan Houdek a8227ad9b1 Add Wiimote support to the Android backend.
Not actually wired up to the Android UI for configuration.
2015-07-21 21:33:23 -05:00
Scott Mansell dc25277a2f Merge branch 'stable' into 'master' 2015-07-13 12:40:38 +12:00
Rohit Nirmal c38ae5236e Fix building with PCH disabled. 2015-07-08 13:52:43 -05:00
Scott Mansell 6e969133f5 evdev: Delete rumble effects on the correct file descriptor.
Was using m_id insted of m_fd.
Also re-arrange the code so rumble effects always get deleted instead of
just on stop commands.
2015-07-07 16:59:10 +12:00
Tillmann Karras 64b51df55d evdev: fix -Wunused-private-field warning 2015-07-04 14:14:15 +02:00
Scott Mansell d2578000bb Merge branch 'stable' 2015-07-04 23:43:36 +12:00
Scott Mansell 77183899e0 evdev: Support axis with ranges which extend below zero. 2015-07-01 10:13:05 +12:00
Scott Mansell 2721fdf8a9 Linux: Add an evdev based controller backend, to replace SDL. 2015-07-01 10:13:05 +12:00
comex 700b850acd Fix misc. clang warnings - mostly complaints about inconsistent use of override.
Previously, MacOpenFile only overrode anything on OS X; otherwise it was
just a useless method, which is presumably why it wasn't marked override
in the first place.  Address this more sanely by wrapping it in #ifdef
__APPLE__.
2015-06-21 15:42:49 -04:00
Matthew Parlane 9e1aab663f Revert "SDL: handle SDL_QUIT event" 2015-06-08 13:43:39 +12:00
Tillmann Karras 9ec5a4544f SDL: handle SDL_QUIT event
Using SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS which installs a signal
handler for SIGINT and SIGTERM. There will be a way to prevent this in
2.0.4 but for now we'll need to handle SDL_QUIT.
2015-06-05 19:34:06 +02:00
Lioncash ac26f8e79f Pass strings by const reference where possible 2015-05-28 20:54:55 -04:00
Tillmann Karras 30ebb2459e Set copyright year to when a file was created 2015-05-25 13:22:31 +02:00
Tillmann Karras cefcb0ace9 Update license headers to GPLv2+ 2015-05-25 13:22:31 +02:00
Tillmann Karras 268f52e054 Add missing license headers 2015-05-25 13:11:47 +02:00
Tillmann Karras 6d9986846c Simplify some more license headers 2015-05-25 13:11:41 +02:00
Lioncash 9ad35cc986 ExpressionParser: Add missing break in UnaryExpression value setting 2015-05-22 15:02:22 -04:00
Matthew Parlane a86f2fe2e7 Merge pull request #2199 from skidau/remove-controls-lock
Cleaned up the controller locking mechanism
2015-04-21 11:13:30 +12:00
skidau 9947324296 Track the co-ordinates of the mouse relative to the pointed window instead of the original hwnd. 2015-03-28 11:38:14 +11:00
skidau 4f965da4f1 Revert the recent changes related to updating hwnd 2015-03-28 11:08:25 +11:00
skidau 98dce11f8c Updated the input plugins reference of hwnd on game start. Fixes the emu wiimotes mouse IR when rendering the game to a separate window. 2015-03-19 21:31:05 +11:00
skidau c76008b4b9 Removed the controller update lock as it is no longer needed. 2015-03-12 23:41:30 +11:00
skidau 780eef68f6 Fixed the crash that would occur when the Refresh button was pressed in the controllers config.
- Simplified the locking mechanism when controllers were updated
- Reloaded the config of the controls instead of re-initialising the control plugins
- Fixed controls being unresponsive after the Refresh button was pressed
- Disables the hotkeys while the controller config is open
2015-03-08 20:27:13 +11:00
Gabriel Corona c626ce5809 Do not fail to evaluate an expression if some input is missing
My keyboard layout does not have Alt_R but ISO_Level3_Shift. As a
consequence any control expression containing Alt_R fails to evaluate
completely and is unusable. This modification replace the missing term
of the expression by a dummy expression which always evaluate to
0. This way, the keybinding can work even if some keys are not
available.
2015-02-26 01:24:54 +01:00
Ryan Houdek 817abdd579 Remove an assumption in SDL.
We can compile with haptic support, and then not initialize due to haptics not being available.
So if we are compiling with haptics, test initializing with haptics and if that fails attempt to initialize without haptics before bailing out.
2015-01-19 16:07:28 -06:00
Adam D. Moss 3300c176e4 SDL haptic: minor style change based on review feedback 2015-01-13 16:00:35 +00:00
Adam D. Moss 076c2b8ec7 SDL input: unhardcode a few values.
& change effect length to half a second instead of infinite, in futile attempt to avoid runaway rumbles.
2015-01-11 11:57:48 +00:00
Adam D. Moss 63660cb17c SDL Input: More minor refactoring of SDL haptic effects 2015-01-11 11:42:30 +00:00
Adam D. Moss f47cce2210 SDL: Refactor the SDL haptic effects a little. 2015-01-08 15:17:29 +00:00
Karol Herbst 17ad68ff86 SDL: more global memset 2015-01-08 13:37:06 +01:00
Adam Moss 306c8d14db SDL Input: Support more types of force feedback for controllers through SDL. 2015-01-06 19:17:43 +00:00
comex fba3abe4cf Manually revert d34418100b 2014-12-20 00:33:15 -05:00
Jasper St. Pierre f3b739341e HW: Remove UpdateOutput
All of the rumble interfaces are now immediate mode.
2014-11-28 10:54:04 -08:00
Jasper St. Pierre 86e4da2c07 ForceFeedback: Apply immediately as well 2014-11-28 10:54:04 -08:00
Jasper St. Pierre 1958a10b6f XInput: Apply immediately as well 2014-11-28 10:54:04 -08:00
Jasper St. Pierre 1b3d0173f5 SDL: Apply updates immediately rather than going through UpdateOutput
We're going to remove UpdateOutput as it's redundant, and horribly
complicates the code.
2014-11-28 10:54:03 -08:00
Jasper St. Pierre f2787f620e ControllerInterface: Make UpdateInput / UpdateOutput return void
The return values here have never been checked, so it doesn't make sense
to return a value to begin with.
2014-11-28 10:50:45 -08:00
Jasper St. Pierre 61fcfc4bf2 ControllerInterface: Remove unused ClearInputState 2014-11-28 10:50:45 -08:00
Jasper St. Pierre 367a42dcfd ControllerInterface: Implement dummy UpdateInput / UpdateOutputs
Make the implementation here a bit easier.
2014-11-28 10:50:45 -08:00
Jasper St. Pierre 0c056c6411 DInput: Remove the unsupported Lights output
The LEDs feature doesn't actually do anything: the SetState method is
entirely commented out.
2014-11-28 10:50:45 -08:00
Jasper St. Pierre b5d4e8d37e ControllerInterface: Remove unused "force" parameter
I'm not sure when this nonsense of forcing locking the mutex when it's
already taken should have ever taken effect, but let's be thankful it
isn't now. That was a badly worded sentence.
2014-11-28 10:50:45 -08:00
Rachel Bryk e9cb629723 Fix some double->float conversions. 2014-11-11 14:14:22 -05:00
Lioncash fd39454ad3 Make some OSX-only functions static
Gets rid of function prototype warnings.
2014-10-28 08:41:50 -04:00
comex 6e774f1b64 Add missing includes where headers depend on other headers having been included first.
This is good hygiene, and also happens to be required to build Dolphin
using Clang modules.

(Under this setup, each header file becomes a module, and each #include
is automatically translated to a module import.  Recursive includes
still leak through (by default), but modules are compiled independently,
and can't depend on defines or types having previously been set up.  The
main reason to retrofit it onto Dolphin is compilation performance - no
more textual includes whatsoever, rather than putting a few blessed
common headers into a PCH.  Unfortunately, I found multiple Clang bugs
while trying to build Dolphin this way, so it's not ready yet, but I can
start with this prerequisite.)
2014-10-21 21:22:16 -04:00
Lioncash b7b2074cc2 ControllerInterface: Get rid of SetHwnd(), introduce Reinitialize()
Initialize now just takes the handle directly. Reinitialize is added because it is much more straightforward in comparison to doing the Shutdown-Initialize manually.
2014-10-15 09:29:25 -04:00
comex 7f6284c2fc Change a bunch of reference function arguments to pointers.
Per the coding style and sanity.
2014-10-02 03:00:33 -04:00
Lioncash a04a99251f Fix building Dolphin on OSX without precompiled headers 2014-09-21 00:37:47 -04:00