From dd682c6da15a0c4d923dc7a1ac0ed77616438a13 Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Sat, 12 Oct 2019 19:32:22 +0200 Subject: [PATCH] Start work on parsing firmware payload. --- grmn/rgn.py | 7 ++++++- grmn/rgnbin.py | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/grmn/rgn.py b/grmn/rgn.py index dc60e65..8a601ba 100644 --- a/grmn/rgn.py +++ b/grmn/rgn.py @@ -264,9 +264,14 @@ class RgnRecordR(RgnRecord): txt += " (OK)" else: txt += " (" + RED + "MISMATCH!" + RESET + ")" - if self.id_payload() == "RGN": + payload_type = self.id_payload() + if payload_type == "RGN": txt += "\n " + YELLOW + "PAYLOAD IS ANOTHER RGN STRUCTURE:" + RESET rgn = Rgn() rgn.load_from_bytes(self.payload[10:]) txt += "\n " + "\n ".join(str(rgn).split("\n")) + elif payload_type == "BIN": + binfw = RgnBin() + binfw.load_from_bytes(self.payload[10:]) + txt += "\n " + "\n ".join(str(binfw).split("\n")) return txt diff --git a/grmn/rgnbin.py b/grmn/rgnbin.py index f71ee67..453e37e 100644 --- a/grmn/rgnbin.py +++ b/grmn/rgnbin.py @@ -25,4 +25,11 @@ class RgnBin: if self.filename is None: return False with open(self.filename, "rb") as f: + rawdata = f.read() f.close() + self.load_from_bytes(rawdata) + + def load_from_bytes(self, payload: bytes): + print(repr(payload[0:10])) + jmp = unpack("