Fork of Semtech LoRaWAN stack
Fork of LoRaWAN-lib by
Diff: LoRaMac.cpp
- Branch:
- v4.2.0
- Revision:
- 28:307e6c4831ad
- Parent:
- 26:4627985dc5be
- Child:
- 29:c7583fcfad8c
--- a/LoRaMac.cpp Wed Nov 09 06:05:41 2016 +0000
+++ b/LoRaMac.cpp Thu Nov 17 14:02:14 2016 +0000
@@ -1213,8 +1213,6 @@
McpsConfirm.Status = LORAMAC_EVENT_INFO_STATUS_OK;
- AdrAckCounter = 0;
-
// Update 32 bits downlink counter
if( multicast == 1 )
{
@@ -1260,8 +1258,7 @@
}
DownLinkCounter = downLinkCounter;
}
-
-
+
if( ( ( size - 4 ) - appPayloadStartIndex ) > 0 )
{
port = payload[appPayloadStartIndex++];
@@ -1450,6 +1447,7 @@
{
TimerStop( &MacStateCheckTimer );
bool txTimeout = false;
+ bool txDone = false;
if( LoRaMacFlags.Bits.MacDone == 1 )
{
@@ -1493,12 +1491,7 @@
{
ChannelsNbRepCounter = 0;
- AdrAckCounter++;
- if( IsUpLinkCounterFixed == false )
- {
- UpLinkCounter++;
- }
-
+ txDone = true;
LoRaMacState &= ~MAC_TX_RUNNING;
}
else
@@ -1516,10 +1509,7 @@
{
AckTimeoutRetry = false;
NodeAckRequested = false;
- if( IsUpLinkCounterFixed == false )
- {
- UpLinkCounter++;
- }
+ txDone = true;
McpsConfirm.NbRetries = AckTimeoutRetriesCounter;
LoRaMacState &= ~MAC_TX_RUNNING;
@@ -1560,18 +1550,32 @@
NodeAckRequested = false;
McpsConfirm.AckReceived = false;
McpsConfirm.NbRetries = AckTimeoutRetriesCounter;
- if( IsUpLinkCounterFixed == false )
- {
- UpLinkCounter++;
- }
+ txDone = true;
}
}
+
+ // Update uplink counter
+ if( ( txDone == true ) && ( IsUpLinkCounterFixed == false ) )
+ {
+ UpLinkCounter++;
+
+ // Reset AdrAckCounter if downlink received
+ if( ( LoRaMacFlags.Bits.McpsInd == 1 ) || ( UpLinkCounter == 1 ) )
+ {
+ AdrAckCounter = 0;
+ }
+ else
+ {
+ AdrAckCounter++;
+ }
+ }
}
// Handle reception for Class B and Class C
if( ( LoRaMacState & MAC_RX ) == MAC_RX )
{
LoRaMacState &= ~MAC_RX;
}
+
if( LoRaMacState == MAC_IDLE )
{
if( LoRaMacFlags.Bits.McpsReq == 1 )
@@ -1585,7 +1589,7 @@
LoRaMacPrimitives->MacMlmeConfirm( &MlmeConfirm );
LoRaMacFlags.Bits.MlmeReq = 0;
}
-
+
LoRaMacFlags.Bits.MacDone = 0;
}
else
@@ -2320,6 +2324,7 @@
datarate = DR_4;
else
datarate--;
+
}
else if( isTx == true )
{
@@ -4066,6 +4071,7 @@
{
readyToSend = true;
AckTimeoutRetries = 1;
+ AckTimeoutRetriesCounter = 1;
macHdr.Bits.MType = FRAME_TYPE_DATA_UNCONFIRMED_UP;
fPort = mcpsRequest->Req.Unconfirmed.fPort;


