openwebrx-clone/owrx/modes.py

44 lines
1.2 KiB
Python
Raw Normal View History

from owrx.feature import FeatureDetector
from functools import reduce
class Mode(object):
def __init__(self, modulation, name, requirements=None, service=False):
self.modulation = modulation
self.name = name
self.requirements = requirements if requirements is not None else []
self.service = service
def is_available(self):
fd = FeatureDetector()
return reduce(
lambda a, b: a and b, [fd.is_available(r) for r in self.requirements], True
)
def is_service(self):
return self.service
class Modes(object):
mappings = [
Mode("ft8", "FT8", ["wsjt-x"], True),
Mode("ft4", "FT4", ["wsjt-x"], True),
Mode("jt65", "JT65", ["wsjt-x"], True),
Mode("jt9", "JT9", ["wsjt-x"], True),
Mode("wspr", "WSPR", ["wsjt-x"], True),
Mode("packet", "Packet", ["packet"], True),
Mode("js8", "JS8Call", ["js8call"], True),
]
@staticmethod
def getModes():
return Modes.mappings
@staticmethod
def getAvailableModes():
return [m for m in Modes.getModes() if m.is_available()]
@staticmethod
def getAvailableServices():
return [m for m in Modes.getAvailableModes() if m.is_service()]