Files
Discord-Radio-Bot/op25Handler.py
Logan Cusano 8fa42d819a idk
2022-03-27 14:03:40 -04:00

98 lines
2.8 KiB
Python

import shutil
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.OP25EXE: str = shutil.which("/home/pi/op25/op25/gr-op25_repeater/apps/rx.py")
self.OP25Proc = None
self.Frequency = None
self.HTTP_ENABLED = False
self.Start_OP25 = False
self.Stop_OP25 = False
def run(self) -> None:
while True:
if self.Start_OP25:
self.open_op25()
self.Start_OP25 = False
self.Stop_OP25 = False
while not self.Stop_OP25:
time.sleep(1)
self.close_op25()
time.sleep(.5)
def set_op25_parameters(self, _frequency: str = False, _http_enabled: bool = True, _start: bool = False, _stop: bool = False):
if _frequency:
self.Frequency = _frequency
if _start:
self.Start_OP25 = _start
if _stop:
self.Stop_OP25 = _stop
if _http_enabled:
self.HTTP_ENABLED = _http_enabled
def open_op25(self):
if self.OP25Proc is not None:
self.close_op25()
p25_kwargs = [f"rx.py", "--args", "rtl", "-N", "LNA:49", "-s", "200000", "-o", "25600", "-U", "-f",
f"{self.Frequency}e6", "-X", "-2"]
#p25_kwargs = f"{self.OP25Dir}/rx.py --args rtl -N LNA:49 -s 200000 -o 25600 -U -f {self.Frequency}e6 -X -2"
#p25_stdout = subprocess.DEVNULL
#p25_stderr = subprocess.STDOUT
print(f"Starting OP25")
# Change the interpreter's working directory (idr why)
#cwd = os.getcwd()
#os.chdir(self.OP25Dir)
if self.HTTP_ENABLED:
p25_kwargs.extend(["-l", "http:0.0.0.0:8080"])
#p25_kwargs += " -l http:0.0.0.0:8080"
#p25_stdout = subprocess.STDOUT
print(p25_kwargs)
self.OP25Proc = subprocess.Popen(p25_kwargs, executable=self.OP25EXE, shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self.OP25Dir)
#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)