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-11-04 03:40:00 +0300
committerStany MARCEL <stanypub@gmail.com>2015-11-04 03:44:32 +0300
commitcd7c66d3a6c6d7f334dd5cc043cc89ccc2f19afa (patch)
tree90d636a4525edcd0dee53f8c0a6e15ad4e78248b
parent4f360079a916a9d694f958d25e81bb3217dd9e0d (diff)
Increase compatibility with xbox360 gamepad
Add min, max, fuzz and flat settings in abs uinput init The gamepad emulation Now works with kodi. Signed-off-by: Stany MARCEL <stanypub@gmail.com>
-rwxr-xr-xscripts/sc-xbox.py8
-rw-r--r--src/uinput.c20
-rw-r--r--src/uinput.py37
3 files changed, 41 insertions, 24 deletions
diff --git a/scripts/sc-xbox.py b/scripts/sc-xbox.py
index 2872eb3..1bf581d 100755
--- a/scripts/sc-xbox.py
+++ b/scripts/sc-xbox.py
@@ -67,12 +67,12 @@ def lpad_func(x, btn, threshold, evstick, evtouch, clicked, invert):
if x >= 0:
if x >= threshold:
- x = 32767
+ x = 1
else:
x = 0
else:
if x <= -threshold:
- x = -32767
+ x = -1
else:
x = 0
events.append((evtouch, x if not invert else -x, x != 0))
@@ -85,8 +85,8 @@ def lpad_func(x, btn, threshold, evstick, evtouch, clicked, invert):
axis_map = {
- 'ltrig' : lambda x, btn: [(Axes.ABS_Z, int(-32767 + ((x*2.0*32767.0)/255.)), False)],
- 'rtrig' : lambda x, btn: [(Axes.ABS_RZ, int(-32767 + ((x*2.0*32767.0)/255.)), False)],
+ 'ltrig' : lambda x, btn: [(Axes.ABS_Z, x, False)],
+ 'rtrig' : lambda x, btn: [(Axes.ABS_RZ, x, False)],
'lpad_x' : lambda x, btn: lpad_func(x, btn, 15000, Axes.ABS_X, Axes.ABS_HAT0X, False, False),
'lpad_y' : lambda x, btn: lpad_func(x, btn, 15000, Axes.ABS_Y, Axes.ABS_HAT0Y, False, True),
'rpad_x' : lambda x, btn: [(Axes.ABS_RX, x, False)],
diff --git a/src/uinput.c b/src/uinput.c
index 3054838..cef3f68 100644
--- a/src/uinput.c
+++ b/src/uinput.c
@@ -31,9 +31,16 @@
#include <unistd.h>
int uinput_init(
- int key_len, int * key,
- int abs_len, int * abs,
- int vendor, int product,
+ int key_len,
+ int * key,
+ int abs_len,
+ int * abs,
+ int * abs_min,
+ int * abs_max,
+ int * abs_fuzz,
+ int * abs_flat,
+ int vendor,
+ int product,
char * name)
{
struct uinput_user_dev uidev;
@@ -76,9 +83,10 @@ int uinput_init(
close(fd);
return -5;
}
- uidev.absmin[abs[i]] = -32767;
- uidev.absmax[abs[i]] = 32767;
- uidev.absfuzz[abs[i]] = 0;
+ uidev.absmin[abs[i]] = abs_min[i];
+ uidev.absmax[abs[i]] = abs_max[i];
+ uidev.absfuzz[abs[i]] = abs_fuzz[i];
+ uidev.absflat[abs[i]] = abs_flat[i];
}
if (write(fd, &uidev, sizeof(uidev)) < 0) {
diff --git a/src/uinput.py b/src/uinput.py
index aecef01..d602029 100644
--- a/src/uinput.py
+++ b/src/uinput.py
@@ -42,8 +42,8 @@ class UInput(object):
def __init__(self, vendor, product, name, keys, axes):
- self._keys = set(keys)
- self._axes = set(axes)
+ self._k = keys
+ self._a, self._amin, self._amax, self._afuzz, self._aflat = zip(*axes)
lib = os.path.abspath(
os.path.normpath(
@@ -53,11 +53,20 @@ class UInput(object):
'libuinput' + get_config_var('SO'))))
self._lib = ctypes.CDLL(lib)
- _k = (ctypes.c_int * len(keys))(*keys)
- _a = (ctypes.c_int * len(axes))(*axes)
+ ck = (ctypes.c_int * len(self._k))(*self._k)
+ ca = (ctypes.c_int * len(self._a))(*self._a)
+ camin = (ctypes.c_int * len(self._amin ))(*self._amin )
+ camax = (ctypes.c_int * len(self._amax ))(*self._amax )
+ cafuzz = (ctypes.c_int * len(self._afuzz))(*self._afuzz)
+ caflat = (ctypes.c_int * len(self._aflat))(*self._aflat)
+
_name = ctypes.c_char_p(name)
- self._fd = self._lib.uinput_init(ctypes.c_int(len(keys)), _k,
- ctypes.c_int(len(axes)), _a,
+ self._fd = self._lib.uinput_init(ctypes.c_int(len(self._k)), ck,
+ ctypes.c_int(len(self._a)), ca,
+ camin,
+ camax,
+ cafuzz,
+ caflat,
ctypes.c_int(vendor),
ctypes.c_int(product),
_name)
@@ -97,11 +106,11 @@ class Xbox360(UInput):
Keys.BTN_TR,
Keys.BTN_THUMBL,
Keys.BTN_THUMBR],
- axes=[Axes.ABS_X,
- Axes.ABS_Y,
- Axes.ABS_RX,
- Axes.ABS_RY,
- Axes.ABS_Z,
- Axes.ABS_RZ,
- Axes.ABS_HAT0X,
- Axes.ABS_HAT0Y])
+ axes=[(Axes.ABS_X, -32768, 32767, 16, 128),
+ (Axes.ABS_Y, -32768, 32767, 16, 128),
+ (Axes.ABS_RX, -32768, 32767, 16, 128),
+ (Axes.ABS_RY, -32768, 32767, 16, 128),
+ (Axes.ABS_Z, 0, 255, 0, 0),
+ (Axes.ABS_RZ, 0, 255, 0, 0),
+ (Axes.ABS_HAT0X, -1, 1, 0, 0),
+ (Axes.ABS_HAT0Y, -1, 1, 0, 0)])