use hardware mute to manage PTT
This commit is contained in:
@@ -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,8 +276,8 @@ class ChannelClient:
|
||||
if ch:
|
||||
lines.append(ch["hash"][:16] + "..")
|
||||
if self._ptt_enabled:
|
||||
lines += ["", "PTT: hold to talk", "Short: always-on"]
|
||||
footer = "Dbl: leave"
|
||||
lines += ["", "PTT: hold to talk", "release to mute"]
|
||||
footer = "Short: always-on | Dbl: leave"
|
||||
else:
|
||||
lines += ["", "Always-on (unmuted)"]
|
||||
footer = "Short: PTT Dbl: leave"
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user