PCSX2 / pcsx2

PCSX2 - The Playstation 2 Emulator
https://pcsx2.net
GNU General Public License v3.0
11.49k stars 1.6k forks source link

[BUG]: USB Sega Seamic handling missing Start and Select Button Emulation in Controller Settings #8154

Closed SpiralCut closed 1 year ago

SpiralCut commented 1 year ago

Describe the Bug

The new controller settings screen (post new PCSX2 gui and plugin merge) has incomplete settings for the Sega Seamic as it is missing Start, Select, and Mode buttons.

See here for an image of the actual mic device image

In the USB controller settings page for the virtual Seamic it is missing the Start, Select, mode buttons in the latest builds (I'm using pcsx2-v1.7.4019 on win 11 64bit): Seaman

Note that the user must press the start button on the Seamic to begin the game (the dualshocks start button won't work) so this renders the Seaman games unplayable (SLPM-65217, SLPM-66685)

Reproduction Steps

You can confirm that the Start, Select, and Mode button settings are missing by 1) opening PCSX2 2) OPening Controller Settings 3) Selecting USB Port 1 or 2 (doesn't matter) 4) Selecting "Sega Seamic" from the dropdown and looking at the options available (note there are none for start, select, or mode)

You can also compare the options available with this photo of the actual Seamic image

Expected Behavior

1) The user should be able to assign buttons for Start, Select, and Mode in the Sega Seamic controller settings page 2) These settings should function in the Seaman games (user should be able to press start to begin the game for SLPM-65217)

PCSX2 Revision

v1.7.4019

Operating System

Windows 11

If Linux - Specify Distro

No response

stenzek commented 1 year ago

You'll need to figure out which bits each of the buttons correspond to. See here: https://github.com/PCSX2/pcsx2/blob/86ce464ee3b4ef3922e9844371701a4439db42dc/pcsx2/USB/usb-pad/usb-seamic.cpp#L362-L378

seta-san commented 1 year ago

I have the actual controller if you need help

SpiralCut commented 1 year ago

@stenzek Thank you for pointing me in the right direction

@seta-san Thanks, I have a rough work up the controller but I was wondering if I could get your help with creating the correct layout. If you still have the manual could you post a photo of controls page, and if not but you still have a ps2 could I ask you to start up a new seaman and in the very first area (where you can flip around between the tree, the ocean floor, and the aquarium and you have to catch bugs) can you tell me what each the controls map to?

Edit, also random note but it seems like the screen is constantly scrolling down so could be an emu bug as well

seta-san commented 1 year ago

Part of the issue is that the controller has 3 different modes. Which one do you emulate?

seta-san commented 1 year ago

https://github.com/jackun/USBqemu-wheel/issues/44#issuecomment-678797365

SpiralCut commented 1 year ago

The off/default mode for now though I’m hoping the mode button is just a software toggle and if I can find the right button to map to it seaman will handle the mode switching for us.

But I’m actually not so much interested in the axis/d-pad as I am the face and shoulder buttons. As of right now the mapping seems odd, only the shoulder buttons and the y button seem to be doing anything which seems like an incorrect layout

Florin9doi commented 1 year ago

If you still have the manual could you post a photo of controls page, and if not (...)

https://drive.google.com/file/d/1rrfKOvz7hz_dCEY0Q3EgOmKoIJ19o9yK/view

SpiralCut commented 1 year ago

Thank you very much for both the image and handling the actual problem. I've confirmed the new mapping has both select and start and also that the revised button layout matches what's seen on an actual ps2

sonik-br commented 8 months ago

Adding some more info. I have the controller and I've mapped it's report data. Both for input and output.

The mode button on the device set's it as: led off: independent analog and dpad led red: analog and dpad moves analog. dpad takes priority led green: dpad moves as analog, analog up/down moves z axis (up:min, down:max). analog left/right does nothing

Current mode is reported to host

Leds and mode can be changed via software.

typedef struct __attribute__ ((packed)) {
  uint8_t x;
  uint8_t y;
  uint8_t z;
  uint8_t hat : 4;
  uint8_t btn_a : 1;
  uint8_t btn_b : 1;
  uint8_t btn_c : 1;
  uint8_t btn_x : 1;
  uint8_t btn_y : 1;
  uint8_t btn_z : 1;
  uint8_t btn_l : 1;
  uint8_t btn_r : 1;
  uint8_t btn_select : 1;
  uint8_t btn_start : 1;
  uint8_t mode : 2; // Mode LED. 0x1 OFF; 0x2 RED; 0x3 GREEN
} seamic_report_t;
typedef struct __attribute__ ((packed)) {
  uint8_t led_orange : 1; // middle (orange)
  uint8_t led_green : 1;  // left (green)
  uint8_t led_red : 1;    // right (red)
  uint8_t : 1;            // unknow
  uint8_t unknow: 1;      // unknow. setting it as 1 seems to reset the device, or just set it back to it's default mode
  uint8_t mode : 2;       // set new mode. (0: do nothing; 1:red; 2:green)
  uint8_t : 1;            // unknow
} seamic_out_report_t;