LoRa on Multitech with Semtech mote

Dependencies:   LoRaWAN-lib SX1272Lib lib_gps lib_mma8451q lib_mpl3115a2 mbed

Fork of LoRaWAN-NAMote72-Application-Demo_Multitech by Nagaraj Krishnamurthy

Committer:
ubhat
Date:
Fri Jul 29 05:04:03 2016 +0000
Revision:
10:7f990e019807
Parent:
0:69f2e28d12c1
Child:
11:d91e8e471ad0
Compliance Test update (add test mode 0x06)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ubhat 0:69f2e28d12c1 1 /*
ubhat 0:69f2e28d12c1 2 / _____) _ | |
ubhat 0:69f2e28d12c1 3 ( (____ _____ ____ _| |_ _____ ____| |__
ubhat 0:69f2e28d12c1 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
ubhat 0:69f2e28d12c1 5 _____) ) ____| | | || |_| ____( (___| | | |
ubhat 0:69f2e28d12c1 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
ubhat 0:69f2e28d12c1 7 (C)2015 Semtech
ubhat 0:69f2e28d12c1 8
ubhat 0:69f2e28d12c1 9 Description: Compliance Test for LoRaWAN End-Device
ubhat 0:69f2e28d12c1 10
ubhat 0:69f2e28d12c1 11 License: Revised BSD License, see LICENSE.TXT file include in the project
ubhat 0:69f2e28d12c1 12
ubhat 0:69f2e28d12c1 13 Maintainer: Uttam Bhat
ubhat 0:69f2e28d12c1 14 */
ubhat 0:69f2e28d12c1 15
ubhat 0:69f2e28d12c1 16 #include "ComplianceTest.h"
ubhat 10:7f990e019807 17 #include "LoRaDeviceStateProc.h"
ubhat 0:69f2e28d12c1 18
ubhat 0:69f2e28d12c1 19
ubhat 0:69f2e28d12c1 20 void PrepareComplianceTestFrame( McpsIndication_t *McpsIndication )
ubhat 0:69f2e28d12c1 21 {
ubhat 0:69f2e28d12c1 22 uint8_t *pData;
ubhat 0:69f2e28d12c1 23
ubhat 0:69f2e28d12c1 24 pData = &McpsIndication->Buffer[0];
ubhat 0:69f2e28d12c1 25
ubhat 0:69f2e28d12c1 26 if( ComplianceTest.Running == false )
ubhat 0:69f2e28d12c1 27 {
ubhat 0:69f2e28d12c1 28 // Check compliance test enable command (i)
ubhat 0:69f2e28d12c1 29 if( ( McpsIndication->BufferSize == 4 ) &&
ubhat 0:69f2e28d12c1 30 ( pData[0] == 0x01 ) && ( pData[1] == 0x01 ) && ( pData[2] == 0x01 ) && (pData[3] == 0x01 ) )
ubhat 0:69f2e28d12c1 31 {
ubhat 0:69f2e28d12c1 32 AppPort = 224;
ubhat 0:69f2e28d12c1 33 AppDataSize = 2;
ubhat 0:69f2e28d12c1 34 ComplianceTest.DownLinkCounter = 0;
ubhat 0:69f2e28d12c1 35 ComplianceTest.LinkCheck = false;
ubhat 0:69f2e28d12c1 36 ComplianceTest.DemodMargin = 0;
ubhat 0:69f2e28d12c1 37 ComplianceTest.NbGateways = 0;
ubhat 0:69f2e28d12c1 38 ComplianceTest.Running = true;
ubhat 0:69f2e28d12c1 39 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 40 }
ubhat 0:69f2e28d12c1 41 }
ubhat 0:69f2e28d12c1 42 else
ubhat 0:69f2e28d12c1 43 {
ubhat 0:69f2e28d12c1 44 ComplianceTest.State = pData[0];
ubhat 0:69f2e28d12c1 45 switch( ComplianceTest.State )
ubhat 0:69f2e28d12c1 46 {
ubhat 0:69f2e28d12c1 47 case 0: // Check compliance test disable command (ii)
ubhat 0:69f2e28d12c1 48 IsTxConfirmed = LORAWAN_CONFIRMED_MSG_ON;
ubhat 0:69f2e28d12c1 49 AppPort = LORAWAN_APP_PORT;
ubhat 0:69f2e28d12c1 50 AppDataSize = LORAWAN_APP_DATA_SIZE;
ubhat 0:69f2e28d12c1 51 ComplianceTest.DownLinkCounter = 0;
ubhat 0:69f2e28d12c1 52 ComplianceTest.Running = false;
ubhat 0:69f2e28d12c1 53
ubhat 0:69f2e28d12c1 54 MibRequestConfirm_t mibReq;
ubhat 0:69f2e28d12c1 55 mibReq.Type = MIB_ADR;
ubhat 0:69f2e28d12c1 56 mibReq.Param.AdrEnable = LORAWAN_ADR_ON;
ubhat 0:69f2e28d12c1 57 LoRaMacMibSetRequestConfirm( &mibReq );
ubhat 0:69f2e28d12c1 58 break;
ubhat 0:69f2e28d12c1 59 case 1: // (iii, iv)
ubhat 0:69f2e28d12c1 60 AppDataSize = 2;
ubhat 0:69f2e28d12c1 61 break;
ubhat 0:69f2e28d12c1 62 case 2: // Enable confirmed messages (v)
ubhat 0:69f2e28d12c1 63 IsTxConfirmed = true;
ubhat 0:69f2e28d12c1 64 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 65 break;
ubhat 0:69f2e28d12c1 66 case 3: // Disable confirmed messages (vi)
ubhat 0:69f2e28d12c1 67 IsTxConfirmed = false;
ubhat 0:69f2e28d12c1 68 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 69 break;
ubhat 0:69f2e28d12c1 70 case 4: // (vii)
ubhat 0:69f2e28d12c1 71 AppDataSize = McpsIndication->BufferSize;
ubhat 0:69f2e28d12c1 72
ubhat 0:69f2e28d12c1 73 AppData[0] = 4;
ubhat 0:69f2e28d12c1 74 for( uint8_t i = 1; i < AppDataSize; i++ )
ubhat 0:69f2e28d12c1 75 {
ubhat 0:69f2e28d12c1 76 AppData[i] = McpsIndication->Buffer[i] + 1;
ubhat 0:69f2e28d12c1 77 }
ubhat 0:69f2e28d12c1 78 break;
ubhat 0:69f2e28d12c1 79 case 5: // (viii)
ubhat 0:69f2e28d12c1 80 {
ubhat 0:69f2e28d12c1 81 MlmeReq_t mlmeReq;
ubhat 0:69f2e28d12c1 82 mlmeReq.Type = MLME_LINK_CHECK;
ubhat 0:69f2e28d12c1 83 LoRaMacMlmeRequest( &mlmeReq );
ubhat 0:69f2e28d12c1 84 }
ubhat 0:69f2e28d12c1 85 break;
ubhat 10:7f990e019807 86 case 6: // (ix)
ubhat 10:7f990e019807 87 {
ubhat 10:7f990e019807 88 /*
ubhat 10:7f990e019807 89 MlmeReq_t mlmeReq;
ubhat 10:7f990e019807 90
ubhat 10:7f990e019807 91 mlmeReq.Type = MLME_JOIN;
ubhat 10:7f990e019807 92
ubhat 10:7f990e019807 93 mlmeReq.Req.Join.DevEui = DevEui;
ubhat 10:7f990e019807 94 mlmeReq.Req.Join.AppEui = AppEui;
ubhat 10:7f990e019807 95 mlmeReq.Req.Join.AppKey = AppKey;
ubhat 10:7f990e019807 96
ubhat 10:7f990e019807 97 LoRaMacMlmeRequest( &mlmeReq );
ubhat 10:7f990e019807 98 */
ubhat 10:7f990e019807 99
ubhat 10:7f990e019807 100 IsTxConfirmed = LORAWAN_CONFIRMED_MSG_ON;
ubhat 10:7f990e019807 101 AppPort = LORAWAN_APP_PORT;
ubhat 10:7f990e019807 102 AppDataSize = LORAWAN_APP_DATA_SIZE;
ubhat 10:7f990e019807 103 ComplianceTest.DownLinkCounter = 0;
ubhat 10:7f990e019807 104 ComplianceTest.Running = false;
ubhat 10:7f990e019807 105
ubhat 10:7f990e019807 106 MibRequestConfirm_t mibReq;
ubhat 10:7f990e019807 107 mibReq.Type = MIB_ADR;
ubhat 10:7f990e019807 108 mibReq.Param.AdrEnable = LORAWAN_ADR_ON;
ubhat 10:7f990e019807 109 LoRaMacMibSetRequestConfirm( &mibReq );
ubhat 10:7f990e019807 110 DeviceState = DEVICE_STATE_INIT;
ubhat 10:7f990e019807 111 }
ubhat 10:7f990e019807 112 break;
ubhat 0:69f2e28d12c1 113 default:
ubhat 0:69f2e28d12c1 114 break;
ubhat 0:69f2e28d12c1 115 }
ubhat 0:69f2e28d12c1 116 }
ubhat 0:69f2e28d12c1 117 }
ubhat 0:69f2e28d12c1 118
ubhat 0:69f2e28d12c1 119 void RunComplianceTest( void )
ubhat 0:69f2e28d12c1 120 {
ubhat 0:69f2e28d12c1 121 if( ComplianceTest.LinkCheck == true )
ubhat 0:69f2e28d12c1 122 {
ubhat 0:69f2e28d12c1 123 ComplianceTest.LinkCheck = false;
ubhat 0:69f2e28d12c1 124 AppDataSize = 3;
ubhat 0:69f2e28d12c1 125 AppData[0] = 5;
ubhat 0:69f2e28d12c1 126 AppData[1] = ComplianceTest.DemodMargin;
ubhat 0:69f2e28d12c1 127 AppData[2] = ComplianceTest.NbGateways;
ubhat 0:69f2e28d12c1 128 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 129 }
ubhat 0:69f2e28d12c1 130 else
ubhat 0:69f2e28d12c1 131 {
ubhat 0:69f2e28d12c1 132 switch( ComplianceTest.State )
ubhat 0:69f2e28d12c1 133 {
ubhat 0:69f2e28d12c1 134 case 1:
ubhat 0:69f2e28d12c1 135 AppDataSize = 2;
ubhat 0:69f2e28d12c1 136 AppData[0] = ComplianceTest.DownLinkCounter >> 8;
ubhat 0:69f2e28d12c1 137 AppData[1] = ComplianceTest.DownLinkCounter;
ubhat 0:69f2e28d12c1 138 break;
ubhat 0:69f2e28d12c1 139
ubhat 0:69f2e28d12c1 140 case 4:
ubhat 0:69f2e28d12c1 141 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 142 break;
ubhat 0:69f2e28d12c1 143 }
ubhat 0:69f2e28d12c1 144 }
ubhat 0:69f2e28d12c1 145 }