Esempio n. 1
0
    async def erase(self):
        # must be used by caller before writing any bytes
        assert not self.readonly
        assert self.length == 0  # 'already wrote?'

        for i in range(0, self.max_size, blksize):
            SF.block_erase(self.start + i)

            if i and self.message:
                from glob import dis
                dis.progress_bar_show(i / self.max_size)

            # expect block erase to take up to 2 seconds
            while SF.is_busy():
                await sleep_ms(50)
Esempio n. 2
0
    async def interact(self):
        from version import decode_firmware_header
        from sflash import SF

        date, version, _ = decode_firmware_header(self.hdr)

        msg = '''\
Install this new firmware?

  {version}
  {built}

Binary checksum and signature will be further verified before any changes are made.
'''.format(version=version, built=date)

        try:
            ch = await ux_show_story(msg)

            if ch == 'y':
                # Accepted:
                # - write final file header, so bootloader will see it
                # - reboot to start process
                from glob import dis
                import callgate
                SF.write(self.length, self.hdr)

                dis.fullscreen('Upgrading...', percent=1)

                callgate.show_logout(2)
            else:
                # they don't want to!
                self.refused = True
                SF.block_erase(0)           # just in case, but not required
                await ux_dramatic_pause("Refused.", 2)

        except BaseException as exc:
            self.failed = "Exception"
            sys.print_exception(exc)
        finally:
            UserAuthorizedAction.cleanup()      # because no results to store
            self.pop_menu()