ping pong with modifiable parameters

Dependencies:   mbed SX126xLib

Revision:
2:2bedac9faed3
Parent:
1:22e02d1cfbca
Child:
3:c704345b0c9f
--- a/main.cpp	Wed Mar 15 13:16:44 2017 +0000
+++ b/main.cpp	Thu Jun 13 20:31:55 2019 +0000
@@ -14,7 +14,7 @@
 
 #include "mbed.h"
 #include "radio.h"
-#include "sx1280-hal.h"
+#include "sx126x-hal.h"
 
 
 /*!
@@ -34,14 +34,14 @@
 /*!
  * \brief Defines the nominal frequency
  */
-#define RF_FREQUENCY                                2400000000UL // Hz
+#define RF_FREQUENCY                                868000000 // Hz
 
 /*!
  * \brief Defines the output power in dBm
  *
  * \remark The range of the output power is [-18..+13] dBm
  */
-#define TX_OUTPUT_POWER                             13
+#define TX_OUTPUT_POWER                             10
 
 /*!
  * \brief Defines the states of the application
@@ -118,21 +118,39 @@
 /*!
  * \brief All the callbacks are stored in a structure
  */
+//RadioCallbacks_t callbacks =
+//{
+//    &OnTxDone,        // txDone
+//    &OnRxDone,        // rxDone
+//    NULL,             // syncWordDone
+//    NULL,             // headerDone
+//    &OnTxTimeout,     // txTimeout
+//    &OnRxTimeout,     // rxTimeout
+//    NULL,              // rxError
+//    NULL,             // rangingDone
+//    NULL,             // cadDone
+//};
+
 RadioCallbacks_t callbacks =
 {
     &OnTxDone,        // txDone
     &OnRxDone,        // rxDone
-    NULL,             // syncWordDone
-    NULL,             // headerDone
+    NULL,             // rxPreambleDetect
+    NULL,             // rxSyncWordDone
+    NULL,             // rxHeaderDone
     &OnTxTimeout,     // txTimeout
     &OnRxTimeout,     // rxTimeout
     &OnRxError,       // rxError
-    NULL,             // rangingDone
-    NULL,             // cadDone
+    NULL,       // cadDone
 };
 
 // mosi, miso, sclk, nss, busy, dio1, dio2, dio3, rst, callbacks...
-SX1280Hal Radio( D11, D12, D13, D7, D3, D5, NC, NC, A0, &callbacks );
+//SX126xHal Radio( D11, D12, D13, D7, D3, D5, NC, NC, A0, &callbacks );
+
+SX126xHal Radio( D11, D12, D13, D7, D3, D5, NC, NC, A0, A1, A2, D8, &callbacks );
+//SX126xHal Radio(&callbacks );
+
+
 
 DigitalOut ANT_SW( A3 );
 DigitalOut TxLed( A4 );
@@ -157,12 +175,12 @@
 /*!
  * \brief Size of ticks (used for Tx and Rx timeout)
  */
-#define RX_TIMEOUT_TICK_SIZE                        RADIO_TICK_SIZE_1000_US
+#define RX_TIMEOUT_TICK_SIZE                        0x02
 
 /*!
  * \brief Mask of IRQs to listen to in rx mode
  */
-uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT;
+uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT;
 
 /*!
  * \brief Mask of IRQs to listen to in tx mode
@@ -206,45 +224,13 @@
 
     memset( &Buffer, 0x00, BufferSize );
 
-    printf( "\n\n\r     SX1280 Ping Pong Demo Application (%s)\n\n\r", FIRMWARE_VERSION );
-
-#if defined( MODE_BLE )
-
-    printf( "\nPing Pong running in BLE mode\n\r");
-    modulationParams.PacketType                   = PACKET_TYPE_BLE;
-    modulationParams.Params.Ble.BitrateBandwidth  = GEN_BLE_BR_0_125_BW_0_3;
-    modulationParams.Params.Ble.ModulationIndex   = GEN_BLE_MOD_IND_1_00;
-    modulationParams.Params.Ble.ModulationShaping = RADIO_MOD_SHAPING_BT_1_0;
-
-    packetParams.PacketType                 = PACKET_TYPE_BLE;
-    packetParams.Params.Ble.BlePacketType   = BLE_EYELONG_1_0;
-    packetParams.Params.Ble.ConnectionState = BLE_MASTER_SLAVE;
-    packetParams.Params.Ble.CrcField        = BLE_CRC_3B;
-    packetParams.Params.Ble.Whitening       = RADIO_WHITENING_OFF;
+    printf( "\n\n\r     SX1262 Ping Pong Demo Application (%s)\n\n\r", "nimita" );
 
-#elif defined( MODE_GENERIC )
-
-    printf( "\nPing Pong running in GENERIC mode\n\r");
-    modulationParams.PacketType                       = PACKET_TYPE_GENERIC;
-    modulationParams.Params.Generic.BitrateBandwidth  = GEN_BLE_BR_0_125_BW_0_3;
-    modulationParams.Params.Generic.ModulationIndex   = GEN_BLE_MOD_IND_1_00;
-    modulationParams.Params.Generic.ModulationShaping = RADIO_MOD_SHAPING_BT_1_0;
-
-    packetParams.PacketType                    = PACKET_TYPE_GENERIC;
-    packetParams.Params.Generic.PreambleLength = PREAMBLE_LENGTH_32_BITS;
-    packetParams.Params.Generic.SyncWordLength = GEN_SYNCWORD_LENGTH_5_BYTE;
-    packetParams.Params.Generic.SyncWordMatch  = RADIO_RX_MATCH_SYNCWORD_1;
-    packetParams.Params.Generic.HeaderType     = RADIO_PACKET_VARIABLE_LENGTH;
-    packetParams.Params.Generic.PayloadLength  = 15;
-    packetParams.Params.Generic.CrcLength      = RADIO_CRC_3_BYTES;
-    packetParams.Params.Generic.Whitening      = RADIO_WHITENING_ON;
-
-#elif defined( MODE_LORA )
 
     printf( "\nPing Pong running in LORA mode\n\r");
     modulationParams.PacketType                  = PACKET_TYPE_LORA;
     modulationParams.Params.LoRa.SpreadingFactor = LORA_SF7;
-    modulationParams.Params.LoRa.Bandwidth       = LORA_BW_0400;
+    modulationParams.Params.LoRa.Bandwidth       = LORA_BW_500;
     modulationParams.Params.LoRa.CodingRate      = LORA_CR_4_5;
 
     PacketParams.PacketType                 = PACKET_TYPE_LORA;
@@ -254,26 +240,7 @@
     PacketParams.Params.LoRa.CrcMode        = LORA_CRC_ON;
     PacketParams.Params.LoRa.InvertIQ       = LORA_IQ_INVERTED;
 
-#elif defined( MODE_FLRC )
-
-    printf( "\nPing Pong running in FLRC mode\n\r");
-    modulationParams.PacketType                    = PACKET_TYPE_FLRC;
-    modulationParams.Params.Flrc.BitrateBandwidth  = FLRC_BR_0_260_BW_0_3;
-    modulationParams.Params.Flrc.CodingRate        = FLRC_CR_1_2;
-    modulationParams.Params.Flrc.ModulationShaping = RADIO_MOD_SHAPING_BT_1_0;
-
-    packetParams.PacketType                 = PACKET_TYPE_FLRC;
-    packetParams.Params.Flrc.PreambleLength = PREAMBLE_LENGTH_32_BITS;
-    packetParams.Params.Flrc.SyncWordLength = FLRC_SYNCWORD_LENGTH_4_BYTE;
-    packetParams.Params.Flrc.SyncWordMatch  = RADIO_RX_MATCH_SYNCWORD_1;
-    packetParams.Params.Flrc.HeaderType     = RADIO_PACKET_VARIABLE_LENGTH;
-    packetParams.Params.Flrc.PayloadLength  = 15;
-    packetParams.Params.Flrc.CrcLength      = RADIO_CRC_3_BYTES;
-    packetParams.Params.Flrc.Whitening      = RADIO_WHITENING_OFF;
-
-#else
-#error "Please select the mode of operation for the Ping Ping demo"
-#endif
+    
 
     Radio.SetStandby( STDBY_RC );
     Radio.SetPacketType( modulationParams.PacketType );
@@ -285,23 +252,30 @@
     Radio.SetTxParams( TX_OUTPUT_POWER, RADIO_RAMP_20_US );
 
     // only used in GENERIC and BLE mode
-    Radio.SetSyncWord( 1, ( uint8_t[] ){ 0xDD, 0xA0, 0x96, 0x69, 0xDD } );
+//    Radio.SetSyncWord( 1, ( uint8_t[] ){ 0xDD, 0xA0, 0x96, 0x69, 0xDD } );
 
     RxLed = 0;
     TxLed = 0;
 
     Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-    Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
+    Radio.SetRx( RX_TIMEOUT_TICK_SIZE*RX_TIMEOUT_VALUE );
     AppState = APP_LOWPOWER;
+    
+    Radio.ProcessIrqs( );
+    
+    printf( "\nLora initialized\n\r");
 
     while( 1 )
     {
+        Radio.ProcessIrqs( );
         switch( AppState )
         {
             case APP_RX:
                 AppState = APP_LOWPOWER;
                 RxLed = !RxLed;
+                printf("Hi\n");
                 Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE );
+                printf("\n%s\n", Buffer);
                 if( isMaster == true )
                 {
                     if( BufferSize > 0 )
@@ -311,7 +285,7 @@
                             printf( "...Pong\r\n" );
                             memcpy( Buffer, PingMsg, PINGPONGSIZE );
                             Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                            Radio.SendPayload( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
+                            Radio.SendPayload( Buffer, BufferSize, (RX_TIMEOUT_TICK_SIZE*TX_TIMEOUT_VALUE));
                         }
                         else if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, PINGPONGSIZE ) == 0 )
                         {
@@ -320,13 +294,13 @@
                             isMaster = false;
                             memcpy( Buffer, PongMsg, PINGPONGSIZE );
                             Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                            Radio.SendPayload( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
+                            Radio.SendPayload( Buffer, BufferSize, RX_TIMEOUT_TICK_SIZE*TX_TIMEOUT_VALUE );
                         }
                         else // valid reception but neither a PING or a PONG message
                         {    // Set device as master ans start again
                             isMaster = true;
                             Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                            Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
+                            Radio.SetRx(RX_TIMEOUT_TICK_SIZE* RX_TIMEOUT_VALUE );
                         }
                     }
                 }
@@ -339,13 +313,13 @@
                             printf( "...Ping\r\n" );
                             memcpy( Buffer, PongMsg, 4 );
                             Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                            Radio.SendPayload( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
+                            Radio.SendPayload( Buffer, BufferSize, RX_TIMEOUT_TICK_SIZE* TX_TIMEOUT_VALUE );
                         }
                         else // valid reception but not a PING as expected
                         {
                             isMaster = true;
                             Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                            Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
+                            Radio.SetRx( RX_TIMEOUT_TICK_SIZE*RX_TIMEOUT_VALUE);
                         }
                     }
                 }
@@ -363,7 +337,7 @@
                     printf( "Pong...\r\n" );
                 }
                 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
+                Radio.SetRx(RX_TIMEOUT_TICK_SIZE* RX_TIMEOUT_VALUE );
                 break;
 
             case APP_RX_TIMEOUT:
@@ -373,12 +347,12 @@
                     // Send the next PING frame
                     memcpy( Buffer, PingMsg, PINGPONGSIZE );
                     Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                    Radio.SendPayload( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
+                    Radio.SendPayload( Buffer, BufferSize,RX_TIMEOUT_TICK_SIZE* TX_TIMEOUT_VALUE );
                 }
                 else
                 {
                     Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                    Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
+                    Radio.SetRx( RX_TIMEOUT_TICK_SIZE * RX_TIMEOUT_VALUE );
                 }
                 break;
 
@@ -390,21 +364,21 @@
                     // Send the next PING frame
                     memcpy( Buffer, PingMsg, PINGPONGSIZE );
                     Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                    Radio.SendPayload( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
+                    Radio.SendPayload( Buffer, BufferSize,  RX_TIMEOUT_TICK_SIZE *TX_TIMEOUT_VALUE);
                 }
                 else
                 {
                     // Send the next PONG frame
                     memcpy( Buffer, PongMsg, PINGPONGSIZE );
                     Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                    Radio.SendPayload( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
+                    Radio.SendPayload( Buffer, BufferSize, RX_TIMEOUT_TICK_SIZE* TX_TIMEOUT_VALUE );
                 }
                 break;
 
             case APP_TX_TIMEOUT:
                 AppState = APP_LOWPOWER;
                 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-                Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
+                Radio.SetRx( RX_TIMEOUT_TICK_SIZE* RX_TIMEOUT_VALUE  );
                 break;
 
             case APP_LOWPOWER:
@@ -452,10 +426,10 @@
     AppState = APP_RX_ERROR;
     printf( "RXE<>>>>>>>>\r\n" );
 }
-
-void OnRangingDone( IrqRangingCode_t val )
-{
-}
+//
+//void OnRangingDone( IrqRangingCode_t val )
+//{
+//}
 
 void OnCadDone( bool channelActivityDetected )
 {