From 8b64386a1806df11c8b3e51da53cf28e0b134db1 Mon Sep 17 00:00:00 2001 From: NaruX Date: Mon, 21 Aug 2017 16:27:40 +0200 Subject: [PATCH] =?UTF-8?q?IOList.=5F=5Fsetitem=5F=5F=20aus=20Leistungsgr?= =?UTF-8?q?=C3=BCnden=20entfernt=20-=20.value=20ist=20schneller=20IOBase.?= =?UTF-8?q?=5F=5Fbytes=5F=5F=20Entfernt,=20da=20sinnlos=20-=20.get=5Fvalue?= =?UTF-8?q?()=20liefert=20Bytes=20Core.=5Fget=5Fleda2=20angepasst=20-=20we?= =?UTF-8?q?niger=20ifs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/revpimodio2.io.html | 61 +++-------------------------------------- eric-revpimodio.api | 2 -- revpimodio2/device.py | 6 ++-- revpimodio2/io.py | 59 ++++++++------------------------------- 4 files changed, 18 insertions(+), 110 deletions(-) diff --git a/doc/revpimodio2.io.html b/doc/revpimodio2.io.html index d5d5fd4..c4d6e73 100644 --- a/doc/revpimodio2.io.html +++ b/doc/revpimodio2.io.html @@ -140,9 +140,6 @@ Methods __bool__ bool()-wert der Klasse. -__bytes__ -bytes()-wert der Klasse. - __str__ str()-wert der Klasse. @@ -219,17 +216,6 @@ bool()-wert der Klasse.
IO-Wert als bool(). Nur False wenn False oder 0 sonst True
- -

-IOBase.__bytes__

-__bytes__() -

-bytes()-wert der Klasse. -

-
Returns:
-
-IO-Wert als bytes() -

IOBase.__str__

@@ -484,19 +470,10 @@ Methods Ersetzt bestehende IOs durch den neu Registrierten. __setattr__ -Setzt IO Wert. - -__setitem__ -Setzt IO Wert. - -_getdict - +Verbietet aus Leistungsguenden das direkte Setzen von Attributen. _private_register_new_io_object Registriert neues IO Objekt unabhaenging von __setattr__. - -_testme -

@@ -613,34 +590,8 @@ Neuer IO der eingefuegt werden soll IOList.__setattr__

__setattr__(key, value)

-Setzt IO Wert. -

-
key
-
-IO Name oder Byte -
value
-
-Wert, auf den der IO gesetzt wird -
-
-

-IOList.__setitem__

-__setitem__(key, value) -

-Setzt IO Wert. -

-
key
-
-IO Name oder Byte -
value
-
-Wert, auf den der IO gesetzt wird -
-
-

-IOList._getdict

-_getdict() - +Verbietet aus Leistungsguenden das direkte Setzen von Attributen. +

IOList._private_register_new_io_object

_private_register_new_io_object(new_io) @@ -651,11 +602,7 @@ Registriert neues IO Objekt unabhaenging von __setattr__.
Neues IO Objekt
- -

-IOList._testme

-_testme() - +
Up


diff --git a/eric-revpimodio.api b/eric-revpimodio.api index 561d775..27a0b3d 100644 --- a/eric-revpimodio.api +++ b/eric-revpimodio.api @@ -85,9 +85,7 @@ revpimodio2.io.IOBase.unreg_event?4(func=None, edge=None) revpimodio2.io.IOBase.value?7 revpimodio2.io.IOBase.wait?4(edge=BOTH, exitevent=None, okvalue=None, timeout=0) revpimodio2.io.IOBase?1(parentdevice, valuelist, iotype, byteorder, signed) -revpimodio2.io.IOList._getdict?5() revpimodio2.io.IOList._private_register_new_io_object?5(new_io) -revpimodio2.io.IOList._testme?5() revpimodio2.io.IOList?1() revpimodio2.io.IntIO._get_signed?5() revpimodio2.io.IntIO._set_byteorder?5(value) diff --git a/revpimodio2/device.py b/revpimodio2/device.py index d83a75a..b3a46ff 100644 --- a/revpimodio2/device.py +++ b/revpimodio2/device.py @@ -419,9 +419,9 @@ class Core(Device): int_led = int.from_bytes( self.__lst_io[self._ioled].get_value(), byteorder=self.__lst_io[self._ioled]._byteorder - ) - led = 1 if bool(int_led & 4) else 0 - led = led + 2 if bool(int_led & 8) else led + ) >> 2 + led = int_led & 1 + led += int_led & 2 return led def _set_leda1(self, value): diff --git a/revpimodio2/io.py b/revpimodio2/io.py index e6af91e..2ab6400 100644 --- a/revpimodio2/io.py +++ b/revpimodio2/io.py @@ -110,39 +110,17 @@ class IOList(object): int_ios += 1 return int_ios - def __setitem__(self, key, value): - """Setzt IO Wert. - @param key IO Name oder Byte - @param value Wert, auf den der IO gesetzt wird""" - if type(key) == int: - if key not in self.__dict_iobyte: - raise KeyError( - "byte '{}' does not contain io object".format(key) - ) - - if len(self.__dict_iobyte[key]) == 1: - self.__dict_iobyte[key][0].value = value - elif len(self.__dict_iobyte[key]) == 0: - raise KeyError("byte '{}' contains no input".format(key)) - else: - raise KeyError( - "byte '{}' contains more than one bit-input".format(key) - ) - else: - getattr(self, key).value = value - def __setattr__(self, key, value): - """Setzt IO Wert. - @param key IO Name oder Byte - @param value Wert, auf den der IO gesetzt wird""" + """Verbietet aus Leistungsguenden das direkte Setzen von Attributen.""" if key in [ "_IOList__dict_iobyte", "_IOList__dict_iorefname" ]: object.__setattr__(self, key, value) else: - # Setzt Wert bei Zuweisung - getattr(self, key).value = value + raise TypeError( + "direct assignment is not supported - use .value Attribute" + ) def __private_replace_oldio_with_newio(self, io): """Ersetzt bestehende IOs durch den neu Registrierten. @@ -205,17 +183,6 @@ class IOList(object): else: raise AttributeError("io must be or sub class") - def _testme(self): - # NOTE: Nur Debugging - for x in self.__dict_iobyte: - if len(self.__dict_iobyte[x]) > 0: - print(x, self.__dict_iobyte[x]) - print(self.__dict_iorefname) - - def _getdict(self): - # NOTE: Nur Debugging - return self.__dict_iobyte.copy() - class DeadIO(object): @@ -305,20 +272,14 @@ class IOBase(object): def __bool__(self): """bool()-wert der Klasse. @return IO-Wert als bool(). Nur False wenn False oder 0 sonst True""" - return bool(self.get_value()) - - def __bytes__(self): - """bytes()-wert der Klasse. - @return IO-Wert als bytes()""" if self._bitaddress >= 0: int_byte = int.from_bytes( self._parentdevice._ba_devdata[self._slc_address], byteorder=self._byteorder ) - return b'\x01' if bool(int_byte & 1 << self._bitaddress) \ - else b'\x00' + return bool(int_byte & 1 << self._bitaddress) else: - return bytes(self._parentdevice._ba_devdata[self._slc_address]) + return bool(self._parentdevice._ba_devdata[self._slc_address]) def __str__(self): """str()-wert der Klasse. @@ -359,7 +320,6 @@ class IOBase(object): byteorder=self._byteorder ) return bool(int_byte & 1 << self._bitaddress) - else: return bytes(self._parentdevice._ba_devdata[self._slc_address]) @@ -661,7 +621,11 @@ class IntIO(IOBase): def __int__(self): """Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. @return int() ohne Vorzeichen""" - return self.get_int() + return int.from_bytes( + self._parentdevice._ba_devdata[self._slc_address], + byteorder=self._byteorder, + signed=self._signed + ) def _get_signed(self): """Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll. @@ -768,7 +732,6 @@ class StructIO(IOBase): raise AttributeError("parameter frm has to be a single sign") # Basisklasse instantiieren - # parentdevice, valuelist, iotype, byteorder, signed super().__init__( parentio._parentdevice, valuelist,