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-mbed5
Fork of Dot-AT-Firmware by
CmdNetworkKey.cpp
00001 #include "CmdNetworkKey.h" 00002 00003 CmdNetworkKey::CmdNetworkKey() : 00004 Command("Network Key", "AT+NK", "Configured network key/passphrase (App Key in LoRaWAN) ## AT+NK=0,hex AT+NK=1,passphrase (Net key = cmac(passphrase)) (16 bytes)", "(0,(hex:16)),(1,(string:128))") 00005 { 00006 _queryable = true; 00007 } 00008 00009 uint32_t CmdNetworkKey::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()->getNetworkKey(), ".").c_str()); 00014 if (!CommandTerminal::Dot()->getNetworkPassphrase().empty()) 00015 CommandTerminal::Serial()->writef("Passphrase: '%s'\r\n", CommandTerminal::Dot()->getNetworkPassphrase().c_str()); 00016 } 00017 else if (args.size() == 3) 00018 { 00019 if (args[1].find("1") == 0 && args[1].size() == 1) 00020 { 00021 std::string text; 00022 if (args.size() > 3) 00023 { 00024 // passphrase was split on commas 00025 for (size_t i = 2; i < args.size(); i++) 00026 { 00027 text.append(args[i]); 00028 if (i < args.size() - 1) 00029 text.append(","); 00030 } 00031 } 00032 else 00033 { 00034 text = args[2]; 00035 } 00036 00037 if (CommandTerminal::Dot()->setNetworkPassphrase(text) == mDot::MDOT_OK) 00038 { 00039 CommandTerminal::Serial()->writef("Set Network Passphrase: "); 00040 CommandTerminal::Serial()->writef("%s\r\n", text.c_str()); 00041 } 00042 else 00043 { 00044 CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError());; 00045 return 1; 00046 } 00047 } 00048 else 00049 { 00050 std::vector<uint8_t> NewKey; 00051 readByteArray(args[2], NewKey, KEY_LENGTH); 00052 if (CommandTerminal::Dot()->setNetworkKey(NewKey) == mDot::MDOT_OK) 00053 { 00054 CommandTerminal::Serial()->writef("Set Network Key: "); 00055 CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(NewKey, ".").c_str()); 00056 } 00057 else 00058 { 00059 CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError());; 00060 return 1; 00061 } 00062 } 00063 } 00064 00065 return 0; 00066 } 00067 00068 bool CmdNetworkKey::verify(std::vector<std::string> args) 00069 { 00070 if (args.size() == 1) 00071 return true; 00072 00073 if (args.size() == 3) { 00074 if (args[1] != "0" && args[1] != "1") { 00075 CommandTerminal::setErrorMessage("Invalid type, expects (0,1)"); 00076 return false; 00077 } 00078 if (args[1] == "0" && !isHexString(args[2], 16)) { 00079 CommandTerminal::setErrorMessage("Invalid key, expects (hex:16)"); 00080 return false; 00081 } 00082 00083 if (args[1] == "1" && args[2].size() < 8) { 00084 CommandTerminal::setErrorMessage("Invalid name, expects minimum 8 characters"); 00085 return false; 00086 } 00087 00088 if (args[1] == "1" && (args[2].size() > 128 || args[2].size() < 8)) { 00089 CommandTerminal::setErrorMessage("Invalid passphrase, expects (string:8-128)"); 00090 return false; 00091 } 00092 00093 return true; 00094 } 00095 00096 CommandTerminal::setErrorMessage("Invalid arguments"); 00097 return false; 00098 } 00099
Generated on Tue Jul 12 2022 20:40:04 by
1.7.2
