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