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:
@@ -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)
|
||||
|
||||
@@ -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)),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user