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

Dependencies:   mbed

main.cpp

Committer:
fahadmirza
Date:
2018-07-12
Revision:
1:168a6afffbff
Parent:
0:a0c5877bd360
Child:
2:1ef859bc5cd2

File content as of revision 1:168a6afffbff:

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

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

/* 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);

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

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

// Mbed specific declaration
Serial pc(SERIAL_TX, SERIAL_RX);
Serial hxc(PA_9, PA_10);
AnalogIn analog_value(A0);
DigitalOut myled(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;
    // Organizing an unconfirmed uplink packet for port 2
    *ack = UNCONFIRMED;

    buffer[size++] = 0xFA; // Random data
    buffer[size++] = 0xCE;
    buffer[size++] = 0x0F;
    buffer[size++] = 0xF0;
    buffer[size++] = 0x00;
    *dataSize = size;

    *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 ****/