@@ -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