Source code for malcolm.modules.builtin.parts.float64part

from annotypes import Anno

from malcolm.core import (
    AMetaDescription,
    APartName,
    AUnits,
    Display,
    NumberMeta,
    Part,
    PartRegistrar,
    ULimitHigh,
    ULimitLow,
    UPrecision,
)

from ..util import AConfig, AGroup, AWidget, AWriteable, set_tags

with Anno("Initial value of the created attribute"):
    AValue = float

# Pull re-used annotypes into our namespace in case we are subclassed
APartName = APartName
AMetaDescription = AMetaDescription
AUnits = AUnits
ULimitHigh = ULimitHigh
ULimitLow = ULimitLow
UPrecision = UPrecision
AWriteable = AWriteable
AConfig = AConfig
AGroup = AGroup
AWidget = AWidget


[docs]class Float64Part(Part): """Create a single float64 Attribute on the Block""" def __init__( self, name: APartName, description: AMetaDescription, writeable: AWriteable = False, config: AConfig = 1, group: AGroup = None, widget: AWidget = None, value: AValue = 0.0, limit_low: ULimitLow = 0, limit_high: ULimitHigh = 0, precision: UPrecision = 8, units: AUnits = "", ) -> None: super().__init__(name) display = Display( limitLow=limit_low, limitHigh=limit_high, precision=precision, units=units ) meta = NumberMeta("float64", description, display=display) set_tags(meta, writeable, config, group, widget) self.attr = meta.create_attribute_model(value) self.writeable_func = self.attr.set_value if writeable else None def setup(self, registrar: PartRegistrar) -> None: registrar.add_attribute_model(self.name, self.attr, self.writeable_func)