From 9232a29a1f0a03d3562fcf142fe2dc90841806e0 Mon Sep 17 00:00:00 2001 From: Mikhail Yudin Date: Wed, 14 Jun 2023 00:36:47 +0700 Subject: [PATCH] feat: fw library ++ --- fw.py | 9 +++++++-- uvk5.py | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/fw.py b/fw.py index 40e9c16..12c7560 100755 --- a/fw.py +++ b/fw.py @@ -1,14 +1,19 @@ #!/usr/bin/env python3 -from uvk5 import argv, eprint, Firmware +from uvk5 import UVK5, argv, eprint, Firmware def main(path): fw = Firmware.load(path) + argc = len(argv) eprint('Version:', fw.version) - if len(argv) == 4 and argv[2] == 'mod': + if argc >= 4 and argv[2] == 'mod': eprint('mods:', argv[3]) fw.apply_mods(argv[3].split(',')) fw.write() + if argc == 5: + with UVK5(argv[4]) as uvk5: + uvk5.get_version() + uvk5.send_firmware(fw) if __name__ == '__main__': main(argv[1]) diff --git a/uvk5.py b/uvk5.py index 42f96f4..5bb4601 100755 --- a/uvk5.py +++ b/uvk5.py @@ -170,6 +170,15 @@ class UVK5(Serial): self.timestamp = i2b32(time()) super().__init__(port, 38400, timeout=5) + def send_firmware(self, fw:Firmware): + for block, data in enumerate(chunk(fw, UVK5.BLOCK_SIZE)): + offset = block * UVK5.BLOCK_SIZE + self.write_fw(offset, data) + exit(128) + + def write_fw(self, offset, data): + eprint('FW write not implemented yet', offset, len(data)) + def get_version(self): return self.cmd(UVK5.CMD_VERSION_REQ)[1][:10].decode().rstrip('\x00')