mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
_defaultvalue kann String aufnehmen muss aber über _defaultvalue erfragt werden
_defaultvalue kann niemals None sein, außer bei StructIO zur Berechnung
Fehlerabfang komischer piCtory JSON Datei für _defaultvalue ('null' statt null)
This commit is contained in:
@@ -25,7 +25,7 @@ __all__ = [
|
||||
__author__ = "Sven Sager <akira@revpimodio.org>"
|
||||
__name__ = "revpimodio2"
|
||||
__package__ = "revpimodio2"
|
||||
__version__ = "2.1.4"
|
||||
__version__ = "2.1.5"
|
||||
|
||||
# Global package values
|
||||
OFF = 0
|
||||
|
||||
@@ -180,6 +180,7 @@ class IOList(object):
|
||||
delattr(self, oldio._name)
|
||||
|
||||
if io._defaultvalue is None:
|
||||
# Nur bei StructIO und keiner gegebenen defaultvalue übernehmen
|
||||
if io._bitaddress < 0:
|
||||
io._defaultvalue = calc_defaultvalue
|
||||
else:
|
||||
@@ -254,11 +255,14 @@ class IOBase(object):
|
||||
|
||||
@param parentdevice Parentdevice auf dem der IO liegt
|
||||
@param valuelist Datenliste fuer Instantiierung
|
||||
["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"]
|
||||
@param iotype <class 'int'> Wert
|
||||
@param byteorder Byteorder 'little'/'big' fuer <class 'int'> Berechnung
|
||||
@param sigend Intberechnung mit Vorzeichen durchfuehren
|
||||
|
||||
"""
|
||||
# ["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"]
|
||||
# [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ]
|
||||
self._parentdevice = parentdevice
|
||||
|
||||
# Bitadressen auf Bytes aufbrechen und umrechnen
|
||||
@@ -279,12 +283,13 @@ class IOBase(object):
|
||||
self._slc_address = slice(
|
||||
int_startaddress, int_startaddress + self._length
|
||||
)
|
||||
# Defaultvalue aus Zahl in Bytes umrechnen
|
||||
if str(valuelist[1]).isdigit():
|
||||
# Defaultvalue aus Zahl in Bytes umrechnen
|
||||
self._defaultvalue = int(valuelist[1]).to_bytes(
|
||||
self._length, byteorder=self._byteorder
|
||||
)
|
||||
elif valuelist[1] is None and type(self) == StructIO:
|
||||
# Auf None setzen um später berechnete Werte zu übernehmen
|
||||
self._defaultvalue = None
|
||||
elif type(valuelist[1]) == bytes:
|
||||
# Defaultvalue direkt von bytes übernehmen
|
||||
@@ -297,16 +302,34 @@ class IOBase(object):
|
||||
"".format(self._length, len(valuelist[1]))
|
||||
)
|
||||
else:
|
||||
# Defaultvalue mit leeren Bytes füllen
|
||||
self._defaultvalue = bytes(self._length)
|
||||
|
||||
# Versuchen String in ASCII Bytes zu wandeln
|
||||
if type(valuelist[1]) == str:
|
||||
try:
|
||||
buff = valuelist[1].encode("ASCII")
|
||||
if len(buff) <= self._length:
|
||||
self._defaultvalue = \
|
||||
buff + bytes(self._length - len(buff))
|
||||
except:
|
||||
pass
|
||||
|
||||
else:
|
||||
# Höhere Bits als 7 auf nächste Bytes umbrechen
|
||||
int_startaddress += int((int(valuelist[7]) % 16) / 8)
|
||||
self._slc_address = slice(
|
||||
int_startaddress, int_startaddress + 1
|
||||
)
|
||||
self._defaultvalue = None if valuelist[1] is None \
|
||||
else bool(int(valuelist[1]))
|
||||
|
||||
# Defaultvalue ermitteln, sonst False
|
||||
if valuelist[1] is None and type(self) == StructIO:
|
||||
self._defaultvalue = None
|
||||
else:
|
||||
try:
|
||||
self._defaultvalue = bool(int(valuelist[1]))
|
||||
except:
|
||||
self._defaultvalue = False
|
||||
|
||||
def __bool__(self):
|
||||
"""<class 'bool'>-Wert der Klasse.
|
||||
|
||||
Reference in New Issue
Block a user