ndeadly / MissionControl

Use controllers from other consoles natively on your Nintendo Switch via Bluetooth. No dongles or other external hardware neccessary.
GNU General Public License v2.0
2.4k stars 137 forks source link

[Controller Request]: Steelseries Stratus XL #599

Closed cstraw2022 closed 1 year ago

cstraw2022 commented 1 year ago

Controller Name

Steelseries Stratus XL

Current Controller Behaviour

Controller successfully pairs with the console but doesn't respond to inputs

Controller vendor and product ID

No response

Supported Features

Input Report Format

No response

Additional Details

No response

ndeadly commented 1 year ago

This controller has been requested at least a couple of times now. Both times the users have stopped responding. Please don't be the third 😅

Here's the existing issue and a new build that whitelists the controller on version 0.9.0. Basically, I need either confirmation that the controller works with the new build with existing steelseries mapping, or in the case that the mappings are wrong, I'll need you to use the hid_report_viewer application posted in the original issue to record the incoming controller states for each button press so I can create a new handler for this controller. Let me know if you have any further questions.

MissionControl-0.9.0-steelseries-stratus-xl-1413bf9.zip

cstraw2022 commented 1 year ago

Hello! Sorry for taking so long for the response. Using the files you've provided me, the controller connects but the mappings are wrong. Here's what I got for from the hid_report_viewer:

hid_StratusXL_inputs.txt

For minus and home, whenever I held down or tapped either, the input would rapidly fluctuate (and spam going to home) so I wasn't entirely sure, but I got screenshots of the most common values I saw for both:

neutral: neutral

home: home

minus: minus

Hope this helps

ndeadly commented 1 year ago

Looks good. It's getting late here so I won't be able to make any changes until tomorrow.

Regarding the buttons you had problems with, you should be able to use hid report viewer with the regular release version of Mission Control to avoid the problem of them mapping to something they shouldn't. The build I posted previously was just to check whether the existing mappings would work.

ndeadly commented 1 year ago

Try this one for a start. It looks like the button layout is the same as some of the other controllers, just at a different offset. I didn't map the buttons you weren't totally sure on for now, in case they're also located at the expected locations. Let me know what works and what doesn't from this one and I'll update it if necessary.

MissionControl-0.9.0-steelseries-stratus-xl-d4c2771.zip

ndeadly commented 1 year ago

I swear this is the fucking bermuda triangle of controllers. Everyone who requests support for it disappears under mysterious circumstances 💀

Masamune3210 commented 1 year ago

It's the ninjas!

cstraw2022 commented 1 year ago

Yea Sorry 😭😭 By the time you sent the updated files I went back to college and I have the controller with me but I don't have access to a modded switch right now. I won't be going home until summer so hopefully someone else can test those new files sooner.

ndeadly commented 1 year ago

Heh, it's ok. I was hoping to include it in the upcoming release is all. It can wait until the next one.

quoije commented 1 year ago

Try this one for a start. It looks like the button layout is the same as some of the other controllers, just at a different offset. I didn't map the buttons you weren't totally sure on for now, in case they're also located at the expected locations. Let me know what works and what doesn't from this one and I'll update it if necessary.

MissionControl-0.9.0-steelseries-stratus-xl-d4c2771.zip

Hi @ndeadly, I just tested your build and it looks like the d-pad works, however the XYBA buttons, the L1 and the joystick don't seems to work very well (like pushing down the left joystick on seems to emulate to A button and pushing up emulate the START button.) I didn't find any app to test the inputs (test it out in the main screen), however if you have one, I can test it out for your you. Let me know if you need anything else. Thanks.

ndeadly commented 1 year ago

@quoije the console has a built-in button testing utility under Controllers and Sensors in the system menu. You can also test the analog sticks using the calibration option in the same menu. Knowing exactly which buttons are correct and which are not would be useful. You could also try and map out the input data yourself using my hid_report_viewer app like karawsr did above to either prove the previously reported values are correct, or that there are potentially different layouts for different controller firmwares.

quoije commented 1 year ago

@quoije the console has a built-in button testing utility under Controllers and Sensors in the system menu. You can also test the analog sticks using the calibration option in the same menu. Knowing exactly which buttons are correct and which are not would be useful. You could also try and map out the input data yourself using my hid_report_viewer app like karawsr did above to either prove the previously reported values are correct, or that there are potentially different layouts for different controller firmwares.

@ndeadly I was able to map all the inputs using HID viewer, however there are some values that I wasn't able to capture since it looks like it was random (the XX value in the text file). I attached this file in this comment. I also wrote what input did work and didn't work using the built-in tool.

Neutral value:

01 0f 00 00 00 00 00 00 00 00 00 00 XX 04 00 00

StratusXL.txt

ndeadly commented 1 year ago

@quoije thanks! Try this one out and see what's working now.

MissionControl-0.9.2-steelseries-stratus-xl-1c32015.zip

quoije commented 1 year ago

@quoije thanks! Try this one out and see what's working now.

MissionControl-0.9.2-steelseries-stratus-xl-1c32015.zip

Seems to be the same, L1 L2 R1 R2 XYAB, the right joystick and R3L3 doesn't work. However, the dpad, the select button and the home button work.

The left joystick spam a series of random inputs (XYAB L1L2R1R2) when I pull the joystick up or down.

Hope that helps.

Thanks.

ndeadly commented 1 year ago

Ahh, I see the problem. The stick values for this controller are actually signed 16-bit integers. I had them as 8-bit like the other controllers. I'm using the report size to differentiate between this and other controllers, so this was causing the wrong mapping function to be called. Hopefully this one is working now.

MissionControl-0.9.2-steelseries-stratus-xl-c5184b6.zip

quoije commented 1 year ago

Ahh, I see the problem. The stick values for this controller are actually signed 16-bit integers. I had them as 8-bit like the other controllers. I'm using the report size to differentiate between this and other controllers, so this was causing the wrong mapping function to be called. Hopefully this one is working now.

MissionControl-0.9.2-steelseries-stratus-xl-c5184b6.zip

Yup you fixed most of the issues. L1,L2 XABY now works. However, the L2 and R2 don't work. Also, both joysticks look like they don't register any inputs (R3 and L3). For example, I tested it in Zelda and the camera was all up I was able to move the camera a little by going up left with the right joystick. It seems to be the same with the left one also.

ndeadly commented 1 year ago

Also, both joysticks look like they don't register any inputs (R3 and L3)

What do you mean by this? The L3/R3 (stick presses) don't work, or the analog stick input isn't working properly? If the latter, please check the sticks using the stick calibration feature and describe the movement of the marker relative to what you would expect. I may have messed up the conversion to the unsigned 12-bit values used by the Switch.

quoije commented 1 year ago

Also, both joysticks look like they don't register any inputs (R3 and L3)

What do you mean by this? The L3/R3 (stick presses) don't work, or the analog stick input isn't working properly? If the latter, please check the sticks using the stick calibration feature and describe the movement of the marker relative to what you would expect. I may have messed up the conversion to the unsigned 12-bit values used by the Switch.

Ah yeah, that wasn't very clear haha I meant that both of the axis and the buttons (R3 and L3) doesn't work properly.
The R3 and L3 doesn't work and it seems that both joysticks are stuck at the bottom left position, like this:

image

I try using the stick calibration feature but I got stuck at the "Tilt the Stick that you want to calibrate." screen and couldn't go further since I don't think it recognize when I tilt the stick.

ndeadly commented 1 year ago

I made a series of dumb mistakes when copying the existing steelseries format which I thought was near identical. Turns out I wasn't even mapping the buttons you said didn't work, and the stick scaling correction factor was incorrect.

Hopefully this one gets everything right now MissionControl-0.9.2-steelseries-stratus-xl-5c4aad5.zip

quoije commented 1 year ago

I made a series of dumb mistakes when copying the existing steelseries format which I thought was near identical. Turns out I wasn't even mapping the buttons you said didn't work, and the stick scaling correction factor was incorrect.

Hopefully this one gets everything right now MissionControl-0.9.2-steelseries-stratus-xl-5c4aad5.zip

Ah don't worry about it, i'm just glad to get this controller working :) For the newest build, R3 and L3 are now working. Both joysticks axis also work. However everything is reversed.
(Pushing bottom right input top left and pushing bottom left input top right) This is happening for both joysticks. L2 and R2 still don't work and it seems that the start button now doesn't work also.

ndeadly commented 1 year ago

So I'd accidentally inverted the stick x-axis instead of y, so that explains the sticks being the way they are. And it turns out there is only analog data for the triggers L2/R2. I could have sworn there was also a digital value for it too.

There is definitely something cursed about this controller. Normally I get this stuff first or second try and it takes all of 15 minutes or so...

Anyways, I think this should be the final revision. MissionControl-0.9.2-steelseries-stratus-xl-e49fb6f.zip

quoije commented 1 year ago

So I'd accidentally inverted the stick x-axis instead of y, so that explains the sticks being the way they are. And it turns out there is only analog data for the triggers L2/R2. I could have sworn there was also a digital value for it too.

There is definitely something cursed about this controller. Normally I get this stuff first or second try and it takes all of 15 minutes or so...

Anyways, I think this should be the final revision. MissionControl-0.9.2-steelseries-stratus-xl-e49fb6f.zip

Oh perfect, the start button and the axis is now fixed. The only thing that needs to be fixed is that L2 and R2 are swapped, L2 = ZR and R2 = ZL. Beside this, everything is fine.

ndeadly commented 1 year ago

Haha, I really can't get this one right 😅 One moment...

ndeadly commented 1 year ago

@quoije MissionControl-0.9.2-steelseries-stratus-xl-51be9e7.zip

quoije commented 1 year ago

@quoije MissionControl-0.9.2-steelseries-stratus-xl-51be9e7.zip

Yes, everything is gucci. Thanks for all your work, I appreciate it :)

ndeadly commented 1 year ago

Great, I can finally merge this one. Thanks for your help!

sunyatasattva commented 1 year ago

Hello @ndeadly are you going to publish a release for this fix? I'm another Stratus XL user and can confirm the test release is working for me!

ndeadly commented 1 year ago

@sunyatasattva this will be included in the next release I make. For now the build in this thread is as good as a release. The only difference from that and an official release is that there might be more recent commits I have made to other aspects of the project that haven't been included.

sunyatasattva commented 1 year ago

@ndeadly Thanks for the answer! I just wanted to give further confirmation and didn't mean to push. I thought a new controller supported was worth a release, but I don't know your release process 😊

ndeadly commented 1 year ago

No drama, I didn't see it like that at all. Just wanted to say that the build in here is as good as a release. Making a proper release requires effort (writing up release notes/changelog, making announcements on various social media platforms etc). I typically only make a new release when either a new firmware version comes along that forces my hand, a critical bug needs fixing, or I feel I've accumulated enough changes since the last one to make it worth the trouble.