--- nand.py- +++ nand.py @@ -1,6 +1,8 @@ #!/usr/bin/env python import sys +import time +import select class Obj: def __init__(self, parent, name, latency=None): @@ -127,10 +129,29 @@ return next( ( True for a in self.que if a == t ), False ) def main_loop(self): - while len(self.que) > 0: - (tm, f, args) = self.que.pop(0) - self.now = tm - f(*args) + self.run = True + while self.run: + cmd_exec( sys.stdin ) + if self.que: + (tm, f, args) = self.que.pop(0) + self.now = tm + f(*args) + else: + time.sleep(0.5) + + def quit(self): + dbgout('quit') + self.run = False + +def cmd_exec(f): + while select.select( [f], [], [], 0 )[0]: + s = f.readline() + if not s: + break + s = s.strip() + if s: + dbgout( 'cmd_exec "{}"'.format(s) ) + exec s def str_v(v): return { True: 'H', False: 'L', None: 'Hi-Z' }.get(v, '?') @@ -163,36 +184,6 @@ sched = Sched() o = Obj(None, 'o') - Foo(o) - - slow = Obj(o, 'slow') - Foo(slow, 10) - - slow_12 = Obj(o, 'slow_12') - Foo(slow_12, 12) - - o.foo.out.conn = o.slow.foo.inp - o.slow.foo.out.conn = o.slow_12.foo.inp - sched.enque( 200, o.foo.out.set, ('H',) ) - - NAND(o) - sched.enque( 300, o.nand.inp_a.set, ('L',) ) - sched.enque( 300, o.nand.inp_b.set, ('L',) ) - sched.enque( 320, o.nand.inp_a.set, ('H',) ) - sched.enque( 340, o.nand.inp_b.set, ('H',) ) - sched.enque( 360, o.nand.inp_a.set, ('L',) ) - - test1 = Obj(o, 'test1') - NAND(test1) - Joint(test1) - Lamp(test1) - o.test1.nand.out.conn = o.test1.jt.new_pin() - o.test1.jt.new_pin().conn = o.test1.nand.inp_a - o.test1.jt.new_pin().conn = o.test1.lamp.inp - - sched.enque( 400, o.test1.nand.inp_b.set, ('H',) ) - sched.enque( 500, o.test1.nand.inp_b.set, ('L',) ) - sched.enque( (3,0), o.test1.lamp.inp.set, ('L',) ) sched.main_loop()