diff --git a/client.py b/client.py index f88d8cd..8c2daca 100644 --- a/client.py +++ b/client.py @@ -124,8 +124,10 @@ class ChannelClient: use_daemon_default_log=True, ) self.whisplay_interface.board.set_backlight(70) - # self.whisplay_interface.board.on_exit_request(self._on_exit_request) - # self.whisplay_interface.board.on_focus_revoked(self._on_focus_revoked) + if hasattr(self.whisplay_interface.board, "on_exit_request"): + self.board.on_exit_request(self._on_exit_request) + if hasattr(self.whisplay_interface.board, "on_focus_revoked"): + self.board.on_focus_revoked(self._on_focus_revoked) self._load_fonts() self._setup_whisplay_audio() @@ -274,9 +276,9 @@ class ChannelClient: if ch: lines.append(ch["hash"][:16] + "..") if self._ptt_enabled: - lines += ["", "PTT: hold to talk", "Short: always-on"] - footer = "Dbl: leave" - else: + lines += ["", "PTT: hold to talk", "release to mute"] + footer = "Short: always-on | Dbl: leave" + else: lines += ["", "Always-on (unmuted)"] footer = "Short: PTT Dbl: leave" fb = self._render("In Call", lines, accent=(60, 220, 120), footer=footer) @@ -312,7 +314,7 @@ class ChannelClient: if self.state == self.STATE_IN_CALL: if self.whisplay_interface.is_pressed and self._ptt_enabled and not self._ptt_active: self._ptt_active = True - self.telephone.unmute_transmit() + self._hw_set_mic_muted(False) if self.whisplay_interface.board: self.whisplay_interface.board.set_rgb(255, 255, 0) @@ -325,12 +327,12 @@ class ChannelClient: self._show_in_call() else: self._ptt_active = False - self.telephone.mute_transmit() + self._hw_set_mic_muted(True) if self.whisplay_interface.board: self.whisplay_interface.board.set_rgb(0, 255, 80) elif not self.whisplay_interface.was_long_pressed: self._ptt_enabled = True - self.telephone.mute_transmit() + self._hw_set_mic_muted(True) if self.whisplay_interface.board: self._show_in_call() @@ -460,7 +462,7 @@ class ChannelClient: f"{RNS.prettyhexrep(remote_identity.hash)}" ) if self._ptt_enabled: - self.telephone.mute_transmit() + self._hw_set_mic_muted(True) if self.whisplay_interface.board: self.whisplay_interface.board.set_rgb(0, 255, 80) self._show_in_call() @@ -481,6 +483,19 @@ class ChannelClient: time.sleep(1) self._show_channels() + def _hw_set_mic_muted(self, muted): + if self._wm8960_device is None: + return + card = self._wm8960_device.split(",")[0].split(":")[-1] + state = "off" if muted else "on" + try: + subprocess.run( + ["amixer", "-c", card, "cset", "name='Capture Switch'", state], + check=False, capture_output=True, timeout=2, + ) + except Exception: + pass + def call_channel(self, index): if index < 0 or index >= len(self.channels): print("Invalid channel index")