mDot AT-Firmware for testing

Dependencies:   MTS-Serial libmDot-mbed5

Fork of Dot-AT-Firmware by MultiTech

Committer:
Mike Fiore
Date:
Fri Nov 04 14:25:43 2016 -0500
Revision:
14:f9a77400b622
Parent:
9:ff62b20f7000
update from git revision 2.0.16

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