Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
utils.h@23:61af0317e404, 2018-07-03 (annotated)
- Committer:
- gwappa
- Date:
- Tue Jul 03 13:46:21 2018 +0000
- Revision:
- 23:61af0317e404
- Parent:
- 8:973dcd190672
fix weird uint64 output
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gwappa | 1:871d3066c2ab | 1 | #ifndef UTILS_H_ |
gwappa | 1:871d3066c2ab | 2 | #define UTILS_H_ |
gwappa | 23:61af0317e404 | 3 | #include <string> |
gwappa | 1:871d3066c2ab | 4 | #include "IO.h" |
gwappa | 1:871d3066c2ab | 5 | |
gwappa | 1:871d3066c2ab | 6 | inline bool isWhitespace(const char& ch) { |
gwappa | 1:871d3066c2ab | 7 | return (ch == ' ') || |
gwappa | 1:871d3066c2ab | 8 | (ch == '\t') || |
gwappa | 1:871d3066c2ab | 9 | (ch == '\r') || |
gwappa | 1:871d3066c2ab | 10 | (ch == '\n') || |
gwappa | 1:871d3066c2ab | 11 | (ch == '\v') || |
gwappa | 1:871d3066c2ab | 12 | (ch == '\f'); |
gwappa | 1:871d3066c2ab | 13 | } |
gwappa | 1:871d3066c2ab | 14 | |
gwappa | 8:973dcd190672 | 15 | inline us_timestamp_t ms_to_us(const uint16_t& ms) |
gwappa | 8:973dcd190672 | 16 | { |
gwappa | 8:973dcd190672 | 17 | return ((us_timestamp_t)ms)*1000; |
gwappa | 8:973dcd190672 | 18 | } |
gwappa | 8:973dcd190672 | 19 | |
gwappa | 23:61af0317e404 | 20 | inline std::string uint64_to_str(uint64_t value, const uint16_t& base=10) |
gwappa | 23:61af0317e404 | 21 | { |
gwappa | 23:61af0317e404 | 22 | std::string result; |
gwappa | 23:61af0317e404 | 23 | |
gwappa | 23:61af0317e404 | 24 | do { |
gwappa | 23:61af0317e404 | 25 | char c = value % base; |
gwappa | 23:61af0317e404 | 26 | value /= base; |
gwappa | 23:61af0317e404 | 27 | |
gwappa | 23:61af0317e404 | 28 | if (c < 10) |
gwappa | 23:61af0317e404 | 29 | c +='0'; |
gwappa | 23:61af0317e404 | 30 | else |
gwappa | 23:61af0317e404 | 31 | c += 'A' - 10; |
gwappa | 23:61af0317e404 | 32 | result = c + result; |
gwappa | 23:61af0317e404 | 33 | } while (value); |
gwappa | 23:61af0317e404 | 34 | return result; |
gwappa | 23:61af0317e404 | 35 | } |
gwappa | 23:61af0317e404 | 36 | |
gwappa | 1:871d3066c2ab | 37 | template <typename V> |
gwappa | 1:871d3066c2ab | 38 | V parseUnsignedFromSerial(const V& defaultvalue) |
gwappa | 1:871d3066c2ab | 39 | { |
gwappa | 1:871d3066c2ab | 40 | V value = 0; |
gwappa | 1:871d3066c2ab | 41 | while(true) { |
gwappa | 1:871d3066c2ab | 42 | |
gwappa | 1:871d3066c2ab | 43 | int readChar = IO::getc(); |
gwappa | 1:871d3066c2ab | 44 | |
gwappa | 1:871d3066c2ab | 45 | // only accepts digits |
gwappa | 1:871d3066c2ab | 46 | if ((readChar >= 48) && (readChar <= 57)) { |
gwappa | 1:871d3066c2ab | 47 | value = value * 10 + (readChar - 48); |
gwappa | 1:871d3066c2ab | 48 | // continues parsing |
gwappa | 1:871d3066c2ab | 49 | |
gwappa | 1:871d3066c2ab | 50 | } else if ( isWhitespace((char)readChar) || (readChar == 59) ) { |
gwappa | 1:871d3066c2ab | 51 | // space or ';' |
gwappa | 1:871d3066c2ab | 52 | // ends parsing |
gwappa | 1:871d3066c2ab | 53 | break; |
gwappa | 1:871d3066c2ab | 54 | |
gwappa | 1:871d3066c2ab | 55 | } else { |
gwappa | 1:871d3066c2ab | 56 | IO::error("%c",(char)readChar); |
gwappa | 1:871d3066c2ab | 57 | // set value back to original |
gwappa | 1:871d3066c2ab | 58 | value = defaultvalue; |
gwappa | 1:871d3066c2ab | 59 | break; |
gwappa | 1:871d3066c2ab | 60 | |
gwappa | 1:871d3066c2ab | 61 | } |
gwappa | 1:871d3066c2ab | 62 | } |
gwappa | 1:871d3066c2ab | 63 | |
gwappa | 1:871d3066c2ab | 64 | return value; |
gwappa | 1:871d3066c2ab | 65 | } |
gwappa | 1:871d3066c2ab | 66 | #endif |