-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVFP.py
189 lines (149 loc) · 7.34 KB
/
VFP.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
from PyQt4 import QtCore as core, QtGui as gui
import sys,math,time
from devices.ad5764_dcbox_VFP import ad5764_dcbox_VFP_widget
from devices.ad5764_acbox_VFP import ad5764_acbox_VFP_widget
from devices.quad_ad5780_VFP import quad_ad5780_VFP_widget
from devices.dac_adc_VFP import dac_adc_VFP_widget
from devices.widgets import panelShell
global serverNameAD5764_DCBOX; serverNameAD5764_DCBOX = "ad5764_dcbox"
global serverNameAD5764_ACBOX; serverNameAD5764_ACBOX = "ad5764_acbox"
global serverNameQuadAD5780 ; serverNameQuadAD5780 = "dcbox_quad_ad5780"
global serverNameDacAdc ; serverNameDacAdc = "dac_adc"
def listenerIDGen():
ID = 10000
while True:
yield ID
ID += 1
class interface(gui.QWidget):
def __init__(self,ll=96,ls=23,iw=32,bl=75):
super(interface,self).__init__()
self.setWindowTitle("Virtual Front Panel")
self.ID = listenerIDGen()
self.connect()
def connect(self):
import labrad
self.connection = labrad.connect()
self.password = None
self.doUI()
#gui.qApp.quit()
def closeEvent(self,event):
print("Stopping LabRAD connection...")
self.connection.disconnect()
print("LabRAD connection stopped.")
def does_directory_exist(self,directory):
for end in range(1,len(directory)):
self.connection.registry.cd(directory[:end])
if not (directory[end] in self.connection.registry.dir()[0]):
return False
return True
def fetch_devices(self,serverName):
if not self.does_directory_exist(['','Servers',serverName,'Links']):
print("The registry has not been set up to handle '%s' devices. Please make sure they are running, then use the Serial Device Manager client."%serverName)
return []
self.connection.registry.cd(['','Servers',serverName,'Links'])
keys = self.connection.registry.dir()[1]
return [[key,self.connection.registry.get(key)] for key in keys]
def setEditingPermission(self,permission):
if permission:
for dev in self.ad5764_dcbox_devices+self.ad5764_acbox_devices+self.quad_ad5780_devices+self.dac_adc_devices:
dev.setEditingEnabled(True)
dev.childWidget.setEditingPermission(True)
else:
for dev in self.ad5764_dcbox_devices+self.ad5764_acbox_devices+self.quad_ad5780_devices+self.dac_adc_devices:
dev.setEditingEnabled(False)
dev.childWidget.setEditingPermission(False)
def doUI(self):
self.vBoxPanels = gui.QVBoxLayout()
self.vBoxPanels.setSpacing(24)
self.boxEditingPermission = gui.QCheckBox("Enable label editing",None)
self.boxEditingPermission.setCheckState(2)
self.boxEditingPermission.stateChanged.connect(self.setEditingPermission)
self.vBoxPanels.addWidget(self.boxEditingPermission)
servers = str(self.connection.servers).splitlines()
#print(servers)
self.ad5764_dcbox_devices = []
if serverNameAD5764_DCBOX in servers:
self.ad5764_dcbox = True
devices = self.fetch_devices(serverNameAD5764_DCBOX)
for device in devices:
port = device[1][1]
name = device[0]
try:
devID = [dev[0] for dev in self.connection[serverNameAD5764_DCBOX].list_devices() if dev[1].endswith('(%s)'%port)][0]
except:
# if it the corresponding device isn't active...
continue
ad5764_dcbox_device = ad5764_dcbox_VFP_widget(self,self.connection,port,devID,self.ID)
ad5764_dcbox_shell = panelShell()
ad5764_dcbox_shell.labelTitle.setText(name)
ad5764_dcbox_shell.setChildWidget(ad5764_dcbox_device)
self.ad5764_dcbox_devices.append(ad5764_dcbox_shell)
self.vBoxPanels.addWidget(self.ad5764_dcbox_devices[-1])#,name)
else:self.ad5764_dcbox=False
self.ad5764_acbox_devices = []
if serverNameAD5764_ACBOX in servers:
self.ad5764_acbox=True
devices = self.fetch_devices(serverNameAD5764_ACBOX)
for device in devices:
port = device[1][1]
name = device[0]
try:
devID = [dev[0] for dev in self.connection[serverNameAD5764_ACBOX].list_devices() if dev[1].endswith('(%s)'%port)][0]
except:
# if it the corresponding device isn't active...
continue
ad5764_acbox_device = ad5764_acbox_VFP_widget(self,self.connection,port,devID,self.ID)
ad5764_acbox_shell = panelShell()
ad5764_acbox_shell.labelTitle.setText(name)
ad5764_acbox_shell.setChildWidget(ad5764_acbox_device)
self.ad5764_acbox_devices.append(ad5764_acbox_shell)
self.vBoxPanels.addWidget(self.ad5764_acbox_devices[-1])#,name)
else:self.ad5764_acbox=False
self.quad_ad5780_devices = []
if serverNameQuadAD5780 in servers:
self.quad_ad5780 = True
devices = self.fetch_devices(serverNameQuadAD5780)
for device in devices:
port = device[1][1]
name = device[0]
try:
devID = [dev[0] for dev in self.connection[serverNameQuadAD5780].list_devices() if dev[1].endswith('(%s)'%port)][0]
except:
# if it the corresponding device isn't active...
continue
quad_ad5780_device = quad_ad5780_VFP_widget(self,self.connection,port,devID,self.ID)
quad_ad5780_shell = panelShell()
quad_ad5780_shell.labelTitle.setText(name)
quad_ad5780_shell.setChildWidget(quad_ad5780_device)
self.quad_ad5780_devices.append(quad_ad5780_shell)
self.vBoxPanels.addWidget(self.quad_ad5780_devices[-1])
else:self.quad_ad5780=False
self.dac_adc_devices = []
if serverNameDacAdc in servers:
self.dac_adc = True
devices = self.fetch_devices(serverNameDacAdc)
for device in devices:
port = device[1][1]
name = device[0]
try:
devID = [dev[0] for dev in self.connection[serverNameDacAdc].list_devices() if dev[1].endswith('(%s)'%port)][0]
except:
# if it the corresponding device isn't active...
continue
dac_adc_device = dac_adc_VFP_widget(self,self.connection,port,devID,self.ID)
dac_adc_shell = panelShell()
dac_adc_shell.labelTitle.setText(name)
dac_adc_shell.setChildWidget(dac_adc_device)
self.dac_adc_devices.append(dac_adc_shell)
self.vBoxPanels.addWidget(self.dac_adc_devices[-1])
else:self.dac_adc=False
self.layout = gui.QHBoxLayout()
#self.layout.addWidget(self.)
self.layout.addLayout(self.vBoxPanels)
self.setLayout(self.layout)
self.move(2,2)
self.show()
if __name__=='__main__':
app = gui.QApplication(sys.argv)
i = interface()
sys.exit(app.exec_())