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 mbed-rtos mbed
Fork of mDot_USB_AT_firmware by
CmdRxDataRate.cpp
00001 #include "CmdRxDataRate.h" 00002 00003 CmdRxDataRate::CmdRxDataRate(mDot* dot, mts::MTSSerial& serial) 00004 : 00005 Command(dot, "Rx Data Rate", "AT+RXDR", "Set the Rx datarate, testing purposes only"), 00006 _serial(serial) 00007 { 00008 _help = std::string(text()) + ": " + std::string(desc()); 00009 if (_dot->getFrequencyBand() == mDot::FB_915) 00010 _usage = "(7-10|DR0-DR4|DR8-DR13)"; 00011 else 00012 _usage = "(7-12|DR0-DR7)"; 00013 00014 _queryable = true; 00015 } 00016 00017 uint32_t CmdRxDataRate::action(std::vector<std::string> args) { 00018 if (args.size() == 1) { 00019 if (_dot->getVerbose()) 00020 _serial.writef("Rx Data Rate: "); 00021 00022 _serial.writef("%s\r\n", mDot::DataRateStr(_dot->getRxDataRate()).c_str()); 00023 } 00024 else if (args.size() == 2) { 00025 std::string dr = mts::Text::toUpper(args[1]); 00026 int32_t code; 00027 int datarate = 0; 00028 uint8_t i; 00029 00030 int res = sscanf(dr.c_str(), "%d", &datarate); 00031 00032 if (res == 0) { 00033 for (i = 0; i < 24; i++) { 00034 if (mDot::DataRateStr(i).find(dr) != std::string::npos) { 00035 datarate = i; 00036 break; 00037 } 00038 } 00039 } else { 00040 if (datarate > 6) { 00041 // Convert SF to DR 00042 if (_dot->getFrequencyBand() == mDot::FB_915) { 00043 datarate = 10 - datarate; 00044 } else { 00045 datarate = 12 - datarate; 00046 } 00047 } 00048 } 00049 00050 if ((code = _dot->setRxDataRate(datarate)) != mDot::MDOT_OK) { 00051 setErrorMessage(_dot->getLastError());; 00052 return 1; 00053 } 00054 } 00055 00056 return 0; 00057 } 00058 00059 bool CmdRxDataRate::verify(std::vector<std::string> args) { 00060 if (args.size() == 1) 00061 return true; 00062 00063 if (args.size() == 2) { 00064 std::string dr = mts::Text::toUpper(args[1]); 00065 00066 uint8_t i; 00067 int datarate = -1; 00068 00069 int res = sscanf(dr.c_str(), "%d", &datarate); 00070 00071 if (res == 0) { 00072 for (i = 0; i < 24; i++) { 00073 if (mDot::DataRateStr(i).find(dr) != std::string::npos) { 00074 datarate = i; 00075 break; 00076 } 00077 } 00078 } else { 00079 if (_dot->getFrequencyBand() == mDot::FB_915 && datarate > 10) { 00080 datarate = -1; 00081 } else if (_dot->getFrequencyBand() == mDot::FB_868 && datarate > 12) { 00082 datarate = -1; 00083 } else if (datarate > 6) { 00084 // Convert SF to DR 00085 if (_dot->getFrequencyBand() == mDot::FB_915) { 00086 datarate = 10 - datarate; 00087 } else { 00088 datarate = 12 - datarate; 00089 } 00090 } 00091 } 00092 00093 if (_dot->getFrequencyBand() == mDot::FB_915) { 00094 // DR8-13 used for P2P modes 00095 if (datarate < 0 || datarate > 13 || (datarate >= 5 && datarate <= 7)) { 00096 setErrorMessage("Invalid data rate, expects (7-10|DR0-DR4|DR8-DR13)"); 00097 return false; 00098 } 00099 } else { 00100 if (datarate < 0 || datarate > 7) { 00101 setErrorMessage("Invalid data rate, expects (7-12|DR0-DR7)"); 00102 return false; 00103 } 00104 } 00105 00106 return true; 00107 } 00108 00109 setErrorMessage("Invalid arguments"); 00110 return false; 00111 }
Generated on Tue Jul 12 2022 20:37:29 by
1.7.2
