def __init__(self, process, control, meta, block_name, field_name, writeable): super(PandABoxTablePart, self).__init__( process, control, meta, block_name, field_name, writeable) # Fill in the meta object with the correct headers columns = OrderedDict() self.fields = OrderedDict() fields = control.get_table_fields(block_name, field_name) for field_name, (bits_hi, bits_lo) in fields.items(): nbits = bits_hi - bits_lo + 1 if nbits < 1: raise ValueError("Bad bits %s:%s" % (bits_hi, bits_lo)) if nbits == 1: column_meta = BooleanArrayMeta(field_name) widget_tag = widget("checkbox") else: if nbits <= 8: dtype = "uint8" elif nbits <= 16: dtype = "uint16" elif nbits <= 32: dtype = "uint32" elif nbits <= 64: dtype = "uint64" else: raise ValueError("Bad bits %s:%s" % (bits_hi, bits_lo)) column_meta = NumberArrayMeta(dtype, field_name) widget_tag = widget("textinput") label, column_name = make_label_attr_name(field_name) column_meta.set_label(label) column_meta.set_tags([widget_tag]) columns[column_name] = column_meta self.fields[column_name] = (bits_hi, bits_lo) meta.set_elements(TableElementMap(columns))
def create_attributes(self): label, attr_name = make_label_attr_name(self.field_name) self.meta.set_label(label) self.attr = self.meta.make_attribute(self.initial_value) if self.writeable: writeable_func = self.set_field else: writeable_func = None yield attr_name, self.attr, writeable_func
def _make_out_capture(self, field_name, field_data): group_tag = self._make_group("outputs") meta = ChoiceMeta("Capture %s in PCAP?" % field_name, field_data.labels, tags=[group_tag, widget("combo")]) self._make_field_part(field_name + ".CAPTURE", meta, writeable=True) if self.area_detector: from malcolm.parts.ADCore.hdfwriterpart import \ attribute_dataset_types # Make a string part to hold the name of the dataset part_name = field_name + ".DATASET_NAME" label, attr_name = make_label_attr_name(part_name) params = StringPart.MethodMeta.prepare_input_map( name=attr_name, widget="textinput", description="Name of the captured dataset in HDF file", writeable=True, config=True) part = StringPart(self.process, params) self._add_part(part_name, part) # Make a choice part to hold the type of the dataset part_name = field_name + ".DATASET_TYPE" label, attr_name = make_label_attr_name(part_name) if "INENC" in self.block_name: initial = "position" else: initial = "monitor" params = ChoicePart.MethodMeta.prepare_input_map( name=attr_name, widget="textinput", description="Type of the captured dataset in HDF file", writeable=True, choices=attribute_dataset_types, initialValue=initial) part = StringPart(self.process, params) self._add_part(part_name, part)
def create_methods(self): label, method_name = make_label_attr_name(self.field_name) if self.arg_meta: self.arg_name = method_name # Decorate set_field with a MethodMeta @method_takes(self.arg_name, self.arg_meta, REQUIRED) def set_field(params): self.set_field(params) self.method = set_field.MethodMeta writeable_func = set_field else: self.method = MethodMeta() writeable_func = None self.method.set_description(self.description) self.method.set_tags(self.tags) self.method.set_label(label) yield method_name, self.method, writeable_func
def _make_out_capture(self, field_name, field_data): group_tag = self._make_group("outputs") meta = ChoiceMeta("Capture %s in PCAP?" % field_name, field_data.labels, tags=[group_tag, widget("combo")]) self._make_field_part(field_name + ".CAPTURE", meta, writeable=True) meta = NumberMeta( "uint8", "How many FPGA ticks to delay data capture", tags=[group_tag, widget("textinput")]) self._make_field_part(field_name + ".DATA_DELAY", meta, writeable=True) if self.area_detector: # Make a string part to hold the name of the dataset field_name += ".DATASET_NAME" label, attr_name = make_label_attr_name(field_name) params = StringPart.MethodMeta.prepare_input_map( name=attr_name, widget="textinput", description="Name of the captured dataset in HDF file", writeable=True) part = StringPart(self.process, params) self._add_part(field_name, part)