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:
zolliker 2019-12-03 15:24:01 +01:00
parent dda8428144
commit 94a539da90
3 changed files with 12 additions and 4 deletions

View File

@ -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

View File

@ -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])))

View File

@ -87,6 +87,7 @@ class Parameter:
self.readonly = readonly
self.interval = interval
self.timestamp = 0
self.handler = None
self.reset()
def reset(self):