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