pING

Dependencies:   SX1276Lib mbed

Fork of SX1276PingPong by Semtech

Files at this revision

API Documentation at this revision

Comitter:
siiruxliu
Date:
Tue Jul 18 14:49:00 2017 +0000
Parent:
15:8b35dd7c1436
Commit message:
tEST

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 8b35dd7c1436 -r c790e9194eba main.cpp
--- a/main.cpp	Mon Apr 24 09:29:45 2017 +0000
+++ b/main.cpp	Tue Jul 18 14:49:00 2017 +0000
@@ -10,28 +10,28 @@
 #define USE_MODEM_LORA  1
 #define USE_MODEM_FSK   !USE_MODEM_LORA
 
-#define RF_FREQUENCY                                    868000000 // Hz
-#define TX_OUTPUT_POWER                                 14        // 14 dBm
+#define RF_FREQUENCY                                    904500000 // Hz
+#define TX_OUTPUT_POWER                                 10       // units: dBm
 
 #if USE_MODEM_LORA == 1
 
-    #define LORA_BANDWIDTH                              2         // [0: 125 kHz,
+    #define LORA_BANDWIDTH                              0         // [0: 125 kHz,
                                                                   //  1: 250 kHz,
                                                                   //  2: 500 kHz,
                                                                   //  3: Reserved]
-    #define LORA_SPREADING_FACTOR                       7         // [SF7..SF12]
+    #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_PREAMBLE_LENGTH                        8         // Same for Tx and Rx
+    #define LORA_PREAMBLE_LENGTH                        16         // 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
-
+    #define LORA_CRC_ENABLED                            false
+    
 #elif USE_MODEM_FSK == 1
 
     #define FSK_FDEV                                    25000     // Hz
@@ -40,19 +40,19 @@
     #define FSK_AFC_BANDWIDTH                           83333     // Hz
     #define FSK_PREAMBLE_LENGTH                         5         // Same for Tx and Rx
     #define FSK_FIX_LENGTH_PAYLOAD_ON                   false
-    #define FSK_CRC_ENABLED                             true
-
+    #define FSK_CRC_ENABLED                             false
+    
 #else
     #error "Please define a modem in the compiler options."
 #endif
 
-#define RX_TIMEOUT_VALUE                                3500      // in ms
-#define BUFFER_SIZE                                     32        // Define the payload size here
+#define RX_TIMEOUT_VALUE                                500000   // in us
+#define BUFFER_SIZE                                     8        // Define the payload size here
 
 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
-DigitalOut led( LED2 );
+DigitalOut led(LED2);
 #else
-DigitalOut led( LED1 );
+DigitalOut led(LED1);
 #endif
 
 /*
@@ -62,14 +62,14 @@
 {
     LOWPOWER = 0,
     IDLE,
-
+    
     RX,
     RX_TIMEOUT,
     RX_ERROR,
-
+    
     TX,
     TX_TIMEOUT,
-
+    
     CAD,
     CAD_DONE
 }AppStates_t;
@@ -86,8 +86,8 @@
  */
 SX1276MB1xAS Radio( NULL );
 
-const uint8_t PingMsg[] = "PING";
-const uint8_t PongMsg[] = "PONG";
+const uint8_t PingMsg[] = "BBBBBBBB";
+const uint8_t PongMsg[] = "AAAAAAAA";
 
 uint16_t BufferSize = BUFFER_SIZE;
 uint8_t Buffer[BUFFER_SIZE];
@@ -95,11 +95,11 @@
 int16_t RssiValue = 0.0;
 int8_t SnrValue = 0.0;
 
-int main( void ) 
+int main() 
 {
     uint8_t i;
     bool isMaster = true;
-
+    
     debug( "\n\n\r     SX1276 Ping Pong Demo Application \n\n\r" );
 
     // Initialize Radio driver
@@ -109,200 +109,65 @@
     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( ) == SX1276MB1LAS ) ), "\n\r > Board Type: SX1276MB1LAS < \n\r" );
-    debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ), "\n\r > Board Type: SX1276MB1MAS < \n\r" );
-
+            
+    debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ) , "\n\r > Board Type: SX1276MB1LAS < \n\r" );
+    debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ) , "\n\r > Board Type: SX1276MB1MAS < \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" );
+    
+    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 );
-
+                         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,
-                         LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
+                         LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, 
                          LORA_IQ_INVERSION_ON, true );
-
+                         
 #elif USE_MODEM_FSK == 1
 
-    debug("\n\n\r              > FSK Mode < \n\n\r" );
+    debug("\n\n\r              > FSK Mode < \n\n\r");
     Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
                          FSK_DATARATE, 0,
                          FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
-                         FSK_CRC_ENABLED, 0, 0, 0, 2000 );
-
+                         FSK_CRC_ENABLED, 0, 0, 0, 2000000 );
+    
     Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
                          0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
                          0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
                          0, 0, false, true );
-
+                         
 #else
 
 #error "Please define a modem in the compiler options."
 
 #endif
-
-    debug_if( DEBUG_MESSAGE, "Starting Ping-Pong loop\r\n" );
-
+     
+    debug_if( DEBUG_MESSAGE, "Starting Ping-Pong loop\r\n" ); 
+        
     led = 0;
-
+        
     Radio.Rx( RX_TIMEOUT_VALUE );
-
+    
     while( 1 )
     {
-        switch( State )
-        {
-        case RX:
-            if( isMaster == true )
-            {
-                if( BufferSize > 0 )
-                {
-                    if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, 4 ) == 0 )
-                    {
-                        led = !led;
-                        debug( "...Pong\r\n" );
-                        // Send the next PING frame
-                        strcpy( ( char* )Buffer, ( char* )PingMsg );
-                        // 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 if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 )
-                    { // A master already exists then become a slave
-                        debug( "...Ping\r\n" );
-                        led = !led;
-                        isMaster = false;
-                        // Send the next PONG frame
-                        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 neither a PING or a PONG message
-                    {    // Set device as master ans start again
-                        isMaster = true;
-                        Radio.Rx( RX_TIMEOUT_VALUE );
-                    }
-                }
-            }
-            else
-            {
-                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 );
-                    }
-                }
-            }
-            State = LOWPOWER;
-            break;
-        case TX:
-            led = !led;
-            if( isMaster == true )  
-            {
-                debug( "Ping...\r\n" );
-            }
-            else
-            {
-                debug( "Pong...\r\n" );
-            }
-            Radio.Rx( RX_TIMEOUT_VALUE );
-            State = LOWPOWER;
-            break;
-        case RX_TIMEOUT:
-            if( isMaster == true )
-            {
-                // Send the next PING frame
-                strcpy( ( char* )Buffer, ( char* )PingMsg );
-                for( i = 4; i < BufferSize; i++ )
-                {
-                    Buffer[i] = i - 4;
-                }
-                wait_ms( 10 );
-                Radio.Send( Buffer, BufferSize );
-            }
-            else
-            {
-                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
-            if( isMaster == true )
-            {
-                // Send the next PING frame
-                strcpy( ( char* )Buffer, ( char* )PingMsg );
-                for( i = 4; i < BufferSize; i++ )
-                {
-                    Buffer[i] = i - 4;
-                }
-                wait_ms( 10 );
-                Radio.Send( Buffer, BufferSize );
-            }
-            else
-            {
-                // 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 );
-            State = LOWPOWER;
-            break;
-        case LOWPOWER:
-            break;
-        default:
-            State = LOWPOWER;
-            break;
-        }
+        strcpy( ( char* )Buffer, ( char* )PingMsg );
+        Radio.Send( Buffer, BufferSize );
     }
 }
 
@@ -313,15 +178,20 @@
     debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" );
 }
 
-void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
+void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
 {
     Radio.Sleep( );
     BufferSize = size;
-    memcpy( Buffer, payload, BufferSize );
+    memcpy(Buffer, payload, BufferSize);
+    //printf("Payload length = %d \n\r",BufferSize);
+    //printf("First 8 bytes -- %d %d %d %d %d %d %d %d\n\r", payload[0], payload[1], payload[2], payload[3], payload[4], payload[5], payload[6], payload[7]);
     RssiValue = rssi;
     SnrValue = snr;
     State = RX;
     debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" );
+    printf("SINR Value = %d \n\r",SnrValue);
+    printf("RSSI Value = %d \n\r",RssiValue);
+    
 }
 
 void OnTxTimeout( void )
@@ -334,9 +204,10 @@
 void OnRxTimeout( void )
 {
     Radio.Sleep( );
-    Buffer[BufferSize] = 0;
+    Buffer[ BufferSize ] = 0;
     State = RX_TIMEOUT;
     debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" );
+
 }
 
 void OnRxError( void )
@@ -344,4 +215,4 @@
     Radio.Sleep( );
     State = RX_ERROR;
     debug_if( DEBUG_MESSAGE, "> OnRxError\n\r" );
-}
+}
\ No newline at end of file
diff -r 8b35dd7c1436 -r c790e9194eba mbed.bld
--- a/mbed.bld	Mon Apr 24 09:29:45 2017 +0000
+++ b/mbed.bld	Tue Jul 18 14:49:00 2017 +0000
@@ -1,1 +1,1 @@
-https://mbed.org/users/mbed_official/code/mbed/builds/97feb9bacc10
\ No newline at end of file
+https://mbed.org/users/mbed_official/code/mbed/builds/4eea097334d6
\ No newline at end of file