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
path: root/src
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 /src
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>
Diffstat (limited to 'src')
-rw-r--r--src/uinput.c20
-rw-r--r--src/uinput.py37
2 files changed, 37 insertions, 20 deletions
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)])