dev
Dependencies: MTS-Serial libmDot-mbed5
Fork of Dot-AT-Firmware by
CommandTerminal/CmdTxDataRate.cpp@14:f9a77400b622, 2016-11-04 (annotated)
- Committer:
- Mike Fiore
- Date:
- Fri Nov 04 14:25:43 2016 -0500
- Revision:
- 14:f9a77400b622
- Parent:
- 9:ff62b20f7000
- Child:
- 16:d5cf2af81a6d
update from git revision 2.0.16
Who changed what in which revision?
User | Revision | Line number | New 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 |
1:e52ae6584f1c | 5 | |
Mike Fiore |
14:f9a77400b622 | 6 | CmdTxDataRate::CmdTxDataRate() |
Mike Fiore |
14:f9a77400b622 | 7 | : 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))") { |
Mike Fiore |
1:e52ae6584f1c | 8 | _queryable = true; |
Mike Fiore |
1:e52ae6584f1c | 9 | } |
Mike Fiore |
1:e52ae6584f1c | 10 | |
Mike Fiore |
9:ff62b20f7000 | 11 | uint32_t CmdTxDataRate::action(std::vector<std::string> args) { |
Mike Fiore |
1:e52ae6584f1c | 12 | if (args.size() == 1) |
Mike Fiore |
9:ff62b20f7000 | 13 | { |
Mike Fiore |
14:f9a77400b622 | 14 | CommandTerminal::Serial()->writef("DR%d - %s\r\n", CommandTerminal::Dot()->getTxDataRate(), CommandTerminal::Dot()->getDateRateDetails(CommandTerminal::Dot()->getTxDataRate()).c_str()); |
Mike Fiore |
9:ff62b20f7000 | 15 | } else if (args.size() == 2) { |
Mike Fiore |
9:ff62b20f7000 | 16 | std::string dr = mts::Text::toUpper(args[1]); |
Mike Fiore |
14:f9a77400b622 | 17 | |
Mike Fiore |
9:ff62b20f7000 | 18 | int datarate = -1; |
Mike Fiore |
1:e52ae6584f1c | 19 | uint8_t i; |
Mike Fiore |
1:e52ae6584f1c | 20 | |
Mike Fiore |
9:ff62b20f7000 | 21 | int res = sscanf(dr.c_str(), "%d", &datarate); |
Mike Fiore |
9:ff62b20f7000 | 22 | |
Mike Fiore |
9:ff62b20f7000 | 23 | if (res == 0) { |
Mike Fiore |
9:ff62b20f7000 | 24 | for (i = 0; i < 24; i++) { |
Mike Fiore |
9:ff62b20f7000 | 25 | if (mDot::DataRateStr(i).find(dr) != std::string::npos) { |
Mike Fiore |
9:ff62b20f7000 | 26 | datarate = i; |
Mike Fiore |
9:ff62b20f7000 | 27 | break; |
Mike Fiore |
9:ff62b20f7000 | 28 | } |
Mike Fiore |
9:ff62b20f7000 | 29 | } |
Mike Fiore |
9:ff62b20f7000 | 30 | } else { |
Mike Fiore |
9:ff62b20f7000 | 31 | if (datarate > 6) { |
Mike Fiore |
9:ff62b20f7000 | 32 | // Convert SF to DR |
Mike Fiore |
14:f9a77400b622 | 33 | |
Mike Fiore |
14:f9a77400b622 | 34 | if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) { |
Mike Fiore |
14:f9a77400b622 | 35 | datarate = 10 - datarate; |
Mike Fiore |
14:f9a77400b622 | 36 | } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { |
Mike Fiore |
9:ff62b20f7000 | 37 | datarate = 10 - datarate; |
Mike Fiore |
9:ff62b20f7000 | 38 | } else { |
Mike Fiore |
9:ff62b20f7000 | 39 | datarate = 12 - datarate; |
Mike Fiore |
9:ff62b20f7000 | 40 | } |
Mike Fiore |
1:e52ae6584f1c | 41 | } |
Mike Fiore |
1:e52ae6584f1c | 42 | } |
Mike Fiore |
1:e52ae6584f1c | 43 | |
Mike Fiore |
14:f9a77400b622 | 44 | if (CommandTerminal::Dot()->setTxDataRate(datarate) != mDot::MDOT_OK) { |
Mike Fiore |
14:f9a77400b622 | 45 | CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError()); |
Mike Fiore |
1:e52ae6584f1c | 46 | return 1; |
Mike Fiore |
1:e52ae6584f1c | 47 | } |
Mike Fiore |
1:e52ae6584f1c | 48 | } |
Mike Fiore |
1:e52ae6584f1c | 49 | |
Mike Fiore |
1:e52ae6584f1c | 50 | return 0; |
Mike Fiore |
1:e52ae6584f1c | 51 | } |
Mike Fiore |
1:e52ae6584f1c | 52 | |
Mike Fiore |
9:ff62b20f7000 | 53 | bool CmdTxDataRate::verify(std::vector<std::string> args) { |
Mike Fiore |
1:e52ae6584f1c | 54 | if (args.size() == 1) |
Mike Fiore |
1:e52ae6584f1c | 55 | return true; |
Mike Fiore |
1:e52ae6584f1c | 56 | |
Mike Fiore |
9:ff62b20f7000 | 57 | if (args.size() == 2) { |
Mike Fiore |
9:ff62b20f7000 | 58 | std::string dr = mts::Text::toUpper(args[1]); |
Mike Fiore |
9:ff62b20f7000 | 59 | |
Mike Fiore |
1:e52ae6584f1c | 60 | uint8_t i; |
Mike Fiore |
1:e52ae6584f1c | 61 | int datarate = -1; |
Mike Fiore |
9:ff62b20f7000 | 62 | |
Mike Fiore |
9:ff62b20f7000 | 63 | int res = sscanf(dr.c_str(), "%d", &datarate); |
Mike Fiore |
9:ff62b20f7000 | 64 | |
Mike Fiore |
9:ff62b20f7000 | 65 | if (res == 0) { |
Mike Fiore |
9:ff62b20f7000 | 66 | for (i = 0; i < 24; i++) { |
Mike Fiore |
9:ff62b20f7000 | 67 | |
Mike Fiore |
9:ff62b20f7000 | 68 | if (mDot::DataRateStr(i).find(dr) != std::string::npos) { |
Mike Fiore |
9:ff62b20f7000 | 69 | uint8_t _dr = i; |
Mike Fiore |
9:ff62b20f7000 | 70 | |
Mike Fiore |
9:ff62b20f7000 | 71 | if (_dr > 15) { |
Mike Fiore |
9:ff62b20f7000 | 72 | _dr = 12 + (mDot::SF_12 - _dr); |
Mike Fiore |
9:ff62b20f7000 | 73 | |
Mike Fiore |
14:f9a77400b622 | 74 | if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_EU868) { |
Mike Fiore |
9:ff62b20f7000 | 75 | if (_dr == mDot::SF_7H) { |
Mike Fiore |
14:f9a77400b622 | 76 | _dr = mDot::DR6; |
Mike Fiore |
14:f9a77400b622 | 77 | } else if (_dr == mDot::SF_FSK) { |
Mike Fiore |
14:f9a77400b622 | 78 | _dr = mDot::DR7; |
Mike Fiore |
9:ff62b20f7000 | 79 | } else { |
Mike Fiore |
9:ff62b20f7000 | 80 | _dr = 12 - _dr; |
Mike Fiore |
9:ff62b20f7000 | 81 | } |
Mike Fiore |
14:f9a77400b622 | 82 | } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { |
Mike Fiore |
14:f9a77400b622 | 83 | _dr = 10 - _dr; |
Mike Fiore |
9:ff62b20f7000 | 84 | } else { |
Mike Fiore |
9:ff62b20f7000 | 85 | _dr = 10 - _dr; |
Mike Fiore |
9:ff62b20f7000 | 86 | } |
Mike Fiore |
9:ff62b20f7000 | 87 | } |
Mike Fiore |
9:ff62b20f7000 | 88 | |
Mike Fiore |
9:ff62b20f7000 | 89 | datarate = _dr; |
Mike Fiore |
9:ff62b20f7000 | 90 | break; |
Mike Fiore |
9:ff62b20f7000 | 91 | } |
Mike Fiore |
9:ff62b20f7000 | 92 | } |
Mike Fiore |
9:ff62b20f7000 | 93 | } else { |
Mike Fiore |
14:f9a77400b622 | 94 | |
Mike Fiore |
14:f9a77400b622 | 95 | if ((CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) && datarate > 10) { |
Mike Fiore |
9:ff62b20f7000 | 96 | datarate = -1; |
Mike Fiore |
14:f9a77400b622 | 97 | } else if (datarate > 12) { |
Mike Fiore |
9:ff62b20f7000 | 98 | datarate = -1; |
Mike Fiore |
9:ff62b20f7000 | 99 | } else if (datarate > 6) { |
Mike Fiore |
9:ff62b20f7000 | 100 | // Convert SF to DR |
Mike Fiore |
14:f9a77400b622 | 101 | if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) { |
Mike Fiore |
14:f9a77400b622 | 102 | datarate = 10 - datarate; |
Mike Fiore |
14:f9a77400b622 | 103 | } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { |
Mike Fiore |
9:ff62b20f7000 | 104 | datarate = 10 - datarate; |
Mike Fiore |
9:ff62b20f7000 | 105 | } else { |
Mike Fiore |
9:ff62b20f7000 | 106 | datarate = 12 - datarate; |
Mike Fiore |
9:ff62b20f7000 | 107 | } |
Mike Fiore |
1:e52ae6584f1c | 108 | } |
Mike Fiore |
1:e52ae6584f1c | 109 | } |
Mike Fiore |
1:e52ae6584f1c | 110 | |
Mike Fiore |
14:f9a77400b622 | 111 | if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_US915) { |
Mike Fiore |
9:ff62b20f7000 | 112 | // DR8-13 used for P2P modes |
Mike Fiore |
9:ff62b20f7000 | 113 | if (datarate < 0 || datarate > 13 || (datarate >= 5 && datarate <= 7)) { |
Mike Fiore |
14:f9a77400b622 | 114 | CommandTerminal::setErrorMessage("Invalid data rate, expects (7-10|DR0-DR4|DR8-DR13)"); |
Mike Fiore |
14:f9a77400b622 | 115 | return false; |
Mike Fiore |
14:f9a77400b622 | 116 | } |
Mike Fiore |
14:f9a77400b622 | 117 | } else if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_AU915) { |
Mike Fiore |
14:f9a77400b622 | 118 | // DR8-13 used for P2P modes |
Mike Fiore |
14:f9a77400b622 | 119 | if (datarate < 0 || datarate > 13 || (datarate >= 5 && datarate <= 7)) { |
Mike Fiore |
14:f9a77400b622 | 120 | CommandTerminal::setErrorMessage("Invalid data rate, expects (7-10|DR0-DR4|DR8-DR13)"); |
Mike Fiore |
9:ff62b20f7000 | 121 | return false; |
Mike Fiore |
9:ff62b20f7000 | 122 | } |
Mike Fiore |
9:ff62b20f7000 | 123 | } else { |
Mike Fiore |
9:ff62b20f7000 | 124 | if (datarate < 0 || datarate > 7) { |
Mike Fiore |
14:f9a77400b622 | 125 | CommandTerminal::setErrorMessage("Invalid data rate, expects (7-12|DR0-DR7)"); |
Mike Fiore |
1:e52ae6584f1c | 126 | return false; |
Mike Fiore |
1:e52ae6584f1c | 127 | } |
Mike Fiore |
1:e52ae6584f1c | 128 | } |
Mike Fiore |
1:e52ae6584f1c | 129 | |
Mike Fiore |
1:e52ae6584f1c | 130 | return true; |
Mike Fiore |
1:e52ae6584f1c | 131 | } |
Mike Fiore |
1:e52ae6584f1c | 132 | |
Mike Fiore |
14:f9a77400b622 | 133 | CommandTerminal::setErrorMessage("Invalid arguments"); |
Mike Fiore |
1:e52ae6584f1c | 134 | return false; |
Mike Fiore |
1:e52ae6584f1c | 135 | } |