-
Notifications
You must be signed in to change notification settings - Fork 0
/
multi_control.py
123 lines (92 loc) · 3.76 KB
/
multi_control.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
""" multiple control element logic. Used for displaying multiple
bluegraph widgets in a single application.
"""
import sys
import numpy
import logging
from PySide import QtCore, QtGui
from bluegraph import views
from bluegraph import utils
from bluegraph.devices import DeviceWrappers
log = logging.getLogger(__name__)
class SensorsController(object):
def __init__(self, device_class="Simulation",
device_type="RegulatedSpectra",
device_args=None,
title=None):
if title == None:
title = device_type.upper()
self.form = views.MultiGraphLayout()
self.amps_graph = views.PixmapBackedGraph("AMPS", icon="default")
self.form.vbox.addWidget(self.amps_graph)
self.ir_temp = views.PixmapBackedGraph("IR TEMP", icon="ir_temp")
self.form.vbox.addWidget(self.ir_temp)
self.humidity = views.PixmapBackedGraph("HUMIDITY", icon="humidity")
self.form.vbox.addWidget(self.humidity)
self.sensor_list = []
self.sensor_list.append(self.amps_graph)
self.sensor_list.append(self.ir_temp)
self.sensor_list.append(self.humidity)
self.render_fps = utils.SimpleFPS()
self.data_fps = utils.SimpleFPS()
dev_wrap = DeviceWrappers.DeviceChooser()
device_class = "DeviceWrappers"
device_type = "NonBlockingInterface"
device_args = "Simulation.StripChartDevice"
for sensor in self.sensor_list:
sensor.device = dev_wrap.create(device_class, device_type,
device_args)
sensor.device.connect()
self.setup_fps_timers()
self.connect_signals()
def connect_signals(self):
""" Hook into GUI control signals from main controller.
"""
self.form.exit_signal.exit.connect(self.close)
class ControlClose(QtCore.QObject):
exit = QtCore.Signal(str)
self.control_exit_signal = ControlClose()
def close(self, event):
""" Cleanup and exit. Don't issue qapplication quit here,
as that will terminate the qapplication during tests. Use the
qapplication control from py.test.
"""
log.debug("blue graph controller level close")
print("blue graph controller level close")
for sensor in self.sensor_list:
sensor.device.disconnect()
self.control_exit_signal.exit.emit("control exit")
def setup_fps_timers(self):
""" Update the display Frames per second at every qt event
timeout.
"""
self.data_timer = QtCore.QTimer()
self.data_timer.timeout.connect(self.update_fps)
self.data_timer.setSingleShot(True)
self.data_timer.start(0)
def update_fps(self):
""" Add tick, display the current rate.
"""
for sensor in self.sensor_list:
rnd_data = sensor.device.read()
if rnd_data is not None:
sensor.curve.setData(rnd_data)
self.data_fps.tick()
self.update_min_max(sensor, rnd_data)
self.show_fps(sensor)
self.render_fps.tick()
self.data_timer.start(0)
def show_fps(self, sensor):
""" Primitive fps calculations of data and render fps.
"""
new_fps = "D: %s\nR: %s" % (self.data_fps.rate(),
self.render_fps.rate())
sensor.graphback.view_fps.setText(new_fps)
def update_min_max(self, sensor, rnd_data):
""" Show the current min and maximum values in the interface
controls.
"""
min_conv = numpy.min(rnd_data)
sensor.graphback.minimum.setText(min_conv)
max_conv = numpy.max(rnd_data)
sensor.graphback.maximum.setText(max_conv)