AT terminal for the mDot using the USB debug port instead of the serial port.
Dependencies: MTS-Serial libmDot-mbed5
Fork of Dot-AT-Firmware by
CommandTerminal/Command.cpp@18:f5d28d621bb0, 2018-03-02 (annotated)
- Committer:
- pferland
- Date:
- Fri Mar 02 20:01:38 2018 +0000
- Revision:
- 18:f5d28d621bb0
- Parent:
- 14:f9a77400b622
Added ability to force the AT terminal to use the USB debug port
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Mike Fiore |
1:e52ae6584f1c | 1 | #include "Command.h" |
Mike Fiore |
1:e52ae6584f1c | 2 | #include <algorithm> |
Mike Fiore |
1:e52ae6584f1c | 3 | |
Mike Fiore |
1:e52ae6584f1c | 4 | const char Command::newline[] = "\r\n"; |
Mike Fiore |
1:e52ae6584f1c | 5 | |
Mike Fiore |
14:f9a77400b622 | 6 | Command::Command() : _name(""), _text(""), _desc(""), _usage("NONE") |
Mike Fiore |
1:e52ae6584f1c | 7 | { |
Mike Fiore |
1:e52ae6584f1c | 8 | _queryable = false; |
Mike Fiore |
1:e52ae6584f1c | 9 | } |
Mike Fiore |
1:e52ae6584f1c | 10 | |
Mike Fiore |
14:f9a77400b622 | 11 | Command::Command(const char* name, const char* text, const char* desc, const char* usage) : |
Mike Fiore |
14:f9a77400b622 | 12 | _name(name), _text(text), _desc(desc), _usage(usage) |
Mike Fiore |
1:e52ae6584f1c | 13 | { |
Mike Fiore |
14:f9a77400b622 | 14 | _queryable = false; |
Mike Fiore |
1:e52ae6584f1c | 15 | } |
Mike Fiore |
1:e52ae6584f1c | 16 | |
Mike Fiore |
9:ff62b20f7000 | 17 | std::string Command::usage() const |
Mike Fiore |
1:e52ae6584f1c | 18 | { |
Mike Fiore |
1:e52ae6584f1c | 19 | std::string usage(_text); |
Mike Fiore |
1:e52ae6584f1c | 20 | usage.append(": "); |
Mike Fiore |
1:e52ae6584f1c | 21 | usage.append(_usage); |
Mike Fiore |
1:e52ae6584f1c | 22 | return usage; |
Mike Fiore |
1:e52ae6584f1c | 23 | } |
Mike Fiore |
1:e52ae6584f1c | 24 | |
Mike Fiore |
9:ff62b20f7000 | 25 | bool Command::queryable() const |
Mike Fiore |
1:e52ae6584f1c | 26 | { |
Mike Fiore |
1:e52ae6584f1c | 27 | return _queryable; |
Mike Fiore |
1:e52ae6584f1c | 28 | } |
Mike Fiore |
1:e52ae6584f1c | 29 | |
Mike Fiore |
1:e52ae6584f1c | 30 | void Command::readByteArray(const std::string& input, std::vector<uint8_t>& out, size_t len) |
Mike Fiore |
1:e52ae6584f1c | 31 | { |
Mike Fiore |
1:e52ae6584f1c | 32 | // if input length is greater than expected byte output |
Mike Fiore |
1:e52ae6584f1c | 33 | // there must be a delimiter included |
Mike Fiore |
1:e52ae6584f1c | 34 | if (input.length() > len * 2) |
Mike Fiore |
1:e52ae6584f1c | 35 | { |
Mike Fiore |
1:e52ae6584f1c | 36 | std::vector < std::string > bytes; |
Mike Fiore |
1:e52ae6584f1c | 37 | if (input.find(" ") != std::string::npos) |
Mike Fiore |
1:e52ae6584f1c | 38 | bytes = mts::Text::split(input, " "); |
Mike Fiore |
1:e52ae6584f1c | 39 | else if (input.find(":") != std::string::npos) |
Mike Fiore |
1:e52ae6584f1c | 40 | bytes = mts::Text::split(input, ":"); |
Mike Fiore |
1:e52ae6584f1c | 41 | else if (input.find("-") != std::string::npos) |
Mike Fiore |
1:e52ae6584f1c | 42 | bytes = mts::Text::split(input, "-"); |
Mike Fiore |
1:e52ae6584f1c | 43 | else if (input.find(".") != std::string::npos) |
Mike Fiore |
1:e52ae6584f1c | 44 | bytes = mts::Text::split(input, "."); |
Mike Fiore |
1:e52ae6584f1c | 45 | |
Mike Fiore |
1:e52ae6584f1c | 46 | if (bytes.size() != len) { |
Mike Fiore |
1:e52ae6584f1c | 47 | return; |
Mike Fiore |
1:e52ae6584f1c | 48 | } |
Mike Fiore |
1:e52ae6584f1c | 49 | |
Mike Fiore |
9:ff62b20f7000 | 50 | int temp; |
Mike Fiore |
1:e52ae6584f1c | 51 | // Read in the key components... |
Mike Fiore |
1:e52ae6584f1c | 52 | for (size_t i = 0; i < len; i++) |
Mike Fiore |
1:e52ae6584f1c | 53 | { |
Mike Fiore |
1:e52ae6584f1c | 54 | sscanf(bytes[i].c_str(), "%02x", &temp); |
Mike Fiore |
1:e52ae6584f1c | 55 | out.push_back(temp); |
Mike Fiore |
1:e52ae6584f1c | 56 | } |
Mike Fiore |
1:e52ae6584f1c | 57 | } |
Mike Fiore |
1:e52ae6584f1c | 58 | else |
Mike Fiore |
1:e52ae6584f1c | 59 | { |
Mike Fiore |
1:e52ae6584f1c | 60 | // no delims |
Mike Fiore |
9:ff62b20f7000 | 61 | int temp; |
Mike Fiore |
1:e52ae6584f1c | 62 | |
Mike Fiore |
1:e52ae6584f1c | 63 | // Read in the key components... |
Mike Fiore |
1:e52ae6584f1c | 64 | for (size_t i = 0; i < len; i++) |
Mike Fiore |
1:e52ae6584f1c | 65 | { |
Mike Fiore |
1:e52ae6584f1c | 66 | if (i * 2 < input.size()) |
Mike Fiore |
1:e52ae6584f1c | 67 | { |
Mike Fiore |
1:e52ae6584f1c | 68 | sscanf(input.substr(i * 2).c_str(), "%02x", &temp); |
Mike Fiore |
1:e52ae6584f1c | 69 | out.push_back(temp); |
Mike Fiore |
1:e52ae6584f1c | 70 | } |
Mike Fiore |
1:e52ae6584f1c | 71 | } |
Mike Fiore |
1:e52ae6584f1c | 72 | } |
Mike Fiore |
1:e52ae6584f1c | 73 | } |
Mike Fiore |
1:e52ae6584f1c | 74 | |
Mike Fiore |
1:e52ae6584f1c | 75 | bool Command::isHexString(const std::string& str, size_t bytes) { |
Mike Fiore |
9:ff62b20f7000 | 76 | int numDelims = bytes - 1; |
Mike Fiore |
1:e52ae6584f1c | 77 | size_t minSize = bytes * 2; |
Mike Fiore |
1:e52ae6584f1c | 78 | size_t maxSize = minSize + numDelims; |
Mike Fiore |
1:e52ae6584f1c | 79 | |
Mike Fiore |
1:e52ae6584f1c | 80 | if (str.size() == minSize) { |
Mike Fiore |
1:e52ae6584f1c | 81 | return str.find_first_not_of("0123456789abcdefABCDEF") == std::string::npos; |
Mike Fiore |
1:e52ae6584f1c | 82 | } |
Mike Fiore |
1:e52ae6584f1c | 83 | else if (str.size() == maxSize) { |
Mike Fiore |
1:e52ae6584f1c | 84 | if (str.find_first_of(":-.") == std::string::npos) { |
Mike Fiore |
1:e52ae6584f1c | 85 | // no delim found |
Mike Fiore |
1:e52ae6584f1c | 86 | return false; |
Mike Fiore |
1:e52ae6584f1c | 87 | } |
Mike Fiore |
1:e52ae6584f1c | 88 | if (str.find(":") != std::string::npos && std::count(str.begin(), str.end(), ':') != numDelims) { |
Mike Fiore |
1:e52ae6584f1c | 89 | return false; |
Mike Fiore |
1:e52ae6584f1c | 90 | } |
Mike Fiore |
1:e52ae6584f1c | 91 | if (str.find(".") != std::string::npos && std::count(str.begin(), str.end(), '.') != numDelims) { |
Mike Fiore |
1:e52ae6584f1c | 92 | return false; |
Mike Fiore |
1:e52ae6584f1c | 93 | } |
Mike Fiore |
1:e52ae6584f1c | 94 | if (str.find("-") != std::string::npos && std::count(str.begin(), str.end(), '-') != numDelims) { |
Mike Fiore |
1:e52ae6584f1c | 95 | return false; |
Mike Fiore |
1:e52ae6584f1c | 96 | } |
Mike Fiore |
1:e52ae6584f1c | 97 | |
Mike Fiore |
1:e52ae6584f1c | 98 | return str.find_first_not_of("0123456789abcdefABCDEF:-.") == std::string::npos; |
Mike Fiore |
1:e52ae6584f1c | 99 | } |
Mike Fiore |
1:e52ae6584f1c | 100 | |
Mike Fiore |
1:e52ae6584f1c | 101 | return false; |
Mike Fiore |
1:e52ae6584f1c | 102 | } |
Mike Fiore |
1:e52ae6584f1c | 103 |