X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/3db3fc270d517ca76518b47950f5240990e84cc5..6d070aeeba66499d17bd9abb9c5dfbb1317bf1c5:/binwire.c diff --git a/binwire.c b/binwire.c index a878a5d..3f19ca2 100644 --- a/binwire.c +++ b/binwire.c @@ -23,22 +23,26 @@ int waitchar(int timeout) return poll(&pfd, 1, timeout) == 1; } -void expect(char *s, int len) +int expect(char *s, int len) { int i; char c; for (i=0; i < len; i++) { - if (waitchar(100) == 0) + if (waitchar(1000) == 0) { fprintf(stderr, "Timeout reached in expect (expected %c)\n", s[i]); - return; + return 1; } while (read(0, &c, 1) == 0) fprintf(stderr, "Short read...\n"); if (c != s[i]) + { fprintf(stderr, "Expect failed: expected %d, got %d (pos %d)\n", s[i], c, i); + return 1; + } } + return 0; } void expect_no_chars() @@ -55,8 +59,6 @@ void expect_no_chars() } if (cs) fprintf(stderr, "Expect no chars failed: got %d chars\n", cs); - - } void main(int argc, char **argv) @@ -64,6 +66,7 @@ void main(int argc, char **argv) unsigned char buf[259]; int sz; int rfd; + int tc = 0; if (argc < 2) { @@ -83,13 +86,24 @@ void main(int argc, char **argv) expect_no_chars(); while ((sz = read(rfd, buf+3, 255)) > 0) { + int rv; buf[0] = 0x1B; buf[1] = 'D'; buf[2] = sz+1; + tc += sz; + retry: dowrite(buf, sz + 3); - fprintf(stderr, "Data sent\n"); - expect("D", 1); + fprintf(stderr, "Data sent (%d)\n", tc); + rv = expect("D", 1); expect_no_chars(); + if (rv) + { + printf("Failure to ack... retrying\n"); + dowrite("...", 3); + rv = expect("...", 3); + expect_no_chars(); + goto retry; + } } exit(0); } \ No newline at end of file