Lora_with_GPS integration code - program hangs after a few transmissions
Dependencies: mbed LoRaWAN-lib SingleFrequencyLora
Fork of simple-demo-76_revised_20171113 by
Diff: app/main.cpp
- Revision:
- 9:ee9dcbb9708d
- Parent:
- 7:3173f0508a98
- Child:
- 10:9364ab3a08eb
--- a/app/main.cpp Tue Apr 04 13:43:31 2017 +0000 +++ b/app/main.cpp Mon Apr 24 13:38:31 2017 +0000 @@ -17,19 +17,19 @@ #include "radio.h" #include "LoRaMac.h" -#include "Comissioning.h" +#include "Commissioning.h" #include "SerialDisplay.h" /*! - * Defines the application data transmission duty cycle. 5s, value in [us]. + * Defines the application data transmission duty cycle. 5s, value in [ms]. */ -#define APP_TX_DUTYCYCLE 5000000 +#define APP_TX_DUTYCYCLE 5000 /*! * Defines a random delay for application data transmission duty cycle. 1s, - * value in [us]. + * value in [ms]. */ -#define APP_TX_DUTYCYCLE_RND 1000000 +#define APP_TX_DUTYCYCLE_RND 1000 /*! * Default datarate @@ -57,11 +57,11 @@ * * \remark Please note that ETSI mandates duty cycled transmissions. Use only for test purposes */ -#define LORAWAN_DUTYCYCLE_ON true +#define LORAWAN_DUTYCYCLE_ON false #define USE_SEMTECH_DEFAULT_CHANNEL_LINEUP 1 -#if( USE_SEMTECH_DEFAULT_CHANNEL_LINEUP == 1 ) +#if( USE_SEMTECH_DEFAULT_CHANNEL_LINEUP == 1 ) #define LC4 { 867100000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 } #define LC5 { 867300000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 } @@ -168,7 +168,7 @@ /*! * Device states */ -static enum eDevicState +static enum eDeviceState { DEVICE_STATE_INIT, DEVICE_STATE_JOIN, @@ -340,7 +340,7 @@ { McpsReq_t mcpsReq; LoRaMacTxInfo_t txInfo; - + if( LoRaMacQueryTxPossible( AppDataSize, &txInfo ) != LORAMAC_STATUS_OK ) { // Send empty frame in order to flush MAC commands @@ -583,7 +583,7 @@ ComplianceTest.NbGateways = 0; ComplianceTest.Running = true; ComplianceTest.State = 1; - + MibRequestConfirm_t mibReq; mibReq.Type = MIB_ADR; mibReq.Param.AdrEnable = true; @@ -605,7 +605,7 @@ AppDataSize = LORAWAN_APP_DATA_SIZE; ComplianceTest.DownLinkCounter = 0; ComplianceTest.Running = false; - + MibRequestConfirm_t mibReq; mibReq.Type = MIB_ADR; mibReq.Param.AdrEnable = LORAWAN_ADR_ON; @@ -645,16 +645,53 @@ { MlmeReq_t mlmeReq; + // Disable TestMode and revert back to normal operation + IsTxConfirmed = LORAWAN_CONFIRMED_MSG_ON; + AppPort = LORAWAN_APP_PORT; + AppDataSize = LORAWAN_APP_DATA_SIZE; + ComplianceTest.DownLinkCounter = 0; + ComplianceTest.Running = false; + + MibRequestConfirm_t mibReq; + mibReq.Type = MIB_ADR; + mibReq.Param.AdrEnable = LORAWAN_ADR_ON; + LoRaMacMibSetRequestConfirm( &mibReq ); +#if defined( USE_BAND_868 ) + LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON ); +#endif + mlmeReq.Type = MLME_JOIN; mlmeReq.Req.Join.DevEui = DevEui; mlmeReq.Req.Join.AppEui = AppEui; mlmeReq.Req.Join.AppKey = AppKey; + mlmeReq.Req.Join.NbTrials = 3; LoRaMacMlmeRequest( &mlmeReq ); DeviceState = DEVICE_STATE_SLEEP; } break; + case 7: // (x) + { + if( mcpsIndication->BufferSize == 3 ) + { + MlmeReq_t mlmeReq; + mlmeReq.Type = MLME_TXCW; + 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; default: break; } @@ -680,19 +717,26 @@ */ static void MlmeConfirm( MlmeConfirm_t *mlmeConfirm ) { - if( mlmeConfirm->Status == LORAMAC_EVENT_INFO_STATUS_OK ) + switch( mlmeConfirm->MlmeRequest ) { - switch( mlmeConfirm->MlmeRequest ) + case MLME_JOIN: { - case MLME_JOIN: + if( mlmeConfirm->Status == LORAMAC_EVENT_INFO_STATUS_OK ) { // Status is OK, node has joined the network IsNetworkJoinedStatusUpdate = true; DeviceState = DEVICE_STATE_SEND; - NextTx = true; - break; + } + else + { + // Join was not successful. Try to join again + DeviceState = DEVICE_STATE_JOIN; } - case MLME_LINK_CHECK: + break; + } + case MLME_LINK_CHECK: + { + if( mlmeConfirm->Status == LORAMAC_EVENT_INFO_STATUS_OK ) { // Check DemodMargin // Check NbGateways @@ -702,11 +746,11 @@ ComplianceTest.DemodMargin = mlmeConfirm->DemodMargin; ComplianceTest.NbGateways = mlmeConfirm->NbGateways; } - break; } - default: - break; + break; } + default: + break; } NextTx = true; UplinkStatusUpdated = true; @@ -787,10 +831,10 @@ TimerInit( &TxNextPacketTimer, OnTxNextPacketTimerEvent ); TimerInit( &Led1Timer, OnLed1TimerEvent ); - TimerSetValue( &Led1Timer, 25000 ); + TimerSetValue( &Led1Timer, 25 ); TimerInit( &Led2Timer, OnLed2TimerEvent ); - TimerSetValue( &Led2Timer, 25000 ); + TimerSetValue( &Led2Timer, 25 ); mibReq.Type = MIB_ADR; mibReq.Param.AdrEnable = LORAWAN_ADR_ON; @@ -804,7 +848,7 @@ LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON ); SerialDisplayUpdateDutyCycle( LORAWAN_DUTYCYCLE_ON ); -#if( USE_SEMTECH_DEFAULT_CHANNEL_LINEUP == 1 ) +#if( USE_SEMTECH_DEFAULT_CHANNEL_LINEUP == 1 ) LoRaMacChannelAdd( 3, ( ChannelParams_t )LC4 ); LoRaMacChannelAdd( 4, ( ChannelParams_t )LC5 ); LoRaMacChannelAdd( 5, ( ChannelParams_t )LC6 ); @@ -813,6 +857,10 @@ LoRaMacChannelAdd( 8, ( ChannelParams_t )LC9 ); LoRaMacChannelAdd( 9, ( ChannelParams_t )LC10 ); + mibReq.Type = MIB_RX2_DEFAULT_CHANNEL; + mibReq.Param.Rx2DefaultChannel = ( Rx2ChannelParams_t ){ 869525000, DR_3 }; + LoRaMacMibSetRequestConfirm( &mibReq ); + mibReq.Type = MIB_RX2_CHANNEL; mibReq.Param.Rx2Channel = ( Rx2ChannelParams_t ){ 869525000, DR_3 }; LoRaMacMibSetRequestConfirm( &mibReq ); @@ -883,7 +931,7 @@ if( ComplianceTest.Running == true ) { // Schedule next packet transmission - TxDutyCycleTime = 5000000; // 5000000 us + TxDutyCycleTime = 5000; // 5000 ms } else {