diff --git a/dstat-interface/dstat_comm.py b/dstat-interface/dstat_comm.py index 931e163d85f3e8ef20e1242245b4ea200be87a59..889fb51dd5a547c588881bb8596ce8d08548714c 100644 --- a/dstat-interface/dstat_comm.py +++ b/dstat-interface/dstat_comm.py @@ -73,6 +73,90 @@ def version_check(ser_port): return (int(parted[0]), int(parted[1])) +def read_light_sensor(): + """Tries to contact DStat and get light sensor reading. Returns uint of + light sensor clear channel. + """ + + serial_instance.flushInput() + serial_instance.write('!') + + while not serial_instance.read()=="C": + time.sleep(.5) + serial_instance.write('!') + + + serial_instance.write('T') + for line in serial_instance: + if line.lstrip().startswith('T'): + input = line.lstrip().lstrip('T') + elif line.startswith("#"): + print line + elif line.lstrip().startswith("no"): + print line + serial_instance.flushInput() + break + + parted = input.rstrip().split('.') + print parted + + return int(parted[0]) + +def read_settings(): + """Tries to contact DStat and get settings. Returns dict of + settings. + """ + + global settings + settings = {} + + serial_instance.flushInput() + serial_instance.write('!') + + while not serial_instance.read()=="C": + time.sleep(.5) + serial_instance.write('!') + + serial_instance.write('SR') + for line in serial_instance: + if line.lstrip().startswith('S'): + input = line.lstrip().lstrip('S') + elif line.startswith("#"): + print line + elif line.lstrip().startswith("no"): + print line + serial_instance.flushInput() + break + + parted = input.rstrip().split(':') + + for i in range(len(parted)): + settings[parted[i].split('.')[0]] = [i, parted[i].split('.')[1]] + + return + +def write_settings(): + """Tries to write settings to DStat from global settings var. + """ + + serial_instance.flushInput() + serial_instance.write('!') + + while not serial_instance.read()=="C": + time.sleep(.5) + serial_instance.write('!') + + write_buffer = range(len(settings)) + + for i in settings: # make sure settings are in right order + write_buffer[settings[i][0]] = settings[i][1] + + serial_instance.write('SW') + for i in write_buffer: + serial_instance.write(i) + serial_instance.write(' ') + + return class delayedSerial(serial.Serial): @@ -138,6 +222,8 @@ class Experiment(object): self.commands[0] += " " self.commands[1] += (self.parameters['gain']) self.commands[1] += " " + self.commands[1] += (self.parameters['re_short']) + self.commands[1] += " " def run(self): """Execute experiment. Connects and sends handshake signal to DStat diff --git a/dstat-interface/interface/adc_pot.glade b/dstat-interface/interface/adc_pot.glade index b40362d95775d57530d4092aedff77a0b9143024..6cb4371f8439ff8abab2a961c56f74e3a5ada646 100644 --- a/dstat-interface/interface/adc_pot.glade +++ b/dstat-interface/interface/adc_pot.glade @@ -220,7 +220,7 @@ True False - 3 + 4 2 2 @@ -294,6 +294,33 @@ 2 + + + True + False + Short CE and RE terminals together. + 2 Electrode Mode + + + 3 + 4 + + + + + True + True + False + True + + + 1 + 2 + 3 + 4 + GTK_EXPAND + + diff --git a/dstat-interface/interface/adc_pot.py b/dstat-interface/interface/adc_pot.py index e3888986f6c94e04ccd5b83282e1b26897102070..6fdbd598d6b09238110150b51cff247779738241 100644 --- a/dstat-interface/interface/adc_pot.py +++ b/dstat-interface/interface/adc_pot.py @@ -46,6 +46,7 @@ class adc_pot: self.cell = gtk.CellRendererText() self.buffer_toggle = self.builder.get_object('buffer_checkbutton') + self.short_toggle = self.builder.get_object('short_checkbutton') #initialize comboboxes self.pga_combobox = self.builder.get_object('pga_combobox') diff --git a/dstat-interface/interface/exp_int.py b/dstat-interface/interface/exp_int.py index 7b75ee6a2195c76bed70327c3c40621adc53eee6..045046265762e465d9a8b5a9aa48693f1db68b23 100644 --- a/dstat-interface/interface/exp_int.py +++ b/dstat-interface/interface/exp_int.py @@ -17,7 +17,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import os, sys import gtk +import dstat_comm +import __main__ +import gobject class ExpInterface(object): """Generic experiment interface class. Should be subclassed to implement @@ -202,12 +206,35 @@ class PD(ExpInterface): self.entry['voltage'] = self.builder.get_object('voltage_adjustment') self.entry['time'] = self.builder.get_object('time_entry') + self.entry['interlock'] = self.builder.get_object('interlock_button') + + def on_light_button_clicked(self, data=None): + __main__.MAIN.on_pot_stop_clicked() + gobject.source_remove(__main__.MAIN.ocp_proc) + self.builder.get_object('light_label').set_text(str( + dstat_comm.read_light_sensor())) + dstat_comm.read_settings() + self.builder.get_object('threshold_entry').set_text(str( + dstat_comm.settings['tcs_clear_threshold'][1])) + __main__.MAIN.start_ocp() + + def on_threshold_button_clicked(self, data=None): + __main__.MAIN.on_pot_stop_clicked() + gobject.source_remove(__main__.MAIN.ocp_proc) + dstat_comm.settings['tcs_clear_threshold'][1] = self.builder.get_object( + 'threshold_entry').get_text() + dstat_comm.write_settings() + dstat_comm.read_settings() + self.builder.get_object('threshold_entry').set_text( + str(dstat_comm.settings['tcs_clear_threshold'][1])) + __main__.MAIN.start_ocp() def get_params(self): """Returns a dict of parameters for experiment.""" parameters = {} parameters['voltage'] = int(self.entry['voltage'].get_value()) parameters['time'] = int(self.entry['time'].get_text()) + parameters['interlock'] = self.entry['interlock'].get_active() return parameters diff --git a/dstat-interface/interface/pd.glade b/dstat-interface/interface/pd.glade index 10be2295f0cc9f1425cb7a4bad8ce086ab75da9a..05c104ee40a272331da1d1d23df88aa81414b4d1 100644 --- a/dstat-interface/interface/pd.glade +++ b/dstat-interface/interface/pd.glade @@ -131,6 +131,7 @@ True True True + 4 @@ -169,6 +170,7 @@ True True True + 5 diff --git a/dstat-interface/main.py b/dstat-interface/main.py index e079e24ac395a61d3bb9f1ce2e588960771fdf8b..dc3602e2ac847692c2ce7526b462409a4680342c 100755 --- a/dstat-interface/main.py +++ b/dstat-interface/main.py @@ -176,8 +176,7 @@ class Main(object): 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.version = version_list self.statusbar.remove_all(self.error_context_id) @@ -191,6 +190,7 @@ class Main(object): "".join(["DStat version: ", str(self.version[0]), ".", str(self.version[1])]) ) + comm.read_settings() self.start_ocp() self.connected = True self.serial_connect.set_sensitive(False) @@ -253,6 +253,11 @@ class Main(object): parameters['adc_buffer'] = "2" else: parameters['adc_buffer'] = "0" + + if self.adc_pot.short_toggle.get_active(): + parameters['re_short'] = "1" + else: + parameters['re_short'] = "0" srate_model = self.adc_pot.srate_combobox.get_model() pga_model = self.adc_pot.pga_combobox.get_model()