
d
Dependencies: mbed
Fork of AEB by
BBSerial.cpp@3:4bb49a5dfa47, 2016-07-30 (annotated)
- Committer:
- clynamen
- Date:
- Sat Jul 30 13:58:52 2016 +0000
- Revision:
- 3:4bb49a5dfa47
- Child:
- 4:f0be0d8a0394
m;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
clynamen | 3:4bb49a5dfa47 | 1 | #include "BBSerial.h" |
clynamen | 3:4bb49a5dfa47 | 2 | |
clynamen | 3:4bb49a5dfa47 | 3 | #include "stdio.h" |
clynamen | 3:4bb49a5dfa47 | 4 | |
clynamen | 3:4bb49a5dfa47 | 5 | BBSerial::BBSerial() : |
clynamen | 3:4bb49a5dfa47 | 6 | uart(PTC17, PTC16) // tx, rx of uart3 |
clynamen | 3:4bb49a5dfa47 | 7 | { |
clynamen | 3:4bb49a5dfa47 | 8 | uart.baud(9600); |
clynamen | 3:4bb49a5dfa47 | 9 | uart.format(8, SerialBase::Odd, 2); |
clynamen | 3:4bb49a5dfa47 | 10 | } |
clynamen | 3:4bb49a5dfa47 | 11 | |
clynamen | 3:4bb49a5dfa47 | 12 | |
clynamen | 3:4bb49a5dfa47 | 13 | void BBSerial::printf(const char* format, ...) { |
clynamen | 3:4bb49a5dfa47 | 14 | va_list argptr; |
clynamen | 3:4bb49a5dfa47 | 15 | va_start(argptr, format); |
clynamen | 3:4bb49a5dfa47 | 16 | |
clynamen | 3:4bb49a5dfa47 | 17 | char newFormat[200]; |
clynamen | 3:4bb49a5dfa47 | 18 | |
clynamen | 3:4bb49a5dfa47 | 19 | // Add garbage and header in order to resolve first byte error |
clynamen | 3:4bb49a5dfa47 | 20 | sprintf(newFormat, "GARBAGEAAAAA%sZZZZZ\n", format); |
clynamen | 3:4bb49a5dfa47 | 21 | char buf[200]; |
clynamen | 3:4bb49a5dfa47 | 22 | vsprintf(buf, newFormat, argptr); |
clynamen | 3:4bb49a5dfa47 | 23 | uart.printf("%s", buf); |
clynamen | 3:4bb49a5dfa47 | 24 | |
clynamen | 3:4bb49a5dfa47 | 25 | va_end(argptr); |
clynamen | 3:4bb49a5dfa47 | 26 | } |
clynamen | 3:4bb49a5dfa47 | 27 | |
clynamen | 3:4bb49a5dfa47 | 28 | int BBSerial::scanf(const char* format, ...) { |
clynamen | 3:4bb49a5dfa47 | 29 | if(!uart.readable()) { |
clynamen | 3:4bb49a5dfa47 | 30 | return 0; |
clynamen | 3:4bb49a5dfa47 | 31 | } |
clynamen | 3:4bb49a5dfa47 | 32 | va_list argptr; |
clynamen | 3:4bb49a5dfa47 | 33 | va_start(argptr, format); |
clynamen | 3:4bb49a5dfa47 | 34 | |
clynamen | 3:4bb49a5dfa47 | 35 | char line[200]; |
clynamen | 3:4bb49a5dfa47 | 36 | uart.gets(line, 200); |
clynamen | 3:4bb49a5dfa47 | 37 | line[199] = '\0'; |
clynamen | 3:4bb49a5dfa47 | 38 | |
clynamen | 3:4bb49a5dfa47 | 39 | int read=0; |
clynamen | 3:4bb49a5dfa47 | 40 | |
clynamen | 3:4bb49a5dfa47 | 41 | int start = 0; |
clynamen | 3:4bb49a5dfa47 | 42 | for (int i = 0; i < 10; i++) { |
clynamen | 3:4bb49a5dfa47 | 43 | if(strncmp("AAAAA", &line[i], 5) == 0) { |
clynamen | 3:4bb49a5dfa47 | 44 | start = i+5; |
clynamen | 3:4bb49a5dfa47 | 45 | } |
clynamen | 3:4bb49a5dfa47 | 46 | } |
clynamen | 3:4bb49a5dfa47 | 47 | char *clean = &line[start]; |
clynamen | 3:4bb49a5dfa47 | 48 | |
clynamen | 3:4bb49a5dfa47 | 49 | int end = strlen(clean)-6; |
clynamen | 3:4bb49a5dfa47 | 50 | clean[end] = 0; |
clynamen | 3:4bb49a5dfa47 | 51 | |
clynamen | 3:4bb49a5dfa47 | 52 | if(start < 1) { |
clynamen | 3:4bb49a5dfa47 | 53 | read = 0; |
clynamen | 3:4bb49a5dfa47 | 54 | } else { |
clynamen | 3:4bb49a5dfa47 | 55 | read = vsscanf(clean, format, argptr); |
clynamen | 3:4bb49a5dfa47 | 56 | } |
clynamen | 3:4bb49a5dfa47 | 57 | |
clynamen | 3:4bb49a5dfa47 | 58 | va_end(argptr); |
clynamen | 3:4bb49a5dfa47 | 59 | return read; |
clynamen | 3:4bb49a5dfa47 | 60 | } |