Skip to content

Commit 3d55373

Browse files
committed
- Fixed bug where changing task folder using dialog did not change task select menus.
- Fixed bug where serial communication glitch could crash a box with "ValueError: bad typecode" in pycboard.process_data
1 parent 4a83ba0 commit 3d55373

File tree

4 files changed

+14
-12
lines changed

4 files changed

+14
-12
lines changed

com/pycboard.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,10 @@ def process_data(self):
352352
new_byte = self.serial.read(1)
353353
if new_byte == b'A': # Analog data, 13 byte header + variable size content.
354354
data_header = self.serial.read(13)
355-
typecode = data_header[0:1].decode()
355+
typecode = data_header[0:1].decode()
356+
if typecode not in ('b','B','h','H','l','L'):
357+
new_data.append(('!','bad typecode A'))
358+
continue
356359
ID = int.from_bytes(data_header[1:3], 'little')
357360
sampling_rate = int.from_bytes(data_header[3:5], 'little')
358361
data_len = int.from_bytes(data_header[5:7], 'little')

gui/configure_experiment_tab.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ def __init__(self, parent=None):
4646
self.name_label = QtGui.QLabel('Experiment name:')
4747
self.name_text = QtGui.QLineEdit()
4848
self.task_label = QtGui.QLabel('Task:')
49-
self.task_select = TaskSelectMenu(dirs['tasks'],'select task')
49+
self.task_select = TaskSelectMenu('select task')
5050
self.hardware_test_label = QtGui.QLabel('Hardware test:')
51-
self.hardware_test_select = TaskSelectMenu(dirs['tasks'],'no hardware test',add_default=True)
51+
self.hardware_test_select = TaskSelectMenu('no hardware test',add_default=True)
5252
self.data_dir_label = QtGui.QLabel('Data dir:')
5353
self.data_dir_text = QtGui.QLineEdit(dirs['data'])
5454
self.data_dir_button = QtGui.QPushButton('')
@@ -136,8 +136,8 @@ def experiment_changed(self, experiment_name):
136136
def refresh(self):
137137
'''Called periodically when not running to update available task, ports, experiments.'''
138138
if self.GUI_main.available_tasks_changed:
139-
self.task_select.update_menu()
140-
self.hardware_test_select.update_menu()
139+
self.task_select.update_menu(dirs['tasks'])
140+
self.hardware_test_select.update_menu(dirs['tasks'])
141141
self.GUI_main.available_tasks_changed = False
142142
if self.GUI_main.available_experiments_changed:
143143
cbox_update_options(self.experiment_select, self.GUI_main.available_experiments)

gui/run_task_tab.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def __init__(self, parent=None):
105105
self.task_groupbox = QtGui.QGroupBox('Task')
106106

107107
self.task_label = QtGui.QLabel('Task:')
108-
self.task_select = TaskSelectMenu(dirs['tasks'],'select task')
108+
self.task_select = TaskSelectMenu('select task')
109109
self.task_select.set_callback(self.task_changed)
110110
self.upload_button = QtGui.QPushButton('Upload')
111111
self.upload_button.setIcon(QtGui.QIcon("gui/icons/circle-arrow-up.svg"))
@@ -219,7 +219,7 @@ def refresh(self):
219219
else: # No setups available to connect to.
220220
self.connect_button.setEnabled(False)
221221
if self.GUI_main.available_tasks_changed:
222-
self.task_select.update_menu()
222+
self.task_select.update_menu(dirs['tasks'])
223223
if self.GUI_main.data_dir_changed and not self.custom_dir:
224224
self.data_dir_text.setText(dirs['data'])
225225
if self.task:

gui/utility.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -305,10 +305,9 @@ class TaskSelectMenu(QtGui.QPushButton):
305305
is True, initial_text is included as a menu option.
306306
Adapted from: https://stackoverflow.com/questions/35924235
307307
'''
308-
def __init__(self, root_folder, initial_text, add_default=False):
308+
def __init__(self, initial_text, add_default=False):
309309
self.callback = lambda task: None
310310
self.menu = QtGui.QMenu()
311-
self.menu_root = root_folder
312311
self.add_default = add_default
313312
self.default_text = initial_text
314313
super().__init__(initial_text)
@@ -323,15 +322,15 @@ def fxn():
323322
self.setText(text)
324323
return fxn
325324

326-
def update_menu(self):
325+
def update_menu(self, root_folder):
327326
self.menu.clear()
328327
if self.add_default:
329328
self.menu.addAction(self.default_text,self.create_action(self.default_text))
330329
self.menu.addSeparator()
331330
previous_menu = self.menu
332331
current_menu = self.menu
333-
for dirName, subdirList, fileList in os.walk(self.menu_root):
334-
subfolder = dirName.split(self.menu_root)[1][1:]
332+
for dirName, subdirList, fileList in os.walk(root_folder):
333+
subfolder = dirName.split(root_folder)[1][1:]
335334
if subfolder:
336335
if any(".py" in filename for filename in fileList): # only add submenu if there are .py files inside
337336
sub_menu = current_menu.addMenu(subfolder.split(os.path.sep)[-1])

0 commit comments

Comments
 (0)