Henk Meewis / Mbed 2 deprecated USB_serial_LED_controller

Dependencies:   mbed

Fork of frdm_echo by Henk Meewis

Committer:
silverpanda
Date:
Tue Apr 15 03:12:29 2014 +0000
Revision:
10:85a8da3b7e5e
Parent:
9:f9efd3a69c2d
Child:
11:4c6c6d6c0ebe
everything debugged

Who changed what in which revision?

UserRevisionLine numberNew contents of line
silverpanda 5:03b7c237c4c4 1 #include "mbed.h"
silverpanda 7:19da09fe546b 2 #include "LEDColors.h"
silverpanda 5:03b7c237c4c4 3 #include "shell.h"
silverpanda 5:03b7c237c4c4 4
silverpanda 7:19da09fe546b 5 extern LEDColors *ledColors;
silverpanda 7:19da09fe546b 6
silverpanda 5:03b7c237c4c4 7 // create contructor
silverpanda 5:03b7c237c4c4 8 Shell::Shell(uint32_t thisBaudRate)
silverpanda 5:03b7c237c4c4 9 {
silverpanda 5:03b7c237c4c4 10 usbSerial = new Serial(USBTX, USBRX);
silverpanda 5:03b7c237c4c4 11 usbSerial->baud(115200);
silverpanda 8:b715912d684b 12 characterCount = 0;
silverpanda 8:b715912d684b 13 characterPointer = 0;
silverpanda 5:03b7c237c4c4 14 }
silverpanda 5:03b7c237c4c4 15 //-----------------------------------------------------------------------------
silverpanda 5:03b7c237c4c4 16
silverpanda 5:03b7c237c4c4 17 void Shell::sendText(char *thisText)
silverpanda 5:03b7c237c4c4 18 {
silverpanda 5:03b7c237c4c4 19 // this can send any text
silverpanda 5:03b7c237c4c4 20 usbSerial->printf(thisText);
silverpanda 5:03b7c237c4c4 21 }
silverpanda 5:03b7c237c4c4 22 //-----------------------------------------------------------------------------
silverpanda 5:03b7c237c4c4 23
silverpanda 5:03b7c237c4c4 24 void Shell::sendHelloWorld()
silverpanda 5:03b7c237c4c4 25 {
silverpanda 5:03b7c237c4c4 26 // sends the first greeting
silverpanda 10:85a8da3b7e5e 27 sendText(" ** K64 shell **\n>\n> ");
silverpanda 5:03b7c237c4c4 28 }
silverpanda 5:03b7c237c4c4 29 //-----------------------------------------------------------------------------
silverpanda 5:03b7c237c4c4 30
silverpanda 5:03b7c237c4c4 31 void Shell::scanUSBSerialRx()
silverpanda 5:03b7c237c4c4 32 {
silverpanda 5:03b7c237c4c4 33 // check if there is something to read
silverpanda 5:03b7c237c4c4 34 if(usbSerial->readable()) {
silverpanda 9:f9efd3a69c2d 35
silverpanda 5:03b7c237c4c4 36 // if so ...
silverpanda 5:03b7c237c4c4 37 char character = usbSerial->getc();
silverpanda 9:f9efd3a69c2d 38
silverpanda 5:03b7c237c4c4 39 // see if this is a semi colon or a carriage return
silverpanda 5:03b7c237c4c4 40 // if so, give a new line cursor
silverpanda 7:19da09fe546b 41 if((character == ';') || (character == 13)) {
silverpanda 9:f9efd3a69c2d 42 finishCharacterBuffer();
silverpanda 9:f9efd3a69c2d 43 parseCommands();
silverpanda 7:19da09fe546b 44 usbSerial->printf("\n> ");
silverpanda 7:19da09fe546b 45 ledColors->flashWhite(10);
silverpanda 7:19da09fe546b 46 }
silverpanda 9:f9efd3a69c2d 47
silverpanda 5:03b7c237c4c4 48 // if not, just print the character
silverpanda 9:f9efd3a69c2d 49 else if(addCharacterToBuffer(character)) {
silverpanda 9:f9efd3a69c2d 50 usbSerial->printf("%c", character);
silverpanda 7:19da09fe546b 51 ledColors->flashGreen(10);
silverpanda 7:19da09fe546b 52 }
silverpanda 5:03b7c237c4c4 53 }
silverpanda 5:03b7c237c4c4 54 }
silverpanda 5:03b7c237c4c4 55 //-----------------------------------------------------------------------------
silverpanda 9:f9efd3a69c2d 56
silverpanda 9:f9efd3a69c2d 57 bool Shell::addCharacterToBuffer(char newCharacter)
silverpanda 8:b715912d684b 58 {
silverpanda 9:f9efd3a69c2d 59 bool accept = (characterPointer < ItsInputBufferSize_);
silverpanda 9:f9efd3a69c2d 60 if(accept) {
silverpanda 8:b715912d684b 61 inputBuffer[characterPointer++] = newCharacter;
silverpanda 8:b715912d684b 62 characterCount = characterPointer;
silverpanda 8:b715912d684b 63 }
silverpanda 9:f9efd3a69c2d 64 return accept;
silverpanda 8:b715912d684b 65 }
silverpanda 8:b715912d684b 66 //-----------------------------------------------------------------------------
silverpanda 8:b715912d684b 67
silverpanda 8:b715912d684b 68 void Shell::finishCharacterBuffer()
silverpanda 8:b715912d684b 69 {
silverpanda 10:85a8da3b7e5e 70 inputBuffer[characterCount] = 0;
silverpanda 10:85a8da3b7e5e 71 characterCount = characterPointer;
silverpanda 8:b715912d684b 72 characterPointer = 0;
silverpanda 8:b715912d684b 73 }
silverpanda 9:f9efd3a69c2d 74 //-----------------------------------------------------------------------------
silverpanda 9:f9efd3a69c2d 75
silverpanda 9:f9efd3a69c2d 76 bool Shell::findString(char *thisString, uint32_t stringLength)
silverpanda 9:f9efd3a69c2d 77 {
silverpanda 9:f9efd3a69c2d 78 bool found = false;
silverpanda 10:85a8da3b7e5e 79 uint32_t startPointer = 0, characterPointer, newStartLocation;
silverpanda 9:f9efd3a69c2d 80 char firstChar, secondChar;
silverpanda 10:85a8da3b7e5e 81
silverpanda 10:85a8da3b7e5e 82 // start at the start position (0) on the input buffer
silverpanda 10:85a8da3b7e5e 83 while(!found
silverpanda 10:85a8da3b7e5e 84 && (characterCount >= stringLength)
silverpanda 10:85a8da3b7e5e 85 && (startPointer <= characterCount - stringLength)) {
silverpanda 10:85a8da3b7e5e 86
silverpanda 10:85a8da3b7e5e 87 // start at the beginning of the compare string (thisString)
silverpanda 9:f9efd3a69c2d 88 found = true;
silverpanda 9:f9efd3a69c2d 89 characterPointer = 0;
silverpanda 9:f9efd3a69c2d 90 while(found && (characterPointer < stringLength)) {
silverpanda 10:85a8da3b7e5e 91
silverpanda 10:85a8da3b7e5e 92 // get and compare characters
silverpanda 9:f9efd3a69c2d 93 firstChar = inputBuffer[startPointer + characterPointer];
silverpanda 9:f9efd3a69c2d 94 secondChar = thisString[characterPointer];
silverpanda 9:f9efd3a69c2d 95 found = (firstChar == secondChar);
silverpanda 9:f9efd3a69c2d 96
silverpanda 10:85a8da3b7e5e 97 // for debugging
silverpanda 9:f9efd3a69c2d 98 // usbSerial->printf("(compare %c with %c)\n", firstChar, secondChar);
silverpanda 9:f9efd3a69c2d 99
silverpanda 10:85a8da3b7e5e 100 // move up to next characters
silverpanda 9:f9efd3a69c2d 101 characterPointer++;
silverpanda 9:f9efd3a69c2d 102 }
silverpanda 10:85a8da3b7e5e 103
silverpanda 10:85a8da3b7e5e 104 // move start position
silverpanda 10:85a8da3b7e5e 105 if(found) {
silverpanda 10:85a8da3b7e5e 106 newStartLocation = startPointer + stringLength;
silverpanda 10:85a8da3b7e5e 107
silverpanda 10:85a8da3b7e5e 108 // clean up from buffer
silverpanda 10:85a8da3b7e5e 109 characterPointer = newStartLocation;
silverpanda 10:85a8da3b7e5e 110 while(characterPointer < characterCount) {
silverpanda 10:85a8da3b7e5e 111 firstChar = inputBuffer[characterPointer];
silverpanda 10:85a8da3b7e5e 112 inputBuffer[characterPointer - newStartLocation] = firstChar;
silverpanda 10:85a8da3b7e5e 113 characterPointer++;
silverpanda 10:85a8da3b7e5e 114 }
silverpanda 10:85a8da3b7e5e 115 characterCount -= newStartLocation;
silverpanda 10:85a8da3b7e5e 116 inputBuffer[characterCount] = 0;
silverpanda 10:85a8da3b7e5e 117
silverpanda 10:85a8da3b7e5e 118 // for debugging send buffer
silverpanda 10:85a8da3b7e5e 119 /*
silverpanda 10:85a8da3b7e5e 120 if(characterCount) {
silverpanda 10:85a8da3b7e5e 121 sendText(" is now \"");
silverpanda 10:85a8da3b7e5e 122 sendText(inputBuffer);
silverpanda 10:85a8da3b7e5e 123 sendText("\"");
silverpanda 10:85a8da3b7e5e 124 }
silverpanda 10:85a8da3b7e5e 125 */
silverpanda 10:85a8da3b7e5e 126 }
silverpanda 10:85a8da3b7e5e 127
silverpanda 9:f9efd3a69c2d 128 startPointer++;
silverpanda 9:f9efd3a69c2d 129 }
silverpanda 10:85a8da3b7e5e 130
silverpanda 10:85a8da3b7e5e 131 // report
silverpanda 9:f9efd3a69c2d 132 return found;
silverpanda 9:f9efd3a69c2d 133 }
silverpanda 9:f9efd3a69c2d 134 //-----------------------------------------------------------------------------
silverpanda 9:f9efd3a69c2d 135
silverpanda 9:f9efd3a69c2d 136 void Shell::parseCommands()
silverpanda 9:f9efd3a69c2d 137 {
silverpanda 9:f9efd3a69c2d 138 if(findString("set", 3)) sendText(" -- \"set\" found!");
silverpanda 9:f9efd3a69c2d 139 }
silverpanda 9:f9efd3a69c2d 140 //-----------------------------------------------------------------------------