with 36errors

Dependencies:   MTS-Serial libxDot-dev-mbed5-deprecated

Fork of Dot-AT-Firmware by MultiTech

Committer:
Mike Fiore
Date:
Mon Apr 04 09:00:31 2016 -0500
Revision:
9:ff62b20f7000
Parent:
1:e52ae6584f1c
Child:
14:f9a77400b622
update to version 1.0.8 of AT firmware

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 1:e52ae6584f1c 1 #include "CmdTxDataRate.h"
Mike Fiore 9:ff62b20f7000 2 #include "MTSText.h"
Mike Fiore 9:ff62b20f7000 3 #include "MTSLog.h"
Mike Fiore 1:e52ae6584f1c 4
Mike Fiore 9:ff62b20f7000 5 CmdTxDataRate::CmdTxDataRate(mDot* dot, mts::MTSSerial& serial)
Mike Fiore 9:ff62b20f7000 6 :
Mike Fiore 9:ff62b20f7000 7 Command(dot, "Tx Data Rate", "AT+TXDR", "Set the Tx data rate for all channels"),
Mike Fiore 9:ff62b20f7000 8 _serial(serial)
Mike Fiore 1:e52ae6584f1c 9 {
Mike Fiore 1:e52ae6584f1c 10 _help = std::string(text()) + ": " + std::string(desc());
Mike Fiore 1:e52ae6584f1c 11
Mike Fiore 1:e52ae6584f1c 12 if (_dot->getFrequencyBand() == mDot::FB_915)
Mike Fiore 9:ff62b20f7000 13 _usage = "(7-10|DR0-DR4|DR8-DR13)";
Mike Fiore 1:e52ae6584f1c 14 else
Mike Fiore 9:ff62b20f7000 15 _usage = "(7-12|DR0-DR7)";
Mike Fiore 1:e52ae6584f1c 16 _queryable = true;
Mike Fiore 1:e52ae6584f1c 17 }
Mike Fiore 1:e52ae6584f1c 18
Mike Fiore 9:ff62b20f7000 19 uint32_t CmdTxDataRate::action(std::vector<std::string> args) {
Mike Fiore 1:e52ae6584f1c 20 if (args.size() == 1)
Mike Fiore 9:ff62b20f7000 21 {
Mike Fiore 1:e52ae6584f1c 22 if (_dot->getVerbose())
Mike Fiore 1:e52ae6584f1c 23 _serial.writef("Tx Data Rate: ");
Mike Fiore 1:e52ae6584f1c 24
Mike Fiore 9:ff62b20f7000 25 _serial.writef("DR%d - %s\r\n", _dot->getTxDataRate(), _dot->getDateRateDetails(_dot->getTxDataRate()).c_str());
Mike Fiore 9:ff62b20f7000 26 } else if (args.size() == 2) {
Mike Fiore 9:ff62b20f7000 27 std::string dr = mts::Text::toUpper(args[1]);
Mike Fiore 1:e52ae6584f1c 28 int32_t code;
Mike Fiore 9:ff62b20f7000 29 int datarate = -1;
Mike Fiore 1:e52ae6584f1c 30 uint8_t i;
Mike Fiore 1:e52ae6584f1c 31
Mike Fiore 9:ff62b20f7000 32 int res = sscanf(dr.c_str(), "%d", &datarate);
Mike Fiore 9:ff62b20f7000 33
Mike Fiore 9:ff62b20f7000 34 if (res == 0) {
Mike Fiore 9:ff62b20f7000 35 for (i = 0; i < 24; i++) {
Mike Fiore 9:ff62b20f7000 36 if (mDot::DataRateStr(i).find(dr) != std::string::npos) {
Mike Fiore 9:ff62b20f7000 37 datarate = i;
Mike Fiore 9:ff62b20f7000 38 break;
Mike Fiore 9:ff62b20f7000 39 }
Mike Fiore 9:ff62b20f7000 40 }
Mike Fiore 9:ff62b20f7000 41 } else {
Mike Fiore 9:ff62b20f7000 42 if (datarate > 6) {
Mike Fiore 9:ff62b20f7000 43 // Convert SF to DR
Mike Fiore 9:ff62b20f7000 44 if (_dot->getFrequencyBand() == mDot::FB_915) {
Mike Fiore 9:ff62b20f7000 45 datarate = 10 - datarate;
Mike Fiore 9:ff62b20f7000 46 } else {
Mike Fiore 9:ff62b20f7000 47 datarate = 12 - datarate;
Mike Fiore 9:ff62b20f7000 48 }
Mike Fiore 1:e52ae6584f1c 49 }
Mike Fiore 1:e52ae6584f1c 50 }
Mike Fiore 1:e52ae6584f1c 51
Mike Fiore 9:ff62b20f7000 52 if ((code = _dot->setTxDataRate(datarate)) != mDot::MDOT_OK) {
Mike Fiore 9:ff62b20f7000 53 setErrorMessage(_dot->getLastError());
Mike Fiore 1:e52ae6584f1c 54 return 1;
Mike Fiore 1:e52ae6584f1c 55 }
Mike Fiore 1:e52ae6584f1c 56 }
Mike Fiore 1:e52ae6584f1c 57
Mike Fiore 1:e52ae6584f1c 58 return 0;
Mike Fiore 1:e52ae6584f1c 59 }
Mike Fiore 1:e52ae6584f1c 60
Mike Fiore 9:ff62b20f7000 61 bool CmdTxDataRate::verify(std::vector<std::string> args) {
Mike Fiore 1:e52ae6584f1c 62 if (args.size() == 1)
Mike Fiore 1:e52ae6584f1c 63 return true;
Mike Fiore 1:e52ae6584f1c 64
Mike Fiore 9:ff62b20f7000 65 if (args.size() == 2) {
Mike Fiore 9:ff62b20f7000 66 std::string dr = mts::Text::toUpper(args[1]);
Mike Fiore 9:ff62b20f7000 67
Mike Fiore 1:e52ae6584f1c 68 uint8_t i;
Mike Fiore 1:e52ae6584f1c 69 int datarate = -1;
Mike Fiore 9:ff62b20f7000 70
Mike Fiore 9:ff62b20f7000 71 int res = sscanf(dr.c_str(), "%d", &datarate);
Mike Fiore 9:ff62b20f7000 72
Mike Fiore 9:ff62b20f7000 73 if (res == 0) {
Mike Fiore 9:ff62b20f7000 74 for (i = 0; i < 24; i++) {
Mike Fiore 9:ff62b20f7000 75
Mike Fiore 9:ff62b20f7000 76 if (mDot::DataRateStr(i).find(dr) != std::string::npos) {
Mike Fiore 9:ff62b20f7000 77 uint8_t _dr = i;
Mike Fiore 9:ff62b20f7000 78
Mike Fiore 9:ff62b20f7000 79 if (_dr > 15) {
Mike Fiore 9:ff62b20f7000 80 _dr = 12 + (mDot::SF_12 - _dr);
Mike Fiore 9:ff62b20f7000 81
Mike Fiore 9:ff62b20f7000 82 if (_dot->getFrequencyBand() == mDot::FB_868) {
Mike Fiore 9:ff62b20f7000 83 if (_dr == mDot::SF_7H) {
Mike Fiore 9:ff62b20f7000 84 _dr = mDot::DR6;
Mike Fiore 9:ff62b20f7000 85 } else if (_dr == mDot::SF_FSK) {
Mike Fiore 9:ff62b20f7000 86 _dr = mDot::DR7;
Mike Fiore 9:ff62b20f7000 87 } else {
Mike Fiore 9:ff62b20f7000 88 _dr = 12 - _dr;
Mike Fiore 9:ff62b20f7000 89 }
Mike Fiore 9:ff62b20f7000 90 } else {
Mike Fiore 9:ff62b20f7000 91
Mike Fiore 9:ff62b20f7000 92 _dr = 10 - _dr;
Mike Fiore 9:ff62b20f7000 93 }
Mike Fiore 9:ff62b20f7000 94 }
Mike Fiore 9:ff62b20f7000 95
Mike Fiore 9:ff62b20f7000 96 datarate = _dr;
Mike Fiore 9:ff62b20f7000 97 break;
Mike Fiore 9:ff62b20f7000 98 }
Mike Fiore 9:ff62b20f7000 99 }
Mike Fiore 9:ff62b20f7000 100 } else {
Mike Fiore 9:ff62b20f7000 101 if (_dot->getFrequencyBand() == mDot::FB_915 && datarate > 10) {
Mike Fiore 9:ff62b20f7000 102 datarate = -1;
Mike Fiore 9:ff62b20f7000 103 } else if (_dot->getFrequencyBand() == mDot::FB_868 && datarate > 12) {
Mike Fiore 9:ff62b20f7000 104 datarate = -1;
Mike Fiore 9:ff62b20f7000 105 } else if (datarate > 6) {
Mike Fiore 9:ff62b20f7000 106 // Convert SF to DR
Mike Fiore 9:ff62b20f7000 107 if (_dot->getFrequencyBand() == mDot::FB_915) {
Mike Fiore 9:ff62b20f7000 108 datarate = 10 - datarate;
Mike Fiore 9:ff62b20f7000 109 } else {
Mike Fiore 9:ff62b20f7000 110 datarate = 12 - datarate;
Mike Fiore 9:ff62b20f7000 111 }
Mike Fiore 1:e52ae6584f1c 112 }
Mike Fiore 1:e52ae6584f1c 113 }
Mike Fiore 1:e52ae6584f1c 114
Mike Fiore 1:e52ae6584f1c 115 if (_dot->getFrequencyBand() == mDot::FB_915) {
Mike Fiore 9:ff62b20f7000 116 // DR8-13 used for P2P modes
Mike Fiore 9:ff62b20f7000 117 if (datarate < 0 || datarate > 13 || (datarate >= 5 && datarate <= 7)) {
Mike Fiore 9:ff62b20f7000 118 setErrorMessage("Invalid data rate, expects (7-10|DR0-DR4|DR8-DR13)");
Mike Fiore 9:ff62b20f7000 119 return false;
Mike Fiore 9:ff62b20f7000 120 }
Mike Fiore 9:ff62b20f7000 121 } else {
Mike Fiore 9:ff62b20f7000 122 if (datarate < 0 || datarate > 7) {
Mike Fiore 9:ff62b20f7000 123 setErrorMessage("Invalid data rate, expects (7-12|DR0-DR7)");
Mike Fiore 1:e52ae6584f1c 124 return false;
Mike Fiore 1:e52ae6584f1c 125 }
Mike Fiore 1:e52ae6584f1c 126 }
Mike Fiore 1:e52ae6584f1c 127
Mike Fiore 1:e52ae6584f1c 128 return true;
Mike Fiore 1:e52ae6584f1c 129 }
Mike Fiore 1:e52ae6584f1c 130
Mike Fiore 1:e52ae6584f1c 131 setErrorMessage("Invalid arguments");
Mike Fiore 1:e52ae6584f1c 132 return false;
Mike Fiore 1:e52ae6584f1c 133 }