keep more parameters on the server side
This commit is contained in:
@ -11,7 +11,7 @@ from owrx.bookmarks import Bookmarks
|
||||
from owrx.map import Map
|
||||
from owrx.locator import Locator
|
||||
from owrx.property import PropertyStack
|
||||
from owrx.modes import Modes
|
||||
from owrx.modes import Modes, DigitalMode
|
||||
from multiprocessing import Queue
|
||||
from queue import Full
|
||||
from js8py import Js8Frame
|
||||
@ -114,18 +114,18 @@ class OpenWebRxReceiverClient(Client):
|
||||
receiver_info["locator"] = Locator.fromCoordinates(receiver_info["receiver_gps"])
|
||||
self.write_receiver_details(receiver_info)
|
||||
|
||||
# TODO unsubscribe
|
||||
receiver_details.wire(send_receiver_info)
|
||||
send_receiver_info()
|
||||
|
||||
self.__sendProfiles()
|
||||
|
||||
features = FeatureDetector().feature_availability()
|
||||
self.write_features(features)
|
||||
|
||||
modes = Modes.getModes()
|
||||
self.write_modes(modes)
|
||||
|
||||
# TODO unsubscribe
|
||||
receiver_details.wire(send_receiver_info)
|
||||
send_receiver_info()
|
||||
|
||||
self.__sendProfiles()
|
||||
|
||||
CpuUsageThread.getSharedInstance().add_client(self)
|
||||
|
||||
def __sendProfiles(self):
|
||||
@ -350,12 +350,23 @@ class OpenWebRxReceiverClient(Client):
|
||||
}})
|
||||
|
||||
def write_modes(self, modes):
|
||||
self.send({"type": "modes", "value": [{
|
||||
"modulation": m.modulation,
|
||||
"name": m.name,
|
||||
"digimode": m.digimode,
|
||||
"requirements": m.requirements
|
||||
} for m in modes]})
|
||||
def to_json(m):
|
||||
res = {
|
||||
"modulation": m.modulation,
|
||||
"name": m.name,
|
||||
"type": "digimode" if isinstance(m, DigitalMode) else "analog",
|
||||
"requirements": m.requirements
|
||||
}
|
||||
if m.bandpass is not None:
|
||||
res["bandpass"] = {
|
||||
"low_cut": m.bandpass.low_cut,
|
||||
"high_cut": m.bandpass.high_cut
|
||||
}
|
||||
if isinstance(m, DigitalMode):
|
||||
res["underlying"] = m.underlying
|
||||
return res
|
||||
|
||||
self.send({"type": "modes", "value": [to_json(m) for m in modes]})
|
||||
|
||||
|
||||
class MapConnection(Client):
|
||||
|
@ -2,13 +2,19 @@ from owrx.feature import FeatureDetector
|
||||
from functools import reduce
|
||||
|
||||
|
||||
class Bandpass(object):
|
||||
def __init__(self, low_cut, high_cut):
|
||||
self.low_cut = low_cut
|
||||
self.high_cut = high_cut
|
||||
|
||||
|
||||
class Mode(object):
|
||||
def __init__(self, modulation, name, requirements=None, service=False, digimode=False):
|
||||
def __init__(self, modulation, name, bandpass: Bandpass = None, requirements=None, service=False):
|
||||
self.modulation = modulation
|
||||
self.name = name
|
||||
self.digimode = digimode
|
||||
self.requirements = requirements if requirements is not None else []
|
||||
self.service = service
|
||||
self.bandpass = bandpass
|
||||
|
||||
def is_available(self):
|
||||
fd = FeatureDetector()
|
||||
@ -20,26 +26,37 @@ class Mode(object):
|
||||
return self.service
|
||||
|
||||
|
||||
class AnalogMode(Mode):
|
||||
pass
|
||||
|
||||
|
||||
class DigitalMode(Mode):
|
||||
def __init__(self, modulation, name, underlying, bandpass: Bandpass = None, requirements=None, service=False):
|
||||
super().__init__(modulation, name, bandpass, requirements, service)
|
||||
self.underlying = underlying
|
||||
|
||||
|
||||
class Modes(object):
|
||||
mappings = [
|
||||
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),
|
||||
AnalogMode("nfm", "FM", bandpass=Bandpass(-4000, 4000)),
|
||||
AnalogMode("am", "AM", bandpass=Bandpass(-4000, 4000)),
|
||||
AnalogMode("lsb", "LSB", bandpass=Bandpass(-3000, -300)),
|
||||
AnalogMode("usb", "USB", bandpass=Bandpass(300, 3000)),
|
||||
AnalogMode("cw", "CW", bandpass=Bandpass(700, 900)),
|
||||
AnalogMode("dmr", "DMR", bandpass=Bandpass(-4000, 4000), requirements=["digital_voice_digiham"]),
|
||||
AnalogMode("dstar", "DStar", bandpass=Bandpass(-3250, 3250), requirements=["digital_voice_dsd"]),
|
||||
AnalogMode("nxdn", "NXDN", bandpass=Bandpass(-3250, 3250), requirements=["digital_voice_dsd"]),
|
||||
AnalogMode("ysf", "YSF", bandpass=Bandpass(-4000, 4000), requirements=["digital_voice_digiham"]),
|
||||
DigitalMode("bpsk31", "BPSK31", underlying=["usb"]),
|
||||
DigitalMode("bpsk63", "BPSK63", underlying=["usb"]),
|
||||
DigitalMode("ft8", "FT8", underlying=["usb"], requirements=["wsjt-x"], service=True),
|
||||
DigitalMode("ft4", "FT4", underlying=["usb"], requirements=["wsjt-x"], service=True),
|
||||
DigitalMode("jt65", "JT65", underlying=["usb"], requirements=["wsjt-x"], service=True),
|
||||
DigitalMode("jt9", "JT9", underlying=["usb"], requirements=["wsjt-x"], service=True),
|
||||
DigitalMode("wspr", "WSPR", underlying=["usb"], bandpass=Bandpass(1350, 1650), requirements=["wsjt-x"], service=True),
|
||||
DigitalMode("js8", "JS8Call", underlying=["usb"], requirements=["js8call"], service=True),
|
||||
DigitalMode("packet", "Packet", underlying=["nfm", "usb", "lsb"], requirements=["packet"], service=True),
|
||||
DigitalMode("pocsag", "Pocsag", underlying=["nfm"], bandpass=Bandpass(-6000, 6000), requirements=["pocsag"])
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
|
Reference in New Issue
Block a user