]> Joshua Wise's Git repositories - fpgaboy.git/blame - binwire.c
Diag rom now runs from bootloader!
[fpgaboy.git] / binwire.c
CommitLineData
2bcaaabf 1#include <stdio.h>
bf3f2c5f
JW
2#include <sys/types.h>
3#include <sys/stat.h>
4#include <fcntl.h>
5#include <stdlib.h>
6#include <poll.h>
2bcaaabf
JW
7
8void dowrite(char *s, int len)
9{
10 int i;
11 for (i=0; i<len; i++)
12 {
13 write(1, s+i, 1);
14 }
15}
16
bf3f2c5f 17int waitchar(int timeout)
2bcaaabf 18{
bf3f2c5f
JW
19 struct pollfd pfd;
20
21 pfd.fd = 0;
22 pfd.events = POLLIN;
23 return poll(&pfd, 1, timeout) == 1;
24}
25
26void expect(char *s, int len)
27{
28 int i;
29 char c;
30 for (i=0; i < len; i++)
31 {
32 if (waitchar(100) == 0)
33 {
34 fprintf(stderr, "Timeout reached in expect (expected %c)\n", s[i]);
35 return;
36 }
37 while (read(0, &c, 1) == 0)
38 fprintf(stderr, "Short read...\n");
39 if (c != s[i])
40 fprintf(stderr, "Expect failed: expected %d, got %d (pos %d)\n", s[i], c, i);
41 }
42}
43
44void expect_no_chars()
45{
46 int cs = 0;
47
3db3fc27 48 while (waitchar(100) == 1)
bf3f2c5f
JW
49 {
50 char c;
51 if (read(0, &c, 1) == 0)
52 fprintf(stderr, "enc Short read...\n");
53 cs++;
54 fprintf(stderr, "Warning: expected no chars, got %d\n", c);
55 }
56 if (cs)
57 fprintf(stderr, "Expect no chars failed: got %d chars\n", cs);
58
59
60}
61
62void main(int argc, char **argv)
63{
64 unsigned char buf[259];
2bcaaabf 65 int sz;
bf3f2c5f
JW
66 int rfd;
67
68 if (argc < 2)
69 {
70 fprintf(stderr, "Usage: %s [filename]\n", argv[0]);
71 exit(1);
72 }
73 rfd = open(argv[1], O_RDONLY);
74 if (rfd < 0)
75 {
76 perror("open");
77 exit(1);
78 }
79
3db3fc27 80 dowrite("\x1B" "A\x00\x00\x00", 5);
2bcaaabf 81 fprintf(stderr, "Address sent\n");
3db3fc27
JW
82 expect("A", 1);
83 expect_no_chars();
84 while ((sz = read(rfd, buf+3, 255)) > 0)
2bcaaabf
JW
85 {
86 buf[0] = 0x1B;
87 buf[1] = 'D';
bf3f2c5f 88 buf[2] = sz+1;
2bcaaabf 89 dowrite(buf, sz + 3);
2bcaaabf 90 fprintf(stderr, "Data sent\n");
bf3f2c5f
JW
91 expect("D", 1);
92 expect_no_chars();
2bcaaabf 93 }
bf3f2c5f 94 exit(0);
2bcaaabf 95}
This page took 0.036061 seconds and 4 git commands to generate.