ping pong with modifiable parameters

Dependencies:   mbed SX126xLib

Committer:
nimita23
Date:
Wed Jun 19 16:25:56 2019 +0000
Revision:
3:c704345b0c9f
Parent:
2:2bedac9faed3
Child:
4:99bfe3b61a6a
code cleaned

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 1:22e02d1cfbca 1 /*
GregCr 1:22e02d1cfbca 2 ______ _
GregCr 1:22e02d1cfbca 3 / _____) _ | |
GregCr 1:22e02d1cfbca 4 ( (____ _____ ____ _| |_ _____ ____| |__
GregCr 1:22e02d1cfbca 5 \____ \| ___ | (_ _) ___ |/ ___) _ \
GregCr 1:22e02d1cfbca 6 _____) ) ____| | | || |_| ____( (___| | | |
GregCr 1:22e02d1cfbca 7 (______/|_____)_|_|_| \__)_____)\____)_| |_|
GregCr 1:22e02d1cfbca 8 (C)2017 Semtech
GregCr 1:22e02d1cfbca 9
GregCr 1:22e02d1cfbca 10 Description: Main program
GregCr 1:22e02d1cfbca 11
GregCr 1:22e02d1cfbca 12 Maintainer: Gregory Cristian & Gilbert Menth
GregCr 1:22e02d1cfbca 13 */
GregCr 1:22e02d1cfbca 14
GregCr 1:22e02d1cfbca 15 #include "mbed.h"
GregCr 1:22e02d1cfbca 16 #include "radio.h"
nimita23 2:2bedac9faed3 17 #include "sx126x-hal.h"
GregCr 1:22e02d1cfbca 18
GregCr 1:22e02d1cfbca 19
GregCr 1:22e02d1cfbca 20 /*!
GregCr 1:22e02d1cfbca 21 * \brief Used to display firmware version on RS232
GregCr 1:22e02d1cfbca 22 */
GregCr 1:22e02d1cfbca 23 #define FIRMWARE_VERSION ( ( char* )"Firmware Version: 170314A" )
GregCr 1:22e02d1cfbca 24
GregCr 1:22e02d1cfbca 25 /*!
GregCr 1:22e02d1cfbca 26 * Use the Ping Ping in uncommented Mode
GregCr 1:22e02d1cfbca 27 */
GregCr 1:22e02d1cfbca 28 //#define MODE_BLE
GregCr 1:22e02d1cfbca 29 #define MODE_LORA
GregCr 1:22e02d1cfbca 30 //#define MODE_GENERIC
GregCr 1:22e02d1cfbca 31 //#define MODE_FLRC
GregCr 1:22e02d1cfbca 32
GregCr 1:22e02d1cfbca 33
GregCr 1:22e02d1cfbca 34 /*!
GregCr 1:22e02d1cfbca 35 * \brief Defines the nominal frequency
GregCr 1:22e02d1cfbca 36 */
nimita23 3:c704345b0c9f 37 #define RF_FREQUENCY 350000000 // Hz
GregCr 1:22e02d1cfbca 38
GregCr 1:22e02d1cfbca 39 /*!
GregCr 1:22e02d1cfbca 40 * \brief Defines the output power in dBm
GregCr 1:22e02d1cfbca 41 *
GregCr 1:22e02d1cfbca 42 * \remark The range of the output power is [-18..+13] dBm
GregCr 1:22e02d1cfbca 43 */
nimita23 2:2bedac9faed3 44 #define TX_OUTPUT_POWER 10
GregCr 1:22e02d1cfbca 45
GregCr 1:22e02d1cfbca 46 /*!
GregCr 1:22e02d1cfbca 47 * \brief Defines the states of the application
GregCr 1:22e02d1cfbca 48 */
GregCr 1:22e02d1cfbca 49 typedef enum
GregCr 1:22e02d1cfbca 50 {
GregCr 1:22e02d1cfbca 51 APP_LOWPOWER,
GregCr 1:22e02d1cfbca 52 APP_RX,
GregCr 1:22e02d1cfbca 53 APP_RX_TIMEOUT,
GregCr 1:22e02d1cfbca 54 APP_RX_ERROR,
GregCr 1:22e02d1cfbca 55 APP_TX,
GregCr 1:22e02d1cfbca 56 APP_TX_TIMEOUT,
GregCr 1:22e02d1cfbca 57 }AppStates_t;
GregCr 1:22e02d1cfbca 58
GregCr 1:22e02d1cfbca 59 /*!
GregCr 1:22e02d1cfbca 60 * \brief Defines the buffer size, i.e. the payload size
GregCr 1:22e02d1cfbca 61 */
GregCr 1:22e02d1cfbca 62 #define BUFFER_SIZE 16
GregCr 1:22e02d1cfbca 63
GregCr 1:22e02d1cfbca 64 /*!
GregCr 1:22e02d1cfbca 65 * \brief Define the possible message type for this application
GregCr 1:22e02d1cfbca 66 */
GregCr 1:22e02d1cfbca 67 const uint8_t PingMsg[] = "PING";
GregCr 1:22e02d1cfbca 68 const uint8_t PongMsg[] = "PONG";
GregCr 1:22e02d1cfbca 69
GregCr 1:22e02d1cfbca 70 /*!
GregCr 1:22e02d1cfbca 71 * \brief Defines the size of the token defining message type in the payload
GregCr 1:22e02d1cfbca 72 */
GregCr 1:22e02d1cfbca 73 #define PINGPONGSIZE 4
GregCr 1:22e02d1cfbca 74
GregCr 1:22e02d1cfbca 75 /*!
GregCr 1:22e02d1cfbca 76 * \brief The size of the buffer
GregCr 1:22e02d1cfbca 77 */
GregCr 1:22e02d1cfbca 78 uint8_t BufferSize = BUFFER_SIZE;
GregCr 1:22e02d1cfbca 79
GregCr 1:22e02d1cfbca 80 /*!
GregCr 1:22e02d1cfbca 81 * \brief The buffer
GregCr 1:22e02d1cfbca 82 */
GregCr 1:22e02d1cfbca 83 uint8_t Buffer[BUFFER_SIZE];
GregCr 1:22e02d1cfbca 84
GregCr 1:22e02d1cfbca 85 /*!
GregCr 1:22e02d1cfbca 86 * \brief The State of the application
GregCr 1:22e02d1cfbca 87 */
GregCr 1:22e02d1cfbca 88 AppStates_t AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 89
GregCr 1:22e02d1cfbca 90 int8_t RssiValue = 0;
GregCr 1:22e02d1cfbca 91 int8_t SnrValue = 0;
GregCr 1:22e02d1cfbca 92
GregCr 1:22e02d1cfbca 93 /*!
GregCr 1:22e02d1cfbca 94 * \brief Function to be executed on Radio Tx Done event
GregCr 1:22e02d1cfbca 95 */
GregCr 1:22e02d1cfbca 96 void OnTxDone( void );
GregCr 1:22e02d1cfbca 97
GregCr 1:22e02d1cfbca 98 /*!
GregCr 1:22e02d1cfbca 99 * \brief Function to be executed on Radio Rx Done event
GregCr 1:22e02d1cfbca 100 */
GregCr 1:22e02d1cfbca 101 void OnRxDone( void );
GregCr 1:22e02d1cfbca 102
GregCr 1:22e02d1cfbca 103 /*!
GregCr 1:22e02d1cfbca 104 * \brief Function executed on Radio Tx Timeout event
GregCr 1:22e02d1cfbca 105 */
GregCr 1:22e02d1cfbca 106 void OnTxTimeout( void );
GregCr 1:22e02d1cfbca 107
GregCr 1:22e02d1cfbca 108 /*!
GregCr 1:22e02d1cfbca 109 * \brief Function executed on Radio Rx Timeout event
GregCr 1:22e02d1cfbca 110 */
GregCr 1:22e02d1cfbca 111 void OnRxTimeout( void );
GregCr 1:22e02d1cfbca 112
GregCr 1:22e02d1cfbca 113 /*!
GregCr 1:22e02d1cfbca 114 * \brief Function executed on Radio Rx Error event
GregCr 1:22e02d1cfbca 115 */
GregCr 1:22e02d1cfbca 116 void OnRxError( IrqErrorCode_t );
GregCr 1:22e02d1cfbca 117
nimita23 2:2bedac9faed3 118
GregCr 1:22e02d1cfbca 119 RadioCallbacks_t callbacks =
GregCr 1:22e02d1cfbca 120 {
GregCr 1:22e02d1cfbca 121 &OnTxDone, // txDone
GregCr 1:22e02d1cfbca 122 &OnRxDone, // rxDone
nimita23 2:2bedac9faed3 123 NULL, // rxPreambleDetect
nimita23 2:2bedac9faed3 124 NULL, // rxSyncWordDone
nimita23 2:2bedac9faed3 125 NULL, // rxHeaderDone
GregCr 1:22e02d1cfbca 126 &OnTxTimeout, // txTimeout
GregCr 1:22e02d1cfbca 127 &OnRxTimeout, // rxTimeout
GregCr 1:22e02d1cfbca 128 &OnRxError, // rxError
nimita23 2:2bedac9faed3 129 NULL, // cadDone
GregCr 1:22e02d1cfbca 130 };
GregCr 1:22e02d1cfbca 131
GregCr 1:22e02d1cfbca 132 // mosi, miso, sclk, nss, busy, dio1, dio2, dio3, rst, callbacks...
nimita23 2:2bedac9faed3 133
nimita23 2:2bedac9faed3 134 SX126xHal Radio( D11, D12, D13, D7, D3, D5, NC, NC, A0, A1, A2, D8, &callbacks );
GregCr 1:22e02d1cfbca 135
GregCr 1:22e02d1cfbca 136 DigitalOut ANT_SW( A3 );
GregCr 1:22e02d1cfbca 137 DigitalOut TxLed( A4 );
GregCr 1:22e02d1cfbca 138 DigitalOut RxLed( A5 );
GregCr 1:22e02d1cfbca 139
GregCr 1:22e02d1cfbca 140 /*!
GregCr 1:22e02d1cfbca 141 * \brief Define IO for Unused Pin
GregCr 1:22e02d1cfbca 142 */
GregCr 1:22e02d1cfbca 143 DigitalOut F_CS( D6 ); // MBED description of pin
GregCr 1:22e02d1cfbca 144 DigitalOut SD_CS( D8 ); // MBED description of pin
GregCr 1:22e02d1cfbca 145
GregCr 1:22e02d1cfbca 146 /*!
GregCr 1:22e02d1cfbca 147 * \brief Number of tick size steps for tx timeout
GregCr 1:22e02d1cfbca 148 */
nimita23 3:c704345b0c9f 149 #define TX_TIMEOUT_VALUE 0xFFFF // ms
GregCr 1:22e02d1cfbca 150
GregCr 1:22e02d1cfbca 151 /*!
GregCr 1:22e02d1cfbca 152 * \brief Number of tick size steps for rx timeout
GregCr 1:22e02d1cfbca 153 */
nimita23 3:c704345b0c9f 154 #define RX_TIMEOUT_VALUE 0xFFFF // ms
GregCr 1:22e02d1cfbca 155
GregCr 1:22e02d1cfbca 156 /*!
GregCr 1:22e02d1cfbca 157 * \brief Mask of IRQs to listen to in rx mode
GregCr 1:22e02d1cfbca 158 */
nimita23 2:2bedac9faed3 159 uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT;
GregCr 1:22e02d1cfbca 160
GregCr 1:22e02d1cfbca 161 /*!
GregCr 1:22e02d1cfbca 162 * \brief Mask of IRQs to listen to in tx mode
GregCr 1:22e02d1cfbca 163 */
GregCr 1:22e02d1cfbca 164 uint16_t TxIrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT;
GregCr 1:22e02d1cfbca 165
GregCr 1:22e02d1cfbca 166 /*!
GregCr 1:22e02d1cfbca 167 * \brief Locals parameters and status for radio API
GregCr 1:22e02d1cfbca 168 * NEED TO BE OPTIMIZED, COPY OF STUCTURE ALREADY EXISTING
GregCr 1:22e02d1cfbca 169 */
GregCr 1:22e02d1cfbca 170 PacketParams_t PacketParams;
GregCr 1:22e02d1cfbca 171 PacketStatus_t PacketStatus;
GregCr 1:22e02d1cfbca 172
GregCr 1:22e02d1cfbca 173 /*!
GregCr 1:22e02d1cfbca 174 * \brief Specify serial datarate for UART debug output
GregCr 1:22e02d1cfbca 175 */
GregCr 1:22e02d1cfbca 176 void baud( int baudrate )
GregCr 1:22e02d1cfbca 177 {
GregCr 1:22e02d1cfbca 178 Serial s( USBTX, USBRX );
GregCr 1:22e02d1cfbca 179
GregCr 1:22e02d1cfbca 180 s.baud( baudrate );
GregCr 1:22e02d1cfbca 181 }
GregCr 1:22e02d1cfbca 182
GregCr 1:22e02d1cfbca 183 int main( )
GregCr 1:22e02d1cfbca 184 {
GregCr 1:22e02d1cfbca 185 bool isMaster = true;
GregCr 1:22e02d1cfbca 186 ModulationParams_t modulationParams;
GregCr 1:22e02d1cfbca 187
GregCr 1:22e02d1cfbca 188 baud( 115200 );
GregCr 1:22e02d1cfbca 189
GregCr 1:22e02d1cfbca 190 F_CS = 1;
GregCr 1:22e02d1cfbca 191 SD_CS = 1;
GregCr 1:22e02d1cfbca 192 RxLed = 1;
GregCr 1:22e02d1cfbca 193 TxLed = 1;
GregCr 1:22e02d1cfbca 194 ANT_SW = 1;
GregCr 1:22e02d1cfbca 195
GregCr 1:22e02d1cfbca 196 wait_ms( 500 ); // wait for on board DC/DC start-up time
GregCr 1:22e02d1cfbca 197
GregCr 1:22e02d1cfbca 198 Radio.Init( );
GregCr 1:22e02d1cfbca 199 Radio.SetRegulatorMode( USE_DCDC ); // Can also be set in LDO mode but consume more power
GregCr 1:22e02d1cfbca 200
GregCr 1:22e02d1cfbca 201 memset( &Buffer, 0x00, BufferSize );
GregCr 1:22e02d1cfbca 202
nimita23 2:2bedac9faed3 203 printf( "\n\n\r SX1262 Ping Pong Demo Application (%s)\n\n\r", "nimita" );
GregCr 1:22e02d1cfbca 204
GregCr 1:22e02d1cfbca 205
GregCr 1:22e02d1cfbca 206 printf( "\nPing Pong running in LORA mode\n\r");
GregCr 1:22e02d1cfbca 207 modulationParams.PacketType = PACKET_TYPE_LORA;
GregCr 1:22e02d1cfbca 208 modulationParams.Params.LoRa.SpreadingFactor = LORA_SF7;
nimita23 2:2bedac9faed3 209 modulationParams.Params.LoRa.Bandwidth = LORA_BW_500;
GregCr 1:22e02d1cfbca 210 modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5;
GregCr 1:22e02d1cfbca 211
GregCr 1:22e02d1cfbca 212 PacketParams.PacketType = PACKET_TYPE_LORA;
GregCr 1:22e02d1cfbca 213 PacketParams.Params.LoRa.PreambleLength = 0x08;
GregCr 1:22e02d1cfbca 214 PacketParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH;
GregCr 1:22e02d1cfbca 215 PacketParams.Params.LoRa.PayloadLength = 15;
GregCr 1:22e02d1cfbca 216 PacketParams.Params.LoRa.CrcMode = LORA_CRC_ON;
GregCr 1:22e02d1cfbca 217 PacketParams.Params.LoRa.InvertIQ = LORA_IQ_INVERTED;
GregCr 1:22e02d1cfbca 218
nimita23 2:2bedac9faed3 219
GregCr 1:22e02d1cfbca 220
GregCr 1:22e02d1cfbca 221 Radio.SetStandby( STDBY_RC );
GregCr 1:22e02d1cfbca 222 Radio.SetPacketType( modulationParams.PacketType );
GregCr 1:22e02d1cfbca 223 Radio.SetModulationParams( &modulationParams );
GregCr 1:22e02d1cfbca 224 Radio.SetPacketParams( &PacketParams );
GregCr 1:22e02d1cfbca 225
GregCr 1:22e02d1cfbca 226 Radio.SetRfFrequency( RF_FREQUENCY );
GregCr 1:22e02d1cfbca 227 Radio.SetBufferBaseAddresses( 0x00, 0x00 );
GregCr 1:22e02d1cfbca 228 Radio.SetTxParams( TX_OUTPUT_POWER, RADIO_RAMP_20_US );
GregCr 1:22e02d1cfbca 229
GregCr 1:22e02d1cfbca 230 RxLed = 0;
GregCr 1:22e02d1cfbca 231 TxLed = 0;
GregCr 1:22e02d1cfbca 232
GregCr 1:22e02d1cfbca 233 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 234 Radio.SetRx( RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 235 AppState = APP_LOWPOWER;
nimita23 2:2bedac9faed3 236
nimita23 2:2bedac9faed3 237 Radio.ProcessIrqs( );
GregCr 1:22e02d1cfbca 238
GregCr 1:22e02d1cfbca 239 while( 1 )
GregCr 1:22e02d1cfbca 240 {
nimita23 2:2bedac9faed3 241 Radio.ProcessIrqs( );
GregCr 1:22e02d1cfbca 242 switch( AppState )
GregCr 1:22e02d1cfbca 243 {
GregCr 1:22e02d1cfbca 244 case APP_RX:
GregCr 1:22e02d1cfbca 245 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 246 RxLed = !RxLed;
GregCr 1:22e02d1cfbca 247 Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE );
nimita23 2:2bedac9faed3 248 printf("\n%s\n", Buffer);
GregCr 1:22e02d1cfbca 249 if( isMaster == true )
GregCr 1:22e02d1cfbca 250 {
GregCr 1:22e02d1cfbca 251 if( BufferSize > 0 )
GregCr 1:22e02d1cfbca 252 {
GregCr 1:22e02d1cfbca 253 if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 254 {
GregCr 1:22e02d1cfbca 255 printf( "...Pong\r\n" );
GregCr 1:22e02d1cfbca 256 memcpy( Buffer, PingMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 257 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 258 Radio.SendPayload( Buffer, BufferSize, (TX_TIMEOUT_VALUE));
GregCr 1:22e02d1cfbca 259 }
GregCr 1:22e02d1cfbca 260 else if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 261 {
GregCr 1:22e02d1cfbca 262 // A master already exists then become a slave
GregCr 1:22e02d1cfbca 263 printf( "...Ping\r\n" );
GregCr 1:22e02d1cfbca 264 isMaster = false;
GregCr 1:22e02d1cfbca 265 memcpy( Buffer, PongMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 266 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 267 Radio.SendPayload( Buffer, BufferSize, TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 268 }
GregCr 1:22e02d1cfbca 269 else // valid reception but neither a PING or a PONG message
GregCr 1:22e02d1cfbca 270 { // Set device as master ans start again
GregCr 1:22e02d1cfbca 271 isMaster = true;
GregCr 1:22e02d1cfbca 272 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 273 Radio.SetRx(RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 274 }
GregCr 1:22e02d1cfbca 275 }
GregCr 1:22e02d1cfbca 276 }
GregCr 1:22e02d1cfbca 277 else
GregCr 1:22e02d1cfbca 278 {
GregCr 1:22e02d1cfbca 279 if( BufferSize > 0 )
GregCr 1:22e02d1cfbca 280 {
GregCr 1:22e02d1cfbca 281 if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 282 {
GregCr 1:22e02d1cfbca 283 printf( "...Ping\r\n" );
GregCr 1:22e02d1cfbca 284 memcpy( Buffer, PongMsg, 4 );
GregCr 1:22e02d1cfbca 285 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 286 Radio.SendPayload( Buffer, BufferSize, TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 287 }
GregCr 1:22e02d1cfbca 288 else // valid reception but not a PING as expected
GregCr 1:22e02d1cfbca 289 {
GregCr 1:22e02d1cfbca 290 isMaster = true;
GregCr 1:22e02d1cfbca 291 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 292 Radio.SetRx(RX_TIMEOUT_VALUE);
GregCr 1:22e02d1cfbca 293 }
GregCr 1:22e02d1cfbca 294 }
GregCr 1:22e02d1cfbca 295 }
GregCr 1:22e02d1cfbca 296 break;
GregCr 1:22e02d1cfbca 297
GregCr 1:22e02d1cfbca 298 case APP_TX:
GregCr 1:22e02d1cfbca 299 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 300 TxLed = !TxLed;
GregCr 1:22e02d1cfbca 301 if( isMaster == true )
GregCr 1:22e02d1cfbca 302 {
GregCr 1:22e02d1cfbca 303 printf( "Ping...\r\n" );
GregCr 1:22e02d1cfbca 304 }
GregCr 1:22e02d1cfbca 305 else
GregCr 1:22e02d1cfbca 306 {
GregCr 1:22e02d1cfbca 307 printf( "Pong...\r\n" );
GregCr 1:22e02d1cfbca 308 }
GregCr 1:22e02d1cfbca 309 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 310 Radio.SetRx(RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 311 break;
GregCr 1:22e02d1cfbca 312
GregCr 1:22e02d1cfbca 313 case APP_RX_TIMEOUT:
GregCr 1:22e02d1cfbca 314 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 315 if( isMaster == true )
GregCr 1:22e02d1cfbca 316 {
GregCr 1:22e02d1cfbca 317 // Send the next PING frame
GregCr 1:22e02d1cfbca 318 memcpy( Buffer, PingMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 319 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 320 Radio.SendPayload( Buffer, BufferSize, TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 321 }
GregCr 1:22e02d1cfbca 322 else
GregCr 1:22e02d1cfbca 323 {
GregCr 1:22e02d1cfbca 324 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 325 Radio.SetRx( RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 326 }
GregCr 1:22e02d1cfbca 327 break;
GregCr 1:22e02d1cfbca 328
GregCr 1:22e02d1cfbca 329 case APP_RX_ERROR:
GregCr 1:22e02d1cfbca 330 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 331 // We have received a Packet with a CRC error, send reply as if packet was correct
GregCr 1:22e02d1cfbca 332 if( isMaster == true )
GregCr 1:22e02d1cfbca 333 {
GregCr 1:22e02d1cfbca 334 // Send the next PING frame
GregCr 1:22e02d1cfbca 335 memcpy( Buffer, PingMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 336 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 337 Radio.SendPayload( Buffer, BufferSize, TX_TIMEOUT_VALUE);
GregCr 1:22e02d1cfbca 338 }
GregCr 1:22e02d1cfbca 339 else
GregCr 1:22e02d1cfbca 340 {
GregCr 1:22e02d1cfbca 341 // Send the next PONG frame
GregCr 1:22e02d1cfbca 342 memcpy( Buffer, PongMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 343 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 344 Radio.SendPayload( Buffer, BufferSize, TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 345 }
GregCr 1:22e02d1cfbca 346 break;
GregCr 1:22e02d1cfbca 347
GregCr 1:22e02d1cfbca 348 case APP_TX_TIMEOUT:
GregCr 1:22e02d1cfbca 349 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 350 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 3:c704345b0c9f 351 Radio.SetRx( RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 352 break;
GregCr 1:22e02d1cfbca 353
GregCr 1:22e02d1cfbca 354 case APP_LOWPOWER:
GregCr 1:22e02d1cfbca 355 break;
GregCr 1:22e02d1cfbca 356
GregCr 1:22e02d1cfbca 357 default:
GregCr 1:22e02d1cfbca 358 // Set low power
GregCr 1:22e02d1cfbca 359 break;
GregCr 1:22e02d1cfbca 360 }
GregCr 1:22e02d1cfbca 361 }
GregCr 1:22e02d1cfbca 362 }
GregCr 1:22e02d1cfbca 363
GregCr 1:22e02d1cfbca 364 void OnTxDone( void )
GregCr 1:22e02d1cfbca 365 {
GregCr 1:22e02d1cfbca 366 AppState = APP_TX;
GregCr 1:22e02d1cfbca 367 }
GregCr 1:22e02d1cfbca 368
GregCr 1:22e02d1cfbca 369 void OnRxDone( void )
GregCr 1:22e02d1cfbca 370 {
nimita23 3:c704345b0c9f 371 AppState = APP_RX;
nimita23 3:c704345b0c9f 372 PacketStatus_t packetStatus;
GregCr 1:22e02d1cfbca 373 Radio.GetPacketStatus(&packetStatus);
nimita23 3:c704345b0c9f 374 RssiValue = packetStatus.Params.LoRa.RssiPkt;
nimita23 3:c704345b0c9f 375 SnrValue = packetStatus.Params.LoRa.SnrPkt;
GregCr 1:22e02d1cfbca 376 printf("rssi: %d; snr: %d\n\r", RssiValue, SnrValue );
GregCr 1:22e02d1cfbca 377 }
GregCr 1:22e02d1cfbca 378
GregCr 1:22e02d1cfbca 379 void OnTxTimeout( void )
GregCr 1:22e02d1cfbca 380 {
GregCr 1:22e02d1cfbca 381 AppState = APP_TX_TIMEOUT;
GregCr 1:22e02d1cfbca 382 printf( "<>>>>>>>>TXE\r\n" );
GregCr 1:22e02d1cfbca 383 }
GregCr 1:22e02d1cfbca 384
GregCr 1:22e02d1cfbca 385 void OnRxTimeout( void )
GregCr 1:22e02d1cfbca 386 {
GregCr 1:22e02d1cfbca 387 AppState = APP_RX_TIMEOUT;
GregCr 1:22e02d1cfbca 388 }
GregCr 1:22e02d1cfbca 389
GregCr 1:22e02d1cfbca 390 void OnRxError( IrqErrorCode_t errorCode )
GregCr 1:22e02d1cfbca 391 {
GregCr 1:22e02d1cfbca 392 AppState = APP_RX_ERROR;
GregCr 1:22e02d1cfbca 393 printf( "RXE<>>>>>>>>\r\n" );
GregCr 1:22e02d1cfbca 394 }
nimita23 2:2bedac9faed3 395 //
nimita23 2:2bedac9faed3 396 //void OnRangingDone( IrqRangingCode_t val )
nimita23 2:2bedac9faed3 397 //{
nimita23 2:2bedac9faed3 398 //}
GregCr 1:22e02d1cfbca 399
GregCr 1:22e02d1cfbca 400 void OnCadDone( bool channelActivityDetected )
GregCr 1:22e02d1cfbca 401 {
GregCr 1:22e02d1cfbca 402 }