test

Dependencies:   SX1276Lib1 WakeUp mbed-src

Fork of SX1276PingPong by Semtech

Committer:
lzbpli
Date:
Thu Jul 07 06:49:15 2016 +0000
Revision:
15:ddd519fefbe8
Parent:
14:c7251480feb9
Child:
16:cb5523c208e6
beifeng1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:1ed39951ab7b 1 #include "mbed.h"
GregCr 4:5ece30264cd9 2 #include "main.h"
GregCr 14:c7251480feb9 3 #include "sx1276-hal.h"
lzbpli 15:ddd519fefbe8 4 //#include "debug.h"
GregCr 0:1ed39951ab7b 5
GregCr 0:1ed39951ab7b 6 /* Set this flag to '1' to display debug messages on the console */
lzbpli 15:ddd519fefbe8 7 #define DEBUG_MESSAGE 1
GregCr 0:1ed39951ab7b 8
GregCr 0:1ed39951ab7b 9 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
GregCr 5:f2431c4fe3bb 10 #define USE_MODEM_LORA 1
GregCr 0:1ed39951ab7b 11 #define USE_MODEM_FSK !USE_MODEM_LORA
GregCr 0:1ed39951ab7b 12
lzbpli 15:ddd519fefbe8 13 #define RF_FREQUENCY 471899946 // Hz
lzbpli 15:ddd519fefbe8 14 #define TX_OUTPUT_POWER 20 // 14 dBm
GregCr 0:1ed39951ab7b 15
GregCr 0:1ed39951ab7b 16 #if USE_MODEM_LORA == 1
GregCr 0:1ed39951ab7b 17
lzbpli 15:ddd519fefbe8 18 #define LORA_BANDWIDTH 0 // [0: 125 kHz,
lzbpli 15:ddd519fefbe8 19 // 1: 250 kHz,
lzbpli 15:ddd519fefbe8 20 // 2: 500 kHz,
lzbpli 15:ddd519fefbe8 21 // 3: Reserved]
lzbpli 15:ddd519fefbe8 22 #define LORA_SPREADING_FACTOR 12 // [SF7..SF12]
lzbpli 15:ddd519fefbe8 23 #define LORA_CODINGRATE 1 // [1: 4/5,
lzbpli 15:ddd519fefbe8 24 // 2: 4/6,
lzbpli 15:ddd519fefbe8 25 // 3: 4/7,
lzbpli 15:ddd519fefbe8 26 // 4: 4/8]
lzbpli 15:ddd519fefbe8 27 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
lzbpli 15:ddd519fefbe8 28 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
lzbpli 15:ddd519fefbe8 29 #define LORA_FIX_LENGTH_PAYLOAD_ON false
lzbpli 15:ddd519fefbe8 30 #define LORA_FHSS_ENABLED false
lzbpli 15:ddd519fefbe8 31 #define LORA_NB_SYMB_HOP 4
lzbpli 15:ddd519fefbe8 32 #define LORA_IQ_INVERSION_ON false
lzbpli 15:ddd519fefbe8 33 #define LORA_CRC_ENABLED true
lzbpli 15:ddd519fefbe8 34
GregCr 0:1ed39951ab7b 35 #elif USE_MODEM_FSK == 1
GregCr 0:1ed39951ab7b 36
lzbpli 15:ddd519fefbe8 37 #define FSK_FDEV 25000 // HzY
lzbpli 15:ddd519fefbe8 38 #define FSK_DATARATE 19200 // bps
lzbpli 15:ddd519fefbe8 39 #define FSK_BANDWIDTH 50000 // Hz
lzbpli 15:ddd519fefbe8 40 #define FSK_AFC_BANDWIDTH 83333 // Hz
lzbpli 15:ddd519fefbe8 41 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
lzbpli 15:ddd519fefbe8 42 #define FSK_FIX_LENGTH_PAYLOAD_ON false
lzbpli 15:ddd519fefbe8 43 #define FSK_CRC_ENABLED true
lzbpli 15:ddd519fefbe8 44
GregCr 0:1ed39951ab7b 45 #else
lzbpli 15:ddd519fefbe8 46 #error "Please define a modem in the compiler options."
GregCr 0:1ed39951ab7b 47 #endif
GregCr 0:1ed39951ab7b 48
lzbpli 15:ddd519fefbe8 49 #define RX_TIMEOUT_VALUE 3000000 // in us
GregCr 0:1ed39951ab7b 50 #define BUFFER_SIZE 32 // Define the payload size here
GregCr 0:1ed39951ab7b 51
GregCr 8:f956dee63a56 52 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
GregCr 3:8b9e2a4df4b5 53 DigitalOut led(LED2);
GregCr 3:8b9e2a4df4b5 54 #else
GregCr 3:8b9e2a4df4b5 55 DigitalOut led(LED1);
GregCr 3:8b9e2a4df4b5 56 #endif
lzbpli 15:ddd519fefbe8 57 DigitalOut TXIO(PA_1);
GregCr 0:1ed39951ab7b 58 /*
GregCr 0:1ed39951ab7b 59 * Global variables declarations
GregCr 0:1ed39951ab7b 60 */
lzbpli 15:ddd519fefbe8 61 typedef enum {
mluis 10:7af820d1e1df 62 LOWPOWER = 0,
mluis 10:7af820d1e1df 63 IDLE,
lzbpli 15:ddd519fefbe8 64
mluis 10:7af820d1e1df 65 RX,
mluis 10:7af820d1e1df 66 RX_TIMEOUT,
mluis 10:7af820d1e1df 67 RX_ERROR,
lzbpli 15:ddd519fefbe8 68
mluis 10:7af820d1e1df 69 TX,
mluis 10:7af820d1e1df 70 TX_TIMEOUT,
lzbpli 15:ddd519fefbe8 71
mluis 10:7af820d1e1df 72 CAD,
mluis 10:7af820d1e1df 73 CAD_DONE
lzbpli 15:ddd519fefbe8 74 } AppStates_t;
GregCr 0:1ed39951ab7b 75
mluis 10:7af820d1e1df 76 volatile AppStates_t State = LOWPOWER;
mluis 10:7af820d1e1df 77
mluis 10:7af820d1e1df 78 /*!
mluis 10:7af820d1e1df 79 * Radio events function pointer
mluis 10:7af820d1e1df 80 */
mluis 10:7af820d1e1df 81 static RadioEvents_t RadioEvents;
mluis 10:7af820d1e1df 82
mluis 10:7af820d1e1df 83 /*
mluis 10:7af820d1e1df 84 * Global variables declarations
mluis 10:7af820d1e1df 85 */
GregCr 14:c7251480feb9 86 SX1276MB1xAS Radio( NULL );
GregCr 0:1ed39951ab7b 87
GregCr 0:1ed39951ab7b 88 const uint8_t PingMsg[] = "PING";
GregCr 0:1ed39951ab7b 89 const uint8_t PongMsg[] = "PONG";
GregCr 0:1ed39951ab7b 90
GregCr 0:1ed39951ab7b 91 uint16_t BufferSize = BUFFER_SIZE;
GregCr 0:1ed39951ab7b 92 uint8_t Buffer[BUFFER_SIZE];
GregCr 0:1ed39951ab7b 93
GregCr 5:f2431c4fe3bb 94 int16_t RssiValue = 0.0;
GregCr 5:f2431c4fe3bb 95 int8_t SnrValue = 0.0;
lzbpli 15:ddd519fefbe8 96 Serial pc(PB_6, PB_7);
lzbpli 15:ddd519fefbe8 97 int main()
GregCr 0:1ed39951ab7b 98 {
GregCr 0:1ed39951ab7b 99 uint8_t i;
GregCr 0:1ed39951ab7b 100 bool isMaster = true;
lzbpli 15:ddd519fefbe8 101 pc.printf("Hello World !\n");
lzbpli 15:ddd519fefbe8 102 //debug( "\n\n\r SX1276 Ping Pong Demo Application \n\n\r" );
mluis 10:7af820d1e1df 103
mluis 10:7af820d1e1df 104 // Initialize Radio driver
mluis 10:7af820d1e1df 105 RadioEvents.TxDone = OnTxDone;
mluis 10:7af820d1e1df 106 RadioEvents.RxDone = OnRxDone;
mluis 10:7af820d1e1df 107 RadioEvents.RxError = OnRxError;
mluis 10:7af820d1e1df 108 RadioEvents.TxTimeout = OnTxTimeout;
mluis 10:7af820d1e1df 109 RadioEvents.RxTimeout = OnRxTimeout;
mluis 10:7af820d1e1df 110 Radio.Init( &RadioEvents );
lzbpli 15:ddd519fefbe8 111
GregCr 7:c1bbd6c56979 112 // verify the connection with the board
lzbpli 15:ddd519fefbe8 113 while( Radio.Read( REG_VERSION ) == 0x00 ) {
lzbpli 15:ddd519fefbe8 114 // debug( "Radio could not be detected!\n\r", NULL );
lzbpli 15:ddd519fefbe8 115 pc.printf(".");
GregCr 7:c1bbd6c56979 116 wait( 1 );
GregCr 2:59e108728d71 117 }
lzbpli 15:ddd519fefbe8 118 TXIO = 1;
lzbpli 15:ddd519fefbe8 119 // debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ) , "\n\r > Board Type: SX1276MB1LAS < \n\r" );
lzbpli 15:ddd519fefbe8 120 // debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ) , "\n\r > Board Type: SX1276MB1MAS < \n\r" );
GregCr 0:1ed39951ab7b 121
lzbpli 15:ddd519fefbe8 122 Radio.SetChannel( RF_FREQUENCY );
lzbpli 15:ddd519fefbe8 123 pc.printf("VERSION:%x\r\n",Radio.Read( REG_FRFMSB ));
lzbpli 15:ddd519fefbe8 124 pc.printf("VERSION:%x\r\n",Radio.Read( REG_FRFMID ));
GregCr 0:1ed39951ab7b 125 #if USE_MODEM_LORA == 1
lzbpli 15:ddd519fefbe8 126
lzbpli 15:ddd519fefbe8 127 // debug_if( LORA_FHSS_ENABLED, "\n\n\r > LORA FHSS Mode < \n\n\r");
lzbpli 15:ddd519fefbe8 128 // debug_if( !LORA_FHSS_ENABLED, "\n\n\r > LORA Mode < \n\n\r");
GregCr 7:c1bbd6c56979 129
GregCr 0:1ed39951ab7b 130 Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
lzbpli 15:ddd519fefbe8 131 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
lzbpli 15:ddd519fefbe8 132 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
lzbpli 15:ddd519fefbe8 133 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
lzbpli 15:ddd519fefbe8 134 LORA_IQ_INVERSION_ON, 2000000 );
lzbpli 15:ddd519fefbe8 135
GregCr 0:1ed39951ab7b 136 Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
lzbpli 15:ddd519fefbe8 137 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
lzbpli 15:ddd519fefbe8 138 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
lzbpli 15:ddd519fefbe8 139 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
lzbpli 15:ddd519fefbe8 140 LORA_IQ_INVERSION_ON, true );
lzbpli 15:ddd519fefbe8 141
GregCr 0:1ed39951ab7b 142 #elif USE_MODEM_FSK == 1
GregCr 0:1ed39951ab7b 143
lzbpli 15:ddd519fefbe8 144 // debug("\n\n\r > FSK Mode < \n\n\r");
GregCr 0:1ed39951ab7b 145 Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
lzbpli 15:ddd519fefbe8 146 FSK_DATARATE, 0,
lzbpli 15:ddd519fefbe8 147 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
lzbpli 15:ddd519fefbe8 148 FSK_CRC_ENABLED, 0, 0, 0, 2000000 );
lzbpli 15:ddd519fefbe8 149
GregCr 0:1ed39951ab7b 150 Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
lzbpli 15:ddd519fefbe8 151 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
lzbpli 15:ddd519fefbe8 152 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
lzbpli 15:ddd519fefbe8 153 0, 0, false, false );
lzbpli 15:ddd519fefbe8 154
GregCr 0:1ed39951ab7b 155 #else
GregCr 0:1ed39951ab7b 156
GregCr 0:1ed39951ab7b 157 #error "Please define a modem in the compiler options."
GregCr 0:1ed39951ab7b 158
GregCr 0:1ed39951ab7b 159 #endif
lzbpli 15:ddd519fefbe8 160
lzbpli 15:ddd519fefbe8 161 pc.printf("VERSION:%x\r\n",Radio.Read( REG_LR_MODEMCONFIG1 ));
lzbpli 15:ddd519fefbe8 162 pc.printf("VERSION:%x\r\n",Radio.Read( REG_LR_MODEMCONFIG2 ));
lzbpli 15:ddd519fefbe8 163 // debug_if( DEBUG_MESSAGE, "Starting Ping-Pong loop\r\n" );
lzbpli 15:ddd519fefbe8 164
GregCr 3:8b9e2a4df4b5 165 led = 0;
lzbpli 15:ddd519fefbe8 166
GregCr 0:1ed39951ab7b 167 Radio.Rx( RX_TIMEOUT_VALUE );
lzbpli 15:ddd519fefbe8 168
lzbpli 15:ddd519fefbe8 169 while( 1 ) {
lzbpli 15:ddd519fefbe8 170 switch( State ) {
lzbpli 15:ddd519fefbe8 171 case RX:
lzbpli 15:ddd519fefbe8 172 // debugs((char* )Buffer,sizeof(Buffer));
lzbpli 15:ddd519fefbe8 173 // debug( "rssi:%d dbm\r\n",Radio.GetRssi( MODEM_LORA ));
lzbpli 15:ddd519fefbe8 174 // debug( "\r\n" );
lzbpli 15:ddd519fefbe8 175 if( isMaster == true ) {
lzbpli 15:ddd519fefbe8 176 if( BufferSize > 0 ) {
lzbpli 15:ddd519fefbe8 177 if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, 4 ) == 0 ) {
lzbpli 15:ddd519fefbe8 178 led = !led;
lzbpli 15:ddd519fefbe8 179 // debug( "...Pong\r\n" );
lzbpli 15:ddd519fefbe8 180 pc.printf("...Pong...\r\n");
lzbpli 15:ddd519fefbe8 181 // Send the next PING frame
lzbpli 15:ddd519fefbe8 182 strcpy( ( char* )Buffer, ( char* )PingMsg );
lzbpli 15:ddd519fefbe8 183 // We fill the buffer with numbers for the payload
lzbpli 15:ddd519fefbe8 184 for( i = 4; i < BufferSize; i++ ) {
lzbpli 15:ddd519fefbe8 185 Buffer[i] = i - 4;
lzbpli 15:ddd519fefbe8 186 }
lzbpli 15:ddd519fefbe8 187 wait_ms( 10 );
lzbpli 15:ddd519fefbe8 188 Radio.Send( Buffer, BufferSize );
lzbpli 15:ddd519fefbe8 189 } else if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 ) {
lzbpli 15:ddd519fefbe8 190 // A master already exists then become a slave
lzbpli 15:ddd519fefbe8 191 // debug( "...Ping\r\n" );
lzbpli 15:ddd519fefbe8 192 pc.printf("...Ping...\r\n");
lzbpli 15:ddd519fefbe8 193 led = !led;
lzbpli 15:ddd519fefbe8 194 isMaster = false;
lzbpli 15:ddd519fefbe8 195 // Send th e next PONG frame
lzbpli 15:ddd519fefbe8 196 strcpy( ( char* )Buffer, ( char* )PongMsg );
lzbpli 15:ddd519fefbe8 197 // We fill the buffer with numbers for the payload
lzbpli 15:ddd519fefbe8 198 for( i = 4; i < BufferSize; i++ ) {
lzbpli 15:ddd519fefbe8 199 Buffer[i] = i - 4;
lzbpli 15:ddd519fefbe8 200 }
lzbpli 15:ddd519fefbe8 201 wait_ms( 10 );
lzbpli 15:ddd519fefbe8 202 Radio.Send( Buffer, BufferSize );
lzbpli 15:ddd519fefbe8 203 } else { // valid reception but neither a PING or a PONG message
lzbpli 15:ddd519fefbe8 204 // Set device as master ans start again
lzbpli 15:ddd519fefbe8 205 isMaster = true;
lzbpli 15:ddd519fefbe8 206 Radio.Rx( RX_TIMEOUT_VALUE );
GregCr 0:1ed39951ab7b 207 }
GregCr 0:1ed39951ab7b 208 }
lzbpli 15:ddd519fefbe8 209 } else {
lzbpli 15:ddd519fefbe8 210 if( BufferSize > 0 ) {
lzbpli 15:ddd519fefbe8 211 if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 ) {
lzbpli 15:ddd519fefbe8 212 led = !led;
lzbpli 15:ddd519fefbe8 213 //debug( "...Ping\r\n" );
lzbpli 15:ddd519fefbe8 214 pc.printf("...Ping...\r\n");
lzbpli 15:ddd519fefbe8 215 // Send the reply to the PING string
lzbpli 15:ddd519fefbe8 216 strcpy( ( char* )Buffer, ( char* )PongMsg );
lzbpli 15:ddd519fefbe8 217 // We fill the buffer with numbers for the payload
lzbpli 15:ddd519fefbe8 218 for( i = 4; i < BufferSize; i++ ) {
lzbpli 15:ddd519fefbe8 219 Buffer[i] = i - 4;
lzbpli 15:ddd519fefbe8 220 }
lzbpli 15:ddd519fefbe8 221 wait_ms( 10 );
lzbpli 15:ddd519fefbe8 222 Radio.Send( Buffer, BufferSize );
lzbpli 15:ddd519fefbe8 223 } else { // valid reception but not a PING as expected
lzbpli 15:ddd519fefbe8 224 // Set device as master and start again
lzbpli 15:ddd519fefbe8 225 isMaster = true;
lzbpli 15:ddd519fefbe8 226 Radio.Rx( RX_TIMEOUT_VALUE );
lzbpli 15:ddd519fefbe8 227 }
lzbpli 15:ddd519fefbe8 228 }
GregCr 0:1ed39951ab7b 229 }
lzbpli 15:ddd519fefbe8 230 State = LOWPOWER;
lzbpli 15:ddd519fefbe8 231 break;
lzbpli 15:ddd519fefbe8 232 case TX:
lzbpli 15:ddd519fefbe8 233 led = !led;
lzbpli 15:ddd519fefbe8 234 if( isMaster == true ) {
lzbpli 15:ddd519fefbe8 235 // debug( "Ping...\r\n" );
lzbpli 15:ddd519fefbe8 236 pc.printf("Ping...\r\n");
lzbpli 15:ddd519fefbe8 237 } else {
lzbpli 15:ddd519fefbe8 238 // debug( "Pong...\r\n" );
lzbpli 15:ddd519fefbe8 239 pc.printf("Pong...\r\n");
GregCr 0:1ed39951ab7b 240 }
lzbpli 15:ddd519fefbe8 241 Radio.Rx( RX_TIMEOUT_VALUE );
lzbpli 15:ddd519fefbe8 242 State = LOWPOWER;
lzbpli 15:ddd519fefbe8 243 break;
lzbpli 15:ddd519fefbe8 244 case RX_TIMEOUT:
lzbpli 15:ddd519fefbe8 245 if( isMaster == true ) {
lzbpli 15:ddd519fefbe8 246 // Send the next PING frame
lzbpli 15:ddd519fefbe8 247 strcpy( ( char* )Buffer, ( char* )PingMsg );
lzbpli 15:ddd519fefbe8 248 for( i = 4; i < BufferSize; i++ ) {
lzbpli 15:ddd519fefbe8 249 Buffer[i] = i - 4;
lzbpli 15:ddd519fefbe8 250 }
lzbpli 15:ddd519fefbe8 251 wait_ms( 10 );
lzbpli 15:ddd519fefbe8 252 Radio.Send( Buffer, BufferSize );
lzbpli 15:ddd519fefbe8 253 } else {
lzbpli 15:ddd519fefbe8 254 Radio.Rx( RX_TIMEOUT_VALUE );
GregCr 0:1ed39951ab7b 255 }
lzbpli 15:ddd519fefbe8 256 State = LOWPOWER;
lzbpli 15:ddd519fefbe8 257 break;
lzbpli 15:ddd519fefbe8 258 case RX_ERROR:
lzbpli 15:ddd519fefbe8 259 // We have received a Packet with a CRC error, send reply as if packet was correct
lzbpli 15:ddd519fefbe8 260 if( isMaster == true ) {
lzbpli 15:ddd519fefbe8 261 // Send the next PING frame
lzbpli 15:ddd519fefbe8 262 strcpy( ( char* )Buffer, ( char* )PingMsg );
lzbpli 15:ddd519fefbe8 263 for( i = 4; i < BufferSize; i++ ) {
lzbpli 15:ddd519fefbe8 264 Buffer[i] = i - 4;
lzbpli 15:ddd519fefbe8 265 }
lzbpli 15:ddd519fefbe8 266 wait_ms( 10 );
lzbpli 15:ddd519fefbe8 267 Radio.Send( Buffer, BufferSize );
lzbpli 15:ddd519fefbe8 268 } else {
lzbpli 15:ddd519fefbe8 269 // Send the next PONG frame
lzbpli 15:ddd519fefbe8 270 strcpy( ( char* )Buffer, ( char* )PongMsg );
lzbpli 15:ddd519fefbe8 271 for( i = 4; i < BufferSize; i++ ) {
lzbpli 15:ddd519fefbe8 272 Buffer[i] = i - 4;
lzbpli 15:ddd519fefbe8 273 }
lzbpli 15:ddd519fefbe8 274 wait_ms( 10 );
lzbpli 15:ddd519fefbe8 275 Radio.Send( Buffer, BufferSize );
GregCr 2:59e108728d71 276 }
lzbpli 15:ddd519fefbe8 277 State = LOWPOWER;
lzbpli 15:ddd519fefbe8 278 break;
lzbpli 15:ddd519fefbe8 279 case TX_TIMEOUT:
lzbpli 15:ddd519fefbe8 280 Radio.Rx( RX_TIMEOUT_VALUE );
lzbpli 15:ddd519fefbe8 281 State = LOWPOWER;
lzbpli 15:ddd519fefbe8 282 break;
lzbpli 15:ddd519fefbe8 283 case LOWPOWER:
lzbpli 15:ddd519fefbe8 284 break;
lzbpli 15:ddd519fefbe8 285 default:
lzbpli 15:ddd519fefbe8 286 State = LOWPOWER;
lzbpli 15:ddd519fefbe8 287 break;
lzbpli 15:ddd519fefbe8 288 }
GregCr 0:1ed39951ab7b 289 }
GregCr 0:1ed39951ab7b 290 }
GregCr 0:1ed39951ab7b 291
GregCr 0:1ed39951ab7b 292 void OnTxDone( void )
GregCr 0:1ed39951ab7b 293 {
GregCr 5:f2431c4fe3bb 294 Radio.Sleep( );
GregCr 0:1ed39951ab7b 295 State = TX;
lzbpli 15:ddd519fefbe8 296 // debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" );
lzbpli 15:ddd519fefbe8 297 pc.printf("> OnTxDone\r\n");
lzbpli 15:ddd519fefbe8 298
GregCr 0:1ed39951ab7b 299 }
GregCr 0:1ed39951ab7b 300
GregCr 4:5ece30264cd9 301 void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
GregCr 0:1ed39951ab7b 302 {
GregCr 0:1ed39951ab7b 303 Radio.Sleep( );
GregCr 0:1ed39951ab7b 304 BufferSize = size;
GregCr 0:1ed39951ab7b 305 memcpy( Buffer, payload, BufferSize );
GregCr 0:1ed39951ab7b 306 RssiValue = rssi;
GregCr 0:1ed39951ab7b 307 SnrValue = snr;
GregCr 0:1ed39951ab7b 308 State = RX;
lzbpli 15:ddd519fefbe8 309 // debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" );
lzbpli 15:ddd519fefbe8 310 pc.printf("> OnRxDone\r\n");
lzbpli 15:ddd519fefbe8 311 pc.printf("size:%d rssi:%d snr:%d",size,rssi,snr);
GregCr 0:1ed39951ab7b 312 }
GregCr 0:1ed39951ab7b 313
GregCr 0:1ed39951ab7b 314 void OnTxTimeout( void )
GregCr 0:1ed39951ab7b 315 {
GregCr 0:1ed39951ab7b 316 Radio.Sleep( );
GregCr 0:1ed39951ab7b 317 State = TX_TIMEOUT;
lzbpli 15:ddd519fefbe8 318 // debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" );
lzbpli 15:ddd519fefbe8 319 pc.printf("> OnTxTimeout\r\n");
GregCr 0:1ed39951ab7b 320 }
GregCr 0:1ed39951ab7b 321
GregCr 0:1ed39951ab7b 322 void OnRxTimeout( void )
GregCr 0:1ed39951ab7b 323 {
GregCr 0:1ed39951ab7b 324 Radio.Sleep( );
GregCr 1:126d70d374f6 325 Buffer[ BufferSize ] = 0;
GregCr 0:1ed39951ab7b 326 State = RX_TIMEOUT;
lzbpli 15:ddd519fefbe8 327 // debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" );
lzbpli 15:ddd519fefbe8 328 pc.printf("> OnRxTimeout\r\n");
GregCr 0:1ed39951ab7b 329 }
GregCr 0:1ed39951ab7b 330
GregCr 0:1ed39951ab7b 331 void OnRxError( void )
GregCr 0:1ed39951ab7b 332 {
GregCr 0:1ed39951ab7b 333 Radio.Sleep( );
GregCr 0:1ed39951ab7b 334 State = RX_ERROR;
lzbpli 15:ddd519fefbe8 335 // debug_if( DEBUG_MESSAGE, "> OnRxError\n\r" );
lzbpli 15:ddd519fefbe8 336 pc.printf("> OnRxError\r\n");
GregCr 0:1ed39951ab7b 337 }
GregCr 3:8b9e2a4df4b5 338