YAGS/station/recorder.py

89 lines
2.5 KiB
Python

import os
import puller
import threading
from rotator import rotator
from simplecom import simplecom
from pathlib import Path
import config
import time
# A recursive function to remove the folder
def del_folder(path):
for sub in path.iterdir():
if sub.is_dir():
# Delete directory if it's a subdirectory
del_folder(sub)
else :
# Delete file if it is a file:
sub.unlink()
# This removes the top-level folder:
path.rmdir()
class recorder(threading.Thread):
def __init__(self, job):
threading.Thread.__init__(self)
self.job = job
def run(self):
print(f"Recorder for job {self.job['target']['name']} started")
recordTime = (self.job["end"] - self.job["start"]).total_seconds()
#init rotator
rotatorDriver = simplecom("/dev/ttyUSB0")
rotatorCTR = rotator(rotatorDriver, self.job, config.station)
rotatorCTR.start()
baseband = f"records/{self.job['id']}"
fs = max(self.job["receiver"]["params"]["fs"])
# find supported FS
for sample in self.job["receiver"]["params"]["fs"]:
if (sample > int(self.job['transmitter']['bandwidth'])) and (sample < fs):
fs = sample
time.sleep(50)
os.system(f"satdump record {baseband} --source {self.job['receiver']['params']['radio']} --samplerate {fs} --frequency {self.job['transmitter']['centerFrequency']} --gain {self.job['receiver']['params']['gain']} --baseband_format s8 --timeout {recordTime}")
print(f"Recorder for job {self.job['target']['name']} stoped")
puller.setRecorded(self.job["id"])
rotatorCTR.kill()
if self.job["proccessPipe"] == []:
return
puller.setDecoding(self.job["id"])
pipe = " && ".join(self.job["proccessPipe"])
#create artecats dir
adir = f"artefacts/{self.job['id']}"
os.makedirs(adir)
#ok now replace
pipe = pipe.replace("{baseband}", str(baseband) + ".s8").replace("{fs}", str(fs)).replace("{artefactDir}", str(adir))
os.system(pipe)
puller.setSuccess(self.job["id"])
puller.setArtefacts(adir, self.job["id"])
# remove basband record
os.remove(str(baseband) + ".s8")
# remove artefacts
path = Path(adir)
try:
del_folder(path)
print("Directory removed successfully")
except OSError as o:
print(f"Error, {o.strerror}: {path}")