From d4c3b1d9bf981f022ef8bb5a4849f1b455b1038a Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sat, 23 Apr 2011 18:36:08 +0200 Subject: [PATCH] implement fake device --- software/device.py | 93 ++++++++++++++++++++++----------- software/modules/ModuleDebug.py | 90 ++++++------------------------- 2 files changed, 78 insertions(+), 105 deletions(-) diff --git a/software/device.py b/software/device.py index a0bffb9..e6a84d3 100644 --- a/software/device.py +++ b/software/device.py @@ -1,5 +1,3 @@ -import usb - class Device: VENDORID = 0x1fc9 @@ -7,55 +5,88 @@ class Device: INSIZE = 64 OUTSIZE = 64 - def __init__(self): - usbdev = usb.core.find(idVendor = self.VENDORID, idProduct = self.PRODUCTID) - if usbdev == None: - raise Exception('EduBRM device not found') - try: - usbdev.detach_kernel_driver(0) - except: - pass - usbdev.set_configuration() - self.epo = usb.util.find_descriptor(usbdev.get_interface_altsetting(), - custom_match = lambda e: \ - usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT) - self.epi = usb.util.find_descriptor(usbdev.get_interface_altsetting(), - custom_match = lambda e: \ - usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN) + def __init__(self, fake = False): + self.fake = fake + if not fake: + import usb + usbdev = usb.core.find(idVendor = self.VENDORID, idProduct = self.PRODUCTID) + if usbdev == None: + raise Exception('EduBRM device not found') + try: + usbdev.detach_kernel_driver(0) + except: + pass + usbdev.set_configuration() + self.epo = usb.util.find_descriptor(usbdev.get_interface_altsetting(), + custom_match = lambda e: \ + usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT) + self.epi = usb.util.find_descriptor(usbdev.get_interface_altsetting(), + custom_match = lambda e: \ + usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN) + else: + print 'device init' # sets pwm (which=1,2), (duty=16bit) def pwm(self, which, duty): - duty = 65535 - duty - self.epo.write('p' + chr(which) + chr(duty & 0xff) + chr(duty >> 8)) + if self.fake: + print 'pwm', which, duty + else: + duty = 65535 - duty + self.epo.write('p' + chr(which) + chr(duty & 0xff) + chr(duty >> 8)) # sets ddswave (wave=square,sine,saw1,saw2) def ddswave(self, wavetype): - self.epo.write('d' + chr(wavetype)) + if self.fake: + print 'dds wave', wavetype + else: + self.epo.write('d' + chr(wavetype)) # sets ddsfreq (freq=32bit) def ddsfreq(self, freq): - self.epo.write('D' + chr(freq & 0xff) + chr((freq >> 8) & 0xff) + chr((freq >> 16) & 0xff) + chr(freq >> 24)) + if self.fake: + print 'dds freq', freq + else: + self.epo.write('D' + chr(freq & 0xff) + chr((freq >> 8) & 0xff) + chr((freq >> 16) & 0xff) + chr(freq >> 24)) # set opamp (which=1,2), (chan=1..6), (gain=1, 2, 4, 5, 8, 10, 16, 32) def opamp(self, which, chan, gain): - self.epo.write('m' + chr(which) + chr(chan) + chr(gain)) + if self.fake: + print 'opamp', which, chan, gain + else: + self.epo.write('m' + chr(which) + chr(chan) + chr(gain)) # set all switches (states=6bit) def switches(self, states): - self.epo.write('s' + chr(states)) + if self.fake: + print 'switches', states + else: + self.epo.write('s' + chr(states)) # set pins state (states=3bit) (1 = input, 0 = output) def setpins(self, states): - self.epo.write('P' + chr(states)) + if self.fake: + print 'setpins', states + else: + self.epo.write('P' + chr(states)) # set output (which=1,2,3), (state=0,1) def setout(self, which, state): - self.epo.write('o' + chr(which<<1 + state)) + if self.fake: + print 'setout', which, state + else: + self.epo.write('o' + chr(which<<1 + state)) + # 7x AD (16 bits) + 3 x I def read(self): - # 7x AD (16 bits) + 3 x I - i = self.epi.read(self.INSIZE) - return (i[0] + i[1]<<8, # AD0 - i[2] + i[3]<<8, i[4] + i[5]<<8, i[6] + i[7]<<8, # AD1 .. AD3 - i[9] + i[9]<<8, i[10] + i[11]<<8, i[12] + i[13]<<8, # AD4 .. AD6 - i[14] & 0x01, (i[14] & 0x02) >> 1, (i[14] & 0x04) >> 2) # IO1 .. IO3 + if self.fake: + from random import randint + return (randint(0,65535), # AD0 + randint(0,65535), randint(0,65535), randint(0,65535), # AD1 .. AD3 + randint(0,65535), randint(0,65535), randint(0,65535), # AD4 .. AD6 + randint(0,7)) # IO1 .. IO3 + else: + i = self.epi.read(self.INSIZE) + return (i[0] + i[1]<<8, # AD0 + i[2] + i[3]<<8, i[4] + i[5]<<8, i[6] + i[7]<<8, # AD1 .. AD3 + i[9] + i[9]<<8, i[10] + i[11]<<8, i[12] + i[13]<<8, # AD4 .. AD6 + i[14] & 0x01, (i[14] & 0x02) >> 1, (i[14] & 0x04) >> 2) # IO1 .. IO3 diff --git a/software/modules/ModuleDebug.py b/software/modules/ModuleDebug.py index 4a8a0e1..58bdf29 100644 --- a/software/modules/ModuleDebug.py +++ b/software/modules/ModuleDebug.py @@ -25,107 +25,55 @@ class ModuleDebugWidget(QWidget): QObject.connect(self.ui.pushPin2, SIGNAL("clicked(bool)"), self.on_pins_changed) QObject.connect(self.ui.pushPin3, SIGNAL("clicked(bool)"), self.on_pins_changed) - self.dev = Device() - print self.dev + self.dev = Device(True) @pyqtSlot(int) def on_dialPWM1_valueChanged(self, val): self.dev.pwm(1, val) - print 'pwm1:', val @pyqtSlot(int) def on_dialPWM2_valueChanged(self, val): self.dev.pwm(2, val) - print 'pwm2:', val @pyqtSlot(int) def on_dialAMP1_valueChanged(self, val): -# self.dev.opamp(1, val) - print 'amp1:', val + self.dev.opamp(1, val) @pyqtSlot(int) def on_dialAMP2_valueChanged(self, val): -# self.dev.opamp(2, val) - print 'amp2:', val - - @pyqtSlot(int) - def on_checkOut0_stateChanged(self, state): -# state and self.dev.setout(1<<0) or self.dev.clrout(1<<0) - print 'out0:', state and '1' or '0' - - @pyqtSlot(int) - def on_checkOut1_stateChanged(self, state): -# state and self.dev.setout(1<<1) or self.dev.clrout(1<<1) - print 'out1:', state and '1' or '0' - - @pyqtSlot(int) - def on_checkOut2_stateChanged(self, state): -# state and self.dev.setout(1<<2) or self.dev.clrout(1<<2) - print 'out2:', state and '1' or '0' - - @pyqtSlot(int) - def on_checkOut3_stateChanged(self, state): -# state and self.dev.setout(1<<3) or self.dev.clrout(1<<3) - print 'out3:', state and '1' or '0' - - @pyqtSlot(int) - def on_checkOut4_stateChanged(self, state): -# state and self.dev.setout(1<<4) or self.dev.clrout(1<<4) - print 'out4:', state and '1' or '0' - - @pyqtSlot(int) - def on_checkOut5_stateChanged(self, state): -# state and self.dev.setout(1<<5) or self.dev.clrout(1<<5) - print 'out5:', state and '1' or '0' - - @pyqtSlot(int) - def on_checkOut6_stateChanged(self, state): -# state and self.dev.setout(1<<6) or self.dev.clrout(1<<6) - print 'out6:', state and '1' or '0' - - @pyqtSlot(int) - def on_checkOut7_stateChanged(self, state): -# state and self.dev.setout(1<<7) or self.dev.clrout(1<<7) - print 'out7:', state and '1' or '0' + self.dev.opamp(2, val) @pyqtSlot(bool) def on_radioSine_clicked(self, checked): -# self.dev.ddswave(0) - print 'dds: sine' + self.dev.ddswave(0) @pyqtSlot(bool) def on_radioSquare_clicked(self, checked): -# self.dev.ddswave(1) - print 'dds: square' + self.dev.ddswave(1) @pyqtSlot(bool) def on_radioSaw_clicked(self, checked): -# self.dev.ddswave(2) - print 'dds: saw' + self.dev.ddswave(2) @pyqtSlot(bool) def on_radioInvSaw_clicked(self, checked): -# self.dev.ddswave(3) - print 'dds: invsaw' + self.dev.ddswave(3) @pyqtSlot(int) def on_dialDDS_valueChanged(self, val): -# self.dev.ddsfreq(val) - print 'dds:', val + self.dev.ddsfreq(val) @pyqtSlot() def on_comboAMP1_changed(self): c = self.ui.comboAMP1c.currentIndex() + 1 g = (1,2,4,5,8,10,16,32)[self.ui.comboAMP1g.currentIndex()] -# self.dev.opamp(1, c, g) - print 'amp1:', c, g + self.dev.opamp(1, c, g) @pyqtSlot() def on_comboAMP2_changed(self): c = self.ui.comboAMP2c.currentIndex() + 1 g = (1,2,4,5,8,10,16,32)[self.ui.comboAMP2g.currentIndex()] -# self.dev.opamp(2, c, g) - print 'amp2:', c, g + self.dev.opamp(2, c, g) @pyqtSlot() def on_switches_changed(self): @@ -135,8 +83,7 @@ class ModuleDebugWidget(QWidget): self.ui.pushSwitch4.isChecked() and 1 or 0, self.ui.pushSwitch5.isChecked() and 1 or 0, self.ui.pushSwitch6.isChecked() and 1 or 0) -# self.dev.switches(s[0] + s[1]<<1 + s[2]<<2 + s[3]<<3 + s[4]<<4 + s[5]<<5) - print 'switches:', s + self.dev.switches(s[0] + (s[1]<<1) + (s[2]<<2) + (s[3]<<3) + (s[4]<<4) + (s[5]<<5)) @pyqtSlot() def on_pins_changed(self): @@ -146,28 +93,23 @@ class ModuleDebugWidget(QWidget): self.ui.pushOut1.setEnabled(not s[0]) self.ui.pushOut2.setEnabled(not s[1]) self.ui.pushOut3.setEnabled(not s[2]) -# self.dev.setpins(s[0] + s[1]<<1 + s[2]<<2) - print 'pins:', s + self.dev.setpins(s[0] + (s[1]<<1) + (s[2]<<2)) @pyqtSlot(bool) def on_pushOut1_clicked(self, checked): -# self.dev.setout(1, checked and 1 or 0) - print 'out1:', checked and 1 or 0 + self.dev.setout(1, checked and 1 or 0) @pyqtSlot(bool) def on_pushOut2_clicked(self, checked): -# self.dev.setout(2, checked and 1 or 0) - print 'out2:', checked and 1 or 0 + self.dev.setout(2, checked and 1 or 0) @pyqtSlot(bool) def on_pushOut3_clicked(self, checked): -# self.dev.setout(3, checked and 1 or 0) - print 'out3:', checked and 1 or 0 + self.dev.setout(3, checked and 1 or 0) @pyqtSlot(int) def on_dialInputFreq_valueChanged(self, val): -# TODO: change sampling rate to (val) freq - print 'inputfreq:', val + print self.dev.read() class ModuleDebug():