AT Command Set mDot firmware with updated libmDot, to fix endian problem with joining LoRaWAN network

Dependencies:   MTS-Serial libmDot mbed-rtos mbed-src

Fork of mDot_AT_firmware by MultiTech

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CmdTxDataRate.cpp Source File

CmdTxDataRate.cpp

00001 #include "CmdTxDataRate.h"
00002 
00003 CmdTxDataRate::CmdTxDataRate(mDot* dot, mts::MTSSerial& serial) :
00004     Command(dot, "Tx Data Rate", "AT+TXDR", "Set the Tx data rate for all channels"), _serial(serial)
00005 {
00006     _help = std::string(text()) + ": " + std::string(desc());
00007 
00008     if (_dot->getFrequencyBand() == mDot::FB_915)
00009         _usage = "(7-10)";
00010     else
00011         _usage = "(7-12)";
00012     _queryable = true;
00013 }
00014 
00015 uint32_t CmdTxDataRate::action(std::vector<std::string> args)
00016 {
00017     if (args.size() == 1)
00018     {
00019         if (_dot->getVerbose())
00020             _serial.writef("Tx Data Rate: ");
00021 
00022         _serial.writef("%s\r\n", mDot::DataRateStr(_dot->getTxDataRate()).c_str());
00023     }
00024     else if (args.size() == 2)
00025     {
00026         int32_t code;
00027         uint8_t datarate = 0;
00028         uint8_t i;
00029 
00030         for (i = 0; i < 8; i++)
00031         {
00032             if (mDot::DataRateStr(i).find(args[1].c_str()) != std::string::npos)
00033             {
00034                 datarate = i;
00035                 break;
00036             }
00037         }
00038 
00039         if ((code = _dot->setTxDataRate(datarate)) != mDot::MDOT_OK)
00040         {
00041             std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError();
00042             setErrorMessage(error);
00043             return 1;
00044         }
00045     }
00046 
00047     return 0;
00048 }
00049 
00050 bool CmdTxDataRate::verify(std::vector<std::string> args)
00051 {
00052     if (args.size() == 1)
00053         return true;
00054 
00055     if (args.size() == 2)
00056     {
00057         uint8_t i;
00058         int datarate = -1;
00059         for (i = 0; i < 8; i++)
00060         {
00061             if (mDot::DataRateStr(i).find(args[1].c_str()) != std::string::npos)
00062             {
00063                 datarate = i;
00064                 break;
00065             }
00066         }
00067 
00068         if (datarate < 0)
00069         {       
00070             if (_dot->getFrequencyBand() == mDot::FB_915)
00071                 setErrorMessage("Invalid data rate, expects (7-10)");
00072             else
00073                 setErrorMessage("Invalid data rate, expects (7-12)");
00074             return false;
00075         }   
00076 
00077         if (_dot->getFrequencyBand() == mDot::FB_915) {
00078             if (datarate < 2) {
00079                 setErrorMessage("Invalid data rate, expects (7-10)");
00080                 return false;
00081             }
00082         }
00083 
00084         return true;
00085     }
00086 
00087     setErrorMessage("Invalid arguments");
00088     return false;
00089 }