nimita naik
/
SX1262PingPong
ping pong with modifiable parameters
Diff: main.cpp
- 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 ) {