dev

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 "CmdNetworkKey.h"
Mike Fiore 1:e52ae6584f1c 2
Mike Fiore 1:e52ae6584f1c 3 CmdNetworkKey::CmdNetworkKey(mDot* dot, mts::MTSSerial& serial) :
Mike Fiore 1:e52ae6584f1c 4 Command(dot, "Network Key", "AT+NK", "Configured network key/passphrase (App Key in LoraMac) ## AT+NK=0,hex AT+NK=1,passphrase (Net key = cmac(passphrase)) (16 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:16)),(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 CmdNetworkKey::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 Key: ");
Mike Fiore 1:e52ae6584f1c 18
Mike Fiore 1:e52ae6584f1c 19 _serial.writef("%s\r\n", mts::Text::bin2hexString(_dot->getNetworkKey(), ".").c_str());
Mike Fiore 1:e52ae6584f1c 20 if (!_dot->getNetworkPassphrase().empty())
Mike Fiore 1:e52ae6584f1c 21 _serial.writef("Passphrase: '%s'\r\n", _dot->getNetworkPassphrase().c_str());
Mike Fiore 1:e52ae6584f1c 22
Mike Fiore 1:e52ae6584f1c 23 }
Mike Fiore 1:e52ae6584f1c 24 else if (args.size() == 3)
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->setNetworkPassphrase(text)) == mDot::MDOT_OK)
Mike Fiore 1:e52ae6584f1c 47 {
Mike Fiore 1:e52ae6584f1c 48 _serial.writef("Set Network Passphrase: ");
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 else
Mike Fiore 1:e52ae6584f1c 59 {
Mike Fiore 1:e52ae6584f1c 60 std::vector<uint8_t> NewKey;
Mike Fiore 1:e52ae6584f1c 61 readByteArray(args[2], NewKey, KEY_LENGTH);
Mike Fiore 1:e52ae6584f1c 62 if ((code = _dot->setNetworkKey(NewKey)) == mDot::MDOT_OK)
Mike Fiore 1:e52ae6584f1c 63 {
Mike Fiore 1:e52ae6584f1c 64 _serial.writef("Set Network Key: ");
Mike Fiore 1:e52ae6584f1c 65 _serial.writef("%s\r\n", mts::Text::bin2hexString(NewKey, ".").c_str());
Mike Fiore 1:e52ae6584f1c 66 }
Mike Fiore 1:e52ae6584f1c 67 else
Mike Fiore 1:e52ae6584f1c 68 {
Mike Fiore 1:e52ae6584f1c 69 std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError();
Mike Fiore 1:e52ae6584f1c 70 setErrorMessage(error);
Mike Fiore 1:e52ae6584f1c 71 return 1;
Mike Fiore 1:e52ae6584f1c 72 }
Mike Fiore 1:e52ae6584f1c 73 }
Mike Fiore 1:e52ae6584f1c 74 }
Mike Fiore 1:e52ae6584f1c 75
Mike Fiore 1:e52ae6584f1c 76 return 0;
Mike Fiore 1:e52ae6584f1c 77 }
Mike Fiore 1:e52ae6584f1c 78
Mike Fiore 1:e52ae6584f1c 79 bool CmdNetworkKey::verify(std::vector<std::string> args)
Mike Fiore 1:e52ae6584f1c 80 {
Mike Fiore 1:e52ae6584f1c 81 if (args.size() == 1)
Mike Fiore 1:e52ae6584f1c 82 return true;
Mike Fiore 1:e52ae6584f1c 83
Mike Fiore 1:e52ae6584f1c 84 if (args.size() == 3) {
Mike Fiore 1:e52ae6584f1c 85 if (args[1] != "0" && args[1] != "1") {
Mike Fiore 1:e52ae6584f1c 86 setErrorMessage("Invalid type, expects (0,1)");
Mike Fiore 1:e52ae6584f1c 87 return false;
Mike Fiore 1:e52ae6584f1c 88 }
Mike Fiore 1:e52ae6584f1c 89 if (args[1] == "0" && !isHexString(args[2], 16)) {
Mike Fiore 1:e52ae6584f1c 90 setErrorMessage("Invalid key, expects (hex:16)");
Mike Fiore 1:e52ae6584f1c 91 return false;
Mike Fiore 1:e52ae6584f1c 92 }
Mike Fiore 1:e52ae6584f1c 93
Mike Fiore 1:e52ae6584f1c 94 if (args[1] == "1" && args[2].size() < 8) {
Mike Fiore 1:e52ae6584f1c 95 setErrorMessage("Invalid name, expects minimum 8 characters");
Mike Fiore 1:e52ae6584f1c 96 return false;
Mike Fiore 1:e52ae6584f1c 97 }
Mike Fiore 1:e52ae6584f1c 98
Mike Fiore 1:e52ae6584f1c 99 if (args[1] == "1" && (args[2].size() > 128 || args[2].size() < 8)) {
Mike Fiore 1:e52ae6584f1c 100 setErrorMessage("Invalid passphrase, expects (string:8-128)");
Mike Fiore 1:e52ae6584f1c 101 return false;
Mike Fiore 1:e52ae6584f1c 102 }
Mike Fiore 1:e52ae6584f1c 103
Mike Fiore 1:e52ae6584f1c 104 return true;
Mike Fiore 1:e52ae6584f1c 105 }
Mike Fiore 1:e52ae6584f1c 106
Mike Fiore 1:e52ae6584f1c 107 setErrorMessage("Invalid arguments");
Mike Fiore 1:e52ae6584f1c 108 return false;
Mike Fiore 1:e52ae6584f1c 109 }
Mike Fiore 1:e52ae6584f1c 110