/*! * \file main.c * * \brief Radio sensitivity test * * \remark When LED1 stops blinking LoRa packets aren't received any more and * the sensitivity level has been reached. * By reading the RF generator output power we can estimate the board * sensitivity * * \copyright Revised BSD License, see section \ref LICENSE. * * \code * ______ _ * / _____) _ | | * ( (____ _____ ____ _| |_ _____ ____| |__ * \____ \| ___ | (_ _) ___ |/ ___) _ \ * _____) ) ____| | | || |_| ____( (___| | | | * (______/|_____)_|_|_| \__)_____)\____)_| |_| * (C)2013-2017 Semtech * * \endcode * * \author Miguel Luis ( Semtech ) * * \author Gregory Cristian ( Semtech ) */ #include "board.h" #include "gpio.h" #include "timer.h" #include "radio.h" #if defined( REGION_AS923 ) #define RF_FREQUENCY 923000000 // Hz #elif defined( REGION_AU915 ) #define RF_FREQUENCY 915000000 // Hz #elif defined( REGION_CN470 ) #define RF_FREQUENCY 470000000 // Hz #elif defined( REGION_CN779 ) #define RF_FREQUENCY 779000000 // Hz #elif defined( REGION_EU433 ) #define RF_FREQUENCY 433000000 // Hz #elif defined( REGION_EU868 ) #define RF_FREQUENCY 868000000 // Hz #elif defined( REGION_KR920 ) #define RF_FREQUENCY 920000000 // Hz #elif defined( REGION_IN865 ) #define RF_FREQUENCY 865000000 // Hz #elif defined( REGION_US915 ) #define RF_FREQUENCY 915000000 // Hz #elif defined( REGION_RU864 ) #define RF_FREQUENCY 864000000 // Hz #else #error "Please define a frequency band in the compiler options." #endif #if defined( USE_MODEM_LORA ) #define LORA_BANDWIDTH 0 // [0: 125 kHz, // 1: 250 kHz, // 2: 500 kHz, // 3: Reserved] #define LORA_SPREADING_FACTOR 10 // [SF7..SF12] #define LORA_CODINGRATE 1 // [1: 4/5, // 2: 4/6, // 3: 4/7, // 4: 4/8] #define LORA_SYMBOL_TIMEOUT 5 // Symbols #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_IQ_INVERSION_ON false #elif defined( USE_MODEM_FSK ) #define FSK_DATARATE 50000 // bps #define FSK_BANDWIDTH 50000 // Hz #define FSK_AFC_BANDWIDTH 83333 // Hz #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx #define FSK_FIX_LENGTH_PAYLOAD_ON false #else #error "Please define a modem in the compiler options." #endif /*! * Radio events function pointer */ static RadioEvents_t RadioEvents; /*! * LED GPIO pins objects */ extern Gpio_t Led1; /*! * \brief Function to be executed on Radio Rx Done event */ void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ); /*! * Main application entry point. */ int main( void ) { // Target board initialization BoardInitMcu( ); BoardInitPeriph( ); // Radio initialization RadioEvents.RxDone = OnRxDone; Radio.Init( &RadioEvents ); Radio.SetChannel( RF_FREQUENCY ); #if defined( USE_MODEM_LORA ) Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, true, 0, 0, LORA_IQ_INVERSION_ON, true ); Radio.SetMaxPayloadLength( MODEM_LORA, 255 ); #elif defined( USE_MODEM_FSK ) Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE, 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, true, 0, 0, false, true ); Radio.SetMaxPayloadLength( MODEM_FSK, 255 ); #else #error "Please define a frequency band in the compiler options." #endif Radio.Rx( 0 ); // Continuous Rx while( 1 ) { BoardLowPowerHandler( ); // Process Radio IRQ if( Radio.IrqProcess != NULL ) { Radio.IrqProcess( ); } } } void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) { static uint8_t ledState = 1; // Toggle LED 1 ledState ^= 1; GpioWrite( &Led1, ledState ); }