From beb7a36cc7efc8526e5532f54bbf47a797b79d41 Mon Sep 17 00:00:00 2001 From: Sven Sager Date: Wed, 30 Sep 2020 16:04:29 +0200 Subject: [PATCH] Set values in process image AND buffer with shared_procimg=True --- revpimodio2/__init__.py | 2 +- revpimodio2/io.py | 39 ++++++++++++++++++++------------------- setup.py | 2 +- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/revpimodio2/__init__.py b/revpimodio2/__init__.py index 05047c6..747e8fc 100644 --- a/revpimodio2/__init__.py +++ b/revpimodio2/__init__.py @@ -22,7 +22,7 @@ __author__ = "Sven Sager " __copyright__ = "Copyright (C) 2020 Sven Sager" __license__ = "LGPLv3" __name__ = "revpimodio2" -__version__ = "2.5.3b" +__version__ = "2.5.3c" # Global package values OFF = 0 diff --git a/revpimodio2/io.py b/revpimodio2/io.py index 7ab7f98..ec63c5c 100644 --- a/revpimodio2/io.py +++ b/revpimodio2/io.py @@ -630,6 +630,7 @@ class IOBase(object): ) except Exception as e: self._parentdevice._modio._gotioerror("ioset", e) + return elif hasattr(self._parentdevice._modio._myfh, "ioctl"): # IOCTL über Netzwerk @@ -643,6 +644,7 @@ class IOBase(object): except Exception as e: self._parentdevice._modio._gotioerror( "net_ioset", e) + return else: # IOCTL in Datei simulieren @@ -655,28 +657,26 @@ class IOBase(object): ) except Exception as e: self._parentdevice._modio._gotioerror("file_ioset", e) + return - else: - # Gepuffertes Schreiben der Outputs + # Für Bitoperationen sperren + self._parentdevice._filelock.acquire() - # Für Bitoperationen sperren - self._parentdevice._filelock.acquire() + # Hier gibt es immer nur ein byte, als int holen + int_byte = self._parentdevice._ba_devdata[self._slc_address.start] - # Hier gibt es immer nur ein byte, als int holen - int_byte = self._parentdevice._ba_devdata[self._slc_address.start] + # Aktuellen Wert vergleichen und ggf. setzen + if not bool(int_byte & self._bitshift) == value: + if value: + int_byte += self._bitshift + else: + int_byte -= self._bitshift - # Aktuellen Wert vergleichen und ggf. setzen - if not bool(int_byte & self._bitshift) == value: - if value: - int_byte += self._bitshift - else: - int_byte -= self._bitshift + # Zurückschreiben wenn verändert + self._parentdevice._ba_devdata[self._slc_address.start] = \ + int_byte - # Zurückschreiben wenn verändert - self._parentdevice._ba_devdata[self._slc_address.start] = \ - int_byte - - self._parentdevice._filelock.release() + self._parentdevice._filelock.release() else: if type(value) != bytes: @@ -705,8 +705,9 @@ class IOBase(object): self._parentdevice._modio._myfh.flush() except IOError as e: self._parentdevice._modio._gotioerror("ioset", e) - else: - self._parentdevice._ba_devdata[self._slc_address] = value + return + + self._parentdevice._ba_devdata[self._slc_address] = value def unreg_event(self, func=None, edge=None) -> None: """ diff --git a/setup.py b/setup.py index 5300286..f9a2c5f 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ setup( license="LGPLv3", name="revpimodio2", - version="2.5.3b", + version="2.5.3c", packages=["revpimodio2"], python_requires="~=3.2",