Updated to libmDot 1.0.8-1

Dependencies:   DOGS102 GpsParser ISL29011 MMA845x MPL3115A2 MTS-Serial NCP5623B libmDot mbed-rtos mbed

Fork of MTDOT-BOX-EVB-Factory-Firmware by MultiTech

Committer:
jreiss
Date:
Wed Jul 13 19:14:04 2016 +0000
Revision:
6:ab581c4260e7
Parent:
1:71125aa00e33
Use DR enum values instead of SF values

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 1:71125aa00e33 1 /* Copyright (c) <2016> <MultiTech Systems>, MIT License
Mike Fiore 1:71125aa00e33 2 *
Mike Fiore 1:71125aa00e33 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Mike Fiore 1:71125aa00e33 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
Mike Fiore 1:71125aa00e33 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
Mike Fiore 1:71125aa00e33 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
Mike Fiore 1:71125aa00e33 7 * furnished to do so, subject to the following conditions:
Mike Fiore 1:71125aa00e33 8 *
Mike Fiore 1:71125aa00e33 9 * The above copyright notice and this permission notice shall be included in all copies or
Mike Fiore 1:71125aa00e33 10 * substantial portions of the Software.
Mike Fiore 1:71125aa00e33 11 *
Mike Fiore 1:71125aa00e33 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Mike Fiore 1:71125aa00e33 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Mike Fiore 1:71125aa00e33 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Mike Fiore 1:71125aa00e33 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Mike Fiore 1:71125aa00e33 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Mike Fiore 1:71125aa00e33 17 */
Mike Fiore 1:71125aa00e33 18 #include "CmdTxDataRate.h"
jreiss 6:ab581c4260e7 19 #include "MTSText.h"
jreiss 6:ab581c4260e7 20 #include "MTSLog.h"
Mike Fiore 1:71125aa00e33 21
jreiss 6:ab581c4260e7 22 CmdTxDataRate::CmdTxDataRate(mDot* dot, mts::MTSSerial& serial)
jreiss 6:ab581c4260e7 23 :
jreiss 6:ab581c4260e7 24 Command(dot, "Tx Data Rate", "AT+TXDR", "Set the Tx data rate for all channels"),
jreiss 6:ab581c4260e7 25 _serial(serial)
Mike Fiore 1:71125aa00e33 26 {
Mike Fiore 1:71125aa00e33 27 _help = std::string(text()) + ": " + std::string(desc());
Mike Fiore 1:71125aa00e33 28
Mike Fiore 1:71125aa00e33 29 if (_dot->getFrequencyBand() == mDot::FB_915)
jreiss 6:ab581c4260e7 30 _usage = "(7-10|DR0-DR4|DR8-DR13)";
Mike Fiore 1:71125aa00e33 31 else
jreiss 6:ab581c4260e7 32 _usage = "(7-12|DR0-DR7)";
Mike Fiore 1:71125aa00e33 33 _queryable = true;
Mike Fiore 1:71125aa00e33 34 }
Mike Fiore 1:71125aa00e33 35
jreiss 6:ab581c4260e7 36 uint32_t CmdTxDataRate::action(std::vector<std::string> args) {
Mike Fiore 1:71125aa00e33 37 if (args.size() == 1)
jreiss 6:ab581c4260e7 38 {
Mike Fiore 1:71125aa00e33 39 if (_dot->getVerbose())
Mike Fiore 1:71125aa00e33 40 _serial.writef("Tx Data Rate: ");
Mike Fiore 1:71125aa00e33 41
jreiss 6:ab581c4260e7 42 _serial.writef("DR%d - %s\r\n", _dot->getTxDataRate(), _dot->getDateRateDetails(_dot->getTxDataRate()).c_str());
jreiss 6:ab581c4260e7 43 } else if (args.size() == 2) {
jreiss 6:ab581c4260e7 44 std::string dr = mts::Text::toUpper(args[1]);
Mike Fiore 1:71125aa00e33 45 int32_t code;
jreiss 6:ab581c4260e7 46 int datarate = -1;
Mike Fiore 1:71125aa00e33 47 uint8_t i;
Mike Fiore 1:71125aa00e33 48
jreiss 6:ab581c4260e7 49 int res = sscanf(dr.c_str(), "%d", &datarate);
jreiss 6:ab581c4260e7 50
jreiss 6:ab581c4260e7 51 if (res == 0) {
jreiss 6:ab581c4260e7 52 for (i = 0; i < 24; i++) {
jreiss 6:ab581c4260e7 53 if (mDot::DataRateStr(i).find(dr) != std::string::npos) {
jreiss 6:ab581c4260e7 54 datarate = i;
jreiss 6:ab581c4260e7 55 break;
jreiss 6:ab581c4260e7 56 }
jreiss 6:ab581c4260e7 57 }
jreiss 6:ab581c4260e7 58 } else {
jreiss 6:ab581c4260e7 59 if (datarate > 6) {
jreiss 6:ab581c4260e7 60 // Convert SF to DR
jreiss 6:ab581c4260e7 61 if (_dot->getFrequencyBand() == mDot::FB_915) {
jreiss 6:ab581c4260e7 62 datarate = 10 - datarate;
jreiss 6:ab581c4260e7 63 } else {
jreiss 6:ab581c4260e7 64 datarate = 12 - datarate;
jreiss 6:ab581c4260e7 65 }
Mike Fiore 1:71125aa00e33 66 }
Mike Fiore 1:71125aa00e33 67 }
Mike Fiore 1:71125aa00e33 68
jreiss 6:ab581c4260e7 69 if ((code = _dot->setTxDataRate(datarate)) != mDot::MDOT_OK) {
jreiss 6:ab581c4260e7 70 setErrorMessage(_dot->getLastError());
Mike Fiore 1:71125aa00e33 71 return 1;
Mike Fiore 1:71125aa00e33 72 }
Mike Fiore 1:71125aa00e33 73 }
Mike Fiore 1:71125aa00e33 74
Mike Fiore 1:71125aa00e33 75 return 0;
Mike Fiore 1:71125aa00e33 76 }
Mike Fiore 1:71125aa00e33 77
jreiss 6:ab581c4260e7 78 bool CmdTxDataRate::verify(std::vector<std::string> args) {
Mike Fiore 1:71125aa00e33 79 if (args.size() == 1)
Mike Fiore 1:71125aa00e33 80 return true;
Mike Fiore 1:71125aa00e33 81
jreiss 6:ab581c4260e7 82 if (args.size() == 2) {
jreiss 6:ab581c4260e7 83 std::string dr = mts::Text::toUpper(args[1]);
jreiss 6:ab581c4260e7 84
Mike Fiore 1:71125aa00e33 85 uint8_t i;
Mike Fiore 1:71125aa00e33 86 int datarate = -1;
jreiss 6:ab581c4260e7 87
jreiss 6:ab581c4260e7 88 int res = sscanf(dr.c_str(), "%d", &datarate);
jreiss 6:ab581c4260e7 89
jreiss 6:ab581c4260e7 90 if (res == 0) {
jreiss 6:ab581c4260e7 91 for (i = 0; i < 24; i++) {
jreiss 6:ab581c4260e7 92
jreiss 6:ab581c4260e7 93 if (mDot::DataRateStr(i).find(dr) != std::string::npos) {
jreiss 6:ab581c4260e7 94 uint8_t _dr = i;
jreiss 6:ab581c4260e7 95
jreiss 6:ab581c4260e7 96 if (_dr > 15) {
jreiss 6:ab581c4260e7 97 _dr = 12 + (mDot::SF_12 - _dr);
jreiss 6:ab581c4260e7 98
jreiss 6:ab581c4260e7 99 if (_dot->getFrequencyBand() == mDot::FB_868) {
jreiss 6:ab581c4260e7 100 if (_dr == mDot::SF_7H) {
jreiss 6:ab581c4260e7 101 _dr = mDot::DR6;
jreiss 6:ab581c4260e7 102 } else if (_dr == mDot::SF_FSK) {
jreiss 6:ab581c4260e7 103 _dr = mDot::DR7;
jreiss 6:ab581c4260e7 104 } else {
jreiss 6:ab581c4260e7 105 _dr = 12 - _dr;
jreiss 6:ab581c4260e7 106 }
jreiss 6:ab581c4260e7 107 } else {
jreiss 6:ab581c4260e7 108
jreiss 6:ab581c4260e7 109 _dr = 10 - _dr;
jreiss 6:ab581c4260e7 110 }
jreiss 6:ab581c4260e7 111 }
jreiss 6:ab581c4260e7 112
jreiss 6:ab581c4260e7 113 datarate = _dr;
jreiss 6:ab581c4260e7 114 break;
jreiss 6:ab581c4260e7 115 }
jreiss 6:ab581c4260e7 116 }
jreiss 6:ab581c4260e7 117 } else {
jreiss 6:ab581c4260e7 118 if (_dot->getFrequencyBand() == mDot::FB_915 && datarate > 10) {
jreiss 6:ab581c4260e7 119 datarate = -1;
jreiss 6:ab581c4260e7 120 } else if (_dot->getFrequencyBand() == mDot::FB_868 && datarate > 12) {
jreiss 6:ab581c4260e7 121 datarate = -1;
jreiss 6:ab581c4260e7 122 } else if (datarate > 6) {
jreiss 6:ab581c4260e7 123 // Convert SF to DR
jreiss 6:ab581c4260e7 124 if (_dot->getFrequencyBand() == mDot::FB_915) {
jreiss 6:ab581c4260e7 125 datarate = 10 - datarate;
jreiss 6:ab581c4260e7 126 } else {
jreiss 6:ab581c4260e7 127 datarate = 12 - datarate;
jreiss 6:ab581c4260e7 128 }
Mike Fiore 1:71125aa00e33 129 }
Mike Fiore 1:71125aa00e33 130 }
Mike Fiore 1:71125aa00e33 131
Mike Fiore 1:71125aa00e33 132 if (_dot->getFrequencyBand() == mDot::FB_915) {
jreiss 6:ab581c4260e7 133 // DR8-13 used for P2P modes
jreiss 6:ab581c4260e7 134 if (datarate < 0 || datarate > 13 || (datarate >= 5 && datarate <= 7)) {
jreiss 6:ab581c4260e7 135 setErrorMessage("Invalid data rate, expects (7-10|DR0-DR4|DR8-DR13)");
jreiss 6:ab581c4260e7 136 return false;
jreiss 6:ab581c4260e7 137 }
jreiss 6:ab581c4260e7 138 } else {
jreiss 6:ab581c4260e7 139 if (datarate < 0 || datarate > 7) {
jreiss 6:ab581c4260e7 140 setErrorMessage("Invalid data rate, expects (7-12|DR0-DR7)");
Mike Fiore 1:71125aa00e33 141 return false;
Mike Fiore 1:71125aa00e33 142 }
Mike Fiore 1:71125aa00e33 143 }
Mike Fiore 1:71125aa00e33 144
Mike Fiore 1:71125aa00e33 145 return true;
Mike Fiore 1:71125aa00e33 146 }
Mike Fiore 1:71125aa00e33 147
Mike Fiore 1:71125aa00e33 148 setErrorMessage("Invalid arguments");
Mike Fiore 1:71125aa00e33 149 return false;
Mike Fiore 1:71125aa00e33 150 }