Touch screen drivers control dashboard for miniature locomotive. Features meters for speed, volts, power. Switches for lights, horns. Drives multiple STM3_ESC brushless motor controllers for complete brushless loco system as used in "The Brute" - www.jons-workshop.com

Dependencies:   TS_DISCO_F746NG mbed Servo LCD_DISCO_F746NG BSP_DISCO_F746NG QSPI_DISCO_F746NG AsyncSerial FastPWM

Committer:
JonFreeman
Date:
Sat Jun 23 09:37:41 2018 +0000
Revision:
11:a573664b1a59
Parent:
cli_nortos.cpp@7:3b1f44cd4735
Child:
12:a25bdf135348
Seemingly un-broken, yet to master replacing rpm with mph

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JonFreeman 5:21a8ac83142c 1 //Loco_TS_2018
JonFreeman 4:67478861c670 2 #include "mbed.h"
JonFreeman 4:67478861c670 3 //#include "BufferedSerial.h"
JonFreeman 5:21a8ac83142c 4 #include "AsyncSerial.hpp"
JonFreeman 4:67478861c670 5 #include <cctype>
JonFreeman 4:67478861c670 6 #include "Electric_Loco.h"
JonFreeman 4:67478861c670 7 using namespace std;
JonFreeman 4:67478861c670 8
JonFreeman 4:67478861c670 9 //extern int I_Am () ; // Returns boards id number as ASCII char '0', '1' etc. Code for Broadcast = '\r'
JonFreeman 5:21a8ac83142c 10 //typedef double fl_typ; //
JonFreeman 4:67478861c670 11
JonFreeman 4:67478861c670 12 const int BROADCAST = '\r';
JonFreeman 4:67478861c670 13
JonFreeman 4:67478861c670 14 // WithOUT RTOS
JonFreeman 4:67478861c670 15 extern Serial pc;
JonFreeman 5:21a8ac83142c 16 extern AsyncSerial com;
JonFreeman 4:67478861c670 17 extern void send_test () ;
JonFreeman 4:67478861c670 18
JonFreeman 11:a573664b1a59 19 genio::genio (int dtype, int dlen) {
JonFreeman 11:a573664b1a59 20 d_type = dtype;
JonFreeman 11:a573664b1a59 21 d_len = dlen;
JonFreeman 11:a573664b1a59 22 for (int i = 0; i < MAX_PARAMS; i++) {
JonFreeman 11:a573664b1a59 23 ui[i] = 0;
JonFreeman 11:a573664b1a59 24 dbl[i] = 0.0;
JonFreeman 11:a573664b1a59 25 }
JonFreeman 11:a573664b1a59 26 count = 0;
JonFreeman 11:a573664b1a59 27 available = false;
JonFreeman 11:a573664b1a59 28 }
JonFreeman 11:a573664b1a59 29
JonFreeman 11:a573664b1a59 30 void genio::store (struct parameters & a) { //
JonFreeman 11:a573664b1a59 31 count++;
JonFreeman 11:a573664b1a59 32 available = true;
JonFreeman 11:a573664b1a59 33 for (int i = 0; i < d_len; i++) {
JonFreeman 11:a573664b1a59 34 ui[i] = (int32_t)a.dbl[i];
JonFreeman 11:a573664b1a59 35 dbl[i] = a.dbl[i];
JonFreeman 11:a573664b1a59 36 }
JonFreeman 11:a573664b1a59 37 }
JonFreeman 11:a573664b1a59 38
JonFreeman 11:a573664b1a59 39 bool genio::read (uint32_t ** addr) {
JonFreeman 11:a573664b1a59 40 if (!available)
JonFreeman 11:a573664b1a59 41 return false;
JonFreeman 11:a573664b1a59 42 available = false;
JonFreeman 11:a573664b1a59 43 *addr = ui;
JonFreeman 11:a573664b1a59 44 return true;
JonFreeman 11:a573664b1a59 45 }
JonFreeman 11:a573664b1a59 46
JonFreeman 5:21a8ac83142c 47 void null_cmd (struct parameters & a)
JonFreeman 5:21a8ac83142c 48 {
JonFreeman 4:67478861c670 49 pc.printf ("At null_cmd, parameters : First %.3f, second %.3f\r\n", a.dbl[0], a.dbl[1]);
JonFreeman 4:67478861c670 50 }
JonFreeman 4:67478861c670 51
JonFreeman 4:67478861c670 52
JonFreeman 4:67478861c670 53 void menucmd (struct parameters & a);
JonFreeman 4:67478861c670 54
JonFreeman 4:67478861c670 55 void kd_cmd (struct parameters & a) // kick the watchdog
JonFreeman 4:67478861c670 56 {
JonFreeman 4:67478861c670 57 }
JonFreeman 4:67478861c670 58
JonFreeman 5:21a8ac83142c 59 extern void rpm_push (struct parameters & a) ;
JonFreeman 11:a573664b1a59 60 extern void mph_push (struct parameters & a) ;
JonFreeman 5:21a8ac83142c 61 void uprpm_cmd (struct parameters & a) // controller rec'd rpm from driver boards
JonFreeman 5:21a8ac83142c 62 {
JonFreeman 5:21a8ac83142c 63 rpm_push (a);
JonFreeman 7:3b1f44cd4735 64 // a.gp_i ^= 1; // toggle lsb
JonFreeman 5:21a8ac83142c 65 }
JonFreeman 5:21a8ac83142c 66
JonFreeman 11:a573664b1a59 67 void upmph_cmd (struct parameters & a) // controller rec'd mph from driver boards
JonFreeman 11:a573664b1a59 68 {
JonFreeman 11:a573664b1a59 69 mph_push (a);
JonFreeman 11:a573664b1a59 70 // a.gp_i ^= 1; // toggle lsb
JonFreeman 11:a573664b1a59 71 }
JonFreeman 11:a573664b1a59 72
JonFreeman 5:21a8ac83142c 73 void uprdi_cmd (struct parameters & a) // controller rec'd rpm from driver boards
JonFreeman 5:21a8ac83142c 74 {
JonFreeman 5:21a8ac83142c 75 // pc.printf ("RPM %d %d\r\n", (int)a.dbl[0], (int)a.dbl[1]);
JonFreeman 5:21a8ac83142c 76 }
JonFreeman 5:21a8ac83142c 77
JonFreeman 4:67478861c670 78
JonFreeman 4:67478861c670 79 /*void who_cmd (struct parameters & a)
JonFreeman 4:67478861c670 80 {
JonFreeman 4:67478861c670 81 int i = I_Am ();
JonFreeman 4:67478861c670 82 if (I_Am() == a.target_unit)
JonFreeman 4:67478861c670 83 pc.printf ("Hi there, I am %c\r\n", a.target_unit);
JonFreeman 4:67478861c670 84 }*/
JonFreeman 4:67478861c670 85
JonFreeman 4:67478861c670 86 struct kb_command {
JonFreeman 4:67478861c670 87 const char * cmd_word; // points to text e.g. "menu"
JonFreeman 4:67478861c670 88 const char * explan;
JonFreeman 4:67478861c670 89 void (*f)(struct parameters &); // points to function
JonFreeman 4:67478861c670 90 } ;
JonFreeman 4:67478861c670 91
JonFreeman 4:67478861c670 92 struct kb_command const command_list[] = {
JonFreeman 4:67478861c670 93 {"ls", "Lists available commands", menucmd},
JonFreeman 4:67478861c670 94 {"?", "Lists available commands, same as ls", menucmd},
JonFreeman 4:67478861c670 95 // {"fw", "forward", fw_cmd},
JonFreeman 4:67478861c670 96 // {"re", "reverse", re_cmd},
JonFreeman 4:67478861c670 97 // {"rb", "regen brake 0 to 99 %", rb_cmd},
JonFreeman 4:67478861c670 98 // {"hb", "hand brake", hb_cmd},
JonFreeman 4:67478861c670 99 // {"v", "set motors V percent RANGE 0 to 100", v_cmd},
JonFreeman 4:67478861c670 100 // {"i", "set motors I percent RANGE 0 to 100", i_cmd},
JonFreeman 4:67478861c670 101 // {"vi", "set motors V and I percent RANGE 0 to 100", vi_cmd},
JonFreeman 4:67478861c670 102 // {"who", "search for connected units, e.g. 3who returs 'Hi there' if found", who_cmd},
JonFreeman 4:67478861c670 103 // {"mode", "read or set params in eeprom", mode_cmd},
JonFreeman 4:67478861c670 104 // {"erase", "set eeprom contents to all 0xff", erase_cmd},
JonFreeman 4:67478861c670 105 {"kd", "kick the dog", kd_cmd},
JonFreeman 5:21a8ac83142c 106 {"rpm", "rpm reading from 2 motors", uprpm_cmd},
JonFreeman 4:67478861c670 107 {"nu", "do nothing", null_cmd},
JonFreeman 4:67478861c670 108 };
JonFreeman 4:67478861c670 109
JonFreeman 4:67478861c670 110 const int numof_menu_items = sizeof(command_list) / sizeof(kb_command);
JonFreeman 4:67478861c670 111 void menucmd (struct parameters & a)
JonFreeman 4:67478861c670 112 {
JonFreeman 5:21a8ac83142c 113 // struct kb_command const * cl = command_list;
JonFreeman 5:21a8ac83142c 114 pc.printf("\r\n\nTS_2018 Locomotive Touch Screen Controller\r\nAt menucmd function - listing commands:-\r\n");
JonFreeman 4:67478861c670 115 for(int i = 0; i < numof_menu_items; i++)
JonFreeman 4:67478861c670 116 pc.printf("[%s]\t\t%s\r\n", command_list[i].cmd_word, command_list[i].explan);
JonFreeman 4:67478861c670 117 pc.printf("End of List of Commands\r\n");
JonFreeman 4:67478861c670 118 }
JonFreeman 4:67478861c670 119
JonFreeman 5:21a8ac83142c 120 struct kb_command const loco_command_list[] = {
JonFreeman 5:21a8ac83142c 121 {"ls", "Lists available commands", menucmd},
JonFreeman 5:21a8ac83142c 122 {"?", "Lists available commands, same as ls", menucmd},
JonFreeman 5:21a8ac83142c 123 {"rpm", "rpm reading from 2 motors", uprpm_cmd},
JonFreeman 11:a573664b1a59 124 {"mph", "bogie mph reading", upmph_cmd}, // 22/06/2018
JonFreeman 5:21a8ac83142c 125 {"rdi", "rpm reading from 2 motors", uprdi_cmd},
JonFreeman 5:21a8ac83142c 126 {"nu", "do nothing", null_cmd},
JonFreeman 5:21a8ac83142c 127 } ;
JonFreeman 5:21a8ac83142c 128
JonFreeman 5:21a8ac83142c 129 struct parameters pccom, lococom;
JonFreeman 5:21a8ac83142c 130
JonFreeman 5:21a8ac83142c 131 /*struct parameters {
JonFreeman 5:21a8ac83142c 132 struct kb_command const * clist;
JonFreeman 5:21a8ac83142c 133 char cmd_line[120];
JonFreeman 5:21a8ac83142c 134 char * cmd_line_ptr;
JonFreeman 5:21a8ac83142c 135 int32_t position_in_list, numof_dbls, target_unit, numof_menu_items;
JonFreeman 5:21a8ac83142c 136 double dbl[MAX_PARAMS];
JonFreeman 5:21a8ac83142c 137 bool respond;
JonFreeman 5:21a8ac83142c 138 } ;
JonFreeman 5:21a8ac83142c 139 */
JonFreeman 5:21a8ac83142c 140 int getc (int which_port)
JonFreeman 5:21a8ac83142c 141 {
JonFreeman 5:21a8ac83142c 142 if (which_port == 0)
JonFreeman 5:21a8ac83142c 143 return pc.getc ();
JonFreeman 5:21a8ac83142c 144 if (which_port == 1)
JonFreeman 5:21a8ac83142c 145 return com.getc ();
JonFreeman 5:21a8ac83142c 146 return -1;
JonFreeman 5:21a8ac83142c 147 }
JonFreeman 5:21a8ac83142c 148 int readable (int which_port)
JonFreeman 5:21a8ac83142c 149 {
JonFreeman 5:21a8ac83142c 150 if (which_port == 0)
JonFreeman 5:21a8ac83142c 151 return pc.readable ();
JonFreeman 5:21a8ac83142c 152 if (which_port == 1)
JonFreeman 5:21a8ac83142c 153 return com.readable ();
JonFreeman 5:21a8ac83142c 154 return -1;
JonFreeman 5:21a8ac83142c 155
JonFreeman 5:21a8ac83142c 156 }
JonFreeman 5:21a8ac83142c 157
JonFreeman 5:21a8ac83142c 158 void setup_pccom ()
JonFreeman 5:21a8ac83142c 159 {
JonFreeman 5:21a8ac83142c 160 pccom.clist = command_list;
JonFreeman 5:21a8ac83142c 161 pccom.numof_menu_items = sizeof(command_list) / sizeof(kb_command);
JonFreeman 5:21a8ac83142c 162 pccom.com_no = 0;
JonFreeman 5:21a8ac83142c 163 pccom.cl_index = 0;
JonFreeman 5:21a8ac83142c 164 pccom.gp_i = 0; // general puropse integer, not used to 30/4/2018
JonFreeman 5:21a8ac83142c 165 }
JonFreeman 5:21a8ac83142c 166
JonFreeman 5:21a8ac83142c 167 void setup_lococom ()
JonFreeman 5:21a8ac83142c 168 {
JonFreeman 5:21a8ac83142c 169 lococom.clist = loco_command_list;
JonFreeman 5:21a8ac83142c 170 lococom.numof_menu_items = sizeof(loco_command_list) / sizeof(kb_command);
JonFreeman 5:21a8ac83142c 171 lococom.com_no = 1;
JonFreeman 5:21a8ac83142c 172 lococom.cl_index = 0;
JonFreeman 5:21a8ac83142c 173 lococom.gp_i = 0; // general puropse integer, toggles 0 / 1 to best guess source of rpm
JonFreeman 5:21a8ac83142c 174 }
JonFreeman 5:21a8ac83142c 175
JonFreeman 5:21a8ac83142c 176 void clicore (struct parameters & a)
JonFreeman 5:21a8ac83142c 177 {
JonFreeman 5:21a8ac83142c 178 int ch;
JonFreeman 5:21a8ac83142c 179 char * pEnd;
JonFreeman 5:21a8ac83142c 180 while (readable(a.com_no)) {
JonFreeman 5:21a8ac83142c 181 ch = getc (a.com_no);
JonFreeman 5:21a8ac83142c 182 if(ch != '\r') // was this the 'Enter' key?
JonFreeman 5:21a8ac83142c 183 a.cmd_line[a.cl_index++] = ch; // added char to command being assembled
JonFreeman 5:21a8ac83142c 184 else { // key was CR, may or may not be command to lookup
JonFreeman 5:21a8ac83142c 185 a.target_unit = BROADCAST; // Broadcast
JonFreeman 5:21a8ac83142c 186 a.cmd_line_ptr = a.cmd_line;
JonFreeman 5:21a8ac83142c 187 a.cmd_line[a.cl_index] = 0; // null terminate command string
JonFreeman 5:21a8ac83142c 188 if(a.cl_index) { // If have got some chars to lookup
JonFreeman 5:21a8ac83142c 189 int i, wrdlen;
JonFreeman 5:21a8ac83142c 190 if (isdigit(a.cmd_line[0])) { // Look for command with prefix digit
JonFreeman 5:21a8ac83142c 191 a.cmd_line_ptr++; // point past identified digit prefix
JonFreeman 5:21a8ac83142c 192 a.target_unit = a.cmd_line[0]; // '0' to '9'
JonFreeman 5:21a8ac83142c 193 //pc.printf ("Got prefix %c\r\n", cmd_line[0]);
JonFreeman 5:21a8ac83142c 194 }
JonFreeman 5:21a8ac83142c 195 for (i = 0; i < a.numof_menu_items; i++) { // Look for input match in command list
JonFreeman 5:21a8ac83142c 196 wrdlen = strlen(a.clist[i].cmd_word);
JonFreeman 5:21a8ac83142c 197 if(strncmp(a.clist[i].cmd_word, a.cmd_line_ptr, wrdlen) == 0 && !isalpha(a.cmd_line_ptr[wrdlen])) { // If match found
JonFreeman 5:21a8ac83142c 198 for (int k = 0; k < MAX_PARAMS; k++) {
JonFreeman 5:21a8ac83142c 199 a.dbl[k] = 0.0;
JonFreeman 5:21a8ac83142c 200 }
JonFreeman 5:21a8ac83142c 201 a.position_in_list = i;
JonFreeman 5:21a8ac83142c 202 a.numof_dbls = 0;
JonFreeman 5:21a8ac83142c 203 pEnd = a.cmd_line_ptr + wrdlen;
JonFreeman 5:21a8ac83142c 204 while (*pEnd) { // Assemble all numerics as doubles
JonFreeman 5:21a8ac83142c 205 a.dbl[a.numof_dbls++] = strtod (pEnd, &pEnd);
JonFreeman 5:21a8ac83142c 206 while (*pEnd && !isdigit(*pEnd) && '-' != *pEnd && '+' != *pEnd) {
JonFreeman 5:21a8ac83142c 207 pEnd++;
JonFreeman 5:21a8ac83142c 208 }
JonFreeman 5:21a8ac83142c 209 }
JonFreeman 5:21a8ac83142c 210 //pc.printf ("\r\n"); // Not allowed as many may output this.
JonFreeman 5:21a8ac83142c 211 //for (int k = 0; k < param_block.numof_dbls; k++)
JonFreeman 5:21a8ac83142c 212 // pc.printf ("Read %.3f\r\n", param_block.dbl[k]);
JonFreeman 5:21a8ac83142c 213 // param_block.times[i] = clock();
JonFreeman 5:21a8ac83142c 214 // if ((param_block.target_unit == BROADCAST) && (I_Am() == '0'))
JonFreeman 5:21a8ac83142c 215 // param_block.respond = true;
JonFreeman 5:21a8ac83142c 216 a.clist[i].f(a); // execute command
JonFreeman 5:21a8ac83142c 217 i = a.numof_menu_items + 1; // to exit for loop
JonFreeman 5:21a8ac83142c 218 } // end of match found
JonFreeman 5:21a8ac83142c 219 } // End of for numof_menu_items
JonFreeman 5:21a8ac83142c 220 if(i == a.numof_menu_items)
JonFreeman 5:21a8ac83142c 221 pc.printf("No Match Found for CMD [%s]\r\n", a.cmd_line);
JonFreeman 5:21a8ac83142c 222 } // End of If have got some chars to lookup
JonFreeman 5:21a8ac83142c 223 //pc.printf("\r\n>");
JonFreeman 5:21a8ac83142c 224 a.cl_index = 0;
JonFreeman 5:21a8ac83142c 225 } // End of else key was CR, may or may not be command to lookup
JonFreeman 5:21a8ac83142c 226 } // End of while (pc.readable())
JonFreeman 5:21a8ac83142c 227 }
JonFreeman 5:21a8ac83142c 228
JonFreeman 4:67478861c670 229
JonFreeman 4:67478861c670 230 /*
JonFreeman 4:67478861c670 231 New - March 2018
JonFreeman 4:67478861c670 232 Using opto isolated serial port, paralleled up using same pair to multiple boards running this code.
JonFreeman 4:67478861c670 233 New feature - commands have optional prefix digit 0-9 indicating which unit message is addressed to.
JonFreeman 4:67478861c670 234 Commands without prefix digit - broadcast to all units, none to respond.
JonFreeman 4:67478861c670 235 Only units recognising its address from prefix digit may respond. This avoids bus contention.
JonFreeman 4:67478861c670 236 But for BROADCAST commands, '0' may respond on behalf of the group
JonFreeman 4:67478861c670 237 */
JonFreeman 4:67478861c670 238 //void command_line_interpreter (void const *argument)
JonFreeman 5:21a8ac83142c 239 /*void command_line_interpreter ()
JonFreeman 4:67478861c670 240 {
JonFreeman 5:21a8ac83142c 241 const int MAX_CMD_LEN = 120;
JonFreeman 5:21a8ac83142c 242 static char cmd_line[MAX_CMD_LEN + 4];
JonFreeman 5:21a8ac83142c 243 static int cl_index = 0;
JonFreeman 5:21a8ac83142c 244 int ch;
JonFreeman 5:21a8ac83142c 245 char * pEnd, * cmd_line_ptr;
JonFreeman 5:21a8ac83142c 246 static struct parameters param_block ;
JonFreeman 5:21a8ac83142c 247 while (pc.readable()) {
JonFreeman 5:21a8ac83142c 248 ch = pc.getc();
JonFreeman 5:21a8ac83142c 249 // if (cl_index > MAX_CMD_LEN) { // trap out stupidly long command lines
JonFreeman 5:21a8ac83142c 250 // pc.printf ("Error!! Stupidly long cmd line\r\n");
JonFreeman 5:21a8ac83142c 251 // cl_index = 0;
JonFreeman 5:21a8ac83142c 252 // }
JonFreeman 5:21a8ac83142c 253 if(ch != '\r') // was this the 'Enter' key?
JonFreeman 5:21a8ac83142c 254 cmd_line[cl_index++] = ch; // added char to command being assembled
JonFreeman 5:21a8ac83142c 255 else { // key was CR, may or may not be command to lookup
JonFreeman 5:21a8ac83142c 256 param_block.target_unit = BROADCAST; // Broadcast
JonFreeman 5:21a8ac83142c 257 cmd_line_ptr = cmd_line;
JonFreeman 5:21a8ac83142c 258 cmd_line[cl_index] = 0; // null terminate command string
JonFreeman 5:21a8ac83142c 259 if(cl_index) { // If have got some chars to lookup
JonFreeman 5:21a8ac83142c 260 int i, wrdlen;
JonFreeman 5:21a8ac83142c 261 if (isdigit(cmd_line[0])) { // Look for command with prefix digit
JonFreeman 5:21a8ac83142c 262 cmd_line_ptr++; // point past identified digit prefix
JonFreeman 5:21a8ac83142c 263 param_block.target_unit = cmd_line[0]; // '0' to '9'
JonFreeman 5:21a8ac83142c 264 //pc.printf ("Got prefix %c\r\n", cmd_line[0]);
JonFreeman 5:21a8ac83142c 265 }
JonFreeman 5:21a8ac83142c 266 for (i = 0; i < numof_menu_items; i++) { // Look for input match in command list
JonFreeman 5:21a8ac83142c 267 wrdlen = strlen(command_list[i].cmd_word);
JonFreeman 5:21a8ac83142c 268 if(strncmp(command_list[i].cmd_word, cmd_line_ptr, wrdlen) == 0 && !isalpha(cmd_line_ptr[wrdlen])) { // If match found
JonFreeman 5:21a8ac83142c 269 for (int k = 0; k < MAX_PARAMS; k++) {
JonFreeman 5:21a8ac83142c 270 param_block.dbl[k] = 0.0;
JonFreeman 5:21a8ac83142c 271 }
JonFreeman 5:21a8ac83142c 272 param_block.position_in_list = i;
JonFreeman 5:21a8ac83142c 273 param_block.numof_dbls = 0;
JonFreeman 5:21a8ac83142c 274 pEnd = cmd_line_ptr + wrdlen;
JonFreeman 5:21a8ac83142c 275 while (*pEnd) { // Assemble all numerics as doubles
JonFreeman 5:21a8ac83142c 276 param_block.dbl[param_block.numof_dbls++] = strtod (pEnd, &pEnd);
JonFreeman 5:21a8ac83142c 277 while (*pEnd && !isdigit(*pEnd) && '-' != *pEnd && '+' != *pEnd) {
JonFreeman 5:21a8ac83142c 278 pEnd++;
JonFreeman 4:67478861c670 279 }
JonFreeman 5:21a8ac83142c 280 }
JonFreeman 5:21a8ac83142c 281 //pc.printf ("\r\n"); // Not allowed as many may output this.
JonFreeman 5:21a8ac83142c 282 //for (int k = 0; k < param_block.numof_dbls; k++)
JonFreeman 5:21a8ac83142c 283 // pc.printf ("Read %.3f\r\n", param_block.dbl[k]);
JonFreeman 4:67478861c670 284 // param_block.times[i] = clock();
JonFreeman 4:67478861c670 285 // if ((param_block.target_unit == BROADCAST) && (I_Am() == '0'))
JonFreeman 4:67478861c670 286 // param_block.respond = true;
JonFreeman 5:21a8ac83142c 287 command_list[i].f(param_block); // execute command
JonFreeman 5:21a8ac83142c 288 i = numof_menu_items + 1; // to exit for loop
JonFreeman 5:21a8ac83142c 289 } // end of match found
JonFreeman 5:21a8ac83142c 290 } // End of for numof_menu_items
JonFreeman 5:21a8ac83142c 291 if(i == numof_menu_items)
JonFreeman 5:21a8ac83142c 292 pc.printf("No Match Found for CMD [%s]\r\n", cmd_line);
JonFreeman 5:21a8ac83142c 293 } // End of If have got some chars to lookup
JonFreeman 5:21a8ac83142c 294 //pc.printf("\r\n>");
JonFreeman 5:21a8ac83142c 295 cl_index = 0;
JonFreeman 5:21a8ac83142c 296 } // End of else key was CR, may or may not be command to lookup
JonFreeman 5:21a8ac83142c 297 } // End of while (pc.readable())
JonFreeman 4:67478861c670 298 // Thread::wait(20); // Using RTOS on this project
JonFreeman 4:67478861c670 299 // }
JonFreeman 4:67478861c670 300 }
JonFreeman 5:21a8ac83142c 301 */
JonFreeman 4:67478861c670 302