Skip to content
Snippets Groups Projects
Commit c6924da8 authored by Michael DM Dryden's avatar Michael DM Dryden
Browse files

Move serial connection to single instance. Add Disconnect button.

parent 6c9bfcf5
Branches
No related merge requests found
......@@ -38,14 +38,14 @@ def call_it(instance, name, args=(), kwargs=None):
return getattr(instance, name)(*args, **kwargs)
def version_check(ser_port):
"""Tries to contact DStat and get version. Returns a tuple of
(major, minor). If no response, returns empty tuple.
"""Tries to contact DStat and get version. Returns a list of
[(major, minor), serial instance]. If no response, returns empty tuple.
Arguments:
ser_port -- address of serial port to use
"""
ser = delayedSerial(ser_port, 1024000, timeout=1)
ser = delayedSerial(ser_port, baudrate=1000000, timeout=1)
ser.write("ck")
ser.flushInput()
......@@ -70,9 +70,7 @@ def version_check(ser_port):
parted = input.rstrip().split('.')
print parted
ser.close()
return (int(parted[0]), int(parted[1]))
return [(int(parted[0]), int(parted[1])), ser]
......@@ -140,17 +138,16 @@ class Experiment(object):
self.commands[1] += (self.parameters['gain'])
self.commands[1] += " "
def run(self, ser_port):
def run(self, ser):
"""Execute experiment. Connects and sends handshake signal to DStat
then sends self.commands. Don't call directly as a process in Windows,
use run_wrapper instead.
Arguments:
ser_port -- address of serial port to use
ser -- serial instance to use
"""
self.serial = delayedSerial(ser_port, 1024000, timeout=1)
self.serial = ser
self.serial.write("ck")
self.serial.flushInput()
for i in self.commands:
......@@ -166,7 +163,6 @@ class Experiment(object):
break
self.data_postprocessing()
self.serial.close()
self.main_pipe.close()
def serial_handler(self):
......
......@@ -1216,13 +1216,13 @@ Thanks to Christian Fobel for help with Dropbot Plugin</property>
</packing>
</child>
<child>
<object class="GtkButton" id="serial_version">
<object class="GtkButton" id="serial_connect">
<property name="label">gtk-connect</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_serial_version_clicked" swapped="no"/>
<signal name="clicked" handler="on_serial_connect_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
......@@ -1230,6 +1230,21 @@ Thanks to Christian Fobel for help with Dropbot Plugin</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="serial_disconnect">
<property name="label">gtk-disconnect</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_serial_disconnect_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="ocp_disp">
<property name="visible">True</property>
......@@ -1242,7 +1257,7 @@ Thanks to Christian Fobel for help with Dropbot Plugin</property>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">4</property>
<property name="position">5</property>
</packing>
</child>
<child>
......@@ -1254,7 +1269,7 @@ Thanks to Christian Fobel for help with Dropbot Plugin</property>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">5</property>
<property name="position">6</property>
</packing>
</child>
</object>
......
......@@ -92,6 +92,9 @@ class Main(object):
self.adc_pot_container.reparent(self.adc_pot_box)
#fill serial
self.serial_connect = self.builder.get_object('serial_connect')
self.serial_disconnect = self.builder.get_object('serial_disconnect')
self.serial_disconnect.set_sensitive(False)
self.serial_combobox = self.builder.get_object('serial_combobox')
self.serial_combobox.pack_start(self.cell, True)
self.serial_combobox.add_attribute(self.cell, 'text', 0)
......@@ -132,11 +135,13 @@ class Main(object):
def on_window1_destroy(self, object, data=None):
""" Quit when main window closed."""
self.on_pot_stop_clicked()
self.on_serial_disconnect_clicked()
gtk.main_quit()
def on_gtk_quit_activate(self, menuitem, data=None):
"""Quit when Quit selected from menu."""
self.on_pot_stop_clicked()
self.on_serial_disconnect_clicked()
gtk.main_quit()
def on_gtk_about_activate(self, menuitem, data=None):
......@@ -161,15 +166,18 @@ class Main(object):
for i in self.serial_devices.ports:
self.serial_liststore.append([i])
def on_serial_version_clicked(self, data=None):
"""Retrieve DStat version."""
def on_serial_connect_clicked(self, data=None):
"""Connect and retrieve DStat version."""
try:
self.on_pot_stop_clicked()
except AttributeError:
pass
self.version = comm.version_check(self.serial_liststore.get_value(
version_list = comm.version_check(self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.version = version_list[0]
self.serial = version_list[1]
self.statusbar.remove_all(self.error_context_id)
......@@ -185,6 +193,24 @@ class Main(object):
)
self.start_ocp()
self.connected = True
self.serial_connect.set_sensitive(False)
self.serial_disconnect.set_sensitive(True)
def on_serial_disconnect_clicked(self, data=None):
"""Disconnect from DStat."""
try:
self.on_pot_stop_clicked()
except AttributeError:
pass
# Stop OCP measurements
gobject.source_remove(self.ocp_proc)
self.serial.close()
del(self.serial)
self.connected = False
self.serial_connect.set_sensitive(True)
self.serial_disconnect.set_sensitive(False)
def start_ocp(self):
"""Start OCP measurements."""
......@@ -192,8 +218,7 @@ class Main(object):
self.recv_p, self.send_p = multiprocessing.Pipe(duplex=True)
self.ocp_exp = comm.OCPExp(self.send_p)
self.ocp_exp.run_wrapper(self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.ocp_exp.run_wrapper(self.serial)
self.send_p.close() # need for EOF signal to work
......@@ -270,8 +295,7 @@ class Main(object):
for i in self.current_exp.commands:
self.rawbuffer.insert_at_cursor(i)
self.current_exp.run_wrapper(self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.current_exp.run_wrapper(self.serial)
self.send_p.close() # need for EOF signal to work
......@@ -317,9 +341,7 @@ class Main(object):
self.plot.clearall()
self.plot.changetype(self.current_exp)
self.current_exp.run_wrapper(
self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.current_exp.run_wrapper(self.serial)
self.send_p.close()
......@@ -371,9 +393,7 @@ class Main(object):
self.plot.clearall()
self.plot.changetype(self.current_exp)
self.current_exp.run_wrapper(
self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.current_exp.run_wrapper(self.serial)
self.send_p.close()
......@@ -434,9 +454,7 @@ class Main(object):
self.plot.clearall()
self.plot.changetype(self.current_exp)
self.current_exp.run_wrapper(
self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.current_exp.run_wrapper(self.serial)
self.send_p.close()
......@@ -493,9 +511,7 @@ class Main(object):
self.plot.clearall()
self.plot.changetype(self.current_exp)
self.current_exp.run_wrapper(
self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.current_exp.run_wrapper(self.serial)
self.send_p.close()
......@@ -520,9 +536,7 @@ class Main(object):
self.plot.clearall()
self.plot.changetype(self.current_exp)
self.current_exp.run_wrapper(
self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.current_exp.run_wrapper(self.serial)
self.send_p.close()
......@@ -553,9 +567,7 @@ class Main(object):
self.plot.clearall()
self.plot.changetype(self.current_exp)
self.current_exp.run_wrapper(
self.serial_liststore.get_value(
self.serial_combobox.get_active_iter(), 0))
self.current_exp.run_wrapper(self.serial)
self.send_p.close()
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment