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: X_NUCLEO_IKS01A1 driver_mbed_TH02 LoRaWAN-lib-v1_0_1 SX1272Lib mbed
Fork of LoRaWAN-SX1272-Application-Demo by
Diff: app/LoRaEventProc.cpp
- Revision:
- 0:6cc76d70e2a1
- Child:
- 2:19dd7bfcacf7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/LoRaEventProc.cpp Thu Apr 06 21:59:50 2017 +0000
@@ -0,0 +1,372 @@
+/*
+ / _____) _ | |
+( (____ _____ ____ _| |_ _____ ____| |__
+ \____ \| ___ | (_ _) ___ |/ ___) _ \
+ _____) ) ____| | | || |_| ____( (___| | | |
+(______/|_____)_|_|_| \__)_____)\____)_| |_|
+ (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"
+
+/*!
+ * Defines the application data transmission duty cycle
+ */
+uint32_t TxDutyCycleTime = APP_TX_DUTYCYCLE;
+
+bool AppLed = 0;
+
+uint8_t AppCase = 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
+
+ /*!
+ * Generate Ramp data bytes
+ * Appends incremental values of 1 Byte each to TX buffer until Full
+ */
+ LoRaApp.ApplicationCall( AppRamp );
+
+ break;
+ }
+
+ case 8:
+ {
+ uint8_t ptrIndex = 0;
+
+ //Point the pointer to position index of Tx Buffer
+ LoRaApp.ApplicationPtrPos( ptrIndex );
+
+ /*!
+ * Read Pressure
+ * Appends 2 Bytes to TX buffer
+ */
+ LoRaApp.ApplicationCall( AppPressr );
+
+ /*!
+ * Read Temperature
+ * Appends 1 Byte to TX buffer
+ */
+ LoRaApp.ApplicationCall( AppTemp );
+
+ /*!
+ * Read Humidity
+ * Appends 1 Byte to TX buffer
+ */
+ LoRaApp.ApplicationCall( AppHumid );
+
+ /*!
+ * 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
+
+
+ break;
+ }
+
+ // IKAS sensor using Cayenne Payload Format
+ case 9:
+ {
+#ifdef USE_CAYENNE_LPP
+ uint8_t ptrIndex = 0;
+
+ uint16_t AppSize = 0;
+
+ uint8_t tmp[2] = {0};
+
+ //Point the pointer to position index of Tx Buffer
+ LoRaApp.ApplicationPtrPos( ptrIndex );
+
+ AppCase = AppCase > 3 ? 0 : AppCase;
+
+ while( 1 )
+ {
+ switch( AppCase )
+ {
+ case 0:
+ {
+ tmp[0] = 0;
+ tmp[1] = 115; // Data Type PRESSURE: 115
+ LoRaApp.ApplicationAppendData( tmp, 2 );
+
+ /*!
+ * Read Pressure
+ * Appends 2 Bytes to TX buffer
+ */
+ LoRaApp.ApplicationCall( AppPressr );
+
+ AppSize += maxLPPsize[AppCase];
+
+ break;
+ }
+
+ case 1:
+ {
+ tmp[0] = 1;
+ tmp[1] = 103; // Data Type TEMP: 103
+ LoRaApp.ApplicationAppendData( tmp, 2 );
+
+ /*!
+ * Read Temperature
+ * Appends 1 Byte to TX buffer
+ */
+ LoRaApp.ApplicationCall( AppTemp );
+
+ AppSize += maxLPPsize[AppCase];
+
+ break;
+ }
+
+ case 2:
+ {
+ tmp[0] = 2;
+ tmp[1] = 104; // Data Type HUMIDITY: 103
+ LoRaApp.ApplicationAppendData( tmp, 2 );
+
+ /*!
+ * Read Humidity
+ * Appends 1 Byte to TX buffer
+ */
+ LoRaApp.ApplicationCall( AppHumid );
+
+ AppSize += maxLPPsize[AppCase];
+
+ break;
+ }
+
+ case 3:
+ {
+ tmp[0] = 3;
+ tmp[1] = 113; // Data Type Accl: 113
+ LoRaApp.ApplicationAppendData( tmp, 2 );
+ /*!
+ * Read Accelerometer
+ */
+ LoRaApp.ApplicationCall( AppAccl ); // Generate Accelerometer data bytes
+
+ AppSize += maxLPPsize[AppCase];
+
+ break;
+ }
+ }
+
+ AppCase++;
+
+ if( AppSize + maxLPPsize[AppCase] > LORAWAN_APP_DATA_SIZE )
+ {
+ break;
+ }
+ }
+
+ AppDataSize = AppSize;
+#endif
+ break;
+ }
+
+ // Push-Button Demo
+ case 11:
+ {
+ uint8_t ptrIndex = 0;
+
+ //Point the pointer to position index of Tx Buffer
+ LoRaApp.ApplicationPtrPos( ptrIndex );
+
+ LoRaApp.ApplicationCall( AppPushButton ); // Transmit uplink counter
+
+ break;
+ }
+
+ default:
+ break;
+ }
+}
+
+
+/*!
+ * \brief Sets Interrupt for next payload transmission
+ */
+void InitNextTxInterrupt( uint8_t port )
+{
+ switch( port )
+ {
+ /* GPS Application Demo
+ Set Timer interrupt for next uplink
+ */
+ case 5:
+ {
+ }
+
+ /* Senet + M2X demo
+ Set Timer interrupt for next uplink
+ */
+ case 6:
+ {
+
+ }
+
+ /* Senet GPS Demo
+ Set Timer interrupt for next uplink
+ */
+ case 7:
+ {
+ // Schedule next packet transmission
+ TxDutyCycleTime = APP_TX_DUTYCYCLE + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND );
+ TimerSetValue( &TxNextPacketTimer, TxDutyCycleTime );
+ TimerStart( &TxNextPacketTimer );
+ break;
+ }
+
+ /* Push Button Demo
+ Send Packet Immedietly if PC0 = GND
+ */
+ case 11:
+ {
+ volatile bool PushButtonStatus;
+
+ PushButtonStatus = UsrButton;
+
+ if(PushButtonStatus == 0)
+ {
+ // Send Pkt immedietly if PC = GND
+ DeviceState = DEVICE_STATE_SEND;
+ NextTx = true;
+ }
+ else
+ {
+ // Keep polling
+ IsTxIntUpdate = true;
+ }
+
+ break;
+ }
+
+ /* Orientation Demo
+ Send Packet Immedietly if Mote is Vertical
+ */
+ case 12:
+ {
+ CheckOrientation( );
+
+ if(VerticalStatus == true)
+ {
+ // Send Pkt immedietly if PC = GND
+ DeviceState = DEVICE_STATE_SEND;
+ NextTx = true;
+ }
+ else
+ {
+ // Keep polling
+ IsTxIntUpdate = true;
+ }
+ break;
+ }
+
+ /* Compliance Test
+ Set Timer interrupt for next uplink
+ */
+ case 224:
+ {
+ // Schedule next packet transmission
+ TimerSetValue( &TxNextPacketTimer, COMPLIANCE_TX_DUTYCYCLE );
+ TimerStart( &TxNextPacketTimer );
+ break;
+ }
+
+ default:
+ {
+ // Schedule next packet transmission
+ TimerSetValue( &TxNextPacketTimer, TxDutyCycleTime );
+ TimerStart( &TxNextPacketTimer );
+ 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
+ //UsrLED = 3.3;
+ }
+ else
+ {
+ // Turn USR_LED OFF
+ //UsrLED = 0;
+ }
+}
+
