test

Dependencies:   SX1276Lib1 WakeUp mbed-src

Fork of SX1276PingPong by Semtech

Committer:
lzbpli
Date:
Tue Dec 13 06:43:55 2016 +0000
Revision:
16:cb5523c208e6
Parent:
15:ddd519fefbe8
tst

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