diff --git a/src/STM32CubeWL/LoRaWAN/Mac/LoRaMac.c b/src/STM32CubeWL/LoRaWAN/Mac/LoRaMac.c index f279972..d46efc4 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/LoRaMac.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/LoRaMac.c @@ -329,6 +329,19 @@ typedef struct sLoRaMacCtx * Buffer containing the MAC layer commands */ uint8_t MacCommandsBuffer[LORA_MAC_COMMAND_MAX_LENGTH]; + /* + * Stores the reference time at at 1st JoinReq or ReJoinReq. + * + * \remark Used for the BACKOFF_DC computation. + */ + SysTime_t TxBackoffRefTime; + /* + * Indicates if \ref TxBackoffRefTime must be initialized or not. + * \ref TxBackoffRefTime must be initialized for 1st JoinReq or RejoinReq event. + * + * \remark Used for the BACKOFF_DC computation. + */ + bool IsFirstJoinReqTx; }LoRaMacCtx_t; /*! @@ -1076,7 +1089,7 @@ static void ProcessRadioTxDone( void ) // Update last tx done time for the current channel txDone.Channel = MacCtx.Channel; txDone.LastTxDoneTime = TxDoneParams.CurTime; - txDone.ElapsedTimeSinceStartUp = SysTimeSub( SysTimeGetMcuTime( ), Nvm.MacGroup2.InitializationTime ); + txDone.ElapsedTimeSinceTxBackoffRefTime = SysTimeSub( SysTimeGetMcuTime( ), MacCtx.TxBackoffRefTime ); txDone.LastTxAirTime = MacCtx.TxTimeOnAir; txDone.Joined = true; if( Nvm.MacGroup2.NetworkActivation == ACTIVATION_TYPE_NONE ) @@ -1398,6 +1411,9 @@ static void ProcessRadioRxDone( void ) ResetMacParameters( true ); } #endif /* LORAMAC_VERSION */ + // Restarts the retransmission backoff algorithm by indicating that the next JoinReq or ReJoinReq + // is the first one. + MacCtx.IsFirstJoinReqTx = true; } else { @@ -3471,6 +3487,13 @@ static LoRaMacStatus_t SendReJoinReq( JoinReqIdentifier_t joinReqType ) break; } + if( MacCtx.IsFirstJoinReqTx == true ) + { + MacCtx.IsFirstJoinReqTx = false; + // Store the current time as reference time for the retransmission backoff algorithm + MacCtx.TxBackoffRefTime = SysTimeGetMcuTime( ); + } + // Schedule frame status = ScheduleTx( allowDelayedTx ); return status; @@ -3618,7 +3641,7 @@ static LoRaMacStatus_t ScheduleTx( bool allowDelayedTx ) nextChan.AggrTimeOff = Nvm.MacGroup1.AggregatedTimeOff; nextChan.Datarate = Nvm.MacGroup1.ChannelsDatarate; nextChan.DutyCycleEnabled = Nvm.MacGroup2.DutyCycleOn; - nextChan.ElapsedTimeSinceStartUp = SysTimeSub( SysTimeGetMcuTime( ), Nvm.MacGroup2.InitializationTime ); + nextChan.ElapsedTimeSinceTxBackoffRefTime = SysTimeSub( SysTimeGetMcuTime( ), MacCtx.TxBackoffRefTime ); nextChan.LastAggrTx = Nvm.MacGroup1.LastTxDoneTime; nextChan.LastTxIsJoinRequest = false; nextChan.Joined = true; @@ -4698,8 +4721,8 @@ LoRaMacStatus_t LoRaMacInitialization( LoRaMacPrimitives_t* primitives, LoRaMacC TimerInit( &MacCtx.ForceRejoinReqCycleTimer, OnForceRejoinReqCycleTimerEvent ); #endif /* LORAMAC_VERSION */ - // Store the current initialization time - Nvm.MacGroup2.InitializationTime = SysTimeGetMcuTime( ); + // At stack initialization no JoinReq has been transmitted yet + MacCtx.IsFirstJoinReqTx = true; #if (defined( LORAMAC_VERSION ) && (( LORAMAC_VERSION == 0x01000400 ) || ( LORAMAC_VERSION == 0x01010100 ))) // Initialize MAC radio events diff --git a/src/STM32CubeWL/LoRaWAN/Mac/LoRaMacInterfaces.h b/src/STM32CubeWL/LoRaWAN/Mac/LoRaMacInterfaces.h index a49ce7d..14c60e9 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/LoRaMacInterfaces.h +++ b/src/STM32CubeWL/LoRaWAN/Mac/LoRaMacInterfaces.h @@ -1125,10 +1125,11 @@ typedef struct sLoRaMacNvmDataGroup2 * Aggregated duty cycle management */ uint16_t AggregatedDCycle; - /*! + /*! * Stores the time at LoRaMac initialization. + * This value is no more used as defined by the LoRaWAN Specification v1.0.4. * - * \remark Used for the BACKOFF_DC computation. + * \remark Taken in the structure only for Backward compatibility. */ SysTime_t InitializationTime; /*! diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/Region.h b/src/STM32CubeWL/LoRaWAN/Mac/Region/Region.h index 829bf19..045e371 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/Region.h +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/Region.h @@ -466,7 +466,7 @@ typedef struct sSetBandTxDoneParams /*! * Elapsed time since initialization. */ - SysTime_t ElapsedTimeSinceStartUp; + SysTime_t ElapsedTimeSinceTxBackoffRefTime; }SetBandTxDoneParams_t; /*! @@ -814,7 +814,7 @@ typedef struct sNextChanParams /*! * Elapsed time since the start of the node. */ - SysTime_t ElapsedTimeSinceStartUp; + SysTime_t ElapsedTimeSinceTxBackoffRefTime; /*! * Joined Set to true, if the last uplink was a join request */ diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.c index 1792c19..249d829 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.c @@ -99,7 +99,7 @@ #define AS923_MIN_RF_FREQUENCY 915000000 #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) #define AS923_MAX_RF_FREQUENCY 921000000 -#else +#else #define AS923_MAX_RF_FREQUENCY 928000000 #endif @@ -169,9 +169,6 @@ #undef AS923_RX_MAX_DATARATE #define AS923_RX_MAX_DATARATE DR_5 -#undef AS923_DEFAULT_MAX_EIRP -#define AS923_DEFAULT_MAX_EIRP 13.0f - /*! * STD-T108 Ver1.4 does not require dwell-time enforcement when using LBT on channels 28 to 38 */ @@ -202,9 +199,6 @@ #undef AS923_RX_MAX_DATARATE #define AS923_RX_MAX_DATARATE DR_5 -#undef AS923_DEFAULT_MAX_EIRP -#define AS923_DEFAULT_MAX_EIRP 13.0f - /*! * STD-T108 Ver1.4 does not require dwell-time enforcement when using DC on channels 28 to 38 */ @@ -217,19 +211,19 @@ #undef AS923_DUTY_CYCLE_ENABLED #define AS923_DUTY_CYCLE_ENABLED 1 -#elif ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH37_CH61_LBT_DC ) +#elif ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH33_CH61_LBT_DC ) /* - * STD-T108 Ver1.4 allows the use of channels 37 to 61 with LBT and DC. + * STD-T108 Ver1.4 allows the use of channels 33 to 61 with LBT and DC. * However dwell time enforcement must be enabled */ -// Channel plan CHANNEL_PLAN_GROUP_AS923_1_JP_CH37_CH61_LBT_DC +// Channel plan CHANNEL_PLAN_GROUP_AS923_1_JP_CH33_CH61_LBT_DC #define REGION_AS923_FREQ_OFFSET 0 /*! - * Restrict AS923 frequencies to channels 37 to 61 + * Restrict AS923 frequencies to channels 33 to 61 * Center frequencies 922.4 MHz to 928.0 MHz @ 200 kHz max bandwidth */ #define AS923_MIN_RF_FREQUENCY 922400000 @@ -241,9 +235,6 @@ #undef AS923_RX_MAX_DATARATE #define AS923_RX_MAX_DATARATE DR_5 -#undef AS923_DEFAULT_MAX_EIRP -#define AS923_DEFAULT_MAX_EIRP 13.0f - /*! * Enable duty cycle enforcement */ @@ -251,7 +242,7 @@ #define AS923_DUTY_CYCLE_ENABLED 1 /*! - * STD-T108 Ver1.4 requires a carrier sense time of at least 128 us on channels 37 to 61 + * STD-T108 Ver1.4 requires a carrier sense time of at least 128 us on channels 33 to 61 */ #undef AS923_CARRIER_SENSE_TIME #define AS923_CARRIER_SENSE_TIME 1 @@ -562,10 +553,10 @@ void RegionAS923SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_AS923 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_AS923 */ } @@ -617,7 +608,7 @@ void RegionAS923InitDefaults( InitDefaultsParams_t* params ) #if ( ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP ) || \ ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH24_CH38_LBT ) || \ - ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH37_CH61_LBT_DC ) ) + ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH33_CH61_LBT_DC ) ) RegionNvmGroup2->RssiFreeThreshold = AS923_RSSI_FREE_TH; RegionNvmGroup2->CarrierSenseTime = AS923_CARRIER_SENSE_TIME; #endif @@ -1023,7 +1014,6 @@ uint8_t RegionAS923RxParamSetupReq( RxParamSetupReqParams_t* rxParamSetupReq ) { uint8_t status = 0x07; #if defined( REGION_AS923 ) - // Verify radio frequency if( VerifyRfFreq( rxParamSetupReq->Frequency ) == false ) { @@ -1181,7 +1171,7 @@ LoRaMacStatus_t RegionAS923NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = AS923_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); @@ -1194,7 +1184,7 @@ LoRaMacStatus_t RegionAS923NextChannel( NextChanParams_t* nextChanParams, uint8_ { #if (( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP ) || \ ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH24_CH38_LBT ) || \ - ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH37_CH61_LBT_DC ) ) + ( REGION_AS923_DEFAULT_CHANNEL_PLAN == CHANNEL_PLAN_GROUP_AS923_1_JP_CH33_CH61_LBT_DC ) ) // Executes the LBT algorithm when operating in Japan uint8_t channelNext = 0; diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.h b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.h index 0cdaf86..54d0141 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.h +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAS923.h @@ -99,10 +99,10 @@ extern "C" #define CHANNEL_PLAN_GROUP_AS923_1_JP_CH24_CH38_DC 6 /*! - * Channel plan group AS923-1 for Japan - channels 37 to 61 Listen Before Talk + Duty Cycle + * Channel plan group AS923-1 for Japan - channels 33 to 61 Listen Before Talk + Duty Cycle * AS923_FREQ_OFFSET = 0 */ -#define CHANNEL_PLAN_GROUP_AS923_1_JP_CH37_CH61_LBT_DC 7 +#define CHANNEL_PLAN_GROUP_AS923_1_JP_CH33_CH61_LBT_DC 7 #endif /*! diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAU915.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAU915.c index e569fd4..e9d7962 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAU915.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionAU915.c @@ -376,10 +376,10 @@ void RegionAU915SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_AU915 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_AU915 */ } @@ -976,7 +976,7 @@ LoRaMacStatus_t RegionAU915NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = AU915_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN470.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN470.c index caf1cc1..59b6196 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN470.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN470.c @@ -663,10 +663,10 @@ void RegionCN470SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_CN470 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_CN470 */ } @@ -1321,7 +1321,7 @@ LoRaMacStatus_t RegionCN470NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = CN470_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN779.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN779.c index ffc32b4..c02142b 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN779.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCN779.c @@ -315,10 +315,10 @@ void RegionCN779SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_CN779 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_CN779 */ } @@ -905,7 +905,7 @@ LoRaMacStatus_t RegionCN779NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = CN779_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.c index 93f76ef..17ea47a 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.c @@ -65,7 +65,7 @@ * defined duty-cycle restrictions. In order to ensure that these restrictions never get violated we changed the * default duty cycle observation time period to 1/2 hour (1800000 ms). */ -#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) +#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) #define DUTY_CYCLE_TIME_PERIOD 3600000 #else #define DUTY_CYCLE_TIME_PERIOD 1800000 @@ -107,7 +107,7 @@ static uint16_t GetDutyCycle( Band_t* band, bool joined, SysTime_t elapsedTimeSi if( joined == false ) { -#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) +#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) uint16_t joinDutyCycle = BACKOFF_DC_1_HOUR; #else uint16_t joinDutyCycle = BACKOFF_DC_24_HOURS; @@ -151,7 +151,7 @@ static uint16_t SetMaxTimeCredits( Band_t* band, bool joined, SysTime_t elapsedT if( joined == false ) { #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) - if( elapsedTimeSinceStartup.Seconds < BACKOFF_DUTY_CYCLE_1_HOUR_IN_S ) + if( elapsedTimeSinceStartup.Seconds < BACKOFF_DUTY_CYCLE_1_HOUR_IN_S ) { maxCredits = DUTY_CYCLE_TIME_PERIOD; } @@ -164,8 +164,8 @@ static uint16_t SetMaxTimeCredits( Band_t* band, bool joined, SysTime_t elapsedT maxCredits = DUTY_CYCLE_TIME_PERIOD_JOIN_BACKOFF_24H; } #else - TimerTime_t elapsedTime = SysTimeToMs( elapsedTimeSinceStartup ); - SysTime_t timeDiff = { 0 }; + TimerTime_t elapsedTime = SysTimeToMs( elapsedTimeSinceStartup ); + SysTime_t timeDiff = { 0 }; if( dutyCycle == BACKOFF_DC_1_HOUR ) { maxCredits = DUTY_CYCLE_TIME_PERIOD; @@ -218,7 +218,7 @@ static uint16_t SetMaxTimeCredits( Band_t* band, bool joined, SysTime_t elapsedT { band->TimeCredits = maxCredits; } -#endif +#endif // Setup the maximum allowed credits. We can assign them // safely all the time. @@ -228,7 +228,7 @@ static uint16_t SetMaxTimeCredits( Band_t* band, bool joined, SysTime_t elapsedT } -#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) +#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) static uint16_t UpdateTimeCredits( Band_t* band, bool joined, bool dutyCycleEnabled, bool lastTxIsJoinRequest, SysTime_t elapsedTimeSinceStartup, TimerTime_t currentTime, TimerTime_t lastBandUpdateTime ) @@ -456,7 +456,7 @@ TimerTime_t RegionCommonUpdateBandTimeOff( bool joined, Band_t* bands, // We calculate the minTimeToWait among the bands which are not // ready for transmission and which are potentially available // for a transmission in the future. -#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) +#if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x02010003 )) TimerTime_t observationTimeDiff = 0; if( bands[i].LastMaxCreditAssignTime >= elapsedTime ) { @@ -727,7 +727,7 @@ LoRaMacStatus_t RegionCommonIdentifyChannels( RegionCommonIdentifyChannelsParam_ identifyChannelsParam->MaxBands, identifyChannelsParam->DutyCycleEnabled, identifyChannelsParam->LastTxIsJoinRequest, - identifyChannelsParam->ElapsedTimeSinceStartUp, + identifyChannelsParam->ElapsedTimeSinceTxBackoffRefTime, identifyChannelsParam->ExpectedTimeOnAir ); RegionCommonCountNbOfEnabledChannels( identifyChannelsParam->CountNbOfEnabledChannelsParam, enabledChannels, diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.h b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.h index 2cb7ad0..6f6ffbf 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.h +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionCommon.h @@ -307,7 +307,7 @@ typedef struct sRegionCommonIdentifyChannelsParam /*! * Elapsed time since the start of the node. */ - SysTime_t ElapsedTimeSinceStartUp; + SysTime_t ElapsedTimeSinceTxBackoffRefTime; /*! * Joined Set to true, if the last uplink was a join request */ diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU433.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU433.c index 30e26ce..69f09bb 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU433.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU433.c @@ -315,10 +315,10 @@ void RegionEU433SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_EU433 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_EU433 */ } @@ -909,7 +909,7 @@ LoRaMacStatus_t RegionEU433NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = EU433_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU868.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU868.c index 6528cb8..2e564d4 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU868.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionEU868.c @@ -341,10 +341,10 @@ void RegionEU868SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_EU868 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_EU868 */ } @@ -945,7 +945,7 @@ LoRaMacStatus_t RegionEU868NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = EU868_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionIN865.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionIN865.c index f313302..6814509 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionIN865.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionIN865.c @@ -314,10 +314,10 @@ void RegionIN865SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_IN865 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_IN865 */ } @@ -931,7 +931,7 @@ LoRaMacStatus_t RegionIN865NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = IN865_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionKR920.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionKR920.c index 5aba9a9..923ed4a 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionKR920.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionKR920.c @@ -345,10 +345,10 @@ void RegionKR920SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_KR920 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_KR920 */ } @@ -921,7 +921,7 @@ LoRaMacStatus_t RegionKR920NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = KR920_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionRU864.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionRU864.c index e99cc3f..3a0596a 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionRU864.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionRU864.c @@ -317,10 +317,10 @@ void RegionRU864SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_RU864 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_RU864 */ @@ -911,7 +911,7 @@ LoRaMacStatus_t RegionRU864NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.DutyCycleEnabled = nextChanParams->DutyCycleEnabled; identifyChannelsParam.MaxBands = RU864_MAX_NB_BANDS; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); diff --git a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionUS915.c b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionUS915.c index ac05226..e567e58 100644 --- a/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionUS915.c +++ b/src/STM32CubeWL/LoRaWAN/Mac/Region/RegionUS915.c @@ -368,10 +368,10 @@ void RegionUS915SetBandTxDone( SetBandTxDoneParams_t* txDone ) #if defined( REGION_US915 ) #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) RegionCommonSetBandTxDone( &RegionNvmGroup1->Bands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) RegionCommonSetBandTxDone( &RegionBands[RegionNvmGroup2->Channels[txDone->Channel].Band], - txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceStartUp ); + txDone->LastTxAirTime, txDone->Joined, txDone->ElapsedTimeSinceTxBackoffRefTime ); #endif /* REGION_VERSION */ #endif /* REGION_US915 */ } @@ -991,7 +991,7 @@ LoRaMacStatus_t RegionUS915NextChannel( NextChanParams_t* nextChanParams, uint8_ identifyChannelsParam.MaxBands = US915_MAX_NB_BANDS; #if (defined( REGION_VERSION ) && ( REGION_VERSION == 0x01010003 )) - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); @@ -999,7 +999,7 @@ LoRaMacStatus_t RegionUS915NextChannel( NextChanParams_t* nextChanParams, uint8_ #elif (defined( REGION_VERSION ) && (( REGION_VERSION == 0x02010001 ) || ( REGION_VERSION == 0x02010003 ))) identifyChannelsParam.CountNbOfEnabledChannelsParam = &countChannelsParams; - identifyChannelsParam.ElapsedTimeSinceStartUp = nextChanParams->ElapsedTimeSinceStartUp; + identifyChannelsParam.ElapsedTimeSinceTxBackoffRefTime = nextChanParams->ElapsedTimeSinceTxBackoffRefTime; identifyChannelsParam.LastTxIsJoinRequest = nextChanParams->LastTxIsJoinRequest; identifyChannelsParam.ExpectedTimeOnAir = GetTimeOnAir( nextChanParams->Datarate, nextChanParams->PktLen ); #endif /* REGION_VERSION */ diff --git a/src/STM32CubeWL/LoRaWAN/Release_Notes.html b/src/STM32CubeWL/LoRaWAN/Release_Notes.html index 0eda896..30160e5 100644 --- a/src/STM32CubeWL/LoRaWAN/Release_Notes.html +++ b/src/STM32CubeWL/LoRaWAN/Release_Notes.html @@ -6,13 +6,19 @@ Release Notes for LoRaWAN Middleware -
@@ -33,73 +36,129 @@

Release Notes for

LoRaWAN Middleware

Copyright © 2020 STMicroelectronics

- +

Purpose

-

This Middleware provides the LoRaWAN Stack. This stack is based on the LoRaMac from Semtech/StackForce (see readme.md)

+

This Middleware provides the LoRaWAN Stack. This stack is based on +the LoRaMac from Semtech/StackForce (see readme.md)

This driver is composed of 5 directories:

Update History

- + +

Main Changes

    -
  • Fix: Re-start LoraMac stack if it is stopped and device is already joined
  • - -
  • Fix: Unalignment memory access within FUOTA Fragmentation package
  • - +
  • Fix: rebootTimeReq is based on GPS epoch, convert to Unix epoch
  • +
  • Fix: LCTT Test BV_015_A for +CHANNEL_PLAN_GROUP_AS923_1_JP_CH24_CH38_LBT test due to allowed data +rate mismatch
  • +
  • Fix: Backoff Algorithm issue (patch from Semtech Github #1399)
  • +
  • Fix: Fixed typo in comments and channel plan name (From CH37 to +CH33) for AS923_1 with LBT and DC
  • Release Notes update

Known limitations:

    -
  • The feature Class B Remote multicast setup implemented is not fully operational when more than one context defined (context priority management)
  • -
  • The Data Block Integrity Check required by TS004-2.0.0_LoRaWAN_Fragmented_Data_Block_Transport is not compliant with the current ComputeCmac method implementation
  • +
  • The feature Class B Remote multicast setup implemented is not fully +operational when more than one context defined (context priority +management)
  • +
  • The Data Block Integrity Check required by +TS004-2.0.0_LoRaWAN_Fragmented_Data_Block_Transport is not compliant +with the current ComputeCmac method implementation
- + +
-

Main Changes

+

Main Changes

+
    +
  • Fix: Re-start LoraMac stack if it is stopped and device is already +joined
  • +
  • Fix: Unalignment memory access within FUOTA Fragmentation +package
  • +
  • Release Notes update
  • +
+

Known limitations:

+
    +
  • The feature Class B Remote multicast setup implemented is not fully +operational when more than one context defined (context priority +management)
  • +
  • The Data Block Integrity Check required by +TS004-2.0.0_LoRaWAN_Fragmented_Data_Block_Transport is not compliant +with the current ComputeCmac method implementation
  • +
+
+
+
+ + +
+

Main Changes

    -
  • Feature: Integration of LoRaWAN Link Layer v1.0.4/v1.1 + Regional Parameters RP002-1.0.3 from LoRa Mac Semtech/StackForce master branch:
    +
  • Feature: Integration of LoRaWAN Link Layer v1.0.4/v1.1 + Regional +Parameters RP002-1.0.3 from LoRa Mac Semtech/StackForce master +branch:
      -
    • Semtech release v4.7.0 integration (latest commit [672b37d] 09-Dec-2022)
    • +
    • Semtech release v4.7.0 +integration (latest commit [672b37d] 09-Dec-2022)
  • -
  • Feature: Added support for new release of ARIB STD-T108 Ver1.4 under AS923 region
  • - +
  • Feature: Added support for new release of ARIB STD-T108 Ver1.4 under +AS923 region
  • Feature/Fix: Class C Certification support fix
  • -
  • Release Notes update
-

Known limitations:

+

Known limitations:

    -
  • The feature Class B Remote multicast setup implemented is not fully operational when more than one context defined (context priority management)
  • -
  • The Data Block Integrity Check required by TS004-2.0.0_LoRaWAN_Fragmented_Data_Block_Transport is not compliant with the current ComputeCmac method implementation
  • +
  • The feature Class B Remote multicast setup implemented is not fully +operational when more than one context defined (context priority +management)
  • +
  • The Data Block Integrity Check required by +TS004-2.0.0_LoRaWAN_Fragmented_Data_Block_Transport is not compliant +with the current ComputeCmac method implementation
- + +
-

Main Changes

+

Main Changes

    -
  • Feature: Integration of LoRaWAN Link Layer v1.0.4 + Regional Parameters RP002-1.0.1 from LoRa Mac Semtech/StackForce master branch:
    +
  • Feature: Integration of LoRaWAN Link Layer v1.0.4 + Regional +Parameters RP002-1.0.1 from LoRa Mac Semtech/StackForce master +branch:
      -
    • Semtech release v4.6.0 integration (latest commit [fe8247e] 11-Jan-2022)
    • -
    • fix some issues from latest master commits (latest change integrated: commit [55f83f9] 13-Oct-2022)
    • +
    • Semtech release v4.6.0 +integration (latest commit [fe8247e] 11-Jan-2022)
    • +
    • fix some issues from latest master commits (latest change +integrated: commit [55f83f9] 13-Oct-2022)
  • -
  • Feature: Support of RU864-870 16 channels from Regional Parameters RP002-1.0.2
  • -
  • Feature: Support of AS923-4 from Regional Parameters RP002-1.0.3
  • +
  • Feature: Support of RU864-870 16 channels from Regional Parameters +RP002-1.0.2
  • +
  • Feature: Support of AS923-4 from Regional Parameters +RP002-1.0.3
  • Feature: LoRaWAN FUOTA packages v2.0.0 integration
    • TS003-2.0.0_LoRaWAN_Application_Layer_Clock_Synchronization
    • @@ -107,43 +166,61 @@

      Main Changes

    • TS005-2.0.0_LoRaWAN_Remote_Multicast_Setup
    • TS006-1.0.0_LoRaWAN_Firmware_Management_Protocol
  • -
  • Feature: LoRaWAN Key Provisioning: Join EUI/Dev EUI/Dev Address with KMS
  • +
  • Feature: LoRaWAN Key Provisioning: Join EUI/Dev EUI/Dev Address with +KMS
  • Feature: Set Tx power before join overridden by Mac
  • -
  • Fix: EIRP default configuration(AS923-JP channel plan) needs to be corrected, 13.0 -> 16.0
  • +
  • Fix: EIRP default configuration(AS923-JP channel plan) needs to be +corrected, 13.0 -> 16.0
  • Release Notes update
-

Known limitations:

+

Known limitations:

    -
  • The feature Class B Remote multicast setup implemented is not fully operational when more than one context defined (context priority management)
  • -
  • The Data Block Integrity Check required by TS004-2.0.0_LoRaWAN_Fragmented_Data_Block_Transport is not compliant with the current ComputeCmac method implementation
  • +
  • The feature Class B Remote multicast setup implemented is not fully +operational when more than one context defined (context priority +management)
  • +
  • The Data Block Integrity Check required by +TS004-2.0.0_LoRaWAN_Fragmented_Data_Block_Transport is not compliant +with the current ComputeCmac method implementation
- + +
-

Main Changes

+

Main Changes

    -
  • Feature: Integration of LoRaWAN v1.0.4 from LoRa Mac Semtech/StackForce develop branch (31-May-2021 commits, version 4.5.2)
  • -
  • Feature: NVM Context store/restore implementation with Flash usage and SRAM2 retention (required by Certification code)
  • -
  • Feature: US915/CN470/AU915 HYBRID Frequency sub-band can be overloaded in lorawan_conf.h
  • +
  • Feature: Integration of LoRaWAN v1.0.4 from LoRa Mac +Semtech/StackForce develop branch (31-May-2021 commits, version +4.5.2)
  • +
  • Feature: NVM Context store/restore implementation with Flash usage +and SRAM2 retention (required by Certification code)
  • +
  • Feature: US915/CN470/AU915 HYBRID Frequency sub-band can be +overloaded in lorawan_conf.h
  • Fix: Negative sensor Temperature
  • -
  • Fix: LmHandlerSend function returns an error when the App data is not sent because piggyback FOpts MAC commands is set as priority in the uplink payload
  • +
  • Fix: LmHandlerSend function returns an error when the App data is +not sent because piggyback FOpts MAC commands is set as priority in the +uplink payload
  • Fix: FragDecoder fragment max size update to support upper DRs
  • Licensing update: New way to declare licenses
  • Release Notes update
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac from Semtech/StackForce develop branch (18-Jan-2021 commits, version 4.4.7)
  • -
  • SecureElementDeleteDerivedKeys dynamic implementation in using KMS APIs
  • +
  • Implements LoRa Mac from Semtech/StackForce develop branch +(18-Jan-2021 commits, version 4.4.7)
  • +
  • SecureElementDeleteDerivedKeys dynamic implementation in using KMS +APIs
  • Cleanup NVM key attributes with KMS default values definition
  • Printable Keys (Root and derived) with KEY_EXTRACTABLE
  • Remove GCCv9 compiler warnings
  • @@ -152,107 +229,132 @@

    Main Changes

  • Fragmentation processing move to application layer
  • Release Notes update
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Multiple tools write to the same file’ if AES + LoRaWAN + option .c/.h
  • +
  • Multiple tools write to the same file’ if AES + LoRaWAN + option +.c/.h
  • Update file-license
  • -
  • remove KMS init from LoRaWAN Middleware (move to application part)
  • -
  • Update Key List usage with a reworked init part: set a static const + memcpy to prevent a Stop/Restart of LoRaMAC
  • +
  • remove KMS init from LoRaWAN Middleware (move to application +part)
  • +
  • Update Key List usage with a reworked init part: set a static const ++ memcpy to prevent a Stop/Restart of LoRaMAC
  • Release Notes update
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac from Semtech/StackForce develop branch (26-May-2020 commits, version 4.4.4)
  • +
  • Implements LoRa Mac from Semtech/StackForce develop branch +(26-May-2020 commits, version 4.4.4)
  • Fixed SetLoRaSymbNumTimeout. RX Continuous bug on ClassC
  • revert AU915 regional parameters 1.0.3 errata feature
  • Remove LoRaWAN 1.1 + MC Group[1..3] Keys
  • -
  • Add missing ping_slot_nb_channels case to getPhy regions (hopping feature)
  • +
  • Add missing ping_slot_nb_channels case to getPhy regions (hopping +feature)
  • RepeaterSupport feature set back
  • LmHandlerSend error codes implementation
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

  • Moves the contents of folder Patterns/Advanced/ to LmHandler/
  • Imports some features from Semtech/StackForce develop branch:
      -
    • Remove repeater support. Will be removed from future Regional Parameters specifications.
    • -
    • Add Ping_Slot channel freq to prevent the offset between the RU864 Beacon and Ping_Slot frequencies
    • +
    • Remove repeater support. Will be removed from future Regional +Parameters specifications.
    • +
    • Add Ping_Slot channel freq to prevent the offset between the RU864 +Beacon and Ping_Slot frequencies
    • Update of TimeOnAir calculation
    • Update of CryptoJoinAccept with fix of security vulnerabilities
    • Fix uplink messages burst with ClassB usage
  • -
  • New LmHandler services addition: Firmware Management and Data Distribution
  • +
  • New LmHandler services addition: Firmware Management and Data +Distribution
  • Fix some Keil-related issues
  • Update files license and copyright year
-

Known limitations:

+

Known limitations:

  • IN865 ClassB beacon reception
- + +
-

Main Changes

+

Main Changes

  • readme.md update to version 4.4.3
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac from Semtech/StackForce develop branch (17-Dec-2019 commits, version 4.4.3)
  • +
  • Implements LoRa Mac from Semtech/StackForce develop branch +(17-Dec-2019 commits, version 4.4.3)
  • Patterns:
    • integration of Semtech LmHandler
    • ST specific certif features factorization
    • rearchitecture : removal of lora.c
    • -
    • new services addition: compliance, clock sync, multicast & fragmentation
    • +
    • new services addition: compliance, clock sync, multicast & +fragmentation
  • -
  • KMS integration done in Crypto & LmHandler folders (mbed-crypto called)
  • +
  • KMS integration done in Crypto & LmHandler folders (mbed-crypto +called)
-

Known limitations:

+

Known limitations:

  • IN865 ClassB beacon reception
- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac from Semtech/StackForce develop branch (31-Oct-2019 commits, version 4.4.2)
  • +
  • Implements LoRa Mac from Semtech/StackForce develop branch +(31-Oct-2019 commits, version 4.4.2)
  • Patterns/basic and Patterns/modem directory structure change
  • update files license
  • -
  • certification obtained with LoRAWAN version v1.0.2 in the following regions: +
  • certification obtained with LoRAWAN version v1.0.2 in the following +regions:
    • EU868
    • IN865
    • @@ -261,129 +363,169 @@

      Main Changes

    • US915
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

  • Trace logging & LoRa Mac version display updates
  • Some function prototypes added
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • implements LoRa Mac 4.4.2-rc.5 from Semtech/StackForce develop branch
  • +
  • implements LoRa Mac 4.4.2-rc.5 from Semtech/StackForce develop +branch
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac 4.4.2-rc.1 from Semtech/StackForce develop branch
  • +
  • Implements LoRa Mac 4.4.2-rc.1 from Semtech/StackForce develop +branch
  • Supports Class B
  • Features secure element API
  • Added RU864 region
  • Removed US915-Hybrid
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

  • Implements LoRa Mac 4.4.1 from Semtech/StackForce
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Bug fix in McpsIndication related to downlink Application data buffer
  • +
  • Bug fix in McpsIndication related to downlink Application data +buffer
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac 4.4.0 release from Semtech/StackForce https://github.com/Lora-net/LoRaMac-node/tree/f42be67be402a40b3586724800771bfe13fb18e6
  • -
  • AckTimeoutRetriesCounter must be reset every time a new request (unconfirmed or confirmed) is performed.
  • -
  • Added verification for the power parameter in order to check that it is greater or equal to 0.
  • +
  • Implements LoRa Mac 4.4.0 release from Semtech/StackForce https://github.com/Lora-net/LoRaMac-node/tree/f42be67be402a40b3586724800771bfe13fb18e6
  • +
  • AckTimeoutRetriesCounter must be reset every time a new request +(unconfirmed or confirmed) is performed.
  • +
  • Added verification for the power parameter in order to check that it +is greater or equal to 0.
  • Enhancement for regions without FSK modulation support.
  • Bug fix for RX window 2 in class c mode.
  • -
  • AdrAckReq bit must be set to false as soon as we reach the lowest datarate.
  • -
  • MacCommandsBufferIndex must be reset when the mac commands are being sent on port 0.
  • -
  • Fixed RegionCommonSetBandTxDone in order to also update band->LastTxDoneTime when performing the Join procedure.
  • -
  • Added verification of payload size for Unconfirmed and Confirmed messages depending on Dwell time.
  • +
  • AdrAckReq bit must be set to false as soon as we reach the lowest +datarate.
  • +
  • MacCommandsBufferIndex must be reset when the mac commands are being +sent on port 0.
  • +
  • Fixed RegionCommonSetBandTxDone in order to also update +band->LastTxDoneTime when performing the Join procedure.
  • +
  • Added verification of payload size for Unconfirmed and Confirmed +messages depending on Dwell time.
  • Added missing Rx1 timeout handling.
  • Updated all regions to use MAX output power by default.
  • Merge remote-tracking branch ‘origin/develop’ into develop
  • -
  • Bug fix in KR920 - update the maxEIRP calculation for continuous wave
  • +
  • Bug fix in KR920 - update the maxEIRP calculation for continuous +wave
  • Bug fix in IN865 - Update the band of the default channels
  • -
  • Bug fix in AS923 - for RX use always the payload limitation of dwell 0
  • -
  • Update function RegionCommonChanVerifyDr. Perform an ‘AND’ operation for security
  • -
  • Move the verification of ADR parameters into the common section. Update all regions with the related changes
  • +
  • Bug fix in AS923 - for RX use always the payload limitation of dwell +0
  • +
  • Update function RegionCommonChanVerifyDr. Perform an ‘AND’ operation +for security
  • +
  • Move the verification of ADR parameters into the common section. +Update all regions with the related changes
  • Update comment for function RegionLinkAdrReq
  • Apply variables to data structure LinkAdrReqParams_t
  • Bug fix for KR920
  • Rename data structure LinkAdrParams_t
  • Issue(#238): Apply missing variable in sSetBandTxDoneParams
  • -
  • Bug fix in processing MAC commands for case SRV_MAC_TX_PARAM_SETUP_REQ.
  • +
  • Bug fix in processing MAC commands for case +SRV_MAC_TX_PARAM_SETUP_REQ.
  • Issue(#238): Apply missing variable in struct sBand
  • -
  • Update the MAC to enable the server to control the Channels Mask and the number of transmissions even ADR is off
  • -
  • Issue(#238): Update the backoff procedure for all regions. Move code parts into the common section
  • +
  • Update the MAC to enable the server to control the Channels Mask and +the number of transmissions even ADR is off
  • +
  • Issue(#238): Update the backoff procedure for all regions. Move code +parts into the common section
  • Update implementation to allow automatic MAC answers on port 0
  • -
  • Issue(#253): Delete all pre-configured channels when performing a join request
  • +
  • Issue(#253): Delete all pre-configured channels when performing a +join request
  • Initialize variable phyParam in functions RegionXXGetPhyParam
  • Remove assert_param from the radio drivers
  • Synchronize function RegionXXTxConfig
  • @@ -393,19 +535,24 @@

    Main Changes

  • Change scientific notation to numeric notation
  • Merge pull request #260 from clmklk/AU915
  • AU915: update Datarate limits according to LoRaWan 1.0.2rB
  • -
  • AU915: update Downstream datarate table according to LoRaWan 1.0.2rB
  • +
  • AU915: update Downstream datarate table according to LoRaWan +1.0.2rB
  • Merge pull request #225 from OpenChirp/patch_1
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac from Semtech/StackForce develop branch (30-May-2017 commits, 4.4.0 release candidate) https://github.com/Lora-net/LoRaMac-node/tree/e2f35db75c1b449379d3b520c2d4e5922a9f5c81
  • +
  • Implements LoRa Mac from Semtech/StackForce develop branch +(30-May-2017 commits, 4.4.0 release candidate) https://github.com/Lora-net/LoRaMac-node/tree/e2f35db75c1b449379d3b520c2d4e5922a9f5c81
  • Issue(235): Update functions RegionXXNextChannel.
  • Issue(238): Update initialization value of nextTxDelay.
  • Issue(234): Report back the aggregated time off.
  • @@ -414,7 +561,8 @@

    Main Changes

  • Update LimitTxPower for US915.
  • Bug fix in function RegionCN470Verify.
  • Bug fix in function RegionAU915Verify.
  • -
  • Issue(229): Fix issue when receiving frames in second RX2 in Class C.
  • +
  • Issue(229): Fix issue when receiving frames in second RX2 in Class +C.
  • Add a command to get the next lower datarate.
  • Group initializations
  • Update regional definitions of KR920.
  • @@ -423,15 +571,19 @@

    Main Changes

  • Update regional definitions of AU915.
  • Update regional definitions of AS923.
  • Update TX power computations.
  • -
  • Remove duplicated call to ApplyDrOffset in function RegionRxConfig.
  • -
  • Relocate the datarate, up- and downlink dwell time into a structure.
  • +
  • Remove duplicated call to ApplyDrOffset in function +RegionRxConfig.
  • +
  • Relocate the datarate, up- and downlink dwell time into a +structure.
  • Change API of RegionGetPhyParam and the related functions.
  • Bug fix in function LoRaMacQueryTxPossible.
  • Apply patch for dwell time and minimum datarate.
  • Change the default datarate to DR_2 for AS923.
  • -
  • Take dwell time for ADR calculations and datarate settings into account.
  • +
  • Take dwell time for ADR calculations and datarate settings into +account.
  • Update LoRaMacQueryTxPossible to reset the MAC commands buffer.
  • -
  • Issue(#221): Add the dwell time in function ValidatePayloadLength.
  • +
  • Issue(#221): Add the dwell time in function +ValidatePayloadLength.
  • Increase the transmission and reception timeout for KR920.
  • Bug fix in functions OnRxWindowXTimerEvent.
  • Remove datarate assignment.
  • @@ -439,75 +591,95 @@

    Main Changes

  • Add frequency range check for AS923
  • Issue(#221): Bug fix in max payload size calculation.
  • GitHub reported issues corrections.
  • -
  • Changed the AdrAckCounter handling as expected by the test houses.
  • +
  • Changed the AdrAckCounter handling as expected by the test +houses.
  • Fix an issue where the node stopped transmitting.
  • Removed useless LoRaMacPayload buffer.
  • MAC layer indications handling simplification.
  • -
  • Relocate parameter settings from ResetMacParameters to the initialization.
  • +
  • Relocate parameter settings from ResetMacParameters to the +initialization.
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Implements LoRa Mac 4.4.0 from Semtech/StackForce from the develop branch
  • +
  • Implements LoRa Mac 4.4.0 from Semtech/StackForce from the develop +branch
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Read date between 2 successive read time to make sure date is ok
  • +
  • Read date between 2 successive read time to make sure date is +ok
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

    -
  • Corrected 1 bug in LoRaMac-board.h: RX_WND_2_CHANNEL for EU is now back at DR_0
  • +
  • Corrected 1 bug in LoRaMac-board.h: RX_WND_2_CHANNEL for EU is now +back at DR_0
  • Corrected 1 bug in LoRaMac.c for dataRate adaptation
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

  • Implements LoRa Mac 4.3.0 from Semtech/StackForce
-

Known limitations:

+

Known limitations:

None

- + +
-

Main Changes

+

Main Changes

  • First V1.0.0 customized version for STM32Cube solution.
  • -
  • Commissioning_template.h in /Conf contains all Lora Ids to connect on LoRa network +
  • Commissioning_template.h in /Conf contains all Lora Ids to connect +on LoRa network
      -
    • It is provided as a template. It must be moved to /Projects/inc/ as Commissioning.h
    • +
    • It is provided as a template. It must be moved to /Projects/inc/ as +Commissioning.h
  • -
  • All files in Conf/src are provided as template and must be copied in /Projects/src.
  • -
  • All files in Conf/inc are provided as template and must be copied in /Projects/inc. +
  • All files in Conf/src are provided as template and must be copied in +/Projects/src.
  • +
  • All files in Conf/inc are provided as template and must be copied in +/Projects/inc.
      -
    • #if 0 and #endif must be removed to enable the template in the user directory
    • +
    • #if 0 and #endif must be removed to enable the template in the user +directory
  • Implements LoRa Mac 4.2.0 from Semtech/StackForce
      @@ -515,10 +687,11 @@

      Main Changes

    • .c : cast uint32_t
  • Modified intensively timeServer.c
  • -
  • new low layer interfacing Cube HAL (hw_rtc.c, hw_gpio.c and hw_spi.c)
  • +
  • new low layer interfacing Cube HAL (hw_rtc.c, hw_gpio.c and +hw_spi.c)
  • added lora.c as an interface layer to ease product integration
-

Known limitations:

+

Known limitations:

None

@@ -527,8 +700,12 @@

Known limitations: