Go to the documentation of this file.00001 from PySide import QtCore
00002 from PyQt4.QtCore import pyqtSlot, SIGNAL
00003
00004 __author__ = 'tom1231'
00005 from PyQt4.QtGui import *
00006 from BAL.Interface.DeviceFrame import DeviceFrame, SERVO
00007
00008
00009 class Servo(DeviceFrame):
00010 servoCount = 0
00011
00012 def __init__(self, frame, data, servoPorts):
00013 DeviceFrame.__init__(self, SERVO, frame, data)
00014 self._pubHz = '10'
00015 self._name = 'RiC_Servo'
00016 self._initPos = '999.0'
00017 self._min = '-1.57'
00018 self._max = '1.57'
00019 self._a = '90.0'
00020 self._b = '57.3'
00021 self._port = str(servoPorts.currentText())
00022 self._isinitPos = False
00023 self.mainPorts = servoPorts
00024
00025 def fromDict(self, data):
00026 self._pubHz = data['pubHz']
00027 self._name = data['name']
00028 self._initPos = data['initPos']
00029 self._isinitPos = data['isInitPos']
00030 self._min = data['min']
00031 self._max = data['max']
00032 self._a = data['a']
00033 self._b = data['b']
00034 self._port = data['port']
00035
00036 def toDict(self):
00037 data = dict()
00038
00039 data['type'] = SERVO
00040 data['pubHz'] = self._pubHz
00041 data['name'] = self._name
00042 data['initPos'] = self._initPos
00043 data['isInitPos'] = self._isinitPos
00044 data['min'] = self._min
00045 data['max'] = self._max
00046 data['a'] = self._a
00047 data['b'] = self._b
00048 data['port'] = self._port
00049 return data
00050
00051 def saveToFile(self, file):
00052 if not self._isinitPos: self._initPos = '999.0'
00053
00054 file.write('servo' + str(Servo.servoCount) + '/publishHz: ' + self._pubHz + '\n')
00055 file.write('servo' + str(Servo.servoCount) + '/name: ' + self._name + '\n')
00056 file.write('servo' + str(Servo.servoCount) + '/port: ' + self._port + '\n')
00057 file.write('servo' + str(Servo.servoCount) + '/min: ' + self._min + '\n')
00058 file.write('servo' + str(Servo.servoCount) + '/max: ' + self._max + '\n')
00059 file.write('servo' + str(Servo.servoCount) + '/initMove: ' + self._initPos + '\n')
00060 file.write('servo' + str(Servo.servoCount) + '/a: ' + self._a + '\n')
00061 file.write('servo' + str(Servo.servoCount) + '/b: ' + self._b + '\n')
00062 Servo.servoCount += 1
00063
00064 def getName(self):
00065 return self._name
00066
00067 def getPort(self):
00068 return self._port
00069
00070 def add(self):
00071 old = self._name
00072 self._name = str(self.name.text())
00073
00074 if not self.nameIsValid():
00075 error = QErrorMessage()
00076 error.setWindowTitle("Same name error")
00077 error.showMessage("Name already taken.")
00078 error.exec_()
00079 self._name = old
00080 self._isValid = False
00081 return
00082
00083 self._isValid = True
00084 self._pubHz = str(self.pubHz.text())
00085 self._isinitPos = self.check.isChecked()
00086 if self._isinitPos: self._initPos = str(self.initPos.text())
00087 self._min = str(self.min.text())
00088 self._max = str(self.max.text())
00089 self._a = str(self.a.text())
00090 self._b = str(self.b.text())
00091 self._port = str(self._servoPorts.currentText())
00092 self.mainPorts.removeItem(self._servoPorts.currentIndex())
00093
00094 def findItem(self):
00095 for i in xrange(self.mainPorts.count()):
00096 if self._port == str(self.mainPorts.itemText(i)):
00097 return i
00098 return 1
00099
00100 def showDetails(self, items=None):
00101 self.pubHz = QLineEdit(self._pubHz)
00102 self.name = QLineEdit(self._name)
00103 self.initPos = QLineEdit(self._initPos)
00104 self.min = QLineEdit(self._min)
00105 self.max = QLineEdit(self._max)
00106 self.a = QLineEdit(self._a)
00107 self.b = QLineEdit(self._b)
00108 self.check = QCheckBox('')
00109 self._servoPorts = QComboBox()
00110 self._servoPorts.addItems([self.mainPorts.itemText(i) for i in xrange(self.mainPorts.count())])
00111 self._servoPorts.setCurrentIndex(self.findItem())
00112 self.initPos.setEnabled(self._isinitPos)
00113 self.check.setChecked(self._isinitPos)
00114 self.check.stateChanged.connect(self.initPos.setEnabled)
00115
00116 self._frame.layout().addRow(QLabel('Publish Hz: '), self.pubHz)
00117 self._frame.layout().addRow(QLabel('name: '), self.name)
00118 self._frame.layout().addRow(QLabel('Initial position(in radians): '), self.initPos)
00119 self._frame.layout().addRow(QLabel('Minimum position(in radians): '), self.min)
00120 self._frame.layout().addRow(QLabel('Maximum position(in radians): '), self. max)
00121 self._frame.layout().addRow(QLabel('Parameter A(in degrees): '), self.a)
00122 self._frame.layout().addRow(QLabel('Parameter B(in degrees): '), self.b)
00123 self._frame.layout().addRow(QLabel('Port: '), self._servoPorts)
00124 self._frame.layout().addRow(QLabel('Enable initial position: '), self.check)
00125
00126 def printDetails(self):
00127 self._frame.layout().addRow(QLabel('Publish Hz: '), QLabel(self._pubHz))
00128 self._frame.layout().addRow(QLabel('name: '), QLabel(self._name))
00129 if self._isinitPos: self._frame.layout().addRow(QLabel('Initial position(in radians): '), QLabel(self._initPos))
00130 else: self._frame.layout().addRow(QLabel('Initial position(in radians): '), QLabel('Not enable'))
00131 self._frame.layout().addRow(QLabel('Minimum position(in radians): '), QLabel(self._min))
00132 self._frame.layout().addRow(QLabel('Maximum position(in radians): '), QLabel(self._max))
00133 self._frame.layout().addRow(QLabel('Parameter A(in degrees): '), QLabel(self._a))
00134 self._frame.layout().addRow(QLabel('Parameter B(in degrees): '), QLabel(self._b))
00135 self._frame.layout().addRow(QLabel('Port: '), QLabel(self._port))