source: remote_control/puzzlebox_brainstorms_client_interface.py @ 74

Last change on this file since 74 was 74, checked in by sc, 11 years ago

brainstorms:

  • continued file and class renaming in response to conversions

from PyGame/Twisted? frameworks to Qt

network_client:

  • initial checkin of Qt based Brainstorms client

network_client_thinkgear:

File size: 6.3 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# Puzzlebox - Brainstorms - Client Interface - Qt
5#
6# Copyright Puzzlebox Productions, LLC (2010)
7#
8# This code is released under the GNU Pulic License (GPL) version 2
9# For more information please refer to http://www.gnu.org/copyleft/gpl.html
10#
11# Last Update: 2010.06.28
12#
13#####################################################################
14
15import os, sys
16
17#try:
18        #from PySide import QtCore, QtGui, QtNetwork
19#except:
20        #print "Using PyQt4 module"
21        #from PyQt4 import QtCore, QtGui, QtNetwork
22#else:
23        #print "Using PySide module"
24
25from PyQt4 import QtCore, QtGui, QtNetwork
26#from PySide import QtCore, QtGui, QtNetwork
27
28sys.path.append(os.path.join(os.getcwd(), "interface"))
29from qt4_form import Ui_Form
30
31import simplejson as json
32
33import puzzlebox_brainstorms_configuration as configuration
34import puzzlebox_brainstorms_network_client as brainstorms_client
35import puzzlebox_brainstorms_network_client_thinkgear as thinkgear_client
36#import puzzlebox_logger
37
38#####################################################################
39# Globals
40#####################################################################
41
42DEBUG = 1
43
44THINKGEAR_POWER_THRESHOLDS = configuration.THINKGEAR_POWER_THRESHOLDS
45
46NXT_BLUETOOTH_DEVICE = configuration.NXT_BLUETOOTH_DEVICE
47
48#####################################################################
49# Classes
50#####################################################################
51
52class puzzlebox_brainstorms_client_interface(QtGui.QWidget, Ui_Form):
53       
54        def __init__(self, log, DEBUG=DEBUG, parent = None):
55               
56                self.log = log
57                self.DEBUG = DEBUG
58               
59                QtGui.QWidget.__init__(self, parent)
60                self.setupUi(self)
61               
62                self.configureSettings()
63                self.configureNetwork()
64                self.connectWidgets()
65       
66       
67        ##################################################################
68       
69        def configureSettings(self):
70               
71                # Bluetooth readout current not available
72                self.textLabelBluetoothStatus.setText("Status: N/A")
73               
74                # Display communication port for LEGO Mindstorms NXT device
75                self.lineEditBluetoothPort.setText(NXT_BLUETOOTH_DEVICE)
76               
77                # Bluetooth connection control not available
78                self.pushButtonBluetoothConnect.setEnabled(False)
79               
80                # Set concentration threshold value
81                concentration_threshold = \
82                        self.getMinimumThreshold(THINKGEAR_POWER_THRESHOLDS['concentration'])
83                self.spinBoxConcentrationThreshold.setValue(concentration_threshold)
84                self.spinBoxConcentrationThreshold.update()
85               
86                # Concentration threshold value not modifiable
87                self.spinBoxConcentrationThreshold.setEnabled(False)
88               
89                # Set relaxation threshold value
90                relaxation_threshold = \
91                        self.getMinimumThreshold(THINKGEAR_POWER_THRESHOLDS['relaxation'])
92                self.spinBoxRelaxationThreshold.setValue(relaxation_threshold)
93                self.spinBoxRelaxationThreshold.update()
94               
95                # Relaxation threshold value not modifiable
96                self.spinBoxRelaxationThreshold.setEnabled(False)
97       
98       
99        ##################################################################
100       
101        def getMinimumThreshold(self, threshold):
102               
103                '''Return the minimum detection level which results
104                in a non-zero power setting'''
105               
106                minimum = 100
107               
108                threshold_keys = threshold.keys()
109                threshold_keys.sort()
110                threshold_keys.reverse()
111               
112                for key in threshold_keys:
113                       
114                        if ((threshold[key] < minimum) and \
115                                 (threshold[key] > 0)):
116                                minimum = key
117               
118               
119                return(minimum)
120       
121       
122        ##################################################################
123       
124        def configureNetwork(self):
125               
126                self.brainstormsClient = \
127                   brainstorms_client.puzzlebox_brainstorms_network_client(self.log, parent=self)
128               
129                self.thinkgearClient = \
130                   thinkgear_client.puzzlebox_brainstorms_network_client_thinkgear(self.log, parent=self)
131       
132       
133        ##################################################################
134       
135        def connectWidgets(self):
136               
137                self.connect(self.pushButtonTurnLeft, QtCore.SIGNAL("pressed()"), \
138                             self.turnLeft)
139                self.connect(self.pushButtonTurnLeft, QtCore.SIGNAL("released()"), \
140                             self.stopMotors)
141               
142                self.connect(self.pushButtonForward, QtCore.SIGNAL("pressed()"), \
143                             self.driveForward)
144                self.connect(self.pushButtonForward, QtCore.SIGNAL("released()"), \
145                             self.stopMotors)
146               
147                self.connect(self.pushButtonTurnRight, QtCore.SIGNAL("pressed()"), \
148                             self.turnRight)
149                self.connect(self.pushButtonTurnRight, QtCore.SIGNAL("released()"), \
150                             self.stopMotors)
151               
152                self.connect(self.pushButtonTurnLeftReverse, QtCore.SIGNAL("pressed()"), \
153                             self.turnLeftInReverse)
154                self.connect(self.pushButtonTurnLeftReverse, QtCore.SIGNAL("released()"), \
155                             self.stopMotors)
156               
157                self.connect(self.pushButtonReverse, QtCore.SIGNAL("pressed()"), \
158                             self.driveReverse)
159                self.connect(self.pushButtonReverse, QtCore.SIGNAL("released()"), \
160                             self.stopMotors)
161               
162                self.connect(self.pushButtonTurnRightReverse, QtCore.SIGNAL("pressed()"), \
163                             self.turnRightInReverse)
164                self.connect(self.pushButtonTurnRightReverse, QtCore.SIGNAL("released()"), \
165                             self.stopMotors)
166               
167               
168                #self.connect(self.pushButtonBluetoothConnect, \
169                                  #QtCore.SIGNAL("clicked()"), \
170                                  #self.test)
171       
172       
173        ##################################################################
174       
175        def turnLeft(self):
176                self.brainstormsClient.sendCommand('turn_left')
177       
178        def driveForward(self):
179                self.brainstormsClient.sendCommand('drive_forward')
180       
181        def turnRight(self):
182                self.brainstormsClient.sendCommand('turn_right')
183       
184        def turnLeftInReverse(self):
185                self.brainstormsClient.sendCommand('turn_left_in_reverse')
186       
187        def driveReverse(self):
188                self.brainstormsClient.sendCommand('drive_reverse')
189       
190        def turnRightInReverse(self):
191                self.brainstormsClient.sendCommand('turn_right_in_reverse')
192       
193        def stopMotors(self):
194                self.brainstormsClient.sendCommand('stop_motors')
195       
196       
197        ##################################################################
198       
199        def test(self):
200               
201                print "Test Successful"
202
203
204#####################################################################
205# Functions
206#####################################################################
207
208#####################################################################
209# Main
210#####################################################################
211
212if __name__ == '__main__':
213       
214        log = None
215       
216        app = QtGui.QApplication(sys.argv)
217       
218        window = puzzlebox_brainstorms_client_interface(log, DEBUG)
219        window.show()
220       
221        app.exec_()
222
Note: See TracBrowser for help on using the repository browser.