]> git.wh0rd.org Git - patches.git/blob - ldr-utils-prompt.patch
more random patches. who knows.
[patches.git] / ldr-utils-prompt.patch
1 Index: lfd.c
2 ===================================================================
3 --- lfd.c       (revision 1684)
4 +++ lfd.c       (working copy)
5 @@ -493,6 +493,16 @@ static void ldr_send_timeout(int sig)
6         warn("received signal %i: timeout while sending; aborting", sig);
7         exit(2);
8  }
9 +static char ldr_send_prompt(const char *msg)
10 +{
11 +       int foo;
12 +       char dummy;
13 +       alarm(0);
14 +       printf("%s: ", msg);
15 +       fflush(stdout);
16 +       foo = scanf("%c", &dummy);
17 +       return (foo == EOF ? EOF : dummy);
18 +}
19  static bool ldr_load_uart(LFD *alfd, const void *void_opts)
20  {
21         const struct ldr_load_options *opts = void_opts;
22 @@ -515,10 +525,9 @@ static bool ldr_load_uart(LFD *alfd, con
23  
24         setbuf(stdout, NULL);
25  
26 -       /* give ourselves like ten seconds to do autobaud */
27         old_alarm = signal(SIGALRM, ldr_send_timeout);
28 -       alarm(10);
29  
30 +       alarm(10);
31         printf("Opening %s ... ", tty);
32         if (tty[0] != '#') {
33                 fd = open(tty, O_RDWR);
34 @@ -538,6 +547,10 @@ static bool ldr_load_uart(LFD *alfd, con
35         } else
36                 printf("OK!\n");
37  
38 +       if (opts->prompt)
39 +               ldr_send_prompt("Press any key to send autobaud");
40 +
41 +       alarm(10);
42         printf("Trying to send autobaud ... ");
43         ret = write(fd, "@", 1);
44         if (ret != 1)
45 @@ -545,6 +558,10 @@ static bool ldr_load_uart(LFD *alfd, con
46         tcdrain(fd);
47         printf("OK!\n");
48  
49 +       if (opts->prompt)
50 +               ldr_send_prompt("Press any key to read autobaud");
51 +
52 +       alarm(10);
53         printf("Trying to read autobaud ... ");
54         ret = read_retry(fd, autobaud, 4);
55         if (ret != 4)
56 @@ -567,10 +584,15 @@ static bool ldr_load_uart(LFD *alfd, con
57                autobaud[0], autobaud[1], autobaud[2], autobaud[3]);
58  
59         if (ldr->header) {
60 +               if (opts->prompt)
61 +                       ldr_send_prompt("Press any key to send global LDR header");
62 +
63 +               alarm(10);
64                 printf("Sending global LDR header ... ");
65                 ret = write(fd, ldr->header, ldr->header_size);
66                 if (ret != (ssize_t)ldr->header_size)
67                         goto out;
68 +               tcdrain(fd);
69                 printf("OK!\n");
70         }
71  
72 @@ -580,6 +602,9 @@ static bool ldr_load_uart(LFD *alfd, con
73                         BLOCK *block = &(ldr->dxes[d].blocks[b]);
74                         int del;
75  
76 +                       if (opts->prompt)
77 +                               ldr_send_prompt("Press any key to send block header");
78 +
79                         alarm(60);
80  
81                         if (verbose)
82 @@ -591,6 +616,9 @@ static bool ldr_load_uart(LFD *alfd, con
83                                 goto out;
84                         tcdrain(fd);
85  
86 +                       if (opts->prompt && block->data != NULL)
87 +                               ldr_send_prompt("Press any key to send block data");
88 +
89                         del += printf("%zi] (%2.0f%%)", ldr->dxes[d].num_blocks,
90                                       ((float)(b+1) / (float)ldr->dxes[d].num_blocks) * 100);
91                         if (block->data != NULL) {
92 Index: ldr.c
93 ===================================================================
94 --- ldr.c       (revision 1684)
95 +++ ldr.c       (working copy)
96 @@ -101,13 +101,15 @@ static struct option_help const create_o
97  };
98  #define show_create_usage(status) show_some_usage("create", create_long_opts, create_opts_help, CREATE_PARSE_FLAGS, status)
99  
100 -#define LOAD_PARSE_FLAGS COMMON_FLAGS "b:f"
101 +#define LOAD_PARSE_FLAGS COMMON_FLAGS "b:p"
102  static struct option const load_long_opts[] = {
103         {"baud",      a_argument, NULL, 'b'},
104 +       {"prompt",   no_argument, NULL, 'p'},
105         COMMON_LONG_OPTS
106  };
107  static struct option_help const load_opts_help[] = {
108 -       {"Set baud rate (default 115200)", "<baud>"},
109 +       {"Set baud rate (default 115200)",           "<baud>"},
110 +       {"Prompt for data flow",                     NULL},
111         COMMON_HELP_OPTS
112  };
113  #define show_load_usage(status) show_some_usage("load", load_long_opts, load_opts_help, LOAD_PARSE_FLAGS, status)
114 @@ -238,11 +240,13 @@ static bool load_ldr(const int argc, cha
115         struct ldr_load_options opts = {
116                 .tty = NULL,
117                 .baud = 115200,
118 +               .prompt = false,
119         };
120  
121         while ((i=getopt_long(argc, argv, LOAD_PARSE_FLAGS, load_long_opts, NULL)) != -1) {
122                 switch (i) {
123                         case 'b': opts.baud = atoi(optarg); break;
124 +                       case 'p': opts.prompt = true; break;
125                         case 'h': show_load_usage(0);
126                         CASE_common_errors
127                 }
128 Index: ldr.h
129 ===================================================================
130 --- ldr.h       (revision 1684)
131 +++ ldr.h       (working copy)
132 @@ -46,6 +46,7 @@ struct ldr_create_options {
133  struct ldr_load_options {
134         const char *tty;
135         size_t baud;
136 +       bool prompt;
137  };
138  
139  struct ldr_dump_options {
140 Index: .depend
141 ===================================================================
142 --- .depend     (revision 1684)
143 +++ .depend     (working copy)
144 @@ -11,3 +11,4 @@ lfd_bf561.o: lfd_bf561.c ldr.h headers.h
145    dxe_jump.h blackfin_defines.h ldr_elf.h
146  lfd.o: lfd.c ldr.h headers.h elf.h helpers.h lfd.h dxes.h dxe_jump.h \
147    blackfin_defines.h ldr_elf.h
148 +test.o: test.c