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 ++++++++++++++++++++--------------------- bootloader/tty.c | 7 ++++++- 2 files changed, 26 insertions(+), 22 deletions(-) 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; } diff --git a/bootloader/tty.c b/bootloader/tty.c index 8cf20fb..fe8f39d 100644 --- a/bootloader/tty.c +++ b/bootloader/tty.c @@ -28,6 +28,9 @@ void put(unsigned char c, int fd) { +#if DEBUG + fprintf(stderr, "-> 0x%.2x\n", c); +#endif while (write(fd, &c, 1) == -1) ; } @@ -39,7 +42,9 @@ get(int fd) while (read(fd, &c, 1) == -1) ; - +#if DEBUG + fprintf(stderr, "<- 0x%.2x\n", c); +#endif return c; } -- cgit v1.2.3