summaryrefslogtreecommitdiff
path: root/Mode
diff options
context:
space:
mode:
authorJason Reiss <jreiss@multitech.com>2016-09-21 13:52:59 -0500
committerJason Reiss <jreiss@multitech.com>2016-09-21 13:52:59 -0500
commit04b6e95c2931eadee93a6c1fe982f1658a60e1b7 (patch)
tree84406fd9a31a44d78422003249572f2b104be850 /Mode
parentbe0d56b806ce76cef1d5bd5b6795391c2049b8b4 (diff)
parent692b74778f6b95cf0c668dfdb85f39035e113baa (diff)
downloadmtdot-box-evb-factory-firmware-04b6e95c2931eadee93a6c1fe982f1658a60e1b7.tar.gz
mtdot-box-evb-factory-firmware-04b6e95c2931eadee93a6c1fe982f1658a60e1b7.tar.bz2
mtdot-box-evb-factory-firmware-04b6e95c2931eadee93a6c1fe982f1658a60e1b7.zip
Merge branch 'Semtech'
Conflicts: .gitmodules Mode/ModeJoin.cpp main.cpp Add AU915
Diffstat (limited to 'Mode')
-rw-r--r--Mode/Mode.cpp6
-rw-r--r--Mode/ModeConfig.cpp2
-rw-r--r--Mode/ModeDemo.cpp6
-rw-r--r--Mode/ModeGps.cpp6
-rw-r--r--Mode/ModeJoin.cpp2
-rw-r--r--Mode/ModeSemtech.cpp339
-rw-r--r--Mode/ModeSemtech.h76
-rw-r--r--Mode/ModeSingle.cpp35
-rw-r--r--Mode/ModeSweep.cpp32
9 files changed, 450 insertions, 54 deletions
diff --git a/Mode/Mode.cpp b/Mode/Mode.cpp
index 389bf7f..462e145 100644
--- a/Mode/Mode.cpp
+++ b/Mode/Mode.cpp
@@ -49,7 +49,7 @@ Mode::Mode(DOGS102* lcd, ButtonHandler* buttons, mDot* dot, LoRaHandler* lora, G
_index(0),
_band(_dot->getFrequencyBand()),
_sub_band(_dot->getFrequencySubBand()),
- _data_rate(mDot::SF_7),
+ _data_rate(mDot::DR0),
_power(2),
_next_tx(0),
_send_data(false),
@@ -129,7 +129,7 @@ bool Mode::appendDataFile(const DataItem& data) {
(data.gps_lock) ? alt_buf : "",
(data.gps_lock) ? time_buf : "",
data.status ? stats_buf : ",,,",
- _dot->DataRateStr(data.data_rate).substr(3).c_str(),
+ _dot->DataRateStr(data.data_rate).substr(2).c_str(),
data.power);
if (size < 0) {
@@ -279,7 +279,7 @@ std::vector<uint8_t> Mode::formatSurveyData(DataItem& data) {
send_data.push_back((data.link.down.snr/10) & 0xFF);
// collect GPS data if GPS device detected
- if (_gps->gpsDetected() && ((_data_rate != mDot::SF_10) || (_band == mDot::FB_868))){
+ if (_gps->gpsDetected() && ((_data_rate != mDot::SF_10) || (_band == mDot::FB_EU868))){
send_data.push_back(0x19); // key for GPS Lock Status
satfix = (_gps->getNumSatellites() << 4 ) | (_gps->getFixStatus() & 0x0F );
send_data.push_back(satfix);
diff --git a/Mode/ModeConfig.cpp b/Mode/ModeConfig.cpp
index 56ba1a0..bd1967d 100644
--- a/Mode/ModeConfig.cpp
+++ b/Mode/ModeConfig.cpp
@@ -75,6 +75,8 @@ ModeConfig::ModeConfig(DOGS102* lcd, ButtonHandler* buttons, mDot* dot, LoRaHand
#if MTS_RADIO_DEBUG_COMMANDS
addCommand(new CmdWriteProtectedConfig(_dot));
+ addCommand(new CmdSendContinuous(_dot));
+ addCommand(new CmdTxFrequency(_dot));
#endif
}
diff --git a/Mode/ModeDemo.cpp b/Mode/ModeDemo.cpp
index 44732c1..4add135 100644
--- a/Mode/ModeDemo.cpp
+++ b/Mode/ModeDemo.cpp
@@ -41,9 +41,9 @@ bool ModeDemo::start() {
_initial_data_rate = _dot->getTxDataRate();
// use configured data rate and power if possible
- if (_band == mDot::FB_915 && _initial_data_rate == mDot::SF_10) {
- logInfo("using SF_9 instead of SF_10 - SF_10 max packet size is too small for data");
- _dot->setTxDataRate(mDot::SF_9);
+ if (_band == mDot::FB_915 && _initial_data_rate == mDot::DR0) {
+ logInfo("using DR1 instead of DR0 - DR0 max packet size is too small for data");
+ _dot->setTxDataRate(mDot::DR1);
}
_state = show_help;
diff --git a/Mode/ModeGps.cpp b/Mode/ModeGps.cpp
index d97e77e..47053cb 100644
--- a/Mode/ModeGps.cpp
+++ b/Mode/ModeGps.cpp
@@ -55,7 +55,7 @@ void ModeGps::init(){
_help.display();
osDelay(2000);
- if(_band == mDot::FB_868){
+ if(_band == mDot::FB_EU868){
_sem.display(_link_check, _snr, _rssi, _power, _sub_band, _padding, _data_rate);
_sem.initial();
_state = PARAMETERS;
@@ -86,7 +86,7 @@ void ModeGps::changeDataRate(){
void ModeGps::changeParameter(){
_parameter++;
- if(_band==mDot::FB_868&&_parameter==FSB){
+ if(_band == mDot::FB_EU868 && _parameter == FSB){
_parameter++;
}
if(_parameter>INTERVAL){
@@ -239,7 +239,7 @@ void ModeGps::updateScreen(){
void ModeGps::send(){
_state = SENDING;
_send_timer.stop();
- if(_band==mDot::FB_868) {
+ if(_band == mDot::FB_EU868) {
while(_dot->getNextTxMs()>0) {
_sem.updateNextCh((int)(_dot->getNextTxMs()/1000));
osDelay(250);
diff --git a/Mode/ModeJoin.cpp b/Mode/ModeJoin.cpp
index 239eadb..3a86dd9 100644
--- a/Mode/ModeJoin.cpp
+++ b/Mode/ModeJoin.cpp
@@ -126,4 +126,4 @@ void ModeJoin::display() {
_join.updateRate(_dot->getTxDataRate());
_join.updatePower(_power);
_join.updateAttempt(_lora->getJoinAttempts());
-} \ No newline at end of file
+}
diff --git a/Mode/ModeSemtech.cpp b/Mode/ModeSemtech.cpp
new file mode 100644
index 0000000..5c2d180
--- /dev/null
+++ b/Mode/ModeSemtech.cpp
@@ -0,0 +1,339 @@
+/* Copyright (c) <2016> <MultiTech Systems>, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "ModeSemtech.h"
+#include "MTSLog.h"
+#include "rtos.h"
+#include "mbed.h"
+#include <sstream>
+//this is exactly what it sounds like
+#define TWO_TO_THE_THIRTY_ONE_MINUS_ONE 2147483647
+#define PACKETSIZE 11
+
+
+
+
+ModeSemtech::ModeSemtech(DOGS102* lcd, ButtonHandler* buttons, mDot* dot, LoRaHandler* lora, GPSPARSER* gps, SensorHandler* sensors)
+ : Mode(lcd, buttons, dot, lora, gps, sensors),
+ _help(lcd),
+ _sem(lcd,_band),
+ _sem_join(lcd,_band)
+{}
+
+string ModeSemtech::intToString(int num)
+{
+ return static_cast<ostringstream*>(&(ostringstream() << num))->str();
+}
+
+void ModeSemtech::init()
+{
+ //resets all parameters when re-entering mode
+ _interval = 5;
+ _padding = 0;
+ _power = 20;
+ _band = _dot->getFrequencyBand();
+ _parameter = POWER;
+ _drAll=false;
+ _link_check = false;
+ _GPS = false;
+ _sub_band = _dot->getFrequencySubBand();
+ _data_rate = mDot::DR4;
+ _max_padding = _dot->getMaxPacketLength()-PACKETSIZE;
+ _Sw2 = "Power";
+ _Sw1 = intToString(_power);
+ _help.display();
+ osDelay(2000);
+ if(_band==mDot::FB_EU868){
+ _sem.display(_link_check, _snr, _rssi, _power, _sub_band, _padding, _data_rate);
+ _sem.initial();
+ _state = PARAMETERS;
+ _send_timer.start();
+ }
+ else { _state = BAND_CHANGE;
+ changeBand();
+ }
+}
+
+void ModeSemtech::drIncrement()
+{
+ _data_rate++;
+ if (_data_rate > mDot::DR5) {
+ _drAll = true;
+ _data_rate=0;
+ }
+ _dot->setTxDataRate(_data_rate);
+ logInfo("new data rate %s, POWER %lu", mDot::DataRateStr(_data_rate).c_str(), _power);
+ _max_padding = _dot->getMaxPacketLength()-PACKETSIZE;
+}
+
+void ModeSemtech::changeDataRate()
+{
+ if(_drAll) {
+ if(_band == mDot::FB_EU868) _data_rate = -1;
+ else _data_rate = mDot::DR1;
+ _drAll = false;
+ }
+ drIncrement();
+}
+
+void ModeSemtech::changeParameter()
+{
+ _parameter++;
+ if(_band==mDot::FB_EU868&&_parameter==FSB)_parameter++;
+ if(_parameter>INTERVAL)_parameter=0;
+ switch(_parameter) {
+ case DATA_RATE:
+ _Sw2 = "Data Rate";
+ _Sw1 = intToString(_data_rate);
+ if(_drAll)_Sw1 = "All";
+ break;
+ case FSB:
+ _Sw2 = "FSB";
+ _Sw1 = intToString(_sub_band);
+ break;
+ case PADDING:
+ _Sw2 = "Padding";
+ _Sw1 = intToString(_padding);
+ break;
+ case POWER:
+ _Sw2 = "Power";
+ _Sw1 = intToString(_power);
+ break;
+ case INTERVAL:
+ _Sw2 = "Interval";
+ _Sw1 = intToString(_interval);
+ break;
+ default:
+ break;
+ }
+}
+
+void ModeSemtech::editParameter()
+{
+ switch(_parameter) {
+ case POWER:
+ if(_power<20)_power+=3;
+ else _power = 2;
+ _Sw1 = intToString(_power);
+ _dot->setTxPower(_power);
+ break;
+
+ case DATA_RATE:
+ changeDataRate();
+ _Sw1 = intToString(_data_rate);
+ if(_drAll)_Sw1="All";
+ break;
+
+ case FSB:
+ _send_timer.stop();
+ _send_timer.reset();
+ _state = BAND_CHANGE;
+ _dot->resetNetworkSession();
+ _lora->resetActivityLed();
+ changeBand();
+ break;
+
+ case PADDING:
+ if(_padding<_max_padding)_padding +=10 - (_padding%10);
+ else _padding = 0;
+ if(_padding>_max_padding)_padding = _max_padding;
+ _Sw1 = intToString(_padding);
+ break;
+
+ default:
+ if(_interval<60)_interval += 5;
+ else _interval = 5;
+ _Sw1 = intToString(_interval);
+ break;
+ }
+}
+
+void ModeSemtech::formatData()
+{
+ _send_data.clear();
+ uint32_t lat = 0;
+ uint32_t lng = 0;
+ _temp_C+=0.5;
+
+ if(_GPS) {
+ if(_latitude.degrees<0) lat = ~(int)((_latitude.degrees - ((double)_latitude.minutes/60.0) - ((double)_latitude.seconds/600000.0))*((double)-TWO_TO_THE_THIRTY_ONE_MINUS_ONE/90.0)+1.5);
+ else lat = (int)((_latitude.degrees + ((double)_latitude.minutes/60.0) + ((double)_latitude.seconds/600000.0))*((double)TWO_TO_THE_THIRTY_ONE_MINUS_ONE/90.0)+0.5);
+ if(_longitude.degrees<0) lng = ~(int)((_longitude.degrees - ((double)_longitude.minutes/60.0) - ((double)_longitude.seconds/600000.0))*((double)-TWO_TO_THE_THIRTY_ONE_MINUS_ONE/180.0)+1.5);
+ else lng = (int)((_longitude.degrees + ((double)_longitude.minutes/60.0) + ((double)_longitude.seconds/600000.0))*((double)TWO_TO_THE_THIRTY_ONE_MINUS_ONE/180.0)+0.5);
+ }
+ _send_data.push_back(0);
+ _send_data.push_back((int8_t) _temp_C);
+ _send_data.push_back(0);
+ for(int i=24; i>=0; i-=8)_send_data.push_back((lat>>i)&0xFF);
+ for(int i=24; i>=0; i-=8)_send_data.push_back((lng>>i)&0xFF);
+ for(int i=0; i<(_padding>_max_padding ? _max_padding : _padding); i++) _send_data.push_back(0);
+}
+
+void ModeSemtech::setBand()
+{
+ _sub_band++;
+ if(_sub_band > mDot::FSB_8) _sub_band = mDot::FSB_ALL;
+ _dot->setFrequencySubBand(_sub_band);
+}
+
+void ModeSemtech::changeBand()
+{
+ _sem_join.display();
+ _sem_join.updatePower(_power);
+ _sem_join.updateFsb(_sub_band);
+ _sem_join.updateId(_dot->getNetworkName());
+ _sem_join.updateRate(intToString(_data_rate));
+ _sem_join.updateKey(_dot->getNetworkPassphrase());
+}
+
+void ModeSemtech::updateScreen()
+{
+ _temp_C = _sensors->getTemp(SensorHandler::CELSIUS);
+ if(_gps->getLockStatus()&& _gps_available) {
+ _GPS = true;
+ _latitude = _gps->getLatitude();
+ _longitude = _gps->getLongitude();
+ _time = _gps->getTimestamp();
+ } else _GPS = false;
+ _sem.updateStats( _GPS, _longitude, _latitude, _time, _temp_C);
+ _sem.updateSw1(_Sw1,_Sw2,_data_rate,_power,_padding);
+ _sem.updateSw2(_Sw2);
+}
+
+void ModeSemtech::send()
+{
+ _state = SENDING;
+ _send_timer.stop();
+ if(_band==mDot::FB_EU868) {
+ while(_dot->getNextTxMs()>0) {
+ _sem.updateNextCh((int)(_dot->getNextTxMs()/1000));
+ osDelay(250);
+ }
+ }
+ formatData();
+ _sem.sending();
+ _send_timer.reset();
+ _send_timer.start();
+ _lora->send(_send_data);
+ osDelay(500);
+}
+
+bool ModeSemtech::start()
+{
+ init();
+ _button_timer.start();
+ ButtonHandler::ButtonEvent be;
+ osSignalClear(_main_id, buttonSignal | loraSignal);
+
+ if(_band == mDot::FB_US915 || _band == mDot::FB_AU915)
+ _join = new ModeJoin(_lcd, _buttons, _dot, _lora, _gps, _sensors);
+
+ while (true) {
+ if(_state==PARAMETERS)updateScreen();
+
+ osEvent e = Thread::signal_wait(0, 250);
+ if (e.status == osEventSignal) {
+ if (e.value.signals & buttonSignal) {
+ _button_timer.reset();
+ be = _buttons->getButtonEvent();
+
+ switch(be) {
+ case ButtonHandler::sw1_press:
+ switch(_state) {
+ case BAND_CHANGE:
+ setBand();
+ changeBand();
+ break;
+
+ case SENDING:
+ break;
+
+ case PARAMETERS:
+ editParameter();
+ break;
+ }
+ break;
+ case ButtonHandler::sw2_press:
+ switch(_state) {
+ case BAND_CHANGE:
+ if(_join->start()){
+ _state = PARAMETERS;
+ _send_timer.start();
+ _sem.display(_link_check, _snr, _rssi, _power, _sub_band, _padding, DATA_RATE);
+ _dot->setTxDataRate(_data_rate);
+ } else changeBand();
+ break;
+
+ case SENDING:
+ break;
+
+ case PARAMETERS:
+ changeParameter();
+ break;
+ }
+ break;
+ case ButtonHandler::sw1_hold:
+ _send_timer.stop();
+ _send_timer.reset();
+ return true;
+
+ default:
+ break;
+ }
+
+ }
+ }
+ if (e.value.signals & loraSignal) {
+ _ls = _lora->getStatus();
+ switch (_ls) {
+
+ case LoRaHandler::send_success:
+ _sem.sendResult("Send Sucess!");
+ _link_check = true;
+ _snr = _dot->getSnrStats();
+ _rssi = _dot->getRssiStats();
+ osDelay(500);
+ _button_timer.reset();
+ _state = PARAMETERS;
+ _sem.display(_link_check, _snr, _rssi, _power, _sub_band, _padding, _data_rate);
+ if(_drAll)drIncrement();
+ break;
+
+ case LoRaHandler::send_failure:
+ _sem.sendResult("Send Failed.");
+ _link_check = false;
+ osDelay(500);
+ _button_timer.reset();
+ _state = PARAMETERS;
+ _sem.display(_link_check, _snr, _rssi, _power, _sub_band, _padding, _data_rate);
+ if(_drAll)drIncrement();
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+ if(_send_timer.read_ms()>_interval*1000&&_button_timer.read_ms()>3000) send();
+
+ }
+}
+
+
+
diff --git a/Mode/ModeSemtech.h b/Mode/ModeSemtech.h
new file mode 100644
index 0000000..4812ec4
--- /dev/null
+++ b/Mode/ModeSemtech.h
@@ -0,0 +1,76 @@
+/* Copyright (c) <2016> <MultiTech Systems>, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef __MODESEMTECH_H__
+#define __MODESEMTECH_H__
+
+#include "Mode.h"
+#include "ModeJoin.h"
+#include "LayoutHelp.h"
+#include "LayoutSemtech.h"
+#include "LayoutSemtechJoin.h"
+
+class ModeSemtech : public Mode
+{
+public:
+ ModeSemtech(DOGS102* lcd, ButtonHandler* buttons, mDot* dot, LoRaHandler* lora, GPSPARSER* gps, SensorHandler* sensors);
+ ~ModeSemtech();
+
+ bool start();
+
+private:
+ enum {DATA_RATE, FSB, PADDING, POWER, INTERVAL};
+ enum {BAND_CHANGE, SENDING, PARAMETERS};
+
+ LayoutHelp _help;
+ LayoutSemtech _sem;
+ LayoutSemtechJoin _sem_join;
+
+ ModeJoin* _join;
+
+ Timer _send_timer, _button_timer;
+
+ float _temp_C;
+ std::vector<uint8_t> _send_data;
+ uint8_t _parameter, _padding, _interval,_max_padding, _band;
+ bool _drAll, _link_check, _GPS;
+ string _Sw1, _Sw2;
+
+ struct tm _time;
+ mDot::snr_stats _snr;
+ mDot::rssi_stats _rssi;
+ GPSPARSER::latitude _latitude;
+ GPSPARSER::longitude _longitude;
+
+ void init();
+ void send();
+ void setBand();
+ void sendData();
+ void formatData();
+ void changeBand();
+ void drIncrement();
+ void updateScreen();
+ void editParameter();
+ void changeDataRate();
+ void changeParameter();
+ string intToString(int num);
+
+};
+
+#endif
+
diff --git a/Mode/ModeSingle.cpp b/Mode/ModeSingle.cpp
index 347f636..6cc3f4b 100644
--- a/Mode/ModeSingle.cpp
+++ b/Mode/ModeSingle.cpp
@@ -176,8 +176,8 @@ bool ModeSingle::start() {
_state = failure;
_failure.display();
_failure.updateId(_index);
- // mDot::DataRateStr returns format SF_XX - we only want to display the XX part
- _failure.updateRate(_dot->DataRateStr(_data_rate).substr(3));
+ // mDot::DataRateStr returns format DRXX - we only want to display the XX part
+ _failure.updateRate(_dot->DataRateStr(_data_rate).substr(2));
updateData(_data, single, false);
appendDataFile(_data);
_failure.updatePower(_power);
@@ -291,7 +291,7 @@ void ModeSingle::displaySuccess() {
_success.display();
_success.updateId(_index);
// mDot::DataRateStr returns format SF_XX - we only want to display the XX part
- _success.updateRate(_dot->DataRateStr(_data_rate).substr(3));
+ _success.updateRate(_dot->DataRateStr(_data_rate).substr(2));
_success.updatePower(_power);
_success.updateStats(_link_check_result);
if (_gps_available && _gps->getLockStatus()) {
@@ -312,7 +312,7 @@ std::string ModeSingle::formatRatePower() {
size_t size;
msg += "DR=";
- msg += _dot->DataRateStr(_data_rate).substr(3);
+ msg += _dot->DataRateStr(_data_rate).substr(2);
msg += " P=";
size = snprintf(buf, sizeof(buf), "%u", _power);
msg.append(buf, size);
@@ -323,28 +323,11 @@ std::string ModeSingle::formatRatePower() {
void ModeSingle::incrementRatePower() {
if (_power == 20) {
_power = 2;
- switch (_data_rate) {
- case mDot::SF_7:
- _data_rate = mDot::SF_8;
- break;
- case mDot::SF_8:
- _data_rate = mDot::SF_9;
- break;
- case mDot::SF_9:
- _data_rate = mDot::SF_10;
- break;
- case mDot::SF_10:
- if (_band == mDot::FB_915)
- _data_rate = mDot::SF_7;
- else
- _data_rate = mDot::SF_11;
- break;
- case mDot::SF_11:
- _data_rate = mDot::SF_12;
- break;
- case mDot::SF_12:
- _data_rate = mDot::SF_7;
- break;
+ _data_rate++;
+ if ((_band == mDot::FB_US915 && _data_rate > mDot::DR4) ||
+ (_band == mDot::FB_AU915 && _data_rate > mDot::DR4) ||
+ (_band == mDot::FB_EU868 && _data_rate > mDot::DR7)) {
+ _data_rate = mDot::DR0;
}
} else {
_power += 3;
diff --git a/Mode/ModeSweep.cpp b/Mode/ModeSweep.cpp
index 6ff4e34..b6bef24 100644
--- a/Mode/ModeSweep.cpp
+++ b/Mode/ModeSweep.cpp
@@ -207,8 +207,7 @@ bool ModeSweep::start() {
_state = failure;
_failure.display();
_failure.updateId(_index);
- // mDot::DataRateStr returns format SF_XX - we only want to display the XX part
- _failure.updateRate(_dot->DataRateStr(_data_rate).substr(3));
+ _failure.updateRate(_dot->DataRateStr(_data_rate).substr(2));
_failure.updatePower(_power);
if (_gps_available && _gps->getLockStatus()) {
GPSPARSER::latitude lat = _gps->getLatitude();
@@ -343,8 +342,7 @@ void ModeSweep::displayHelp() {
void ModeSweep::displaySuccess() {
_success.display();
_success.updateId(_index);
- // mDot::DataRateStr returns format SF_XX - we only want to display the XX part
- _success.updateRate(_dot->DataRateStr(_data_rate).substr(3));
+ _success.updateRate(_dot->DataRateStr(_data_rate).substr(2));
_success.updatePower(_power);
_success.updateStats(_link_check_result);
if (_gps_available && _gps->getLockStatus()) {
@@ -383,23 +381,21 @@ std::vector<point> ModeSweep::generatePoints() {
uint8_t ModeSweep::payloadToRate(uint8_t payload) {
if (_band == mDot::FB_915) {
- if (payload <= mDot::MaxLengths_915[mDot::SF_10])
- return mDot::SF_10;
- else if (payload <= mDot::MaxLengths_915[mDot::SF_9])
- return mDot::SF_9;
- else if (payload <= mDot::MaxLengths_915[mDot::SF_8])
- return mDot::SF_8;
+ if (payload <= mDot::MaxLengths_915[mDot::DR0])
+ return mDot::DR0;
+ else if (payload <= mDot::MaxLengths_915[mDot::DR1])
+ return mDot::DR1;
+ else if (payload <= mDot::MaxLengths_915[mDot::DR2])
+ return mDot::DR2;
else
- return mDot::SF_7;
+ return mDot::DR4;
} else {
- if (payload <= mDot::MaxLengths_868[mDot::SF_12])
- return mDot::SF_12;
- else if (payload <= mDot::MaxLengths_868[mDot::SF_9])
- return mDot::SF_9;
+ if (payload <= mDot::MaxLengths_868[mDot::DR0])
+ return mDot::DR0;
+ else if (payload <= mDot::MaxLengths_868[mDot::DR3])
+ return mDot::DR3;
else
- return mDot::SF_7;
+ return mDot::DR6;
}
-
- return mDot::SF_7;
}