X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/2bcaaabf0bbbb0232fe8ffe0a8943a14159852ab..bf3f2c5f96cdfc7629e93d810f42550349388122:/binwire.c diff --git a/binwire.c b/binwire.c index 9322ef1..ed6b98c 100644 --- a/binwire.c +++ b/binwire.c @@ -1,4 +1,9 @@ #include +#include +#include +#include +#include +#include void dowrite(char *s, int len) { @@ -9,20 +14,81 @@ void dowrite(char *s, int len) } } -void main() +int waitchar(int timeout) { - char buf[259]; + struct pollfd pfd; + + pfd.fd = 0; + pfd.events = POLLIN; + return poll(&pfd, 1, timeout) == 1; +} + +void expect(char *s, int len) +{ + int i; + char c; + for (i=0; i < len; i++) + { + if (waitchar(100) == 0) + { + fprintf(stderr, "Timeout reached in expect (expected %c)\n", s[i]); + return; + } + 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); + } +} + +void expect_no_chars() +{ + int cs = 0; + + while (waitchar(10) == 1) + { + char c; + if (read(0, &c, 1) == 0) + fprintf(stderr, "enc Short read...\n"); + cs++; + fprintf(stderr, "Warning: expected no chars, got %d\n", c); + } + if (cs) + fprintf(stderr, "Expect no chars failed: got %d chars\n", cs); + + +} + +void main(int argc, char **argv) +{ + unsigned char buf[259]; int sz; + int rfd; + + if (argc < 2) + { + fprintf(stderr, "Usage: %s [filename]\n", argv[0]); + exit(1); + } + rfd = open(argv[1], O_RDONLY); + if (rfd < 0) + { + perror("open"); + exit(1); + } + dowrite("\x1B" "A\x00\x00\x00...", 8); fprintf(stderr, "Address sent\n"); - while ((sz = read(0, buf+3, 128)) > 0) + expect("A...", 4); + while ((sz = read(rfd, buf+3, 128)) > 0) { buf[0] = 0x1B; buf[1] = 'D'; - buf[2] = sz - 1; + buf[2] = sz+1; dowrite(buf, sz + 3); - dowrite(".", 1); fprintf(stderr, "Data sent\n"); - usleep(100000); + expect("D", 1); + expect_no_chars(); } + exit(0); } \ No newline at end of file