Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
SpiralCut opened this issue Feb 15, 2023 · 9 comments · Fixed by #8191

Comments

@SpiralCut
Copy link

SpiralCut commented Feb 15, 2023

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

@SpiralCut SpiralCut added the Bug label Feb 15, 2023
@stenzek
Copy link
Contributor

stenzek commented Feb 15, 2023

You'll need to figure out which bits each of the buttons correspond to. See here:

// TODO: This is likely wrong. Someone who cares can fix it.
static constexpr const InputBindingInfo bindings[] = {
{"StickLeft", "Stick Left", InputBindingInfo::Type::HalfAxis, CID_STEERING_L, GenericInputBinding::LeftStickLeft},
{"StickRight", "Stick Right", InputBindingInfo::Type::HalfAxis, CID_STEERING_R, GenericInputBinding::LeftStickRight},
{"StickUp", "Stick Up", InputBindingInfo::Type::HalfAxis, CID_THROTTLE, GenericInputBinding::LeftStickUp},
{"StickDown", "Stick Down", InputBindingInfo::Type::HalfAxis, CID_BRAKE, GenericInputBinding::LeftStickDown},
{"A", "A", InputBindingInfo::Type::Button, CID_BUTTON0, GenericInputBinding::Cross},
{"B", "B", InputBindingInfo::Type::Button, CID_BUTTON2, GenericInputBinding::Circle},
{"X", "X", InputBindingInfo::Type::Button, CID_BUTTON1, GenericInputBinding::Square},
{"Y", "Y", InputBindingInfo::Type::Button, CID_BUTTON3, GenericInputBinding::Triangle},
{"Z", "Z", InputBindingInfo::Type::Button, CID_BUTTON4, GenericInputBinding::L1},
{"C", "C", InputBindingInfo::Type::Button, CID_BUTTON5, GenericInputBinding::R1},
{"DPadUp", "D-Pad Up", InputBindingInfo::Type::Button, CID_DPAD_UP, GenericInputBinding::DPadUp},
{"DPadDown", "D-Pad Down", InputBindingInfo::Type::Button, CID_DPAD_DOWN, GenericInputBinding::DPadDown},
{"DPadLeft", "D-Pad Left", InputBindingInfo::Type::Button, CID_DPAD_LEFT, GenericInputBinding::DPadLeft},
{"DPadRight", "D-Pad Right", InputBindingInfo::Type::Button, CID_DPAD_RIGHT, GenericInputBinding::DPadRight},
};

@Mrlinkwii Mrlinkwii added the USB label Feb 15, 2023
@seta-san
Copy link
Contributor

I have the actual controller if you need help

@SpiralCut
Copy link
Author

SpiralCut commented Feb 18, 2023

@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
Copy link
Contributor

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

@seta-san
Copy link
Contributor

@SpiralCut
Copy link
Author

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
Copy link
Contributor

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
Copy link
Author

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
Copy link

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;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants