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: LoRaWAN-lib mbed lib_mpl3115a2 lib_mma8451q lib_gps SX1272Lib
Dependents: LoRaWAN-NAMote72-BVS-confirmed-tester-0-7v1_copy
ComplianceTest.cpp
00001 /* 00002 / _____) _ | | 00003 ( (____ _____ ____ _| |_ _____ ____| |__ 00004 \____ \| ___ | (_ _) ___ |/ ___) _ \ 00005 _____) ) ____| | | || |_| ____( (___| | | | 00006 (______/|_____)_|_|_| \__)_____)\____)_| |_| 00007 (C)2015 Semtech 00008 00009 Description: Compliance Test for LoRaWAN End-Device 00010 00011 License: Revised BSD License, see LICENSE.TXT file include in the project 00012 00013 Maintainer: Uttam Bhat 00014 */ 00015 00016 #include "ComplianceTest.h" 00017 00018 00019 void PrepareComplianceTestFrame( McpsIndication_t *mcpsIndication ) 00020 { 00021 uint8_t *pData; 00022 00023 pData = &mcpsIndication->Buffer[0]; 00024 00025 if( ComplianceTest.Running == false ) 00026 { 00027 // Check compliance test enable command (i) 00028 if( ( mcpsIndication->BufferSize == 4 ) && 00029 ( pData[0] == 0x01 ) && ( pData[1] == 0x01 ) && ( pData[2] == 0x01 ) && (pData[3] == 0x01 ) ) 00030 { 00031 IsTxConfirmed = false; 00032 AppPort = 224; 00033 AppDataSize = 2; 00034 ComplianceTest.DownLinkCounter = 0; 00035 ComplianceTest.LinkCheck = false; 00036 ComplianceTest.DemodMargin = 0; 00037 ComplianceTest.NbGateways = 0; 00038 ComplianceTest.Running = true; 00039 ComplianceTest.State = 1; 00040 00041 MibRequestConfirm_t mibReq; 00042 mibReq.Type = MIB_ADR; 00043 mibReq.Param.AdrEnable = true; 00044 LoRaMacMibSetRequestConfirm( &mibReq ); 00045 00046 Gps.enable( false ); 00047 } 00048 } 00049 else 00050 { 00051 ComplianceTest.State = pData[0]; 00052 switch( ComplianceTest.State ) 00053 { 00054 case 0: // Check compliance test disable command (ii) 00055 DisableComplianceTest( ); 00056 break; 00057 case 1: // (iii, iv) 00058 AppDataSize = 2; 00059 break; 00060 case 2: // Enable confirmed messages (v) 00061 IsTxConfirmed = true; 00062 ComplianceTest.State = 1; 00063 break; 00064 case 3: // Disable confirmed messages (vi) 00065 IsTxConfirmed = false; 00066 ComplianceTest.State = 1; 00067 break; 00068 case 4: // (vii) 00069 AppDataSize = mcpsIndication->BufferSize; 00070 00071 if( AppDataSize > LORAWAN_APP_DATA_MAX_SIZE ) 00072 AppDataSize = LORAWAN_APP_DATA_MAX_SIZE; 00073 00074 AppData[0] = 4; 00075 for( uint8_t i = 1; i < AppDataSize; i++ ) 00076 { 00077 AppData[i] = mcpsIndication->Buffer[i] + 1; 00078 } 00079 break; 00080 case 5: // (viii) 00081 { 00082 MlmeReq_t mlmeReq; 00083 mlmeReq.Type = MLME_LINK_CHECK; 00084 LoRaMacMlmeRequest( &mlmeReq ); 00085 } 00086 break; 00087 case 6: // (viii) 00088 { 00089 MlmeReq_t mlmeReq; 00090 00091 Otaa = true; 00092 00093 mlmeReq.Type = MLME_JOIN; 00094 00095 mlmeReq.Req.Join.DevEui = DevEui; 00096 mlmeReq.Req.Join.AppEui = AppEui; 00097 mlmeReq.Req.Join.AppKey = AppKey; 00098 mlmeReq.Req.Join.NbTrials = 3; 00099 00100 LoRaMacMlmeRequest( &mlmeReq ); 00101 00102 Gps.enable( true ); 00103 DeviceState = DEVICE_STATE_SLEEP; 00104 } 00105 break; 00106 case 7: // (x) 00107 { 00108 if( mcpsIndication->BufferSize == 3 ) 00109 { 00110 MlmeReq_t mlmeReq; 00111 mlmeReq.Type = MLME_TXCW; 00112 mlmeReq.Req.TxCw.Timeout = ( uint16_t )( ( mcpsIndication->Buffer[1] << 8 ) | mcpsIndication->Buffer[2] ); 00113 LoRaMacMlmeRequest( &mlmeReq ); 00114 } 00115 ComplianceTest.State = 1; 00116 } 00117 break; 00118 default: 00119 break; 00120 } 00121 } 00122 } 00123 00124 void RunComplianceTest( void ) 00125 { 00126 if( ComplianceTest.LinkCheck == true ) 00127 { 00128 ComplianceTest.LinkCheck = false; 00129 AppDataSize = 3; 00130 AppData[0] = 5; 00131 AppData[1] = ComplianceTest.DemodMargin; 00132 AppData[2] = ComplianceTest.NbGateways; 00133 ComplianceTest.State = 1; 00134 } 00135 else 00136 { 00137 switch( ComplianceTest.State ) 00138 { 00139 case 1: 00140 AppDataSize = 2; 00141 AppData[0] = ComplianceTest.DownLinkCounter >> 8; 00142 AppData[1] = ComplianceTest.DownLinkCounter; 00143 break; 00144 case 4: 00145 ComplianceTest.State = 1; 00146 break; 00147 default: 00148 break; 00149 } 00150 } 00151 } 00152 00153 void DisableComplianceTest( void ) 00154 { 00155 IsTxConfirmed = LORAWAN_CONFIRMED_MSG_ON; 00156 AppPort = LORAWAN_APP_PORT; 00157 AppDataSize = LORAWAN_APP_DATA_SIZE; 00158 ComplianceTest.DownLinkCounter = 0; 00159 ComplianceTest.Running = false; 00160 00161 MibRequestConfirm_t mibReq; 00162 mibReq.Type = MIB_ADR; 00163 mibReq.Param.AdrEnable = LORAWAN_ADR_ON; 00164 LoRaMacMibSetRequestConfirm( &mibReq ); 00165 00166 Gps.enable( true ); 00167 }
Generated on Fri Jul 15 2022 22:53:35 by
