From 7e95fd407415fefb3feced92d1e8e1cbf5848778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= Date: Wed, 3 Nov 2021 22:25:39 +0100 Subject: [PATCH] Render memory map from dump log --- draw_memory_map.py | 76 ++++++++++++++++++++--- memory_dump.txt | 152 +++++++++++++++++++++++++++++++++++++++++++++ solar_ble.py | 20 ++++++ table_drawing.py | 15 +++-- 4 files changed, 247 insertions(+), 16 deletions(-) create mode 100644 memory_dump.txt diff --git a/draw_memory_map.py b/draw_memory_map.py index 5139033..a15811c 100644 --- a/draw_memory_map.py +++ b/draw_memory_map.py @@ -1,12 +1,19 @@ # -*- coding: utf-8 -*- -from typing import Iterable +from ast import literal_eval +from typing import Iterable, List +from solar_ble import parse_packet from table_drawing import table -def memory_table(data: Iterable[int], start: int = 0, wordsize: int = 2): +def memory_table( + data: Iterable[int], + start: int = 0, + wordsize: int = 2, + skip_nullrows: bool = True, +): data_iter = iter(data) - data_rows = [] + data_rows: List[List[str]] = [] position = start try: while True: @@ -17,19 +24,30 @@ def memory_table(data: Iterable[int], start: int = 0, wordsize: int = 2): try: cell = [] for _ in range(wordsize): - d = data_iter.__next__() & 0xFF + d = data_iter.__next__() cell.append(d) - position += 1 finally: if cell: + position += 1 row.append(cell) finally: if row: - row_hex = [" ".join([f"{n:02X}" for n in cell]) for cell in row] + if skip_nullrows: + is_null = not any([any(cell) for cell in row]) + if is_null: + if data_rows[-1]: + data_rows.append([]) + continue + row_hex = [ + " ".join([f"{n:02X}" if n is not None else " " for n in cell]) + for cell in row + ] row_ascii = [ " ".join( [ - " " + chr(n) if chr(n).isprintable() else " " + " " + chr(n) + if n is not None and chr(n).isprintable() + else " " for n in cell ] ) @@ -49,14 +67,52 @@ def memory_table(data: Iterable[int], start: int = 0, wordsize: int = 2): data_rows, headers=headers, justify="^", - header_interval=8 * 2, + # header_interval=8 * 2, + collapse_empty=True, ) -data = list(range(256)) +def parse_log(fh, chunksize=32): + # address = None + for line in fh.readlines(): + if " " not in line: + continue + + date, time, text = line.strip().split(" ", 2) + + if text.startswith("Reading"): + _, addr_txt = text.split(" ") + # address = int(addr_txt.strip("."), 16) + + elif text.startswith("bytearray"): + data_txt: str = text.split("(", 1)[1].strip(")") + packet = literal_eval(data_txt) + # print(address, packet) + + data = parse_packet(packet) + dlen = len(data) + for i in range(chunksize): + if i < dlen: + yield data[i] + else: + yield None -print(memory_table(data, wordsize=1)) +with open("z_solar copy.log") as fh: + data = list(parse_log(fh)) + # print(data) + +# data = list(range(256)) + + +print( + memory_table( + data, + wordsize=2, + skip_nullrows=True, + ) +) + # # rows = [[f"{x:03X}·"] for x in range(32)] diff --git a/memory_dump.txt b/memory_dump.txt new file mode 100644 index 0000000..fc16c85 --- /dev/null +++ b/memory_dump.txt @@ -0,0 +1,152 @@ +┌────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ +│ │ ···0│ ···1│ ···2│ ···3│ ···4│ ···5│ ···6│ ···7│ ···8│ ···9│ ···A│ ···B│ ···C│ ···D│ ···E│ ···F│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│000·│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│18 14│14 00│20 20│20 20│4D 4C│32 34│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ M L│ 2 4│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│001·│32 30│20 20│20 20│20 20│00 04│02 00│02 00│00 03│3C 13│02 67│00 01│00 00│00 00│03 09│00 14│06 0A│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ 2 0│ │ │ │ │ │ │ │ < │ g│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│002·│00 02│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│003·│00 00│00 00│00 00│00 00│00 00│00 31│00 32│00 33│00 34│00 35│00 36│00 37│00 38│00 39│00 3A│00 3B│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ 1│ 2│ 3│ 4│ 5│ 6│ 7│ 8│ 9│ :│ ;│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│004·│00 3C│00 3D│00 3E│00 3F│00 40│00 41│00 42│00 43│00 44│00 53│00 6F│00 6C│00 61│00 72│00 20│00 43│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ <│ =│ >│ ?│ @│ A│ B│ C│ D│ S│ o│ l│ a│ r│ │ C│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│005·│00 68│00 61│00 72│00 67│00 65│00 72│00 20│00 20│00 20│00 00│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ h│ a│ r│ g│ e│ r│ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│010·│00 39│00 7B│00 00│05 05│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 7B│00 7B│00 36│00 00│00 06│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ 9│ {│ │ │ │ │ │ │ │ │ │ {│ {│ 6│ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│011·│00 00│00 02│00 00│00 19│00 00│00 04│00 00│00 00│00 00│00 05│00 00│00 00│00 00│00 3E│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ >│ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│DF0·│00 01│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│DF2·│44 44│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ D D│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│DF4·│00 00│00 00│00 00│00 00│00 00│00 00│00 00│44 44│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ │ │ │ │ D D│ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│E00·│00 00│07 D0│00 C8│FF 0C│00 02│00 A0│00 9B│00 92│00 90│00 8A│00 84│00 7E│00 78│00 6F│00 6A│64 32│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ Ð│ È│ ÿ │ │ │ │ │ │ │ │ ~│ x│ o│ j│ d 2│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│E01·│00 05│00 78│00 78│00 1E│00 03│00 41│00 A3│00 4B│00 A3│00 00│00 00│00 00│00 00│00 0F│00 05│00 05│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ x│ x│ │ │ A│ £│ K│ £│ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│E02·│00 04│01 00│00 00│00 01│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│E30·│66 66│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ f f│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│E31·│00 00│00 00│00 00│00 64│00 32│00 64│00 32│00 3C│00 05│00 C8│00 02│02 BC│00 0A│03 84│03 84│02 58│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ │ │ d│ 2│ d│ 2│ <│ │ È│ │ ¼│ │ │ │ X│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│E32·│00 14│00 60│00 00│00 00│00 00│00 00│00 00│00 00│00 01│66 66│00 00│00 00│00 00│00 00│00 00│00 00│ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ │ `│ │ │ │ │ │ │ │ f f│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F00·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F10·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F20·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F30·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F40·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F50·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F60·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F70·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F80·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│F90·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│FA0·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│FB0·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│FC0·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│FD0·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│FE0·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│FF0·│00 7B│00 7B│00 36│00 00│00 06│00 00│00 02│00 00│00 19│00 00│ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +│ │ {│ {│ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ +├────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ +└────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ diff --git a/solar_ble.py b/solar_ble.py index 2ab47b7..5cebb32 100755 --- a/solar_ble.py +++ b/solar_ble.py @@ -250,6 +250,26 @@ def log(string: str): sys.stdout.flush() +def parse_packet(data): + tag, operation, size = struct.unpack_from("BBB", data) + _unpacked = struct.unpack_from(f"<{size}BH", data, offset=3) + crc = _unpacked[-1] + payload = _unpacked[:-1] + calculated_crc = modbus(bytes([tag, operation, size, *payload])) + + if crc != calculated_crc: + e = ValueError(f"CRC missmatch: expected {crc:04X}, got {calculated_crc:04X}.") + e.tag = tag + e.operation = operation + e.size = size + e.payload = payload + e.crc = crc + e.calculated_crc = calculated_crc + raise e + + return payload + + if __name__ == "__main__": dlgt = Delegate() diff --git a/table_drawing.py b/table_drawing.py index c44f7f5..3e4d93c 100644 --- a/table_drawing.py +++ b/table_drawing.py @@ -42,6 +42,7 @@ def table( headers: Optional[Collection] = None, header_interval: Optional[int] = None, justify: Optional[Union[str, Collection[str]]] = None, + collapse_empty: bool = False, ): res = [] @@ -87,12 +88,14 @@ def table( res.append( row([C_H * colw for colw in colwidths], start=C_VL, sep=C_X, end=C_VR) ) - padding = [""] * (columns - len(data_row)) - padded_row = [ - f"{cell:{justify[j]}{colwidths[j]}s}" - for j, cell in enumerate(list(data_row) + padding) - ] - res.append(row(padded_row)) + is_empty = not any([True for x in data_row if x.strip()]) + if not (is_empty and collapse_empty): + padding = [""] * (columns - len(data_row)) + padded_row = [ + f"{cell:{justify[j]}{colwidths[j]}s}" + for j, cell in enumerate(list(data_row) + padding) + ] + res.append(row(padded_row)) res.append(row([C_H * colw for colw in colwidths], start=C_LL, sep=C_HU, end=C_LR))