with 36errors

Dependencies:   MTS-Serial libxDot-dev-mbed5-deprecated

Fork of Dot-AT-Firmware by MultiTech

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CmdNetworkId.cpp Source File

CmdNetworkId.cpp

00001 #include "CmdNetworkId.h"
00002 
00003 CmdNetworkId::CmdNetworkId() :
00004     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))")
00005 {
00006     _queryable = true;
00007 }
00008 
00009 uint32_t CmdNetworkId::action(std::vector<std::string> args)
00010 {
00011     if (args.size() == 1)
00012     {
00013         CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(CommandTerminal::Dot()->getNetworkId(), "-").c_str());
00014 
00015         if (!CommandTerminal::Dot()->getNetworkName().empty())
00016             CommandTerminal::Serial()->writef("Passphrase: '%s'\r\n", CommandTerminal::Dot()->getNetworkName().c_str());
00017     }
00018     else
00019     {
00020         
00021 
00022         if (args[1].find("1") == 0 && args[1].size() == 1)
00023         {
00024             std::string text;
00025             if (args.size() > 3)
00026             {
00027                 // passphrase was split on commas
00028                 for (size_t i = 2; i < args.size(); i++)
00029                 {
00030                     text.append(args[i]);
00031                     if (i < args.size() - 1)
00032                         text.append(",");
00033                 }
00034             }
00035             else
00036             {
00037                 text = args[2];
00038             }
00039 
00040             if (CommandTerminal::Dot()->setNetworkName(text) == mDot::MDOT_OK)
00041             {
00042                 CommandTerminal::Serial()->writef("Set Network Name: ");
00043                 CommandTerminal::Serial()->writef("%s\r\n", text.c_str());
00044             }
00045             else
00046             {
00047                 CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError());;
00048                 return 1;
00049             }
00050 
00051         }
00052         else
00053         {
00054             std::vector<uint8_t> NewKey;
00055             readByteArray(args[2], NewKey, EUI_LENGTH);
00056             if (CommandTerminal::Dot()->setNetworkId(NewKey) == mDot::MDOT_OK)
00057             {
00058                 CommandTerminal::Serial()->writef("Set Network ID: ");
00059                 CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(NewKey, "-").c_str());
00060             }
00061             else
00062             {
00063                 CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError());;
00064                 return 1;
00065             }
00066         }
00067     }
00068 
00069     return 0;
00070 }
00071 
00072 bool CmdNetworkId::verify(std::vector<std::string> args)
00073 {
00074     if (args.size() == 1)
00075         return true;
00076 
00077     if (args.size() == 3) {
00078         if (args[1] != "0" && args[1] != "1") {
00079             CommandTerminal::setErrorMessage("Invalid type, expects (0,1)");
00080             return false;
00081         }
00082         if (args[1] == "0" && !isHexString(args[2], 8)) {
00083             CommandTerminal::setErrorMessage("Invalid ID, expects (hex:8");
00084             return false;
00085         }
00086 
00087         if (args[1] == "1" && args[2].size() < 8) {
00088             CommandTerminal::setErrorMessage("Invalid name, expects minimum 8 characters");
00089             return false;
00090         }
00091 
00092         if (args[1] == "1" && args[2].size() > 128) {
00093             CommandTerminal::setErrorMessage("Invalid name, expects (string:128)");
00094             return false;
00095         }
00096 
00097         return true;
00098     }
00099 
00100     CommandTerminal::setErrorMessage("Invalid arguments");
00101     return false;
00102 }