51 Commits

Author SHA1 Message Date
libretroadmin
8507c4ba20 (input/connect) Cleanups 2023-02-23 18:53:17 +01:00
gblues
a4b934b71a
Fix some HID bugs (#14435)
* Fix Sixaxis gamepad operation

== DETAILS
It looks like commit 78e7d23c144c862d65ae1bf7ee41a1228bdfa380 broke
the DualShock. Sorry, @revvv, but this is probably going to break the
Retrode driver. We'll need to figure out a different solution.

* Fix a bunch of HID implementations

== DETAILS
As mentioned in the previous commit, the thing that broke the DS3
driver was a change to the wiiu HID handler, which did some pointer
math on the data buffer.

The thing is.. there's no reason to do that pointer math. Yet, I found
the same thing on almost every other HID driver: OSX, libusb, wiiusb.
The only other HID driver that did not do this was the Bluetooth
HID driver.

It doesn't make any sense. The only reason it doesn't crash is because
the memory right before the buffer is valid memory.

Change summary:
- remove the weird pointer math from all HID controllers
- remove the `#ifdef apple ...` in the ds3 and gamecube adapter
  drivers, because it's no longer needed.
- in the pad packet handlers, decrement data buffer offset references
  to account for the removal of the buffer manipulation.

* Fix DualShock 4

== DETAILS
Should've only subtracted 1, not 2; and now the pad works.

Also, added a PID to cover newer model DS4s. I picked "R2" out of the air
for the constant.

Tested on Mac OS

* Really really fix iohidmanager_set_report

A huge apology to @23rd for insulting your fix. I was wrong to call you
wrong.

That left the question: why did that change break the DS3?

Well, it's because `IOHIDDeviceSetReport` expects the report buffer to be
just the report. All of RA's HID SetReport calls include the report number
in the first byte, so we have to trim that off.

We actually do this in a different invocation of `IOHIDDeviceSetReport`
elsewhere in the file! This commit applies that same logic to
`iohidmanager_set_report`

This has two benefits:

1. The DS3 works
2. The DS3 no longer requres the user to press the PS button to activate
   it the first time. You plug it in and it Just Works, just like on Wii U.
2022-09-26 14:32:49 +02:00
LibretroAdmin
f5fc1fb24e Fix build 2022-09-09 19:26:21 +02:00
LibretroAdmin
4cd63c20f4 (input/connect) Use calloc for setting DualShock3 struct 2022-09-09 19:22:29 +02:00
twinaphex
55bf2b0083 (input/connect) Style nits 2021-10-06 02:52:19 +02:00
Nathan Strong
002c9a30c0 Implement button() for most HID drivers
== DETAILS
The HID drivers in `input/connect/` were missing an implementation
for button(), so I added it. The only exception is the wii driver,
which is really complicated and more than I wanted to try to tackle--
especially since WIIU has its own wiimote drivers.
2021-10-05 17:43:03 +00:00
Nathan Strong
a4d8ce7753 Try to support multi-pad HID devices
== DETAILS
I tried to modify the joypad connection interface to support
multi-pad HID devices ... it doesn't work. I'm not sure why.
2021-10-05 09:23:08 -07:00
Nathan Strong
5da1cd08ff Unify the HID driver architecture
== DETAILS
When I first implemented the Wii U HID architecture, I ended up
having to design my own implementation because, at the time, I did
not have a way to read the HID device string to allow the existing
code to successfully detect the gamepad.

After spending some time experimenting, I've figured out how to
do this. And that means I can better align the HID driver with other
platforms.

change summary:

- create a single state structure for all three sub-types of wiiu pads
  (kpad, wpad, and hid)
- eliminate confusing duplicate pad lists
- eliminate confusing duplicate HID pad drivers (ds3, gamecube
  adapter, etc)
- ensure the ds3 driver still works
2021-10-05 09:23:08 -07:00
twinaphex
a549805ad8 Fix low-level DS4 pad regression 2020-08-28 18:53:10 +02:00
twinaphex
6e1445c658 Reorder structs, alignment 2020-08-15 02:55:29 +02:00
Vladimir Serbinenko
1fcdddf579 Remove manual MSB_FIRST definitions and switch to retro_endianness.h 2020-04-21 04:16:55 +02:00
gblues
fb5b31faf3 Merge branch 'master' into gblues/hid 2018-04-14 14:18:03 -07:00
twinaphex
a82bb0ec94 Create special type input_bits_t 2018-04-08 20:21:12 +02:00
gblues
0100d58ffb WIP: evolve driver implementation
== DETAILS

I've created the concept of a hid_driver_instance_t which is basically
a central place to store the hid pad driver, hid subsystem driver,
the pad list, and the instance data for the above in a central location.

The HID pad device drivers can use it to perform HID operations in a
generic manner.

This is more-or-less a pause point so I can catch up with upstream.

== TESTING

Haven't tested this yet. Compiles without warnings though!
2018-03-29 23:37:11 -07:00
gblues
5b37ced196 Update HID pad driver architecture
== DETAILS

The current HID implementation assumes a very low-level USB library
is being used. This causes a problem on Wii U, because the Cafe OS
only exposes a high-level interface.

To get these functions exposed to the HID pad drivers, I had to make
three changes:

1. I added the legacy "send_control" function to the HID driver
   interface
2. I modified the signature of pad_connection_pad_init() to send the
   driver pointer instead of the function pointer
3. I updated the HID pad drivers to keep the pointer to the driver
   instead of the function pointer, and updated the calls into the
   send_control function as appropriate
4. I updated the HID drivers to use the new pad init signature

== TESTING
Untested, in theory it should work without a hitch because at this
point all I've done is abstract things a little. I still need to
update the HID pad drivers to use the Wii U-specific calls as
appropriate.
2017-12-30 04:41:01 +01:00
gblues
6904101c44 Clean up trailing whitespace
== DETAILS

Really simple code cleanup, because my editor flags trailing whitespaces
and it's pretty annoying.
2017-12-12 00:24:18 -08:00
twinaphex
f0c143766e Change to 256bit macros 2017-12-05 12:07:35 +01:00
twinaphex
e94300a581 Get rid of a lot of RARCH_INPUT_STATE_BIT_ macros - replace them
with BIT128_ equivalents instead
2017-12-05 09:22:56 +01:00
David Walters
f09477d46a additional compile fixes 2017-11-28 10:36:16 +00:00
David Walters
c5bdc02d6f replace uint64_t with retro_bits_t* for pad buttons state 2017-11-28 10:04:34 +00:00
twinaphex
96c8ca5a09 Header update #1 2017-01-22 13:40:32 +01:00
twinaphex
afe67ca254 C89/C90 don't support bitfields on uint8_t - work around this 2016-06-07 14:47:54 +02:00
twinaphex
97d5a971a4 Change header includes 2016-04-17 07:34:01 +02:00
netux79
bca4ccb155 (GX) Refactor of the Wii USB HID support. Now it's working!
In order to have a controller working you need:
1) Have a matching HID autoconfig file in autoconfig/hid for your controller.
2) Create a "connect" driver for the pad in "input/connect" folder (source code of RA).
3) Once you are in RA, change the joystick driver to HID and restart.
4) You may be now able to use you USB HID compatible pad in RA.

I included some "connect" drivers as an example. It also need to include them for compilation.
2016-02-04 17:01:03 -05:00
twinaphex
2e8f015de3 Cleanups 2016-02-04 21:07:02 +01:00
twinaphex
347a18cb30 Update input headers 2016-01-10 04:33:01 +01:00
twinaphex
d70d09ad8d (connect_ps4.c) Cleanup 2015-12-12 17:58:40 +01:00
twinaphex
a3c34a7813 Cleanups 2015-11-28 02:31:19 +01:00
twinaphex
f95049e99c Add wiiusb_hid driver courtesy of @xerpi 2015-08-30 09:48:38 +02:00
twinaphex
135ee2f503 Use UINT64_C(1) everywhere instead of 1ULL 2015-07-12 07:53:46 +02:00
twinaphex
e74e402cdc More C89 build fixes 2015-06-30 14:37:11 +02:00
twinaphex
2087a41f20 (connect) Style nits 2015-04-07 18:49:21 +02:00
Toad King
5701f4f73a libusb updates, still need to figure out config issue preventing keys being registered 2015-04-06 22:07:59 -05:00
twinaphex
6433cdf2e7 (input/connect) Cleanups 2015-04-02 18:48:44 +02:00
twinaphex
6ea55bfaa9 (connect_ps4.c) Fix condition check 2015-04-02 18:28:29 +02:00
twinaphex
b9e6b014e3 Start preparing joypad_connection code for cross-platform purposes 2015-04-02 17:49:32 +02:00
Twinaphex
013038d3ef (connect_ps4.c) Cleanups 2015-04-01 01:23:43 +02:00
Twinaphex
28a85d9331 (connect_ps4.c) Make analog work 2015-04-01 00:20:39 +02:00
Twinaphex
467c007864 (connect_ps4.c) PS4 pad works now - TODO: analog/rumble (potential FUTURE: touchpad and other stuff) 2015-03-31 22:28:56 +02:00
Twinaphex
7e97764882 (connect_ps4.c) Update 2015-03-31 21:42:43 +02:00
Twinaphex
a4190a9c3f (PS4/connect_ps4.c) Update 2015-03-31 21:40:22 +02:00
Twinaphex
ebd85ea02b (PS4/joypad_connection) PS4 joypad is starting to work 2015-03-31 21:18:21 +02:00
Twinaphex
047fdbd3fc (PS4/joypad_connection) Changes 2015-03-31 19:23:06 +02:00
twinaphex
453321c50b Start updating headers 2015-01-07 17:46:50 +01:00
twinaphex
f08f78e86a (joypad_connection) start calling 'connect' function 'init'
and 'disconnect' 'deinit'
2014-10-22 07:59:52 +02:00
twinaphex
c62d52de0f Start properly implementing libretro SDK for boolean.h include
header, glsym, and rthreads
2014-10-21 05:05:52 +02:00
twinaphex
0fb301fa43 (joypad/connect) Change 'index' local variables 2014-10-20 20:32:41 +02:00
twinaphex
7c842f9342 More stdio.h header include removals 2014-10-16 07:29:42 +02:00
Twinaphex
c9bd4ad589 Comment out unused code 2014-10-15 03:25:36 +02:00
Lioncash
316870201f Fix possible memory leaks in hidpad_ps3_connect, hidpad_ps4_connect, and hidpad_wii_connect 2014-10-13 17:39:14 -04:00