Files
dev/script/test/test36.py
2018-04-17 12:05:48 +02:00

86 lines
2.3 KiB
Python
Executable File

###################################################################################################
# Calibrating array and matrix pseudo-devices
###################################################################################################
class Waveform(ReadonlyRegisterBase, ReadonlyRegisterArray):
def doRead(self):
time.sleep(0.001)
self.val = to_array(self.calc(), 'd')
return self.val
def getSize(self):
return len(self.take(-1)) #only reads if cache is None
class Image(ReadonlyRegisterBase, ReadonlyRegisterMatrix):
def doRead(self):
time.sleep(0.001)
self.val = to_array(self.calc(), 'd')
return self.val
def getWidth(self):
return len(self.take(-1)[0])
def getHeight(self):
return len(self.take(-1))
class SinusoidWaveform(Waveform):
def calc(self):
ret = []
x = random.random()
for i in range (20):
ret.append(math.sin(x))
x = x + 0.1
return ret
class SinusoidImage(Image):
def calc(self):
(width, height) = (200, 100)
ret = []
x = random.random();
base = []
for i in range (width):
base.append( math.sin(x))
x = x + 0.05
for i in range (height):
noise = (random.random() - 0.5)/5.0
ret.append([x+noise for x in base])
return ret
add_device(SinusoidWaveform("wf1"), True)
add_device(SinusoidImage("im1"), True)
class ArrayCalibrated(ReadonlyRegisterBase, ReadonlyRegisterArray, ReadableCalibratedArray):
def doRead(self):
return wf1.read()
def getSize(self):
return wf1.size
def getCalibration(self):
return ArrayCalibration(5,1000)
class MatrixCalibrated(ReadonlyRegisterBase, ReadonlyRegisterMatrix, ReadableCalibratedMatrix):
def doRead(self):
return im1.read()
def getWidth(self):
return im1.width
def getHeight(self):
return im1.height
def getCalibration(self):
return MatrixCalibration(2,4,100,200)
add_device(ArrayCalibrated()
, True)
add_device( MatrixCalibrated()
, True)
ArrayCalibrated.polling=100
MatrixCalibrated.polling=250