From 99ad22f055c9700b954be3f12b259d6977d9c870 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 4 Jul 2011 21:54:38 +0000 Subject: new firmware --- bootloader/bootloader.c | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'bootloader/bootloader.c') diff --git a/bootloader/bootloader.c b/bootloader/bootloader.c index fbc1e69..d0d2f96 100644 --- a/bootloader/bootloader.c +++ b/bootloader/bootloader.c @@ -25,29 +25,20 @@ int transfer(int fd, struct page *p, int pages, int pagesize) { - int n, off, e = 0; + int n, off; unsigned char sum; -#if 0 - fprintf(stderr, "trying to reboot device\n"); - usleep(500); - put('R', fd); /* try to reboot */ - usleep(500); -#endif - - fprintf(stderr, "waiting for bootloader "); - do { - put('P', fd); - twiddle(); - } while (get(fd) != 'p'); + fprintf(stderr, "waiting for bootloader ..."); + while (get(fd) != '+') + ; fprintf(stderr, "\nwriting: "); for (n = 0; n < pages; n++) { - fprintf(stderr, "%c", e ? 'E' : ".o"[p[n].dirty]); + fprintf(stderr, "%c", ".o"[p[n].dirty]); if (p[n].dirty) { - put('D', fd); + put('@', fd); put(n, fd); sum = n; for (off = 0; off < pagesize; off++) { @@ -55,15 +46,23 @@ transfer(int fd, struct page *p, int pages, int pagesize) sum += p[n].data[off]; } put(sum, fd); - if (get(fd) != 'd') { - n--; /* resend */ - e = 1; - } else - e = 0; + switch (get(fd)) { + case '.': + break; /* success, next page */ + case '!': + n--; /* error stay on the same page */ + fprintf(stderr, "E"); + break; + default: + goto fubar; + } } } + +fubar: + fprintf(stderr, "\nrebooting\n"); - put('R', fd); + put('-', fd); return 0; } -- cgit v1.2.3