Skip to content

Commit a472ac0

Browse files
author
Daniel Jäckle
committed
Optimization of the RX symbol timeout.
1 parent fc182dd commit a472ac0

File tree

1 file changed

+74
-12
lines changed

1 file changed

+74
-12
lines changed

src/mac/LoRaMac.c

Lines changed: 74 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1499,13 +1499,18 @@ static void OnRxWindow1TimerEvent( void )
14991499
}
15001500

15011501
// For higher datarates, we increase the number of symbols generating a Rx Timeout
1502-
if( datarate >= DR_3 )
1503-
{ // DR_6, DR_5, DR_4, DR_3
1502+
if( ( datarate == DR_3 ) || ( datarate == DR_4 ) )
1503+
{ // DR_4, DR_3
15041504
symbTimeout = 8;
15051505
}
1506-
if( datarate == DR_6 )
1506+
else if( datarate == DR_5 )
1507+
{
1508+
symbTimeout = 10;
1509+
}
1510+
else if( datarate == DR_6 )
15071511
{// LoRa 250 kHz
15081512
bandwidth = 1;
1513+
symbTimeout = 14;
15091514
}
15101515
RxWindowSetup( Channels[Channel].Frequency, datarate, bandwidth, symbTimeout, false );
15111516
#elif ( defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) )
@@ -1515,9 +1520,35 @@ static void OnRxWindow1TimerEvent( void )
15151520
datarate = DR_0;
15161521
}
15171522
// For higher datarates, we increase the number of symbols generating a Rx Timeout
1518-
if( datarate > DR_0 )
1519-
{ // DR_1, DR_2, DR_3, DR_4, DR_8, DR_9, DR_10, DR_11, DR_12, DR_13
1520-
symbTimeout = 8;
1523+
switch( datarate )
1524+
{
1525+
case DR_0: // SF10 - BW125
1526+
symbTimeout = 5;
1527+
break;
1528+
1529+
case DR_1: // SF9 - BW125
1530+
case DR_2: // SF8 - BW125
1531+
case DR_8: // SF12 - BW500
1532+
case DR_9: // SF11 - BW500
1533+
case DR_10: // SF10 - BW500
1534+
symbTimeout = 8;
1535+
break;
1536+
1537+
case DR_3: // SF7 - BW125
1538+
case DR_11: // SF9 - BW500
1539+
symbTimeout = 10;
1540+
break;
1541+
1542+
case DR_4: // SF8 - BW500
1543+
case DR_12: // SF8 - BW500
1544+
symbTimeout = 14;
1545+
break;
1546+
1547+
case DR_13: // SF7 - BW500
1548+
symbTimeout = 16;
1549+
break;
1550+
default:
1551+
break;
15211552
}
15221553
if( datarate >= DR_4 )
15231554
{// LoRa 500 kHz
@@ -1539,19 +1570,50 @@ static void OnRxWindow2TimerEvent( void )
15391570

15401571
#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 )
15411572
// For higher datarates, we increase the number of symbols generating a Rx Timeout
1542-
if( Rx2Channel.Datarate >= DR_3 )
1543-
{ // DR_6, DR_5, DR_4, DR_3
1573+
if( ( Rx2Channel.Datarate == DR_3 ) || ( Rx2Channel.Datarate == DR_4 ) )
1574+
{ // DR_4, DR_3
15441575
symbTimeout = 8;
15451576
}
1546-
if( Rx2Channel.Datarate == DR_6 )
1577+
else if( Rx2Channel.Datarate == DR_5 )
1578+
{
1579+
symbTimeout = 10;
1580+
}
1581+
else if( Rx2Channel.Datarate == DR_6 )
15471582
{// LoRa 250 kHz
15481583
bandwidth = 1;
1584+
symbTimeout = 14;
15491585
}
15501586
#elif ( defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) )
15511587
// For higher datarates, we increase the number of symbols generating a Rx Timeout
1552-
if( Rx2Channel.Datarate > DR_0 )
1553-
{ // DR_1, DR_2, DR_3, DR_4, DR_8, DR_9, DR_10, DR_11, DR_12, DR_13
1554-
symbTimeout = 8;
1588+
switch( Rx2Channel.Datarate )
1589+
{
1590+
case DR_0: // SF10 - BW125
1591+
symbTimeout = 5;
1592+
break;
1593+
1594+
case DR_1: // SF9 - BW125
1595+
case DR_2: // SF8 - BW125
1596+
case DR_8: // SF12 - BW500
1597+
case DR_9: // SF11 - BW500
1598+
case DR_10: // SF10 - BW500
1599+
symbTimeout = 8;
1600+
break;
1601+
1602+
case DR_3: // SF7 - BW125
1603+
case DR_11: // SF9 - BW500
1604+
symbTimeout = 10;
1605+
break;
1606+
1607+
case DR_4: // SF8 - BW500
1608+
case DR_12: // SF8 - BW500
1609+
symbTimeout = 14;
1610+
break;
1611+
1612+
case DR_13: // SF7 - BW500
1613+
symbTimeout = 16;
1614+
break;
1615+
default:
1616+
break;
15551617
}
15561618
if( Rx2Channel.Datarate >= DR_4 )
15571619
{// LoRa 500 kHz

0 commit comments

Comments
 (0)