Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MTS-Serial libmDot mbed-rtos mbed-src
Fork of mDot_AT_firmware by
CmdNetworkKey.cpp
00001 #include "CmdNetworkKey.h" 00002 00003 CmdNetworkKey::CmdNetworkKey(mDot* dot, mts::MTSSerial& serial) : 00004 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)"), 00005 _serial(serial) 00006 { 00007 _help = std::string(text()) + ": " + std::string(desc()); 00008 _usage = "(0,(hex:16)),(1,(string:128))"; 00009 _queryable = true; 00010 } 00011 00012 uint32_t CmdNetworkKey::action(std::vector<std::string> args) 00013 { 00014 if (args.size() == 1) 00015 { 00016 if (_dot->getVerbose()) 00017 _serial.writef("Network Key: "); 00018 00019 _serial.writef("%s\r\n", mts::Text::bin2hexString(_dot->getNetworkKey(), ".").c_str()); 00020 if (!_dot->getNetworkPassphrase().empty()) 00021 _serial.writef("Passphrase: '%s'\r\n", _dot->getNetworkPassphrase().c_str()); 00022 00023 } 00024 else if (args.size() == 3) 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->setNetworkPassphrase(text)) == mDot::MDOT_OK) 00047 { 00048 _serial.writef("Set Network Passphrase: "); 00049 _serial.writef("%s\r\n", text.c_str()); 00050 } 00051 else 00052 { 00053 std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError(); 00054 setErrorMessage(error); 00055 return 1; 00056 } 00057 } 00058 else 00059 { 00060 std::vector<uint8_t> NewKey; 00061 readByteArray(args[2], NewKey, KEY_LENGTH); 00062 if ((code = _dot->setNetworkKey(NewKey)) == mDot::MDOT_OK) 00063 { 00064 _serial.writef("Set Network Key: "); 00065 _serial.writef("%s\r\n", mts::Text::bin2hexString(NewKey, ".").c_str()); 00066 } 00067 else 00068 { 00069 std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError(); 00070 setErrorMessage(error); 00071 return 1; 00072 } 00073 } 00074 } 00075 00076 return 0; 00077 } 00078 00079 bool CmdNetworkKey::verify(std::vector<std::string> args) 00080 { 00081 if (args.size() == 1) 00082 return true; 00083 00084 if (args.size() == 3) { 00085 if (args[1] != "0" && args[1] != "1") { 00086 setErrorMessage("Invalid type, expects (0,1)"); 00087 return false; 00088 } 00089 if (args[1] == "0" && !isHexString(args[2], 16)) { 00090 setErrorMessage("Invalid key, expects (hex:16)"); 00091 return false; 00092 } 00093 00094 if (args[1] == "1" && args[2].size() < 8) { 00095 setErrorMessage("Invalid name, expects minimum 8 characters"); 00096 return false; 00097 } 00098 00099 if (args[1] == "1" && (args[2].size() > 128 || args[2].size() < 8)) { 00100 setErrorMessage("Invalid passphrase, expects (string:8-128)"); 00101 return false; 00102 } 00103 00104 return true; 00105 } 00106 00107 setErrorMessage("Invalid arguments"); 00108 return false; 00109 } 00110
Generated on Tue Jul 12 2022 21:40:57 by
1.7.2
