Set values in process image AND buffer with shared_procimg=True

This commit is contained in:
2020-09-30 16:04:29 +02:00
parent 9460c4f106
commit beb7a36cc7
3 changed files with 22 additions and 21 deletions

View File

@@ -22,7 +22,7 @@ __author__ = "Sven Sager <akira@revpimodio.org>"
__copyright__ = "Copyright (C) 2020 Sven Sager" __copyright__ = "Copyright (C) 2020 Sven Sager"
__license__ = "LGPLv3" __license__ = "LGPLv3"
__name__ = "revpimodio2" __name__ = "revpimodio2"
__version__ = "2.5.3b" __version__ = "2.5.3c"
# Global package values # Global package values
OFF = 0 OFF = 0

View File

@@ -630,6 +630,7 @@ class IOBase(object):
) )
except Exception as e: except Exception as e:
self._parentdevice._modio._gotioerror("ioset", e) self._parentdevice._modio._gotioerror("ioset", e)
return
elif hasattr(self._parentdevice._modio._myfh, "ioctl"): elif hasattr(self._parentdevice._modio._myfh, "ioctl"):
# IOCTL über Netzwerk # IOCTL über Netzwerk
@@ -643,6 +644,7 @@ class IOBase(object):
except Exception as e: except Exception as e:
self._parentdevice._modio._gotioerror( self._parentdevice._modio._gotioerror(
"net_ioset", e) "net_ioset", e)
return
else: else:
# IOCTL in Datei simulieren # IOCTL in Datei simulieren
@@ -655,28 +657,26 @@ class IOBase(object):
) )
except Exception as e: except Exception as e:
self._parentdevice._modio._gotioerror("file_ioset", e) self._parentdevice._modio._gotioerror("file_ioset", e)
return
else: # Für Bitoperationen sperren
# Gepuffertes Schreiben der Outputs self._parentdevice._filelock.acquire()
# Für Bitoperationen sperren # Hier gibt es immer nur ein byte, als int holen
self._parentdevice._filelock.acquire() int_byte = self._parentdevice._ba_devdata[self._slc_address.start]
# Hier gibt es immer nur ein byte, als int holen # Aktuellen Wert vergleichen und ggf. setzen
int_byte = self._parentdevice._ba_devdata[self._slc_address.start] 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 # Zurückschreiben wenn verändert
if not bool(int_byte & self._bitshift) == value: self._parentdevice._ba_devdata[self._slc_address.start] = \
if value: int_byte
int_byte += self._bitshift
else:
int_byte -= self._bitshift
# Zurückschreiben wenn verändert self._parentdevice._filelock.release()
self._parentdevice._ba_devdata[self._slc_address.start] = \
int_byte
self._parentdevice._filelock.release()
else: else:
if type(value) != bytes: if type(value) != bytes:
@@ -705,8 +705,9 @@ class IOBase(object):
self._parentdevice._modio._myfh.flush() self._parentdevice._modio._myfh.flush()
except IOError as e: except IOError as e:
self._parentdevice._modio._gotioerror("ioset", e) self._parentdevice._modio._gotioerror("ioset", e)
else: return
self._parentdevice._ba_devdata[self._slc_address] = value
self._parentdevice._ba_devdata[self._slc_address] = value
def unreg_event(self, func=None, edge=None) -> None: def unreg_event(self, func=None, edge=None) -> None:
""" """

View File

@@ -17,7 +17,7 @@ setup(
license="LGPLv3", license="LGPLv3",
name="revpimodio2", name="revpimodio2",
version="2.5.3b", version="2.5.3c",
packages=["revpimodio2"], packages=["revpimodio2"],
python_requires="~=3.2", python_requires="~=3.2",