aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}