parameters with a handler are polled by default
parameters with a common commandhandler need only one poller item Change-Id: Ie2e20cf7bcebc67ca96d58455323f01f528b25ab Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21951 Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
dda8428144
commit
94a539da90
@ -139,9 +139,8 @@ class Parameter(Accessible):
|
||||
datatype.setProperty('unit', unit)
|
||||
super(Parameter, self).__init__(**kwds)
|
||||
|
||||
# note: auto-converts True/False to 1/0 which yield the expected
|
||||
# behaviour...
|
||||
self.properties['poll'] = int(self.poll)
|
||||
if self.handler and not self.poll:
|
||||
self.properties['poll'] = True
|
||||
|
||||
if self.constant is not None:
|
||||
self.properties['readonly'] = True
|
||||
|
@ -132,10 +132,11 @@ class Poller(PollerBase):
|
||||
self.startup_timeout = max(self.startup_timeout, module.startup_timeout)
|
||||
except AttributeError:
|
||||
pass
|
||||
handlers = set()
|
||||
# at the beginning, queues are simple lists
|
||||
# later, they will be converted to heaps
|
||||
for pname, pobj in module.parameters.items():
|
||||
polltype = int(pobj.poll)
|
||||
polltype = pobj.poll
|
||||
rfunc = getattr(module, 'read_' + pname, None)
|
||||
if not polltype or not rfunc:
|
||||
continue
|
||||
@ -149,6 +150,13 @@ class Poller(PollerBase):
|
||||
polltype = REGULAR
|
||||
else:
|
||||
polltype = SLOW
|
||||
if not polltype in factors:
|
||||
raise ProgrammingError("unknown poll type %r for parameter '%s'"
|
||||
% (polltype, pname))
|
||||
if pobj.handler:
|
||||
if pobj.handler in handlers:
|
||||
continue # only one poller per handler
|
||||
handlers.add(pobj.handler)
|
||||
# placeholders 0 are used for due, lastdue and idx
|
||||
self.queues[polltype].append((0, 0,
|
||||
(0, module, pobj, rfunc, factors[polltype])))
|
||||
|
@ -87,6 +87,7 @@ class Parameter:
|
||||
self.readonly = readonly
|
||||
self.interval = interval
|
||||
self.timestamp = 0
|
||||
self.handler = None
|
||||
self.reset()
|
||||
|
||||
def reset(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user