move the pump mechanism, allowing the old output code to be removed

This commit is contained in:
Jakob Ketterl
2021-09-20 15:09:26 +02:00
parent 4b36aca6fc
commit 9efe41a2b1
6 changed files with 29 additions and 81 deletions

View File

@ -4,7 +4,6 @@ from owrx.source import SdrSourceEventClient, SdrSourceState, SdrClientClass
from owrx.property import PropertyStack, PropertyLayer, PropertyValidator
from owrx.property.validators import OrValidator, RegexValidator, BoolValidator
from owrx.modes import Modes
from csdr.output import Output
from csdr.chain import Chain
from csdr.chain.demodulator import BaseDemodulatorChain, FixedIfSampleRateChain, FixedAudioRateChain, HdAudio, SecondaryDemodulator, DialFrequencyReceiver
from csdr.chain.selector import Selector
@ -287,7 +286,7 @@ class ModulationValidator(OrValidator):
super().__init__(BoolValidator(), RegexValidator(re.compile("^[a-z0-9]+$")))
class DspManager(Output, SdrSourceEventClient):
class DspManager(SdrSourceEventClient):
def __init__(self, handler, sdrSource):
self.handler = handler
self.sdrSource = sdrSource
@ -540,7 +539,7 @@ class DspManager(Output, SdrSourceEventClient):
reader = buffer.getReader()
self.readers[t] = reader
threading.Thread(target=self.pump(reader.read, write), name="dsp_pump_{}".format(t)).start()
threading.Thread(target=self.chain.pump(reader.read, write), name="dsp_pump_{}".format(t)).start()
def _unpickle(self, callback):
def unpickler(data):
@ -554,8 +553,9 @@ class DspManager(Output, SdrSourceEventClient):
return unpickler
def stop(self):
self.chain.stop()
self.chain = None
if self.chain:
self.chain.stop()
self.chain = None
for reader in self.readers.values():
reader.stop()
self.readers = {}

View File

@ -1,9 +1,9 @@
from owrx.config.core import CoreConfig
from owrx.config import Config
from csdr.chain.fft import FftChain
import threading
from owrx.source import SdrSourceEventClient, SdrSourceState, SdrClientClass
from owrx.property import PropertyStack
from pycsdr.modules import Buffer
import threading
import logging
@ -27,6 +27,7 @@ class SpectrumThread(SdrSourceEventClient):
)
self.dsp = None
self.reader = None
self.subscriptions = []
@ -53,7 +54,10 @@ class SpectrumThread(SdrSourceEventClient):
self.props.wireProperty("fft_voverlap_factor", self.dsp.setVOverlapFactor),
]
threading.Thread(target=self.dsp.pump(self.sdrSource.writeSpectrumData)).start()
buffer = Buffer(self.dsp.getOutputFormat())
self.dsp.setWriter(buffer)
self.reader = buffer.getReader()
threading.Thread(target=self.dsp.pump(self.reader.read, self.sdrSource.writeSpectrumData)).start()
if self.sdrSource.isAvailable():
self.dsp.setReader(self.sdrSource.getBuffer().getReader())
@ -63,6 +67,8 @@ class SpectrumThread(SdrSourceEventClient):
return
self.dsp.stop()
self.dsp = None
self.reader.stop()
self.reader = None
self.sdrSource.removeClient(self)
while self.subscriptions:
self.subscriptions.pop().cancel()