mQ Branch for NA mote testing

Dependencies:   LoRaWAN-lib SX1272Lib-mQ lib_gps lib_mma8451q lib_mpl3115a2 mbed

Fork of LoRaWAN-NAMote72-Application-Demo by Semtech

app/LoRaEventProc.cpp

Committer:
ubhat
Date:
2016-05-17
Revision:
0:69f2e28d12c1
Child:
5:6ffeac53b7cb

File content as of revision 0:69f2e28d12c1:

/*
 / _____)             _              | |
( (____  _____ ____ _| |_ _____  ____| |__
 \____ \| ___ |    (_   _) ___ |/ ___)  _ \
 _____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
    (C)2015 Semtech

Description: Define events during Join, Tx & Rx
            Prepare TX packet by appending with appropriate application data

License: Revised BSD License, see LICENSE.TXT file include in the project

Maintainer: Uttam Bhat
*/

#include "LoRaEventProc.h"

bool AppLed = 0;

/*!
 * \brief   Prepares the payload of the frame based on application port
 */
void PrepareLoRaFrame( uint8_t port )
{

    switch( port )
    {    
    case 5:
        {   
            uint8_t tmp;
            uint8_t tmpLength;
            uint8_t ptrIndex = 0;
            
            // Point the pointer to position index of Tx Buffer
            LoRaApp.ApplicationPtrPos( ptrIndex );

            tmp = ( AppLed != 0 ) ? 0x0F : 0x00;
            tmpLength = 1;
            
            LoRaApp.ApplicationAppendData( &tmp, tmpLength ); // Populate lower nibble of 0th Byte with LED state            

            /*!
            *  Read Temperature
            *  Appends 1 Byte to TX buffer
            */
            LoRaApp.ApplicationCall( AppTemp );

            /*!
            *  Read Battery
            *  Appends 1 Byte to TX buffer
            */
            LoRaApp.ApplicationCall( AppBat );

            /*!
            *  Read GPS coordinates
            *  Appends 8 Bytes (3 bytes longitude, 3 bytes latitude, 2 bytes altitude) to TX buffer
            */
            LoRaApp.ApplicationCall( AppGps );            

            /*!
            *  Read Accelerometer
            *  Appends 2 Bytes to TX buffer
            *   Value       Orientation
            *   0x99 0x00   horizontal + faceup
            *   0x66 0x00   horizontal + facedown
            *   0x00 0x11   vertical
            */
            LoRaApp.ApplicationCall( AppAccl ); // Generate Accelerometer data bytes    

            /*!
            *  Generate Ramp data bytes
            *  Appends incremental values of 1 Byte each to TX buffer until Full
            */
            LoRaApp.ApplicationCall( AppRamp );

            break;
        }   

    // Senet M2X ORIENTATION Demo 
    // Set LORAWAN_APP_DATA_SIZE to 2
    case 6: 
        { 
            uint8_t ptrIndex = 1;
            
            //Point the pointer to position index of Tx Buffer
            LoRaApp.ApplicationPtrPos( ptrIndex );
            
            LoRaApp.ApplicationCall( AppAcclSenet ); // Generate Accelerometer data bytes    
            
            

            break;
        }
        
    /* Senet GPS Demo 
       Data Format (in Hex):
            [01, 02, Lattitude (3 bytes), Longitude (3 Bytes), Elevation (2 bytes), Tx Power (1 byte)]
    */  
    case 7: 
        { 
            uint8_t ptrIndex = 0;
            uint8_t tmp[] = {0x01, 0x02};
            
            //Point the pointer to position index of Tx Buffer
            LoRaApp.ApplicationPtrPos( ptrIndex );
            
            LoRaApp.ApplicationAppendData( tmp, 2 );  
            
            LoRaApp.ApplicationCall( AppGps ); // Generate Accelerometer data bytes  
            
            uint8_t pow = 30 - 2*(( uint8_t ) LoRaMacUplinkStatus.TxPower);
            LoRaApp.ApplicationAppendData( &pow, 1 );  

            break;
        }
        
    default:
        break;
    }
}

/*!
 * \brief   What to do during JOIN process ? blink/toggle LED etc.
 */
void JoinEvent( void )
{
    // CtrlLED is defined in LoRaBoardAppIf.h
    // param 1: LED color (Red, Yellow or Green)
    // param 2: LED_ON or LED_OFF
    CtrlLED( Red, LED_ON ); 
}


/*!
 * \brief   What to do during TX ? blink/toggle LED etc.
 */
void TxEvent( void )
{
    int blinkTime = 25000;

    // Blink Red LED for 25msec
    BlinkLED( Red, blinkTime );
}

void RxEvent()
{
    // Toggle yellow LED
    ToggleLED( Yellow );  

    // If Rx Data is 0x01 turn on Green LED else if 0x0 Turn Green LED off
    if( LoRaMacDownlinkStatus.BufferSize == 1 )
    {       
        if( LoRaMacDownlinkStatus.Buffer[0] == 0x01 )
        {
            AppLed = 1;
        }
        else
        {
            if( LoRaMacDownlinkStatus.Buffer[0] == 0x00 )
            {
                AppLed = 0;
            }
        }
    }

    if( AppLed != 0 )
    {
        // Turn  USR_LED ON
        CtrlLED( Usr, LED_ON );
    }
    else
    {
        // Turn  USR_LED OFF
        CtrlLED( Usr, LED_OFF );
    }
}