Skip to content

Commit bfb4fbc

Browse files
committed
Start adding enum outputs
1 parent a0a5de2 commit bfb4fbc

2 files changed

Lines changed: 47 additions & 3 deletions

File tree

blacs/plugins/virtual_device/__init__.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from blacs.device_base_class import DeviceTab
3131
from blacs.output_classes import AO as AO_output_class
3232
from blacs.output_classes import DO as DO_output_class
33+
from blacs.output_classes import EO as EO_output_class
3334
from blacs.output_classes import DDS as DDS_output_class
3435

3536
from .virtual_device_tab import VirtualDeviceTab
@@ -122,6 +123,7 @@ def plugin_setup_complete(self, BLACS):
122123
vd_tab.create_widgets(self.BLACS['ui'].blacs.tablist,
123124
self.virtual_devices[name]['AO'],
124125
self.virtual_devices[name]['DO'],
126+
self.virtual_devices[name]['EO'],
125127
self.virtual_devices[name]['DDS'])
126128

127129
self.setup_complete = True
@@ -210,6 +212,7 @@ def _get_child_outputs(self, conn_table, root_devs, dev_name, tab):
210212
'''
211213
AOs = []
212214
DOs = []
215+
EOs = []
213216
DDSs = []
214217

215218
device_conn = conn_table.find_by_name(dev_name)
@@ -231,10 +234,12 @@ def _get_child_outputs(self, conn_table, root_devs, dev_name, tab):
231234
DOs.append((child, child_dev.parent_port, inv))
232235
elif isinstance(channel, AO_output_class):
233236
AOs.append((child, child_dev.parent_port))
237+
elif isinstance(channel, EO_output_class):
238+
EOs.append((child, child_dev.parent_port))
234239
elif isinstance(channel, DDS_output_class):
235240
DDSs.append((child, child_dev.parent_port))
236241

237-
return AOs, DOs, DDSs
242+
return AOs, DOs, EOs, DDSs
238243

239244
def __init__(self, BLACS):
240245
'''
@@ -258,14 +263,15 @@ def __init__(self, BLACS):
258263

259264
analog_outputs = QStandardItem('Analog Outputs')
260265
digital_outputs = QStandardItem('Digital Outputs')
266+
enum_outputs = QStandardItem('Enum Outputs')
261267
dds_outputs = QStandardItem('DDS Outputs')
262268

263269
device_item.appendRow(analog_outputs)
264270
device_item.appendRow(digital_outputs)
265271
device_item.appendRow(dds_outputs)
266272

267273
root_devs = self.BLACS['ui'].blacs.tablist.keys()
268-
AOs, DOs, DDSs = self._get_child_outputs(connection_table, root_devs, tab_name, tab)
274+
AOs, DOs, EOs, DDSs = self._get_child_outputs(connection_table, root_devs, tab_name, tab)
269275

270276
for DO in DOs:
271277
DO_item = QStandardItem(DO[1] + ' - ' + DO[0])
@@ -284,6 +290,14 @@ def __init__(self, BLACS):
284290
add_to_vd_item.setToolTip('Add this output to selected virtual device')
285291
add_to_vd_item.setData(AO[1] + ' - ' + AO[0], self.CT_TREE_ROLE_NAME)
286292
analog_outputs.appendRow([AO_item, add_to_vd_item])
293+
for EO in EOs:
294+
EO_item = QStandardItem(EO[1] + ' - ' + EO[0])
295+
add_to_vd_item = QStandardItem()
296+
add_to_vd_item.setIcon(QIcon(':qtutils/fugue/arrow'))
297+
add_to_vd_item.setEditable(False)
298+
add_to_vd_item.setToolTip('Add this output to selected virtual device')
299+
add_to_vd_item.setData(EO[1] + ' - ' + EO[0], self.CT_TREE_ROLE_NAME)
300+
enum_outputs.appendRow([EO_item, add_to_vd_item])
287301
for DDS in DDSs:
288302
DDS_item = QStandardItem(DDS[1] + ' - ' + DDS[0])
289303
add_to_vd_item = QStandardItem()
@@ -453,6 +467,16 @@ def on_edit_virtual_devices(self, *args, **kwargs):
453467
do_item.setData(DO[2], self.VD_TREE_ROLE_DO_INVERTED)
454468
digital_outputs.appendRow(self.make_virtual_device_output_row(do_item))
455469

470+
enum_outputs = QStandardItem('Enum Outputs')
471+
device_item.appendRow(enum_outputs)
472+
for EO in vd['EO']:
473+
if EO[0] not in self.BLACS['ui'].blacs.tablist:
474+
# BLACS tab removed, remove virtual device
475+
continue
476+
chan = self.BLACS['ui'].blacs.tablist[EO[0]].get_channel(EO[1])
477+
eo_item = QStandardItem(EO[0] + '.' + chan.name)
478+
enum_outputs.appendRow(self.make_virtual_device_output_row(eo_item))
479+
456480
dds_outputs = QStandardItem('DDS Outputs')
457481
device_item.appendRow(dds_outputs)
458482
for DDS in vd['DDS']:

blacs/plugins/virtual_device/virtual_device_tab.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010

1111
class VirtualDeviceTab(PluginTab):
1212

13-
def create_widgets(self, blacs_tablist, AOs, DOs, DDSs):
13+
def create_widgets(self, blacs_tablist, AOs, DOs, EOs, DDSs):
1414
'''
1515
This function sets up the tab, and should be called as soon as the plugin is otherwise ready.
1616
Here, we create dictionaries of widgets (initially connecting them to outputs).
1717
'''
1818
self._blacs_tablist = blacs_tablist
1919
self._AOs = {(AO[0], AO[1]): None for AO in AOs}
2020
self._DOs = {(DO[0], DO[1], DO[2]): None for DO in DOs}
21+
self._EOs = {(EO[0], EO[1]): None for EO in EOs}
2122
self._DDSs = {(DDS[0], DDS[1]): None for DDS in DDSs}
2223

2324
for AO in self._AOs.keys():
@@ -36,6 +37,14 @@ def create_widgets(self, blacs_tablist, AOs, DOs, DDSs):
3637
self._DOs[DO].setText(virtual_label)
3738
self._DOs[DO].last_DO = None
3839

40+
for EO in self._EOs.keys():
41+
if self._EOs[EO] is None:
42+
chan = self._blacs_tablist[EO[0]].get_channel(EO[1])
43+
orig_label = chan.name.split('-')
44+
virtual_label = '%s\n%s' % (EO[0]+'.'+orig_label[0], orig_label[1])
45+
self._EOs[EO] = chan.create_widget(virtual_label, False, None)
46+
self._EOs[EO].last_AO = None
47+
3948
for DDS in self._DDSs.keys():
4049
if self._DDSs[DDS] is None:
4150
chan = self._blacs_tablist[DDS[0]].get_channel(DDS[1])
@@ -48,6 +57,8 @@ def create_widgets(self, blacs_tablist, AOs, DOs, DDSs):
4857
self.place_widget_group('Analog Outputs', [v for k, v in self._AOs.items()])
4958
if len(self._DOs) > 0:
5059
self.place_widget_group('Digital Outputs', [v for k, v in self._DOs.items()])
60+
if len(self._EOs) > 0:
61+
self.place_widget_group('Enum Outputs', [v for k, v in self._EOs.items()])
5162
if len(self._DDSs) > 0:
5263
self.place_widget_group('DDS Outputs', [v for k, v in self._DDSs.items()])
5364

@@ -68,6 +79,11 @@ def connect_widgets(self):
6879
new_DO = self._blacs_tablist[DO[0]].get_channel(DO[1])
6980
if self._DOs[DO].get_DO() is None and self._DOs[DO].last_DO != new_DO:
7081
self._DOs[DO].set_DO(new_DO)
82+
for EO in self._EOs.keys():
83+
if self._EOs[EO] is not None:
84+
new_EO = self._blacs_tablist[EO[0]].get_channel(EO[1])
85+
if self._EOs[EO].get_EO() is None and self._EOs[EO].last_EO != new_EO:
86+
self._EOs[EO].set_EO(new_EO)
7187
for DDS in self._DDSs.keys():
7288
if self._DDSs[DDS] is not None:
7389
new_DDS = self._blacs_tablist[DDS[0]].get_channel(DDS[1])
@@ -87,6 +103,10 @@ def disconnect_widgets(self, closing_device_name):
87103
if DO[0] == closing_device_name:
88104
self._DOs[DO].last_DO = self._DOs[DO].get_DO()
89105
self._DOs[DO].set_DO(None)
106+
for EO in self._EOs.keys():
107+
if EO[0] == closing_device_name:
108+
self._EOs[EO].last_EO = self._EOs[EO].get_EO()
109+
self._EOs[EO].set_EO(None)
90110
for DDS in self._DDSs.keys():
91111
if DDS[0] == closing_device_name:
92112
old_DDS = self._blacs_tablist[DDS[0]].get_channel(DDS[1])

0 commit comments

Comments
 (0)