Fork of the Simple Ping-Pong demo application between two SX1272MB2xAs demo board. It's now a simple application demonstrating simple Rx (Receive) from a SX1272 boards.
Fork of SX1272PingPong by
Diff: main.cpp
- Revision:
- 15:dc867bef95d9
- Parent:
- 14:6c312f8635fe
- Child:
- 17:c44bd9aea979
--- a/main.cpp Mon Mar 13 09:35:55 2017 +0000 +++ b/main.cpp Mon Mar 13 09:54:09 2017 +0000 @@ -8,20 +8,19 @@ #define RF_FREQUENCY 868000000 // Hz -#define TX_OUTPUT_POWER 14 // 14 dBm #define LORA_BANDWIDTH 2 // [0: 125 kHz, - // 1: 250 kHz, - // 2: 500 kHz, - // 3: Reserved] - +// 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 +// 2: 4/6, +// 3: 4/7, +// 4: 4/8] + +#define LORA_PREAMBLE_LENGTH 8 #define LORA_SYMBOL_TIMEOUT 5 // Symbols #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_FHSS_ENABLED false @@ -45,9 +44,6 @@ RX_TIMEOUT, RX_ERROR, - TX, - TX_TIMEOUT, - CAD, CAD_DONE } AppStates_t; @@ -64,9 +60,6 @@ */ SX1272MB2xAS Radio( NULL ); -const uint8_t PingMsg[] = "PING"; -const uint8_t PongMsg[] = "PONG"; - uint16_t BufferSize = BUFFER_SIZE; uint8_t Buffer[BUFFER_SIZE]; @@ -80,10 +73,8 @@ debug( "\n\n\r iGreenhouse 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 ); @@ -101,12 +92,6 @@ 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, 2000000 ); - Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, @@ -123,49 +108,24 @@ while( 1 ) { switch( State ) { case RX: - if( BufferSize > 0 ) { - if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 ) { - led = !led; - debug( "...Ping\r\n" ); - // Send the reply to the PING string - strcpy( ( char* )Buffer, ( char* )PongMsg ); - // We fill the buffer with numbers for the payload - for( i = 4; i < BufferSize; i++ ) { - Buffer[i] = i - 4; - } - wait_ms( 10 ); - Radio.Send( Buffer, BufferSize ); - } else { // valid reception but not a PING as expected - // Set device as master and start again - isMaster = true; - Radio.Rx( RX_TIMEOUT_VALUE ); - } - } + if( BufferSize > 0 ) { + debug("\r\n========\r\nNew Packet\r\n========\r\n"); + debug("%s \r\n", Buffer); + /*if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 ) { + led = !led; + debug( "...Ping\r\n" ); + } else { // valid reception but not a PING as expected, let start again + Radio.Rx( RX_TIMEOUT_VALUE ); + }*/ + } State = LOWPOWER; break; - case TX: - led = !led; - debug( "Pong...\r\n" ); + case RX_TIMEOUT: Radio.Rx( RX_TIMEOUT_VALUE ); State = LOWPOWER; break; - case RX_TIMEOUT: - Radio.Rx( RX_TIMEOUT_VALUE ); - State = LOWPOWER; - break; case RX_ERROR: - // We have received a Packet with a CRC error, send reply as if packet was correct - // Send the next PONG frame - strcpy( ( char* )Buffer, ( char* )PongMsg ); - for( i = 4; i < BufferSize; i++ ) { - Buffer[i] = i - 4; - } - wait_ms( 10 ); - Radio.Send( Buffer, BufferSize ); - State = LOWPOWER; - break; - case TX_TIMEOUT: - Radio.Rx( RX_TIMEOUT_VALUE ); + // We have received a Packet with a CRC error State = LOWPOWER; break; case LOWPOWER: @@ -177,13 +137,6 @@ } } -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( ); @@ -195,13 +148,6 @@ 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( );