Skip to content

Commit

Permalink
Merge branch 'release/v4.3.2'
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel Jäckle committed Apr 19, 2017
2 parents 4f367e2 + 1bb48e5 commit e506c24
Show file tree
Hide file tree
Showing 31 changed files with 612 additions and 274 deletions.
19 changes: 19 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,25 @@ not of a bootloader and the radio frequency band to be used.

6. Changelog
-------------
2017-04-19, V4.3.2
* General (Last release based on LoRaWAN specification 1.0.1)
1. This version has passed EU868 and US915 LoRa-Alliance compliance tests.
2. GitHub reported issues corrections.
3. Added an algorithm to automatically compute the Rx windows parameters. (Window symbolTimeout and Offset from downlink expected time)
4. Added a workaround to reset the radio in case a TxTimeout occurs.
5. Modified FSK modem handling to use the provided symbolTimeout (1 symbol equals 1 byte) when in RxSingle mode.
6. Added newly defined TxCw(Tx Continuous Wave) certification protocol command.
7. Added a fix for an overflow issue that could happen with NmeaStringSize variable.
8. Improved GpioMcuInit function to first configure the output pin state before activating the pin.

* LoRaWAN
1. GitHub reported issues corrections.
2. Changed the AdrAckCounter handling as expected by the test houses.
3. Fix an issue where the node stopped transmitting.
4. Removed useless LoRaMacPayload buffer.
5. MAC layer indications handling simplification.
6. Relocate parameter settings from ResetMacParameters to the initialization.

2017-02-27, V4.3.1
* General
1. This version has passed EU868 and US915 LoRa-Alliance compliance tests.
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classA/LoRaMote/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classA/MoteII/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classA/NAMote72/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classA/SK-iM880A/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classA/SensorNode/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classB/LoRaMote/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classB/MoteII/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classB/NAMote72/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classB/SK-iM880A/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classB/SensorNode/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classC/LoRaMote/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classC/MoteII/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classC/NAMote72/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classC/SK-iM880A/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
9 changes: 9 additions & 0 deletions src/apps/LoRaMac/classC/SensorNode/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,15 @@ static void McpsIndication( McpsIndication_t *mcpsIndication )
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
LoRaMacMlmeRequest( &mlmeReq );
}
else if( mcpsIndication->BufferSize == 7 )
{
MlmeReq_t mlmeReq;
mlmeReq.Type = MLME_TXCW_1;
mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] );
mlmeReq.Req.TxCw.Frequency = ( uint32_t )( ( mcpsIndication->Buffer[3] << 16 ) | ( mcpsIndication->Buffer[4] << 8 ) | mcpsIndication->Buffer[5] ) * 100;
mlmeReq.Req.TxCw.Power = mcpsIndication->Buffer[6];
LoRaMacMlmeRequest( &mlmeReq );
}
ComplianceTest.State = 1;
}
break;
Expand Down
4 changes: 2 additions & 2 deletions src/boards/LoRaMote/gpio-board.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,13 @@ void GpioMcuInit( Gpio_t *obj, PinNames pin, PinModes mode, PinConfigs config, P
}
}

HAL_GPIO_Init( obj->port, &GPIO_InitStructure );

// Sets initial output value
if( mode == PIN_OUTPUT )
{
GpioMcuWrite( obj, value );
}

HAL_GPIO_Init( obj->port, &GPIO_InitStructure );
}

void GpioMcuSetInterrupt( Gpio_t *obj, IrqModes irqMode, IrqPriorities irqPriority, GpioIrqHandler *irqHandler )
Expand Down
4 changes: 2 additions & 2 deletions src/boards/LoRaMote/gps-board.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ void GpsMcuIrqNotify( UartNotifyId_t id )
{
if( UartGetChar( &Uart1, &data ) == 0 )
{
if( ( data == '$' ) || ( NmeaStringSize >= 128 ) )
if( ( data == '$' ) || ( NmeaStringSize >= 127 ) )
{
NmeaStringSize = 0;
}
Expand All @@ -112,7 +112,7 @@ void GpsMcuIrqNotify( UartNotifyId_t id )

if( data == '\n' )
{
NmeaString[NmeaStringSize] = '\0';
NmeaString[NmeaStringSize++] = '\0';
GpsParseGpsData( ( int8_t* )NmeaString, NmeaStringSize );
UartDeInit( &Uart1 );
BlockLowPowerDuringTask ( false );
Expand Down
4 changes: 2 additions & 2 deletions src/boards/MoteII/gpio-board.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,13 @@ void GpioMcuInit( Gpio_t *obj, PinNames pin, PinModes mode, PinConfigs config, P
}
}

HAL_GPIO_Init( obj->port, &GPIO_InitStructure );

// Sets initial output value
if( mode == PIN_OUTPUT )
{
GpioMcuWrite( obj, value );
}

HAL_GPIO_Init( obj->port, &GPIO_InitStructure );
}

void GpioMcuSetInterrupt( Gpio_t *obj, IrqModes irqMode, IrqPriorities irqPriority, GpioIrqHandler *irqHandler )
Expand Down
Loading

0 comments on commit e506c24

Please sign in to comment.