|
22 | 22 | # Create a virtual keyboard |
23 | 23 | ui = UInput() |
24 | 24 |
|
| 25 | +# They must have last value and dead zone state to not interfere and remove the noise |
| 26 | +LASTX = 0 |
| 27 | +LASTY = 0 |
| 28 | +INDEADZONE_X = True |
| 29 | +INDEADZONE_Y = True |
| 30 | +INDEADZONE_Z = True |
| 31 | +INDEADZONE_RZ = True |
| 32 | + |
25 | 33 | print(f"Listening for input from {device.name}...") |
26 | 34 |
|
27 | 35 | for event in device.read_loop(): |
28 | 36 | if event.type == e.EV_ABS: # Detects D-pad, Sticks and Triggers |
| 37 | + if event.code == e.ABS_HAT0X: # Left (-1) / Right (1) |
| 38 | + if event.value == -1: # Press Left Arrow |
| 39 | + LASTX = -1 |
| 40 | + ui.write(e.EV_KEY, e.KEY_LEFT, 1) |
| 41 | + ui.syn() |
| 42 | + elif event.value == 1: # Press Right Arrow |
| 43 | + LASTX = 1 |
| 44 | + ui.write(e.EV_KEY, e.KEY_RIGHT, 1) |
| 45 | + ui.syn() |
| 46 | + elif event.value == 0 and LASTX == -1: # Release Left Arrow |
| 47 | + LASTX = 0 |
| 48 | + ui.write(e.EV_KEY, e.KEY_LEFT, 0) |
| 49 | + ui.syn() |
| 50 | + elif event.value == 0 and LASTX == 1: # Release Right Arrow |
| 51 | + LASTX = 0 |
| 52 | + ui.write(e.EV_KEY, e.KEY_RIGHT, 0) |
| 53 | + ui.syn() |
| 54 | + |
| 55 | + if event.code == e.ABS_HAT0Y: # Up (-1) / Down (1) |
| 56 | + if event.value == -1: # Press Up Arrow |
| 57 | + LASTY = -1 |
| 58 | + ui.write(e.EV_KEY, e.KEY_UP, 1) |
| 59 | + ui.syn() |
| 60 | + elif event.value == 1: # Press Down Arrow |
| 61 | + LASTY = 1 |
| 62 | + ui.write(e.EV_KEY, e.KEY_DOWN, 1) |
| 63 | + ui.syn() |
| 64 | + elif event.value == 0 and LASTY == -1: # Release Up Arrow |
| 65 | + LASTY = 0 |
| 66 | + ui.write(e.EV_KEY, e.KEY_UP, 0) |
| 67 | + ui.syn() |
| 68 | + elif event.value == 0 and LASTY == 1: # Release Down Arrow |
| 69 | + LASTY = 0 |
| 70 | + ui.write(e.EV_KEY, e.KEY_DOWN, 0) |
| 71 | + ui.syn() |
29 | 72 | """ |
30 | 73 | Sticks and Triggers |
31 | 74 | ABS_X and ABS_Y 0 means left stick is most to the left or most down |
|
45 | 88 | threshold we can start with a 8 way square. |
46 | 89 | """ |
47 | 90 | if event.code == e.ABS_X: # Left stick X |
48 | | - last_x = event.value |
49 | 91 | if event.value < 63: # Left threshold |
| 92 | + INDEADZONE_X = False |
50 | 93 | ui.write(e.EV_KEY, e.KEY_LEFT, 1) # Press Left Arrow |
51 | 94 | ui.syn() |
52 | 95 | elif event.value > 192: # Right threshold |
| 96 | + INDEADZONE_X = False |
53 | 97 | ui.write(e.EV_KEY, e.KEY_RIGHT, 1) # Press Right Arrow |
54 | 98 | ui.syn() |
55 | | - else: |
| 99 | + elif not INDEADZONE_X: |
| 100 | + INDEADZONE_X = True |
56 | 101 | ui.write(e.EV_KEY, e.KEY_LEFT, 0) |
57 | 102 | ui.write(e.EV_KEY, e.KEY_RIGHT, 0) |
58 | 103 | ui.syn() |
59 | 104 |
|
60 | 105 | elif event.code == e.ABS_Y: # Left stick Y |
61 | | - last_y = event.value |
62 | 106 | if event.value < 63: # Up threshold |
| 107 | + INDEADZONE_Y = False |
63 | 108 | ui.write(e.EV_KEY, e.KEY_UP, 1) # Press Up Arrow |
64 | 109 | ui.syn() |
65 | 110 | elif event.value > 192: # Down threshold |
| 111 | + INDEADZONE_Y = False |
66 | 112 | ui.write(e.EV_KEY, e.KEY_DOWN, 1) # Press Down Arrow |
67 | 113 | ui.syn() |
68 | | - else: |
| 114 | + elif not INDEADZONE_Y: |
| 115 | + INDEADZONE_Y = True |
69 | 116 | ui.write(e.EV_KEY, e.KEY_UP, 0) |
70 | 117 | ui.write(e.EV_KEY, e.KEY_DOWN, 0) |
71 | 118 | ui.syn() |
72 | 119 |
|
73 | 120 | elif event.code == e.ABS_Z: # Left trigger Z |
74 | 121 | if event.value > 200: |
| 122 | + INDEADZONE_Z = False |
75 | 123 | ui.write(e.EV_KEY, e.KEY_S, 1) # Activate S |
76 | 124 | ui.syn() |
77 | | - else: |
| 125 | + elif not INDEADZONE_Z: |
| 126 | + INDEADZONE_Z = True |
78 | 127 | ui.write(e.EV_KEY, e.KEY_S, 0) # Deactivate S |
79 | 128 | ui.syn() |
80 | 129 |
|
81 | 130 | elif event.code == e.ABS_RZ: # Right trigger Z |
82 | 131 | if event.value > 200: |
| 132 | + INDEADZONE_RZ = False |
83 | 133 | ui.write(e.EV_KEY, e.KEY_C, 1) # Activate C |
84 | 134 | ui.syn() |
85 | | - else: |
| 135 | + elif not INDEADZONE_RZ: |
| 136 | + INDEADZONE_RZ = True |
86 | 137 | ui.write(e.EV_KEY, e.KEY_C, 0) # Deactivate C |
87 | 138 | ui.syn() |
88 | 139 |
|
|
0 commit comments