def save(self, reg_list): """ Converts the extracted data into register and bit field values, and loads the new data into the database. """ lookup = {'rw': BitField.READ_WRITE, 'w': BitField.WRITE_ONLY, 'r': BitField.READ_ONLY} for (reg_name, addr_txt, field_list) in reg_list: register = Register() register.address = int(addr_txt, 16) register.register_name = reg_name register.token = reg_name self.dbase.add_register(register) for item in field_list: field = BitField() field.field_name = item.name field.field_type = lookup.get(item.software_access, BitField.READ_ONLY) field.start_position = item.start field.stop_position = item.stop field.reset_value = item.reset field.description = item.description register.add_bit_field(field)
def save(self, reg_list): """ Converts the extracted data into register and bit field values, and loads the new data into the database. """ lookup = {'rw': BitField.TYPE_READ_WRITE, 'w': BitField.TYPE_WRITE_ONLY, 'r': BitField.TYPE_READ_ONLY} name_count = {} for reg in reg_list: for item in reg.field_list: if item.name in name_count: name_count[item.name] = name_count[item.name] + 1 else: name_count[item.name] = 1 duplicates = set([key for key in name_count if name_count[key] > 1]) current_duplicates = {} offset = self.dbase.data_bus_width / 8 for reg in reg_list: register = Register() register.address = reg.address register.register_name = reg.reg_name register.token = reg.token if not reg.description: register.description = reg.description else: register.description = reg.reg_name register.width = self.dbase.data_bus_width for item in reg.field_list: if item.name.startswith("OBSOLETE"): continue delta = (register.address % offset) * 8 if item.name in duplicates: if item.name in current_duplicates: index = current_duplicates[item.name] + 1 else: index = 1 current_duplicates[item.name] = index name = "%s_%d" % (item.name, index) else: name = item.name width = (item.stop - item.start) + 1 field = BitField() field.field_name = name field.field_type = lookup.get(item.software_access, BitField.READ_ONLY) field.start_position = item.start - delta field.stop_position = item.stop - delta field.reset_value = item.reset field.volatile = item.volatile field.description = item.description register.add_bit_field(field) self.dbase.add_register(register)
def save(self, reg_list): """ Converts the extracted data into register and bit field values, and loads the new data into the database. """ lookup = { '"rw"': BitField.TYPE_READ_WRITE, '"w"': BitField.TYPE_WRITE_ONLY, '"r"': BitField.TYPE_READ_ONLY } for (reg_name, addr_txt, width, field_list) in reg_list: register = Register() register.address = int(addr_txt, 16) register.register_name = reg_name register.width = width register.token = reg_name self.dbase.add_register(register) for item in field_list: field = BitField() field.field_name = item.name try: field.field_type = lookup[item.software_access] except IndexError: field.field_type = BitField.TYPE_READ_ONLY field.start_position = item.start field.stop_position = item.stop field.reset_value = item.reset field.description = item.description register.add_bit_field(field)