simplify test2

This commit is contained in:
Michael Davidsaver
2013-03-31 17:35:59 -04:00
parent 0f4e539fb0
commit 171ed49832
2 changed files with 25 additions and 38 deletions

View File

@ -8,11 +8,13 @@ record(longin, "$(P)li:cnt") {
record(longin, "$(P)val:a") {
field(DTYP, "Python Device")
field(INP , "@test2 AAAA")
field(SCAN, "I/O Intr")
}
record(longin, "$(P)val:b") {
field(DTYP, "Python Device")
field(INP , "@test2 AAAA")
field(SCAN, "I/O Intr")
}
record(waveform, "$(P)wf") {

View File

@ -2,64 +2,49 @@
import weakref
import threading, time
from devsup.hooks import addHook
from devsup.db import IOScanListThread
from devsup.util import StoppableThread
insts = {}
def done(obj):
print obj,'Expires'
class Driver(threading.Thread):
class Driver(StoppableThread):
def __init__(self, name):
super(Driver,self).__init__()
self.name = name
self._lock = threading.Lock()
self._recs = set()
self._run = True
self._stop = threading.Event()
self.scan = IOScanListThread()
self.value = 0
addHook('AfterIocRunning', self.start)
addHook('AtIocExit', self.stop)
def stop(self):
print 'Stopping driver',self.name
with self._lock:
self._run = False
self._stop.wait()
print 'Finished with',self.value
def addrec(self, rec):
with self._lock:
self._recs.add(rec)
def delrec(self, rec):
with self._lock:
self._recs.remove(rec)
addHook('AtIocExit', self.join)
def run(self):
try:
while self._run:
while self.shouldRun():
time.sleep(1.0)
with self._lock:
val = self.value
self.value += 1
for R in self._recs:
R.record.scan(sync=True, reason=val)
self.scan.interrupt(reason=val)
finally:
self._stop.set()
self.finish()
def addDrv(name):
print 'Create driver',name
insts[name] = Driver(name)
class Device(object):
def __init__(self, rec, drv):
self.driver, self.record = drv, rec
self.driver.addrec(self)
def detach(self, rec):
self.driver.delrec(self)
def process(self, rec, data):
if data is not None:
self.VAL = data
def __init__(self, rec, args):
self.driver, self.record = insts[args], rec
self.allowScan = self.driver.scan.add
def build(rec, args):
drv = insts[args]
return Device(rec, drv)
def detach(self, rec):
print 'detach',rec
def process(self, rec, data):
print 'test2 Update',rec,data
if data is not None:
rec.VAL = data
build = Device