Changeset 109


Ignore:
Timestamp:
07/11/10 02:29:30 (11 years ago)
Author:
sc
Message:

remote_control/puzzlebox_brainstorms_client_interface_design.py:

  • concentration/relaxation/speed enable buttons working

remote_control/puzzlebox_brainstorms_network_client.py:

  • LEGO Mindstorms NXT status label bugfix

remote_control/puzzlebox_brainstorms_client_interface.py:

  • concentration/relaxation/speed enable buttons working
  • exit dialog added
  • driving motors stopped when client disconnected

remote_control/puzzlebox_brainstorms_client_interface_network.py:

  • client instantiation bugfix

remote_control/puzzlebox_brainstorms_client_interface_local.py:

  • connection to local server instance added

remote_control/puzzlebox_brainstorms_network_server.py:

  • local server instance support added
  • debugging output bugfix
Location:
remote_control
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • remote_control/interface/qt4_form.ui

    r87 r109  
    33013301  <widget class="QPushButton" name="pushButtonConcentrationEnable"> 
    33023302   <property name="enabled"> 
    3303     <bool>false</bool> 
     3303    <bool>true</bool> 
    33043304   </property> 
    33053305   <property name="geometry"> 
     
    33113311    </rect> 
    33123312   </property> 
     3313   <property name="toolTip"> 
     3314    <string>enable/disable concentration processing</string> 
     3315   </property> 
    33133316   <property name="text"> 
    33143317    <string>Enabled</string> 
    33153318   </property> 
     3319   <property name="checkable"> 
     3320    <bool>true</bool> 
     3321   </property> 
     3322   <property name="checked"> 
     3323    <bool>true</bool> 
     3324   </property> 
    33163325  </widget> 
    33173326  <widget class="QPushButton" name="pushButtonRelaxationEnable"> 
    33183327   <property name="enabled"> 
    3319     <bool>false</bool> 
     3328    <bool>true</bool> 
    33203329   </property> 
    33213330   <property name="geometry"> 
     
    33273336    </rect> 
    33283337   </property> 
     3338   <property name="toolTip"> 
     3339    <string>enable/disable relaxation processing</string> 
     3340   </property> 
    33293341   <property name="text"> 
    33303342    <string>Enabled</string> 
    33313343   </property> 
     3344   <property name="checkable"> 
     3345    <bool>true</bool> 
     3346   </property> 
     3347   <property name="checked"> 
     3348    <bool>true</bool> 
     3349   </property> 
    33323350  </widget> 
    33333351  <widget class="QPushButton" name="pushButtonSpeedEnable"> 
    33343352   <property name="enabled"> 
    3335     <bool>false</bool> 
     3353    <bool>true</bool> 
    33363354   </property> 
    33373355   <property name="geometry"> 
     
    33433361    </rect> 
    33443362   </property> 
     3363   <property name="toolTip"> 
     3364    <string>enable/disable automatic driving of LEGO Mindstorms NXT robot</string> 
     3365   </property> 
    33453366   <property name="text"> 
    33463367    <string>Enabled</string> 
     3368   </property> 
     3369   <property name="checkable"> 
     3370    <bool>true</bool> 
     3371   </property> 
     3372   <property name="checked"> 
     3373    <bool>true</bool> 
     3374   </property> 
     3375   <property name="flat"> 
     3376    <bool>false</bool> 
    33473377   </property> 
    33483378  </widget> 
  • remote_control/puzzlebox_brainstorms_client_interface.py

    r108 r109  
    6464class puzzlebox_brainstorms_client_interface(QtGui.QWidget, Ui_Form): 
    6565         
    66         def __init__(self, log, DEBUG=DEBUG, parent = None): 
     66        def __init__(self, log, server=None, DEBUG=DEBUG, parent = None): 
    6767                 
    6868                self.log = log 
     
    7575                self.connectWidgets() 
    7676                 
     77                self.name = "Brainstorms Interface" 
     78                 
     79                self.brainstormsServer = server 
    7780                self.brainstormsClient = None 
    7881                 
     
    98101                self.pushButtonTurnRightReverse.setEnabled(False) 
    99102                 
     103                self.pushButtonConcentrationEnable.setDown(True) 
     104                self.pushButtonRelaxationEnable.setDown(True) 
     105                self.pushButtonSpeedEnable.setDown(True) 
     106                 
    100107                 
    101108                # LEGO Mindstorms 
     
    163170                 
    164171                if self.DEBUG: 
    165                         print "Connecting to Brainstorms Server" 
    166                  
    167                 #server_port = int(self.lineEditNXTPort.text()) 
     172                        print "<---- [%s] Connecting to Brainstorms Server" % self.name 
    168173                 
    169174                self.configureNetworkBrainstorms() 
     
    201206                 
    202207                if self.DEBUG: 
    203                         print "Disconnecting from Brainstorms Server" 
     208                        print "- - [%s] Disconnecting from Brainstorms Server" % self.name 
     209                 
     210                self.stopMotors() 
     211                 
     212                # Ensure the stopMotors command has been received by the server 
     213                # so the NXT robot will stop before the client disconnects 
     214                self.brainstormsClient.socket.flush() 
    204215                 
    205216                self.brainstormsClient.socket.disconnectFromHost() 
     
    297308        ################################################################## 
    298309         
     310        def updateConcentrationButton(self): 
     311                 
     312                if self.pushButtonConcentrationEnable.isChecked(): 
     313                         
     314                        self.pushButtonConcentrationEnable.setText('Enabled') 
     315                 
     316                else: 
     317                         
     318                        self.pushButtonConcentrationEnable.setText('Disabled') 
     319                        self.progressBarConcentration.setValue(0) 
     320                 
     321                 
     322                self.updateSpeed() 
     323         
     324         
     325        ################################################################## 
     326         
     327        def updateRelaxationButton(self): 
     328                 
     329                if self.pushButtonRelaxationEnable.isChecked(): 
     330                 
     331                        self.pushButtonRelaxationEnable.setText('Enabled') 
     332                 
     333                else: 
     334                         
     335                        self.pushButtonRelaxationEnable.setText('Disabled') 
     336                        self.progressBarRelaxation.setValue(0) 
     337                 
     338                 
     339                self.updateSpeed() 
     340         
     341         
     342        ################################################################## 
     343         
     344        def updateSpeedButton(self): 
     345                 
     346                if self.pushButtonSpeedEnable.isChecked(): 
     347                 
     348                        self.pushButtonSpeedEnable.setText('Enabled') 
     349                        self.updateSpeed() 
     350                 
     351                else: 
     352                         
     353                        self.pushButtonSpeedEnable.setText('Disabled') 
     354                        self.progressBarSpeed.setValue(0) 
     355                        self.stopMotors() 
     356         
     357         
     358        ################################################################## 
     359         
    299360        def connectWidgets(self): 
    300361                 
     
    339400                 
    340401                 
     402                self.connect(self.pushButtonConcentrationEnable, \ 
     403                                  QtCore.SIGNAL("clicked()"), \ 
     404                                  self.updateConcentrationButton) 
     405                 
     406                self.connect(self.pushButtonRelaxationEnable, \ 
     407                                  QtCore.SIGNAL("clicked()"), \ 
     408                                  self.updateRelaxationButton) 
     409                 
     410                self.connect(self.pushButtonSpeedEnable, \ 
     411                                  QtCore.SIGNAL("clicked()"), \ 
     412                                  self.updateSpeedButton) 
     413                 
     414                 
    341415                #shortcut = QtGui.QShortcut(self) 
    342416                #shortcut.setKey(tr("Down")) 
     
    403477                #self.pushButtonForward.setAutoRepeatDelay(0) 
    404478                #self.pushButtonForward.setAutoRepeatInterval(0) 
    405  
     479         
    406480         
    407481        ################################################################## 
     
    458532                 
    459533                # Update GUI 
    460                 self.progressBarSpeed.setValue(new_speed) 
    461                  
    462                 # GUI button under "Speed" progress bar set to Enabled 
    463                 speed_control = (self.pushButtonSpeedEnable.text() == 'Enabled') 
     534                if self.pushButtonSpeedEnable.isChecked(): 
     535                        self.progressBarSpeed.setValue(new_speed) 
     536                 
    464537                 
    465538                # If there is a change between the new and current speeds 
     
    469542                if ((self.current_speed != new_speed) and \ 
    470543                         ((self.drive_state == 'drive_forward') or \ 
    471                           (speed_control))): 
     544                          (self.pushButtonSpeedEnable.isChecked()))): 
    472545                         
    473546                        if (new_speed == 0): 
     
    475548                                self.stopMotors() 
    476549                        else: 
    477                                 if self.brainstormsClient != None: 
     550                                if ((self.brainstormsClient != None) and \ 
     551                                    (self.pushButtonSpeedEnable.isChecked())): 
    478552                                        self.pushButtonForward.setDown(True) 
    479553                                        self.brainstormsClient.sendCommand('drive_forward', power=new_speed) 
     
    530604                         
    531605                        if ('attention' in packet['eSense'].keys()): 
    532                                 self.progressBarConcentration.setValue(packet['eSense']['attention']) 
     606                                if self.pushButtonConcentrationEnable.isChecked(): 
     607                                        self.progressBarConcentration.setValue(packet['eSense']['attention']) 
    533608                         
    534609                        if ('meditation' in packet['eSense'].keys()): 
    535                                 self.progressBarRelaxation.setValue(packet['eSense']['meditation']) 
     610                                if self.pushButtonRelaxationEnable.isChecked(): 
     611                                        self.progressBarRelaxation.setValue(packet['eSense']['meditation']) 
    536612                 
    537613                 
    538614                self.updateSpeed() 
     615         
     616         
     617        ################################################################## 
     618         
     619        def closeEvent(self, event): 
     620                 
     621                quit_message = "Are you sure you want to exit the program?" 
     622                 
     623                reply = QtGui.QMessageBox.question( \ 
     624                           self, \ 
     625                          'Message', \ 
     626                           quit_message, \ 
     627                           QtGui.QMessageBox.Yes, \ 
     628                           QtGui.QMessageBox.No) 
     629                 
     630                if reply == QtGui.QMessageBox.Yes: 
     631                         
     632                        if self.brainstormsClient != None: 
     633                                self.stopMotors() 
     634                                self.brainstormsClient.socket.flush() 
     635                                 
     636                                if self.brainstormsServer != None: 
     637                                         
     638                                        if self.brainstormsServer.rc == None: 
     639                                                 
     640                                                bluetooth_device = str(self.lineEditNXTPort.text()) 
     641                                                self.brainstormsServer.executeCommand( \ 
     642                                                        'stop_motors', \ 
     643                                                        bluetooth_device=bluetooth_device) 
     644                                                 
     645                                        else: 
     646                                                self.brainstormsServer.rc.run('stop_motors') 
     647                         
     648                         
     649                        event.accept() 
     650                 
     651                else: 
     652                        event.ignore() 
    539653 
    540654 
  • remote_control/puzzlebox_brainstorms_client_interface_design.py

    r105 r109  
    33# Form implementation generated from reading ui file 'qt4_form.ui' 
    44# 
    5 # Created: Sat Jul 10 09:02:33 2010 
     5# Created: Sat Jul 10 13:00:38 2010 
    66#      by: PyQt4 UI code generator 4.7.3 
    77# 
     
    10691069                self.textLabelSpeed.setObjectName("textLabelSpeed") 
    10701070                self.pushButtonConcentrationEnable = QtGui.QPushButton(Form) 
    1071                 self.pushButtonConcentrationEnable.setEnabled(False) 
     1071                self.pushButtonConcentrationEnable.setEnabled(True) 
    10721072                self.pushButtonConcentrationEnable.setGeometry(QtCore.QRect(490, 380, 82, 30)) 
     1073                self.pushButtonConcentrationEnable.setCheckable(True) 
     1074                self.pushButtonConcentrationEnable.setChecked(True) 
    10731075                self.pushButtonConcentrationEnable.setObjectName("pushButtonConcentrationEnable") 
    10741076                self.pushButtonRelaxationEnable = QtGui.QPushButton(Form) 
    1075                 self.pushButtonRelaxationEnable.setEnabled(False) 
     1077                self.pushButtonRelaxationEnable.setEnabled(True) 
    10761078                self.pushButtonRelaxationEnable.setGeometry(QtCore.QRect(600, 380, 82, 30)) 
     1079                self.pushButtonRelaxationEnable.setCheckable(True) 
     1080                self.pushButtonRelaxationEnable.setChecked(True) 
    10771081                self.pushButtonRelaxationEnable.setObjectName("pushButtonRelaxationEnable") 
    10781082                self.pushButtonSpeedEnable = QtGui.QPushButton(Form) 
    1079                 self.pushButtonSpeedEnable.setEnabled(False) 
     1083                self.pushButtonSpeedEnable.setEnabled(True) 
    10801084                self.pushButtonSpeedEnable.setGeometry(QtCore.QRect(708, 380, 82, 30)) 
     1085                self.pushButtonSpeedEnable.setCheckable(True) 
     1086                self.pushButtonSpeedEnable.setChecked(True) 
     1087                self.pushButtonSpeedEnable.setFlat(False) 
    10811088                self.pushButtonSpeedEnable.setObjectName("pushButtonSpeedEnable") 
    10821089 
     
    11281135"</style></head><body style=\" font-family:\'Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" 
    11291136"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:9pt;\">Speed</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
     1137                self.pushButtonConcentrationEnable.setToolTip(QtGui.QApplication.translate("Form", "enable/disable concentration processing", None, QtGui.QApplication.UnicodeUTF8)) 
    11301138                self.pushButtonConcentrationEnable.setText(QtGui.QApplication.translate("Form", "Enabled", None, QtGui.QApplication.UnicodeUTF8)) 
     1139                self.pushButtonRelaxationEnable.setToolTip(QtGui.QApplication.translate("Form", "enable/disable relaxation processing", None, QtGui.QApplication.UnicodeUTF8)) 
    11311140                self.pushButtonRelaxationEnable.setText(QtGui.QApplication.translate("Form", "Enabled", None, QtGui.QApplication.UnicodeUTF8)) 
     1141                self.pushButtonSpeedEnable.setToolTip(QtGui.QApplication.translate("Form", "enable/disable automatic driving of LEGO Mindstorms NXT robot", None, QtGui.QApplication.UnicodeUTF8)) 
    11321142                self.pushButtonSpeedEnable.setText(QtGui.QApplication.translate("Form", "Enabled", None, QtGui.QApplication.UnicodeUTF8)) 
    11331143 
  • remote_control/puzzlebox_brainstorms_client_interface_local.py

    r101 r109  
    189189         
    190190         
    191         window = client_interface.puzzlebox_brainstorms_client_interface(log, DEBUG) 
     191        window = client_interface.puzzlebox_brainstorms_client_interface(log, \ 
     192                                                                         server=server, \ 
     193                                                                         DEBUG=DEBUG) 
    192194        window.connectToBrainstormsServer() 
    193195        window.show() 
  • remote_control/puzzlebox_brainstorms_client_interface_network.py

    r87 r109  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.07.06 
     11# Last Update: 2010.07.10 
    1212# 
    1313##################################################################### 
     
    6262        app = QtGui.QApplication(sys.argv) 
    6363         
    64         window = client_interface.puzzlebox_brainstorms_client_interface(log, DEBUG) 
     64        window = client_interface.puzzlebox_brainstorms_client_interface(log, DEBUG=DEBUG) 
    6565        window.show() 
    6666         
  • remote_control/puzzlebox_brainstorms_network_client.py

    r108 r109  
    103103                                         ('status' in data.keys())): 
    104104                                         
    105                                         voltage = str(data['status']) 
    106                                         voltage = voltage[:4] 
    107                                         label = 'Status: %s volts' % voltage 
     105                                        status = str(data['status']) 
     106                                         
     107                                        if (status.find('N/A') == -1): 
     108                                                status = status[:4] 
     109                                                status = "%s volts" % status 
     110                                         
     111                                        label = 'Status: %s' % status 
    108112                                         
    109113                                        self.parent.textLabelNXTStatus.setText(label) 
  • remote_control/puzzlebox_brainstorms_network_server.py

    r108 r109  
    9191                if not result: 
    9292                        if self.DEBUG: 
    93                                 print "ERROR [%s] Unable to start the server:", self.socket.name, 
     93                                print "ERROR [%s] Unable to start the server:" % self.socket.name, 
    9494                                print self.socket.errorString() 
    9595                                 
     
    9999                 
    100100                self.socket.newConnection.connect(self.processConnection) 
     101         
     102         
     103        ################################################################## 
     104         
     105        def processConnection(self): 
     106                 
     107                if self.DEBUG: 
     108                        print "--> [%s]: Client connected" % self.socket.name 
     109                 
     110                clientConnection = self.socket.nextPendingConnection() 
     111                clientConnection.disconnected.connect(clientConnection.deleteLater) 
     112                 
     113                if (self.embedded_mode): 
     114                         
     115                        # Only one client connection to server will work in embedded mode 
     116                        self.clientConnection = clientConnection 
     117                        clientConnection.readyRead.connect(self.processData) 
     118                 
     119                 
     120                else: 
     121                         
     122                        if not clientConnection.waitForReadyRead(CLIENT_NO_REPLY_WAIT): 
     123                                if self.DEBUG: 
     124                                        print "WARNING [%s] Timeout waiting for client to transmit data" % \ 
     125                                                self.socket.name 
     126                                        #print "State:", 
     127                                        #print clientConnection.state() 
     128                                clientConnection.disconnectFromHost() 
     129                                return 
     130                         
     131                         
     132                        self.processData(clientConnection) 
     133                         
     134                        #clientConnection.disconnectFromHost() 
    101135         
    102136         
     
    141175        ################################################################## 
    142176         
    143         def processConnection(self): 
    144                  
    145                 if self.DEBUG: 
    146                         print "--> [%s]: Client connected" % self.socket.name 
    147                  
    148                 clientConnection = self.socket.nextPendingConnection() 
    149                 clientConnection.disconnected.connect(clientConnection.deleteLater) 
    150                  
    151                 if (self.embedded_mode): 
    152                          
    153                         # Only one client connection to server will work in embedded mode 
    154                         self.clientConnection = clientConnection 
    155                         clientConnection.readyRead.connect(self.processData) 
    156                  
    157                  
    158                 else: 
    159                          
    160                         if not clientConnection.waitForReadyRead(CLIENT_NO_REPLY_WAIT): 
    161                                 if self.DEBUG: 
    162                                         print "WARNING [%s] Timeout waiting for client to transmit data" % \ 
    163                                                 self.socket.name 
    164                                         #print "State:", 
    165                                         #print clientConnection.state() 
    166                                 clientConnection.disconnectFromHost() 
    167                                 return 
    168                          
    169                          
    170                         self.processData(clientConnection) 
    171                          
    172                         clientConnection.disconnectFromHost() 
    173          
    174          
    175         ################################################################## 
    176          
    177177        def processCommand(self, data): 
    178178                 
     
    192192                                        bluetooth_device = data['bluetooth_device'] 
    193193                                else: 
    194                                         bluetooth_device == BLUETOOTH_DEVICE 
     194                                        bluetooth_device = BLUETOOTH_DEVICE 
    195195                                 
    196196                                self.rc = remote_control.puzzlebox_brainstorms_remote_control( \ 
     
    216216        ################################################################## 
    217217         
    218         def executeCommand(self, command): 
     218        def executeCommand(self, command, bluetooth_device=BLUETOOTH_DEVICE): 
    219219                 
    220220                #command_line = 'python puzzlebox_brainstorms_remote_control.py --command=%s' % command 
     
    225225                 
    226226                rc = remote_control.puzzlebox_brainstorms_remote_control( \ 
    227                         device=BLUETOOTH_DEVICE, \ 
     227                        device=bluetooth_device, \ 
    228228                        command=command, \ 
    229229                        DEBUG=DEBUG) 
Note: See TracChangeset for help on using the changeset viewer.