AT command firmware for MultiTech Dot devices.
Fork of mDot_AT_firmware by
CmdNetworkSessionKey.cpp
00001 #include "CmdNetworkSessionKey.h" 00002 00003 CmdNetworkSessionKey::CmdNetworkSessionKey() : 00004 #if MTS_CMD_TERM_VERBOSE 00005 Command("Network Session Key", "AT+NSK", "Network session encryption key (16 bytes)", "(hex:16) or (1-8),(hex:16)") 00006 #else 00007 Command("AT+NSK") 00008 #endif 00009 { 00010 _queryable = true; 00011 } 00012 00013 uint32_t CmdNetworkSessionKey::action(const std::vector<std::string>& args) 00014 { 00015 if (args.size() == 1) 00016 { 00017 CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(CommandTerminal::Dot()->getNetworkSessionKey(), ".").c_str()); 00018 } 00019 else if (args.size() == 2 || args.size() == 3) 00020 { 00021 int index = 0; 00022 int arg_index = 1; 00023 if (args.size() == 3) { 00024 arg_index = 2; 00025 sscanf(args[1].c_str(), "%d", &index); 00026 } 00027 00028 if (args.size() == 3 && args[2] == "?") { 00029 uint8_t nsk[16]; 00030 CommandTerminal::Dot()->getMulticastNetworkSessionKey(index-1, nsk); 00031 CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(nsk, 16, ".").c_str()); 00032 } else { 00033 std::vector<uint8_t> NewKey; 00034 00035 // Read in the key components... 00036 readByteArray(args[arg_index], NewKey, KEY_LENGTH); 00037 00038 if (arg_index == 2 && CommandTerminal::Dot()->setMulticastNetworkSessionKey(index-1, &NewKey[0]) == mDot::MDOT_OK) { 00039 #if MTS_CMD_TERM_VERBOSE 00040 CommandTerminal::Serial()->writef("Set Multicast Network Session Key %d: ", index); 00041 CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(NewKey, ".").c_str()); 00042 #endif 00043 } else if (CommandTerminal::Dot()->setNetworkSessionKey(NewKey) == mDot::MDOT_OK) { 00044 #if MTS_CMD_TERM_VERBOSE 00045 CommandTerminal::Serial()->writef("Set Network Session Key: "); 00046 CommandTerminal::Serial()->writef("%s\r\n", mts::Text::bin2hexString(NewKey, ".").c_str()); 00047 #endif 00048 } else { 00049 return 1; 00050 } 00051 } 00052 } 00053 00054 return 0; 00055 } 00056 00057 bool CmdNetworkSessionKey::verify(const std::vector<std::string>& args) 00058 { 00059 if (args.size() == 1) 00060 return true; 00061 00062 if (args.size() == 2) { 00063 if (!isHexString(args[1], 16)) { 00064 #if MTS_CMD_TERM_VERBOSE 00065 CommandTerminal::setErrorMessage("Invalid key, expects (hex:16)"); 00066 #endif 00067 return false; 00068 } 00069 00070 return true; 00071 } 00072 00073 if (args.size() == 3) { 00074 int index = 0; 00075 sscanf(args[1].c_str(), "%d", &index); 00076 00077 if (args[1].size() == 1 && (index < 1 || index > 8)) { 00078 #if MTS_CMD_TERM_VERBOSE 00079 CommandTerminal::setErrorMessage("Invalid index, expects 1-8"); 00080 #endif 00081 return false; 00082 } else if (args[2] != "?" && !isHexString(args[2], 16)) { 00083 #if MTS_CMD_TERM_VERBOSE 00084 CommandTerminal::setErrorMessage("Invalid key, expects (hex:16)"); 00085 #endif 00086 return false; 00087 } 00088 00089 return true; 00090 } 00091 00092 #if MTS_CMD_TERM_VERBOSE 00093 CommandTerminal::setErrorMessage("Invalid arguments"); 00094 #endif 00095 return false; 00096 }
Generated on Wed Dec 6 2023 19:34:05 by 1.7.2