Skip to content

Commit 84916db

Browse files
committed
Add LDRO config. Add airspeed lookup.
1 parent 39ab0bf commit 84916db

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

Firmware/LoRaSerial/Radio.ino

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,19 @@ bool configureRadio()
4747
success = false;
4848
}
4949

50+
//Force LDRO for low airspeeds
51+
uint16_t airSpeed = convertSettingsToAirSpeed(&settings);
52+
if (airSpeed <= 400)
53+
{
54+
if (radio.forceLDRO(true) != RADIOLIB_ERR_NONE)
55+
success = false;
56+
}
57+
else
58+
{
59+
if (radio.autoLDRO(true) != RADIOLIB_ERR_NONE)
60+
success = false;
61+
}
62+
5063
radio.setDio0Action(transactionCompleteISR); //Called when transmission is finished
5164
radio.setDio1Action(hopISR); //Called after a transmission has started, so we can move to next freq
5265

@@ -198,6 +211,25 @@ void convertAirSpeedToSettings(Settings *newSettings, uint16_t airSpeed)
198211
}
199212
}
200213

214+
//Given settings, attempt to ID our airSpeed
215+
uint16_t convertSettingsToAirSpeed(Settings *newSettings)
216+
{
217+
uint16_t airSpeed = 0;
218+
219+
if ( (newSettings->radioBandwidth == 62.5) && (newSettings->radioSpreadFactor == 11) && (newSettings->radioCodingRate == 8) ) airSpeed = 40;
220+
else if ( (newSettings->radioBandwidth == 62.5) && (newSettings->radioSpreadFactor == 10) && (newSettings->radioCodingRate == 8) ) airSpeed = 150;
221+
else if ( (newSettings->radioBandwidth == 125) && (newSettings->radioSpreadFactor == 10) && (newSettings->radioCodingRate == 8) ) airSpeed = 400;
222+
else if ( (newSettings->radioBandwidth == 125) && (newSettings->radioSpreadFactor == 9) && (newSettings->radioCodingRate == 8) ) airSpeed = 1200;
223+
else if ( (newSettings->radioBandwidth == 500) && (newSettings->radioSpreadFactor == 10) && (newSettings->radioCodingRate == 8) ) airSpeed = 2400;
224+
else if ( (newSettings->radioBandwidth == 500) && (newSettings->radioSpreadFactor == 9) && (newSettings->radioCodingRate == 8) ) airSpeed = 4800;
225+
else if ( (newSettings->radioBandwidth == 500) && (newSettings->radioSpreadFactor == 8) && (newSettings->radioCodingRate == 7) ) airSpeed = 9600;
226+
else if ( (newSettings->radioBandwidth == 500) && (newSettings->radioSpreadFactor == 7) && (newSettings->radioCodingRate == 7) ) airSpeed = 19200;
227+
else if ( (newSettings->radioBandwidth == 500) && (newSettings->radioSpreadFactor == 6) && (newSettings->radioCodingRate == 6) ) airSpeed = 28800;
228+
else if ( (newSettings->radioBandwidth == 500) && (newSettings->radioSpreadFactor == 6) && (newSettings->radioCodingRate == 5) ) airSpeed = 38400;
229+
230+
return (airSpeed);
231+
}
232+
201233
//Set radio frequency
202234
bool setRadioFrequency(bool rxAdjust)
203235
{
@@ -3352,7 +3384,7 @@ void syncChannelTimer(uint32_t frameAirTimeUsec, bool clockStarting)
33523384
//For low speed operation move the TX start into the current dwell time period
33533385
//to make the rest of the math look like the 4800 BPS operation.
33543386
frameAirTimeMsec = settings.maxDwellTime - msToNextHopRemote
3355-
+ (frameAirTimeUsec + settings.txToRxUsec + micros() - transactionCompleteMicros) / 1000;
3387+
+ (frameAirTimeUsec + settings.txToRxUsec + micros() - transactionCompleteMicros) / 1000;
33563388
while (frameAirTimeMsec >= (settings.maxDwellTime + (settings.maxDwellTime >> 6)))
33573389
{
33583390
frameAirTimeMsec -= settings.maxDwellTime;

0 commit comments

Comments
 (0)