Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed LoRaWAN-lib
Diff: app/main.cpp
- Revision:
- 9:ee9dcbb9708d
- Parent:
- 7:3173f0508a98
- Child:
- 10:4e528716aa7a
diff -r 8d6f486e1a7d -r ee9dcbb9708d app/main.cpp
--- 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
{