Skip to content

Commit ca2841a

Browse files
committed
add deadzone lock delay
1 parent 0df0416 commit ca2841a

1 file changed

Lines changed: 24 additions & 9 deletions

File tree

fixes/raw_ps4/controller.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import sys
2222
import argparse
2323
import math
24+
import time
2425
import evdev
2526
from evdev import InputDevice, UInput, ecodes as e
2627

@@ -168,8 +169,10 @@ def __init__(self, ui, device, classic_overlap=False):
168169
self.center_x = (abs_x.min + abs_x.max) / 2.0
169170
self.half_range_x = (abs_x.max - abs_x.min) / 2.0
170171

171-
self.threshold = 0.9 # activation threshold
172+
self.threshold = 0.95 # activation threshold
172173
self.hysteresis = 0.05 # prevents flicker
174+
self.deadzone_delay = 0.2
175+
self.deadzone_enter_time = None
173176

174177
self.current_x = 0.0
175178
self.current_y = 0.0
@@ -230,6 +233,8 @@ def set_deadzone(self):
230233
"""Deactivate all arrow keys."""
231234
if not self.state["deadzone"]:
232235
self.state["deadzone"] = True
236+
self.deadzone_enter_time = time.monotonic()
237+
233238
if self.state["up"]:
234239
self.state["up"] = False
235240
self.ui.write(e.EV_KEY, e.KEY_UP, 0)
@@ -244,17 +249,22 @@ def set_deadzone(self):
244249
self.ui.write(e.EV_KEY, e.KEY_DOWN, 0)
245250
self.ui.syn()
246251

247-
def handle_state(self, active, angle): # pylint: disable=too-many-statements too-many-branches
252+
# pylint: disable=too-many-statements too-many-branches
253+
def handle_state(self, active, angle):
248254
"""Handle the states for the arrow keys."""
249255
if not active:
250256
self.set_deadzone()
251257
return
252258

259+
if self.state["deadzone"]:
260+
if time.monotonic() - self.deadzone_enter_time < self.deadzone_delay:
261+
return
262+
self.state["deadzone"] = False
263+
253264
sector_point_right_up = 45
254265
sector_point_left_up = 135
255266
sector_point_right_down = -45
256267
sector_point_left_down = -135
257-
self.state["deadzone"] = False
258268

259269
# Up
260270
if sector_point_right_up < angle < sector_point_left_up:
@@ -309,17 +319,22 @@ def handle_state(self, active, angle): # pylint: disable=too-many-statements to
309319
self.ui.write(e.EV_KEY, e.KEY_DOWN, 1)
310320
self.ui.syn()
311321

312-
def handle_state_classic(self, active, angle): # pylint: disable=too-many-statements too-many-branches
322+
# pylint: disable=too-many-statements too-many-branches
323+
def handle_state_classic(self, active, angle):
313324
"""Handle the states for the arrow keys."""
314325
if not active:
315326
self.set_deadzone()
316327
return
317328

318-
size_up = 142
319-
size_right = 142
320-
size_left = 142
321-
size_down = 142
322-
self.state["deadzone"] = False
329+
if self.state["deadzone"]:
330+
if time.monotonic() - self.deadzone_enter_time < self.deadzone_delay:
331+
return
332+
self.state["deadzone"] = False
333+
334+
size_up = 138
335+
size_right = 138
336+
size_left = 138
337+
size_down = 138
323338

324339
# Up
325340
if 90-size_up/2 < angle < 90+size_up/2:

0 commit comments

Comments
 (0)