From 472605bb386d164ef60ca5c97a4fb709fb794059 Mon Sep 17 00:00:00 2001 From: NaruX Date: Sun, 15 Sep 2019 22:17:06 +0200 Subject: [PATCH] Watchmode wertet nun auch byteorder und signed aus --- MANIFEST.in | 2 ++ doc/revpicheckclient.html | 25 +++++++++++++-- eric-revpipycontrol.api | 3 +- revpipycontrol.e4p | 4 +-- revpipycontrol/revpicheckclient.py | 50 ++++++++++++++++++++++++------ revpipycontrol/revpipycontrol.py | 2 +- setup.py | 2 +- 7 files changed, 70 insertions(+), 18 deletions(-) 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",