with 36errors

Dependencies:   MTS-Serial libxDot-dev-mbed5-deprecated

Fork of Dot-AT-Firmware by MultiTech

Committer:
Mike Fiore
Date:
Thu Jun 25 10:23:41 2015 -0500
Revision:
1:e52ae6584f1c
Child:
9:ff62b20f7000
update debug, add command source files

Who changed what in which revision?

UserRevisionLine numberNew 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 1:e52ae6584f1c 6 Command::Command(mDot* dot) : _dot(dot)
Mike Fiore 1:e52ae6584f1c 7 {
Mike Fiore 1:e52ae6584f1c 8 _usage = "NONE";
Mike Fiore 1:e52ae6584f1c 9 _queryable = false;
Mike Fiore 1:e52ae6584f1c 10 }
Mike Fiore 1:e52ae6584f1c 11
Mike Fiore 1:e52ae6584f1c 12 Command::Command(mDot* dot, const char* name, const char* text, const char* desc) :
Mike Fiore 1:e52ae6584f1c 13 _dot(dot), _name(name), _text(text), _desc(desc)
Mike Fiore 1:e52ae6584f1c 14 {
Mike Fiore 1:e52ae6584f1c 15 _usage = "NONE";
Mike Fiore 1:e52ae6584f1c 16 _queryable = false;
Mike Fiore 1:e52ae6584f1c 17 }
Mike Fiore 1:e52ae6584f1c 18
Mike Fiore 1:e52ae6584f1c 19 std::string &Command::errorMessage()
Mike Fiore 1:e52ae6584f1c 20 {
Mike Fiore 1:e52ae6584f1c 21 return _errorMessage;
Mike Fiore 1:e52ae6584f1c 22 }
Mike Fiore 1:e52ae6584f1c 23
Mike Fiore 1:e52ae6584f1c 24 void Command::setErrorMessage(const char* message)
Mike Fiore 1:e52ae6584f1c 25 {
Mike Fiore 1:e52ae6584f1c 26 _errorMessage.assign(message);
Mike Fiore 1:e52ae6584f1c 27 }
Mike Fiore 1:e52ae6584f1c 28
Mike Fiore 1:e52ae6584f1c 29 void Command::setErrorMessage(const std::string& message)
Mike Fiore 1:e52ae6584f1c 30 {
Mike Fiore 1:e52ae6584f1c 31 _errorMessage.assign(message);
Mike Fiore 1:e52ae6584f1c 32 }
Mike Fiore 1:e52ae6584f1c 33
Mike Fiore 1:e52ae6584f1c 34 const std::string Command::usage() const
Mike Fiore 1:e52ae6584f1c 35 {
Mike Fiore 1:e52ae6584f1c 36 std::string usage(_text);
Mike Fiore 1:e52ae6584f1c 37 usage.append(": ");
Mike Fiore 1:e52ae6584f1c 38 usage.append(_usage);
Mike Fiore 1:e52ae6584f1c 39 return usage;
Mike Fiore 1:e52ae6584f1c 40 }
Mike Fiore 1:e52ae6584f1c 41
Mike Fiore 1:e52ae6584f1c 42 const bool Command::queryable()
Mike Fiore 1:e52ae6584f1c 43 {
Mike Fiore 1:e52ae6584f1c 44 return _queryable;
Mike Fiore 1:e52ae6584f1c 45 }
Mike Fiore 1:e52ae6584f1c 46
Mike Fiore 1:e52ae6584f1c 47 void Command::readByteArray(const std::string& input, std::vector<uint8_t>& out, size_t len)
Mike Fiore 1:e52ae6584f1c 48 {
Mike Fiore 1:e52ae6584f1c 49 // if input length is greater than expected byte output
Mike Fiore 1:e52ae6584f1c 50 // there must be a delimiter included
Mike Fiore 1:e52ae6584f1c 51 if (input.length() > len * 2)
Mike Fiore 1:e52ae6584f1c 52 {
Mike Fiore 1:e52ae6584f1c 53 std::vector < std::string > bytes;
Mike Fiore 1:e52ae6584f1c 54 if (input.find(" ") != std::string::npos)
Mike Fiore 1:e52ae6584f1c 55 bytes = mts::Text::split(input, " ");
Mike Fiore 1:e52ae6584f1c 56 else if (input.find(":") != std::string::npos)
Mike Fiore 1:e52ae6584f1c 57 bytes = mts::Text::split(input, ":");
Mike Fiore 1:e52ae6584f1c 58 else if (input.find("-") != std::string::npos)
Mike Fiore 1:e52ae6584f1c 59 bytes = mts::Text::split(input, "-");
Mike Fiore 1:e52ae6584f1c 60 else if (input.find(".") != std::string::npos)
Mike Fiore 1:e52ae6584f1c 61 bytes = mts::Text::split(input, ".");
Mike Fiore 1:e52ae6584f1c 62
Mike Fiore 1:e52ae6584f1c 63 if (bytes.size() != len) {
Mike Fiore 1:e52ae6584f1c 64 return;
Mike Fiore 1:e52ae6584f1c 65 }
Mike Fiore 1:e52ae6584f1c 66
Mike Fiore 1:e52ae6584f1c 67 uint8_t temp;
Mike Fiore 1:e52ae6584f1c 68 // Read in the key components...
Mike Fiore 1:e52ae6584f1c 69 for (size_t i = 0; i < len; i++)
Mike Fiore 1:e52ae6584f1c 70 {
Mike Fiore 1:e52ae6584f1c 71 sscanf(bytes[i].c_str(), "%02x", &temp);
Mike Fiore 1:e52ae6584f1c 72 out.push_back(temp);
Mike Fiore 1:e52ae6584f1c 73 }
Mike Fiore 1:e52ae6584f1c 74 }
Mike Fiore 1:e52ae6584f1c 75 else
Mike Fiore 1:e52ae6584f1c 76 {
Mike Fiore 1:e52ae6584f1c 77 // no delims
Mike Fiore 1:e52ae6584f1c 78 uint8_t temp;
Mike Fiore 1:e52ae6584f1c 79
Mike Fiore 1:e52ae6584f1c 80 // Read in the key components...
Mike Fiore 1:e52ae6584f1c 81 for (size_t i = 0; i < len; i++)
Mike Fiore 1:e52ae6584f1c 82 {
Mike Fiore 1:e52ae6584f1c 83 if (i * 2 < input.size())
Mike Fiore 1:e52ae6584f1c 84 {
Mike Fiore 1:e52ae6584f1c 85 sscanf(input.substr(i * 2).c_str(), "%02x", &temp);
Mike Fiore 1:e52ae6584f1c 86 out.push_back(temp);
Mike Fiore 1:e52ae6584f1c 87 }
Mike Fiore 1:e52ae6584f1c 88 }
Mike Fiore 1:e52ae6584f1c 89 }
Mike Fiore 1:e52ae6584f1c 90 }
Mike Fiore 1:e52ae6584f1c 91
Mike Fiore 1:e52ae6584f1c 92 bool Command::isHexString(const std::string& str, size_t bytes) {
Mike Fiore 1:e52ae6584f1c 93 size_t numDelims = bytes - 1;
Mike Fiore 1:e52ae6584f1c 94 size_t minSize = bytes * 2;
Mike Fiore 1:e52ae6584f1c 95 size_t maxSize = minSize + numDelims;
Mike Fiore 1:e52ae6584f1c 96
Mike Fiore 1:e52ae6584f1c 97 if (str.size() == minSize) {
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 else if (str.size() == maxSize) {
Mike Fiore 1:e52ae6584f1c 101 if (str.find_first_of(":-.") == std::string::npos) {
Mike Fiore 1:e52ae6584f1c 102 // no delim found
Mike Fiore 1:e52ae6584f1c 103 return false;
Mike Fiore 1:e52ae6584f1c 104 }
Mike Fiore 1:e52ae6584f1c 105 if (str.find(":") != std::string::npos && std::count(str.begin(), str.end(), ':') != numDelims) {
Mike Fiore 1:e52ae6584f1c 106 return false;
Mike Fiore 1:e52ae6584f1c 107 }
Mike Fiore 1:e52ae6584f1c 108 if (str.find(".") != std::string::npos && std::count(str.begin(), str.end(), '.') != numDelims) {
Mike Fiore 1:e52ae6584f1c 109 return false;
Mike Fiore 1:e52ae6584f1c 110 }
Mike Fiore 1:e52ae6584f1c 111 if (str.find("-") != std::string::npos && std::count(str.begin(), str.end(), '-') != numDelims) {
Mike Fiore 1:e52ae6584f1c 112 return false;
Mike Fiore 1:e52ae6584f1c 113 }
Mike Fiore 1:e52ae6584f1c 114
Mike Fiore 1:e52ae6584f1c 115 return str.find_first_not_of("0123456789abcdefABCDEF:-.") == std::string::npos;
Mike Fiore 1:e52ae6584f1c 116 }
Mike Fiore 1:e52ae6584f1c 117
Mike Fiore 1:e52ae6584f1c 118 return false;
Mike Fiore 1:e52ae6584f1c 119 }
Mike Fiore 1:e52ae6584f1c 120
Mike Fiore 1:e52ae6584f1c 121 bool Command::verify(std::vector<std::string> args) {
Mike Fiore 1:e52ae6584f1c 122 if (args.size() == 1)
Mike Fiore 1:e52ae6584f1c 123 return true;
Mike Fiore 1:e52ae6584f1c 124
Mike Fiore 1:e52ae6584f1c 125 setErrorMessage("Invalid arguments");
Mike Fiore 1:e52ae6584f1c 126 return false;
Mike Fiore 1:e52ae6584f1c 127 }
Mike Fiore 1:e52ae6584f1c 128