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:
Tue May 17 00:21:55 2016 +0000
Revision:
0:69f2e28d12c1
Child:
5:6ffeac53b7cb
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: Define events during Join, Tx & Rx
ubhat 0:69f2e28d12c1 10 Prepare TX packet by appending with appropriate application data
ubhat 0:69f2e28d12c1 11
ubhat 0:69f2e28d12c1 12 License: Revised BSD License, see LICENSE.TXT file include in the project
ubhat 0:69f2e28d12c1 13
ubhat 0:69f2e28d12c1 14 Maintainer: Uttam Bhat
ubhat 0:69f2e28d12c1 15 */
ubhat 0:69f2e28d12c1 16
ubhat 0:69f2e28d12c1 17 #include "LoRaEventProc.h"
ubhat 0:69f2e28d12c1 18
ubhat 0:69f2e28d12c1 19 bool AppLed = 0;
ubhat 0:69f2e28d12c1 20
ubhat 0:69f2e28d12c1 21 /*!
ubhat 0:69f2e28d12c1 22 * \brief Prepares the payload of the frame based on application port
ubhat 0:69f2e28d12c1 23 */
ubhat 0:69f2e28d12c1 24 void PrepareLoRaFrame( uint8_t port )
ubhat 0:69f2e28d12c1 25 {
ubhat 0:69f2e28d12c1 26
ubhat 0:69f2e28d12c1 27 switch( port )
ubhat 0:69f2e28d12c1 28 {
ubhat 0:69f2e28d12c1 29 case 5:
ubhat 0:69f2e28d12c1 30 {
ubhat 0:69f2e28d12c1 31 uint8_t tmp;
ubhat 0:69f2e28d12c1 32 uint8_t tmpLength;
ubhat 0:69f2e28d12c1 33 uint8_t ptrIndex = 0;
ubhat 0:69f2e28d12c1 34
ubhat 0:69f2e28d12c1 35 // Point the pointer to position index of Tx Buffer
ubhat 0:69f2e28d12c1 36 LoRaApp.ApplicationPtrPos( ptrIndex );
ubhat 0:69f2e28d12c1 37
ubhat 0:69f2e28d12c1 38 tmp = ( AppLed != 0 ) ? 0x0F : 0x00;
ubhat 0:69f2e28d12c1 39 tmpLength = 1;
ubhat 0:69f2e28d12c1 40
ubhat 0:69f2e28d12c1 41 LoRaApp.ApplicationAppendData( &tmp, tmpLength ); // Populate lower nibble of 0th Byte with LED state
ubhat 0:69f2e28d12c1 42
ubhat 0:69f2e28d12c1 43 /*!
ubhat 0:69f2e28d12c1 44 * Read Temperature
ubhat 0:69f2e28d12c1 45 * Appends 1 Byte to TX buffer
ubhat 0:69f2e28d12c1 46 */
ubhat 0:69f2e28d12c1 47 LoRaApp.ApplicationCall( AppTemp );
ubhat 0:69f2e28d12c1 48
ubhat 0:69f2e28d12c1 49 /*!
ubhat 0:69f2e28d12c1 50 * Read Battery
ubhat 0:69f2e28d12c1 51 * Appends 1 Byte to TX buffer
ubhat 0:69f2e28d12c1 52 */
ubhat 0:69f2e28d12c1 53 LoRaApp.ApplicationCall( AppBat );
ubhat 0:69f2e28d12c1 54
ubhat 0:69f2e28d12c1 55 /*!
ubhat 0:69f2e28d12c1 56 * Read GPS coordinates
ubhat 0:69f2e28d12c1 57 * Appends 8 Bytes (3 bytes longitude, 3 bytes latitude, 2 bytes altitude) to TX buffer
ubhat 0:69f2e28d12c1 58 */
ubhat 0:69f2e28d12c1 59 LoRaApp.ApplicationCall( AppGps );
ubhat 0:69f2e28d12c1 60
ubhat 0:69f2e28d12c1 61 /*!
ubhat 0:69f2e28d12c1 62 * Read Accelerometer
ubhat 0:69f2e28d12c1 63 * Appends 2 Bytes to TX buffer
ubhat 0:69f2e28d12c1 64 * Value Orientation
ubhat 0:69f2e28d12c1 65 * 0x99 0x00 horizontal + faceup
ubhat 0:69f2e28d12c1 66 * 0x66 0x00 horizontal + facedown
ubhat 0:69f2e28d12c1 67 * 0x00 0x11 vertical
ubhat 0:69f2e28d12c1 68 */
ubhat 0:69f2e28d12c1 69 LoRaApp.ApplicationCall( AppAccl ); // Generate Accelerometer data bytes
ubhat 0:69f2e28d12c1 70
ubhat 0:69f2e28d12c1 71 /*!
ubhat 0:69f2e28d12c1 72 * Generate Ramp data bytes
ubhat 0:69f2e28d12c1 73 * Appends incremental values of 1 Byte each to TX buffer until Full
ubhat 0:69f2e28d12c1 74 */
ubhat 0:69f2e28d12c1 75 LoRaApp.ApplicationCall( AppRamp );
ubhat 0:69f2e28d12c1 76
ubhat 0:69f2e28d12c1 77 break;
ubhat 0:69f2e28d12c1 78 }
ubhat 0:69f2e28d12c1 79
ubhat 0:69f2e28d12c1 80 // Senet M2X ORIENTATION Demo
ubhat 0:69f2e28d12c1 81 // Set LORAWAN_APP_DATA_SIZE to 2
ubhat 0:69f2e28d12c1 82 case 6:
ubhat 0:69f2e28d12c1 83 {
ubhat 0:69f2e28d12c1 84 uint8_t ptrIndex = 1;
ubhat 0:69f2e28d12c1 85
ubhat 0:69f2e28d12c1 86 //Point the pointer to position index of Tx Buffer
ubhat 0:69f2e28d12c1 87 LoRaApp.ApplicationPtrPos( ptrIndex );
ubhat 0:69f2e28d12c1 88
ubhat 0:69f2e28d12c1 89 LoRaApp.ApplicationCall( AppAcclSenet ); // Generate Accelerometer data bytes
ubhat 0:69f2e28d12c1 90
ubhat 0:69f2e28d12c1 91
ubhat 0:69f2e28d12c1 92
ubhat 0:69f2e28d12c1 93 break;
ubhat 0:69f2e28d12c1 94 }
ubhat 0:69f2e28d12c1 95
ubhat 0:69f2e28d12c1 96 /* Senet GPS Demo
ubhat 0:69f2e28d12c1 97 Data Format (in Hex):
ubhat 0:69f2e28d12c1 98 [01, 02, Lattitude (3 bytes), Longitude (3 Bytes), Elevation (2 bytes), Tx Power (1 byte)]
ubhat 0:69f2e28d12c1 99 */
ubhat 0:69f2e28d12c1 100 case 7:
ubhat 0:69f2e28d12c1 101 {
ubhat 0:69f2e28d12c1 102 uint8_t ptrIndex = 0;
ubhat 0:69f2e28d12c1 103 uint8_t tmp[] = {0x01, 0x02};
ubhat 0:69f2e28d12c1 104
ubhat 0:69f2e28d12c1 105 //Point the pointer to position index of Tx Buffer
ubhat 0:69f2e28d12c1 106 LoRaApp.ApplicationPtrPos( ptrIndex );
ubhat 0:69f2e28d12c1 107
ubhat 0:69f2e28d12c1 108 LoRaApp.ApplicationAppendData( tmp, 2 );
ubhat 0:69f2e28d12c1 109
ubhat 0:69f2e28d12c1 110 LoRaApp.ApplicationCall( AppGps ); // Generate Accelerometer data bytes
ubhat 0:69f2e28d12c1 111
ubhat 0:69f2e28d12c1 112 uint8_t pow = 30 - 2*(( uint8_t ) LoRaMacUplinkStatus.TxPower);
ubhat 0:69f2e28d12c1 113 LoRaApp.ApplicationAppendData( &pow, 1 );
ubhat 0:69f2e28d12c1 114
ubhat 0:69f2e28d12c1 115 break;
ubhat 0:69f2e28d12c1 116 }
ubhat 0:69f2e28d12c1 117
ubhat 0:69f2e28d12c1 118 default:
ubhat 0:69f2e28d12c1 119 break;
ubhat 0:69f2e28d12c1 120 }
ubhat 0:69f2e28d12c1 121 }
ubhat 0:69f2e28d12c1 122
ubhat 0:69f2e28d12c1 123 /*!
ubhat 0:69f2e28d12c1 124 * \brief What to do during JOIN process ? blink/toggle LED etc.
ubhat 0:69f2e28d12c1 125 */
ubhat 0:69f2e28d12c1 126 void JoinEvent( void )
ubhat 0:69f2e28d12c1 127 {
ubhat 0:69f2e28d12c1 128 // CtrlLED is defined in LoRaBoardAppIf.h
ubhat 0:69f2e28d12c1 129 // param 1: LED color (Red, Yellow or Green)
ubhat 0:69f2e28d12c1 130 // param 2: LED_ON or LED_OFF
ubhat 0:69f2e28d12c1 131 CtrlLED( Red, LED_ON );
ubhat 0:69f2e28d12c1 132 }
ubhat 0:69f2e28d12c1 133
ubhat 0:69f2e28d12c1 134
ubhat 0:69f2e28d12c1 135 /*!
ubhat 0:69f2e28d12c1 136 * \brief What to do during TX ? blink/toggle LED etc.
ubhat 0:69f2e28d12c1 137 */
ubhat 0:69f2e28d12c1 138 void TxEvent( void )
ubhat 0:69f2e28d12c1 139 {
ubhat 0:69f2e28d12c1 140 int blinkTime = 25000;
ubhat 0:69f2e28d12c1 141
ubhat 0:69f2e28d12c1 142 // Blink Red LED for 25msec
ubhat 0:69f2e28d12c1 143 BlinkLED( Red, blinkTime );
ubhat 0:69f2e28d12c1 144 }
ubhat 0:69f2e28d12c1 145
ubhat 0:69f2e28d12c1 146 void RxEvent()
ubhat 0:69f2e28d12c1 147 {
ubhat 0:69f2e28d12c1 148 // Toggle yellow LED
ubhat 0:69f2e28d12c1 149 ToggleLED( Yellow );
ubhat 0:69f2e28d12c1 150
ubhat 0:69f2e28d12c1 151 // If Rx Data is 0x01 turn on Green LED else if 0x0 Turn Green LED off
ubhat 0:69f2e28d12c1 152 if( LoRaMacDownlinkStatus.BufferSize == 1 )
ubhat 0:69f2e28d12c1 153 {
ubhat 0:69f2e28d12c1 154 if( LoRaMacDownlinkStatus.Buffer[0] == 0x01 )
ubhat 0:69f2e28d12c1 155 {
ubhat 0:69f2e28d12c1 156 AppLed = 1;
ubhat 0:69f2e28d12c1 157 }
ubhat 0:69f2e28d12c1 158 else
ubhat 0:69f2e28d12c1 159 {
ubhat 0:69f2e28d12c1 160 if( LoRaMacDownlinkStatus.Buffer[0] == 0x00 )
ubhat 0:69f2e28d12c1 161 {
ubhat 0:69f2e28d12c1 162 AppLed = 0;
ubhat 0:69f2e28d12c1 163 }
ubhat 0:69f2e28d12c1 164 }
ubhat 0:69f2e28d12c1 165 }
ubhat 0:69f2e28d12c1 166
ubhat 0:69f2e28d12c1 167 if( AppLed != 0 )
ubhat 0:69f2e28d12c1 168 {
ubhat 0:69f2e28d12c1 169 // Turn USR_LED ON
ubhat 0:69f2e28d12c1 170 CtrlLED( Usr, LED_ON );
ubhat 0:69f2e28d12c1 171 }
ubhat 0:69f2e28d12c1 172 else
ubhat 0:69f2e28d12c1 173 {
ubhat 0:69f2e28d12c1 174 // Turn USR_LED OFF
ubhat 0:69f2e28d12c1 175 CtrlLED( Usr, LED_OFF );
ubhat 0:69f2e28d12c1 176 }
ubhat 0:69f2e28d12c1 177 }
ubhat 0:69f2e28d12c1 178