triple press to exit call

This commit is contained in:
Gabby Pelton
2026-05-30 01:48:07 -05:00
parent c5f3cf54f5
commit 183c055f83
+25 -3
View File
@@ -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: