Skip to content

Commit 8050de6

Browse files
committed
hanged DEFAULT_SYSTEM_MAX_RX_ERROR and DEFAULT_MIN_RX_SYMBOLS definitions into LoRaMacParams.SystemMaxRxError and LoRaMacParams.MinRxSymbols LoRaMacParams fields.
Set default values to +/10 ms for the SystemMaxRxError and 6 symbols for LoRaMacParams.MinRxSymbols. Added the possibility to get/set these values through the LoRaMacMibGetRequestConfirm and LoRaMacMibSetRequestConfirm API functions.
1 parent 5d03c60 commit 8050de6

File tree

2 files changed

+64
-15
lines changed

2 files changed

+64
-15
lines changed

src/mac/LoRaMac.c

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2880,12 +2880,12 @@ static LoRaMacStatus_t ScheduleTx( void )
28802880

28812881
// Compute Rx1 windows parameters
28822882
#if ( defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) )
2883-
RxWindowsParams[0] = ComputeRxWindowParameters( DatarateOffsets[LoRaMacParams.ChannelsDatarate][LoRaMacParams.Rx1DrOffset], DEFAULT_SYSTEM_MAX_RX_ERROR );
2883+
RxWindowsParams[0] = ComputeRxWindowParameters( DatarateOffsets[LoRaMacParams.ChannelsDatarate][LoRaMacParams.Rx1DrOffset], LoRaMacParams.SystemMaxRxError );
28842884
#else
2885-
RxWindowsParams[0] = ComputeRxWindowParameters( MAX( DR_0, LoRaMacParams.ChannelsDatarate - LoRaMacParams.Rx1DrOffset ), DEFAULT_SYSTEM_MAX_RX_ERROR );
2885+
RxWindowsParams[0] = ComputeRxWindowParameters( MAX( DR_0, LoRaMacParams.ChannelsDatarate - LoRaMacParams.Rx1DrOffset ), LoRaMacParams.SystemMaxRxError );
28862886
#endif
28872887
// Compute Rx2 windows parameters
2888-
RxWindowsParams[1] = ComputeRxWindowParameters( LoRaMacParams.Rx2Channel.Datarate, DEFAULT_SYSTEM_MAX_RX_ERROR );
2888+
RxWindowsParams[1] = ComputeRxWindowParameters( LoRaMacParams.Rx2Channel.Datarate, LoRaMacParams.SystemMaxRxError );
28892889

28902890
if( IsLoRaMacNetworkJoined == false )
28912891
{
@@ -3047,6 +3047,8 @@ static void ResetMacParameters( void )
30473047
LoRaMacParams.ChannelsTxPower = LoRaMacParamsDefaults.ChannelsTxPower;
30483048
LoRaMacParams.ChannelsDatarate = LoRaMacParamsDefaults.ChannelsDatarate;
30493049

3050+
LoRaMacParams.SystemMaxRxError = LoRaMacParamsDefaults.SystemMaxRxError;
3051+
LoRaMacParams.MinRxSymbols = LoRaMacParamsDefaults.MinRxSymbols;
30503052
LoRaMacParams.MaxRxWindow = LoRaMacParamsDefaults.MaxRxWindow;
30513053
LoRaMacParams.ReceiveDelay1 = LoRaMacParamsDefaults.ReceiveDelay1;
30523054
LoRaMacParams.ReceiveDelay2 = LoRaMacParamsDefaults.ReceiveDelay2;
@@ -3386,6 +3388,8 @@ LoRaMacStatus_t LoRaMacInitialization( LoRaMacPrimitives_t *primitives, LoRaMacC
33863388
LoRaMacParamsDefaults.ChannelsTxPower = LORAMAC_DEFAULT_TX_POWER;
33873389
LoRaMacParamsDefaults.ChannelsDatarate = LORAMAC_DEFAULT_DATARATE;
33883390

3391+
LoRaMacParamsDefaults.SystemMaxRxError = 10;
3392+
LoRaMacParamsDefaults.MinRxSymbols = 6;
33893393
LoRaMacParamsDefaults.MaxRxWindow = MAX_RX_WINDOW;
33903394
LoRaMacParamsDefaults.ReceiveDelay1 = RECEIVE_DELAY1;
33913395
LoRaMacParamsDefaults.ReceiveDelay2 = RECEIVE_DELAY2;
@@ -3675,6 +3679,16 @@ LoRaMacStatus_t LoRaMacMibGetRequestConfirm( MibRequestConfirm_t *mibGet )
36753679
mibGet->Param.MulticastList = MulticastChannels;
36763680
break;
36773681
}
3682+
case MIB_SYSTEM_MAX_RX_ERROR:
3683+
{
3684+
mibGet->Param.SystemMaxRxError = LoRaMacParams.SystemMaxRxError;
3685+
break;
3686+
}
3687+
case MIB_MIN_RX_SYMBOLS:
3688+
{
3689+
mibGet->Param.MinRxSymbols = LoRaMacParams.MinRxSymbols;
3690+
break;
3691+
}
36783692
default:
36793693
status = LORAMAC_STATUS_SERVICE_UNKNOWN;
36803694
break;
@@ -3990,6 +4004,16 @@ LoRaMacStatus_t LoRaMacMibSetRequestConfirm( MibRequestConfirm_t *mibSet )
39904004
DownLinkCounter = mibSet->Param.DownLinkCounter;
39914005
break;
39924006
}
4007+
case MIB_SYSTEM_MAX_RX_ERROR:
4008+
{
4009+
LoRaMacParams.SystemMaxRxError = LoRaMacParamsDefaults.SystemMaxRxError = mibSet->Param.SystemMaxRxError;
4010+
break;
4011+
}
4012+
case MIB_MIN_RX_SYMBOLS:
4013+
{
4014+
LoRaMacParams.MinRxSymbols = LoRaMacParamsDefaults.MinRxSymbols = mibSet->Param.MinRxSymbols;
4015+
break;
4016+
}
39934017
default:
39944018
status = LORAMAC_STATUS_SERVICE_UNKNOWN;
39954019
break;
@@ -4475,7 +4499,7 @@ static RxConfigParams_t ComputeRxWindowParameters( int8_t datarate, uint32_t rxE
44754499
tSymbol = ( ( double )( 1 << Datarates[datarate] ) / ( double )Bandwidths[datarate] ) * 1e3;
44764500
}
44774501

4478-
rxConfigParams.RxWindowTimeout = MAX( ( uint32_t )ceil( ( ( 2 * DEFAULT_MIN_RX_SYMBOLS - 8 ) * tSymbol + 2 * rxError ) / tSymbol ), DEFAULT_MIN_RX_SYMBOLS ); // Computed number of symbols
4502+
rxConfigParams.RxWindowTimeout = MAX( ( uint32_t )ceil( ( ( 2 * LoRaMacParams.MinRxSymbols - 8 ) * tSymbol + 2 * rxError ) / tSymbol ), LoRaMacParams.MinRxSymbols ); // Computed number of symbols
44794503

44804504
rxConfigParams.RxOffset = ( int32_t )ceil( ( 4.0 * tSymbol ) - ( ( rxConfigParams.RxWindowTimeout * tSymbol ) / 2.0 ) - RADIO_WAKEUP_TIME );
44814505

src/mac/LoRaMac.h

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,6 @@
4949
// Includes board dependent definitions such as channels frequencies
5050
#include "LoRaMac-definitions.h"
5151

52-
/*!
53-
* System overall timing error in milliseconds.
54-
* [-DEFAULT_SYSTEM_MAX_RX_ERROR : +DEFAULT_SYSTEM_MAX_RX_ERROR]
55-
*/
56-
#define DEFAULT_SYSTEM_MAX_RX_ERROR 10
57-
58-
/*!
59-
* Minimum required number of symbols to detect an Rx frame
60-
*/
61-
#define DEFAULT_MIN_RX_SYMBOLS 6
62-
6352
/*!
6453
* Beacon interval in ms
6554
*/
@@ -282,6 +271,17 @@ typedef struct sLoRaMacParams
282271
* Channels data rate
283272
*/
284273
int8_t ChannelsDatarate;
274+
/*!
275+
* System overall timing error in milliseconds.
276+
* [-SystemMaxRxError : +SystemMaxRxError]
277+
* Default: +/-10 ms
278+
*/
279+
uint32_t SystemMaxRxError;
280+
/*!
281+
* Minimum required number of symbols to detect an Rx frame
282+
* Default: 6 symbols
283+
*/
284+
uint8_t MinRxSymbols;
285285
/*!
286286
* LoRaMac maximum time a reception window stays open
287287
*/
@@ -1106,6 +1106,8 @@ typedef struct sMlmeConfirm
11061106
* \ref MIB_UPLINK_COUNTER | YES | YES
11071107
* \ref MIB_DOWNLINK_COUNTER | YES | YES
11081108
* \ref MIB_MULTICAST_CHANNEL | YES | NO
1109+
* \ref MIB_SYSTEM_MAX_RX_ERROR | YES | YES
1110+
* \ref MIB_MIN_RX_SYMBOLS | YES | YES
11091111
*
11101112
* The following table provides links to the function implementations of the
11111113
* related MIB primitives:
@@ -1311,6 +1313,17 @@ typedef enum eMib
13111313
* NULL, the list is empty.
13121314
*/
13131315
MIB_MULTICAST_CHANNEL,
1316+
/*!
1317+
* System overall timing error in milliseconds.
1318+
* [-SystemMaxRxError : +SystemMaxRxError]
1319+
* Default: +/-10 ms
1320+
*/
1321+
MIB_SYSTEM_MAX_RX_ERROR,
1322+
/*!
1323+
* Minimum required number of symbols to detect an Rx frame
1324+
* Default: 6 symbols
1325+
*/
1326+
MIB_MIN_RX_SYMBOLS,
13141327
}Mib_t;
13151328

13161329
/*!
@@ -1480,6 +1493,18 @@ typedef union uMibParam
14801493
* Related MIB type: \ref MIB_MULTICAST_CHANNEL
14811494
*/
14821495
MulticastParams_t* MulticastList;
1496+
/*!
1497+
* System overall timing error in milliseconds.
1498+
*
1499+
* Related MIB type: \ref MIB_SYSTEM_MAX_RX_ERROR
1500+
*/
1501+
uint32_t SystemMaxRxError;
1502+
/*!
1503+
* Minimum required number of symbols to detect an Rx frame
1504+
*
1505+
* Related MIB type: \ref MIB_MIN_RX_SYMBOLS
1506+
*/
1507+
uint8_t MinRxSymbols;
14831508
}MibParam_t;
14841509

14851510
/*!

0 commit comments

Comments
 (0)