Example bug Serial com with USB3

Committer:
YSI
Date:
Thu Jul 30 12:57:09 2020 +0000
Revision:
0:329c1b1d6e65
Example bug Serial com with USB3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YSI 0:329c1b1d6e65 1 #include "mbed.h"
YSI 0:329c1b1d6e65 2 #include <sstream>
YSI 0:329c1b1d6e65 3
YSI 0:329c1b1d6e65 4 #define MBED_PROJECT "USB3Bug"
YSI 0:329c1b1d6e65 5
YSI 0:329c1b1d6e65 6 UnbufferedSerial pc(USBTX, USBRX, 230400);
YSI 0:329c1b1d6e65 7
YSI 0:329c1b1d6e65 8 struct typeTRANSMISSION { string buffer; string serial; volatile bool SERIAL; } message = { "", "", false };
YSI 0:329c1b1d6e65 9
YSI 0:329c1b1d6e65 10 void serial_event(void);
YSI 0:329c1b1d6e65 11 void fn_processing(string);
YSI 0:329c1b1d6e65 12
YSI 0:329c1b1d6e65 13 int main()
YSI 0:329c1b1d6e65 14 {
YSI 0:329c1b1d6e65 15 message.buffer.reserve(1024);
YSI 0:329c1b1d6e65 16 message.serial.reserve(1024);
YSI 0:329c1b1d6e65 17 pc.attach(callback(&serial_event));
YSI 0:329c1b1d6e65 18 while(1)
YSI 0:329c1b1d6e65 19 {
YSI 0:329c1b1d6e65 20 if(message.SERIAL)
YSI 0:329c1b1d6e65 21 {
YSI 0:329c1b1d6e65 22 fn_processing(message.serial);
YSI 0:329c1b1d6e65 23 message.SERIAL = false;
YSI 0:329c1b1d6e65 24 }
YSI 0:329c1b1d6e65 25 }
YSI 0:329c1b1d6e65 26 }
YSI 0:329c1b1d6e65 27
YSI 0:329c1b1d6e65 28 void serial_event(void)
YSI 0:329c1b1d6e65 29 {
YSI 0:329c1b1d6e65 30 char c;
YSI 0:329c1b1d6e65 31 pc.read(&c, 1);
YSI 0:329c1b1d6e65 32 if(c == '\n')
YSI 0:329c1b1d6e65 33 {
YSI 0:329c1b1d6e65 34 message.buffer += ';';
YSI 0:329c1b1d6e65 35 message.serial = message.buffer;
YSI 0:329c1b1d6e65 36 message.buffer.clear();
YSI 0:329c1b1d6e65 37 message.SERIAL = true;
YSI 0:329c1b1d6e65 38 }
YSI 0:329c1b1d6e65 39 else if((c < 128) && (message.buffer.size() < message.buffer.capacity()-2)) message.buffer += c;
YSI 0:329c1b1d6e65 40 }
YSI 0:329c1b1d6e65 41
YSI 0:329c1b1d6e65 42 void fn_processing(string cmd)
YSI 0:329c1b1d6e65 43 {
YSI 0:329c1b1d6e65 44 stringstream srecv(cmd), ssend;
YSI 0:329c1b1d6e65 45 ssend.precision(3);
YSI 0:329c1b1d6e65 46 while(getline(srecv, cmd, ';'))
YSI 0:329c1b1d6e65 47 {
YSI 0:329c1b1d6e65 48 for (unsigned int i = 0; i < cmd.size(); i++) if ((cmd[i] >= 'a') && (cmd[i] <= 'z')) cmd[i] += 'A' - 'a';
YSI 0:329c1b1d6e65 49 if(ssend.str().size() > 0) ssend << ' ';
YSI 0:329c1b1d6e65 50 if(cmd.empty());
YSI 0:329c1b1d6e65 51 else if(cmd == "*IDN?")
YSI 0:329c1b1d6e65 52 {
YSI 0:329c1b1d6e65 53 ssend << MBED_PROJECT << ", Mbed OS " << MBED_VERSION << ", Version dated, " << __DATE__ << ", " << __TIME__;
YSI 0:329c1b1d6e65 54 }
YSI 0:329c1b1d6e65 55 else if(cmd == "M?")
YSI 0:329c1b1d6e65 56 {
YSI 0:329c1b1d6e65 57 ssend << "Motor[" << 0 << "][" << "STOP" << "]";
YSI 0:329c1b1d6e65 58 }
YSI 0:329c1b1d6e65 59 else if(cmd == "TRIG?")
YSI 0:329c1b1d6e65 60 {
YSI 0:329c1b1d6e65 61 ssend << "Trigger(" << 0 << ")(" << NAN << "V)";
YSI 0:329c1b1d6e65 62 }
YSI 0:329c1b1d6e65 63 else if(cmd == "TARG?")
YSI 0:329c1b1d6e65 64 {
YSI 0:329c1b1d6e65 65 ssend << "Target[" << 0 << "](" << 4294967295 << ")[" << 0 << "]{" << 0 << "}";
YSI 0:329c1b1d6e65 66 }
YSI 0:329c1b1d6e65 67 else if(cmd == "POS?")
YSI 0:329c1b1d6e65 68 {
YSI 0:329c1b1d6e65 69 ssend << "Position[" << 0 << "][" << "UNKNOWN" << "](" << 4294967295 << ")";
YSI 0:329c1b1d6e65 70 }
YSI 0:329c1b1d6e65 71 else if(cmd.find("?")!=string::npos) ssend << "incorrect requeste [" << cmd << "]";
YSI 0:329c1b1d6e65 72 }
YSI 0:329c1b1d6e65 73 if(!ssend.str().empty()) ssend << "\n";
YSI 0:329c1b1d6e65 74 pc.write(ssend.str().c_str(), ssend.str().length());
YSI 0:329c1b1d6e65 75 }