Y SI
/
Test2020_DebugUSB3
Example bug Serial com with USB3
main.cpp@0:329c1b1d6e65, 2020-07-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |