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.
main.cpp
- Committer:
- ThomasMazier
- Date:
- 2019-01-18
- Revision:
- 15:a99503d744c3
- Parent:
- 14:ab6eecd44b7a
File content as of revision 15:a99503d744c3:
///////////////////////////////////////////////// BIBLIOTHEQUE ///////////////////////////////////////////////////////////////////////////////////////
#include "mbed.h"
#include "main.h"
#include "sx1272-hal.h"
#include "debug.h"
#include "sx1272.h"
Serial pc(USBTX, USBRX);
#define PCBAUD 9600
//////////////////////////////////////////////// DEFINITION OUTIL DEBUG ///////////////////////////////////////////////////////////////////////////
/* Set this flag to '1' to display debug messages on the console */
#define DEBUG_MESSAGE 1 //permet d'afficher des messages sur le terminal
////////////////////////////////////////////////////////////////////// DEFINITION MODULATION /////////////////////////////////////////////////////
/* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
#define USE_MODEM_LORA 1 //On utilise LoRa
#define RF_FREQUENCY 868000000 // Hz
#define TX_OUTPUT_POWER 14 // dBm
#if USE_MODEM_LORA == 1 // Definition des parametres de LoRa
#define LORA_BANDWIDTH 2 // [0: 125 kHz,
// 1: 250 kHz,
// 2: 500 kHz,
// 3: Reserved]
#define LORA_SPREADING_FACTOR 7 // [SF7..SF12] // ???????????????
#define LORA_CODINGRATE 1 // [1: 4/5, // ???????????????
// 2: 4/6, // ???????????????
// 3: 4/7,
// 4: 4/8]
#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx // ???????????????
#define LORA_SYMBOL_TIMEOUT 5 // Symbols // ???????????????
#define LORA_FIX_LENGTH_PAYLOAD_ON false // ???????????????
#define LORA_FHSS_ENABLED false // ???????????????
#define LORA_NB_SYMB_HOP 4 // ???????????????
#define LORA_IQ_INVERSION_ON false // ???????????????
#define LORA_CRC_ENABLED true // ???????????????
#else
#error "Please define a modem in the compiler options." //ERREUR si ni LoRa ni FSK n'a ete active
#endif
#define RX_TIMEOUT_VALUE 10000 // in ms
#define BUFFER_SIZE 32 // Define the payload size here
//////////////////////////////////////////////////// GLOBAL VARIABLES DECLARATIONS /////////////////////////////////////////////////////////////////////
typedef enum
{
LOWPOWER = 0,
IDLE,
RX,
RX_TIMEOUT,
RX_ERROR,
TX,
TX_TIMEOUT,
CAD,
CAD_DONE
}AppStates_t;
volatile AppStates_t State = LOWPOWER;
/*!
* Radio events function pointer
*/
static RadioEvents_t RadioEvents;
/*
* Global variables declarations
*/
SX1272MB2xAS Radio( NULL );
uint16_t BufferSize = BUFFER_SIZE; //Taille de la memoire tampon
uint8_t Buffer[BUFFER_SIZE];
int16_t RssiValue = 0.0; //Rssi = Received Signal Strentgh Indication
int8_t SnrValue = 0.0;
////////////////////////////////////////////////////////////////////// MAIN /////////////////////////////////////////////////////////
int main( void )
{
pc.baud(PCBAUD);
debug( "\n\n\r SX1272 X Y Z Demo Application \n\n\r" );
// Initialize Radio driver
RadioEvents.TxDone = OnTxDone;
RadioEvents.RxDone = OnRxDone;
RadioEvents.RxError = OnRxError;
RadioEvents.TxTimeout = OnTxTimeout;
RadioEvents.RxTimeout = OnRxTimeout;
Radio.Init( &RadioEvents );
// verify the connection with the board
while( Radio.Read( REG_VERSION ) == 0x00 )
{
debug( "Radio could not be detected!\n\r", NULL );
wait( 1 );
}
debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1272MB2XAS ) ), "\n\r > Board Type: SX1272MB2xAS < \n\r" );
Radio.SetChannel( RF_FREQUENCY );
#if USE_MODEM_LORA == 1
debug_if( LORA_FHSS_ENABLED, "\n\n\r > LORA FHSS Mode < \n\n\r" );
debug_if( !LORA_FHSS_ENABLED, "\n\n\r > LORA Mode < \n\n\r" );
Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
LORA_IQ_INVERSION_ON, 2000 );
Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
LORA_IQ_INVERSION_ON, true );
#else
#error "Please define a modem in the compiler options."
#endif
Radio.Rx( 3500 );
State = RX;
pc.printf("\n\r ++++++++++++++++++++++++++++++++ \n\r");
while(1)
{
if( BufferSize > 0 )
{
if( strncmp( (const char *)Buffer, "B", 1)==0)
{
pc.printf("%s,\n", Buffer);
pc.printf("\n\r");
}
BufferSize = 0;
Radio.Rx( 3500 );
}
}
}
///////////////////////////////////////// DECLARATION DES FONCTIONS/////////////////////////////////////////////////////
void OnTxDone( void )
{
Radio.Sleep( );
State = TX;
debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" );
}
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
{
Radio.Sleep( );
BufferSize = size;
memcpy( Buffer, payload, BufferSize );
RssiValue = rssi;
SnrValue = snr;
State = RX;
debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" );
}
void OnTxTimeout( void )
{
Radio.Sleep( );
State = TX_TIMEOUT;
debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" );
}
void OnRxTimeout( void )
{
//Radio.Sleep( );
Buffer[BufferSize] = 0;
State = RX_TIMEOUT;
debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" );
}
void OnRxError( void )
{
State = RX_ERROR;
debug_if( DEBUG_MESSAGE, "> OnRxError\n\r" );
}