From 183c055f83cab0a53c78e1e2a4e3ca390dc78447 Mon Sep 17 00:00:00 2001 From: Gabby Pelton Date: Sat, 30 May 2026 01:48:07 -0500 Subject: [PATCH] triple press to exit call --- client.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/client.py b/client.py index 62e8a25..f9af052 100644 --- a/client.py +++ b/client.py @@ -76,6 +76,8 @@ class ChannelClient: self._ptt_active = False self._last_release_time = 0.0 self._double_pressed = False + self._press_count = 0 + self._triple_pressed = False if use_whisplay and _WHISPLAY_AVAILABLE and _HAS_PIL: try: self._init_whisplay() @@ -311,10 +313,10 @@ class ChannelClient: lines.append(ch["hash"][:16] + "..") if self._ptt_enabled: lines += ["", "PTT: hold to talk", "Release to mute"] - footer = "Double-press: toggle" + footer = "Dbl: toggle Trip: leave" else: lines += ["", "Mic always-on", "Press to hang up"] - footer = "Double-press: toggle" + footer = "Dbl: toggle Trip: leave" fb = self._render("In Call", lines, accent=(60, 220, 120), footer=footer) self.board.draw_image(0, 0, self.board.LCD_WIDTH, self.board.LCD_HEIGHT, fb) @@ -328,7 +330,21 @@ class ChannelClient: def _on_button_press(self): self._press_time = time.time() if self.state == self.STATE_IN_CALL: - if time.time() - self._last_release_time < DOUBLE_PRESS_THRESHOLD: + gap = time.time() - self._last_release_time + if gap < DOUBLE_PRESS_THRESHOLD: + self._press_count += 1 + else: + self._press_count = 1 + + if self._press_count >= 3: + self._press_count = 0 + self._triple_pressed = True + self._double_pressed = False + self._ptt_active = False + self.telephone.hangup() + return + + if self._press_count == 2: self._double_pressed = True self._ptt_enabled = not self._ptt_enabled if self._ptt_enabled: @@ -338,6 +354,7 @@ class ChannelClient: if self.board: self._show_in_call() return + if self._ptt_enabled: self._ptt_active = True self.telephone.unmute_transmit() @@ -346,6 +363,9 @@ class ChannelClient: def _on_button_release(self): self._last_release_time = time.time() + if self._triple_pressed: + self._triple_pressed = False + return if self.state == self.STATE_IN_CALL: if self._double_pressed: self._double_pressed = False @@ -506,6 +526,8 @@ class ChannelClient: self.state = self.STATE_READY self._ptt_active = False self._double_pressed = False + self._triple_pressed = False + self._press_count = 0 if was_in_call: print(f"\nCall ended") elif was_calling: