2020-04-26 13:17:03 +00:00
|
|
|
from owrx.feature import FeatureDetector
|
|
|
|
from functools import reduce
|
|
|
|
|
|
|
|
|
|
|
|
class Mode(object):
|
2020-04-26 14:58:31 +00:00
|
|
|
def __init__(self, modulation, name, requirements=None, service=False, digimode=False):
|
2020-04-26 13:17:03 +00:00
|
|
|
self.modulation = modulation
|
|
|
|
self.name = name
|
2020-04-26 14:58:31 +00:00
|
|
|
self.digimode = digimode
|
2020-04-26 13:17:03 +00:00
|
|
|
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 = [
|
2020-04-26 14:58:31 +00:00
|
|
|
Mode("nfm", "FM"),
|
|
|
|
Mode("am", "AM"),
|
|
|
|
Mode("lsb", "LSB"),
|
|
|
|
Mode("usb", "USB"),
|
|
|
|
Mode("cw", "CW"),
|
|
|
|
Mode("dmr", "DMR", requirements=["digital_voice_digiham"]),
|
|
|
|
Mode("dstar", "DStar", requirements=["digital_voice_dsd"]),
|
|
|
|
Mode("nxdn", "NXDN", requirements=["digital_voice_dsd"]),
|
|
|
|
Mode("ysf", "YSF", requirements=["digital_voice_digiham"]),
|
|
|
|
Mode("bpsk31", "BPSK31", digimode=True),
|
|
|
|
Mode("bpsk63", "BPSK63", digimode=True),
|
|
|
|
Mode("ft8", "FT8", requirements=["wsjt-x"], service=True, digimode=True),
|
|
|
|
Mode("ft4", "FT4", requirements=["wsjt-x"], service=True, digimode=True),
|
|
|
|
Mode("jt65", "JT65", requirements=["wsjt-x"], service=True, digimode=True),
|
|
|
|
Mode("jt9", "JT9", requirements=["wsjt-x"], service=True, digimode=True),
|
|
|
|
Mode("wspr", "WSPR", requirements=["wsjt-x"], service=True, digimode=True),
|
|
|
|
Mode("packet", "Packet", ["packet"], service=True, digimode=True),
|
|
|
|
Mode("js8", "JS8Call", requirements=["js8call"], service=True, digimode=True),
|
2020-04-26 13:17:03 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
@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()]
|