simplify test2
This commit is contained in:
@ -8,11 +8,13 @@ record(longin, "$(P)li:cnt") {
|
|||||||
record(longin, "$(P)val:a") {
|
record(longin, "$(P)val:a") {
|
||||||
field(DTYP, "Python Device")
|
field(DTYP, "Python Device")
|
||||||
field(INP , "@test2 AAAA")
|
field(INP , "@test2 AAAA")
|
||||||
|
field(SCAN, "I/O Intr")
|
||||||
}
|
}
|
||||||
|
|
||||||
record(longin, "$(P)val:b") {
|
record(longin, "$(P)val:b") {
|
||||||
field(DTYP, "Python Device")
|
field(DTYP, "Python Device")
|
||||||
field(INP , "@test2 AAAA")
|
field(INP , "@test2 AAAA")
|
||||||
|
field(SCAN, "I/O Intr")
|
||||||
}
|
}
|
||||||
|
|
||||||
record(waveform, "$(P)wf") {
|
record(waveform, "$(P)wf") {
|
||||||
|
@ -2,64 +2,49 @@
|
|||||||
import weakref
|
import weakref
|
||||||
import threading, time
|
import threading, time
|
||||||
from devsup.hooks import addHook
|
from devsup.hooks import addHook
|
||||||
|
from devsup.db import IOScanListThread
|
||||||
|
from devsup.util import StoppableThread
|
||||||
|
|
||||||
insts = {}
|
insts = {}
|
||||||
|
|
||||||
def done(obj):
|
def done(obj):
|
||||||
print obj,'Expires'
|
print obj,'Expires'
|
||||||
|
|
||||||
class Driver(threading.Thread):
|
class Driver(StoppableThread):
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
super(Driver,self).__init__()
|
super(Driver,self).__init__()
|
||||||
self.name = name
|
self.name = name
|
||||||
self._lock = threading.Lock()
|
self.scan = IOScanListThread()
|
||||||
self._recs = set()
|
|
||||||
self._run = True
|
|
||||||
self._stop = threading.Event()
|
|
||||||
self.value = 0
|
self.value = 0
|
||||||
addHook('AfterIocRunning', self.start)
|
addHook('AfterIocRunning', self.start)
|
||||||
addHook('AtIocExit', self.stop)
|
addHook('AtIocExit', self.join)
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
try:
|
try:
|
||||||
while self._run:
|
while self.shouldRun():
|
||||||
time.sleep(1.0)
|
time.sleep(1.0)
|
||||||
with self._lock:
|
|
||||||
val = self.value
|
val = self.value
|
||||||
self.value += 1
|
self.value += 1
|
||||||
for R in self._recs:
|
self.scan.interrupt(reason=val)
|
||||||
R.record.scan(sync=True, reason=val)
|
|
||||||
finally:
|
finally:
|
||||||
self._stop.set()
|
self.finish()
|
||||||
|
|
||||||
def addDrv(name):
|
def addDrv(name):
|
||||||
print 'Create driver',name
|
print 'Create driver',name
|
||||||
insts[name] = Driver(name)
|
insts[name] = Driver(name)
|
||||||
|
|
||||||
class Device(object):
|
class Device(object):
|
||||||
def __init__(self, rec, drv):
|
def __init__(self, rec, args):
|
||||||
self.driver, self.record = drv, rec
|
self.driver, self.record = insts[args], rec
|
||||||
self.driver.addrec(self)
|
self.allowScan = self.driver.scan.add
|
||||||
def detach(self, rec):
|
|
||||||
self.driver.delrec(self)
|
|
||||||
def process(self, rec, data):
|
|
||||||
if data is not None:
|
|
||||||
self.VAL = data
|
|
||||||
|
|
||||||
def build(rec, args):
|
def detach(self, rec):
|
||||||
drv = insts[args]
|
print 'detach',rec
|
||||||
return Device(rec, drv)
|
|
||||||
|
def process(self, rec, data):
|
||||||
|
print 'test2 Update',rec,data
|
||||||
|
if data is not None:
|
||||||
|
rec.VAL = data
|
||||||
|
|
||||||
|
build = Device
|
||||||
|
Reference in New Issue
Block a user