@@ -544,6 +544,7 @@ def __init__(
544544 "start_is_keyboard" ,
545545 ]
546546 ) = None ,
547+ guide_to_paddles : bool = False ,
547548 trigger : None | Literal ["analog_to_discrete" , "discrete_to_analogue" ] = None ,
548549 dpad : (
549550 None
@@ -578,6 +579,7 @@ def __init__(
578579 startselect_chord : bool = False ,
579580 ) -> None :
580581 self .swap_guide = swap_guide
582+ self .guide_to_paddles = guide_to_paddles
581583 self .trigger = trigger
582584 self .dpad = dpad
583585 self .led = led
@@ -631,6 +633,8 @@ def __init__(
631633 self .emit and self .emit .simple_qam ()
632634 )
633635 self .guide_pressed = False
636+ self .guide_released = None
637+ self .guide_times = 0
634638 self .steam_check = params .get ("steam_check" , None )
635639 self .steam_check_last = time .perf_counter ()
636640 self .steam_check_fn = params .get ("steam_check_fn" , None )
@@ -1011,12 +1015,13 @@ def process(self, events: Sequence[Event]) -> Sequence[Event]:
10111015 )
10121016 ev ["code" ] = "" # type: ignore
10131017
1014- if self .emit and ev ["code" ] == "mode" :
1015- # Steam might do weirdness, emit an event to prepare
1016- # the overlay
1017- self .guide_pressed = ev ["value" ]
1018- if ev ["value" ]:
1019- self .emit ({"type" : "special" , "event" : "guide" })
1018+ # overlay doesn't do anything with the "guide" event
1019+ # if self.emit and ev["code"] == "mode":
1020+ # # Steam might do weirdness, emit an event to prepare
1021+ # # the overlay
1022+ # self.guide_pressed = ev["value"]
1023+ # if ev["value"]:
1024+ # self.emit({"type": "special", "event": "guide"})
10201025
10211026 if (
10221027 self .dpad == "discrete_to_analog" or self .dpad == "both"
@@ -1052,6 +1057,21 @@ def process(self, events: Sequence[Event]) -> Sequence[Event]:
10521057 }
10531058 )
10541059
1060+ if ev ["code" ] == "mode" and self .guide_to_paddles :
1061+ logger .info (f"guide_to_paddles mode button: { ev ["value" ]} , curr: { curr } " )
1062+ ev ["code" ] = ""
1063+ if self .qam_simple :
1064+ ev ["code" ] = "extra_l2"
1065+ elif ev ["value" ]:
1066+ self .guide_times += 1
1067+ self .guide_pressed = curr
1068+ self .guide_released = None
1069+ elif self .guide_pressed :
1070+ logger .info ("releasing" )
1071+ self .guide_released = curr
1072+ self .guide_pressed = None
1073+ logger .info (f"guide_times: { self .guide_times } , guide_pressed: { self .guide_pressed } , guide_released: { self .guide_released } " )
1074+
10551075 if (
10561076 self .qam_button is not None and ev ["code" ] == self .qam_button
10571077 ) or (self .keyboard_is == "qam" and ev ["code" ] == "keyboard" ):
@@ -1077,11 +1097,11 @@ def process(self, events: Sequence[Event]) -> Sequence[Event]:
10771097 self .qam_released = curr
10781098 self .qam_pressed = None
10791099 else :
1080- if self .has_qam :
1100+ if self .has_qam or self . guide_to_paddles :
10811101 out .append (
10821102 {
10831103 "type" : "button" ,
1084- "code" : "share" ,
1104+ "code" : self . guide_to_paddles and "extra_r2" or "share" ,
10851105 "value" : ev ["value" ],
10861106 },
10871107 )
@@ -1369,6 +1389,23 @@ def process(self, events: Sequence[Event]) -> Sequence[Event]:
13691389 if ev ["type" ] != "button" or ev ["code" ]:
13701390 out .append (ev )
13711391
1392+ # Handle Guide button multitap (only needed when guide_to_paddles == True)
1393+ if self .guide_to_paddles :
1394+ if self .guide_pressed and self .guide_times == 2 :
1395+ send_steam_expand = True
1396+ self .guide_pressed = None
1397+ self .guide_times = 0
1398+ if self .guide_released and (
1399+ curr - self .guide_released > self .QAM_MULTI_PRESS_DELAY
1400+ ):
1401+ out .append ({"type" : "button" , "code" : "extra_l2" , "value" : True })
1402+ self .queue .append ((
1403+ {"type" : "button" , "code" : "extra_l2" , "value" : False },
1404+ curr + self .QAM_TAP_TIME
1405+ ))
1406+ self .guide_released = None
1407+ self .guide_times = 0
1408+
13721409 # Handle QAM button
13731410 # Below is the multitap implementation
13741411 # If it was disabled, the code is a NO-OP
@@ -1398,12 +1435,14 @@ def process(self, events: Sequence[Event]) -> Sequence[Event]:
13981435 self .qam_pre_sent = True
13991436
14001437 send_steam_qam = send_steam_qam or (
1401- qam_apply and not qam_hhd and self .qam_released and self .qam_times == 1
1438+ qam_apply and not qam_hhd and self .qam_released and
1439+ self .qam_times == (self .guide_to_paddles and 2 or 1 )
14021440 )
1403- send_steam_expand = (
1441+ send_steam_expand = send_steam_expand or (
14041442 qam_apply and self .qam_pressed and was_held and self .qam_hold == "mode"
14051443 )
14061444 if qam_apply and self .emit :
1445+ logger .info (f"apply and emit, guide_to_paddles = { self .guide_to_paddles } , qam_hhd: { qam_hhd } " )
14071446 if qam_hhd :
14081447 match self .qam_times :
14091448 case 0 :
@@ -1412,6 +1451,20 @@ def process(self, events: Sequence[Event]) -> Sequence[Event]:
14121451 self .emit ({"type" : "special" , "event" : "qam_double" })
14131452 case _:
14141453 self .emit ({"type" : "special" , "event" : "qam_triple" })
1454+ elif self .guide_to_paddles :
1455+ match self .qam_times :
1456+ case 0 :
1457+ pass
1458+ case 1 :
1459+ out .append ({"type" : "button" , "code" : "extra_r2" , "value" : True })
1460+ self .queue .append ((
1461+ {"type" : "button" , "code" : "extra_r2" , "value" : False },
1462+ curr + self .QAM_TAP_TIME
1463+ ))
1464+ case 2 :
1465+ self .emit ({"type" : "special" , "event" : "qam_single" })
1466+ case 3 :
1467+ self .emit ({"type" : "special" , "event" : "qam_double" })
14151468 else :
14161469 # FIXME: hiding the event based on qam_hold should not happen
14171470 # instead the handler should not open hhd
0 commit comments