ping pong with modifiable parameters

Dependencies:   mbed SX126xLib

Committer:
nimita23
Date:
Thu Jun 13 20:31:55 2019 +0000
Revision:
2:2bedac9faed3
Parent:
1:22e02d1cfbca
Child:
3:c704345b0c9f
not working ugh

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 2:2bedac9faed3 37 #define RF_FREQUENCY 868000000 // 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
GregCr 1:22e02d1cfbca 118 /*!
GregCr 1:22e02d1cfbca 119 * \brief All the callbacks are stored in a structure
GregCr 1:22e02d1cfbca 120 */
nimita23 2:2bedac9faed3 121 //RadioCallbacks_t callbacks =
nimita23 2:2bedac9faed3 122 //{
nimita23 2:2bedac9faed3 123 // &OnTxDone, // txDone
nimita23 2:2bedac9faed3 124 // &OnRxDone, // rxDone
nimita23 2:2bedac9faed3 125 // NULL, // syncWordDone
nimita23 2:2bedac9faed3 126 // NULL, // headerDone
nimita23 2:2bedac9faed3 127 // &OnTxTimeout, // txTimeout
nimita23 2:2bedac9faed3 128 // &OnRxTimeout, // rxTimeout
nimita23 2:2bedac9faed3 129 // NULL, // rxError
nimita23 2:2bedac9faed3 130 // NULL, // rangingDone
nimita23 2:2bedac9faed3 131 // NULL, // cadDone
nimita23 2:2bedac9faed3 132 //};
nimita23 2:2bedac9faed3 133
GregCr 1:22e02d1cfbca 134 RadioCallbacks_t callbacks =
GregCr 1:22e02d1cfbca 135 {
GregCr 1:22e02d1cfbca 136 &OnTxDone, // txDone
GregCr 1:22e02d1cfbca 137 &OnRxDone, // rxDone
nimita23 2:2bedac9faed3 138 NULL, // rxPreambleDetect
nimita23 2:2bedac9faed3 139 NULL, // rxSyncWordDone
nimita23 2:2bedac9faed3 140 NULL, // rxHeaderDone
GregCr 1:22e02d1cfbca 141 &OnTxTimeout, // txTimeout
GregCr 1:22e02d1cfbca 142 &OnRxTimeout, // rxTimeout
GregCr 1:22e02d1cfbca 143 &OnRxError, // rxError
nimita23 2:2bedac9faed3 144 NULL, // cadDone
GregCr 1:22e02d1cfbca 145 };
GregCr 1:22e02d1cfbca 146
GregCr 1:22e02d1cfbca 147 // mosi, miso, sclk, nss, busy, dio1, dio2, dio3, rst, callbacks...
nimita23 2:2bedac9faed3 148 //SX126xHal Radio( D11, D12, D13, D7, D3, D5, NC, NC, A0, &callbacks );
nimita23 2:2bedac9faed3 149
nimita23 2:2bedac9faed3 150 SX126xHal Radio( D11, D12, D13, D7, D3, D5, NC, NC, A0, A1, A2, D8, &callbacks );
nimita23 2:2bedac9faed3 151 //SX126xHal Radio(&callbacks );
nimita23 2:2bedac9faed3 152
nimita23 2:2bedac9faed3 153
GregCr 1:22e02d1cfbca 154
GregCr 1:22e02d1cfbca 155 DigitalOut ANT_SW( A3 );
GregCr 1:22e02d1cfbca 156 DigitalOut TxLed( A4 );
GregCr 1:22e02d1cfbca 157 DigitalOut RxLed( A5 );
GregCr 1:22e02d1cfbca 158
GregCr 1:22e02d1cfbca 159 /*!
GregCr 1:22e02d1cfbca 160 * \brief Define IO for Unused Pin
GregCr 1:22e02d1cfbca 161 */
GregCr 1:22e02d1cfbca 162 DigitalOut F_CS( D6 ); // MBED description of pin
GregCr 1:22e02d1cfbca 163 DigitalOut SD_CS( D8 ); // MBED description of pin
GregCr 1:22e02d1cfbca 164
GregCr 1:22e02d1cfbca 165 /*!
GregCr 1:22e02d1cfbca 166 * \brief Number of tick size steps for tx timeout
GregCr 1:22e02d1cfbca 167 */
GregCr 1:22e02d1cfbca 168 #define TX_TIMEOUT_VALUE 100 // ms
GregCr 1:22e02d1cfbca 169
GregCr 1:22e02d1cfbca 170 /*!
GregCr 1:22e02d1cfbca 171 * \brief Number of tick size steps for rx timeout
GregCr 1:22e02d1cfbca 172 */
GregCr 1:22e02d1cfbca 173 #define RX_TIMEOUT_VALUE 100 // ms
GregCr 1:22e02d1cfbca 174
GregCr 1:22e02d1cfbca 175 /*!
GregCr 1:22e02d1cfbca 176 * \brief Size of ticks (used for Tx and Rx timeout)
GregCr 1:22e02d1cfbca 177 */
nimita23 2:2bedac9faed3 178 #define RX_TIMEOUT_TICK_SIZE 0x02
GregCr 1:22e02d1cfbca 179
GregCr 1:22e02d1cfbca 180 /*!
GregCr 1:22e02d1cfbca 181 * \brief Mask of IRQs to listen to in rx mode
GregCr 1:22e02d1cfbca 182 */
nimita23 2:2bedac9faed3 183 uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT;
GregCr 1:22e02d1cfbca 184
GregCr 1:22e02d1cfbca 185 /*!
GregCr 1:22e02d1cfbca 186 * \brief Mask of IRQs to listen to in tx mode
GregCr 1:22e02d1cfbca 187 */
GregCr 1:22e02d1cfbca 188 uint16_t TxIrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT;
GregCr 1:22e02d1cfbca 189
GregCr 1:22e02d1cfbca 190 /*!
GregCr 1:22e02d1cfbca 191 * \brief Locals parameters and status for radio API
GregCr 1:22e02d1cfbca 192 * NEED TO BE OPTIMIZED, COPY OF STUCTURE ALREADY EXISTING
GregCr 1:22e02d1cfbca 193 */
GregCr 1:22e02d1cfbca 194 PacketParams_t PacketParams;
GregCr 1:22e02d1cfbca 195 PacketStatus_t PacketStatus;
GregCr 1:22e02d1cfbca 196
GregCr 1:22e02d1cfbca 197 /*!
GregCr 1:22e02d1cfbca 198 * \brief Specify serial datarate for UART debug output
GregCr 1:22e02d1cfbca 199 */
GregCr 1:22e02d1cfbca 200 void baud( int baudrate )
GregCr 1:22e02d1cfbca 201 {
GregCr 1:22e02d1cfbca 202 Serial s( USBTX, USBRX );
GregCr 1:22e02d1cfbca 203
GregCr 1:22e02d1cfbca 204 s.baud( baudrate );
GregCr 1:22e02d1cfbca 205 }
GregCr 1:22e02d1cfbca 206
GregCr 1:22e02d1cfbca 207 int main( )
GregCr 1:22e02d1cfbca 208 {
GregCr 1:22e02d1cfbca 209 bool isMaster = true;
GregCr 1:22e02d1cfbca 210 ModulationParams_t modulationParams;
GregCr 1:22e02d1cfbca 211
GregCr 1:22e02d1cfbca 212 baud( 115200 );
GregCr 1:22e02d1cfbca 213
GregCr 1:22e02d1cfbca 214 F_CS = 1;
GregCr 1:22e02d1cfbca 215 SD_CS = 1;
GregCr 1:22e02d1cfbca 216 RxLed = 1;
GregCr 1:22e02d1cfbca 217 TxLed = 1;
GregCr 1:22e02d1cfbca 218 ANT_SW = 1;
GregCr 1:22e02d1cfbca 219
GregCr 1:22e02d1cfbca 220 wait_ms( 500 ); // wait for on board DC/DC start-up time
GregCr 1:22e02d1cfbca 221
GregCr 1:22e02d1cfbca 222 Radio.Init( );
GregCr 1:22e02d1cfbca 223 Radio.SetRegulatorMode( USE_DCDC ); // Can also be set in LDO mode but consume more power
GregCr 1:22e02d1cfbca 224
GregCr 1:22e02d1cfbca 225 memset( &Buffer, 0x00, BufferSize );
GregCr 1:22e02d1cfbca 226
nimita23 2:2bedac9faed3 227 printf( "\n\n\r SX1262 Ping Pong Demo Application (%s)\n\n\r", "nimita" );
GregCr 1:22e02d1cfbca 228
GregCr 1:22e02d1cfbca 229
GregCr 1:22e02d1cfbca 230 printf( "\nPing Pong running in LORA mode\n\r");
GregCr 1:22e02d1cfbca 231 modulationParams.PacketType = PACKET_TYPE_LORA;
GregCr 1:22e02d1cfbca 232 modulationParams.Params.LoRa.SpreadingFactor = LORA_SF7;
nimita23 2:2bedac9faed3 233 modulationParams.Params.LoRa.Bandwidth = LORA_BW_500;
GregCr 1:22e02d1cfbca 234 modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5;
GregCr 1:22e02d1cfbca 235
GregCr 1:22e02d1cfbca 236 PacketParams.PacketType = PACKET_TYPE_LORA;
GregCr 1:22e02d1cfbca 237 PacketParams.Params.LoRa.PreambleLength = 0x08;
GregCr 1:22e02d1cfbca 238 PacketParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH;
GregCr 1:22e02d1cfbca 239 PacketParams.Params.LoRa.PayloadLength = 15;
GregCr 1:22e02d1cfbca 240 PacketParams.Params.LoRa.CrcMode = LORA_CRC_ON;
GregCr 1:22e02d1cfbca 241 PacketParams.Params.LoRa.InvertIQ = LORA_IQ_INVERTED;
GregCr 1:22e02d1cfbca 242
nimita23 2:2bedac9faed3 243
GregCr 1:22e02d1cfbca 244
GregCr 1:22e02d1cfbca 245 Radio.SetStandby( STDBY_RC );
GregCr 1:22e02d1cfbca 246 Radio.SetPacketType( modulationParams.PacketType );
GregCr 1:22e02d1cfbca 247 Radio.SetModulationParams( &modulationParams );
GregCr 1:22e02d1cfbca 248 Radio.SetPacketParams( &PacketParams );
GregCr 1:22e02d1cfbca 249
GregCr 1:22e02d1cfbca 250 Radio.SetRfFrequency( RF_FREQUENCY );
GregCr 1:22e02d1cfbca 251 Radio.SetBufferBaseAddresses( 0x00, 0x00 );
GregCr 1:22e02d1cfbca 252 Radio.SetTxParams( TX_OUTPUT_POWER, RADIO_RAMP_20_US );
GregCr 1:22e02d1cfbca 253
GregCr 1:22e02d1cfbca 254 // only used in GENERIC and BLE mode
nimita23 2:2bedac9faed3 255 // Radio.SetSyncWord( 1, ( uint8_t[] ){ 0xDD, 0xA0, 0x96, 0x69, 0xDD } );
GregCr 1:22e02d1cfbca 256
GregCr 1:22e02d1cfbca 257 RxLed = 0;
GregCr 1:22e02d1cfbca 258 TxLed = 0;
GregCr 1:22e02d1cfbca 259
GregCr 1:22e02d1cfbca 260 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 261 Radio.SetRx( RX_TIMEOUT_TICK_SIZE*RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 262 AppState = APP_LOWPOWER;
nimita23 2:2bedac9faed3 263
nimita23 2:2bedac9faed3 264 Radio.ProcessIrqs( );
nimita23 2:2bedac9faed3 265
nimita23 2:2bedac9faed3 266 printf( "\nLora initialized\n\r");
GregCr 1:22e02d1cfbca 267
GregCr 1:22e02d1cfbca 268 while( 1 )
GregCr 1:22e02d1cfbca 269 {
nimita23 2:2bedac9faed3 270 Radio.ProcessIrqs( );
GregCr 1:22e02d1cfbca 271 switch( AppState )
GregCr 1:22e02d1cfbca 272 {
GregCr 1:22e02d1cfbca 273 case APP_RX:
GregCr 1:22e02d1cfbca 274 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 275 RxLed = !RxLed;
nimita23 2:2bedac9faed3 276 printf("Hi\n");
GregCr 1:22e02d1cfbca 277 Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE );
nimita23 2:2bedac9faed3 278 printf("\n%s\n", Buffer);
GregCr 1:22e02d1cfbca 279 if( isMaster == true )
GregCr 1:22e02d1cfbca 280 {
GregCr 1:22e02d1cfbca 281 if( BufferSize > 0 )
GregCr 1:22e02d1cfbca 282 {
GregCr 1:22e02d1cfbca 283 if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 284 {
GregCr 1:22e02d1cfbca 285 printf( "...Pong\r\n" );
GregCr 1:22e02d1cfbca 286 memcpy( Buffer, PingMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 287 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 288 Radio.SendPayload( Buffer, BufferSize, (RX_TIMEOUT_TICK_SIZE*TX_TIMEOUT_VALUE));
GregCr 1:22e02d1cfbca 289 }
GregCr 1:22e02d1cfbca 290 else if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 291 {
GregCr 1:22e02d1cfbca 292 // A master already exists then become a slave
GregCr 1:22e02d1cfbca 293 printf( "...Ping\r\n" );
GregCr 1:22e02d1cfbca 294 isMaster = false;
GregCr 1:22e02d1cfbca 295 memcpy( Buffer, PongMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 296 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 297 Radio.SendPayload( Buffer, BufferSize, RX_TIMEOUT_TICK_SIZE*TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 298 }
GregCr 1:22e02d1cfbca 299 else // valid reception but neither a PING or a PONG message
GregCr 1:22e02d1cfbca 300 { // Set device as master ans start again
GregCr 1:22e02d1cfbca 301 isMaster = true;
GregCr 1:22e02d1cfbca 302 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 303 Radio.SetRx(RX_TIMEOUT_TICK_SIZE* RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 304 }
GregCr 1:22e02d1cfbca 305 }
GregCr 1:22e02d1cfbca 306 }
GregCr 1:22e02d1cfbca 307 else
GregCr 1:22e02d1cfbca 308 {
GregCr 1:22e02d1cfbca 309 if( BufferSize > 0 )
GregCr 1:22e02d1cfbca 310 {
GregCr 1:22e02d1cfbca 311 if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 312 {
GregCr 1:22e02d1cfbca 313 printf( "...Ping\r\n" );
GregCr 1:22e02d1cfbca 314 memcpy( Buffer, PongMsg, 4 );
GregCr 1:22e02d1cfbca 315 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 316 Radio.SendPayload( Buffer, BufferSize, RX_TIMEOUT_TICK_SIZE* TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 317 }
GregCr 1:22e02d1cfbca 318 else // valid reception but not a PING as expected
GregCr 1:22e02d1cfbca 319 {
GregCr 1:22e02d1cfbca 320 isMaster = true;
GregCr 1:22e02d1cfbca 321 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 322 Radio.SetRx( RX_TIMEOUT_TICK_SIZE*RX_TIMEOUT_VALUE);
GregCr 1:22e02d1cfbca 323 }
GregCr 1:22e02d1cfbca 324 }
GregCr 1:22e02d1cfbca 325 }
GregCr 1:22e02d1cfbca 326 break;
GregCr 1:22e02d1cfbca 327
GregCr 1:22e02d1cfbca 328 case APP_TX:
GregCr 1:22e02d1cfbca 329 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 330 TxLed = !TxLed;
GregCr 1:22e02d1cfbca 331 if( isMaster == true )
GregCr 1:22e02d1cfbca 332 {
GregCr 1:22e02d1cfbca 333 printf( "Ping...\r\n" );
GregCr 1:22e02d1cfbca 334 }
GregCr 1:22e02d1cfbca 335 else
GregCr 1:22e02d1cfbca 336 {
GregCr 1:22e02d1cfbca 337 printf( "Pong...\r\n" );
GregCr 1:22e02d1cfbca 338 }
GregCr 1:22e02d1cfbca 339 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 340 Radio.SetRx(RX_TIMEOUT_TICK_SIZE* RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 341 break;
GregCr 1:22e02d1cfbca 342
GregCr 1:22e02d1cfbca 343 case APP_RX_TIMEOUT:
GregCr 1:22e02d1cfbca 344 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 345 if( isMaster == true )
GregCr 1:22e02d1cfbca 346 {
GregCr 1:22e02d1cfbca 347 // Send the next PING frame
GregCr 1:22e02d1cfbca 348 memcpy( Buffer, PingMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 349 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 350 Radio.SendPayload( Buffer, BufferSize,RX_TIMEOUT_TICK_SIZE* TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 351 }
GregCr 1:22e02d1cfbca 352 else
GregCr 1:22e02d1cfbca 353 {
GregCr 1:22e02d1cfbca 354 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 355 Radio.SetRx( RX_TIMEOUT_TICK_SIZE * RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 356 }
GregCr 1:22e02d1cfbca 357 break;
GregCr 1:22e02d1cfbca 358
GregCr 1:22e02d1cfbca 359 case APP_RX_ERROR:
GregCr 1:22e02d1cfbca 360 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 361 // We have received a Packet with a CRC error, send reply as if packet was correct
GregCr 1:22e02d1cfbca 362 if( isMaster == true )
GregCr 1:22e02d1cfbca 363 {
GregCr 1:22e02d1cfbca 364 // Send the next PING frame
GregCr 1:22e02d1cfbca 365 memcpy( Buffer, PingMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 366 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 367 Radio.SendPayload( Buffer, BufferSize, RX_TIMEOUT_TICK_SIZE *TX_TIMEOUT_VALUE);
GregCr 1:22e02d1cfbca 368 }
GregCr 1:22e02d1cfbca 369 else
GregCr 1:22e02d1cfbca 370 {
GregCr 1:22e02d1cfbca 371 // Send the next PONG frame
GregCr 1:22e02d1cfbca 372 memcpy( Buffer, PongMsg, PINGPONGSIZE );
GregCr 1:22e02d1cfbca 373 Radio.SetDioIrqParams( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 374 Radio.SendPayload( Buffer, BufferSize, RX_TIMEOUT_TICK_SIZE* TX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 375 }
GregCr 1:22e02d1cfbca 376 break;
GregCr 1:22e02d1cfbca 377
GregCr 1:22e02d1cfbca 378 case APP_TX_TIMEOUT:
GregCr 1:22e02d1cfbca 379 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 380 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
nimita23 2:2bedac9faed3 381 Radio.SetRx( RX_TIMEOUT_TICK_SIZE* RX_TIMEOUT_VALUE );
GregCr 1:22e02d1cfbca 382 break;
GregCr 1:22e02d1cfbca 383
GregCr 1:22e02d1cfbca 384 case APP_LOWPOWER:
GregCr 1:22e02d1cfbca 385 break;
GregCr 1:22e02d1cfbca 386
GregCr 1:22e02d1cfbca 387 default:
GregCr 1:22e02d1cfbca 388 // Set low power
GregCr 1:22e02d1cfbca 389 break;
GregCr 1:22e02d1cfbca 390 }
GregCr 1:22e02d1cfbca 391 }
GregCr 1:22e02d1cfbca 392 }
GregCr 1:22e02d1cfbca 393
GregCr 1:22e02d1cfbca 394 void OnTxDone( void )
GregCr 1:22e02d1cfbca 395 {
GregCr 1:22e02d1cfbca 396 AppState = APP_TX;
GregCr 1:22e02d1cfbca 397 }
GregCr 1:22e02d1cfbca 398
GregCr 1:22e02d1cfbca 399 void OnRxDone( void )
GregCr 1:22e02d1cfbca 400 {
GregCr 1:22e02d1cfbca 401 AppState = APP_RX;/*
GregCr 1:22e02d1cfbca 402 Radio.GetPacketStatus(&packetStatus);
GregCr 1:22e02d1cfbca 403 #if ( defined( MODE_BLE ) || defined( MODE_GENERIC ) )
GregCr 1:22e02d1cfbca 404 RssiValue = packetStatus.Ble.RssiSync;
GregCr 1:22e02d1cfbca 405 printf("rssi: %d\n\r", RssiValue);
GregCr 1:22e02d1cfbca 406 #elif defined( MODE_LORA )
GregCr 1:22e02d1cfbca 407 RssiValue = packetStatus.Lr24.RssiPkt;
GregCr 1:22e02d1cfbca 408 SnrValue = packetStatus.Lr24.SnrPkt;
GregCr 1:22e02d1cfbca 409 printf("rssi: %d; snr: %d\n\r", RssiValue, SnrValue );
GregCr 1:22e02d1cfbca 410 #endif*/
GregCr 1:22e02d1cfbca 411 }
GregCr 1:22e02d1cfbca 412
GregCr 1:22e02d1cfbca 413 void OnTxTimeout( void )
GregCr 1:22e02d1cfbca 414 {
GregCr 1:22e02d1cfbca 415 AppState = APP_TX_TIMEOUT;
GregCr 1:22e02d1cfbca 416 printf( "<>>>>>>>>TXE\r\n" );
GregCr 1:22e02d1cfbca 417 }
GregCr 1:22e02d1cfbca 418
GregCr 1:22e02d1cfbca 419 void OnRxTimeout( void )
GregCr 1:22e02d1cfbca 420 {
GregCr 1:22e02d1cfbca 421 AppState = APP_RX_TIMEOUT;
GregCr 1:22e02d1cfbca 422 }
GregCr 1:22e02d1cfbca 423
GregCr 1:22e02d1cfbca 424 void OnRxError( IrqErrorCode_t errorCode )
GregCr 1:22e02d1cfbca 425 {
GregCr 1:22e02d1cfbca 426 AppState = APP_RX_ERROR;
GregCr 1:22e02d1cfbca 427 printf( "RXE<>>>>>>>>\r\n" );
GregCr 1:22e02d1cfbca 428 }
nimita23 2:2bedac9faed3 429 //
nimita23 2:2bedac9faed3 430 //void OnRangingDone( IrqRangingCode_t val )
nimita23 2:2bedac9faed3 431 //{
nimita23 2:2bedac9faed3 432 //}
GregCr 1:22e02d1cfbca 433
GregCr 1:22e02d1cfbca 434 void OnCadDone( bool channelActivityDetected )
GregCr 1:22e02d1cfbca 435 {
GregCr 1:22e02d1cfbca 436 }