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
app/LoRaEventProc.cpp
- Committer:
- ubhat
- Date:
- 2017-11-04
- Revision:
- 2:19dd7bfcacf7
- Parent:
- 0:6cc76d70e2a1
File content as of revision 2:19dd7bfcacf7:
/*
/ _____) _ | |
( (____ _____ ____ _| |_ _____ ____| |__
\____ \| ___ | (_ _) ___ |/ ___) _ \
_____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
(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;
}
// GROVE sensor using Cayenne Payload Format
case 12: {
#ifdef USE_CAYENNE_LPP
uint8_t ptrIndex = 0;
uint8_t tmp[2] = {0};
//Point the pointer to position index of Tx Buffer
LoRaApp.ApplicationPtrPos( ptrIndex );
tmp[0] = 1;
tmp[1] = 103; // Data Type TEMP: 103
LoRaApp.ApplicationAppendData( tmp, 2 );
printf("Temp Call\r\n");
/*!
* Read Temperature
* Appends 1 Byte to TX buffer
*/
LoRaApp.ApplicationCall( AppTemp );
tmp[0] = 2;
tmp[1] = 104; // Data Type HUMIDITY: 103
LoRaApp.ApplicationAppendData( tmp, 2 );
printf("Humidity Call\r\n");
/*!
* Read Humidity
* Appends 1 Byte to TX buffer
*/
LoRaApp.ApplicationCall( AppHumid );
#endif
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: {
// Schedule next packet transmission
TxDutyCycleTime = APP_TX_DUTYCYCLE + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND );
TimerSetValue( &TxNextPacketTimer, TxDutyCycleTime );
TimerStart( &TxNextPacketTimer );
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;
}
}
