merge with wip branch

This commit is contained in:
l_samenv
2023-05-17 17:00:06 +02:00
parent 439c9d34c1
commit e1b30bf37e
56 changed files with 6679 additions and 638 deletions

View File

@ -65,19 +65,22 @@ class ChannelSwitcher(Drivable):
FloatRange(0, None), readonly=False, default=2)
fast_poll = 0.1
_channels = None # dict <channel no> of <module object>
channels = None # dict <channel no> of <module object>
_start_measure = 0
_last_measure = 0
_start_switch = 0
_time_tol = 0.5
_first_channel = None
def earlyInit(self):
super().earlyInit()
self._channels = {}
self.channels = {}
def register_channel(self, mod):
"""register module"""
self._channels[mod.channel] = mod
if not self.channels:
self._first_channel = mod
self.channels[mod.channel] = mod
def set_active_channel(self, chan):
"""tell the HW the active channel
@ -91,7 +94,7 @@ class ChannelSwitcher(Drivable):
def next_channel(self, channelno):
next_channel = channelno
first_channel = None
for ch, mod in self._channels.items():
for ch, mod in self.channels.items():
if mod.enabled:
if first_channel is None:
first_channel = ch
@ -107,7 +110,7 @@ class ChannelSwitcher(Drivable):
def read_status(self):
now = time.monotonic()
if self.status[0] == 'BUSY':
chan = self._channels[self.target]
chan = self.channels[self.target]
if chan.is_switching(now, self._start_switch, self.switch_delay):
return self.status
self.setFastPoll(False)
@ -119,7 +122,7 @@ class ChannelSwitcher(Drivable):
if self.measure_delay > self._time_tol:
return self.status
else:
chan = self._channels[self.value]
chan = self.channels.get(self.value, self._first_channel)
self.read_value() # this might modify autoscan or deadline!
if chan.enabled:
if self.target != self.value: # may happen after startup
@ -144,11 +147,11 @@ class ChannelSwitcher(Drivable):
return value
def write_target(self, channel):
if channel not in self._channels:
if channel not in self.channels:
raise ValueError(f'{channel!r} is no valid channel')
if channel == self.target and self._channels[channel].enabled:
if channel == self.target and self.channels[channel].enabled:
return channel
chan = self._channels[channel]
chan = self.channels[channel]
chan.enabled = True
self.set_active_channel(chan)
self._start_switch = time.monotonic()