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)
|
datatype.setProperty('unit', unit)
|
||||||
super(Parameter, self).__init__(**kwds)
|
super(Parameter, self).__init__(**kwds)
|
||||||
|
|
||||||
# note: auto-converts True/False to 1/0 which yield the expected
|
if self.handler and not self.poll:
|
||||||
# behaviour...
|
self.properties['poll'] = True
|
||||||
self.properties['poll'] = int(self.poll)
|
|
||||||
|
|
||||||
if self.constant is not None:
|
if self.constant is not None:
|
||||||
self.properties['readonly'] = True
|
self.properties['readonly'] = True
|
||||||
|
@ -132,10 +132,11 @@ class Poller(PollerBase):
|
|||||||
self.startup_timeout = max(self.startup_timeout, module.startup_timeout)
|
self.startup_timeout = max(self.startup_timeout, module.startup_timeout)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
handlers = set()
|
||||||
# at the beginning, queues are simple lists
|
# at the beginning, queues are simple lists
|
||||||
# later, they will be converted to heaps
|
# later, they will be converted to heaps
|
||||||
for pname, pobj in module.parameters.items():
|
for pname, pobj in module.parameters.items():
|
||||||
polltype = int(pobj.poll)
|
polltype = pobj.poll
|
||||||
rfunc = getattr(module, 'read_' + pname, None)
|
rfunc = getattr(module, 'read_' + pname, None)
|
||||||
if not polltype or not rfunc:
|
if not polltype or not rfunc:
|
||||||
continue
|
continue
|
||||||
@ -149,6 +150,13 @@ class Poller(PollerBase):
|
|||||||
polltype = REGULAR
|
polltype = REGULAR
|
||||||
else:
|
else:
|
||||||
polltype = SLOW
|
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
|
# placeholders 0 are used for due, lastdue and idx
|
||||||
self.queues[polltype].append((0, 0,
|
self.queues[polltype].append((0, 0,
|
||||||
(0, module, pobj, rfunc, factors[polltype])))
|
(0, module, pobj, rfunc, factors[polltype])))
|
||||||
|
@ -87,6 +87,7 @@ class Parameter:
|
|||||||
self.readonly = readonly
|
self.readonly = readonly
|
||||||
self.interval = interval
|
self.interval = interval
|
||||||
self.timestamp = 0
|
self.timestamp = 0
|
||||||
|
self.handler = None
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user