Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ynsta/steamcontroller.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStany MARCEL <stanypub@gmail.com>2015-10-30 03:19:56 +0300
committerStany MARCEL <stanypub@gmail.com>2015-10-30 03:19:56 +0300
commitadce3ab0a8823206174564a12bb3b1f2978f42a4 (patch)
tree0adaee1a628744df8d158d55e88d86aa64c64fa5 /scripts
parent3274a61b0620bb0bec982553e34ec6ea70303ef8 (diff)
Reduce the number of produced events
Signed-off-by: Stany MARCEL <stanypub@gmail.com>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/sc-xbox.py44
1 files changed, 32 insertions, 12 deletions
diff --git a/scripts/sc-xbox.py b/scripts/sc-xbox.py
index a55944c..586a0bf 100755
--- a/scripts/sc-xbox.py
+++ b/scripts/sc-xbox.py
@@ -79,13 +79,13 @@ def lpad_func(x, btn, threshold, evstick, evtouch, clicked, invert):
x = 0
events.append((evtouch, x if not invert else -x))
- if ((clicked and rmv & SCButtons.LPad == SCButtons.LPad) or
+ elif ((clicked and rmv & SCButtons.LPad == SCButtons.LPad) or
(not clicked and rmv & SCButtons.LPadTouch == SCButtons.LPadTouch)):
events.append((evtouch, 0))
-
return events
+
axis_map = {
'ltrig' : lambda x, btn: [(Axes.ABS_Z, int(-32767 + ((x*2.0*32767.0)/255.)))],
'rtrig' : lambda x, btn: [(Axes.ABS_RZ, int(-32767 + ((x*2.0*32767.0)/255.)))],
@@ -95,35 +95,55 @@ axis_map = {
'rpad_y' : lambda x, btn: [(Axes.ABS_RY, -x)],
}
+prev_key_events = set()
+prev_abs_events = set()
def scInput2Uinput(sci, xb):
global prev_buttons
+ global prev_key_events
+ global prev_abs_events
if sci.status != SCStatus.Input:
return
removed = prev_buttons ^ sci.buttons
+ key_events = []
+ abs_events = []
+
for btn, ev in button_map.items():
if btn == SCButtons.Stick and sci.buttons & SCButtons.LPadTouch:
- xb.keyEvent(ev, 0)
- continue
-
- if sci.buttons & btn:
- xb.keyEvent(ev, 1)
- if removed & btn:
- xb.keyEvent(ev, 0)
+ key_events.append((ev, 0))
+ else:
+ if sci.buttons & btn:
+ key_events.append((ev, 1))
+ elif removed & btn:
+ key_events.append((ev, 0))
for name, func in axis_map.items():
for ev, val in func(sci._asdict()[name], sci.buttons):
if ev != None:
- xb.axisEvent(ev, val)
+ abs_events.append((ev, val))
- xb.synEvent()
- prev_buttons = sci.buttons
+ new = False
+ for ev in key_events:
+ if ev not in prev_key_events:
+ xb.keyEvent(*ev)
+ new = True
+
+ for ev in abs_events:
+ if ev not in prev_abs_events:
+ xb.axisEvent(*ev)
+ new = True
+ if new:
+ xb.synEvent()
+
+ prev_key_events = set(key_events)
+ prev_abs_events = set(abs_events)
+ prev_buttons = sci.buttons
class SCDaemon(Daemon):
def run(self):