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:
Thu Mar 23 20:40:54 2017 +0000
Revision:
29:15b59b827ac7
Parent:
14:e80ace5a6834
update libmDot-Custom

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 1:e52ae6584f1c 1 #include "CmdNetworkId.h"
Mike Fiore 1:e52ae6584f1c 2
Jason Reiss 14:e80ace5a6834 3 CmdNetworkId::CmdNetworkId() :
Jason Reiss 14:e80ace5a6834 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 {
Jason Reiss 14:e80ace5a6834 13 CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(CommandTerminal::Dot()->getNetworkId(), "-").c_str());
Mike Fiore 1:e52ae6584f1c 14
Jason Reiss 14:e80ace5a6834 15 if (!CommandTerminal::Dot()->getNetworkName().empty())
Jason Reiss 14:e80ace5a6834 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 {
Jason Reiss 14:e80ace5a6834 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
Jason Reiss 14:e80ace5a6834 40 if (CommandTerminal::Dot()->setNetworkName(text) == mDot::MDOT_OK)
Mike Fiore 1:e52ae6584f1c 41 {
Jason Reiss 14:e80ace5a6834 42 CommandTerminal::Serial()->writef("Set Network Name: ");
Jason Reiss 14:e80ace5a6834 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 {
Jason Reiss 14:e80ace5a6834 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);
Jason Reiss 14:e80ace5a6834 56 if (CommandTerminal::Dot()->setNetworkId(NewKey) == mDot::MDOT_OK)
Mike Fiore 1:e52ae6584f1c 57 {
Jason Reiss 14:e80ace5a6834 58 CommandTerminal::Serial()->writef("Set Network ID: ");
Jason Reiss 14:e80ace5a6834 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 {
Jason Reiss 14:e80ace5a6834 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") {
Jason Reiss 14:e80ace5a6834 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)) {
Jason Reiss 14:e80ace5a6834 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) {
Jason Reiss 14:e80ace5a6834 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) {
Jason Reiss 14:e80ace5a6834 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
Jason Reiss 14:e80ace5a6834 100 CommandTerminal::setErrorMessage("Invalid arguments");
Mike Fiore 1:e52ae6584f1c 101 return false;
Mike Fiore 1:e52ae6584f1c 102 }