start building device forms
This commit is contained in:
parent
4316832b95
commit
3aa238727e
@ -1,30 +0,0 @@
|
|||||||
from owrx.form import Input
|
|
||||||
from owrx.controllers.settings import Section
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
|
|
||||||
class SdrDeviceDescriptionMissing(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class SdrDeviceDescription(object):
|
|
||||||
@staticmethod
|
|
||||||
def getByType(sdr_type: str) -> "SdrDeviceDescription":
|
|
||||||
try:
|
|
||||||
className = "".join(x for x in sdr_type.title() if x.isalnum()) + "DeviceDescription"
|
|
||||||
module = __import__("owrx.source.{0}".format(sdr_type), fromlist=[className])
|
|
||||||
cls = getattr(module, className)
|
|
||||||
return cls()
|
|
||||||
except (ModuleNotFoundError, AttributeError):
|
|
||||||
raise SdrDeviceDescriptionMissing("Device description for type {} not available".format(sdr_type))
|
|
||||||
|
|
||||||
def getInputs(self) -> List[Input]:
|
|
||||||
return []
|
|
||||||
|
|
||||||
def mergeInputs(self, *args):
|
|
||||||
# build a dictionary indexed by the input id to make sure every id only exists once
|
|
||||||
inputs = {input.id: input for input_list in args for input in input_list}
|
|
||||||
return inputs.values()
|
|
||||||
|
|
||||||
def getSection(self):
|
|
||||||
return Section("Device settings", *self.getInputs())
|
|
@ -1,7 +1,7 @@
|
|||||||
from owrx.controllers.admin import AuthorizationMixin
|
from owrx.controllers.admin import AuthorizationMixin
|
||||||
from owrx.controllers.template import WebpageController
|
from owrx.controllers.template import WebpageController
|
||||||
from owrx.controllers.settings import SettingsFormController
|
from owrx.controllers.settings import SettingsFormController
|
||||||
from owrx.controllers.settings.device import SdrDeviceDescription, SdrDeviceDescriptionMissing
|
from owrx.source import SdrDeviceDescription, SdrDeviceDescriptionMissing
|
||||||
from owrx.config import Config
|
from owrx.config import Config
|
||||||
from urllib.parse import quote, unquote
|
from urllib.parse import quote, unquote
|
||||||
|
|
||||||
|
@ -10,6 +10,9 @@ from abc import ABC, abstractmethod
|
|||||||
from owrx.command import CommandMapper
|
from owrx.command import CommandMapper
|
||||||
from owrx.socket import getAvailablePort
|
from owrx.socket import getAvailablePort
|
||||||
from owrx.property import PropertyStack, PropertyLayer
|
from owrx.property import PropertyStack, PropertyLayer
|
||||||
|
from owrx.form import Input, TextInput, NumberInput
|
||||||
|
from owrx.controllers.settings import Section
|
||||||
|
from typing import List
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -352,3 +355,33 @@ class SdrSource(ABC):
|
|||||||
self.busyState = state
|
self.busyState = state
|
||||||
for c in self.clients:
|
for c in self.clients:
|
||||||
c.onBusyStateChange(state)
|
c.onBusyStateChange(state)
|
||||||
|
|
||||||
|
|
||||||
|
class SdrDeviceDescriptionMissing(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class SdrDeviceDescription(object):
|
||||||
|
@staticmethod
|
||||||
|
def getByType(sdr_type: str) -> "SdrDeviceDescription":
|
||||||
|
try:
|
||||||
|
className = "".join(x for x in sdr_type.title() if x.isalnum()) + "DeviceDescription"
|
||||||
|
module = __import__("owrx.source.{0}".format(sdr_type), fromlist=[className])
|
||||||
|
cls = getattr(module, className)
|
||||||
|
return cls()
|
||||||
|
except (ModuleNotFoundError, AttributeError):
|
||||||
|
raise SdrDeviceDescriptionMissing("Device description for type {} not available".format(sdr_type))
|
||||||
|
|
||||||
|
def getInputs(self) -> List[Input]:
|
||||||
|
return [
|
||||||
|
TextInput("name", "Device name"),
|
||||||
|
NumberInput("ppm", "Frequency correction", append="ppm"),
|
||||||
|
]
|
||||||
|
|
||||||
|
def mergeInputs(self, *args):
|
||||||
|
# build a dictionary indexed by the input id to make sure every id only exists once
|
||||||
|
inputs = {input.id: input for input_list in args for input in input_list}
|
||||||
|
return inputs.values()
|
||||||
|
|
||||||
|
def getSection(self):
|
||||||
|
return Section("Device settings", *self.getInputs())
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from . import SdrSource
|
from owrx.source import SdrSource, SdrDeviceDescription
|
||||||
from owrx.socket import getAvailablePort
|
from owrx.socket import getAvailablePort
|
||||||
import socket
|
import socket
|
||||||
from owrx.command import CommandMapper, Flag, Option
|
from owrx.command import Flag, Option
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -69,3 +69,7 @@ class ConnectorSource(SdrSource):
|
|||||||
values["port"] = self.getPort()
|
values["port"] = self.getPort()
|
||||||
values["controlPort"] = self.getControlPort()
|
values["controlPort"] = self.getControlPort()
|
||||||
return values
|
return values
|
||||||
|
|
||||||
|
|
||||||
|
class ConnectorDeviceDescription(SdrDeviceDescription):
|
||||||
|
pass
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
from .connector import ConnectorSource
|
from owrx.source.connector import ConnectorSource, ConnectorDeviceDescription
|
||||||
from owrx.command import Flag, Option
|
from owrx.command import Flag, Option
|
||||||
from owrx.controllers.settings.device import SdrDeviceDescription
|
|
||||||
from typing import List
|
from typing import List
|
||||||
from owrx.form import Input, TextInput
|
from owrx.form import Input, TextInput
|
||||||
|
|
||||||
@ -15,11 +14,11 @@ class RtlSdrSource(ConnectorSource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class RtlSdrDeviceDescription(SdrDeviceDescription):
|
class RtlSdrDeviceDescription(ConnectorDeviceDescription):
|
||||||
def getInputs(self) -> List[Input]:
|
def getInputs(self) -> List[Input]:
|
||||||
return self.mergeInputs(
|
return self.mergeInputs(
|
||||||
super().getInputs(),
|
super().getInputs(),
|
||||||
[
|
[
|
||||||
TextInput("test", "This is a drill"),
|
TextInput("device", "Device identifier", infotext="Device serial number or index"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from .soapy import SoapyConnectorSource
|
from owrx.source.soapy import SoapyConnectorSource, SoapyConnectorDeviceDescription
|
||||||
|
|
||||||
|
|
||||||
class SdrplaySource(SoapyConnectorSource):
|
class SdrplaySource(SoapyConnectorSource):
|
||||||
@ -17,3 +17,7 @@ class SdrplaySource(SoapyConnectorSource):
|
|||||||
|
|
||||||
def getDriver(self):
|
def getDriver(self):
|
||||||
return "sdrplay"
|
return "sdrplay"
|
||||||
|
|
||||||
|
|
||||||
|
class SdrplayDeviceDescription(SoapyConnectorDeviceDescription):
|
||||||
|
pass
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from abc import ABCMeta, abstractmethod
|
from abc import ABCMeta, abstractmethod
|
||||||
from owrx.command import Option
|
from owrx.command import Option
|
||||||
from .connector import ConnectorSource
|
from owrx.source.connector import ConnectorSource, ConnectorDeviceDescription
|
||||||
|
from typing import List
|
||||||
|
from owrx.form import Input, TextInput
|
||||||
|
|
||||||
|
|
||||||
class SoapyConnectorSource(ConnectorSource, metaclass=ABCMeta):
|
class SoapyConnectorSource(ConnectorSource, metaclass=ABCMeta):
|
||||||
@ -94,3 +96,17 @@ class SoapyConnectorSource(ConnectorSource, metaclass=ABCMeta):
|
|||||||
if settings:
|
if settings:
|
||||||
changes["settings"] = ",".join("{0}={1}".format(k, v) for k, v in settings.items())
|
changes["settings"] = ",".join("{0}={1}".format(k, v) for k, v in settings.items())
|
||||||
super().onPropertyChange(changes)
|
super().onPropertyChange(changes)
|
||||||
|
|
||||||
|
|
||||||
|
class SoapyConnectorDeviceDescription(ConnectorDeviceDescription):
|
||||||
|
def getInputs(self) -> List[Input]:
|
||||||
|
return self.mergeInputs(
|
||||||
|
super().getInputs(),
|
||||||
|
[
|
||||||
|
TextInput(
|
||||||
|
"device",
|
||||||
|
"Device Identifier",
|
||||||
|
infotext='SoapySDR device identifier string (example: "serial=123456789")',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user