Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MTS-Serial libmDot-mbed5
Fork of Dot-AT-Firmware by
CmdTxDataRate.cpp
00001 #include "CmdTxDataRate.h" 00002 #include "MTSText.h" 00003 #include "MTSLog.h" 00004 00005 00006 CmdTxDataRate::CmdTxDataRate() 00007 : Command("Tx Data Rate", "AT+TXDR", "Set the Tx data rate for all channels", "US:(7-10|DR0-DR4|DR8-DR13)) EU:(7-12|DR0-DR7))") { 00008 _queryable = true; 00009 } 00010 00011 uint32_t CmdTxDataRate::action(std::vector<std::string> args) { 00012 if (args.size() == 1) 00013 { 00014 CommandTerminal::Serial()->writef("DR%d - %s\r\n", CommandTerminal::Dot()->getTxDataRate(), CommandTerminal::Dot()->getDateRateDetails(CommandTerminal::Dot()->getTxDataRate()).c_str()); 00015 } else if (args.size() == 2) { 00016 std::string dr = mts::Text::toUpper(args[1]); 00017 00018 int datarate = -1; 00019 uint8_t i; 00020 00021 int res = sscanf(dr.c_str(), "%d", &datarate); 00022 00023 if (res == 0) { 00024 for (i = 0; i < 24; i++) { 00025 if (mDot::DataRateStr(i).find(dr) != std::string::npos) { 00026 datarate = i; 00027 break; 00028 } 00029 } 00030 } else { 00031 if (datarate > 6) { 00032 // Convert SF to DR 00033 00034 if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) { 00035 datarate = 10 - datarate; 00036 } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { 00037 datarate = 10 - datarate; 00038 } else { 00039 datarate = 12 - datarate; 00040 } 00041 } 00042 } 00043 00044 if (CommandTerminal::Dot()->setTxDataRate(datarate) != mDot::MDOT_OK) { 00045 CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError()); 00046 return 1; 00047 } 00048 } 00049 00050 return 0; 00051 } 00052 00053 bool CmdTxDataRate::verify(std::vector<std::string> args) { 00054 if (args.size() == 1) 00055 return true; 00056 00057 if (args.size() == 2) { 00058 std::string dr = mts::Text::toUpper(args[1]); 00059 00060 uint8_t i; 00061 int datarate = -1; 00062 00063 int res = sscanf(dr.c_str(), "%d", &datarate); 00064 00065 if (res == 0) { 00066 for (i = 0; i < 24; i++) { 00067 00068 if (mDot::DataRateStr(i).find(dr) != std::string::npos) { 00069 uint8_t _dr = i; 00070 00071 if (_dr > 15) { 00072 _dr = 12 + (mDot::SF_12 - _dr); 00073 00074 if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_EU868) { 00075 if (_dr == mDot::SF_7H) { 00076 _dr = mDot::DR6; 00077 } else if (_dr == mDot::SF_FSK) { 00078 _dr = mDot::DR7; 00079 } else { 00080 _dr = 12 - _dr; 00081 } 00082 } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { 00083 _dr = 10 - _dr; 00084 } else { 00085 _dr = 10 - _dr; 00086 } 00087 } 00088 00089 datarate = _dr; 00090 break; 00091 } 00092 } 00093 } else { 00094 00095 if ((CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) && datarate > 10) { 00096 datarate = -1; 00097 } else if (datarate > 12) { 00098 datarate = -1; 00099 } else if (datarate > 6) { 00100 // Convert SF to DR 00101 if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) { 00102 datarate = 10 - datarate; 00103 } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { 00104 datarate = 10 - datarate; 00105 } else { 00106 datarate = 12 - datarate; 00107 } 00108 } 00109 } 00110 00111 if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) { 00112 // DR8-13 used for P2P modes 00113 if (datarate < 0 || datarate > 13 || (datarate >= 5 && datarate <= 7)) { 00114 CommandTerminal::setErrorMessage("Invalid data rate, expects (7-10|DR0-DR4|DR8-DR13)"); 00115 return false; 00116 } 00117 } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { 00118 // DR8-13 used for P2P modes 00119 if (datarate < 0 || datarate > 13 || (datarate >= 5 && datarate <= 7)) { 00120 CommandTerminal::setErrorMessage("Invalid data rate, expects (7-10|DR0-DR4|DR8-DR13)"); 00121 return false; 00122 } 00123 } else { 00124 if (datarate < 0 || datarate > 7) { 00125 CommandTerminal::setErrorMessage("Invalid data rate, expects (7-12|DR0-DR7)"); 00126 return false; 00127 } 00128 } 00129 00130 return true; 00131 } 00132 00133 CommandTerminal::setErrorMessage("Invalid arguments"); 00134 return false; 00135 }
Generated on Tue Jul 12 2022 20:40:04 by
