Fork of Semtech LoRaWAN stack
Fork of LoRaWAN-lib by
Diff: LoRaMac.cpp
- Branch:
- v4.2.0
- Revision:
- 14:60c5d589a070
- Parent:
- 13:90a55bd536a1
- Child:
- 15:167ad88b7272
--- a/LoRaMac.cpp Mon Aug 29 16:41:53 2016 -0400
+++ b/LoRaMac.cpp Tue Sep 06 11:02:17 2016 +0000
@@ -15,7 +15,7 @@
License: Revised BSD License, see LICENSE.TXT file include in the project
-Maintainer: Miguel Luis ( Semtech ), Gregory Cristian ( Semtech ) and Daniel Jäckle ( STACKFORCE )
+Maintainer: Miguel Luis ( Semtech ), Gregory Cristian ( Semtech ) and Daniel Jäckle ( STACKFORCE )
*/
#include "board.h"
@@ -1760,21 +1760,32 @@
uint8_t curBlock = (block + i) % 8;
uint8_t chMask;
- // Cycle through all blocks before using a previously used block
- if( ( JoinBlocksRemaining == 0 ) || ( ( JoinBlocksRemaining & ( 1 << curBlock ) ) != 0) )
+ // Cycle through all blocks before using a previously used block
+ if( ( ( JoinBlocksRemaining & ( 1 << curBlock ) ) != 0) )
{
chMask = ( ChannelsMaskRemaining[curBlock/2] >> ( curBlock & 1 ? 8 : 0 ) ) & 0xff;
if( chMask != 0)
{
channel = randr(0, 7);
for(uint8_t i = 0; ( i < 8 ); i++)
- {
+ {
if( ( chMask & ( 1 << channel ) ) != 0 )
{
+ uint16_t chMaskTmp = ( 1 << channel );
+ chMaskTmp = chMaskTmp << ( curBlock & 1 ? 8 : 0 );
channel = channel + ( curBlock * 8 );
- JoinBlocksRemaining &= ~(1 << curBlock);
+ JoinBlocksRemaining &= ~(1 << curBlock);
+ ChannelsMaskRemaining[curBlock/2] &= ~chMaskTmp;
+ if( ( JoinBlocksRemaining == 0 ) )
+ {
+ JoinBlocksRemaining = 0xFF;
+ }
break;
}
+ else
+ {
+ channel = ( channel + 1 ) % 8;
+ }
}
}
}
@@ -1795,11 +1806,15 @@
for(i = 0; i < 8; i++)
{
uint8_t curChannel = (channel + i) % 8;
-
- if( ( Join500KHzRemaining == 0 ) || ( ( Join500KHzRemaining & ( 1 << curChannel ) ) != 0 ) )
+
+ if( ( ( Join500KHzRemaining & ( 1 << curChannel ) ) != 0 ) )
{
+ Join500KHzRemaining &= ~(1 << curChannel);
channel = 64 + curChannel;
- Join500KHzRemaining &= ~(1 << channel);
+ if( ( Join500KHzRemaining == 0 ) )
+ {
+ Join500KHzRemaining = 0xFF;
+ }
break;
}
}
@@ -1920,7 +1935,7 @@
delayTx++;
nextTxDelay = AggregatedTimeOff - TimerGetElapsedTime( AggregatedLastTxDoneTime );
}
-
+
if( nbEnabledChannels > 0 )
{
#if defined( USE_BAND_915 )
@@ -2976,7 +2991,7 @@
McpsConfirm.TxPower = txPowerIndex;
Radio.SetChannel( channel.Frequency );
-
+
#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 )
if( ChannelsDatarate == DR_7 )
{ // High Speed FSK channel


