AT command firmware for MultiTech Dot devices.

Fork of mDot_AT_firmware by MultiTech

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CmdAdaptiveDataRate.cpp Source File

CmdAdaptiveDataRate.cpp

00001 #include "CmdAdaptiveDataRate.h"
00002 
00003 
00004 CmdAdaptiveDataRate::CmdAdaptiveDataRate() :
00005 #if MTS_CMD_TERM_VERBOSE
00006     Command("Adaptive Data Rate", "AT+ADR", "Enable/disable ADR(0:off,1: on),[ADR_ACK_LIMIT(1-127)],[ADR_ACK_DELAY(1-127)],Auto Inc DR(0:off,1:on)", "(0,1),(1,127),(1,127),(0,1)")
00007 #else
00008     Command("AT+ADR")
00009 #endif
00010 {
00011     _queryable = true;
00012 }
00013 
00014 uint32_t CmdAdaptiveDataRate::action(const std::vector<std::string>& args)
00015 {
00016     if (args.size() == 1)
00017     {
00018         CommandTerminal::Serial()->writef("%d, %d, %d, %d\r\n",
00019                                           CommandTerminal::Dot()->getAdr(),
00020                                           CommandTerminal::Dot()->getAdrAckLimit(),
00021                                           CommandTerminal::Dot()->getAdrAckDelay(),
00022                                           !CommandTerminal::Dot()->getDisableIncrementDR());
00023     }
00024     else if (args.size() > 1)
00025     {
00026         bool enable = (args[1] == "1");
00027         if (CommandTerminal::Dot()->setAdr(enable) != mDot::MDOT_OK)
00028         {
00029             return 1;
00030         }
00031 
00032         if (args.size() > 2)
00033         {
00034             int input;
00035             sscanf(args[2].c_str(), "%d", &input);
00036             CommandTerminal::Dot()->setAdrAckLimit(input);
00037 
00038             if (args.size() > 3)
00039             {
00040                 sscanf(args[3].c_str(), "%d", &input);
00041                 CommandTerminal::Dot()->setAdrAckDelay(input);
00042             }
00043 
00044             if ((args.size() > 4) && (args[4] == "0" || args[4] == "1")) {
00045                 // input 1:on = false because setting true disables
00046                 CommandTerminal::Dot()->setDisableIncrementDR(args[4] == "0");
00047             }
00048         }
00049     }
00050 
00051     return 0;
00052 }
00053 
00054 bool CmdAdaptiveDataRate::verify(const std::vector<std::string>& args)
00055 {
00056     if (args.size() == 1)
00057         return true;
00058 
00059     if (args[1] != "1" && args[1] != "0") {
00060 #if MTS_CMD_TERM_VERBOSE
00061         CommandTerminal::setErrorMessage("Invalid parameter1, expects (0: off, 1: on)");
00062 #endif
00063         return false;
00064     }
00065 
00066     int input;
00067 
00068     if (args.size() == 2) {
00069         return true;
00070     } else {
00071         sscanf(args[2].c_str(), "%d", &input);
00072 
00073         if (input < 1 || input > 127) {
00074     #if MTS_CMD_TERM_VERBOSE
00075             CommandTerminal::setErrorMessage("Invalid parameter2, expects ADR_ACK_LIMIT (1-127)");
00076     #endif
00077             return false;
00078         }
00079     }
00080 
00081     if (args.size() == 3)
00082     {
00083         return true;
00084     } else {
00085         sscanf(args[3].c_str(), "%d", &input);
00086         if (input < 1 || input > 127) {
00087 #if MTS_CMD_TERM_VERBOSE
00088             CommandTerminal::setErrorMessage("Invalid parameter3, expects ADR_ACK_DELAY (1-127)");
00089 #endif
00090             return false;
00091         }
00092     }
00093 
00094     if (args.size() == 4) {
00095         return true;
00096     }
00097 
00098     if (args[4] != "0" && args[4] != "1") {
00099 #if MTS_CMD_TERM_VERBOSE
00100         CommandTerminal::setErrorMessage("Invalid parameter4, expects (0: off, 1: on)");
00101 #endif
00102         return false;
00103     }
00104 
00105     if (args.size() == 5) {
00106         return true;
00107     }
00108 
00109 #if MTS_CMD_TERM_VERBOSE
00110     CommandTerminal::setErrorMessage("Invalid arguments");
00111 #endif
00112     return false;
00113 }