From 3ccc1991988578d2a25d2ed4e1e1d4dab4560f60 Mon Sep 17 00:00:00 2001 From: Joerg Wunsch Date: Sat, 30 Mar 2024 22:07:42 +0100 Subject: [PATCH] Add flash_load (from file) and flash_write (to device) This completes all operations on flash. --- src/python/adgui.py | 46 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/python/adgui.py b/src/python/adgui.py index 3dfebbf8..15f94bd3 100755 --- a/src/python/adgui.py +++ b/src/python/adgui.py @@ -344,10 +344,13 @@ class adgui(QObject): self.memories.readSig.pressed.connect(self.read_signature) self.memories.choose.pressed.connect(self.ask_flash_file) self.memories.read.pressed.connect(self.flash_read) - self.load_settings() - self.memories.filename.editingFinished.connect(self.detect_flash_file) + self.memories.program.pressed.connect(self.flash_write) self.memories.save.pressed.connect(self.flash_save) + self.memories.load.pressed.connect(self.flash_load) self.memories.erase.pressed.connect(self.chip_erase) + self.memories.clear.pressed.connect(self.clear_buffer) + self.memories.filename.editingFinished.connect(self.detect_flash_file) + self.load_settings() def log(self, s: str, level: int = ad.MSG_INFO, no_nl: bool = False): # level to color mapping @@ -703,6 +706,27 @@ class adgui(QObject): self.flash_size = amnt self.log(f"Read {amnt} bytes") + def flash_write(self): + self.adgui.progressBar.setEnabled(True) + m = ad.avr_locate_mem(self.dev, 'flash') + if not m: + self.log("Could not find 'flash' memory", ad.MSG_ERROR) + return + if self.flash_size == 0: + self.log("No data to write into 'flash' memory", ad.MSG_WARNING) + return + amnt = ad.avr_write_mem(self.pgm, self.dev, m, self.flash_size) + self.log(f"Programmed {amnt} bytes") + + def clear_buffer(self): + m = ad.avr_locate_mem(self.dev, 'flash') + if not m: + self.log("Could not find 'flash' memory", ad.MSG_ERROR) + return + m.clear(m.size) + self.log(f"Cleared {m.size} bytes of buffer, and allocation flags") + self.flash_size = 0 + def flash_save(self): if self.memories.ffAuto.isChecked() or \ self.memories.ffELF.isChecked(): @@ -732,6 +756,24 @@ class adgui(QObject): amnt = ad.fileio(ad.FIO_WRITE, self.flashname, fmt, self.dev, "flash", amnt) self.log(f"Wrote {amnt} bytes to {self.flashname}") + def flash_load(self): + if self.memories.ffAuto.isChecked(): + fmt = ad.FMT_AUTO + elif self.memories.ffELF.isChecked(): + fmt = ad.FMT_ELF + if self.memories.ffIhex.isChecked(): + fmt = ad.FMT_IHEX + elif self.memories.ffSrec.isChecked(): + fmt = ad.FMT_SREC + elif self.memories.ffRbin.isChecked(): + fmt = ad.FMT_RBIN + else: + self.log("Internal error: cannot determine file format", ad.MSG_ERROR) + return + amnt = ad.fileio(ad.FIO_READ, self.flashname, fmt, self.dev, "flash", -1) + self.log(f"Read {amnt} bytes from {self.flashname}") + self.flash_size = amnt + def chip_erase(self): result = QMessageBox.question(self.memories, f"Erase {self.dev.desc}?",