mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 13:53:53 +01:00
Neue Base Klasse eingefügt von der Core / Connect erben
Sollten neue Base-Devices von Kunbus hinzugefügt werden, wird Base verwendet IntIOReplaceable Klasse erstellt für IOs von Gateways und virtuellen Devices Leere IntIOCounter Klasse für Counter IOs hinzugefügt
This commit is contained in:
@@ -18,6 +18,9 @@ Global Attributes</h3>
|
||||
Classes</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><a style="color:#0000FF" href="#Base">Base</a></td>
|
||||
<td>Klasse fuer alle Base-Devices wie Core / Connect usw.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#Connect">Connect</a></td>
|
||||
<td>Klasse fuer den RevPi Connect.</td>
|
||||
</tr><tr>
|
||||
@@ -43,6 +46,37 @@ Functions</h3>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
<hr /><hr />
|
||||
<a NAME="Base" ID="Base"></a>
|
||||
<h2 style="background-color:#FFFFFF;color:#0000FF">Base</h2>
|
||||
<p>
|
||||
Klasse fuer alle Base-Devices wie Core / Connect usw.
|
||||
</p>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Derived from</h3>
|
||||
Device
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Attributes</h3>
|
||||
<table>
|
||||
<tr><td>__slots__</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Static Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
|
||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||
<hr /><hr />
|
||||
<a NAME="Connect" ID="Connect"></a>
|
||||
<h2 style="background-color:#FFFFFF;color:#0000FF">Connect</h2>
|
||||
<p>
|
||||
@@ -172,7 +206,7 @@ Klasse fuer den RevPi Core.
|
||||
</p>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Derived from</h3>
|
||||
Device
|
||||
Base
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Attributes</h3>
|
||||
<table>
|
||||
@@ -1055,7 +1089,7 @@ Klasse fuer die RevPi Gateway-Devices.
|
||||
</p><dl>
|
||||
<dt><b>See Also:</b></dt>
|
||||
<dd>
|
||||
<a style="color:#0000FF" href="revpimodio2.io.html#IOBase.replace_io">replace_io(name, frm, **kwargs)</a>
|
||||
<a style="color:#0000FF" href="revpimodio2.io.html#IntIOReplaceable.replace_io">replace_io(...)</a>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
|
||||
@@ -33,6 +33,12 @@ Classes</h3>
|
||||
<td><a style="color:#0000FF" href="#IntIO">IntIO</a></td>
|
||||
<td>Klasse fuer den Zugriff auf die Daten mit Konvertierung in int.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#IntIOCounter">IntIOCounter</a></td>
|
||||
<td>Erweitert die IntIO-Klasse um die .reset() Funktion fuer Counter.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#IntIOReplaceable">IntIOReplaceable</a></td>
|
||||
<td>Erweitert die IntIO-Klasse um die .replace_io Funktion.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#StructIO">StructIO</a></td>
|
||||
<td>Klasse fuer den Zugriff auf Daten ueber ein definierten struct.</td>
|
||||
</tr>
|
||||
@@ -97,7 +103,7 @@ Stellt Funktion fuer weiter Bit-Ersetzungen bereit.
|
||||
</p><dl>
|
||||
<dt><b>See Also:</b></dt>
|
||||
<dd>
|
||||
<a style="color:#0000FF" href="#IOBase.replace_io">replace_io(...)</a>
|
||||
<a style="color:#0000FF" href="#IntIOReplaceable.replace_io">replace_io(...)</a>
|
||||
</dd>
|
||||
</dl>
|
||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||
@@ -171,9 +177,6 @@ Methods</h3>
|
||||
<td><a style="color:#0000FF" href="#IOBase.reg_timerevent">reg_timerevent</a></td>
|
||||
<td>Registriert fuer IO einen Timer, welcher nach delay func ausfuehrt.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#IOBase.replace_io">replace_io</a></td>
|
||||
<td>Ersetzt bestehenden IO mit Neuem.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#IOBase.set_value">set_value</a></td>
|
||||
<td>Setzt den Wert des IOs.</td>
|
||||
</tr><tr>
|
||||
@@ -381,50 +384,6 @@ Ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
||||
<dd>
|
||||
Bei True, Funktion als EventCallback-Thread ausfuehren
|
||||
</dd>
|
||||
</dl><a NAME="IOBase.replace_io" ID="IOBase.replace_io"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
IOBase.replace_io</h3>
|
||||
<b>replace_io</b>(<i>name, frm, **kwargs</i>)
|
||||
<p>
|
||||
Ersetzt bestehenden IO mit Neuem.
|
||||
</p><p>
|
||||
Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
|
||||
uebernimmt das System die Daten aus dem ersetzten IO.
|
||||
</p><p>
|
||||
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
||||
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
||||
festgelegt.
|
||||
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
||||
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
||||
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
||||
</p><p>
|
||||
Wenn durch die Formatierung mehr Bytes benoetigt werden, als
|
||||
der urspruenglige IO hat, werden die nachfolgenden IOs ebenfalls
|
||||
verwendet und entfernt.
|
||||
</p><dl>
|
||||
<dt><i>name</i></dt>
|
||||
<dd>
|
||||
Name des neuen Inputs
|
||||
</dd><dt><i>frm</i></dt>
|
||||
<dd>
|
||||
struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
|
||||
</dd><dt><i>kwargs</i></dt>
|
||||
<dd>
|
||||
Weitere Parameter:
|
||||
- bmk: interne Bezeichnung fuer IO
|
||||
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
||||
- byteorder: Byteorder fuer den IO, Standardwert=little
|
||||
- defaultvalue: Standardwert fuer IO
|
||||
- event: Funktion fuer Eventhandling registrieren
|
||||
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
||||
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
||||
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
||||
</dd>
|
||||
</dl><dl>
|
||||
<dt><b>See Also:</b></dt>
|
||||
<dd>
|
||||
<a style="color:#0000FF" target="_blank" href="https://docs.python.org/3/library/struct.html#format-characters" >Python3 struct</a>
|
||||
</dd>
|
||||
</dl><a NAME="IOBase.set_value" ID="IOBase.set_value"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
IOBase.set_value</h3>
|
||||
@@ -870,6 +829,124 @@ Setzt IO mit Beachtung byteorder/signed.
|
||||
</dl>
|
||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||
<hr /><hr />
|
||||
<a NAME="IntIOCounter" ID="IntIOCounter"></a>
|
||||
<h2 style="background-color:#FFFFFF;color:#0000FF">IntIOCounter</h2>
|
||||
<p>
|
||||
Erweitert die IntIO-Klasse um die .reset() Funktion fuer Counter.
|
||||
</p>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Derived from</h3>
|
||||
IntIO
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Attributes</h3>
|
||||
<table>
|
||||
<tr><td>__slots__</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Methods</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><a style="color:#0000FF" href="#IntIOCounter.reset">reset</a></td>
|
||||
<td>Setzt den Counter des Inputs zurueck.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Static Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
<a NAME="IntIOCounter.reset" ID="IntIOCounter.reset"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
IntIOCounter.reset</h3>
|
||||
<b>reset</b>(<i></i>)
|
||||
<p>
|
||||
Setzt den Counter des Inputs zurueck.
|
||||
</p>
|
||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||
<hr /><hr />
|
||||
<a NAME="IntIOReplaceable" ID="IntIOReplaceable"></a>
|
||||
<h2 style="background-color:#FFFFFF;color:#0000FF">IntIOReplaceable</h2>
|
||||
<p>
|
||||
Erweitert die IntIO-Klasse um die .replace_io Funktion.
|
||||
</p>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Derived from</h3>
|
||||
IntIO
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Attributes</h3>
|
||||
<table>
|
||||
<tr><td>__slots__</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Methods</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><a style="color:#0000FF" href="#IntIOReplaceable.replace_io">replace_io</a></td>
|
||||
<td>Ersetzt bestehenden IO mit Neuem.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Static Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</table>
|
||||
<a NAME="IntIOReplaceable.replace_io" ID="IntIOReplaceable.replace_io"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
IntIOReplaceable.replace_io</h3>
|
||||
<b>replace_io</b>(<i>name, frm, **kwargs</i>)
|
||||
<p>
|
||||
Ersetzt bestehenden IO mit Neuem.
|
||||
</p><p>
|
||||
Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
|
||||
uebernimmt das System die Daten aus dem ersetzten IO.
|
||||
</p><p>
|
||||
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
||||
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
||||
festgelegt.
|
||||
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
||||
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
||||
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
||||
</p><p>
|
||||
Wenn durch die Formatierung mehr Bytes benoetigt werden, als
|
||||
der urspruenglige IO hat, werden die nachfolgenden IOs ebenfalls
|
||||
verwendet und entfernt.
|
||||
</p><dl>
|
||||
<dt><i>name</i></dt>
|
||||
<dd>
|
||||
Name des neuen Inputs
|
||||
</dd><dt><i>frm</i></dt>
|
||||
<dd>
|
||||
struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
|
||||
</dd><dt><i>kwargs</i></dt>
|
||||
<dd>
|
||||
Weitere Parameter:
|
||||
- bmk: interne Bezeichnung fuer IO
|
||||
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
||||
- byteorder: Byteorder fuer den IO, Standardwert=little
|
||||
- defaultvalue: Standardwert fuer IO
|
||||
- event: Funktion fuer Eventhandling registrieren
|
||||
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
||||
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
||||
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
||||
</dd>
|
||||
</dl><dl>
|
||||
<dt><b>See Also:</b></dt>
|
||||
<dd>
|
||||
<a style="color:#0000FF" target="_blank" href="https://docs.python.org/3/library/struct.html#format-characters" >Python3 struct</a>
|
||||
</dd>
|
||||
</dl>
|
||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||
<hr /><hr />
|
||||
<a NAME="StructIO" ID="StructIO"></a>
|
||||
<h2 style="background-color:#FFFFFF;color:#0000FF">StructIO</h2>
|
||||
<p>
|
||||
|
||||
@@ -106,7 +106,6 @@ revpimodio2.io.IOBase.length?7
|
||||
revpimodio2.io.IOBase.name?7
|
||||
revpimodio2.io.IOBase.reg_event?4(func, delay=0, edge=BOTH, as_thread=False)
|
||||
revpimodio2.io.IOBase.reg_timerevent?4(func, delay, edge=BOTH, as_thread=False)
|
||||
revpimodio2.io.IOBase.replace_io?4(name, frm, **kwargs)
|
||||
revpimodio2.io.IOBase.set_value?4(value)
|
||||
revpimodio2.io.IOBase.type?7
|
||||
revpimodio2.io.IOBase.unreg_event?4(func=None, edge=None)
|
||||
@@ -126,6 +125,8 @@ revpimodio2.io.IntIO.get_intvalue?4()
|
||||
revpimodio2.io.IntIO.set_intvalue?4(value)
|
||||
revpimodio2.io.IntIO.signed?7
|
||||
revpimodio2.io.IntIO.value?7
|
||||
revpimodio2.io.IntIOCounter.reset?4()
|
||||
revpimodio2.io.IntIOReplaceable.replace_io?4(name, frm, **kwargs)
|
||||
revpimodio2.io.StructIO._get_frm?5()
|
||||
revpimodio2.io.StructIO._get_signed?5()
|
||||
revpimodio2.io.StructIO.defaultvalue?7
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
Base Device
|
||||
Connect Core
|
||||
Core Device
|
||||
Core Base
|
||||
EventCallback Thread
|
||||
Gateway Device
|
||||
IntIO IOBase
|
||||
IntIOCounter IntIO
|
||||
IntIOReplaceable IntIO
|
||||
NetFH Thread
|
||||
ProcimgWriter Thread
|
||||
RevPiModIODriver RevPiModIOSelected
|
||||
|
||||
@@ -253,11 +253,20 @@ class Device(object):
|
||||
for key in sorted(dict_io, key=lambda x: int(x)):
|
||||
|
||||
# Neuen IO anlegen
|
||||
if bool(dict_io[key][7]) or isinstance(self, Core):
|
||||
# Bei Bitwerten oder Core RevPiIOBase verwenden
|
||||
if bool(dict_io[key][7]) or isinstance(self, Base):
|
||||
# Bei Bitwerten oder Base IOBase verwenden
|
||||
io_new = IOBase(
|
||||
self, dict_io[key], iotype, "little", False
|
||||
)
|
||||
elif isinstance(self, Gateway) and iotype != MEM:
|
||||
# Ersetzbare IOs erzeugen
|
||||
io_new = IntIOReplaceable(
|
||||
self, dict_io[key],
|
||||
iotype,
|
||||
"little",
|
||||
# Bei AIO (103) signed auf True setzen
|
||||
self._producttype == 103
|
||||
)
|
||||
else:
|
||||
io_new = IntIO(
|
||||
self, dict_io[key],
|
||||
@@ -441,7 +450,16 @@ class Device(object):
|
||||
producttype = property(_get_producttype)
|
||||
|
||||
|
||||
class Core(Device):
|
||||
class Base(Device):
|
||||
|
||||
"""Klasse fuer alle Base-Devices wie Core / Connect usw."""
|
||||
|
||||
__slots__ = ()
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class Core(Base):
|
||||
|
||||
"""Klasse fuer den RevPi Core.
|
||||
|
||||
@@ -849,7 +867,7 @@ class Gateway(Device):
|
||||
zur verfuegung, ueber die eigene IOs definiert werden, die ein
|
||||
RevPiStructIO-Objekt abbilden.
|
||||
Dieser IO-Typ kann Werte ueber mehrere Bytes verarbeiten und zurueckgeben.
|
||||
@see revpimodio2.io#IOBase.replace_io replace_io(name, frm, **kwargs)
|
||||
@see revpimodio2.io#IntIOReplaceable.replace_io replace_io(...)
|
||||
|
||||
"""
|
||||
|
||||
@@ -925,5 +943,5 @@ class Virtual(Gateway):
|
||||
|
||||
|
||||
# Nachträglicher Import
|
||||
from .io import IOBase, IntIO
|
||||
from .io import IOBase, IntIO, IntIOReplaceable
|
||||
from revpimodio2 import INP, OUT, MEM
|
||||
|
||||
@@ -231,7 +231,7 @@ class DeadIO(object):
|
||||
|
||||
def replace_io(self, name, frm, **kwargs):
|
||||
"""Stellt Funktion fuer weiter Bit-Ersetzungen bereit.
|
||||
@see #IOBase.replace_io replace_io(...)"""
|
||||
@see #IntIOReplaceable.replace_io replace_io(...)"""
|
||||
self.__deadio.replace_io(name, frm, **kwargs)
|
||||
|
||||
_parentdevice = property(lambda self: None)
|
||||
@@ -496,70 +496,6 @@ class IOBase(object):
|
||||
"""
|
||||
self.__reg_xevent(func, delay, edge, as_thread, False)
|
||||
|
||||
def replace_io(self, name, frm, **kwargs):
|
||||
"""Ersetzt bestehenden IO mit Neuem.
|
||||
|
||||
Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
|
||||
uebernimmt das System die Daten aus dem ersetzten IO.
|
||||
|
||||
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
||||
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
||||
festgelegt.
|
||||
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
||||
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
||||
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
||||
|
||||
Wenn durch die Formatierung mehr Bytes benoetigt werden, als
|
||||
der urspruenglige IO hat, werden die nachfolgenden IOs ebenfalls
|
||||
verwendet und entfernt.
|
||||
|
||||
@param name Name des neuen Inputs
|
||||
@param frm struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
|
||||
@param kwargs Weitere Parameter:
|
||||
- bmk: interne Bezeichnung fuer IO
|
||||
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
||||
- byteorder: Byteorder fuer den IO, Standardwert=little
|
||||
- defaultvalue: Standardwert fuer IO
|
||||
- event: Funktion fuer Eventhandling registrieren
|
||||
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
||||
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
||||
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
||||
@see <a target="_blank"
|
||||
href="https://docs.python.org/3/library/struct.html#format-characters"
|
||||
>Python3 struct</a>
|
||||
|
||||
"""
|
||||
if not isinstance(self._parentdevice, Gateway):
|
||||
raise RuntimeError(
|
||||
"this function can be used for ios on gatway or virtual "
|
||||
"devices only"
|
||||
)
|
||||
if type(self) == StructIO:
|
||||
raise RuntimeError(
|
||||
"this io is already a replaced one"
|
||||
)
|
||||
|
||||
# StructIO erzeugen
|
||||
io_new = StructIO(
|
||||
self,
|
||||
name,
|
||||
frm,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
# StructIO in IO-Liste einfügen
|
||||
self._parentdevice._modio.io._private_register_new_io_object(io_new)
|
||||
|
||||
# Optional Event eintragen
|
||||
reg_event = kwargs.get("event", None)
|
||||
if reg_event is not None:
|
||||
io_new.reg_event(
|
||||
reg_event,
|
||||
kwargs.get("delay", 0),
|
||||
kwargs.get("edge", BOTH),
|
||||
kwargs.get("as_thread", False)
|
||||
)
|
||||
|
||||
def set_value(self, value):
|
||||
"""Setzt den Wert des IOs.
|
||||
@param value IO-Wert als <class bytes'> oder <class 'bool'>"""
|
||||
@@ -849,6 +785,80 @@ class IntIO(IOBase):
|
||||
value = property(get_intvalue, set_intvalue)
|
||||
|
||||
|
||||
class IntIOCounter(IntIO):
|
||||
|
||||
"""Erweitert die IntIO-Klasse um die .reset() Funktion fuer Counter."""
|
||||
|
||||
__slots__ = ()
|
||||
|
||||
def reset(self):
|
||||
"""Setzt den Counter des Inputs zurueck."""
|
||||
# TODO: Counter ID ermitteln
|
||||
# TODO: Counter reset durchführen
|
||||
pass
|
||||
|
||||
|
||||
class IntIOReplaceable(IntIO):
|
||||
|
||||
"""Erweitert die IntIO-Klasse um die .replace_io Funktion."""
|
||||
|
||||
__slots__ = ()
|
||||
|
||||
def replace_io(self, name, frm, **kwargs):
|
||||
"""Ersetzt bestehenden IO mit Neuem.
|
||||
|
||||
Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
|
||||
uebernimmt das System die Daten aus dem ersetzten IO.
|
||||
|
||||
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
||||
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
||||
festgelegt.
|
||||
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
||||
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
||||
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
||||
|
||||
Wenn durch die Formatierung mehr Bytes benoetigt werden, als
|
||||
der urspruenglige IO hat, werden die nachfolgenden IOs ebenfalls
|
||||
verwendet und entfernt.
|
||||
|
||||
@param name Name des neuen Inputs
|
||||
@param frm struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
|
||||
@param kwargs Weitere Parameter:
|
||||
- bmk: interne Bezeichnung fuer IO
|
||||
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
||||
- byteorder: Byteorder fuer den IO, Standardwert=little
|
||||
- defaultvalue: Standardwert fuer IO
|
||||
- event: Funktion fuer Eventhandling registrieren
|
||||
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
||||
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
||||
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
||||
@see <a target="_blank"
|
||||
href="https://docs.python.org/3/library/struct.html#format-characters"
|
||||
>Python3 struct</a>
|
||||
|
||||
"""
|
||||
# StructIO erzeugen
|
||||
io_new = StructIO(
|
||||
self,
|
||||
name,
|
||||
frm,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
# StructIO in IO-Liste einfügen
|
||||
self._parentdevice._modio.io._private_register_new_io_object(io_new)
|
||||
|
||||
# Optional Event eintragen
|
||||
reg_event = kwargs.get("event", None)
|
||||
if reg_event is not None:
|
||||
io_new.reg_event(
|
||||
reg_event,
|
||||
kwargs.get("delay", 0),
|
||||
kwargs.get("edge", BOTH),
|
||||
kwargs.get("as_thread", False)
|
||||
)
|
||||
|
||||
|
||||
class StructIO(IOBase):
|
||||
|
||||
"""Klasse fuer den Zugriff auf Daten ueber ein definierten struct.
|
||||
@@ -980,7 +990,3 @@ class StructIO(IOBase):
|
||||
frm = property(_get_frm)
|
||||
signed = property(_get_signed)
|
||||
value = property(get_structvalue, set_structvalue)
|
||||
|
||||
|
||||
# Nachträglicher Import
|
||||
from .device import Gateway
|
||||
|
||||
@@ -162,14 +162,19 @@ class RevPiModIO(object):
|
||||
|
||||
if device["type"] == "BASE":
|
||||
pt = int(device["productType"])
|
||||
if pt == 105:
|
||||
if pt == 95:
|
||||
# RevPi Core
|
||||
dev_new = devicemodule.Core(
|
||||
self, device, simulator=self._simulator
|
||||
)
|
||||
elif pt == 105:
|
||||
# RevPi Connect
|
||||
dev_new = devicemodule.Connect(
|
||||
self, device, simulator=self._simulator
|
||||
)
|
||||
else:
|
||||
# RevPi Core immer als Fallback verwenden
|
||||
dev_new = devicemodule.Core(
|
||||
# Base immer als Fallback verwenden
|
||||
dev_new = devicemodule.Base(
|
||||
self, device, simulator=self._simulator
|
||||
)
|
||||
self.core = dev_new
|
||||
|
||||
Reference in New Issue
Block a user