mDot AT-Firmware for testing

Dependencies:   MTS-Serial libmDot-mbed5

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 "CmdNetworkId.h"
Mike Fiore 1:e52ae6584f1c 2
Mike Fiore 1:e52ae6584f1c 3 CmdNetworkId::CmdNetworkId(mDot* dot, mts::MTSSerial& serial) :
Mike Fiore 1:e52ae6584f1c 4 Command(dot, "Network ID", "AT+NI", "Configured Network EUI/Name (App EUI in LoraMac) AT+NI=0,hex AT+NI=1,network_name (Net ID = crc64(network_name)) (8 bytes)"),
Mike Fiore 1:e52ae6584f1c 5 _serial(serial)
Mike Fiore 1:e52ae6584f1c 6 {
Mike Fiore 1:e52ae6584f1c 7 _help = std::string(text()) + ": " + std::string(desc());
Mike Fiore 1:e52ae6584f1c 8 _usage = "(0,(hex:8)),(1,(string:128))";
Mike Fiore 1:e52ae6584f1c 9 _queryable = true;
Mike Fiore 1:e52ae6584f1c 10 }
Mike Fiore 1:e52ae6584f1c 11
Mike Fiore 1:e52ae6584f1c 12 uint32_t CmdNetworkId::action(std::vector<std::string> args)
Mike Fiore 1:e52ae6584f1c 13 {
Mike Fiore 1:e52ae6584f1c 14 if (args.size() == 1)
Mike Fiore 1:e52ae6584f1c 15 {
Mike Fiore 1:e52ae6584f1c 16 if (_dot->getVerbose())
Mike Fiore 1:e52ae6584f1c 17 _serial.writef("Network ID: ");
Mike Fiore 1:e52ae6584f1c 18
Mike Fiore 1:e52ae6584f1c 19 _serial.writef("%s\r\n", mts::Text::bin2hexString(_dot->getNetworkId(), ":").c_str());
Mike Fiore 1:e52ae6584f1c 20
Mike Fiore 1:e52ae6584f1c 21 if (!_dot->getNetworkName().empty())
Mike Fiore 1:e52ae6584f1c 22 _serial.writef("Passphrase: '%s'\r\n", _dot->getNetworkName().c_str());
Mike Fiore 1:e52ae6584f1c 23 }
Mike Fiore 1:e52ae6584f1c 24 else
Mike Fiore 1:e52ae6584f1c 25 {
Mike Fiore 1:e52ae6584f1c 26 int32_t code;
Mike Fiore 1:e52ae6584f1c 27
Mike Fiore 1:e52ae6584f1c 28 if (args[1].find("1") == 0 && args[1].size() == 1)
Mike Fiore 1:e52ae6584f1c 29 {
Mike Fiore 1:e52ae6584f1c 30 std::string text;
Mike Fiore 1:e52ae6584f1c 31 if (args.size() > 3)
Mike Fiore 1:e52ae6584f1c 32 {
Mike Fiore 1:e52ae6584f1c 33 // passphrase was split on commas
Mike Fiore 1:e52ae6584f1c 34 for (size_t i = 2; i < args.size(); i++)
Mike Fiore 1:e52ae6584f1c 35 {
Mike Fiore 1:e52ae6584f1c 36 text.append(args[i]);
Mike Fiore 1:e52ae6584f1c 37 if (i < args.size() - 1)
Mike Fiore 1:e52ae6584f1c 38 text.append(",");
Mike Fiore 1:e52ae6584f1c 39 }
Mike Fiore 1:e52ae6584f1c 40 }
Mike Fiore 1:e52ae6584f1c 41 else
Mike Fiore 1:e52ae6584f1c 42 {
Mike Fiore 1:e52ae6584f1c 43 text = args[2];
Mike Fiore 1:e52ae6584f1c 44 }
Mike Fiore 1:e52ae6584f1c 45
Mike Fiore 1:e52ae6584f1c 46 if ((code = _dot->setNetworkName(text)) == mDot::MDOT_OK)
Mike Fiore 1:e52ae6584f1c 47 {
Mike Fiore 1:e52ae6584f1c 48 _serial.writef("Set Network Name: ");
Mike Fiore 1:e52ae6584f1c 49 _serial.writef("%s\r\n", text.c_str());
Mike Fiore 1:e52ae6584f1c 50 }
Mike Fiore 1:e52ae6584f1c 51 else
Mike Fiore 1:e52ae6584f1c 52 {
Mike Fiore 1:e52ae6584f1c 53 std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError();
Mike Fiore 1:e52ae6584f1c 54 setErrorMessage(error);
Mike Fiore 1:e52ae6584f1c 55 return 1;
Mike Fiore 1:e52ae6584f1c 56 }
Mike Fiore 1:e52ae6584f1c 57
Mike Fiore 1:e52ae6584f1c 58 }
Mike Fiore 1:e52ae6584f1c 59 else
Mike Fiore 1:e52ae6584f1c 60 {
Mike Fiore 1:e52ae6584f1c 61 std::vector<uint8_t> NewKey;
Mike Fiore 1:e52ae6584f1c 62 readByteArray(args[2], NewKey, EUI_LENGTH);
Mike Fiore 1:e52ae6584f1c 63 if ((code = _dot->setNetworkId(NewKey)) == mDot::MDOT_OK)
Mike Fiore 1:e52ae6584f1c 64 {
Mike Fiore 1:e52ae6584f1c 65 _serial.writef("Set Network ID: ");
Mike Fiore 1:e52ae6584f1c 66 _serial.writef("%s\r\n", mts::Text::bin2hexString(NewKey, ".").c_str());
Mike Fiore 1:e52ae6584f1c 67 }
Mike Fiore 1:e52ae6584f1c 68 else
Mike Fiore 1:e52ae6584f1c 69 {
Mike Fiore 1:e52ae6584f1c 70 std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError();
Mike Fiore 1:e52ae6584f1c 71 setErrorMessage(error);
Mike Fiore 1:e52ae6584f1c 72 return 1;
Mike Fiore 1:e52ae6584f1c 73 }
Mike Fiore 1:e52ae6584f1c 74 }
Mike Fiore 1:e52ae6584f1c 75 }
Mike Fiore 1:e52ae6584f1c 76
Mike Fiore 1:e52ae6584f1c 77 return 0;
Mike Fiore 1:e52ae6584f1c 78 }
Mike Fiore 1:e52ae6584f1c 79
Mike Fiore 1:e52ae6584f1c 80 bool CmdNetworkId::verify(std::vector<std::string> args)
Mike Fiore 1:e52ae6584f1c 81 {
Mike Fiore 1:e52ae6584f1c 82 if (args.size() == 1)
Mike Fiore 1:e52ae6584f1c 83 return true;
Mike Fiore 1:e52ae6584f1c 84
Mike Fiore 1:e52ae6584f1c 85 if (args.size() == 3) {
Mike Fiore 1:e52ae6584f1c 86 if (args[1] != "0" && args[1] != "1") {
Mike Fiore 1:e52ae6584f1c 87 setErrorMessage("Invalid type, expects (0,1)");
Mike Fiore 1:e52ae6584f1c 88 return false;
Mike Fiore 1:e52ae6584f1c 89 }
Mike Fiore 1:e52ae6584f1c 90 if (args[1] == "0" && !isHexString(args[2], 8)) {
Mike Fiore 1:e52ae6584f1c 91 setErrorMessage("Invalid ID, expects (hex:8");
Mike Fiore 1:e52ae6584f1c 92 return false;
Mike Fiore 1:e52ae6584f1c 93 }
Mike Fiore 1:e52ae6584f1c 94
Mike Fiore 1:e52ae6584f1c 95 if (args[1] == "1" && args[2].size() < 8) {
Mike Fiore 1:e52ae6584f1c 96 setErrorMessage("Invalid name, expects minimum 8 characters");
Mike Fiore 1:e52ae6584f1c 97 return false;
Mike Fiore 1:e52ae6584f1c 98 }
Mike Fiore 1:e52ae6584f1c 99
Mike Fiore 1:e52ae6584f1c 100 if (args[1] == "1" && args[2].size() > 128) {
Mike Fiore 1:e52ae6584f1c 101 setErrorMessage("Invalid name, expects (string:128)");
Mike Fiore 1:e52ae6584f1c 102 return false;
Mike Fiore 1:e52ae6584f1c 103 }
Mike Fiore 1:e52ae6584f1c 104
Mike Fiore 1:e52ae6584f1c 105 return true;
Mike Fiore 1:e52ae6584f1c 106 }
Mike Fiore 1:e52ae6584f1c 107
Mike Fiore 1:e52ae6584f1c 108 setErrorMessage("Invalid arguments");
Mike Fiore 1:e52ae6584f1c 109 return false;
Mike Fiore 1:e52ae6584f1c 110 }