MultiTech / Mbed OS mDot_AT_firmware_CUSTOM

Dependencies:   libmDot-Custom MTS-Serial

Fork of mDot_AT_firmware_CUSTOM by Jason Reiss

To change channel plans replace AS923 with AU915, EU868, KR920 or US915 on line 15

#define CHANNEL_PLAN CP_AS923

See Supported Channel Plans

Committer:
jreiss
Date:
Mon Aug 29 14:06:16 2016 +0000
Revision:
13:27f308724cc4
Child:
15:36db31c18231
commit something

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jreiss 13:27f308724cc4 1 #include "Command.h"
jreiss 13:27f308724cc4 2 #include <algorithm>
jreiss 13:27f308724cc4 3
jreiss 13:27f308724cc4 4 const char Command::newline[] = "\r\n";
jreiss 13:27f308724cc4 5
jreiss 13:27f308724cc4 6 Command::Command() : _name(""), _text(""), _desc(""), _usage("NONE")
jreiss 13:27f308724cc4 7 {
jreiss 13:27f308724cc4 8 _queryable = false;
jreiss 13:27f308724cc4 9 }
jreiss 13:27f308724cc4 10
jreiss 13:27f308724cc4 11 Command::Command(const char* name, const char* text, const char* desc, const char* usage) :
jreiss 13:27f308724cc4 12 _name(name), _text(text), _desc(desc), _usage(usage)
jreiss 13:27f308724cc4 13 {
jreiss 13:27f308724cc4 14 _queryable = false;
jreiss 13:27f308724cc4 15 }
jreiss 13:27f308724cc4 16
jreiss 13:27f308724cc4 17 std::string Command::usage() const
jreiss 13:27f308724cc4 18 {
jreiss 13:27f308724cc4 19 std::string usage(_text);
jreiss 13:27f308724cc4 20 usage.append(": ");
jreiss 13:27f308724cc4 21 usage.append(_usage);
jreiss 13:27f308724cc4 22 return usage;
jreiss 13:27f308724cc4 23 }
jreiss 13:27f308724cc4 24
jreiss 13:27f308724cc4 25 bool Command::queryable() const
jreiss 13:27f308724cc4 26 {
jreiss 13:27f308724cc4 27 return _queryable;
jreiss 13:27f308724cc4 28 }
jreiss 13:27f308724cc4 29
jreiss 13:27f308724cc4 30 void Command::readByteArray(const std::string& input, std::vector<uint8_t>& out, size_t len)
jreiss 13:27f308724cc4 31 {
jreiss 13:27f308724cc4 32 // if input length is greater than expected byte output
jreiss 13:27f308724cc4 33 // there must be a delimiter included
jreiss 13:27f308724cc4 34 if (input.length() > len * 2)
jreiss 13:27f308724cc4 35 {
jreiss 13:27f308724cc4 36 std::vector < std::string > bytes;
jreiss 13:27f308724cc4 37 if (input.find(" ") != std::string::npos)
jreiss 13:27f308724cc4 38 bytes = mts::Text::split(input, " ");
jreiss 13:27f308724cc4 39 else if (input.find(":") != std::string::npos)
jreiss 13:27f308724cc4 40 bytes = mts::Text::split(input, ":");
jreiss 13:27f308724cc4 41 else if (input.find("-") != std::string::npos)
jreiss 13:27f308724cc4 42 bytes = mts::Text::split(input, "-");
jreiss 13:27f308724cc4 43 else if (input.find(".") != std::string::npos)
jreiss 13:27f308724cc4 44 bytes = mts::Text::split(input, ".");
jreiss 13:27f308724cc4 45
jreiss 13:27f308724cc4 46 if (bytes.size() != len) {
jreiss 13:27f308724cc4 47 return;
jreiss 13:27f308724cc4 48 }
jreiss 13:27f308724cc4 49
jreiss 13:27f308724cc4 50 int temp;
jreiss 13:27f308724cc4 51 // Read in the key components...
jreiss 13:27f308724cc4 52 for (size_t i = 0; i < len; i++)
jreiss 13:27f308724cc4 53 {
jreiss 13:27f308724cc4 54 sscanf(bytes[i].c_str(), "%02x", &temp);
jreiss 13:27f308724cc4 55 out.push_back(temp);
jreiss 13:27f308724cc4 56 }
jreiss 13:27f308724cc4 57 }
jreiss 13:27f308724cc4 58 else
jreiss 13:27f308724cc4 59 {
jreiss 13:27f308724cc4 60 // no delims
jreiss 13:27f308724cc4 61 int temp;
jreiss 13:27f308724cc4 62
jreiss 13:27f308724cc4 63 // Read in the key components...
jreiss 13:27f308724cc4 64 for (size_t i = 0; i < len; i++)
jreiss 13:27f308724cc4 65 {
jreiss 13:27f308724cc4 66 if (i * 2 < input.size())
jreiss 13:27f308724cc4 67 {
jreiss 13:27f308724cc4 68 sscanf(input.substr(i * 2).c_str(), "%02x", &temp);
jreiss 13:27f308724cc4 69 out.push_back(temp);
jreiss 13:27f308724cc4 70 }
jreiss 13:27f308724cc4 71 }
jreiss 13:27f308724cc4 72 }
jreiss 13:27f308724cc4 73 }
jreiss 13:27f308724cc4 74
jreiss 13:27f308724cc4 75 bool Command::isHexString(const std::string& str, size_t bytes) {
jreiss 13:27f308724cc4 76 int numDelims = bytes - 1;
jreiss 13:27f308724cc4 77 size_t minSize = bytes * 2;
jreiss 13:27f308724cc4 78 size_t maxSize = minSize + numDelims;
jreiss 13:27f308724cc4 79
jreiss 13:27f308724cc4 80 if (str.size() == minSize) {
jreiss 13:27f308724cc4 81 return str.find_first_not_of("0123456789abcdefABCDEF") == std::string::npos;
jreiss 13:27f308724cc4 82 }
jreiss 13:27f308724cc4 83 else if (str.size() == maxSize) {
jreiss 13:27f308724cc4 84 if (str.find_first_of(":-.") == std::string::npos) {
jreiss 13:27f308724cc4 85 // no delim found
jreiss 13:27f308724cc4 86 return false;
jreiss 13:27f308724cc4 87 }
jreiss 13:27f308724cc4 88 if (str.find(":") != std::string::npos && std::count(str.begin(), str.end(), ':') != numDelims) {
jreiss 13:27f308724cc4 89 return false;
jreiss 13:27f308724cc4 90 }
jreiss 13:27f308724cc4 91 if (str.find(".") != std::string::npos && std::count(str.begin(), str.end(), '.') != numDelims) {
jreiss 13:27f308724cc4 92 return false;
jreiss 13:27f308724cc4 93 }
jreiss 13:27f308724cc4 94 if (str.find("-") != std::string::npos && std::count(str.begin(), str.end(), '-') != numDelims) {
jreiss 13:27f308724cc4 95 return false;
jreiss 13:27f308724cc4 96 }
jreiss 13:27f308724cc4 97
jreiss 13:27f308724cc4 98 return str.find_first_not_of("0123456789abcdefABCDEF:-.") == std::string::npos;
jreiss 13:27f308724cc4 99 }
jreiss 13:27f308724cc4 100
jreiss 13:27f308724cc4 101 return false;
jreiss 13:27f308724cc4 102 }
jreiss 13:27f308724cc4 103
jreiss 13:27f308724cc4 104