FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/lldbg/cmdentry.c @ 995:c22afeecbf34
loadtools/scripts: D-Sample config added
| author | Mychaela Falconia <falcon@ivan.Harhan.ORG> | 
|---|---|
| date | Sat, 02 Jan 2016 04:05:51 +0000 | 
| parents | f5affe83ba2d | 
| children | 
| rev | line source | 
|---|---|
| 
865
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2 * This module implements ASCII command entry via the serial port, | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
3 * with normal echo and minimal editing (rubout and kill). | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
4 * | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
5 * The command string buffer is bss-allocated here as well. It is | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
6 * sized to allow a maximum-size S-record to be sent as a command, | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
7 * as that is how we expect flash loading and XRAM chain-loading | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
8 * to be done. | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
9 */ | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
10 | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
11 #define MAXCMD 527 | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
12 | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
13 char lldbg_command[MAXCMD+1]; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
14 | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
15 /* | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
16 * The command_entry() function takes no arguments, and begins by waiting | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
17 * for serial input - hence the prompt should be printed before calling it. | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
18 * | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
19 * This function returns when one of the following characters is received: | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
20 * CR - accepts the command | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
21 * ^C or ^U - cancels the command | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
22 * | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
23 * The return value is non-zero if a non-empty command was accepted with CR, | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
24 * or 0 if the user hit CR with no input or if the command was canceled | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
25 * with ^C or ^U. In any case a CRLF is sent out the serial port | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
26 * to close the input echo line before this function returns. | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
27 */ | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
28 lldbg_command_entry() | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
29 { | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
30 int inlen, ch; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
31 | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
32 for (inlen = 0; ; ) { | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
33 ch = lldbg_getchar(); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
34 if (ch >= ' ' && ch <= '~') { | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
35 if (inlen < MAXCMD) { | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
36 lldbg_command[inlen++] = ch; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
37 lldbg_putchar(ch); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
38 } else | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
39 /* putchar(7) */; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
40 continue; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
41 } | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
42 switch (ch) { | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
43 case '\r': | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
44 case '\n': | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
45 lldbg_command[inlen] = '\0'; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
46 lldbg_putchar('\n'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
47 return(inlen); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
48 case '\b': /* BS */ | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
49 case 0x7F: /* DEL */ | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
50 if (inlen) { | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
51 lldbg_putchar('\b'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
52 lldbg_putchar(' '); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
53 lldbg_putchar('\b'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
54 inlen--; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
55 } else | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
56 /* putchar(7) */; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
57 continue; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
58 case 0x03: /* ^C */ | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
59 lldbg_putchar('^'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
60 lldbg_putchar('C'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
61 lldbg_putchar('\n'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
62 return(0); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
63 case 0x15: /* ^U */ | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
64 lldbg_putchar('^'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
65 lldbg_putchar('U'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
66 lldbg_putchar('\n'); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
67 return(0); | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
68 default: | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
69 /* putchar(7) */; | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
70 } | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
71 } | 
| 
 
f5affe83ba2d
lldbg hack (poor girl's substitute for JTAG) implemented
 
Space Falcon <falcon@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
72 } | 
