Coder Social home page Coder Social logo

kozec / sc-controller Goto Github PK

View Code? Open in Web Editor NEW
1.5K 62.0 129.0 8.1 MB

User-mode driver and GTK3 based GUI for Steam Controller

License: GNU General Public License v2.0

Shell 0.67% Python 96.07% C 2.89% CSS 0.37%
steam-controller gtk3 python python-2

sc-controller's Introduction

SC Controller Build Status

User-mode driver, mapper and GTK3 based GUI for Steam Controller, DS4 and similar controllers.

screenshot1 screenshot2 screenshot3 screenshot3

Features

  • Allows to setup, configure and use Steam Controller(s) without ever launching Steam
  • Supports profiles switchable in GUI or with controller button
  • Stick, Pads and Gyroscope input
  • Haptic Feedback and in-game Rumble support
  • OSD, Menus, On-Screen Keyboard for desktop and in games.
  • Automatic profile switching based on active window.
  • Macros, button cycling, rapid fire, modeshift, mouse regions...
  • Emulates Xbox360 controller, mouse, trackball and keyboard.

Based on Standalone Steam Controller Driver by Ynsta.

Like what I'm doing?

Help me become filthy rich on Liberapay or donate anything with PayPal

Packages

  • Ubuntu (deb-based distros): Found in openSUSE Build Service.
  • Fedora, SUSE (rpm-based distros): Found in openSUSE Build Service.
  • Arch, Manjaro (arch-based distros): Found in AUR
  • Solus: Search for sc-controller in Software Center or run sudo eopkg it sc-controller from a terminal.
  • Exherbo: Found in hardware
  • Void Linux: Run xbps-install -S sc-controller in a terminal.

Building the package by yourself

Dependencies

Installing

  • Download and extract latest release
  • python2 setup.py build
  • python2 setup.py install

Running with non distro-specific package

  • Download and extract latest release
  • Navigate to extracted directory and execute ./run.sh

sc-controller's People

Contributors

aereaux avatar alastor27 avatar blueapple128 avatar cjxgm avatar clement-z avatar duganchen avatar dyskette avatar flyingwombat avatar git-developer avatar hellcp avatar kozec avatar mad-s avatar mailaender avatar medevile avatar mightypork avatar miniskipper avatar mulark avatar natronium avatar orivej avatar patola avatar pattontim avatar predr avatar ren2r avatar richese avatar rohit-n avatar romanhargrave avatar tgurr avatar thegamer1002 avatar totalcaesar659 avatar varlesh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sc-controller's Issues

Support for any keyboard keys (international layouts?)

I have a hungarian QUERTZ keyboard layout. It contains keys that I can not bind in sc-controller, or some that don't bind correctly.

Examples:

  • I have the 'ร–' character key on the right of the '9' key. If I press ร– during grab a key, nothing happens, it is not recognised.
  • I have the '0' (that's the number zero for clarity) key on the left of the '1' key (it's the place where the '~' key is on QUERTY keyboards I think), if I peress 0 during grab a key, it is recognised as KEY_0. However in action that seem to just send the keycode of the key where the '0' is on QUERTY keyboards, the one on the right of the '9' key, the same one I tried to bind in the previous example unsuccessfully.

Deadzones for pads

Sometimes when I'm trying to press the Y or B button, my thumb grazes the very edge of the right pad and messes up what I was trying to do. Is it possible to implement some customizable deadzones for the pads, so that touches in specific spots on the pad do nothing?

AUR Package

Have you considered managing a package on the AUR for your Arch users? If you'd rather not, I might be able to do that. (It's relatively simple)

button behaviour when key is already pressed

With the current setup having two controller events mapped to the same button action (i.e. the same key on the keyboard) generates a release event as soon as one of them is released and a press press event only if the other is not already pressed.

I see why this is a natural behaviour in terms of implementation but it might not always generate expected behaviour in terms of game controls (examples below). I am unsure what would be the natural configuration options here, but all situations I can think of where the current behaviour is problematic could be solved in a somewhat ad-hoc fashion by being able to specify an action (a "button tap") which generates: a release event if they key is already pressed, followed by a key press event, a key release event, and finally another key press event if the key was originally pressed.

I realise this might seem like a niche situation, but it does appear in situations where some set of keys serve both for movements and as part of a combo. If the combo is triggered by some other controller event the movement is interrupted until the relevant keys/axes are released and pressed again.

In my case the situation arose when experimenting with different controller configurations for Mount & Blade. The controller stick was bound to a WASD-dpad action and the controller right pad to a dpad action generating a mouse click with the corresponding WASD-direction pressed. Currently this means that swinging (using the right pad) in the direction of ones current movement (controlled by the stick) interrupts the movement until the stick is released and reactivated.

Key feedback in GUI

Since each key already has a highlight when you hover on them maybe have a button test "mode" where the keys light up as you press them. Maybe have a little display above the analog triggers showing potion along with tap points where the fingers are on the touchpads.

syntax error in setup.py when building from PKGBUILD

==> Starting build()...
  File "setup.py", line 23
    license='GPL2',
          ^
SyntaxError: invalid syntax
==> ERROR: A failure occurred in build().
    Aborting...

Arch Linux x86_64 4.5.4
python2-packaging-16.7-1
python2-pyparsing-2.1.4-1
python2-six-1.10.0-1
python2-setuptools-1:21.1.0-1
pacman 5.0.1-3

dpad with mouse wheel action makes key events

i tried to make an 'inverted' mouse wheel on the left track pad, so i tried this:
dpad(
button(Rels.REL_WHEEL, 1),
button(Rels.REL_WHEEL, -1),
button(Rels.REL_HWHEEL, 1),
button(Rels.REL_HWHEEL, -1)
)
it does not work and with xev i can see that it sends keyboard key '5' and '7'

Set custom sensitivity for pads and stick

Is it possible to set sensitivity levels for the pads and the left stick when set as joystick/mouse?
I'd like to define the rate of travel on a profile basis for the pads/stick, because I have noticed that all of the pads/ sticks movement is slower than what is possible through the steam controller when used with Steam natively on Linux, Windows, as well as keyboard/mouse on both. Either the sensitivity is wrong or the controller under native steam has some kind of programming to go further in a direction, the more the stick/pad is pressed in that direction. Do you know what's going on?

Unable to set Left Stick sensitivity

The left stick (Joystick/Mouse Action type) sensitivity setting isn't getting recorded for some reason. If I set it to anything and hit OK, then if I check it again, it will have reverted back to 0.01.

Settings issues

Clicking the Edit Button Bindings... key does not work. It give the following error:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/scc/gui/global_settings.py", line 87, in on_butEditKeyboardBindings_clicked
    self.osk_binding_editor = OSKBindingEditor(self.app)
  File "/usr/lib/python2.7/site-packages/scc/gui/osk_binding_editor.py", line 37, in __init__
    self.current.load(find_profile(OSKBindingEditor.OSK_PROF_NAME))
  File "/usr/lib/python2.7/site-packages/scc/profile.py", line 65, in load
    data = json.loads(open(filename, "r").read())
TypeError: coercing to Unicode: need string or buffer, NoneType found

My guess is it's not generating a default profile.

The Settings dialog appears immediately on startup. The window appears behind the main window, disallowing you to interact with either window without a Window Manager hotkey (i.e. Alt+Click/Drag to move the main window), and the main window can not be closed until the Settings window is closed.

In the Autoswitcher, attempting to use Edit Condition with a rule that uses Match exact title fails with the error:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/scc/gui/global_settings.py", line 119, in btEdit_clicked_cb
    entTitle.set_text(condition.title)
TypeError: Argument 1 does not allow None as a value

In the Autoswitcher, when using both a Class and Window Name, the word "and" does not include a space between itself and the title name.

Expand Haptic Feedback candidates

I noticed Haptic Feedback seems to be checked off as 'Done' on your TODO, so I thought I might request it be expanded.

I feel like this should be a priority for the trackball/trackpad, as the pads give little feedback compared to the rest of the controller. I'd also, personally, really like it for the rotating mouse wheel. Adding it as an option for everything possible would be preferred, of course.

On a side note, I'm genuinely impressed with how much work you've been doing on this. It's been quite enjoyable watching it expand from what it was at the beginning to a system that I'd say is even better than the current official software. Thank you for your efforts.

osd not working

Looks like any osd function is not working.
If i try to launch any of the scc-osd util from command line i get this error:
Traceback (most recent call last):
File "/usr/bin/scc-osd-message", line 21, in <module>
m = Message()
File "/usr/lib/python2.7/site-packages/scc/osd/message.py", line 19, in __init__
OSDWindow.__init__(self, "osd-message")
File "/usr/lib/python2.7/site-packages/scc/osd/__init__.py", line 80, in __init__
OSDWindow._apply_css(Config())
File "/usr/lib/python2.7/site-packages/scc/osd/__init__.py", line 106, in _apply_css
OSDWindow.css_provider.load_from_data(str(OSDWindow.CSS % config['osd_colors']))
GLib.Error: gtk-css-provider-error-quark: <data>:3:28Junk at end of value (1)

I run the sc-controller util from kde on arch.

Request for I/O documentation.

Hi,
I'm passively developing a wrapper for steam controller on windows and i would like to ask you if you could provide me with a little bit of documentation on communication with the controller.
I'm mainly interested in packet structure (disabling feedback, toggling gyro, packet structure).
It would really help me with development because python is not my forte.
Thanks a bunch

Editing Custom Actions deletes some actions

When you make any change to the Custom Actions dialog, some actions seem to stop being registered. This appears to affect actions from the 'More...' drop-down, so click, feedback, and deadzone.

They will still show up in the Custom Actions input box, but they will stop showing up at the bottom command preview box. Once you click 'OK', they will not work and you'll have to add them again.

This can currently be worked around by switching from Custom Actions to another Action Type and back.

Repo not updated?

I'm using the repo for Ubuntu 14.04 and the last update is from 12:37 on April 25. There's been several fixes here on github that are not packaged yet in the repo. When will that update happen?

Error with trailing parentheses

An error is detected in the Custom Action editor when there are ) on a standalone line when there is a trailing ')' on the line above it.

The error:
Excepted action name, got ')'

This does not work:

dpad(
  button(Keys.KEY_UP),
  button(Keys.KEY_DOWN),
  button(Keys.KEY_LEFT),
  button(Keys.KEY_RIGHT)
)

Where these do:

dpad(
  button(Keys.KEY_UP),
  button(Keys.KEY_DOWN),
  button(Keys.KEY_LEFT),
  button(Keys.KEY_RIGHT))
dpad(
  button(Keys.KEY_UP),
  button(Keys.KEY_DOWN),
  button(Keys.KEY_LEFT),
  None
)

Also I assume you mean 'Expected', not 'Excepted'.

Undo/Redo actions

If we assign a wrong action to a button, it would be nice if we could easily undo it with a button in the toolbar
Similarly, a redo button might also be useful

Edit window won't open

First of all this is an awesome program (can finally play Rocket League on wine with the SC :D),
but unfortunately I can't edit the config with the client.
Every time I click on a widget I get the following error:

(sc-controller:13693): Gtk-WARNING **: Theme parsing error: gtk.css:701:22: 'text-decoration-line' is not a valid property name
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/scc/gui/controller_widget.py", line 52, in on_click
    self.app.show_editor(self.id)
  File "/usr/lib/python2.7/dist-packages/scc/gui/app.py", line 119, in show_editor
    ae = ActionEditor(self, self.on_action_chosen)
  File "/usr/lib/python2.7/dist-packages/scc/gui/action_editor.py", line 55, in __init__
    ButtonChooser.__init__(self, app, self.on_button_chooser_callback)
  File "/usr/lib/python2.7/dist-packages/scc/gui/button_chooser.py", line 45, in __init__
    self.setup_widgets()
  File "/usr/lib/python2.7/dist-packages/scc/gui/action_editor.py", line 73, in setup_widgets
    ButtonChooser.setup_widgets(self)
  File "/usr/lib/python2.7/dist-packages/scc/gui/button_chooser.py", line 51, in setup_widgets
    self.builder.add_from_file(os.path.join(self.app.gladepath, self.GLADE))
GLib.Error: gtk-builder-error-quark: invalid property: GtkStack.interpolate_size in line 163 (11)

I am using the deb file and also tried out the git zip.
Same issue.

Everything else seems to work fine.
Thanks for making it.

Distro packages

Would be nice if we can get some packages to work with, eg: deb for Ubuntu

Thanks for making this

Randomly stops working

While I'm playing, my controller suddenly stops working and the last button pressed is pressed forever. SC-Controller says: "There was an error with enabling emulation: LIBUSB_ERROR_BUSY [-6] Another application (most likely Steam) is using the controller.

The situation is still active, so if you need me to run some commands/debug anything let me know. I've only quit my game. I don't have native Linux Steam on, nor did I start it at any point when this happened, I did not unplug or plug any USB devices either.

Crash on start

sc-controller is crashing on start after I updated to 0.1.4 from the repo on Ubuntu 14.04.

aziz@LIGHT:~$ sc-controller 
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/scc/gui/app.py", line 493, in do_startup
    self.setup_widgets()
  File "/usr/lib/python2.7/dist-packages/scc/gui/app.py", line 70, in setup_widgets
    self.builder.add_from_file(os.path.join(self.gladepath, "app.glade"))
gi._glib.GError: /usr/share/scc/app.glade:714:1 <object> requires attribute "id"
aziz@LIGHT:~$ 

Clear binding for button

I already discussed this with you, but I'm adding it here for tracking purposes.

If we want to clear bindings for specific buttons, right now we have to type in click() as a custom action. A easy way to clear a binding so that the button does nothing would be great!

AttributeError: 'KeyboardAction' object has no attribute 'profile'

This may or may not be related to #23. I've bound the on-screen keyboard to a button. Running sc-controller -d in a terminal, in the GUI go to rebind that particular button. I get this traceback:

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/scc/gui/action_editor.py", line 139, in on_action_type_changed
    component.set_action(self._mode, self._action)
  File "/usr/lib/python2.7/dist-packages/scc/gui/ae/special_action.py", line 62, in set_action
    self._current_profile = action.profile
AttributeError: 'KeyboardAction' object has no attribute 'profile'

and this screen:
screenshot from 2016-05-23 22-28-02

(which is wrong, that's the 'Key or Button' tab, not the 'Special Action' tab). The 'Special Action' tab can't be selected at all (nothing happens when it's clicked).

On-Screen Keyboard Improvements

I'd like some visual feedback (such as flashing) when pressing a key. Being able to use the left and right trigger to press keys is also preferred to clicking the pads.

It feels like you need to be on the very edge of the pad to be able to reach some keys and it hurts fluidity. This applies to most of the characters on the edges. The numbers, for example, can be reached without too much trouble, but the circle indicators bottom out around the middle of the the keys.

Some characters can barely be reached at all, such as all of the characters on the right and bottom. Some really can't be reached, such as the [, ' and = keys.

Somehow informing users that X, Y, Start, or Select can be used to close the keyboard seems necessary.

Allowing users to customize the colors of the keys/etc and allowing an alpha on the keyboard as a whole would be nice.

Pairing controllers

Hello,

I would have liked to pair a new controller to a dongle, but wasn't able to do so. Maybe the functionnality is present, but I didn't find it.
Has the data packet required to put the dongle in pairing mode been reverse-engineered?
If so, are there any plans for integrating this functionnality?

In some cases, just using steam isn't an option because:

  • Different processor architecture
  • Hardware not powerful enough (I am currently in this case) to run steam in BP mode
  • not wanting to run closed-source applications
  • whatever...
  • using origin (just kidding :P )

When all other inputs are 0, right trigger acts as if it's being pressed.

This is my best understanding of the problem, through experimentation in Rocket League and also through testing with jstest.

If I am not manipulating any other inputs on the controller, then right trigger will act as if it is pressed. But when I am manipulating another input, it will act properly. This is always reproducible.

https://youtu.be/QbsFHys_DAg

Here's my profile:

{
    "buttons" : {
        "A"      : { "action" : "button(Keys.BTN_A)" },
        "B"      : { "action" : "button(Keys.BTN_B)" },
        "X"      : { "action" : "button(Keys.BTN_X)" },
        "Y"      : { "action" : "button(Keys.BTN_Y)" },
        "LB"     : { "action" : "button(Keys.BTN_TL)" },
        "RB"     : { "action" : "button(Keys.BTN_TR)" },
        "BACK"   : { "action" : "button(Keys.BTN_SELECT)" },
        "START"  : { "action" : "button(Keys.BTN_START)" },
        "C"      : { "action" : "button(Keys.BTN_MODE)" },
        "LPAD"   : { "action" : "button(Keys.BTN_THUMBL)" },
        "RPAD"   : { "action" : "button(Keys.BTN_THUMBR)" },
        "LGRIP"  : { "action" : "button(Keys.BTN_A)" },
        "RGRIP"  : { "action" : "button(Keys.BTN_X)" }
    },

    "trigger_left":  { "action": "axis(Axes.ABS_Z)" },
    "trigger_right": { "action": "axis(Axes.ABS_RZ)" }
    ,
    "gyro": {}, 

    "stick" : {
        "X" : { "action" : "axis(Axes.ABS_X)" },
        "Y" : { "action" : "raxis(Axes.ABS_Y)" }
    },

    "pad_left" : {
        "action" : "dpad(hatup(Axes.ABS_HAT0Y), hatdown(Axes.ABS_HAT0Y), hatleft(Axes.ABS_HAT0X), hatright(Axes.ABS_HAT0X) )"
    },

    "pad_right" : {
        "X" : { "action" : "axis(Axes.ABS_RX)" },
        "Y" : { "action" : "raxis(Axes.ABS_RY)" },
        "feedback": ["RIGHT", 256]
    }
}

Issues with Building on latest Fedora versions

I found out that trying to build this doesn't currently work on Fedora 23 or 24. The build scripts try searching for the python libraries, but it isn't able to find them. I ran into this issue when using the steamcontroller package this is based off of.

Here you can find my mess of an issue report I posted over there, where I give the details on how to make the Stand Alone Steam Controller Driver work on Fedora 23+

The main issue is the build script is looking for a library called either lpython2.7 or lpython3, when in Fedora and other RedHat based distros, the naming convention is instead libpython2.7.so and libpython3.so respectively.

Would it be possible to address the build scripts here as well to provide a more out of the box experience with less fiddling involved?

Great work on this, by the way. I'm thoroughly enjoying this project. :)

Macro GUI doesn't work for multi-directional inputs

For the Simple and 8-way DPAD buttons, at least, hitting the Macro button just closes the button window, returning the user to the DPAD window.

Setting a macro in the custom actions works fine, however.

Allow separate axis and full pull on triggers

In the controller configurator in Steam I can set both axis output and full pull action on a single trigger. This allows me to, for example, bind LT to the LT axis (brake) and LT full pull to space (parking brake) in the American and Euro Truck Simulators.

Please, if it is possible, allow this in sc-controller (or someone tell me how if it is already possible to do this!), thanks.

Allow pads to still operate as OSD menu control when menu display is set to a button

I've been experimenting with the OSD menu options and have noticed that pads cannot seem to control the radial menu when any other button is assigned to show the menu nor when it is assigned to clicking/pressing down the pads themselves. Instead it always seems to default to using the analogue stick.

For example, I want to have the right pad act as mouse control when touched like normal, but when pressed it will show the radial menu. While still pressed down, moving the thumb across the pad should control the selection. Releasing the button (even if still touching the pad) should then select the highlighted option and hide the menu.

Instead, no matter which configuration options I try (setting click to display menu, using a modeshift or using a macro) clicking the pad or any other button always results in the left analogue stick being used to control the menu, instead of the pad.

Assigning another button being held down to modeshift the pad so that on touch it shows and controls the menu doesn't work either. Instead holding the button simply displays the menu only if you touch the pad at the exact "Hold Time" value, with the menu again relying on analogue stick control.

When all other axis inputs are 0, right trigger acts as if it's fully pressed.

This is my best understanding of the problem, through experimentation and a bit of testing different binds in Rocket League under WINE.

If I am not manipulating any other axis inputs (triggers, analog sticks, etc.), then right trigger will act as if it is fully pressed. This is always reproducible. This error does not occur using Steam drivers, so it is not a hardware problem.

For Rocket League in WINE, I am using xbox360cemu. Here's my .ini file:

[Options]
UseAutoPad=0            #use 0 to 1; automatically make other PAD to PAD1 after detecting movement
UseInitBeep=1           #use 0 to 1; default 1; beep on init

[PAD1]
Index=1                         #controller index in game controllers list; 0 is first; -1 to ignore this pad
Left Analog X=1                 #axis index; use - to invert; precede with 's' for a slider eg; s-1; 7 to disable
Left Analog Y=-2                #axis index; use - to invert; precede with 's' for a slider eg; s-1; 7 to disable
Right Analog X=4                #axis index; use - to invert; precede with 's' for a slider eg; s-1; 7 to disable
Right Analog Y=-5               #axis index; use - to invert; precede with 's' for a slider eg; s-1; 7 to disable
Left Analog X Linear=0          #-100 to +100  raise this number to increase sensitivity near center
Left Analog Y Linear=0          #-100 to +100  raise this number to increase sensitivity near center
Right Analog X Linear=0         #-100 to +100  raise this number to increase sensitivity near center
Right Analog Y Linear=0         #-100 to +100  raise this number to increase sensitivity near center
Left Analog X+ Button=0         #button id; 0 to disable
Left Analog X- Button=0         #button id; 0 to disable
Left Analog Y+ Button=0         #button id; 0 to disable
Left Analog Y- Button=0         #button id; 0 to disable
Right Analog X+ Button=0        #button id; 0 to disable
Right Analog X- Button=0        #button id; 0 to disable
Right Analog Y+ Button=0        #button id; 0 to disable
Right Analog Y- Button=0        #button id; 0 to disable
D-pad POV=1                     #POV index; 0 to disable
D-pad Up=12                     #button id; 0 to disable
D-pad Down=13                   #button id; 0 to disable
D-pad Left=14                   #button id; 0 to disable
D-pad Right=15                  #button id; 0 to disable
A=1                             #button id; 0 to disable
B=2                             #button id; 0 to disable
X=3                             #button id; 0 to disable
Y=4                             #button id; 0 to disable
Left Shoulder=5                 #button id; 0 to disable
Right Shoulder=6                #button id; 0 to disable
Back=7                          #button id; 0 to disable
Start=8                         #button id; 0 to disable
Left Thumb=15                   #button id; 0 to disable
Right Thumb=11                  #button id; 0 to disable
Left Trigger=a3                 #button id; precede with 'a' for an axis; eg; a-6; for a slider precede with 's' eg; s-1
Right Trigger=a6                #button id; precede with 'a' for an axis; eg; a-6; for a slider precede with 's' eg; s-1
UseForceFeedback=0              #use 0 to 1; default 0
ForceLargeGain=10000            #use 0 to 10000; default 10000; effect intensity
ForceLargePeriod=120000         #use 0 to 200000; default 120000; effect frequency; wheel only
ForceLargeFadeTime=10           #use 0 to 100; default 10
ForceLargeFadeIn=1              #use 0 to 1; default 1
ForceLargeFadeOut=1             #use 0 to 1; default 1
ForceLargeStartMag=2000         #use 0 to 10000; default 2000; effect will begin with this value
ForceSmallGain=10000            #use 0 to 10000; default 10000; effect intensity
ForceSmallPeriod=30000          #use 0 to 200000; default 30000; effect frequency; wheel only
ForceSmallFadeTime=10           #use 0 to 100 default 10
ForceSmallFadeIn=1              #use 0 to 1; default 1
ForceSmallFadeOut=1             #use 0 to 1; default 1
ForceSmallStartMag=2000         #use 0 to 10000; default 2000; effect will begin with this value
WheelInertiaGain=2500           #use 0 to 10000; default 2500; effect intensity; wheel only
WheelSpringGain=5000            #use 0 to 10000; default 5000; effect intensity; wheel only
SteeringWheel=0                 #use 0 to 1; enable for all wheel effects

Keyboard specific mapping

For example I want to set LT and RT to tap the keys on their respective sides when the keyboard is shown. Maybe have a page where you can configure what buttons do what when the keyboard is displayed.

Exit on screen keyboard?

I mapped OSK to right bumper. It launches and works fine but I couldn't figure out how to exit. Had to killall -9 scc-daemon to quit

Keyboard selection offset

Expected behavior: Key under center of cursor is selected.
Actual behavior: Key most recently under top left of cursor image selected.

selectstuck

Mode Shift settings do not work

Hello!

When clicking on the "Mode Shift" button in the settings window of any control, no window comes up. Instead an AttributeError exception is thrown:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/scc/gui/action_editor.py", line 395, in on_btModeshift_clicked
    e.set_input(self.id, action, mode=self._mode)
  File "/usr/lib/python2.7/site-packages/scc/gui/modeshift_editor.py", line 318, in set_input
    self.builder.get_object("adjTime").set_value(action.timeout)
AttributeError: 'ModeModifier' object has no attribute 'timeout'

This seems to be the case for the latest commit (9b9b712f) as well as tag v0.2.9.

Ubuntu 16.04: No on screen keyboard

Hi,

been playing around with this, really loving it so far! However I can't get the on-screen keyboard to show up. I've bound 'Special Action -> Display On-Screen Keyboard' to a button but nothing's happening. Do I need to install anything else?

Allow exact values to be entered

I would like it if you could make the values for sliders be able to be entered exactly. It's really frustrating when I want a value at 2 but the slider increments by 32 numbers with each pixel I slide across so I can only choose between 1 and 33 which are miles apart.

If you could change the text that shows what the slider value is to a text box where a specific number could be entered then that would be greatly appreciated.

Excessive _callbackTimer output on terminal in debug mode in 0.2.1

I'm trying to debug the crash issue, but since upgrading to 0.2.1 the terminal output is spammed with "_callbackTimer" too many times. Important information gets scrolled out of view because "_callbackTimer" is repeating many times per second. Is this intentional?

Here is a sample of terminal output:

aziz@LIGHT:~$ scc-daemon null debug
D Mapper        Creating virtual devices
D Mapper        Gamepad:  <scc.uinput.Gamepad object at 0x7fc3ae2ac090>
D Mapper        Keyboard: <scc.uinput.Keyboard object at 0x7fc3ac812d90>
D Mapper        Mouse:    <scc.uinput.Mouse object at 0x7fc3ac812e90>
W SCCDaemon     Failed to load profile. Starting with no mappings.
W SCCDaemon     Reason: [Errno 2] No such file or directory: 'null'
D SCCDaemon     Starting SCCDaemon...
D SCCDaemon     Created control socket /home/aziz/.config/scc/daemon.socket
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
I SCCDaemon     Loaded profile '/home/aziz/.config/scc/profiles/Rocket League.sccprofile'
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
D SCCDaemon     Controller turned ON
    I SCCDaemon     Loaded profile 'Desktop'
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
    _callbackTimer
_callbackTimer
I SCCDaemon     Loaded profile 'Rocket League'
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
^CD SCCDaemon     Break
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
^C_callbackTimer
_callbackTimer
Traceback (most recent call last):
  File "/usr/bin/scc-daemon", line 28, in <module>
    _main()
  File "/usr/bin/scc-daemon", line 26, in _main
    daemon.debug()
  File "/usr/lib/python2.7/dist-packages/scc/sccdaemon.py", line 294, in debug
    self.remove_socket()
  File "/usr/lib/python2.7/dist-packages/scc/sccdaemon.py", line 280, in remove_socket
    self.sserver.shutdown()
  File "/usr/lib/python2.7/SocketServer.py", line 251, in shutdown
    self.__is_shut_down.wait()
  File "/usr/lib/python2.7/threading.py", line 620, in wait
    self.__cond.wait(timeout)
  File "/usr/lib/python2.7/threading.py", line 339, in wait
    waiter.acquire()
KeyboardInterrupt
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
_callbackTimer
^C_callbackTimer
Exception KeyboardInterrupt in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
aziz@LIGHT:~$ 

daemon mode

it would be awesome to have a way to start the program without gui (command flag like --daemon) or a toggle to enable autostart in the settings

Thanks for the nice project :)

Gui errors in Arch Linux

Hello,
I tried to use this driver but I get some errors in the Gui and I can't save or select profiles.
The daemon seems to be working when it's started manually with a profile.

I am using Arch Linux. The result is the same whether I use the AUR package (0.2.9.1) or run it directly from git repo.

Gui startup:

$ sc-controller -d
D App           daemon status: unknown
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/scc/gui/userdata_manager.py", line 107, in _on_user_data_loaded
    f = pdir.get_child(finfo.get_name())
TypeError: Argument 1 does not allow None as a value
D DaemonCtrlr   Connected to daemon, version 0.2.9
D DaemonCtrlr   Daemon reported profile change: /dev/null
D App           Daemon uses profile '/dev/null', selecting it in UI
D DaemonCtrlr   Daemon is ready.
D App           daemon status: alive

The TypeError happens every time the Gui is started.

Here is what happens when I press the OK button when configuring any button:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/scc/gui/action_editor.py", line 385, in on_btOK_clicked
    self.ac_callback(self.id, a)
  File "/usr/lib/python2.7/site-packages/scc/gui/app.py", line 377, in on_action_chosen
    self.on_profile_changed()
  File "/usr/lib/python2.7/site-packages/scc/gui/app.py", line 338, in on_profile_changed
    modfile = Gio.File.new_for_path(self.current_file.get_path() + ".mod")
AttributeError: 'NoneType' object has no attribute 'get_path'

And when I press the save profile button:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/scc/gui/app.py", line 368, in on_btSaveProfile_clicked
    self.save_profile(self.current_file, self.current)
  File "/usr/lib/python2.7/site-packages/scc/gui/userdata_manager.py", line 56, in save_profile
    if giofile.get_path().startswith(get_default_profiles_path()):
AttributeError: 'NoneType' object has no attribute 'get_path'

Screenshot of the Gui:
2016-07-02-085828_930x541_scrot

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.