From 38f5e041adbe1cd790a2cb29ae4cf3d0f1219587 Mon Sep 17 00:00:00 2001
From: Benjamin Koch <bbbsnowball@gmail.com>
Date: Fri, 9 Jun 2023 22:14:09 +0200
Subject: [PATCH] add option to download flash to Python script

---
 .../rust1/download_firmware_via_modbus.py     | 21 +++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/firmware/rust1/download_firmware_via_modbus.py b/firmware/rust1/download_firmware_via_modbus.py
index f858e1e..56b3d86 100644
--- a/firmware/rust1/download_firmware_via_modbus.py
+++ b/firmware/rust1/download_firmware_via_modbus.py
@@ -87,6 +87,27 @@ def main():
             if x.registers != [0, 1, 0, 1]:
                 raise Exception("We haven't implemented re-sending blocks, yet.")
 
+        if False:
+            with open("flash-read.bin", "wb") as f:
+                block_size = 32768
+                for offset in range(0, 2*1024*1024, block_size):
+                    x = client.write_registers(3, offset//512, slave=DEVICE_ADDR)
+                    logger.info("set offset: %r" % x)
+
+                    read_size = 200
+                    for offset2 in range(0, block_size, read_size):
+                        r = FileRecord(file_number=1, record_number=offset2//2, record_length=min(read_size, block_size-offset2)//2)
+                        x = client.read_file_record([
+                            r
+                        ], slave=DEVICE_ADDR)
+                        #logger.info("read: %r" % x)
+                        #logger.info("read: %r, %r" % (x.records[0], r))
+                        #logger.info("read: %r" % x.records[0].record_data)
+                        data = x.records[0].record_data
+                        assert(len(data) == r.record_length*2)
+                        assert(f.tell() == offset+offset2)
+                        f.write(data)
+
         x = client.write_registers(1, struct.unpack(">H", b"UP")[0], slave=DEVICE_ADDR)
         logger.info("write to mark for update: %s", x)
 
-- 
GitLab