aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2011-04-06 11:19:50 +0000
committerDimitri Sokolyuk <demon@dim13.org>2011-04-06 11:19:50 +0000
commit9f8a74d8a18f7c4d4ed020b97784a4de299cc73c (patch)
tree628d12b8091a0fce918d9ffd4b5f1d7913522525
parent58a011ea08a55bee223a0028ddb6237e466b93d0 (diff)
add checksum
-rw-r--r--bootloader/bootloader.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/bootloader/bootloader.c b/bootloader/bootloader.c
index d83db57..9c4f39a 100644
--- a/bootloader/bootloader.c
+++ b/bootloader/bootloader.c
@@ -26,6 +26,7 @@ int
transfer(int fd, struct page *p, int pages, int pagesize)
{
int n, off;
+ unsigned char sum;
fprintf(stderr, "trying to reboot device\n");
usleep(500);
@@ -45,9 +46,14 @@ transfer(int fd, struct page *p, int pages, int pagesize)
if (p[n].dirty) {
put('D', fd);
put(n, fd);
- for (off = 0; off < pagesize; off++)
+ sum = n;
+ for (off = 0; off < pagesize; off++) {
put(p[n].data[off], fd);
- assert (get(fd) == 'd');
+ sum += p[n].data[off];
+ }
+ put(sum, fd);
+ if (get(fd) != 'd')
+ n--; /* resend */
}
}
fprintf(stderr, "\nrebooting\n");