From a4c1219a7557aa23bea4836913f4049a6d02c560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Sun, 5 Jun 2011 23:35:58 +0200 Subject: k8055qt.py: work in progress --- pyk8055/CMakeLists.txt | 1 + pyk8055/k8055qt.py | 417 ++++++++++++++++++++++++------------------------- 2 files changed, 205 insertions(+), 213 deletions(-) diff --git a/pyk8055/CMakeLists.txt b/pyk8055/CMakeLists.txt index 504a0bc..db2e6b9 100644 --- a/pyk8055/CMakeLists.txt +++ b/pyk8055/CMakeLists.txt @@ -12,3 +12,4 @@ SET_SOURCE_FILES_PROPERTIES(libk8055.i PROPERTIES SWIG_FLAGS "-includeall") SWIG_ADD_MODULE(pyk8055 python libk8055.i ${CMAKE_SOURCE_DIR}/libk8055/libk8055.c) SWIG_LINK_LIBRARIES(pyk8055 ${PYTHON_LIBRARIES} ${LIBUSB_LDFLAGS} k8055-${VERSION}) +#pyuic frmk8055qt.ui -o frmk8055qt.py diff --git a/pyk8055/k8055qt.py b/pyk8055/k8055qt.py index 49288f6..fe0e853 100644 --- a/pyk8055/k8055qt.py +++ b/pyk8055/k8055qt.py @@ -6,227 +6,218 @@ # Copyright (C) 2007 by Pjetur G. Hjaltason # -import sys -from qt import * -#from qwt import * +import sys, time, string +from PyQt4.Qt import * +#from frmk8055qt import * +from pyk8055 import k8055 -import time, string -from pyk8055 import * -from frmk8055qt import * class QTK8055(K8055QT): - def __init__(self): - K8055QT.__init__(self) - - # Not much sense in making a fancy menu yet - # - #puProg = QPopupMenu(self) - #puProg.insertItem("Quit", Kapp.quit) - - #puHelp = QPopupMenu(self) - #puHelp.insertItem("About", self.about) - - #self.menu = QMenuBar(self) - #self.menu.insertItem("Program", puProg) - #self.menu.insertItem("Help", puHelp) - - # enumerate devices - BMask = SearchDevices() - if not BMask: - print "No K8055 devices found" - exit - - # Enable those present - self.CardButton1.setEnabled((BMask & 0x01) > 0) - self.CardButton2.setEnabled((BMask & 0x02) > 0) - self.CardButton3.setEnabled((BMask & 0x04) > 0) - self.CardButton4.setEnabled((BMask & 0x08) > 0) - - # set the first one found as suggestion - if (BMask & 0x01) > 0: - self.card = 0 - self.CardButton1.setChecked(1) - elif (BMask & 0x02) > 0: - self.card = 1 - self.CardButton2.setChecked(1) - elif (BMask & 0x04) > 0: - self.card = 2 - self.CardButton3.setChecked(1) - elif (BMask & 0x08) > 0: - self.card = 3 - self.CardButton4.setChecked(1) - - self.time = QTime.currentTime() # get current time - internalTimer = QTimer( self ) # create internal timer - self.connect( internalTimer, SIGNAL("timeout()"), self.timeout ) - internalTimer.start( 100 ) # emit signal every 1/10 second - - self.timeout() - - def AnalogTest(self): - try: - for step in range(0,255,10): - self.BarAD1.setValue(step) - self.BarAD2.setValue(step) - time.sleep(0.1) - # set analog output channel 1 to 200/255*5v = 3.9V - for step in range(255,0,10): - self.BarAD1.setValue(step) - self.BarAD2.setValue(step) - time.sleep(0.1) - - # read both analog inputs - # note: this returns a list - #res = self.k.ReadAllAnalog() - #sres = res[1:] - - # There should be more interesting information in the messagebox ;-/ - - QMessageBox.information( self,'Information', "AllOK","Ok") - except: - pass - - def DigitalTest(self): - try: - # Create a rotating display of digital outputs - # while waiting for keypress on digital input 1 - # (longer than .2sec :) Loop at most 3 times - Input1High = False - for i in range(1,3): - d = 1 - self.k.WriteAllDigital(1) - while Input1High == False and d < 128: - Input1High = (self.k.ReadDigitalChannel(1) > 0) - if Input1High: break - time.sleep(0.2) # wait .2 sec - d *=2 # and continue rotating digital outputs - #if d > 128: d=1; - self.k.WriteAllDigital(d) - if Input1High: break - - res = "Digital input 1=" + str(self.k.ReadDigitalChannel(1)) + "
" - # read the counter on input 1 - res+= "Counter(1)=" + str(self.k.ReadCounter(1)) + "
" - # read the counter on input 2 - res+= "Counter(2)=" + str(self.k.ReadCounter(2)) - - # set even bits on digital outputs - self.k.WriteAllDigital(170) - time.sleep(1) - # set odd bits on digital outputs - self.k.WriteAllDigital(85) - time.sleep(1) - # Clear all digital outputs - self.k.WriteAllDigital(0) - - # There should be more interesting information in the messagebox ;-/ - - QMessageBox.information( self,'DigitalTest', res,"Ok") - except: - QMessageBox.warning( self,'DigitalTest', "Not OK","Ok") - pass - - def EnableAll(self): - self.OutputBox1.setEnabled(1) - self.OutputBox2.setEnabled(1) - self.OutputBox3.setEnabled(1) - self.OutputBox4.setEnabled(1) - self.OutputBox5.setEnabled(1) - self.OutputBox6.setEnabled(1) - self.OutputBox7.setEnabled(1) - self.OutputBox8.setEnabled(1) - self.SetAllDigitalButton.setEnabled(1) - self.ClearAllDigitalButton.setEnabled(1) - self.SetAllAnalogButton.setEnabled(1) - self.ClearAllAnalogButton.setEnabled(1) - self.comboCounter1.setEnabled(1) - self.comboCounter2.setEnabled(1) - self.ClearCounter1.setEnabled(1) - self.ClearCounter2.setEnabled(1) - self.TestDigitalButton.setEnabled(1) - self.TestAnalogButton.setEnabled(1) - self.BarAD1.setEnabled(1) - self.BarAD2.setEnabled(1) - self.BarDA1.setEnabled(1) - self.BarDA2.setEnabled(1) - - def DisableAll(self): - self.OutputBox1.setEnabled(0) - self.OutputBox2.setEnabled(0) - self.OutputBox3.setEnabled(0) - self.OutputBox4.setEnabled(0) - self.OutputBox5.setEnabled(0) - self.OutputBox6.setEnabled(0) - self.OutputBox7.setEnabled(0) - self.OutputBox8.setEnabled(0) - self.SetAllDigitalButton.setEnabled(0) - self.ClearAllDigitalButton.setEnabled(0) - self.SetAllAnalogButton.setEnabled(0) - self.ClearAllAnalogButton.setEnabled(0) - self.comboCounter1.setEnabled(0) - self.comboCounter2.setEnabled(0) - self.ClearCounter1.setEnabled(0) - self.ClearCounter2.setEnabled(0) - self.TestDigitalButton.setEnabled(0) - self.TestAnalogButton.setEnabled(0) - self.BarAD1.setEnabled(0) - self.BarAD2.setEnabled(0) - self.BarDA1.setEnabled(0) - self.BarDA2.setEnabled(0) + def __init__(self): + K8055QT.__init__(self) + + # Not much sense in making a fancy menu yet + # + #puProg = QPopupMenu(self) + #puProg.insertItem("Quit", Kapp.quit) + + #puHelp = QPopupMenu(self) + #puHelp.insertItem("About", self.about) + + #self.menu = QMenuBar(self) + #self.menu.insertItem("Program", puProg) + #self.menu.insertItem("Help", puHelp) + + # enumerate devices + BMask = SearchDevices() + if not BMask: + print "No K8055 devices found" + exit + + # Enable those present + self.CardButton1.setEnabled((BMask & 0x01) > 0) + self.CardButton2.setEnabled((BMask & 0x02) > 0) + self.CardButton3.setEnabled((BMask & 0x04) > 0) + self.CardButton4.setEnabled((BMask & 0x08) > 0) + + # set the first one found as suggestion + if (BMask & 0x01) > 0: + self.card = 0 + self.CardButton1.setChecked(1) + elif (BMask & 0x02) > 0: + self.card = 1 + self.CardButton2.setChecked(1) + elif (BMask & 0x04) > 0: + self.card = 2 + self.CardButton3.setChecked(1) + elif (BMask & 0x08) > 0: + self.card = 3 + self.CardButton4.setChecked(1) + self.time = QTime.currentTime() # get current time + internalTimer = QTimer( self ) # create internal timer + self.connect( internalTimer, SIGNAL("timeout()"), self.timeout ) + internalTimer.start( 100 ) # emit signal every 1/10 second + + self.timeout() + + def AnalogTest(self): + try: + for step in range(0,255,10): + self.BarAD1.setValue(step) + self.BarAD2.setValue(step) + time.sleep(0.1) + # set analog output channel 1 to 200/255*5v = 3.9V + for step in range(255,0,10): + self.BarAD1.setValue(step) + self.BarAD2.setValue(step) + time.sleep(0.1) + # read both analog inputs + # note: this returns a list + #res = self.k.ReadAllAnalog() + #sres = res[1:] + # There should be more interesting information in the messagebox ;-/ + QMessageBox.information( self,'Information', "AllOK","Ok") + except: + pass + + def DigitalTest(self): + try: + # Create a rotating display of digital outputs + # while waiting for keypress on digital input 1 + # (longer than .2sec :) Loop at most 3 times + Input1High = False + for i in range(1,3): + d = 1 + self.k.WriteAllDigital(1) + while Input1High == False and d < 128: + Input1High = (self.k.ReadDigitalChannel(1) > 0) + if Input1High: break + time.sleep(0.2) # wait .2 sec + d *=2 # and continue rotating digital outputs + #if d > 128: d=1; + self.k.WriteAllDigital(d) + if Input1High: break + + res = "Digital input 1=" + str(self.k.ReadDigitalChannel(1)) + "
" + # read the counter on input 1 + res+= "Counter(1)=" + str(self.k.ReadCounter(1)) + "
" + # read the counter on input 2 + res+= "Counter(2)=" + str(self.k.ReadCounter(2)) + # set even bits on digital outputs + self.k.WriteAllDigital(170) + time.sleep(1) + # set odd bits on digital outputs + self.k.WriteAllDigital(85) + time.sleep(1) + # Clear all digital outputs + self.k.WriteAllDigital(0) + # There should be more interesting information in the messagebox ;-/ + QMessageBox.information( self,'DigitalTest', res,"Ok") + except: + QMessageBox.warning( self,'DigitalTest', "Not OK","Ok") + pass + + def EnableAll(self): + self.OutputBox1.setEnabled(1) + self.OutputBox2.setEnabled(1) + self.OutputBox3.setEnabled(1) + self.OutputBox4.setEnabled(1) + self.OutputBox5.setEnabled(1) + self.OutputBox6.setEnabled(1) + self.OutputBox7.setEnabled(1) + self.OutputBox8.setEnabled(1) + self.SetAllDigitalButton.setEnabled(1) + self.ClearAllDigitalButton.setEnabled(1) + self.SetAllAnalogButton.setEnabled(1) + self.ClearAllAnalogButton.setEnabled(1) + self.comboCounter1.setEnabled(1) + self.comboCounter2.setEnabled(1) + self.ClearCounter1.setEnabled(1) + self.ClearCounter2.setEnabled(1) + self.TestDigitalButton.setEnabled(1) + self.TestAnalogButton.setEnabled(1) + self.BarAD1.setEnabled(1) + self.BarAD2.setEnabled(1) + self.BarDA1.setEnabled(1) + self.BarDA2.setEnabled(1) + + def DisableAll(self): + self.OutputBox1.setEnabled(0) + self.OutputBox2.setEnabled(0) + self.OutputBox3.setEnabled(0) + self.OutputBox4.setEnabled(0) + self.OutputBox5.setEnabled(0) + self.OutputBox6.setEnabled(0) + self.OutputBox7.setEnabled(0) + self.OutputBox8.setEnabled(0) + self.SetAllDigitalButton.setEnabled(0) + self.ClearAllDigitalButton.setEnabled(0) + self.SetAllAnalogButton.setEnabled(0) + self.ClearAllAnalogButton.setEnabled(0) + self.comboCounter1.setEnabled(0) + self.comboCounter2.setEnabled(0) + self.ClearCounter1.setEnabled(0) + self.ClearCounter2.setEnabled(0) + self.TestDigitalButton.setEnabled(0) + self.TestAnalogButton.setEnabled(0) + self.BarAD1.setEnabled(0) + self.BarAD2.setEnabled(0) + self.BarDA1.setEnabled(0) + self.BarDA2.setEnabled(0) # ## The QTimer::timeout() signal is received by this slot. # - def timeout( self ): - #new_time = QTime.currentTime() # get the current time - if self.k != None: - try: - AllVal = self.k.ReadAllValues() - #print AllVal,AllVal[2] - self.BarDA1.setValue(255 - AllVal[2]) - self.BarDA2.setValue(255 - AllVal[3]) - self.DA1Value.setProperty("intValue",QVariant(AllVal[2])) - self.DA2Value.setProperty("intValue",QVariant(AllVal[3])) - self.Counter1Value.setProperty("intValue",QVariant(AllVal[4])) - self.Counter2Value.setProperty("intValue",QVariant(AllVal[5])) - - if (AllVal[1] & 0x01) > 0: - self.DigitalLed1.setState(KLed.On) - else: - self.DigitalLed1.setState(KLed.Off) - if (AllVal[1] & 0x02) > 0: - self.DigitalLed2.setState(KLed.On) - else: - self.DigitalLed2.setState(KLed.Off) - if (AllVal[1] & 0x04) > 0: - self.DigitalLed3.setState(KLed.On) - else: - self.DigitalLed3.setState(KLed.Off) - if (AllVal[1] & 0x08) > 0: - self.DigitalLed4.setState(KLed.On) - else: - self.DigitalLed4.setState(KLed.Off) - if (AllVal[1] & 0x10) > 0: - self.DigitalLed5.setState(KLed.On) - else: - self.DigitalLed5.setState(KLed.Off) - except: - print "K8055 Read failed" - - def about(self): - QMessageBox.about( self, "About k8055qt", - "k8055qt is a small GUI program using libk8055\n\n" - "Copyright 2007 Pjetur G. Hjaltason. " - "Distributed under GPL license\n\n" - "For technical support, study the source code or surf\n" - "http://sourceforge.net/projects/libk8055/\n" ) + def timeout( self ): + #new_time = QTime.currentTime() # get the current time + if self.k != None: + try: + AllVal = self.k.ReadAllValues() + #print AllVal,AllVal[2] + self.BarDA1.setValue(255 - AllVal[2]) + self.BarDA2.setValue(255 - AllVal[3]) + self.DA1Value.setProperty("intValue",QVariant(AllVal[2])) + self.DA2Value.setProperty("intValue",QVariant(AllVal[3])) + self.Counter1Value.setProperty("intValue",QVariant(AllVal[4])) + self.Counter2Value.setProperty("intValue",QVariant(AllVal[5])) + + if (AllVal[1] & 0x01) > 0: + self.DigitalLed1.setState(KLed.On) + else: + self.DigitalLed1.setState(KLed.Off) + if (AllVal[1] & 0x02) > 0: + self.DigitalLed2.setState(KLed.On) + else: + self.DigitalLed2.setState(KLed.Off) + if (AllVal[1] & 0x04) > 0: + self.DigitalLed3.setState(KLed.On) + else: + self.DigitalLed3.setState(KLed.Off) + if (AllVal[1] & 0x08) > 0: + self.DigitalLed4.setState(KLed.On) + else: + self.DigitalLed4.setState(KLed.Off) + if (AllVal[1] & 0x10) > 0: + self.DigitalLed5.setState(KLed.On) + else: + self.DigitalLed5.setState(KLed.Off) + except: + print "K8055 Read failed" + + def about(self): + QMessageBox.about( self, "About k8055qt", + "k8055qt is a small GUI program using libk8055\n\n" + "Copyright 2007 Pjetur G. Hjaltason. " + "Distributed under GPL license\n\n" + "For technical support, study the source code or surf\n" + "http://sourceforge.net/projects/libk8055/\n" ) if __name__ == "__main__": - Kapp = QApplication(sys.argv) - QObject.connect(Kapp,SIGNAL("lastWindowClosed()"),Kapp,SLOT("quit()")) - w = QTK8055() - Kapp.setMainWidget(w) - w.show() - Kapp.exec_loop() + Kapp = QApplication(sys.argv) + QObject.connect(Kapp,SIGNAL("lastWindowClosed()"),Kapp,SLOT("quit()")) + w = QTK8055() + Kapp.setMainWidget(w) + w.show() + Kapp.exec_loop() -- cgit v1.1-2-g2b99