Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
FCH_31
Date:
Wed Aug 02 21:59:03 2017 +0000
Revision:
2:57f098de07c7
Parent:
1:22e02d1cfbca
Child:
3:3adb454ba1d2
Version 0.1  Base compl?te

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 1:22e02d1cfbca 1 #include "mbed.h"
GregCr 1:22e02d1cfbca 2 #include "radio.h"
GregCr 1:22e02d1cfbca 3 #include "sx1280-hal.h"
GregCr 1:22e02d1cfbca 4
GregCr 1:22e02d1cfbca 5
FCH_31 2:57f098de07c7 6 #define FIRMWARE_VERSION ( ( char* )"Firmware Version: 01" ) // display firmware version on RS232
FCH_31 2:57f098de07c7 7 #define MODE_LORA // Lora modulation
FCH_31 2:57f098de07c7 8 #define RF_FREQUENCY 2400000000UL // HzNominal frequency
FCH_31 2:57f098de07c7 9 #define TX_OUTPUT_POWER 13 // Output power in dBm [-18..+13] dBm
GregCr 1:22e02d1cfbca 10
FCH_31 2:57f098de07c7 11 typedef enum // States of the application
GregCr 1:22e02d1cfbca 12 {
GregCr 1:22e02d1cfbca 13 APP_LOWPOWER,
GregCr 1:22e02d1cfbca 14 APP_RX,
GregCr 1:22e02d1cfbca 15 APP_RX_TIMEOUT,
GregCr 1:22e02d1cfbca 16 APP_RX_ERROR,
GregCr 1:22e02d1cfbca 17 APP_TX,
GregCr 1:22e02d1cfbca 18 APP_TX_TIMEOUT,
GregCr 1:22e02d1cfbca 19 }AppStates_t;
GregCr 1:22e02d1cfbca 20
FCH_31 2:57f098de07c7 21 #define BUFFER_SIZE 16 // Payload size
FCH_31 2:57f098de07c7 22 //#define BUFFER_SIZE 34
GregCr 1:22e02d1cfbca 23
GregCr 1:22e02d1cfbca 24 /*!
FCH_31 2:57f098de07c7 25 * Message type for this application
GregCr 1:22e02d1cfbca 26 */
FCH_31 2:57f098de07c7 27 //const uint8_t PingMsg[] = "DATA IOT TERMINAL";
FCH_31 2:57f098de07c7 28 //const uint8_t PongMsg[] = "RESPONSE GATEWAY ";
FCH_31 2:57f098de07c7 29 const uint8_t PingMsg[] = "PING DATA IOT TERMINAL";
GregCr 1:22e02d1cfbca 30 const uint8_t PongMsg[] = "PONG";
GregCr 1:22e02d1cfbca 31
GregCr 1:22e02d1cfbca 32 /*!
GregCr 1:22e02d1cfbca 33 * \brief Defines the size of the token defining message type in the payload
GregCr 1:22e02d1cfbca 34 */
GregCr 1:22e02d1cfbca 35 #define PINGPONGSIZE 4
GregCr 1:22e02d1cfbca 36
FCH_31 2:57f098de07c7 37 uint8_t BufferSize = BUFFER_SIZE; // Size of the buffer
FCH_31 2:57f098de07c7 38 uint8_t Buffer[BUFFER_SIZE]; // Buffer
GregCr 1:22e02d1cfbca 39
FCH_31 2:57f098de07c7 40 AppStates_t AppState = APP_LOWPOWER; // State of the application
GregCr 1:22e02d1cfbca 41
GregCr 1:22e02d1cfbca 42 int8_t RssiValue = 0;
GregCr 1:22e02d1cfbca 43 int8_t SnrValue = 0;
GregCr 1:22e02d1cfbca 44
FCH_31 2:57f098de07c7 45 void OnTxDone ( void ); // Function to be executed on Radio Tx Done event
FCH_31 2:57f098de07c7 46 void OnRxDone ( void ); // Function to be executed on Radio Rx Done event
FCH_31 2:57f098de07c7 47 void OnTxTimeout ( void ); // Function executed on Radio Tx Timeout event
FCH_31 2:57f098de07c7 48 void OnRxTimeout ( void ); // Function executed on Radio Rx Timeout event
FCH_31 2:57f098de07c7 49 void OnRxError ( IrqErrorCode_t ); // Function executed on Radio Rx Error event
GregCr 1:22e02d1cfbca 50
FCH_31 2:57f098de07c7 51 RadioCallbacks_t callbacks = // All the callbacks are stored in a structure
GregCr 1:22e02d1cfbca 52 {
GregCr 1:22e02d1cfbca 53 &OnTxDone, // txDone
GregCr 1:22e02d1cfbca 54 &OnRxDone, // rxDone
GregCr 1:22e02d1cfbca 55 NULL, // syncWordDone
GregCr 1:22e02d1cfbca 56 NULL, // headerDone
GregCr 1:22e02d1cfbca 57 &OnTxTimeout, // txTimeout
GregCr 1:22e02d1cfbca 58 &OnRxTimeout, // rxTimeout
GregCr 1:22e02d1cfbca 59 &OnRxError, // rxError
GregCr 1:22e02d1cfbca 60 NULL, // rangingDone
GregCr 1:22e02d1cfbca 61 NULL, // cadDone
GregCr 1:22e02d1cfbca 62 };
GregCr 1:22e02d1cfbca 63
FCH_31 2:57f098de07c7 64 // mosi, miso, sclk, nss, busy, dio1, dio2, dio3, rst, callbacks...
FCH_31 2:57f098de07c7 65 SX1280Hal Radio ( D11 , D12 , D13 , D7 , D3 , D5 , NC , NC , A0 , &callbacks );
GregCr 1:22e02d1cfbca 66
FCH_31 2:57f098de07c7 67 DigitalOut ANT_SW ( A3 );
FCH_31 2:57f098de07c7 68 DigitalOut TxLed ( A4 );
FCH_31 2:57f098de07c7 69 DigitalOut RxLed ( A5 );
GregCr 1:22e02d1cfbca 70
GregCr 1:22e02d1cfbca 71 /*!
FCH_31 2:57f098de07c7 72 * Define IO for Unused Pin
GregCr 1:22e02d1cfbca 73 */
FCH_31 2:57f098de07c7 74 DigitalOut F_CS ( D6 ); // MBED description of pin
FCH_31 2:57f098de07c7 75 DigitalOut SD_CS ( D8 ); // MBED description of pin
GregCr 1:22e02d1cfbca 76
FCH_31 2:57f098de07c7 77 #define TX_TIMEOUT_VALUE 100 // ms Number of tick size steps for tx timeout
FCH_31 2:57f098de07c7 78 #define RX_TIMEOUT_VALUE 100 // ms Number of tick size steps for rx timeout
FCH_31 2:57f098de07c7 79 #define RX_TIMEOUT_TICK_SIZE RADIO_TICK_SIZE_1000_US // Size of ticks (used for Tx and Rx timeout)
FCH_31 2:57f098de07c7 80
FCH_31 2:57f098de07c7 81 uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT; // Mask of IRQs to listen to in rx mode
FCH_31 2:57f098de07c7 82 uint16_t TxIrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; // Mask of IRQs to listen to in tx mode
FCH_31 2:57f098de07c7 83
FCH_31 2:57f098de07c7 84 PacketParams_t PacketParams; // Locals parameters and status for radio API
FCH_31 2:57f098de07c7 85 PacketStatus_t PacketStatus; // NEED TO BE OPTIMIZED, COPY OF STUCTURE ALREADY EXISTING
GregCr 1:22e02d1cfbca 86
FCH_31 2:57f098de07c7 87 bool isMaster = true;
FCH_31 2:57f098de07c7 88 ModulationParams_t modulationParams;
FCH_31 2:57f098de07c7 89
FCH_31 2:57f098de07c7 90
FCH_31 2:57f098de07c7 91 /* Specify serial datarate for UART debug output */
FCH_31 2:57f098de07c7 92 void baud ( int baudrate ) { Serial s( USBTX, USBRX ); s.baud( baudrate );}
GregCr 1:22e02d1cfbca 93
FCH_31 2:57f098de07c7 94 void setup () {
FCH_31 2:57f098de07c7 95 baud (115200);
FCH_31 2:57f098de07c7 96
FCH_31 2:57f098de07c7 97 printf( "\n\n\r SX1280 Terminal IoT LORA MODULATION 2.4GHz (%s)\n\n\r", FIRMWARE_VERSION );
GregCr 1:22e02d1cfbca 98
FCH_31 2:57f098de07c7 99 F_CS = 1 ;
FCH_31 2:57f098de07c7 100 SD_CS = 1 ;
FCH_31 2:57f098de07c7 101 RxLed = 1 ;
FCH_31 2:57f098de07c7 102 TxLed = 1 ;
FCH_31 2:57f098de07c7 103 ANT_SW = 1 ;
GregCr 1:22e02d1cfbca 104
GregCr 1:22e02d1cfbca 105 wait_ms( 500 ); // wait for on board DC/DC start-up time
GregCr 1:22e02d1cfbca 106
FCH_31 2:57f098de07c7 107 Radio.Init ( );
FCH_31 2:57f098de07c7 108
FCH_31 2:57f098de07c7 109 Radio.SetRegulatorMode ( USE_DCDC ); // Can also be set in LDO mode but consume more power
GregCr 1:22e02d1cfbca 110
FCH_31 2:57f098de07c7 111 memset ( &Buffer, 0x00, BufferSize );
GregCr 1:22e02d1cfbca 112
FCH_31 2:57f098de07c7 113
FCH_31 2:57f098de07c7 114 RxLed = 0;
FCH_31 2:57f098de07c7 115 TxLed = 0;
FCH_31 2:57f098de07c7 116
FCH_31 2:57f098de07c7 117 modulationParams.PacketType = PACKET_TYPE_LORA ;
FCH_31 2:57f098de07c7 118 modulationParams.Params.LoRa.SpreadingFactor = LORA_SF7 ;
FCH_31 2:57f098de07c7 119 modulationParams.Params.LoRa.Bandwidth = LORA_BW_0400 ;
FCH_31 2:57f098de07c7 120 modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5 ;
GregCr 1:22e02d1cfbca 121
FCH_31 2:57f098de07c7 122 PacketParams.PacketType = PACKET_TYPE_LORA ;
FCH_31 2:57f098de07c7 123 PacketParams.Params.LoRa.PreambleLength = 0x08 ;
FCH_31 2:57f098de07c7 124 PacketParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH;
FCH_31 2:57f098de07c7 125 PacketParams.Params.LoRa.PayloadLength = 15 ;
GregCr 1:22e02d1cfbca 126 PacketParams.Params.LoRa.CrcMode = LORA_CRC_ON;
GregCr 1:22e02d1cfbca 127 PacketParams.Params.LoRa.InvertIQ = LORA_IQ_INVERTED;
GregCr 1:22e02d1cfbca 128
GregCr 1:22e02d1cfbca 129
FCH_31 2:57f098de07c7 130 Radio.SetStandby ( STDBY_RC );
FCH_31 2:57f098de07c7 131 Radio.SetPacketType ( modulationParams.PacketType );
FCH_31 2:57f098de07c7 132 Radio.SetModulationParams ( &modulationParams );
FCH_31 2:57f098de07c7 133 Radio.SetPacketParams ( &PacketParams );
GregCr 1:22e02d1cfbca 134
FCH_31 2:57f098de07c7 135 Radio.SetRfFrequency ( RF_FREQUENCY );
FCH_31 2:57f098de07c7 136 Radio.SetBufferBaseAddresses ( 0x00, 0x00 );
FCH_31 2:57f098de07c7 137 Radio.SetTxParams ( TX_OUTPUT_POWER, RADIO_RAMP_20_US );
GregCr 1:22e02d1cfbca 138
FCH_31 2:57f098de07c7 139 Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 140 Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 141
FCH_31 2:57f098de07c7 142 AppState = APP_LOWPOWER;
FCH_31 2:57f098de07c7 143
FCH_31 2:57f098de07c7 144 }
GregCr 1:22e02d1cfbca 145
FCH_31 2:57f098de07c7 146 void loop () {
GregCr 1:22e02d1cfbca 147 switch( AppState )
GregCr 1:22e02d1cfbca 148 {
GregCr 1:22e02d1cfbca 149 case APP_RX:
FCH_31 2:57f098de07c7 150 printf( "*** TERM *** APP_RX \r\n" );
FCH_31 2:57f098de07c7 151 AppState = APP_LOWPOWER;
FCH_31 2:57f098de07c7 152 RxLed = !RxLed;
FCH_31 2:57f098de07c7 153 Radio.GetPayload ( Buffer, &BufferSize, BUFFER_SIZE );
FCH_31 2:57f098de07c7 154
FCH_31 2:57f098de07c7 155 printf ( "Message Received : %s \r\n", Buffer );
FCH_31 2:57f098de07c7 156
GregCr 1:22e02d1cfbca 157 if( isMaster == true )
GregCr 1:22e02d1cfbca 158 {
GregCr 1:22e02d1cfbca 159 if( BufferSize > 0 )
GregCr 1:22e02d1cfbca 160 {
GregCr 1:22e02d1cfbca 161 if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 162 {
FCH_31 2:57f098de07c7 163 printf ( "<Master> Recv ...Pong\r\n" );
FCH_31 2:57f098de07c7 164 wait_ms (2000) ;
GregCr 1:22e02d1cfbca 165 memcpy( Buffer, PingMsg, PINGPONGSIZE );
FCH_31 2:57f098de07c7 166 Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 167 Radio.SendPayload ( Buffer, BufferSize,( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 168 }
FCH_31 2:57f098de07c7 169
GregCr 1:22e02d1cfbca 170 else // valid reception but neither a PING or a PONG message
GregCr 1:22e02d1cfbca 171 { // Set device as master ans start again
FCH_31 2:57f098de07c7 172 printf( "<Master> Unknown message \r\n" );
FCH_31 2:57f098de07c7 173
GregCr 1:22e02d1cfbca 174 isMaster = true;
FCH_31 2:57f098de07c7 175 Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 176 Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 177 }
GregCr 1:22e02d1cfbca 178 }
GregCr 1:22e02d1cfbca 179 }
FCH_31 2:57f098de07c7 180
FCH_31 2:57f098de07c7 181 // Receiver
GregCr 1:22e02d1cfbca 182 else
GregCr 1:22e02d1cfbca 183 {
GregCr 1:22e02d1cfbca 184 if( BufferSize > 0 )
GregCr 1:22e02d1cfbca 185 {
GregCr 1:22e02d1cfbca 186 if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, PINGPONGSIZE ) == 0 )
GregCr 1:22e02d1cfbca 187 {
FCH_31 2:57f098de07c7 188 printf ( "...Ping\r\n" );
FCH_31 2:57f098de07c7 189 memcpy ( Buffer, PongMsg, 4 );
FCH_31 2:57f098de07c7 190 Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 191 Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 192 }
GregCr 1:22e02d1cfbca 193 else // valid reception but not a PING as expected
GregCr 1:22e02d1cfbca 194 {
FCH_31 2:57f098de07c7 195 printf( "<Slave> Unknown message \r\n" );
GregCr 1:22e02d1cfbca 196 isMaster = true;
FCH_31 2:57f098de07c7 197 Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 198 Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 199 }
GregCr 1:22e02d1cfbca 200 }
GregCr 1:22e02d1cfbca 201 }
GregCr 1:22e02d1cfbca 202 break;
GregCr 1:22e02d1cfbca 203
GregCr 1:22e02d1cfbca 204 case APP_TX:
FCH_31 2:57f098de07c7 205 printf( "*** TERM *** APP_TX \r\n" );
GregCr 1:22e02d1cfbca 206 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 207 TxLed = !TxLed;
FCH_31 2:57f098de07c7 208 if( isMaster == true ) printf( "<Master> Send Ping...\r\n" );
FCH_31 2:57f098de07c7 209 else printf( "<Slave> Send Pong...\r\n" );
FCH_31 2:57f098de07c7 210
FCH_31 2:57f098de07c7 211 Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 212 Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 213 break;
GregCr 1:22e02d1cfbca 214
GregCr 1:22e02d1cfbca 215 case APP_RX_TIMEOUT:
FCH_31 2:57f098de07c7 216 printf( "*** TERM *** APP_RX_TIMEOUT \r\n" );
GregCr 1:22e02d1cfbca 217 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 218 if( isMaster == true )
GregCr 1:22e02d1cfbca 219 {
GregCr 1:22e02d1cfbca 220 // Send the next PING frame
FCH_31 2:57f098de07c7 221 memcpy ( Buffer, PingMsg, PINGPONGSIZE );
FCH_31 2:57f098de07c7 222 Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 223 Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 224 }
GregCr 1:22e02d1cfbca 225 else
GregCr 1:22e02d1cfbca 226 {
FCH_31 2:57f098de07c7 227 Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 228 Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 229 }
GregCr 1:22e02d1cfbca 230 break;
GregCr 1:22e02d1cfbca 231
GregCr 1:22e02d1cfbca 232 case APP_RX_ERROR:
FCH_31 2:57f098de07c7 233 printf( "*** TERM *** APP_RX_ERROR \r\n" );
GregCr 1:22e02d1cfbca 234 AppState = APP_LOWPOWER;
GregCr 1:22e02d1cfbca 235 // We have received a Packet with a CRC error, send reply as if packet was correct
GregCr 1:22e02d1cfbca 236 if( isMaster == true )
GregCr 1:22e02d1cfbca 237 {
GregCr 1:22e02d1cfbca 238 // Send the next PING frame
FCH_31 2:57f098de07c7 239 memcpy ( Buffer, PingMsg, PINGPONGSIZE );
FCH_31 2:57f098de07c7 240 Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 241 Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 242 }
GregCr 1:22e02d1cfbca 243 else
GregCr 1:22e02d1cfbca 244 {
GregCr 1:22e02d1cfbca 245 // Send the next PONG frame
FCH_31 2:57f098de07c7 246 memcpy ( Buffer, PongMsg, PINGPONGSIZE );
FCH_31 2:57f098de07c7 247 Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 248 Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 249 }
GregCr 1:22e02d1cfbca 250 break;
GregCr 1:22e02d1cfbca 251
GregCr 1:22e02d1cfbca 252 case APP_TX_TIMEOUT:
FCH_31 2:57f098de07c7 253 printf( "*** TERM *** APP_TX_TIMEOUT \r\n" );
FCH_31 2:57f098de07c7 254 AppState = APP_LOWPOWER;
FCH_31 2:57f098de07c7 255 Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 2:57f098de07c7 256 Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
GregCr 1:22e02d1cfbca 257 break;
GregCr 1:22e02d1cfbca 258
GregCr 1:22e02d1cfbca 259 case APP_LOWPOWER:
GregCr 1:22e02d1cfbca 260 break;
GregCr 1:22e02d1cfbca 261
GregCr 1:22e02d1cfbca 262 default:
GregCr 1:22e02d1cfbca 263 // Set low power
GregCr 1:22e02d1cfbca 264 break;
GregCr 1:22e02d1cfbca 265 }
GregCr 1:22e02d1cfbca 266 }
FCH_31 2:57f098de07c7 267
FCH_31 2:57f098de07c7 268
FCH_31 2:57f098de07c7 269
GregCr 1:22e02d1cfbca 270
FCH_31 2:57f098de07c7 271 int main( ) { setup () ; while (1) loop () ; }
GregCr 1:22e02d1cfbca 272
FCH_31 2:57f098de07c7 273 void OnTxDone ( void ) { printf( "*** TERM *** OnTxDone \r\n" ); AppState = APP_TX ; }
FCH_31 2:57f098de07c7 274 void OnRxDone ( void ) { printf( "*** TERM *** OnRxDone \r\n" ); AppState = APP_RX ; }
FCH_31 2:57f098de07c7 275 void OnTxTimeout ( void ) { printf( "*** TERM *** OnTxTimeout \r\n" ); AppState = APP_TX_TIMEOUT ; }
FCH_31 2:57f098de07c7 276 void OnRxTimeout ( void ) { printf( "*** TERM *** OnRxTimeout \r\n" ); AppState = APP_RX_TIMEOUT ; }
FCH_31 2:57f098de07c7 277 void OnRxError ( IrqErrorCode_t errorCode ) { printf( "*** TERM *** OnRxError \r\n" ); AppState = APP_RX_ERROR ; }
FCH_31 2:57f098de07c7 278 void OnRangingDone ( IrqRangingCode_t val ) { printf( "*** TERM *** OnRangingDone \r\n" ); }
FCH_31 2:57f098de07c7 279 void OnCadDone ( bool channelActivityDetected ) { printf( "*** TERM *** OnCadDone \r\n" ); }
FCH_31 2:57f098de07c7 280
FCH_31 2:57f098de07c7 281 /*
GregCr 1:22e02d1cfbca 282 Radio.GetPacketStatus(&packetStatus);
GregCr 1:22e02d1cfbca 283 RssiValue = packetStatus.Lr24.RssiPkt;
GregCr 1:22e02d1cfbca 284 SnrValue = packetStatus.Lr24.SnrPkt;
GregCr 1:22e02d1cfbca 285 printf("rssi: %d; snr: %d\n\r", RssiValue, SnrValue );
FCH_31 2:57f098de07c7 286 */