openwebrx-clone/owrx/source/direct.py

54 lines
1.5 KiB
Python
Raw Permalink Normal View History

2019-12-27 23:26:45 +00:00
from abc import ABCMeta
2021-02-20 17:09:24 +00:00
from owrx.source import SdrSource, SdrDeviceDescription
2019-12-27 23:26:45 +00:00
import logging
logger = logging.getLogger(__name__)
class DirectSource(SdrSource, metaclass=ABCMeta):
2020-12-30 16:18:46 +00:00
def onPropertyChange(self, changes):
logger.debug("restarting sdr source due to property changes: {0}".format(changes))
2019-12-27 23:26:45 +00:00
self.stop()
self.sleepOnRestart()
self.start()
def nmux_memory(self):
# in megabytes. This sets the approximate size of the circular buffer used by nmux.
return 50
2019-12-27 23:26:45 +00:00
def getNmuxCommand(self):
2020-03-24 21:52:17 +00:00
props = self.sdrProps
2019-12-27 23:26:45 +00:00
nmux_bufcnt = nmux_bufsize = 0
while nmux_bufsize < props["samp_rate"] / 4:
nmux_bufsize += 4096
while nmux_bufsize * nmux_bufcnt < self.nmux_memory() * 1e6:
2019-12-27 23:26:45 +00:00
nmux_bufcnt += 1
if nmux_bufcnt == 0 or nmux_bufsize == 0:
raise ValueError("Error: unable to calculate nmux buffer parameters.")
2019-12-27 23:26:45 +00:00
2021-01-20 16:01:46 +00:00
return [
"nmux --bufsize %d --bufcnt %d --port %d --address 127.0.0.1"
% (
nmux_bufsize,
nmux_bufcnt,
self.port,
)
]
2019-12-27 23:26:45 +00:00
def getCommand(self):
2019-12-28 15:44:45 +00:00
return super().getCommand() + self.getFormatConversion() + self.getNmuxCommand()
2019-12-27 23:26:45 +00:00
# override this in subclasses, if necessary
def getFormatConversion(self):
2019-12-28 15:44:45 +00:00
return []
2019-12-27 23:26:45 +00:00
# override this in subclasses, if necessary
def sleepOnRestart(self):
pass
2021-02-20 17:09:24 +00:00
class DirectSourceDeviceDescription(SdrDeviceDescription):
pass