aboutsummaryrefslogtreecommitdiff
path: root/bootloader
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2011-07-04 21:54:38 +0000
committerDimitri Sokolyuk <demon@dim13.org>2011-07-04 21:54:38 +0000
commit99ad22f055c9700b954be3f12b259d6977d9c870 (patch)
treebb0f1588b9d86ecc9e74f3b5f31722662d5f8266 /bootloader
parentb55eb658ef8adcad1c0f4bbc450ff651b31e7d1a (diff)
new firmware
Diffstat (limited to 'bootloader')
-rw-r--r--bootloader/bootloader.c41
-rw-r--r--bootloader/tty.c7
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;
}