MicroLabo / Mbed OS mbed-Dot-AT-Firmware

Dependencies:   MTS-Serial libmDot-mbed5

Fork of Dot-AT-Firmware by MultiTech

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CmdNetworkAddress.cpp Source File

CmdNetworkAddress.cpp

00001 #include "CmdNetworkAddress.h"
00002 #include <algorithm>
00003 
00004 CmdNetworkAddress::CmdNetworkAddress() :
00005         Command("Network Address", "AT+NA", "Network address (devAddr in LoraMac) (4 bytes)", "(hex:4)")
00006 {
00007     _queryable = true;
00008 }
00009 
00010 uint32_t CmdNetworkAddress::action(std::vector<std::string> args)
00011 {
00012     std::vector<uint8_t> addr;
00013 
00014     if (args.size() == 1)
00015     {
00016         addr = CommandTerminal::Dot()->getNetworkAddress();
00017         CommandTerminal::Serial()->writef("%02x:%02x:%02x:%02x\r\n", addr[0], addr[1], addr[2], addr[3]);
00018     }
00019     else if (args.size() == 2)
00020     {
00021         
00022         int temp;
00023         uint32_t step = 2;
00024 
00025         if (args[1].find(":") != std::string::npos || args[1].find(".") != std::string::npos || args[1].find("-") != std::string::npos)
00026             step = 3;
00027 
00028         // Convert the ASCII hex data to binary...
00029         for (size_t i = 0; i < args[1].size(); i += step) 
00030         {
00031             sscanf(&args[1][i], "%02x", &temp);
00032             addr.push_back(temp);
00033         }
00034 
00035         if (CommandTerminal::Dot()->setNetworkAddress(addr) == mDot::MDOT_OK) {
00036             CommandTerminal::Serial()->writef("Set Network Address: ");
00037             CommandTerminal::Serial()->writef("%02x:%02x:%02x:%02x\r\n", addr[0], addr[1], addr[2], addr[3]);
00038         } else {
00039             CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError());;
00040             return 1;
00041         }
00042     }
00043 
00044     return 0;
00045 }
00046 
00047 bool CmdNetworkAddress::verify(std::vector<std::string> args)
00048 {
00049     if (args.size() == 1) {
00050         return true;
00051     }
00052 
00053     if (args.size() == 2) {
00054         if (!isHexString(args[1], 4))
00055         {
00056             CommandTerminal::setErrorMessage("Invalid address, expects (hex:4)");
00057             return false;
00058         }
00059 
00060         return true;
00061     }
00062 
00063     CommandTerminal::setErrorMessage("Invalid arguments");
00064     return false;
00065 }