kozec / sc-controller

User-mode driver and GTK3 based GUI for Steam Controller
GNU General Public License v2.0
1.54k stars 130 forks source link

Windows Version #215

Open uppps opened 7 years ago

uppps commented 7 years ago

There is a WIP Windows branch but there have not been any progress in the last month. Can I expect a release anytime soon?

kozec commented 7 years ago

Nope, unless you have someone with at least some Windows coding experience :D

What I was trying to do was to get at least SendInput level of "emulation", what would work badly and with no gamepad support. AFAIK, there is no way to actually emulate gamepad spare of replacing xinput.dll and/or some system libraries.

Ryochan7 commented 7 years ago

There are two main options for emulating an Xbox 360 gamepad across the system on Windows. The old standby is using the Scp Virtual Bus Driver. That driver is not really being maintained anymore though. A newer driver that will eventually replace it is called ViGEm. One nice feature about that driver is that it will be capable of emulating more than just an Xbox 360 gamepad. It still has some stability problems so it is not ready for mass consumption yet. Hopefully those issues will be ironed out soon.

https://github.com/nefarius/ViGEm

kozec commented 7 years ago

Thanks, that sounds useful.

But just to be clear, Windows support is currently somewhere at very bottom of TODO list, somewhere bellow support for non-steam controllers, i18n and probably VR integration or something :D But contributions are always welcomed.

There is long list of stuff that needs to be solved in potential Windows port:

I'll update that list if I remember anything else :)

BanCrash commented 7 years ago

Well, thanks for at least having it on the todo list!!

kozec commented 7 years ago

Absolutely nothing is happening, I'm just writing down library that may be usable as uinput replaceament.

http://vjoystick.sourceforge.net/site/index.php/dev216

BanCrash commented 7 years ago

Like the meme says, it's something!! Thanks for letting us know!

uppps commented 6 years ago

@kozec Any progress? There haven't been any new commits in the windows branch recently.

elboletaire commented 6 years ago

I know nothing about windows programming (at least at that low level), so I cannot help, but would love to see this implemented.

I understand the priority of the tasks, but man, having this app on windows would be awesome. I always said that the worst thing about steam controller is... steam, and this app solves that issue and in a very, very good manner, seriously! good job @kozec and other collaborators!

kozec commented 6 years ago

If someone is still watching this and feels really adventurous, there is now work-in-progress SCC that should work on Windows.

faldor20 commented 5 years ago

I AM STILL WATCHING.... :) i have been for a long time, its awesome to see this might one day be a real thing, i would love to ditch the steam setup for my non steam games.

kozec commented 5 years ago

It kinda works already, as long as you don't need GUI :)

Main problem is this ViGEM issue that can literally freeze Windows 7, but I can make another prerelease with xinput-compatible pad emulation at least for Win10 tomorow.

faldor20 commented 5 years ago

ahh i see, well considering most of the world is moving towards windows 10 anyway i think even if it never gets fixed dropping support for windows 7 while unfortunate is not totally unacceptable.

dastious commented 5 years ago

Win 7 user, seems to work but it only emulate ps4 pad, i cannot use the mouse pad or mix desktop option with mouse or keyboard. Also Desktop mode only work outside of game, inside game it stop working. Also i need to launch many time the daemon, because it always return serial number can't be obtain.

Is there a way to get mouse pad ? Or something useful ? Also the camera pad for ps4 don't work : relXY function is not here. So for now the pad is not usable.

kozec commented 5 years ago

Win 7 user, seems to work but it only emulate ps4 pad

That's intentional, and probably will stay like that for foreseeable future :( It's better alternative than crashing entire OS.

Also i need to launch many time the daemon, because it always return serial number can't be obtain.

... but this is not. Those serials are working differently between "versions" of Steam Controller, but I thought I had it finally got it right. I'll add workaround for case when it can't be retrieved at all.

Also the camera pad for ps4 don't work : relXY function is not here.

Probably good thing to prioritize, thanks for reminding me.

kozec commented 5 years ago

New pre-release now works with XInput on Windows 10.

pk044 commented 5 years ago

i can't move in-game(seems like the left stick works like the right one), do I have to remap the keys in some config? should it be done in one of the sccprofiles?

thanks for adding windows support!

john-2000 commented 5 years ago

Firstly monster thanks! I have it working as a keyboard and mouse but I would like some help as I am not sure I am using it right. I have VIGEM installed and see a couple of profiles loaded when I start the daemon how do I activate different profiles? (if I just wanted the SC as an generic / Xbox controller, could I just overwrite the currently loaded profile with the xbox one?)

I gather the OSD is not working yet (? or does it require some GTK dependencies on windows?

Ryochan7 commented 5 years ago

Thank you for the work on the Windows port. I have tried it and the daemon can interact with ViGEm but there are issues with the controller state translation.

  1. ABS_RY is inverted.
  2. LS mapped to ABS_LX and ABS_LY causes some erratic behavior especially when the stick is moved almost due north. ABS_LY will get inverted only for a small region of the stick.
  3. ABS_RZ seems to get stuck at about 3/4 pull sometimes.
  4. The gamepad state seems to reset when there is no new activity on the Steam Controller. Buttons will not stay held down if there is no axis activity.

Since exclusive access to the Steam Controller cannot be obtained yet, I have been testing playing Turok 2 from GOG Galaxy.

kozec commented 5 years ago

i can't move in-game(seems like the left stick works like the right one), do I have to remap the keys in some config? should it be done in one of the sccprofiles?

Yes, until GUI is there, editing sccprofile file in text editor should work.

I start the daemon how do I activate different profiles? (if I just wanted the SC as an generic / Xbox controller, could I just overwrite the currently loaded profile with the xbox one?)

I gather the OSD is not working yet (? or does it require some GTK dependencies on windows?

OSD menu should work, but I noticed it takes few seconds to load on Windows. Pressing steam button should spawn it.

@Ryochan7 thanks for report, I'll check on those points.

Ryochan7 commented 5 years ago

I recorded a short video showing some of the issues that I was having. Hopefully that will be a useful reference.

https://www.youtube.com/watch?v=j_V0lwKFlTc

kozec commented 5 years ago

Okay, I believe I managed to fix all of that and put it into prerelease number 3.

elboletaire commented 5 years ago

I've just tried that latest version and works pretty well under windows 10. Great work @kozec 😃.

Some errors were risen to the console, although the controller continued working as expected and the executable didn't exit in any of them; given that, I'd say these are more warnings than errors, as everything continues working as expected.

Basically, the warnings arise when you:

The error is the same for all (Error 10054; dropping client), although, when you try to open the overlay again there's a different message before that error:

[E] OSD          Failed to lock controller

Edit: I just found an issue stopping my controller using the overlay; I powered it off, and when trying to turn it on again, the scc-daemon console started throwing a lot of Input/Output errors (without any other details). Shutting down the daemon and starting it again didn't help; neither with the controller. Restarting windows finally "fixed it", and now I can't reproduce it again. I didn't reboot after installing ViGEMBus, so it may be related.

kozec commented 5 years ago

Basically, the warnings arise when you:

  • Press the steam button when the overlay is already open.

That's by design, only one menu should be shown at time. Menus are "locking" buttons they are using and that mechanism is used to prevent multiple menus spawning at once.

  • Every time you select any of the overlay options.

The error is the same for all (Error 10054; dropping client),

That's just means that menu is finished and closed connection, so it's expected, but I should probably silence it.

Ryochan7 commented 5 years ago

Just tried the latest pre-release and all of those issues have been fixed. Thank you.

CriticalComposer commented 5 years ago

My only issue currently is that sc-controller doesn't take over exclusive control of the device. So Lizard Mode or Steam Configs will activate as well as the sc-controller profile. I figure that you're already aware of this but it is the largest hurdle for the program currently. Otherwise, excellent job on getting it to where its at. I'm looking forward to see the Windows version evolve into the full blown Steam Input replacement that the Linux version is.

kozec commented 5 years ago

New pre-release added

It now includes GUI, which actually makes it even more experimental than one before :)

kozec commented 5 years ago

(also, I'm not ignoring @CriticalComposer message, it's just that I don't know if I can help with that. AFAIK, this is just how Windows works. But I'll definitely take opportunity if I find that I'm mistaken)

CriticalComposer commented 5 years ago

Dang, that sucks. It kinda overrides some of the utility of sc-controller. You either end up with double inputs or you have to run a blank Desktop config in Steam, which technically works but the whole point of sc-controller (in my eyes) is to circumvent the Steam dependency. I'm not a huge Steam user (I prefer Itch and GOG) so I'm always looking for ways to ditch Steam while retaining the full capabilities of the Steam Controller.

edit: on your "Running SC Controller on Windows" wiki page you have a link that directs to a tutorial for installing ViGEm via Powershell. The recent update to ViGEm (https://github.com/ViGEm/ViGEmBus/releases/tag/v1.16.112) has changed from using Powershell to using a Windows setup wizard so it's a LOT easier to install for your average user.

kozec commented 5 years ago

The recent update to ViGEm (https://github.com/ViGEm/ViGEmBus/releases/tag/v1.16.112) has changed from using Powershell to using a Windows setup wizard so it's a LOT easier to install for your average user.

Great, I changed page accordingly.

dan990 commented 5 years ago

I have a problem, the program doesn't seem to hook with the controller i get the following errors:

[E] USB Failed to open device 2 on bus 1: No such device (it may have been disconnected) [E] sc_by_cable Failed to open '/win32/usb/1/2'

. Before it kind of worked and the inputs where detected in windows devices, the emulated xbox pad recognized my inputs (this was in v0.4.9.3 on a previous windows 10 installation with avast) and the guide buttom worked and showed the modes but now when I run the scc-deamon.exe or sc_controller.exe nothing is happening, no response from the controller inputs (apart from lizard mode) on emulated xbox controller.

BTW, I have in this installation of windows a kind of phantom xbox controller that appears when I open the devices, it doesn't even show inputs to test. I have glosc and that works but do not know if I somehow Flunked my installation of ViGEm.

Bricky5 commented 5 years ago

On the Gyro per-axis control, i can't adjust any of the settings, they're all greyed out.

Same goes for the settings too.

dan990 commented 5 years ago

The program only works when using the dongle, not when the controller is plugged directly. I tried, and when putting new bateries and trying with the dongle the scc daemon suddenly comes to life.

I prefer to use a wired connection so I don't waste a lot of batteries.

Bricky5 commented 5 years ago

Ok, more specificity Using Dongle. I'll try the batteries, but it's not the daemon. it's the GUI

dan990 commented 5 years ago

Sorry about that, I meant the emulation, the GUI opens and all but there are no response from the controller. Just tried it again connected and the daemon throws these two errors

[E] USB          Failed to open device 3 on bus 2: No such device (it may have been disconnected)
[E] sc_by_cable  Failed to open '/win32/usb/2/3'

The GUI controller symbol (the one that lights on green when emulating) is grey

Then connect via dongle and the daemon is responsive, all inputs I use are registered and the GUI controller symbol shows green.

I already tried using games when connected via dongle and it does work, all keybindings are responsive, high precision template works

In short, the program always worked, but only recognizes my controller via dongle, not when directly plugged in.

Bricky5 commented 5 years ago

Ok, separate error from all the buttons in the GUI being greyed out. got it.

kozec commented 5 years ago

I'm sorry, I'm not entirely sure what are you reporting. But gyroscope is what's am implementing right now, so anything related to it doesn't work yet and that's why it is grayed out in GUI.

Bricky5 commented 5 years ago

Ah. Then what about the settings? why are they greyed out?

On Tuesday, May 21, 2019, 2:05:22 PM EDT, kozec <notifications@github.com> wrote:  

I'm sorry, I'm not entirely sure what are you reporting. But gyroscope is what's am implementing right now, so anything related to it doesn't work yet and that's why it is grayed out in GUI.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

Bricky5 commented 5 years ago

Sorry about the mess of replying through email

To clarify: The Global settings for everything are also greyed out

dan990 commented 5 years ago

Its an experimental build for windows, I imagine that the linux version already has those features.

Bricky5 commented 5 years ago

that's why this is in an issue titled "windows version"

kozec commented 5 years ago

The Global settings for everything are also greyed out

Yes, that's same case. I should have probably write that somewhere.

rusagent commented 5 years ago

Does Steam have to be running? Because when i exit Steam the controller goes into Lizard mode and is just kinda of a keyboard and mouse... I can't seem to get sc-controller to work...

Everytime i open scc-daemon.exe i get these messages:

[I] Daemon Starting SC Controller Daemon v0.4.5... [I] Daemon Created control socket C:\Users\xxx\AppData\Roaming\scc\daemon.socket [I] Daemon Initializing drivers... [D] Mapper Creating virtual devices... [d] Mapper Gamepad: <ViGEm x360 Controller 0x0110baf0> [d] Mapper Mouse: <Winapi mouse device 0x0127ea68> [d] Mapper keyboard: <Winapi keyboard device 0x0127eb98> [I] Daemon Activated default profile 'C:\Users\xxx\Downloads\sc-controller-0.4.9.4-win32-pre-release\share\default_profiles\Desktop.sccprofile' [E] USB Failed to open device 10 on bus 2: No such device (it may have been disconnected) [E] sc_by_cable Failed to open '/win32/usb/2/a' [I] Daemon Ready.

kozec commented 5 years ago

Does Steam have to be running? Because when i exit Steam the controller goes into Lizard mode and is just kinda of a keyboard and mouse... I can't seem to get sc-controller to work...

No, running Steam will conflict with sc-controller.

JPili commented 5 years ago

I was having the same problem as rusagent and it took me a few hours to figure out but I realized that the problem might be that the sc-controller folder is not in the OS drive. My OS drive is C: but sc-controller was located in the D: drive. So I moved the folder to the C: drive and the problem was fixed!

You should add a warning that says the sc-controller folder should be in the OS drive. I'm using Windows 10, by the way.

JPili commented 5 years ago

Nevermind... It stopped working again for some reason... The problem isn't the folder location. It's something else.

Edit: And now it's working again... I'm not completely sure what did it but I'm pretty sure it was because I launched sc-controller, turned off emulation, and then manually launched sc-daemon.exe. But now, I don't have to do all that because now it just automatically works when I launch sc-controller. Maybe doing all that fixed something. It's even working when I launch sc-controller from my other hard drives; it doesn't have to be my OS drive.

notNSANE commented 5 years ago

Can confirm that this isn't working when wired, or that there's something wrong.

... and also, if we don't find a way to disable Lizard Mode all might be useless. Maybe if it won't conflict with Steam, then we could technically create a nulled config and load it up when we use SC Controller.

kozec commented 5 years ago

... and also, if we don't find a way to disable Lizard Mode all might be useless. Maybe if it won't conflict with Steam, then we could technically create a nulled config and load it up when we use SC Controller.

sc-controller disables lizard mode right after it gains access to steam controller, so once I manage to find reason why it can't get access to wired controller, that should be solved as well.

JPili commented 5 years ago

I have a bug that prevents me from opening the "Right Pad" window whenever there's anything set to it. It's openable if there's nothing set to it yet but as soon as I save any sort of binding to it. It's unable to be opened. Is that only happening to me?

kozec commented 5 years ago

New release added, should be fixing all bugs mentioned so far with exception of wired SC issues.

CriticalComposer commented 5 years ago

Just tested the new release and no matter what button I click on I get this error

Exception AttributeError: "Parameter instance has no attribute '_cparam'" in <object repr() failed> ignored
Traceback (most recent call last):
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/gui/controller_widget.py", line 64, in on_click
    self.app.show_editor(self.id)
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/gui/app.py", line 384, in show_editor
    ae = self.choose_editor(action, "", id)
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/gui/binding_editor.py", line 162, in choose_editor
    e = ActionEditor(self.app, self.on_action_chosen)
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/gui/action_editor.py", line 106, in __init__
    self.load_components()
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/gui/action_editor.py", line 163, in load_components
    self.load_component(c)
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/gui/action_editor.py", line 179, in load_component
    instance = cls(self.app, self)
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/gui/ae/axis_action.py", line 45, in __init__
    self.circular_axis = MouseAction(Rels.REL_WHEEL)
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/actions.py", line 169, in __init__
    pars = [ Parameter(v) for v in args ]
  File "C:\Users\SteamOS\Downloads\sc-controller-0.4.9.5-win32-pre-release\python/scc/actions.py", line 75, in __init__
    raise TypeError("Cannot convert %s" % (repr(value),))
TypeError: Cannot convert <Rels.REL_WHEEL: 1032>

Also, I can't get my DS4 recognized at all. The config is loaded and Emulation is enabled, the ViGEm driver is showing up but when I test the output for it (in Windows' Game Controllers window) I get no output. I'm on Windows 10 64-bit v1809.