diff options
author | Stany MARCEL <stanypub@gmail.com> | 2015-11-04 03:40:00 +0300 |
---|---|---|
committer | Stany MARCEL <stanypub@gmail.com> | 2015-11-04 03:44:32 +0300 |
commit | cd7c66d3a6c6d7f334dd5cc043cc89ccc2f19afa (patch) | |
tree | 90d636a4525edcd0dee53f8c0a6e15ad4e78248b /src | |
parent | 4f360079a916a9d694f958d25e81bb3217dd9e0d (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.c | 20 | ||||
-rw-r--r-- | src/uinput.py | 37 |
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)]) |