diff --git a/MANIFEST.in b/MANIFEST.in
index 36c28a0..54de927 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -3,3 +3,5 @@ include stdeb.cfg
recursive-include data *
recursive-include revpipycontrol *
global-exclude *.pyc
+include LICENSE.txt
+
diff --git a/doc/revpicheckclient.html b/doc/revpicheckclient.html
index d9f1cc7..c522c95 100644
--- a/doc/revpicheckclient.html
+++ b/doc/revpicheckclient.html
@@ -87,6 +87,9 @@ Methods
maxint |
Errechnet maximalen int() Wert für Bytes max 22. |
+| minint |
+Errechnet maximalen int() Wert für Bytes max 22. |
+
| readvalues |
Ruft nur Input Werte von RevPi ab und aktualisiert Fenster. |
@@ -244,13 +247,29 @@ Versteckt alle Fenster.
RevPiCheckClient.maxint
-maxint(bytelen)
+maxint(io)
Errechnet maximalen int() Wert für Bytes max 22.
-- bytelen
+- io
-
-Anzahl Bytes
+IO-Liste, deren Wert berechnet werden soll
+
+
+- Returns:
+-
+int() max oder 0 bei Überschreitung
+
+
+
+RevPiCheckClient.minint
+minint(io)
+
+Errechnet maximalen int() Wert für Bytes max 22.
+
+- io
+-
+IO-Liste, deren Wert berechnet werden soll
- Returns:
diff --git a/eric-revpipycontrol.api b/eric-revpipycontrol.api
index 6de61a4..8743e98 100644
--- a/eric-revpipycontrol.api
+++ b/eric-revpipycontrol.api
@@ -53,7 +53,8 @@ revpicheckclient.RevPiCheckClient._onfrmconf?5(canvas)
revpicheckclient.RevPiCheckClient._warnwrite?5()
revpicheckclient.RevPiCheckClient._workvalues?5(io_dicts=None, writeout=False)
revpicheckclient.RevPiCheckClient.hideallwindows?4()
-revpicheckclient.RevPiCheckClient.maxint?4(bytelen)
+revpicheckclient.RevPiCheckClient.maxint?4(io)
+revpicheckclient.RevPiCheckClient.minint?4(io)
revpicheckclient.RevPiCheckClient.readvalues?4()
revpicheckclient.RevPiCheckClient.refreshvalues?4()
revpicheckclient.RevPiCheckClient.tmr_workvalues?4()
diff --git a/revpipycontrol.e4p b/revpipycontrol.e4p
index f8c2415..36c3d79 100644
--- a/revpipycontrol.e4p
+++ b/revpipycontrol.e4p
@@ -1,14 +1,14 @@
-
+
en_US
66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275
Python3
Console
- 0.7.2
+ 0.8.0
Sven Sager
akira@narux.de
diff --git a/revpipycontrol/revpicheckclient.py b/revpipycontrol/revpicheckclient.py
index d13cf22..c98b127 100644
--- a/revpipycontrol/revpicheckclient.py
+++ b/revpipycontrol/revpicheckclient.py
@@ -101,7 +101,7 @@ class RevPiCheckClient(tkinter.Frame):
try:
newvalue = io[5].get()
# Wertebereich prüfen
- if newvalue < 0 or newvalue > self.maxint(io[1]):
+ if not self.minint(io) <= newvalue <= self.maxint(io):
raise ValueError("too big")
self.__chval(device, io)
@@ -168,7 +168,7 @@ class RevPiCheckClient(tkinter.Frame):
# IOs generieren
rowcount = 0
for io in lst_io:
- # io = [name,bytelen,byteaddr,bmk,bitaddress,(tkinter_var)]
+ # io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
tkinter.Label(s_frame, text=io[0]).grid(
column=1, row=rowcount, sticky="w"
@@ -185,7 +185,11 @@ class RevPiCheckClient(tkinter.Frame):
check.grid(column=0, row=rowcount)
else:
var = tkinter.IntVar()
- txt = tkinter.Spinbox(s_frame, to=self.maxint(io[1]))
+ txt = tkinter.Spinbox(
+ s_frame,
+ from_=self.minint(io),
+ to=self.maxint(io),
+ )
txt.bind(
"",
lambda event, tkvar=var: self.__saveoldvalue(event, tkvar)
@@ -198,13 +202,13 @@ class RevPiCheckClient(tkinter.Frame):
txt["command"] = \
lambda device=device, io=io: self.__chval(device, io)
txt["state"] = "disabled" if iotype == "inp" or \
- self.maxint(io[1]) == 0 else "normal"
+ self.maxint(io) == 0 else "normal"
txt["width"] = 5
txt["textvariable"] = var
txt.grid(column=0, row=rowcount)
# Steuerelementvariable in IO übernehmen (mutabel)
- io.append(var)
+ io.insert(5, var)
rowcount += 1
@@ -345,7 +349,7 @@ class RevPiCheckClient(tkinter.Frame):
xmlmc = MultiCall(self.cli)
for dev in self.dict_devices:
- # io = [name,bytelen,byteaddr,bmk,bitaddress,(tkinter_var)]
+ # io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
# IO Typ verarbeiten
for iotype in io_dicts:
@@ -358,7 +362,9 @@ class RevPiCheckClient(tkinter.Frame):
# Bytes umwandeln
int_byte = int.from_bytes(
- ba_values[io[2]:io[2] + io[1]], byteorder="little"
+ ba_values[io[2]:io[2] + io[1]],
+ byteorder="little" if len(io) < 7 else io[6],
+ signed=False if len(io) < 8 else io[7],
)
if io[4] >= 0:
# Bit-IO
@@ -384,11 +390,35 @@ class RevPiCheckClient(tkinter.Frame):
for win in self.dict_wins:
self.dict_wins[win].withdraw()
- def maxint(self, bytelen):
+ def maxint(self, io):
u"""Errechnet maximalen int() Wert für Bytes max 22.
- @param bytelen Anzahl Bytes
+ @param io IO-Liste, deren Wert berechnet werden soll
@return int() max oder 0 bei Überschreitung"""
- return 0 if bytelen > 22 else 256 ** bytelen - 1
+ # io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
+ bytelen = io[1]
+ if bytelen == 0:
+ return 0
+ signed = io[-1] if type(io[-1]) == bool else False
+ return 0 if bytelen > 22 else int.from_bytes(
+ (b'\x7f' if signed else b'\xff') + b'\xff' * (bytelen - 1),
+ byteorder="big"
+ )
+
+ def minint(self, io):
+ u"""Errechnet maximalen int() Wert für Bytes max 22.
+ @param io IO-Liste, deren Wert berechnet werden soll
+ @return int() max oder 0 bei Überschreitung"""
+ # io = [name,blen,baddr,bmk,bitaddr,(tkinter_var),border,signed]
+ bytelen = io[1]
+ if bytelen == 0:
+ return 0
+ signed = io[-1] if type(io[-1]) == bool else False
+ rc = 0 if bytelen > 22 or not signed else int.from_bytes(
+ b'\x80' + b'\x00' * (bytelen - 1),
+ byteorder="big",
+ signed=True
+ )
+ return rc
def readvalues(self):
u"""Ruft nur Input Werte von RevPi ab und aktualisiert Fenster."""
diff --git a/revpipycontrol/revpipycontrol.py b/revpipycontrol/revpipycontrol.py
index 437125c..770c423 100755
--- a/revpipycontrol/revpipycontrol.py
+++ b/revpipycontrol/revpipycontrol.py
@@ -5,7 +5,7 @@ u"""RevPiPyControl main program."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
-__version__ = "0.7.2"
+__version__ = "0.8.0"
import revpicheckclient
import revpidevelop
diff --git a/setup.py b/setup.py
index 751ea92..2fb1924 100644
--- a/setup.py
+++ b/setup.py
@@ -23,7 +23,7 @@ globsetup = {
"author_email": "akira@narux.de",
"url": "https://revpimodio.org/revpipyplc/",
"license": "LGPLv3",
- "version": "0.7.2",
+ "version": "0.8.0",
"name": "revpipycontrol",