IOs are callable to get or set values.

You do not have to use the .value property. Just call
the IO .io.io_name() to get the value. If you like to set a value
just pass the value to the call .io.io_name(new_value).
This commit is contained in:
2020-07-11 17:13:09 +02:00
parent bf4b450bc6
commit 110a366e14

View File

@@ -398,6 +398,19 @@ class IOBase(object):
else: else:
return any(self._parentdevice._ba_devdata[self._slc_address]) return any(self._parentdevice._ba_devdata[self._slc_address])
def __call__(self, value=None):
if value is None:
# Inline get_value()
if self._bitshift:
return bool(
self._parentdevice._ba_devdata[self._slc_address.start]
& self._bitshift
)
else:
return bytes(self._parentdevice._ba_devdata[self._slc_address])
else:
self.set_value(value)
def __len__(self): def __len__(self):
""" """
Gibt die Bytelaenge des IO zurueck. Gibt die Bytelaenge des IO zurueck.
@@ -868,6 +881,28 @@ class IntIO(IOBase):
signed=self._signed signed=self._signed
) )
def __call__(self, value=None):
if value is None:
# Inline get_intvalue()
return int.from_bytes(
self._parentdevice._ba_devdata[self._slc_address],
byteorder=self._byteorder,
signed=self._signed
)
else:
# Inline from set_intvalue()
if type(value) == int:
self.set_value(value.to_bytes(
self._length,
byteorder=self._byteorder,
signed=self._signed
))
else:
raise TypeError(
"'{0}' need a <class 'int'> value, but {1} was given"
"".format(self._name, type(value))
)
def _get_signed(self) -> bool: def _get_signed(self) -> bool:
""" """
Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll. Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.
@@ -1191,6 +1226,20 @@ class StructIO(IOBase):
"registered value does not fit process image scope" "registered value does not fit process image scope"
) )
def __call__(self, value=None):
if value is None:
# Inline get_structdefaultvalue()
if self._bitshift:
return self.get_value()
else:
return struct.unpack(self.__frm, self.get_value())[0]
else:
# Inline set_structvalue()
if self._bitshift:
self.set_value(value)
else:
self.set_value(struct.pack(self.__frm, value))
def _get_frm(self) -> str: def _get_frm(self) -> str:
""" """
Ruft die struct Formatierung ab. Ruft die struct Formatierung ab.