Skip to content

Commit 359fa9b

Browse files
committed
Bugfixed errors in pins setup
* Fixed error that crashed the windows if a pin was added-removed-added * Fixed remove analog pin control (it was disconnected) * Fixed bug that crased the app if a bench test was started using invalid connection parameters * Renamed all slots of the boardwindow to the on_<<operation>> standard * Removed from BoardWindow the pin management
1 parent e056388 commit 359fa9b

File tree

6 files changed

+123
-94
lines changed

6 files changed

+123
-94
lines changed

MLC/GUI/Autogenerated/mlc_qtcreator/board_config_design.ui

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,11 +1200,11 @@
12001200
<sender>testInterface</sender>
12011201
<signal>clicked()</signal>
12021202
<receiver>BoardConfigurationWindow</receiver>
1203-
<slot>checkConnection()</slot>
1203+
<slot>on_check_connection()</slot>
12041204
<hints>
12051205
<hint type="sourcelabel">
1206-
<x>438</x>
1207-
<y>281</y>
1206+
<x>530</x>
1207+
<y>301</y>
12081208
</hint>
12091209
<hint type="destinationlabel">
12101210
<x>391</x>
@@ -1216,11 +1216,11 @@
12161216
<sender>showPinout</sender>
12171217
<signal>clicked()</signal>
12181218
<receiver>BoardConfigurationWindow</receiver>
1219-
<slot>showPinout()</slot>
1219+
<slot>on_pinout_show()</slot>
12201220
<hints>
12211221
<hint type="sourcelabel">
1222-
<x>140</x>
1223-
<y>99</y>
1222+
<x>652</x>
1223+
<y>51</y>
12241224
</hint>
12251225
<hint type="destinationlabel">
12261226
<x>391</x>
@@ -1280,7 +1280,7 @@
12801280
<sender>addAnalogPin</sender>
12811281
<signal>clicked()</signal>
12821282
<receiver>BoardConfigurationWindow</receiver>
1283-
<slot>insertAnalogPin()</slot>
1283+
<slot>on_analog_pin_insert()</slot>
12841284
<hints>
12851285
<hint type="sourcelabel">
12861286
<x>641</x>
@@ -1296,7 +1296,7 @@
12961296
<sender>addDigitalPin</sender>
12971297
<signal>clicked()</signal>
12981298
<receiver>BoardConfigurationWindow</receiver>
1299-
<slot>insertDigitalPin()</slot>
1299+
<slot>on_digital_pin_insert()</slot>
13001300
<hints>
13011301
<hint type="sourcelabel">
13021302
<x>148</x>
@@ -1312,7 +1312,7 @@
13121312
<sender>removeDigitalPin</sender>
13131313
<signal>clicked()</signal>
13141314
<receiver>BoardConfigurationWindow</receiver>
1315-
<slot>removeDigitalPin()</slot>
1315+
<slot>on_digital_pin_remove()</slot>
13161316
<hints>
13171317
<hint type="sourcelabel">
13181318
<x>382</x>
@@ -1328,7 +1328,7 @@
13281328
<sender>removeAnalogPin</sender>
13291329
<signal>clicked()</signal>
13301330
<receiver>BoardConfigurationWindow</receiver>
1331-
<slot>removeDigitalPin()</slot>
1331+
<slot>on_analog_pin_remove()</slot>
13321332
<hints>
13331333
<hint type="sourcelabel">
13341334
<x>875</x>
@@ -1342,12 +1342,12 @@
13421342
</connection>
13431343
</connections>
13441344
<slots>
1345-
<slot>insertDigitalPin()</slot>
1346-
<slot>insertAnalogPin()</slot>
1347-
<slot>checkConnection()</slot>
1348-
<slot>showPinout()</slot>
1349-
<slot>removeDigitalPin()</slot>
1350-
<slot>removeAnalogPin()</slot>
1345+
<slot>on_digital_pin_insert()</slot>
1346+
<slot>on_analog_pin_insert()</slot>
1347+
<slot>on_check_connection()</slot>
1348+
<slot>on_pinout_show()</slot>
1349+
<slot>on_digital_pin_remove()</slot>
1350+
<slot>on_analog_pin_remove()</slot>
13511351
<slot>on_bench_test_click()</slot>
13521352
<slot>on_connection_type_toggle()</slot>
13531353
</slots>

MLC/GUI/Experiment/ArduinoConfigManager/ArduinoBoardManager.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def start(self):
5252
def insert_digital_pin(self, pin_index, pin, type_idx):
5353
if pin_index < 0:
5454
return
55+
5556
current = self.__main_window.get_current_board()["DIGITAL_PINS"] if type_idx != 2 else \
5657
self.__main_window.get_current_board()["PWM_PINS"]
5758
target_pin = self.__setup.digital_input_pins if type_idx == 0 else \
@@ -63,8 +64,7 @@ def insert_digital_pin(self, pin_index, pin, type_idx):
6364
self.__main_window.addDigitalPin(pin_index, type_idx)
6465
else:
6566
self.show_error(
66-
"Error", "Assign error", "Could not set pin %d with the selected type" % (
67-
pin),
67+
"Error", "Assign error", "Could not set pin %s with the selected type" % (pin),
6868
QMessageBox.Critical, QMessageBox.Ok)
6969

7070
# Mover a la vista
@@ -77,8 +77,15 @@ def show_error(self, title, text, info, icon, buttons):
7777
msg.setStandardButtons(buttons)
7878
return msg.exec_()
7979

80-
def remove_digital_pin(self, pin_index):
81-
return
80+
def remove_digital_pin(self, pin):
81+
if pin in self.__setup.digital_input_pins:
82+
self.__setup.digital_input_pins.remove(pin)
83+
84+
if pin in self.__setup.digital_output_pins:
85+
self.__setup.digital_output_pins.remove(int(pin))
86+
87+
if pin in self.__setup.pwm_pins:
88+
self.__setup.pwm_pins.remove(int(pin))
8289

8390
def insert_analog_pin(self, pin_index, pin, type_idx):
8491
if pin_index < 0:
@@ -91,10 +98,14 @@ def insert_analog_pin(self, pin_index, pin, type_idx):
9198
self.__main_window.addAnalogPin(pin_index, type_idx)
9299
else:
93100
self.show_error(
94-
"Error", "Assign error", "Could not set pin %d with the selected type" % (pin))
101+
"Error", "Assign error", "Could not set pin %d with the selected type" % (pin), QMessageBox.Critical, QMessageBox.Ok)
95102

96-
def remove_analog_pin(self, pin_index):
97-
return
103+
def remove_analog_pin(self, pin):
104+
if pin in self.__setup.analog_input_pins:
105+
self.__setup.analog_input_pins.remove(pin)
106+
107+
if pin in self.__setup.analog_output_pins:
108+
self.__setup.analog_output_pins.remove(pin)
98109

99110
def check_connection(self):
100111
self.__connection_status = self.__main_window.create_connection_dialog(
@@ -139,7 +150,13 @@ def board_changed(self, new_idx, old_idx):
139150
self.__main_window.set_board(old_idx)
140151

141152
def start_bench(self):
142-
self.__setup = self.__setup._replace(connection=self.start_connection(), **self.__main_window.checkout_board_setup())
153+
try:
154+
self.__setup = self.__setup._replace(connection=self.start_connection(), **self.__main_window.checkout_board_setup())
155+
except serial.SerialException:
156+
self.show_error(
157+
"Error", "Connection failure", "Could not start connection to board", QMessageBox.Critical, QMessageBox.Ok)
158+
return
159+
143160
bench = ArduinoBench()
144161
stats = ArduinoStatsDialog(bench)
145162
stats.connect_to_reset(bench)

MLC/GUI/Experiment/ArduinoConfigManager/BoardConfigurationWindow.py

Lines changed: 29 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,34 @@ def __init__(self, controller, boards, setup, parent=None):
3838
def update(self):
3939
aux_idx = 0
4040
self.ui.digitalPins.clear()
41-
digital_pin_count = len(
42-
self.__boards[self.ui.arduinoBoard.currentIndex()]["DIGITAL_PINS"])
41+
digital_pin_count = len(self.__boards[self.ui.arduinoBoard.currentIndex()]["DIGITAL_PINS"])
42+
43+
# Adds the not configured digital pins
4344
for i in self.__boards[self.ui.arduinoBoard.currentIndex()]["DIGITAL_PINS"]:
4445
if i not in self.__setup.digital_input_pins and i not in self.__setup.digital_output_pins and i not in self.__setup.pwm_pins:
4546
self.setup_pin(self.ui.digitalPins, 0, "Pin " + str(i), i)
4647
aux_idx += 1
4748

4849
aux_idx = 0
4950
self.ui.analogPins.clear()
51+
# Adds the not configured digital pins
5052
for i in self.__boards[self.ui.arduinoBoard.currentIndex()]["ANALOG_PINS"]:
5153
if i not in self.__setup.analog_input_pins and i not in self.__setup.analog_output_pins:
52-
self.setup_pin(
53-
self.ui.analogPins, 0, "Pin A" + str(i - digital_pin_count), i)
54+
self.setup_pin(self.ui.analogPins, 0, "Pin A" + str(i - digital_pin_count), i)
5455
aux_idx += 1
55-
56+
57+
# Clear the list (QTableWidget.clearContent doesn't remove the rows!)
5658
for i in xrange(self.ui.digitalPinsList.rowCount(), -1, -1):
5759
self.ui.digitalPinsList.removeRow(i)
5860

5961
for i in xrange(self.ui.analogPinList.rowCount(), -1, -1):
6062
self.ui.analogPinList.removeRow(i)
6163

6264
for pin in self.__setup.digital_input_pins:
63-
self.insertPin(pin, 0, self.ui.digitalPinsList)
65+
self.insertPin(pin, "Pin " + str(pin), 0, self.ui.digitalPinsList)
6466

6567
for pin in self.__setup.digital_output_pins:
66-
self.insertPin(pin, 0, self.ui.digitalPinsList)
68+
self.insertPin(pin, "Pin A" + str(pin - digital_pin_count), 0, self.ui.digitalPinsList)
6769

6870
def setup_board(self, index, board_name, image_name):
6971
_translate = QtCore.QCoreApplication.translate
@@ -78,7 +80,7 @@ def setup_pin(self, combo, index, pin_name, pin_value):
7880
item_name = _translate("BoardConfigurationWindow", pin_name)
7981
combo.insertItem(index, item_name, variant)
8082

81-
def showPinout(self):
83+
def on_pinout_show(self):
8284
index = self.ui.arduinoBoard.currentIndex()
8385
path = self.ui.arduinoBoard.itemData(index)
8486
dialog = ArduinoBoardDialog(path)
@@ -100,7 +102,7 @@ def checkout_board_setup(self):
100102
"read_count": self.ui.read_count_spin.value()}
101103
return board_setup
102104

103-
def checkConnection(self):
105+
def on_check_connection(self):
104106
self.__controller.check_connection()
105107

106108
def create_connection_dialog(self):
@@ -110,65 +112,48 @@ def create_connection_dialog(self):
110112
def get_current_board(self):
111113
return self.__boards[self.ui.arduinoBoard.currentIndex()]
112114

113-
def insertDigitalPin(self):
115+
def on_digital_pin_insert(self):
114116
idx = self.ui.digitalPins.currentIndex()
115117
self.__controller.insert_digital_pin(
116118
idx, self.ui.digitalPins.itemData(idx), self.ui.digitalPinType.currentIndex())
117119
# self.insertPin(self.ui.digitalPins, self.ui.digitalPinType,
118120
# self.ui.digitalPinsList)
119121

120-
def insertAnalogPin(self):
122+
def on_analog_pin_insert(self):
121123
idx = self.ui.analogPins.currentIndex()
122124
self.__controller.insert_analog_pin(
123125
idx, self.ui.analogPins.itemData(idx), self.ui.analogPinType.currentIndex())
124126
# self.insertPin(self.ui.analogPins, self.ui.analogPinType,
125127
# self.ui.analogPinList)
126128

127-
def addDigitalPin(self, pin, pinType):
128-
self.insertPin(pin, self.ui.digitalPins.itemText(pin),
129+
def addDigitalPin(self, pin_idx, pinType):
130+
self.insertPin(pin_idx, self.ui.digitalPins.itemText(pin_idx),
129131
self.ui.digitalPinType.itemText(pinType), self.ui.digitalPinsList)
130-
self.ui.digitalPins.removeItem(pin)
132+
self.ui.digitalPins.removeItem(pin_idx)
131133

132-
def addAnalogPin(self, pin, pinType):
133-
self.insertPin(pin, self.ui.analogPins.itemText(pin),
134+
def addAnalogPin(self, pin_idx, pinType):
135+
self.insertPin(pin_idx, self.ui.analogPins.itemText(pin_idx),
134136
self.ui.analogPinType.itemText(pinType), self.ui.analogPinList)
135-
self.ui.analogPins.removeItem(pin)
137+
self.ui.analogPins.removeItem(pin_idx)
136138

137-
def removeDigitalPin(self):
138-
# FIXME: Llevar al controller la logica de eliminacion
139+
def on_digital_pin_remove(self):
140+
# FIXME: The view pin removal should be made by the controller
139141
row = self.ui.digitalPinsList.currentRow()
140142
if row >= 0:
141-
pin = self.ui.digitalPinsList.item(row, 0).text()[4:]
143+
pin = int(self.ui.digitalPinsList.item(row, 0).text()[4:])
144+
self.__controller.remove_digital_pin(int(pin))
142145
self.ui.digitalPinsList.removeRow(row)
143-
try:
144-
self.__setup.digital_input_pins.remove(int(pin))
145-
except:
146-
pass
147-
try:
148-
self.__setup.digital_output_pins.remove(int(pin))
149-
except:
150-
pass
151-
try:
152-
self.__setup.pwm_pins.remove(int(pin))
153-
except:
154-
pass
155146
self.setup_pin(self.ui.digitalPins, 0, "Pin " + str(pin), pin)
156147

157-
def removeAnalogPin(self):
158-
# FIXME: Llevar al controller la logica de eliminacion
148+
def on_analog_pin_remove(self):
149+
# FIXME: The view pin removal should be made by the controller
159150
row = self.ui.analogPinList.currentRow()
160151
if row >= 0:
161-
pin = self.ui.analogPinList.item(row, 0).text()[4:]
152+
digital_pin_count = len(self.__boards[self.ui.arduinoBoard.currentIndex()]["DIGITAL_PINS"])
153+
pin = int(self.ui.analogPinList.item(row, 0).text()[5:]) + digital_pin_count
154+
self.__controller.remove_analog_pin(int(pin))
162155
self.ui.analogPinList.removeRow(row)
163-
try:
164-
self.__setup.analog_input_pins.remove(int(pin))
165-
except:
166-
pass
167-
try:
168-
self.__setup.analog_output_pins.remove(int(pin))
169-
except:
170-
pass
171-
self.setup_pin(self.ui.analogPins, 0, "Pin " + str(pin), pin)
156+
self.setup_pin(self.ui.analogPins, 0, "Pin A" + str(pin - digital_pin_count), int(pin))
172157

173158
return
174159

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import sys
2+
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog
3+
from ArduinoBoardDialog import ArduinoBoardDialog
4+
from MLC.GUI.Autogenerated.autogenerated import Ui_BoardConfigurationWindow
5+
from MLC.GUI.Experiment.ArduinoConfigManager.BoardConfigurationWindow import BoardConfigurationWindow
6+
7+
from ArduinoBoardManager import ArduinoBoardManager
8+
9+
10+
def showPinout():
11+
dialog = ArduinoBoardDialog("images/uno.jpg")
12+
dialog.exec_()
13+
# window = QDialog()
14+
# ui = Ui_BoardPinout()
15+
# ui.setupUi(window)
16+
# window.exec_()
17+
18+
if __name__ == '__main__':
19+
app = QApplication(sys.argv)
20+
# window = BoardConfigurationWindow()
21+
manager = ArduinoBoardManager()
22+
# ui = Ui_BoardConfigurationFrame()
23+
# ui.setupUi(window)
24+
# ui.showPinout.clicked.connect(showPinout)
25+
26+
manager.start()
27+
sys.exit(app.exec_())

MLC/GUI/Experiment/ArduinoConfigManager/test2.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,33 +27,33 @@ def emit(self):
2727

2828

2929
class Worker(Thread):
30-
def __init__(self, bench):
31-
Thread.__init__(self)
32-
self.__run = True
33-
self.__bench = bench
3430

35-
def run(self):
36-
while(self.__run):
37-
time.sleep(1)
38-
self.__bench.evaluate()
39-
#self.__signal.emit()
31+
def __init__(self, bench):
32+
Thread.__init__(self)
33+
self.__run = True
34+
self.__bench = bench
4035

41-
def stop(self):
42-
self.__run = False
36+
def run(self):
37+
while(self.__run):
38+
time.sleep(1)
39+
self.__bench.evaluate()
40+
# self.__signal.emit()
4341

44-
def get_bench(self):
45-
return self.__bench
46-
42+
def stop(self):
43+
self.__run = False
44+
45+
def get_bench(self):
46+
return self.__bench
4747

48-
if __name__ == '__main__':
49-
app = QApplication(sys.argv)
50-
bench = MockArduinoBench()
51-
stats = ArduinoStatsDialog(bench)
52-
bench.add_observer(stats)
53-
stats.connect_to_reset(bench)
54-
#worker = Worker(bench)
55-
#worker.start()
56-
bench.start()
57-
stats.exec_()
58-
bench.stop()
5948

49+
if __name__ == '__main__':
50+
app = QApplication(sys.argv)
51+
bench = MockArduinoBench()
52+
stats = ArduinoStatsDialog(bench)
53+
bench.add_observer(stats)
54+
stats.connect_to_reset(bench)
55+
# worker = Worker(bench)
56+
# worker.start()
57+
bench.start()
58+
stats.exec_()
59+
bench.stop()

tests/pocs/performance_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def actuate(terminal):
1616
arduinoDue = ArduinoInterface(connection, boards.Due)
1717

1818
arduinoDue.reset() #Just in case
19-
arduinoDue.set_report_mode(protocol.PIN_MODES.AVERAGE, read_count=5, read_delay=0)
19+
arduinoDue.set_report_mode(protocol.REPORT_MODES.AVERAGE, read_count=50, read_delay=0)
2020

2121
arduinoDue.add_output(40)
2222
arduinoDue.add_output(66)

0 commit comments

Comments
 (0)