diff --git a/dstat-interface/dstat_comm.py b/dstat-interface/dstat_comm.py
index fab46b668b728a22e8a735cba4989b830960df3f..e17b9b062504a35deb40b7576fb2fd4d44766b40 100644
--- a/dstat-interface/dstat_comm.py
+++ b/dstat-interface/dstat_comm.py
@@ -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):
diff --git a/dstat-interface/interface/dstatinterface.glade b/dstat-interface/interface/dstatinterface.glade
index 8a43fb82c14bf3f86517d42992cf2beeb1310d82..e3cb0d6013ab31b986b3416a8b358fba30b190b8 100644
--- a/dstat-interface/interface/dstatinterface.glade
+++ b/dstat-interface/interface/dstatinterface.glade
@@ -1216,13 +1216,13 @@ Thanks to Christian Fobel for help with Dropbot Plugin
-
+
+
+ gtk-disconnect
+ True
+ True
+ True
+ True
+
+
+
+ False
+ False
+ 4
+
+
True
@@ -1242,7 +1257,7 @@ Thanks to Christian Fobel for help with Dropbot Plugin
False
False
- 4
+ 5
@@ -1254,7 +1269,7 @@ Thanks to Christian Fobel for help with Dropbot Plugin
True
True
- 5
+ 6
diff --git a/dstat-interface/main.py b/dstat-interface/main.py
index 0bf67c7855d8db993c6f924466e42bd4ac608f92..2e477f9551a2ea982a933bf3293d87e5e3d44d93 100755
--- a/dstat-interface/main.py
+++ b/dstat-interface/main.py
@@ -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()