Activation of outputs using serial and user button on ticker interrupt

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }