Sensor Demo for CTIA

Dependencies:   LoRaWAN-lib SX1272Lib lib_gps lib_mma8451q lib_mpl3115a2 mbed

Fork of LoRaWAN-NAMote72-Application-Demo by Semtech

Committer:
ubhat
Date:
Tue May 17 00:21:55 2016 +0000
Revision:
0:69f2e28d12c1
Child:
10:7f990e019807
Project for LoRa Bootcamp

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 0:69f2e28d12c1 17
ubhat 0:69f2e28d12c1 18
ubhat 0:69f2e28d12c1 19 void PrepareComplianceTestFrame( McpsIndication_t *McpsIndication )
ubhat 0:69f2e28d12c1 20 {
ubhat 0:69f2e28d12c1 21 uint8_t *pData;
ubhat 0:69f2e28d12c1 22
ubhat 0:69f2e28d12c1 23 pData = &McpsIndication->Buffer[0];
ubhat 0:69f2e28d12c1 24
ubhat 0:69f2e28d12c1 25 if( ComplianceTest.Running == false )
ubhat 0:69f2e28d12c1 26 {
ubhat 0:69f2e28d12c1 27 // Check compliance test enable command (i)
ubhat 0:69f2e28d12c1 28 if( ( McpsIndication->BufferSize == 4 ) &&
ubhat 0:69f2e28d12c1 29 ( pData[0] == 0x01 ) && ( pData[1] == 0x01 ) && ( pData[2] == 0x01 ) && (pData[3] == 0x01 ) )
ubhat 0:69f2e28d12c1 30 {
ubhat 0:69f2e28d12c1 31 AppPort = 224;
ubhat 0:69f2e28d12c1 32 AppDataSize = 2;
ubhat 0:69f2e28d12c1 33 ComplianceTest.DownLinkCounter = 0;
ubhat 0:69f2e28d12c1 34 ComplianceTest.LinkCheck = false;
ubhat 0:69f2e28d12c1 35 ComplianceTest.DemodMargin = 0;
ubhat 0:69f2e28d12c1 36 ComplianceTest.NbGateways = 0;
ubhat 0:69f2e28d12c1 37 ComplianceTest.Running = true;
ubhat 0:69f2e28d12c1 38 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 39 }
ubhat 0:69f2e28d12c1 40 }
ubhat 0:69f2e28d12c1 41 else
ubhat 0:69f2e28d12c1 42 {
ubhat 0:69f2e28d12c1 43 ComplianceTest.State = pData[0];
ubhat 0:69f2e28d12c1 44 switch( ComplianceTest.State )
ubhat 0:69f2e28d12c1 45 {
ubhat 0:69f2e28d12c1 46 case 0: // Check compliance test disable command (ii)
ubhat 0:69f2e28d12c1 47 IsTxConfirmed = LORAWAN_CONFIRMED_MSG_ON;
ubhat 0:69f2e28d12c1 48 AppPort = LORAWAN_APP_PORT;
ubhat 0:69f2e28d12c1 49 AppDataSize = LORAWAN_APP_DATA_SIZE;
ubhat 0:69f2e28d12c1 50 ComplianceTest.DownLinkCounter = 0;
ubhat 0:69f2e28d12c1 51 ComplianceTest.Running = false;
ubhat 0:69f2e28d12c1 52
ubhat 0:69f2e28d12c1 53 MibRequestConfirm_t mibReq;
ubhat 0:69f2e28d12c1 54 mibReq.Type = MIB_ADR;
ubhat 0:69f2e28d12c1 55 mibReq.Param.AdrEnable = LORAWAN_ADR_ON;
ubhat 0:69f2e28d12c1 56 LoRaMacMibSetRequestConfirm( &mibReq );
ubhat 0:69f2e28d12c1 57 break;
ubhat 0:69f2e28d12c1 58 case 1: // (iii, iv)
ubhat 0:69f2e28d12c1 59 AppDataSize = 2;
ubhat 0:69f2e28d12c1 60 break;
ubhat 0:69f2e28d12c1 61 case 2: // Enable confirmed messages (v)
ubhat 0:69f2e28d12c1 62 IsTxConfirmed = true;
ubhat 0:69f2e28d12c1 63 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 64 break;
ubhat 0:69f2e28d12c1 65 case 3: // Disable confirmed messages (vi)
ubhat 0:69f2e28d12c1 66 IsTxConfirmed = false;
ubhat 0:69f2e28d12c1 67 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 68 break;
ubhat 0:69f2e28d12c1 69 case 4: // (vii)
ubhat 0:69f2e28d12c1 70 AppDataSize = McpsIndication->BufferSize;
ubhat 0:69f2e28d12c1 71
ubhat 0:69f2e28d12c1 72 AppData[0] = 4;
ubhat 0:69f2e28d12c1 73 for( uint8_t i = 1; i < AppDataSize; i++ )
ubhat 0:69f2e28d12c1 74 {
ubhat 0:69f2e28d12c1 75 AppData[i] = McpsIndication->Buffer[i] + 1;
ubhat 0:69f2e28d12c1 76 }
ubhat 0:69f2e28d12c1 77 break;
ubhat 0:69f2e28d12c1 78 case 5: // (viii)
ubhat 0:69f2e28d12c1 79 {
ubhat 0:69f2e28d12c1 80 MlmeReq_t mlmeReq;
ubhat 0:69f2e28d12c1 81 mlmeReq.Type = MLME_LINK_CHECK;
ubhat 0:69f2e28d12c1 82 LoRaMacMlmeRequest( &mlmeReq );
ubhat 0:69f2e28d12c1 83 }
ubhat 0:69f2e28d12c1 84 break;
ubhat 0:69f2e28d12c1 85 default:
ubhat 0:69f2e28d12c1 86 break;
ubhat 0:69f2e28d12c1 87 }
ubhat 0:69f2e28d12c1 88 }
ubhat 0:69f2e28d12c1 89 }
ubhat 0:69f2e28d12c1 90
ubhat 0:69f2e28d12c1 91 void RunComplianceTest( void )
ubhat 0:69f2e28d12c1 92 {
ubhat 0:69f2e28d12c1 93 if( ComplianceTest.LinkCheck == true )
ubhat 0:69f2e28d12c1 94 {
ubhat 0:69f2e28d12c1 95 ComplianceTest.LinkCheck = false;
ubhat 0:69f2e28d12c1 96 AppDataSize = 3;
ubhat 0:69f2e28d12c1 97 AppData[0] = 5;
ubhat 0:69f2e28d12c1 98 AppData[1] = ComplianceTest.DemodMargin;
ubhat 0:69f2e28d12c1 99 AppData[2] = ComplianceTest.NbGateways;
ubhat 0:69f2e28d12c1 100 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 101 }
ubhat 0:69f2e28d12c1 102 else
ubhat 0:69f2e28d12c1 103 {
ubhat 0:69f2e28d12c1 104 switch( ComplianceTest.State )
ubhat 0:69f2e28d12c1 105 {
ubhat 0:69f2e28d12c1 106 case 1:
ubhat 0:69f2e28d12c1 107 AppDataSize = 2;
ubhat 0:69f2e28d12c1 108 AppData[0] = ComplianceTest.DownLinkCounter >> 8;
ubhat 0:69f2e28d12c1 109 AppData[1] = ComplianceTest.DownLinkCounter;
ubhat 0:69f2e28d12c1 110 break;
ubhat 0:69f2e28d12c1 111
ubhat 0:69f2e28d12c1 112 case 4:
ubhat 0:69f2e28d12c1 113 ComplianceTest.State = 1;
ubhat 0:69f2e28d12c1 114 break;
ubhat 0:69f2e28d12c1 115 }
ubhat 0:69f2e28d12c1 116 }
ubhat 0:69f2e28d12c1 117 }