Adapt sim_* cfg's to current syntax

+ make 'limit' usable as type in cfg files
+ minor fixes

Change-Id: Ib94b2645c7a0d978d64d4c86c4415d4b5b0d485f
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21485
Tested-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
Enrico Faulhaber
2019-10-30 17:24:03 +01:00
parent ac873ed546
commit 5458911b67
20 changed files with 246 additions and 226 deletions

View File

@@ -286,6 +286,7 @@ class Client:
entry[0].set()
return
self.log.error("got an unexpected %s %r" % (msgtype,data[0:1]))
self.log.error(repr(data))
return
if msgtype == DESCRIPTIONREPLY:
entry = self.expected_replies.get((msgtype, ''), None)

View File

@@ -945,14 +945,14 @@ UInt64 = IntRange(0, (1 << 64) - 1)
# Goodie: Convenience Datatypes for Programming
class LimitsType(StructOf):
def __init__(self, _min=None, _max=None):
StructOf.__init__(self, min=FloatRange(_min,_max), max=FloatRange(_min, _max))
class LimitsType(TupleOf):
def __init__(self, members):
TupleOf.__init__(self, members, members)
def __call__(self, value):
limits = StructOf.__call__(self, value)
if limits['max'] < limits['min']:
raise BadValueError('Maximum Value %s must be greater than minimum value %s!' % (limits['max'], limits['min']))
limits = TupleOf.__call__(self, value)
if limits[1] < limits[0]:
raise BadValueError('Maximum Value %s must be greater than minimum value %s!' % (limits[1], limits[0]))
return limits
@@ -983,6 +983,7 @@ DATATYPES = dict(
struct =lambda members, optional=None: StructOf(optional,
**dict((n, get_datatype(t)) for n, t in list(members.items()))),
command = lambda argument=None, result=None: CommandType(get_datatype(argument), get_datatype(result)),
limit = lambda members: LimitsType(get_datatype(members)),
)

View File

@@ -153,7 +153,7 @@ class SequencerMixin:
self._seq_error = str(e)
finally:
self._seq_thread = None
self.poll(0)
self.pollParams(0)
def _seq_thread_inner(self, seq, store_init):
store = Namespace()

View File

@@ -68,12 +68,11 @@ class ModuleMeta(PropertyMeta):
for accessibles_dict in accessibles_list:
for key, obj in accessibles_dict.items():
if isinstance(obj, Override):
try:
obj = obj.apply(accessibles[key])
accessibles[key] = obj
except KeyError:
raise ProgrammingError("module %s: %s does not exist"
% (name, key))
if key not in accessibles:
raise ProgrammingError("module %s: can not apply Override on %s: no such accessible!"
% (name, key))
obj = obj.apply(accessibles[key])
accessibles[key] = obj
else:
if key in accessibles:
# for now, accept redefinitions:

View File

@@ -324,6 +324,7 @@ class Readable(Module):
try:
rfunc() # pylint: disable = not-callable
except Exception: # really all!
# XXX: Error-handling: send error_update !
pass
return False
@@ -385,6 +386,7 @@ class Drivable(Writable):
try:
rfunc() # pylint: disable = not-callable
except Exception: # really all!
# XXX: Error-handling: send error_update !
pass
return fastpoll

View File

@@ -56,7 +56,7 @@ class SimBase:
return newval
setattr(self, 'write_' + k, writer)
def init_module(self):
def initModule(self):
self._sim_thread = mkthread(self._sim)
def _sim(self):
@@ -120,6 +120,10 @@ class SimDrivable(SimBase, Drivable):
if speed == 0:
self._value = self.target
speed *= 0.3
try:
self.pollParams(0)
except Exception:
pass
while self._value != self.target:
if self._value < self.target - speed:
@@ -129,6 +133,10 @@ class SimDrivable(SimBase, Drivable):
else:
self._value = self.target
sleep(0.3)
try:
self.pollParams(0)
except Exception:
pass
self.status = self.Status.IDLE, ''
def _hw_wait(self):