Eli Hughes
/
InternetOfThing
2014 Freescale / Hack A Day Make It Challenge FRDM-K64 Internet of "Thing"
Terminal.cpp@0:423d5729e94e, 2014-04-10 (annotated)
- Committer:
- emh203
- Date:
- Thu Apr 10 21:14:23 2014 +0000
- Revision:
- 0:423d5729e94e
1st add. Used for final demo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emh203 | 0:423d5729e94e | 1 | /* |
emh203 | 0:423d5729e94e | 2 | |
emh203 | 0:423d5729e94e | 3 | -------------------------------------------- |
emh203 | 0:423d5729e94e | 4 | | | |
emh203 | 0:423d5729e94e | 5 | | .... | |
emh203 | 0:423d5729e94e | 6 | | 7OO$?I78. | |
emh203 | 0:423d5729e94e | 7 | | .?8++++7+II?D. | |
emh203 | 0:423d5729e94e | 8 | | .?O++=I++II+?= | |
emh203 | 0:423d5729e94e | 9 | | .IO++?7==I??$. | |
emh203 | 0:423d5729e94e | 10 | | .8++=$===?+I$ | |
emh203 | 0:423d5729e94e | 11 | | ?+++===+===+ | |
emh203 | 0:423d5729e94e | 12 | | ???=+I++==+? | |
emh203 | 0:423d5729e94e | 13 | | .??++====+==++ | |
emh203 | 0:423d5729e94e | 14 | | ?+++==========~ | |
emh203 | 0:423d5729e94e | 15 | | $+++==========+= | |
emh203 | 0:423d5729e94e | 16 | | =?+===+==+I======== | |
emh203 | 0:423d5729e94e | 17 | | ..++======~~~~========? | |
emh203 | 0:423d5729e94e | 18 | | .$?I??+=~~===~~~===~===++. | |
emh203 | 0:423d5729e94e | 19 | | .+==.+=~~~=~==~~~~==~~=~==+? | |
emh203 | 0:423d5729e94e | 20 | | ?===I+====~~=~~~=~~=====~~~=?. | |
emh203 | 0:423d5729e94e | 21 | | .=~~~+==~==..~~~~~~= ~~~~=7= | |
emh203 | 0:423d5729e94e | 22 | | +=~~?+~~=. ==~~~~=. ~~~~=?. | |
emh203 | 0:423d5729e94e | 23 | | =~~~=~~~ ?===~~+. ~~~~+ | |
emh203 | 0:423d5729e94e | 24 | | +~~:+~~= =~~==. =~~+. | |
emh203 | 0:423d5729e94e | 25 | | ~:~ =~~= =~~~= ~=== | |
emh203 | 0:423d5729e94e | 26 | | I=~~ ,=~~= ,. | |
emh203 | 0:423d5729e94e | 27 | | ~~. ,==== | |
emh203 | 0:423d5729e94e | 28 | | ==== | |
emh203 | 0:423d5729e94e | 29 | | =~~. | |
emh203 | 0:423d5729e94e | 30 | | | |
emh203 | 0:423d5729e94e | 31 | |------------------------------------------| |
emh203 | 0:423d5729e94e | 32 | | Internet Of Thing | |
emh203 | 0:423d5729e94e | 33 | | Eli Hughes | |
emh203 | 0:423d5729e94e | 34 | | Freescale / Hack-a-day Make-It-Challenge | |
emh203 | 0:423d5729e94e | 35 | | FTF 2014 - Dallas, Tx | |
emh203 | 0:423d5729e94e | 36 | |------------------------------------------| |
emh203 | 0:423d5729e94e | 37 | |
emh203 | 0:423d5729e94e | 38 | */ |
emh203 | 0:423d5729e94e | 39 | #include "Terminal.h" |
emh203 | 0:423d5729e94e | 40 | #include "Types.h" |
emh203 | 0:423d5729e94e | 41 | #include "Queue.h" |
emh203 | 0:423d5729e94e | 42 | #include <string.h> |
emh203 | 0:423d5729e94e | 43 | #include <stdint.h> |
emh203 | 0:423d5729e94e | 44 | #include "System.h" |
emh203 | 0:423d5729e94e | 45 | |
emh203 | 0:423d5729e94e | 46 | //***************************************************************** |
emh203 | 0:423d5729e94e | 47 | //Terminal Configuration |
emh203 | 0:423d5729e94e | 48 | //***************************************************************** |
emh203 | 0:423d5729e94e | 49 | |
emh203 | 0:423d5729e94e | 50 | #define MAX_TERMINAL_LINE_CHARS 64 |
emh203 | 0:423d5729e94e | 51 | #define MAX_TERMINAL_CMD_CHARS 32 |
emh203 | 0:423d5729e94e | 52 | |
emh203 | 0:423d5729e94e | 53 | ByteQueue TERMINAL_OUTPUT_QUEUE; |
emh203 | 0:423d5729e94e | 54 | ByteQueue TERMINAL_INPUT_QUEUE; |
emh203 | 0:423d5729e94e | 55 | |
emh203 | 0:423d5729e94e | 56 | #define TERMINAL_QUEUE_SIZE 2048 |
emh203 | 0:423d5729e94e | 57 | |
emh203 | 0:423d5729e94e | 58 | uint8_t TERMINAL_OUTPUT_QUEUE_Storage[TERMINAL_QUEUE_SIZE]; |
emh203 | 0:423d5729e94e | 59 | uint8_t TERMINAL_INPUT_QUEUE_Storage[TERMINAL_QUEUE_SIZE]; |
emh203 | 0:423d5729e94e | 60 | |
emh203 | 0:423d5729e94e | 61 | typedef void (*TerminalCallback)(char *); |
emh203 | 0:423d5729e94e | 62 | |
emh203 | 0:423d5729e94e | 63 | |
emh203 | 0:423d5729e94e | 64 | typedef struct |
emh203 | 0:423d5729e94e | 65 | { |
emh203 | 0:423d5729e94e | 66 | const char *CommandString; |
emh203 | 0:423d5729e94e | 67 | TerminalCallback Callback; |
emh203 | 0:423d5729e94e | 68 | const char *HelpString; |
emh203 | 0:423d5729e94e | 69 | |
emh203 | 0:423d5729e94e | 70 | } TerminalCallbackRecord; |
emh203 | 0:423d5729e94e | 71 | |
emh203 | 0:423d5729e94e | 72 | //Callback function prototypes |
emh203 | 0:423d5729e94e | 73 | void TerminalCmd_Help(char *arg); |
emh203 | 0:423d5729e94e | 74 | void TerminalCmd_Go(char *arg); |
emh203 | 0:423d5729e94e | 75 | void TerminalCmd_SpinCW(char *arg); |
emh203 | 0:423d5729e94e | 76 | void TerminalCmd_SpinCCW(char *arg); |
emh203 | 0:423d5729e94e | 77 | void TerminalCmd_Stop(char *arg); |
emh203 | 0:423d5729e94e | 78 | |
emh203 | 0:423d5729e94e | 79 | void TerminalCmd_Reboot(char *arg); |
emh203 | 0:423d5729e94e | 80 | void TerminalCmd_Back(char *arg); |
emh203 | 0:423d5729e94e | 81 | |
emh203 | 0:423d5729e94e | 82 | //Populate this array with the callback functions and their terminal command string |
emh203 | 0:423d5729e94e | 83 | TerminalCallbackRecord MyTerminalCallbackRecords[] ={ {"help",TerminalCmd_Help,"Lists available commands"}, |
emh203 | 0:423d5729e94e | 84 | {"thing_go",TerminalCmd_Go," Tells the thing to go forward"}, |
emh203 | 0:423d5729e94e | 85 | {"thing_cw",TerminalCmd_SpinCW," Tells the thing to spin clock-wise"}, |
emh203 | 0:423d5729e94e | 86 | {"thing_ccw",TerminalCmd_SpinCCW," Tells the thing to spin counter clockwise"}, |
emh203 | 0:423d5729e94e | 87 | {"thing_stop",TerminalCmd_Stop,"Tells the thing to stop"}, |
emh203 | 0:423d5729e94e | 88 | {"thing_back",TerminalCmd_Back,"Tells the thing to go"}, |
emh203 | 0:423d5729e94e | 89 | }; |
emh203 | 0:423d5729e94e | 90 | |
emh203 | 0:423d5729e94e | 91 | //***************************************************************** |
emh203 | 0:423d5729e94e | 92 | //Plumbing..... |
emh203 | 0:423d5729e94e | 93 | //***************************************************************** |
emh203 | 0:423d5729e94e | 94 | |
emh203 | 0:423d5729e94e | 95 | #define NUM_TERMINAL_COMMANDS (sizeof(MyTerminalCallbackRecords)/sizeof(TerminalCallbackRecord)) |
emh203 | 0:423d5729e94e | 96 | |
emh203 | 0:423d5729e94e | 97 | char TerminalLineBuf[MAX_TERMINAL_LINE_CHARS]; |
emh203 | 0:423d5729e94e | 98 | uint8_t TerminalPos; |
emh203 | 0:423d5729e94e | 99 | char TerminalCmdBuf[MAX_TERMINAL_CMD_CHARS+1]; |
emh203 | 0:423d5729e94e | 100 | char TerminalArgs[MAX_TERMINAL_LINE_CHARS-MAX_TERMINAL_CMD_CHARS]; |
emh203 | 0:423d5729e94e | 101 | uint8_t NextCharIn; |
emh203 | 0:423d5729e94e | 102 | uint8_t CmdFound; |
emh203 | 0:423d5729e94e | 103 | |
emh203 | 0:423d5729e94e | 104 | void TerminalBootMsg() |
emh203 | 0:423d5729e94e | 105 | { |
emh203 | 0:423d5729e94e | 106 | TERMINAL_PRINTF("-------------------------------------------- \r\n"); |
emh203 | 0:423d5729e94e | 107 | TERMINAL_PRINTF("| |\r\n"); |
emh203 | 0:423d5729e94e | 108 | TERMINAL_PRINTF("| .... | \r\n"); |
emh203 | 0:423d5729e94e | 109 | TERMINAL_PRINTF("| 7OO$?I78. | \r\n"); |
emh203 | 0:423d5729e94e | 110 | TERMINAL_PRINTF("| .?8++++7+II?D. | \r\n"); |
emh203 | 0:423d5729e94e | 111 | TERMINAL_PRINTF("| .?O++=I++II+?= | \r\n"); |
emh203 | 0:423d5729e94e | 112 | TERMINAL_PRINTF("| .IO++?7==I??$. | \r\n"); |
emh203 | 0:423d5729e94e | 113 | TERMINAL_PRINTF("| .8++=$===?+I$ | \r\n"); |
emh203 | 0:423d5729e94e | 114 | TERMINAL_PRINTF("| ?+++===+===+ | \r\n"); |
emh203 | 0:423d5729e94e | 115 | TERMINAL_PRINTF("| ???=+I++==+? | \r\n"); |
emh203 | 0:423d5729e94e | 116 | TERMINAL_PRINTF("| .??++====+==++ | \r\n"); |
emh203 | 0:423d5729e94e | 117 | TERMINAL_PRINTF("| ?+++==========~ | \r\n"); |
emh203 | 0:423d5729e94e | 118 | TERMINAL_PRINTF("| $+++==========+= | \r\n"); |
emh203 | 0:423d5729e94e | 119 | TERMINAL_PRINTF("| =?+===+==+I======== | \r\n"); |
emh203 | 0:423d5729e94e | 120 | TERMINAL_PRINTF("| ..++======~~~~========? | \r\n"); |
emh203 | 0:423d5729e94e | 121 | TERMINAL_PRINTF("| .$?I??+=~~===~~~===~===++. | \r\n"); |
emh203 | 0:423d5729e94e | 122 | TERMINAL_PRINTF("| .+==.+=~~~=~==~~~~==~~=~==+? | \r\n"); |
emh203 | 0:423d5729e94e | 123 | TERMINAL_PRINTF("| ?===I+====~~=~~~=~~=====~~~=?. | \r\n"); |
emh203 | 0:423d5729e94e | 124 | TERMINAL_PRINTF("| .=~~~+==~==..~~~~~~= ~~~~=7= | \r\n"); |
emh203 | 0:423d5729e94e | 125 | TERMINAL_PRINTF("| +=~~?+~~=. ==~~~~=. ~~~~=?. | \r\n"); |
emh203 | 0:423d5729e94e | 126 | TERMINAL_PRINTF("| =~~~=~~~ ?===~~+. ~~~~+ | \r\n"); |
emh203 | 0:423d5729e94e | 127 | TERMINAL_PRINTF("| +~~:+~~= =~~==. =~~+. | \r\n"); |
emh203 | 0:423d5729e94e | 128 | TERMINAL_PRINTF("| ~:~ =~~= =~~~= ~=== | \r\n"); |
emh203 | 0:423d5729e94e | 129 | TERMINAL_PRINTF("| I=~~ ,=~~= ,. | \r\n"); |
emh203 | 0:423d5729e94e | 130 | TERMINAL_PRINTF("| ~~. ,==== | \r\n"); |
emh203 | 0:423d5729e94e | 131 | TERMINAL_PRINTF("| ==== | \r\n"); |
emh203 | 0:423d5729e94e | 132 | TERMINAL_PRINTF("| =~~. | \r\n"); |
emh203 | 0:423d5729e94e | 133 | TERMINAL_PRINTF("| |\r\n"); |
emh203 | 0:423d5729e94e | 134 | TERMINAL_PRINTF("|------------------------------------------|\r\n"); |
emh203 | 0:423d5729e94e | 135 | TERMINAL_PRINTF("| Internet Of Thing |\r\n"); |
emh203 | 0:423d5729e94e | 136 | TERMINAL_PRINTF("| Eli Hughes |\r\n"); |
emh203 | 0:423d5729e94e | 137 | TERMINAL_PRINTF("| Freescale / Hack-a-day Make-It-Challenge |\r\n"); |
emh203 | 0:423d5729e94e | 138 | TERMINAL_PRINTF("| FTF 2014 - Dallas, Tx |\r\n"); |
emh203 | 0:423d5729e94e | 139 | TERMINAL_PRINTF("|------------------------------------------|\r\n\r\n>"); |
emh203 | 0:423d5729e94e | 140 | } |
emh203 | 0:423d5729e94e | 141 | |
emh203 | 0:423d5729e94e | 142 | void TFC_InitTerminal() |
emh203 | 0:423d5729e94e | 143 | { |
emh203 | 0:423d5729e94e | 144 | TerminalPos = 0; |
emh203 | 0:423d5729e94e | 145 | CmdFound = 0; |
emh203 | 0:423d5729e94e | 146 | |
emh203 | 0:423d5729e94e | 147 | InitByteQueue(&TERMINAL_OUTPUT_QUEUE,TERMINAL_QUEUE_SIZE,&TERMINAL_OUTPUT_QUEUE_Storage[0]); |
emh203 | 0:423d5729e94e | 148 | InitByteQueue(&TERMINAL_INPUT_QUEUE,TERMINAL_QUEUE_SIZE,&TERMINAL_INPUT_QUEUE_Storage[0]); |
emh203 | 0:423d5729e94e | 149 | |
emh203 | 0:423d5729e94e | 150 | |
emh203 | 0:423d5729e94e | 151 | TerminalBootMsg(); |
emh203 | 0:423d5729e94e | 152 | } |
emh203 | 0:423d5729e94e | 153 | |
emh203 | 0:423d5729e94e | 154 | void TerminalCmd_Help(char *arg) |
emh203 | 0:423d5729e94e | 155 | { |
emh203 | 0:423d5729e94e | 156 | uint8_t i; |
emh203 | 0:423d5729e94e | 157 | |
emh203 | 0:423d5729e94e | 158 | TERMINAL_PRINTF("\r\n\r\nCommand List:\r\n"); |
emh203 | 0:423d5729e94e | 159 | TERMINAL_PRINTF("----------------------\r\n"); |
emh203 | 0:423d5729e94e | 160 | |
emh203 | 0:423d5729e94e | 161 | for(i=0;i<NUM_TERMINAL_COMMANDS;i++) |
emh203 | 0:423d5729e94e | 162 | { |
emh203 | 0:423d5729e94e | 163 | TERMINAL_PRINTF("%s ----> %s\r\n",MyTerminalCallbackRecords[i].CommandString,MyTerminalCallbackRecords[i].HelpString); |
emh203 | 0:423d5729e94e | 164 | } |
emh203 | 0:423d5729e94e | 165 | |
emh203 | 0:423d5729e94e | 166 | TERMINAL_PRINTF("\r\n\r\n"); |
emh203 | 0:423d5729e94e | 167 | } |
emh203 | 0:423d5729e94e | 168 | |
emh203 | 0:423d5729e94e | 169 | |
emh203 | 0:423d5729e94e | 170 | void TerminalCmd_Go(char *arg) |
emh203 | 0:423d5729e94e | 171 | { |
emh203 | 0:423d5729e94e | 172 | SPIN_CCW = 0; |
emh203 | 0:423d5729e94e | 173 | SPIN_CW = 0; |
emh203 | 0:423d5729e94e | 174 | GO_FORWARD = 1; |
emh203 | 0:423d5729e94e | 175 | GO_REVERSE = 0; |
emh203 | 0:423d5729e94e | 176 | |
emh203 | 0:423d5729e94e | 177 | } |
emh203 | 0:423d5729e94e | 178 | |
emh203 | 0:423d5729e94e | 179 | void TerminalCmd_Back(char *arg) |
emh203 | 0:423d5729e94e | 180 | { |
emh203 | 0:423d5729e94e | 181 | SPIN_CCW = 0; |
emh203 | 0:423d5729e94e | 182 | SPIN_CW = 0; |
emh203 | 0:423d5729e94e | 183 | GO_FORWARD = 0; |
emh203 | 0:423d5729e94e | 184 | GO_REVERSE = 1; |
emh203 | 0:423d5729e94e | 185 | |
emh203 | 0:423d5729e94e | 186 | } |
emh203 | 0:423d5729e94e | 187 | |
emh203 | 0:423d5729e94e | 188 | void TerminalCmd_SpinCW(char *arg) |
emh203 | 0:423d5729e94e | 189 | { |
emh203 | 0:423d5729e94e | 190 | SPIN_CCW = 0; |
emh203 | 0:423d5729e94e | 191 | SPIN_CW = 1; |
emh203 | 0:423d5729e94e | 192 | GO_FORWARD = 0; |
emh203 | 0:423d5729e94e | 193 | GO_REVERSE = 0; |
emh203 | 0:423d5729e94e | 194 | |
emh203 | 0:423d5729e94e | 195 | } |
emh203 | 0:423d5729e94e | 196 | void TerminalCmd_SpinCCW(char *arg) |
emh203 | 0:423d5729e94e | 197 | { |
emh203 | 0:423d5729e94e | 198 | SPIN_CCW = 1; |
emh203 | 0:423d5729e94e | 199 | SPIN_CW = 0; |
emh203 | 0:423d5729e94e | 200 | GO_FORWARD = 0; |
emh203 | 0:423d5729e94e | 201 | GO_REVERSE = 0; |
emh203 | 0:423d5729e94e | 202 | } |
emh203 | 0:423d5729e94e | 203 | |
emh203 | 0:423d5729e94e | 204 | void TerminalCmd_Stop(char *arg) |
emh203 | 0:423d5729e94e | 205 | { |
emh203 | 0:423d5729e94e | 206 | |
emh203 | 0:423d5729e94e | 207 | SPIN_CCW = 0; |
emh203 | 0:423d5729e94e | 208 | SPIN_CW = 0; |
emh203 | 0:423d5729e94e | 209 | GO_FORWARD = 0; |
emh203 | 0:423d5729e94e | 210 | GO_REVERSE = 0; |
emh203 | 0:423d5729e94e | 211 | |
emh203 | 0:423d5729e94e | 212 | } |
emh203 | 0:423d5729e94e | 213 | |
emh203 | 0:423d5729e94e | 214 | |
emh203 | 0:423d5729e94e | 215 | void TerminalCmd_Reboot(char *arg) |
emh203 | 0:423d5729e94e | 216 | { |
emh203 | 0:423d5729e94e | 217 | TerminalBootMsg(); |
emh203 | 0:423d5729e94e | 218 | } |
emh203 | 0:423d5729e94e | 219 | |
emh203 | 0:423d5729e94e | 220 | |
emh203 | 0:423d5729e94e | 221 | void TFC_ProcessTerminal() |
emh203 | 0:423d5729e94e | 222 | { |
emh203 | 0:423d5729e94e | 223 | uint8_t i,j; |
emh203 | 0:423d5729e94e | 224 | uint8_t ArgsFound; |
emh203 | 0:423d5729e94e | 225 | |
emh203 | 0:423d5729e94e | 226 | if(TERMINAL_READABLE) |
emh203 | 0:423d5729e94e | 227 | { |
emh203 | 0:423d5729e94e | 228 | NextCharIn = TERMINAL_GETC; |
emh203 | 0:423d5729e94e | 229 | |
emh203 | 0:423d5729e94e | 230 | switch(NextCharIn) |
emh203 | 0:423d5729e94e | 231 | { |
emh203 | 0:423d5729e94e | 232 | case '\r': |
emh203 | 0:423d5729e94e | 233 | |
emh203 | 0:423d5729e94e | 234 | TerminalLineBuf[TerminalPos++] = 0x0; |
emh203 | 0:423d5729e94e | 235 | TERMINAL_PUTC(NextCharIn); |
emh203 | 0:423d5729e94e | 236 | |
emh203 | 0:423d5729e94e | 237 | if(TerminalPos > 1) |
emh203 | 0:423d5729e94e | 238 | { |
emh203 | 0:423d5729e94e | 239 | //find the command |
emh203 | 0:423d5729e94e | 240 | i=0; |
emh203 | 0:423d5729e94e | 241 | while(TerminalLineBuf[i]>0x20 && TerminalLineBuf[i]<0x7f) |
emh203 | 0:423d5729e94e | 242 | { |
emh203 | 0:423d5729e94e | 243 | TerminalCmdBuf[i] = TerminalLineBuf[i]; |
emh203 | 0:423d5729e94e | 244 | i++; |
emh203 | 0:423d5729e94e | 245 | |
emh203 | 0:423d5729e94e | 246 | if(i==MAX_TERMINAL_CMD_CHARS) |
emh203 | 0:423d5729e94e | 247 | { |
emh203 | 0:423d5729e94e | 248 | break; |
emh203 | 0:423d5729e94e | 249 | } |
emh203 | 0:423d5729e94e | 250 | } |
emh203 | 0:423d5729e94e | 251 | |
emh203 | 0:423d5729e94e | 252 | TerminalCmdBuf[i] = 0; |
emh203 | 0:423d5729e94e | 253 | TerminalCmdBuf[i+1] = 0; |
emh203 | 0:423d5729e94e | 254 | |
emh203 | 0:423d5729e94e | 255 | |
emh203 | 0:423d5729e94e | 256 | ArgsFound = TRUE; |
emh203 | 0:423d5729e94e | 257 | memset(TerminalArgs,0x00,sizeof(TerminalArgs)); |
emh203 | 0:423d5729e94e | 258 | //scan for num terminator or next non whitespace |
emh203 | 0:423d5729e94e | 259 | while(TerminalLineBuf[i]<=0x20 && (i<MAX_TERMINAL_LINE_CHARS)) |
emh203 | 0:423d5729e94e | 260 | { |
emh203 | 0:423d5729e94e | 261 | if(TerminalLineBuf[i] == 0x00) |
emh203 | 0:423d5729e94e | 262 | { |
emh203 | 0:423d5729e94e | 263 | |
emh203 | 0:423d5729e94e | 264 | //if we find a NULL terminator before a non whitespace character they flag for no arguments |
emh203 | 0:423d5729e94e | 265 | ArgsFound = FALSE; |
emh203 | 0:423d5729e94e | 266 | break; |
emh203 | 0:423d5729e94e | 267 | } |
emh203 | 0:423d5729e94e | 268 | i++; |
emh203 | 0:423d5729e94e | 269 | } |
emh203 | 0:423d5729e94e | 270 | |
emh203 | 0:423d5729e94e | 271 | if(ArgsFound == TRUE) |
emh203 | 0:423d5729e94e | 272 | { |
emh203 | 0:423d5729e94e | 273 | strcpy(TerminalArgs,&TerminalLineBuf[i]); |
emh203 | 0:423d5729e94e | 274 | |
emh203 | 0:423d5729e94e | 275 | //trim trailing whitespace |
emh203 | 0:423d5729e94e | 276 | i = sizeof(TerminalArgs)-1; |
emh203 | 0:423d5729e94e | 277 | |
emh203 | 0:423d5729e94e | 278 | while((TerminalArgs[i]<0x21) && (i>0)) |
emh203 | 0:423d5729e94e | 279 | { |
emh203 | 0:423d5729e94e | 280 | TerminalArgs[i]= 0x00; |
emh203 | 0:423d5729e94e | 281 | i--; |
emh203 | 0:423d5729e94e | 282 | } |
emh203 | 0:423d5729e94e | 283 | } |
emh203 | 0:423d5729e94e | 284 | |
emh203 | 0:423d5729e94e | 285 | CmdFound = FALSE; |
emh203 | 0:423d5729e94e | 286 | for(j=0;j<NUM_TERMINAL_COMMANDS;j++) |
emh203 | 0:423d5729e94e | 287 | { |
emh203 | 0:423d5729e94e | 288 | if(strcmp(TerminalCmdBuf,MyTerminalCallbackRecords[j].CommandString) == 0) |
emh203 | 0:423d5729e94e | 289 | { |
emh203 | 0:423d5729e94e | 290 | TERMINAL_PRINTF("\r\n"); |
emh203 | 0:423d5729e94e | 291 | if(MyTerminalCallbackRecords[j].Callback != NULL) |
emh203 | 0:423d5729e94e | 292 | MyTerminalCallbackRecords[j].Callback(TerminalArgs); |
emh203 | 0:423d5729e94e | 293 | |
emh203 | 0:423d5729e94e | 294 | CmdFound = TRUE; |
emh203 | 0:423d5729e94e | 295 | break; |
emh203 | 0:423d5729e94e | 296 | } |
emh203 | 0:423d5729e94e | 297 | } |
emh203 | 0:423d5729e94e | 298 | if(CmdFound == FALSE) |
emh203 | 0:423d5729e94e | 299 | { |
emh203 | 0:423d5729e94e | 300 | TERMINAL_PRINTF("\r\n%s command not recognized.\r\n\r\n",TerminalCmdBuf); |
emh203 | 0:423d5729e94e | 301 | TerminalCmd_Help("no arg"); |
emh203 | 0:423d5729e94e | 302 | |
emh203 | 0:423d5729e94e | 303 | } |
emh203 | 0:423d5729e94e | 304 | } |
emh203 | 0:423d5729e94e | 305 | TERMINAL_PRINTF("\r\n>"); |
emh203 | 0:423d5729e94e | 306 | TerminalPos = 0; |
emh203 | 0:423d5729e94e | 307 | |
emh203 | 0:423d5729e94e | 308 | break; |
emh203 | 0:423d5729e94e | 309 | |
emh203 | 0:423d5729e94e | 310 | case '\b': |
emh203 | 0:423d5729e94e | 311 | if(TerminalPos > 0) |
emh203 | 0:423d5729e94e | 312 | { |
emh203 | 0:423d5729e94e | 313 | TerminalPos--; |
emh203 | 0:423d5729e94e | 314 | TERMINAL_PUTC(NextCharIn); |
emh203 | 0:423d5729e94e | 315 | } |
emh203 | 0:423d5729e94e | 316 | break; |
emh203 | 0:423d5729e94e | 317 | |
emh203 | 0:423d5729e94e | 318 | default: |
emh203 | 0:423d5729e94e | 319 | |
emh203 | 0:423d5729e94e | 320 | if(TerminalPos == 0 && NextCharIn == 0x020) |
emh203 | 0:423d5729e94e | 321 | { |
emh203 | 0:423d5729e94e | 322 | //Do nothing if space bar is pressed at beginning of line |
emh203 | 0:423d5729e94e | 323 | } |
emh203 | 0:423d5729e94e | 324 | else if(NextCharIn >= 0x20 && NextCharIn<0x7F) |
emh203 | 0:423d5729e94e | 325 | { |
emh203 | 0:423d5729e94e | 326 | |
emh203 | 0:423d5729e94e | 327 | if(TerminalPos < MAX_TERMINAL_LINE_CHARS-1) |
emh203 | 0:423d5729e94e | 328 | { |
emh203 | 0:423d5729e94e | 329 | TerminalLineBuf[TerminalPos++] = NextCharIn; |
emh203 | 0:423d5729e94e | 330 | TERMINAL_PUTC(NextCharIn); |
emh203 | 0:423d5729e94e | 331 | } |
emh203 | 0:423d5729e94e | 332 | } |
emh203 | 0:423d5729e94e | 333 | |
emh203 | 0:423d5729e94e | 334 | break; |
emh203 | 0:423d5729e94e | 335 | |
emh203 | 0:423d5729e94e | 336 | } |
emh203 | 0:423d5729e94e | 337 | } |
emh203 | 0:423d5729e94e | 338 | |
emh203 | 0:423d5729e94e | 339 | } |
emh203 | 0:423d5729e94e | 340 |