few changes for RTS/CTS control

Dependencies:   MTS-Serial libmDot mbed-rtos mbed

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