import threading import subprocess import asyncio import os import time class OP25Handler: #(threading.Thread): def __init__(self): super().__init__() self.OP25Dir: str = "/home/pi/op25/op25/gr-op25_repeater/apps" self.OP25Proc = None self.Frequency = None self.HTTP_ENABLED = False def start(self) -> None: self.open_op25() def set_op25_parameters(self, _frequency, _http_enabled: bool = False): self.Frequency = _frequency self.HTTP_ENABLED = _http_enabled def open_op25(self): if self.OP25Proc is not None: self.close_op25() print(f"Starting OP25") cwd = os.getcwd() os.chdir(self.OP25Dir) if self.HTTP_ENABLED: self.OP25Proc = subprocess.Popen([f"./rx.py", "--args", "rtl", "-N", "LNA:49", "-s", "200000", "-o", "25600", "-U", "-f", f"{self.Frequency}e6", "-X", "-2", "-l" "http:0.0.0.0:8080"]) else: self.OP25Proc = subprocess.Popen([f"./rx.py", "--args", "rtl", "-N", "LNA:49", "-s", "200000", "-o", "25600", "-U", "-f", f"{self.Frequency}e6", "-X", "-2"]) os.chdir(cwd) def close_op25(self): print(f"Closing OP25") try: self.OP25Proc.kill() seconds_waited = 0 while self.OP25Proc.poll() is None: # Terminate the process every 5 seconds if seconds_waited % 5 == 0: print("Terminating OP25") self.OP25Proc.terminate() time.sleep(1) print(f"Waited {seconds_waited} seconds") seconds_waited += 1 except Exception as e: print(e)