def __init__(self, **kwargs): super(ROACH, self).__init__(kwargs=kwargs) self.config_manager = LoadSaveConfig(os.path.dirname(os.path.realpath(__file__)) + '/roach_configurations') big_one = BoxLayout(orientation='vertical') self.reg_array = {} self.reg_cont = 0 self.bram_array = {} self.bram_cont = 0 #self.snapshot_array = {} #self.snapshot_cont = 0 self.prog_dev = False self.bof_path = '' self.sources = [] self.function = [] # reg layout roach_connection_info = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) roach_register = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,40)) ip_label = Label(text='IP :') port_label = Label(text='Port :') self.ip = TextInput(multiline=False) self.port = TextInput(multiline=False, Text='7417') roach_connection_info.add_widget(ip_label) roach_connection_info.add_widget(self.ip) roach_connection_info.add_widget(port_label) roach_connection_info.add_widget(self.port) clear_button = Button(text='clear', size_hint=(0.33,1)) save_button = Button(text='save', size_hint=(0.33,1)) clear_button.bind(on_press=self.clear_button) save_button.bind(on_press=self.button_save_all) self.program_button = ToggleButton(text='program', size_hint=(0.33,1)) buttons_layout = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) buttons_layout.add_widget(clear_button) buttons_layout.add_widget(save_button) buttons_layout.add_widget(self.program_button) new_reg_label = Label(text='Initial Values', size_hint=(0.6,None), height=40) new_reg = Button(text='new reg', size_hint=(0.4,None), height=40) new_reg.bind(on_press=self.add_registers) roach_register.add_widget(new_reg_label) roach_register.add_widget(new_reg) ##### Regiter container self.reg_container = GridLayout(cols=1, spacing=0, size_hint_y=None)#row_default_height=30) self.reg_container.bind(minimum_height=self.reg_container.setter('height')) scroll_root = ScrollView(size_hint=(1,1), size=(1, 125)) scroll_root.add_widget(self.reg_container) #### free_running_label_layout = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) add_free_running_label = Label(text="Free Running", size_hint=(0.45,1)) free_running_label_layout.add_widget(add_free_running_label) free_running = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) add_free_running_bram = Button(text = 'New BRAM', size_hint=(0.30,1)) add_free_running_reg = Button(text = 'New Reg', size_hint=(0.25,1)) add_free_running_snapshot = Button(text = 'SnapShot', size_hint=(0.25,1)) add_free_running_bram.bind(on_press=self.add_free_running) add_free_running_reg.bind(on_press=self.add_register_free_running) add_free_running_snapshot.bind(on_press=self.add_snapshot_free_running) free_running.add_widget(add_free_running_bram) free_running.add_widget(add_free_running_reg) free_running.add_widget(add_free_running_snapshot) #### free run container self.free_run_container = GridLayout(cols=1, spacing = 3,size_hint=(1,None), size=(1,30)) self.free_run_container.bind(minimum_height=self.free_run_container.setter('height')) scroll_root_free_run = ScrollView(size_hint=(1,1), size=(1,195), scroll_type=['bars']) scroll_root_free_run.add_widget(self.free_run_container) scroll_root_free_run.bar_width = 10 #### size_ = 30 name_config = Button(text='Name',size_hint=(0.25,None), height=size_) self.name_config_input = TextInput(size_hint=(0.5,None), height=size_) buton_bof_file = Button(text='Add bof',size_hint=(0.25,None), height=size_) print os.path.dirname(os.path.realpath(__file__)) + '/roach_configurations' name_config.bind(on_press=self.open_look_directory) fc = BofFileChooserIconView(self.set_bof_path) self.file_choose_popup = Popup(title='Choose Bof', auto_dismiss=False, content=fc,\ size_hint=(None, None), size=(400,400)) fc.set_popup(self.file_choose_popup) buton_bof_file.bind(on_press=self.file_choose_popup.open) name = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) name.add_widget(name_config) name.add_widget(self.name_config_input) name.add_widget(buton_bof_file) ## store or plot big_one.add_widget(name) big_one.add_widget(roach_connection_info) big_one.add_widget(buttons_layout) big_one.add_widget(roach_register) big_one.add_widget(scroll_root) big_one.add_widget(free_running_label_layout) big_one.add_widget(free_running) big_one.add_widget(scroll_root_free_run) padding_layout = BoxLayout() #big_one.add_widget(padding_layout) self.add_widget(big_one) self.do_extraction = None
class ROACH(Empty): def __init__(self, **kwargs): super(ROACH, self).__init__(kwargs=kwargs) self.config_manager = LoadSaveConfig(os.path.dirname(os.path.realpath(__file__)) + '/roach_configurations') big_one = BoxLayout(orientation='vertical') self.reg_array = {} self.reg_cont = 0 self.bram_array = {} self.bram_cont = 0 #self.snapshot_array = {} #self.snapshot_cont = 0 self.prog_dev = False self.bof_path = '' self.sources = [] self.function = [] # reg layout roach_connection_info = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) roach_register = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,40)) ip_label = Label(text='IP :') port_label = Label(text='Port :') self.ip = TextInput(multiline=False) self.port = TextInput(multiline=False, Text='7417') roach_connection_info.add_widget(ip_label) roach_connection_info.add_widget(self.ip) roach_connection_info.add_widget(port_label) roach_connection_info.add_widget(self.port) clear_button = Button(text='clear', size_hint=(0.33,1)) save_button = Button(text='save', size_hint=(0.33,1)) clear_button.bind(on_press=self.clear_button) save_button.bind(on_press=self.button_save_all) self.program_button = ToggleButton(text='program', size_hint=(0.33,1)) buttons_layout = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) buttons_layout.add_widget(clear_button) buttons_layout.add_widget(save_button) buttons_layout.add_widget(self.program_button) new_reg_label = Label(text='Initial Values', size_hint=(0.6,None), height=40) new_reg = Button(text='new reg', size_hint=(0.4,None), height=40) new_reg.bind(on_press=self.add_registers) roach_register.add_widget(new_reg_label) roach_register.add_widget(new_reg) ##### Regiter container self.reg_container = GridLayout(cols=1, spacing=0, size_hint_y=None)#row_default_height=30) self.reg_container.bind(minimum_height=self.reg_container.setter('height')) scroll_root = ScrollView(size_hint=(1,1), size=(1, 125)) scroll_root.add_widget(self.reg_container) #### free_running_label_layout = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) add_free_running_label = Label(text="Free Running", size_hint=(0.45,1)) free_running_label_layout.add_widget(add_free_running_label) free_running = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) add_free_running_bram = Button(text = 'New BRAM', size_hint=(0.30,1)) add_free_running_reg = Button(text = 'New Reg', size_hint=(0.25,1)) add_free_running_snapshot = Button(text = 'SnapShot', size_hint=(0.25,1)) add_free_running_bram.bind(on_press=self.add_free_running) add_free_running_reg.bind(on_press=self.add_register_free_running) add_free_running_snapshot.bind(on_press=self.add_snapshot_free_running) free_running.add_widget(add_free_running_bram) free_running.add_widget(add_free_running_reg) free_running.add_widget(add_free_running_snapshot) #### free run container self.free_run_container = GridLayout(cols=1, spacing = 3,size_hint=(1,None), size=(1,30)) self.free_run_container.bind(minimum_height=self.free_run_container.setter('height')) scroll_root_free_run = ScrollView(size_hint=(1,1), size=(1,195), scroll_type=['bars']) scroll_root_free_run.add_widget(self.free_run_container) scroll_root_free_run.bar_width = 10 #### size_ = 30 name_config = Button(text='Name',size_hint=(0.25,None), height=size_) self.name_config_input = TextInput(size_hint=(0.5,None), height=size_) buton_bof_file = Button(text='Add bof',size_hint=(0.25,None), height=size_) print os.path.dirname(os.path.realpath(__file__)) + '/roach_configurations' name_config.bind(on_press=self.open_look_directory) fc = BofFileChooserIconView(self.set_bof_path) self.file_choose_popup = Popup(title='Choose Bof', auto_dismiss=False, content=fc,\ size_hint=(None, None), size=(400,400)) fc.set_popup(self.file_choose_popup) buton_bof_file.bind(on_press=self.file_choose_popup.open) name = BoxLayout(orientation='horizontal', size_hint=(1,None), size=(1,30)) name.add_widget(name_config) name.add_widget(self.name_config_input) name.add_widget(buton_bof_file) ## store or plot big_one.add_widget(name) big_one.add_widget(roach_connection_info) big_one.add_widget(buttons_layout) big_one.add_widget(roach_register) big_one.add_widget(scroll_root) big_one.add_widget(free_running_label_layout) big_one.add_widget(free_running) big_one.add_widget(scroll_root_free_run) padding_layout = BoxLayout() #big_one.add_widget(padding_layout) self.add_widget(big_one) self.do_extraction = None def open_look_directory(self, instance): fc_conf = BofFileChooserIconView(self.load_data, path=os.path.dirname(os.path.realpath(__file__)) + '/roach_configurations' , filter=['*.pkl']) self.file_roch_popup = Popup(title='Choose Configuration', auto_dismiss=False, content=fc_conf,\ size_hint=(None, None), size=(400,400)) fc_conf.set_popup(self.file_roch_popup) self.file_roch_popup.open() def add_register_free_running(self, instance): self.load_register_free_running('','') def load_register_free_running(self, value_, name_): bram = self.create_registers(value_, name_, self.free_run_container, self.remove_from_widget_list_free_run, \ str(self.bram_cont)) self.bram_array[str(self.bram_cont)] = bram bram.set_extraction_function(self.do_extraction) self.bram_cont += 1 def add_registers(self, instance): self.load_registers("","", self.reg_container) def load_registers(self, values_, name_, where_load_): reg_val = self.create_registers(values_, name_, where_load_, self.remove_from_widget_list_config, str(self.reg_cont)) self.reg_array[str(self.reg_cont)] = reg_val self.reg_cont += 1 def create_registers(self, values_, name_, where_load_, remove_function_, cont_key_): size_ = 30 data = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,size_)) label_name = Label(text='Name', size_hint=(0.225,None), height=size_) value_name = TextInput( size_hint=(0.225,None), height=size_) label_val = Label(text='Value', size_hint=(0.225,None), height=size_) value_val = TextInput( size_hint=(0.225,None), height=size_) delate = Button(text='-', size_hint=(0.1,None), height=size_) delate.bind(on_press=lambda instant:\ remove_function_(data, cont_key_))# where_load_.remove_widget(data)) data.add_widget(label_name) data.add_widget(value_name) data.add_widget(label_val) data.add_widget(value_val) data.add_widget(delate) value_name._set_text(name_) value_val._set_text(values_) where_load_.add_widget(data) return Register(value_name, value_val) def add_free_running(self, instance): self.load_free_running('i', '', [], '','') def is_active(self): return True def activate_extract(self, f): self.do_extraction = f def get_config(self): dic_return = {} regs = [] keys = self.reg_array.keys() keys.sort() for a_reg in keys: aux_data = self.reg_array[a_reg] reg_name = aux_data.get_name() reg_val = aux_data.get_value() regs.append((reg_name, reg_val)) dic_return['reg'] = regs brams = [] keys_ = self.bram_array.keys() keys_.sort() for bram in keys_: brams.append(self.bram_array[bram].info_dictionary()) dic_return['bram'] = brams dic_return['ip'] = self.ip._get_text() dic_return['port'] = self.port._get_text() dic_return['bof_path'] = self.bof_path dic_return['name'] = self.name_config_input._get_text() dic_return['progdev'] = True if self.program_button.state == 'down' else False source_dic_config = {} for a_source in self.sources: source_dic_config.update( a_source.save_config_dictionary()) dic_return['sources'] = source_dic_config function_dic_config = {} for a_function in self.function: function_dic_config.update(a_function.sava_config_dictionary()) dic_return['functions'] = function_dic_config dic_return['wich'] = self.which_roach() # this line saves the dictionary to file with pikle self.config_manager.store_dictionary(dic_return) dic_return['instance'] = self.get_controller_fpga_insctance() return dic_return def get_controller_fpga_insctance(self): pass def set_bof_path(self, path): if len(self.name_config_input.text) <1: Popup(content=Label(text='Enter Name'), size_hint=(None,None),size=(200,100)).open() return self.bof_path = self.config_manager.copy_bof_to_folder(path, self.name_config_input._get_text()) self.program_button.state = "down" def load_data(self, path): self.clean_all() dic = self.config_manager.load_dictionary(path) try: if dic['wich'] != self.which_roach(): return except: pass regs = dic['reg'] for a_reg in regs: self.load_registers(a_reg[1], a_reg[0], self.reg_container) brams = dic['bram'] for a_bram in brams: if a_bram['is_bram']: try: self.load_free_running(a_bram['data_type'],a_bram['size'],a_bram['bram_names'],a_bram['acc_len_reg'], \ a_bram['array_id'], a_bram['store'], a_bram['plot']) except: self.load_free_running(a_bram['data_type'],a_bram['size'],a_bram['bram_names'],a_bram['acc_len_reg'], \ a_bram['array_id']) else: if 'snap' in a_bram: self.load_snapshot_free_running(a_bram['name']) else: self.load_register_free_running(a_bram['reg_value'], a_bram['reg_name']) self.ip._set_text(dic['ip']) self.port._set_text(dic['port']) self.program_button.state = 'down' if dic['progdev'] else 'normal' self.bof_path = os.path.dirname(os.path.realpath(__file__)) + \ '/roach_configurations/' + dic['name'] + '/' + dic['name'] + '.bof' self.name_config_input._set_text(dic['name']) try: for a_source in self.sources: a_source.set_configuration(dic['sources']) except Exception as e: pass for a_function in self.function: a_function.set_configuration(dic['functions']) self.do_extraction() def load_free_running(self, a_data_type, array_size_, real_imag_list_, acc_len_reg_name_, array_label_, store_ = False, plot_ = False): size_ = 30 data = BoxLayout(orientation='vertical',size_hint=(1, None), size=(1,8*size_)) # plot_label = Label(text='Plot data:', size_hint=(0.4,1)) plot_toogle = ToggleButton(text='Plot Data', size_hint=(0.5,1)) store_data = ToggleButton(text='Store Data', size_hint=(0.5,1)) handle_data = BoxLayout(orientation='horizontal', size_hint=(1, None), size=(1, 30)) handle_data.add_widget(plot_toogle) handle_data.add_widget(store_data) data_type_label = Label(text='Tipo de Dato', size_hint=(0.4,None), height=size_) data_type_spinner = Spinner( # default value shown text=a_data_type, # available values values=['c', 'b', 'B', 'h', 'H', 'i', 'I', 'l', 'L', 'q', 'Q', 'f', 'd'], # just for positioning in our example size_hint=(0.3, None), size = (1, size_) ) delate_label = Label(text='Quitar', size_hint=(0.2,None), height=size_) delate_me = Button(text='-', size_hint=(0.1,None), height=size_) str_cont = str(self.bram_cont) delate_me.bind(on_press=lambda instance:self.remove_from_widget_list_free_run(data, str_cont)) id_label = Label(text='array name',size_hint=(0.45, None), height=size_) id_input = TextInput(size_hint=(0.45, None), height=size_) size_label = Label(text='size', size_hint=(0.45, None), height=size_) size_input = TextInput(size_hint=(0.45, None), height=size_) add_new_array_to_merge = Button(text='+',size_hint=(None, None), height=size_, wide = 3*size_) real_imag = GridLayout(cols=1, spacing = 3,size_hint=(1, None), size=(1,60)) real_imag.bind(minimum_height=real_imag.setter('height')) scroll_real_imag = ScrollView(size_hint=(0.8,None), size=(1,2*size_)) scroll_real_imag.add_widget(real_imag) acc_len_reg_name_label = Label(text='acc len reg_name',size_hint=(0.5,None), height=size_) acc_len_reg_name_input = TextInput(size_hint=(0.5, None), height=size_) data_type = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,size_)) data_type.add_widget(data_type_label) data_type.add_widget(data_type_spinner) data_type.add_widget(delate_label) data_type.add_widget(delate_me) data_id = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,size_)) data_id.add_widget(id_label) data_id.add_widget(id_input) data_size = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,size_)) data_size.add_widget(size_label) data_size.add_widget(size_input) data_add_merge_data = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,size_)) data_add_merge_data.add_widget(add_new_array_to_merge) data_name = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,2*size_)) data_name.add_widget(scroll_real_imag) data_acc_len_reg = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,size_)) data_acc_len_reg.add_widget(acc_len_reg_name_label) data_acc_len_reg.add_widget(acc_len_reg_name_input) data.add_widget(handle_data) data.add_widget(data_type) data.add_widget(data_id) data.add_widget(data_size) data.add_widget(data_add_merge_data) data.add_widget(data_name) data.add_widget(data_acc_len_reg) bram = BRAMArray( size_input, acc_len_reg_name_input,real_imag, id_input, data_type_spinner, store_data , plot_toogle) bram.set_extraction_function(self.do_extraction) add_new_array_to_merge.bind(on_press=lambda instance: bram.add_real_imag_widget()) self.bram_array[str(self.bram_cont)] = bram self.bram_cont += 1 self.free_run_container.add_widget(data) size_input._set_text(array_size_) acc_len_reg_name_input._set_text(acc_len_reg_name_) id_input._set_text(array_label_) store_data.state = 'down' if store_ else 'normal' plot_toogle.state = 'down' if plot_ else 'normal' for real_imag_pair in real_imag_list_: bram.load_real_imag_widget(real_imag_pair[0], real_imag_pair[1]) def remove_from_widget_list_free_run(self, widget_, list_cont_val_): self.free_run_container.remove_widget(widget_) del self.bram_array[list_cont_val_] def remove_from_widget_list_config(self, widget_, list_cont_val_): self.reg_container.remove_widget(widget_) del self.reg_array[list_cont_val_] def clean_all(self): self.free_run_container.clear_widgets() self.reg_container.clear_widgets() self.bram_array = {} self.reg_array = {} self.bram_cont = 0 self.reg_cont = 0 self.name_config_input.text = '' self.bof_path = '' self.ip.text = '' self.port.text = '' self.program_button.state = 'normal' def clear_button(self, inatance): self.clean_all() def button_save_all(self, instance): self.get_config() def pass_source(self, sources_): self.sources = sources_ def pass_functions(self, functions_): self.function = functions_ def which_roach(self): pass def add_snapshot_free_running(self, instance): self.load_snapshot_free_running('') def load_snapshot_free_running(self,snapshot_name_): size_ = 30 data = BoxLayout(orientation='horizontal',size_hint=(1, None), size=(1,size_)) snap_name_label = Label(text='Snap Name',size_hint=(0.4,None), height=size_) snap_name_value = TextInput(size_hint=(0.4,None), height=size_) snap_name_value.text = snapshot_name_ delate_me = Button(text='-',size_hint=(0.1,None), height=size_) str_cont = str(self.bram_cont) delate_me.bind(on_press=lambda instance:\ self.remove_from_widget_list_free_run(data, str_cont)) snap = SnapShot(snap_name_value) snap.set_extraction_function(self.do_extraction) data.add_widget(snap_name_label) data.add_widget(snap_name_value) data.add_widget(delate_me) self.free_run_container.add_widget(data) self.bram_array[str(self.bram_cont)] = snap self.bram_cont += 1