A demo application for HXC900 LoRaWAN module using Nucleo-L053R8.

Dependencies:   mbed

main.cpp

Committer:
fahadmirza
Date:
2018-07-16
Revision:
3:11cdf29c8739
Parent:
2:1ef859bc5cd2
Child:
4:511677d804ac

File content as of revision 3:11cdf29c8739:

#include "mbed.h"
#include "main.h"
#include "lora_driver.h"

/* Private Macros ------------------------------------------------------------*/
#define SENSORS_MEASURE_CYCLE  (15000U)  // Send packet every 15s

/* Private variables ---------------------------------------------------------*/
static sLoraConfig_t LoraConfigParam =
{
    .joinMode  = OTAA,
    .adrStatus = ADR_OFF,
    .class_    = 'A',
    .devEui    = "E000000000000003",
    .appEui    = "E000000000000002",
    .appKey    = "E0000000000000000000000000000004"
};

/* Private function declaration ----------------------------------------------*/
static void SensorMeasureData(uint8_t *buffer, uint8_t *dataSize, uint8_t *ack, uint8_t *port);
static void LedControl(uint8_t *buffer, uint8_t dataSize, uint8_t ack, uint8_t port);

static sLoraDriverParam_t LoraDriverParam =
{
    .SensorMeasureTime = SENSORS_MEASURE_CYCLE,
    .SendDataHandler = SensorMeasureData,
    .ReceiveDataHandler = LedControl
};

// Mbed specific declaration
AnalogIn temperatureSensor(A0);
DigitalOut nucleoLED(LED1);

int main()
{
    HW_Init();

    DBG_PRINTF("HXC900-NucleoL053R8 Demo Application\r\n");    
    Lora_init(&LoraConfigParam, &LoraDriverParam);

    while(1) 
    {
        Lora_fsm();
    }
}


/* Private function definitions ----------------------------------------------*/

/******************************************************************************
 * @Brief : Uplink packet handler for lora_driver
 * @Param : Pointer for payload buffer, data size, ack configuration and port
 * @return: none
******************************************************************************/
static void SensorMeasureData(uint8_t *buffer, uint8_t *dataSize, uint8_t *ack, uint8_t *port)
{
    uint8_t size = 0;
    uint16_t temperatureValue = temperatureSensor.read_u16();

    // Organizing an unconfirmed uplink packet for port 2    
    buffer[size++] = (temperatureValue >> 8) & 0xFF;
    buffer[size++] = temperatureValue & 0xFF;
    
    *dataSize = size;
    *ack = UNCONFIRMED;
    *port = 2;
}

/******************************************************************************
 * @Brief : Downlink packet handler for lora_driver
 *          LSBytes of the payload controls the Nucleo LED
 * @Param : Payload buffer, data size, ack configuration and port
 * @return: none
******************************************************************************/
static void LedControl(uint8_t *buffer, uint8_t dataSize, uint8_t ack, uint8_t port)
{
    switch(buffer[dataSize - 1])
    {
        case 1:
        {
            BSP_LED_On(LED_GREEN);
            break;
        }
        default:
        {
            BSP_LED_Off(LED_GREEN);
            break;
        }
    }
}

/************************ (C) COPYRIGHT Haxiot ***** END OF FILE ****/