Benoît GEISLER
/
ActivateOutput
Activation of outputs using serial and user button on ticker interrupt
PC_Com.cpp@6:63c1ee4fb6be, 2014-06-05 (annotated)
- Committer:
- ggmero67
- Date:
- Thu Jun 05 18:41:34 2014 +0000
- Revision:
- 6:63c1ee4fb6be
Rename SerialPort into PC_Com + find bug in write function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ggmero67 | 6:63c1ee4fb6be | 1 | |
ggmero67 | 6:63c1ee4fb6be | 2 | #include "mbed.h" |
ggmero67 | 6:63c1ee4fb6be | 3 | #include "PC_Com.h" |
ggmero67 | 6:63c1ee4fb6be | 4 | |
ggmero67 | 6:63c1ee4fb6be | 5 | static Serial* pc; |
ggmero67 | 6:63c1ee4fb6be | 6 | static std::vector<std::string> inputParam; |
ggmero67 | 6:63c1ee4fb6be | 7 | |
ggmero67 | 6:63c1ee4fb6be | 8 | bool PC_Com::Init() |
ggmero67 | 6:63c1ee4fb6be | 9 | { |
ggmero67 | 6:63c1ee4fb6be | 10 | //init the serail port on USB |
ggmero67 | 6:63c1ee4fb6be | 11 | pc = new Serial(USBTX, USBRX); |
ggmero67 | 6:63c1ee4fb6be | 12 | //configure the communication |
ggmero67 | 6:63c1ee4fb6be | 13 | pc->baud(115200); |
ggmero67 | 6:63c1ee4fb6be | 14 | pc->format(8, SerialBase::None, 1); |
ggmero67 | 6:63c1ee4fb6be | 15 | //pc->attach(this, &PC_Com::IrqHandling, pc->RxIrq); |
ggmero67 | 6:63c1ee4fb6be | 16 | |
ggmero67 | 6:63c1ee4fb6be | 17 | return true; |
ggmero67 | 6:63c1ee4fb6be | 18 | } |
ggmero67 | 6:63c1ee4fb6be | 19 | |
ggmero67 | 6:63c1ee4fb6be | 20 | |
ggmero67 | 6:63c1ee4fb6be | 21 | bool PC_Com::Kill() |
ggmero67 | 6:63c1ee4fb6be | 22 | { |
ggmero67 | 6:63c1ee4fb6be | 23 | delete pc; |
ggmero67 | 6:63c1ee4fb6be | 24 | return true; |
ggmero67 | 6:63c1ee4fb6be | 25 | } |
ggmero67 | 6:63c1ee4fb6be | 26 | |
ggmero67 | 6:63c1ee4fb6be | 27 | bool PC_Com::Write(std::string stringToWrite) |
ggmero67 | 6:63c1ee4fb6be | 28 | { |
ggmero67 | 6:63c1ee4fb6be | 29 | while (!pc->writeable()) {}; //Wait for the buffer to be empty |
ggmero67 | 6:63c1ee4fb6be | 30 | pc->printf(stringToWrite.c_str()); |
ggmero67 | 6:63c1ee4fb6be | 31 | return true; |
ggmero67 | 6:63c1ee4fb6be | 32 | } |
ggmero67 | 6:63c1ee4fb6be | 33 | |
ggmero67 | 6:63c1ee4fb6be | 34 | int PC_Com::Read(void) |
ggmero67 | 6:63c1ee4fb6be | 35 | { |
ggmero67 | 6:63c1ee4fb6be | 36 | char buffer[128]; |
ggmero67 | 6:63c1ee4fb6be | 37 | std::string echoString; |
ggmero67 | 6:63c1ee4fb6be | 38 | int iRet = 0; |
ggmero67 | 6:63c1ee4fb6be | 39 | |
ggmero67 | 6:63c1ee4fb6be | 40 | pc->gets(buffer, 128); |
ggmero67 | 6:63c1ee4fb6be | 41 | //output it to serial |
ggmero67 | 6:63c1ee4fb6be | 42 | echoString = buffer; |
ggmero67 | 6:63c1ee4fb6be | 43 | |
ggmero67 | 6:63c1ee4fb6be | 44 | //parse the string |
ggmero67 | 6:63c1ee4fb6be | 45 | PC_Com::Split(inputParam, echoString, ' '); |
ggmero67 | 6:63c1ee4fb6be | 46 | //for(int i = 0; i < inputParam.size(); ++i) { |
ggmero67 | 6:63c1ee4fb6be | 47 | // PC_Com::Write( PC_Com::toString(i) + " : '" + inputParam[i] + "'\r"); |
ggmero67 | 6:63c1ee4fb6be | 48 | //} |
ggmero67 | 6:63c1ee4fb6be | 49 | |
ggmero67 | 6:63c1ee4fb6be | 50 | if(inputParam.size() >= 1) { |
ggmero67 | 6:63c1ee4fb6be | 51 | PC_Com::Write("Serial: contains at least 1 word\r"); |
ggmero67 | 6:63c1ee4fb6be | 52 | |
ggmero67 | 6:63c1ee4fb6be | 53 | if(inputParam[0].compare("NOTE_ON") == 0) { |
ggmero67 | 6:63c1ee4fb6be | 54 | if(inputParam.size() < 2) { |
ggmero67 | 6:63c1ee4fb6be | 55 | PC_Com::Write("Serial: ERROR This command requiers a parameter\r"); |
ggmero67 | 6:63c1ee4fb6be | 56 | } else { |
ggmero67 | 6:63c1ee4fb6be | 57 | //starts the desired note |
ggmero67 | 6:63c1ee4fb6be | 58 | PC_Com::Write("Serial: start note " + inputParam[1] + "\r"); |
ggmero67 | 6:63c1ee4fb6be | 59 | iRet = 1; |
ggmero67 | 6:63c1ee4fb6be | 60 | } |
ggmero67 | 6:63c1ee4fb6be | 61 | } else { |
ggmero67 | 6:63c1ee4fb6be | 62 | if(inputParam[0].compare("NOTE_OFF") == 0) { |
ggmero67 | 6:63c1ee4fb6be | 63 | if(inputParam.size() < 2) { |
ggmero67 | 6:63c1ee4fb6be | 64 | PC_Com::Write("Serial: ERROR This command requiers a parameter\r"); |
ggmero67 | 6:63c1ee4fb6be | 65 | } else { |
ggmero67 | 6:63c1ee4fb6be | 66 | PC_Com::Write("Serial: stop note " + inputParam[1] + "\r"); |
ggmero67 | 6:63c1ee4fb6be | 67 | iRet = 2; |
ggmero67 | 6:63c1ee4fb6be | 68 | } |
ggmero67 | 6:63c1ee4fb6be | 69 | } else { |
ggmero67 | 6:63c1ee4fb6be | 70 | if(inputParam[0].compare("TEMPO") == 0) { |
ggmero67 | 6:63c1ee4fb6be | 71 | if(inputParam.size() < 2) { |
ggmero67 | 6:63c1ee4fb6be | 72 | PC_Com::Write("Serial: ERROR This command requiers a parameter\r"); |
ggmero67 | 6:63c1ee4fb6be | 73 | } else { |
ggmero67 | 6:63c1ee4fb6be | 74 | //intParam = atoi(inputParam[1].c_str()); |
ggmero67 | 6:63c1ee4fb6be | 75 | PC_Com::Write("Serial: change tempo to " + inputParam[1] + "\r"); |
ggmero67 | 6:63c1ee4fb6be | 76 | } |
ggmero67 | 6:63c1ee4fb6be | 77 | } else { |
ggmero67 | 6:63c1ee4fb6be | 78 | PC_Com::Write("Serial: no command found\r"); |
ggmero67 | 6:63c1ee4fb6be | 79 | } |
ggmero67 | 6:63c1ee4fb6be | 80 | } |
ggmero67 | 6:63c1ee4fb6be | 81 | } |
ggmero67 | 6:63c1ee4fb6be | 82 | } else { |
ggmero67 | 6:63c1ee4fb6be | 83 | //only one word was found |
ggmero67 | 6:63c1ee4fb6be | 84 | PC_Com::Write("Serial: ERROR 1"); |
ggmero67 | 6:63c1ee4fb6be | 85 | } |
ggmero67 | 6:63c1ee4fb6be | 86 | |
ggmero67 | 6:63c1ee4fb6be | 87 | return iRet; |
ggmero67 | 6:63c1ee4fb6be | 88 | } |
ggmero67 | 6:63c1ee4fb6be | 89 | |
ggmero67 | 6:63c1ee4fb6be | 90 | int PC_Com::Split(std::vector<string>& vecteur, std::string chaine, char separateur) |
ggmero67 | 6:63c1ee4fb6be | 91 | { |
ggmero67 | 6:63c1ee4fb6be | 92 | vecteur.clear(); |
ggmero67 | 6:63c1ee4fb6be | 93 | |
ggmero67 | 6:63c1ee4fb6be | 94 | std::string::size_type stTemp = chaine.find(separateur); |
ggmero67 | 6:63c1ee4fb6be | 95 | |
ggmero67 | 6:63c1ee4fb6be | 96 | while(stTemp != string::npos) { |
ggmero67 | 6:63c1ee4fb6be | 97 | vecteur.push_back(chaine.substr(0, stTemp)); |
ggmero67 | 6:63c1ee4fb6be | 98 | chaine = chaine.substr(stTemp + 1); |
ggmero67 | 6:63c1ee4fb6be | 99 | stTemp = chaine.find(separateur); |
ggmero67 | 6:63c1ee4fb6be | 100 | } |
ggmero67 | 6:63c1ee4fb6be | 101 | //last string ->remove \r and \n |
ggmero67 | 6:63c1ee4fb6be | 102 | stTemp = chaine.find('\r'); |
ggmero67 | 6:63c1ee4fb6be | 103 | if(stTemp != string::npos) { |
ggmero67 | 6:63c1ee4fb6be | 104 | chaine = chaine.substr(0, stTemp); |
ggmero67 | 6:63c1ee4fb6be | 105 | } |
ggmero67 | 6:63c1ee4fb6be | 106 | stTemp = chaine.find('\n'); |
ggmero67 | 6:63c1ee4fb6be | 107 | if(stTemp != string::npos) { |
ggmero67 | 6:63c1ee4fb6be | 108 | chaine = chaine.substr(0, stTemp); |
ggmero67 | 6:63c1ee4fb6be | 109 | } |
ggmero67 | 6:63c1ee4fb6be | 110 | vecteur.push_back(chaine); |
ggmero67 | 6:63c1ee4fb6be | 111 | |
ggmero67 | 6:63c1ee4fb6be | 112 | return vecteur.size(); |
ggmero67 | 6:63c1ee4fb6be | 113 | } |
ggmero67 | 6:63c1ee4fb6be | 114 | |
ggmero67 | 6:63c1ee4fb6be | 115 | std::string PC_Com::ToString(int i) |
ggmero67 | 6:63c1ee4fb6be | 116 | { |
ggmero67 | 6:63c1ee4fb6be | 117 | std::string intToString; |
ggmero67 | 6:63c1ee4fb6be | 118 | char idChar[10]; |
ggmero67 | 6:63c1ee4fb6be | 119 | |
ggmero67 | 6:63c1ee4fb6be | 120 | snprintf(idChar, 10, "%i", i); |
ggmero67 | 6:63c1ee4fb6be | 121 | intToString = idChar; |
ggmero67 | 6:63c1ee4fb6be | 122 | |
ggmero67 | 6:63c1ee4fb6be | 123 | return intToString; |
ggmero67 | 6:63c1ee4fb6be | 124 | } |