txrx test code

Dependencies:   BufferedSerial SX1276GenericLib mbed

Committer:
rtavk3
Date:
Thu Sep 07 18:56:20 2017 +0000
Revision:
0:2871c35d504d
TXRX Project data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rtavk3 0:2871c35d504d 1 /*
rtavk3 0:2871c35d504d 2 * This file contains a copy of the master content sx1276PingPong
rtavk3 0:2871c35d504d 3 * with adaption for the SX1276Generic environment
rtavk3 0:2871c35d504d 4 * (c) 2017 Helmut Tschemernjak
rtavk3 0:2871c35d504d 5 * 30826 Garbsen (Hannover) Germany
rtavk3 0:2871c35d504d 6 */
rtavk3 0:2871c35d504d 7
rtavk3 0:2871c35d504d 8 #include "mbed.h"
rtavk3 0:2871c35d504d 9 #include "PinMap.h"
rtavk3 0:2871c35d504d 10 #include "GenericPingPong.h"
rtavk3 0:2871c35d504d 11 #include "sx1276-mbed-hal.h"
rtavk3 0:2871c35d504d 12 #include "main.h"
rtavk3 0:2871c35d504d 13
rtavk3 0:2871c35d504d 14 #ifdef FEATURE_LORA
rtavk3 0:2871c35d504d 15
rtavk3 0:2871c35d504d 16 /* Set this flag to '1' to display debug messages on the console */
rtavk3 0:2871c35d504d 17 #define DEBUG_MESSAGE 1
rtavk3 0:2871c35d504d 18
rtavk3 0:2871c35d504d 19 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
rtavk3 0:2871c35d504d 20 #define USE_MODEM_LORA 1
rtavk3 0:2871c35d504d 21 #define USE_MODEM_FSK !USE_MODEM_LORA
rtavk3 0:2871c35d504d 22 #define RF_FREQUENCY RF_FREQUENCY_868_1 // Hz
rtavk3 0:2871c35d504d 23 #define TX_OUTPUT_POWER 14 // 14 dBm
rtavk3 0:2871c35d504d 24
rtavk3 0:2871c35d504d 25 #if USE_MODEM_LORA == 1
rtavk3 0:2871c35d504d 26
rtavk3 0:2871c35d504d 27 #define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap
rtavk3 0:2871c35d504d 28 #define LORA_SPREADING_FACTOR LORA_SF11
rtavk3 0:2871c35d504d 29 #define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5
rtavk3 0:2871c35d504d 30
rtavk3 0:2871c35d504d 31 #define LORA_PREAMBLE_LENGTH 6 // Same for Tx and Rx
rtavk3 0:2871c35d504d 32 #define LORA_SYMBOL_TIMEOUT 10 // Symbols
rtavk3 0:2871c35d504d 33 #define LORA_FIX_LENGTH_PAYLOAD_ON false
rtavk3 0:2871c35d504d 34 #define LORA_FHSS_ENABLED false
rtavk3 0:2871c35d504d 35 #define LORA_NB_SYMB_HOP 4
rtavk3 0:2871c35d504d 36 #define LORA_IQ_INVERSION_ON false
rtavk3 0:2871c35d504d 37 #define LORA_CRC_ENABLED true
rtavk3 0:2871c35d504d 38
rtavk3 0:2871c35d504d 39 #elif USE_MODEM_FSK == 1
rtavk3 0:2871c35d504d 40
rtavk3 0:2871c35d504d 41 #define FSK_FDEV 25000 // Hz
rtavk3 0:2871c35d504d 42 #define FSK_DATARATE 19200 // bps
rtavk3 0:2871c35d504d 43 #define FSK_BANDWIDTH 50000 // Hz
rtavk3 0:2871c35d504d 44 #define FSK_AFC_BANDWIDTH 83333 // Hz
rtavk3 0:2871c35d504d 45 #define FSK_PREAMBLE_LENGTH 6 // Same for Tx and Rx
rtavk3 0:2871c35d504d 46 #define FSK_FIX_LENGTH_PAYLOAD_ON true
rtavk3 0:2871c35d504d 47 #define FSK_CRC_ENABLED true
rtavk3 0:2871c35d504d 48
rtavk3 0:2871c35d504d 49 #else
rtavk3 0:2871c35d504d 50 #error "Please define a modem in the compiler options."
rtavk3 0:2871c35d504d 51 #endif
rtavk3 0:2871c35d504d 52
rtavk3 0:2871c35d504d 53
rtavk3 0:2871c35d504d 54 #define RX_TIMEOUT_VALUE 3500 // in ms
rtavk3 0:2871c35d504d 55
rtavk3 0:2871c35d504d 56 //#define BUFFER_SIZE 32 // Define the payload size here
rtavk3 0:2871c35d504d 57 #define BUFFER_SIZE 2 // Define the payload size here
rtavk3 0:2871c35d504d 58
rtavk3 0:2871c35d504d 59 /*
rtavk3 0:2871c35d504d 60 * Global variables declarations
rtavk3 0:2871c35d504d 61 */
rtavk3 0:2871c35d504d 62 typedef enum {
rtavk3 0:2871c35d504d 63 SLEEP = 0,
rtavk3 0:2871c35d504d 64 RX_INIT,
rtavk3 0:2871c35d504d 65 RX_INIT_WAIT,
rtavk3 0:2871c35d504d 66 RX_ENUM,
rtavk3 0:2871c35d504d 67 RX_ENUM_WAIT,
rtavk3 0:2871c35d504d 68 TX_PING,
rtavk3 0:2871c35d504d 69 RX_TIMEOUT,
rtavk3 0:2871c35d504d 70 RX_ERROR,
rtavk3 0:2871c35d504d 71 TX_INIT,
rtavk3 0:2871c35d504d 72 TX_INIT_WAIT,
rtavk3 0:2871c35d504d 73 TX_ENUM,
rtavk3 0:2871c35d504d 74 TX_ENUM_WAIT,
rtavk3 0:2871c35d504d 75 CAD,
rtavk3 0:2871c35d504d 76 CAD_DONE
rtavk3 0:2871c35d504d 77 } AppStates_t;
rtavk3 0:2871c35d504d 78
rtavk3 0:2871c35d504d 79 volatile AppStates_t State = TX_INIT;
rtavk3 0:2871c35d504d 80
rtavk3 0:2871c35d504d 81 /*!
rtavk3 0:2871c35d504d 82 * Radio events function pointer
rtavk3 0:2871c35d504d 83 */
rtavk3 0:2871c35d504d 84 static RadioEvents_t RadioEvents;
rtavk3 0:2871c35d504d 85
rtavk3 0:2871c35d504d 86 /*
rtavk3 0:2871c35d504d 87 * Global variables declarations
rtavk3 0:2871c35d504d 88 */
rtavk3 0:2871c35d504d 89 SX1276Generic *Radio;
rtavk3 0:2871c35d504d 90
rtavk3 0:2871c35d504d 91
rtavk3 0:2871c35d504d 92 const uint8_t PingMsg[] = { 0xFF, 0xFF, 0xFF, 0xFF};// "PING";
rtavk3 0:2871c35d504d 93 const uint8_t PongMsg[] = { 0xFF, 0xFF, 0xFF, 0xFF};// "PONG";
rtavk3 0:2871c35d504d 94 uint16_t BufferSize = BUFFER_SIZE;
rtavk3 0:2871c35d504d 95 uint8_t *Buffer;
rtavk3 0:2871c35d504d 96
rtavk3 0:2871c35d504d 97 DigitalOut *led3;
rtavk3 0:2871c35d504d 98
rtavk3 0:2871c35d504d 99
rtavk3 0:2871c35d504d 100 int SX1276PingPong()
rtavk3 0:2871c35d504d 101 {
rtavk3 0:2871c35d504d 102 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
rtavk3 0:2871c35d504d 103 DigitalOut *led = new DigitalOut(LED2);
rtavk3 0:2871c35d504d 104 #elif defined(TARGET_NUCLEO_L073RZ) || defined(TARGET_DISCO_L072CZ_LRWAN1)
rtavk3 0:2871c35d504d 105 DigitalOut *led = new DigitalOut(LED4); // RX red
rtavk3 0:2871c35d504d 106 led3 = new DigitalOut(LED3); // TX blue
rtavk3 0:2871c35d504d 107 #else
rtavk3 0:2871c35d504d 108 DigitalOut *led = new DigitalOut(LED1);
rtavk3 0:2871c35d504d 109 led3 = led;
rtavk3 0:2871c35d504d 110 #endif
rtavk3 0:2871c35d504d 111
rtavk3 0:2871c35d504d 112 Buffer = new uint8_t[BUFFER_SIZE];
rtavk3 0:2871c35d504d 113 *led3 = 1;
rtavk3 0:2871c35d504d 114
rtavk3 0:2871c35d504d 115 #ifdef B_L072Z_LRWAN1_LORA
rtavk3 0:2871c35d504d 116 Radio = new SX1276Generic(NULL, MURATA_SX1276,
rtavk3 0:2871c35d504d 117 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
rtavk3 0:2871c35d504d 118 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
rtavk3 0:2871c35d504d 119 LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO);
rtavk3 0:2871c35d504d 120 #else // RFM95
rtavk3 0:2871c35d504d 121 Radio = new SX1276Generic(NULL, RFM95_SX1276,
rtavk3 0:2871c35d504d 122 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
rtavk3 0:2871c35d504d 123 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5);
rtavk3 0:2871c35d504d 124
rtavk3 0:2871c35d504d 125 #endif
rtavk3 0:2871c35d504d 126
rtavk3 0:2871c35d504d 127 uint8_t i;
rtavk3 0:2871c35d504d 128
rtavk3 0:2871c35d504d 129 dprintf("SX1276 Ping Pong Demo Application" );
rtavk3 0:2871c35d504d 130 dprintf("Freqency: %.1f", (double)RF_FREQUENCY/1000000.0);
rtavk3 0:2871c35d504d 131 dprintf("TXPower: %d dBm", TX_OUTPUT_POWER);
rtavk3 0:2871c35d504d 132 #if USE_MODEM_LORA == 1
rtavk3 0:2871c35d504d 133 dprintf("Bandwidth: %d Hz", LORA_BANDWIDTH);
rtavk3 0:2871c35d504d 134 dprintf("Spreading factor: SF%d", LORA_SPREADING_FACTOR);
rtavk3 0:2871c35d504d 135 #elif USE_MODEM_FSK == 1
rtavk3 0:2871c35d504d 136 dprintf("Bandwidth: %d kHz", FSK_BANDWIDTH);
rtavk3 0:2871c35d504d 137 dprintf("Baudrate: %d", FSK_DATARATE);
rtavk3 0:2871c35d504d 138 #endif
rtavk3 0:2871c35d504d 139 // Initialize Radio driver
rtavk3 0:2871c35d504d 140 RadioEvents.TxDone = OnTxDone;
rtavk3 0:2871c35d504d 141 RadioEvents.RxDone = OnRxDone;
rtavk3 0:2871c35d504d 142 RadioEvents.RxError = OnRxError;
rtavk3 0:2871c35d504d 143 RadioEvents.TxTimeout = OnTxTimeout;
rtavk3 0:2871c35d504d 144 RadioEvents.RxTimeout = OnRxTimeout;
rtavk3 0:2871c35d504d 145 if (Radio->Init( &RadioEvents ) == false) {
rtavk3 0:2871c35d504d 146 while(1) {
rtavk3 0:2871c35d504d 147 dprintf("Radio could not be detected!");
rtavk3 0:2871c35d504d 148 wait( 1 );
rtavk3 0:2871c35d504d 149 }
rtavk3 0:2871c35d504d 150 }
rtavk3 0:2871c35d504d 151
rtavk3 0:2871c35d504d 152
rtavk3 0:2871c35d504d 153 switch(Radio->DetectBoardType()) {
rtavk3 0:2871c35d504d 154 case SX1276MB1LAS:
rtavk3 0:2871c35d504d 155 if (DEBUG_MESSAGE)
rtavk3 0:2871c35d504d 156 dprintf(" > Board Type: SX1276MB1LAS <");
rtavk3 0:2871c35d504d 157 break;
rtavk3 0:2871c35d504d 158 case SX1276MB1MAS:
rtavk3 0:2871c35d504d 159 if (DEBUG_MESSAGE)
rtavk3 0:2871c35d504d 160 dprintf(" > Board Type: SX1276MB1LAS <");
rtavk3 0:2871c35d504d 161 case MURATA_SX1276:
rtavk3 0:2871c35d504d 162 if (DEBUG_MESSAGE)
rtavk3 0:2871c35d504d 163 dprintf(" > Board Type: MURATA_SX1276_STM32L0 <");
rtavk3 0:2871c35d504d 164 break;
rtavk3 0:2871c35d504d 165 case RFM95_SX1276:
rtavk3 0:2871c35d504d 166 if (DEBUG_MESSAGE)
rtavk3 0:2871c35d504d 167 dprintf(" > HopeRF RFM95xx <");
rtavk3 0:2871c35d504d 168 break;
rtavk3 0:2871c35d504d 169 default:
rtavk3 0:2871c35d504d 170 dprintf(" > Board Type: unknown <");
rtavk3 0:2871c35d504d 171 }
rtavk3 0:2871c35d504d 172
rtavk3 0:2871c35d504d 173 Radio->SetChannel(RF_FREQUENCY );
rtavk3 0:2871c35d504d 174
rtavk3 0:2871c35d504d 175 #if USE_MODEM_LORA == 1
rtavk3 0:2871c35d504d 176
rtavk3 0:2871c35d504d 177 if (LORA_FHSS_ENABLED)
rtavk3 0:2871c35d504d 178 dprintf(" > LORA FHSS Mode <");
rtavk3 0:2871c35d504d 179 if (!LORA_FHSS_ENABLED)
rtavk3 0:2871c35d504d 180 dprintf(" > LORA Mode <");
rtavk3 0:2871c35d504d 181
rtavk3 0:2871c35d504d 182 Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
rtavk3 0:2871c35d504d 183 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
rtavk3 0:2871c35d504d 184 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
rtavk3 0:2871c35d504d 185 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
rtavk3 0:2871c35d504d 186 LORA_IQ_INVERSION_ON, 2000 );
rtavk3 0:2871c35d504d 187
rtavk3 0:2871c35d504d 188 Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
rtavk3 0:2871c35d504d 189 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
rtavk3 0:2871c35d504d 190 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
rtavk3 0:2871c35d504d 191 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
rtavk3 0:2871c35d504d 192 LORA_IQ_INVERSION_ON, true );
rtavk3 0:2871c35d504d 193
rtavk3 0:2871c35d504d 194 #elif USE_MODEM_FSK == 1
rtavk3 0:2871c35d504d 195
rtavk3 0:2871c35d504d 196 dprintf(" > FSK Mode <");
rtavk3 0:2871c35d504d 197 Radio->SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
rtavk3 0:2871c35d504d 198 FSK_DATARATE, 0,
rtavk3 0:2871c35d504d 199 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
rtavk3 0:2871c35d504d 200 FSK_CRC_ENABLED, 0, 0, 0, 2000 );
rtavk3 0:2871c35d504d 201
rtavk3 0:2871c35d504d 202 Radio->SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
rtavk3 0:2871c35d504d 203 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
rtavk3 0:2871c35d504d 204 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
rtavk3 0:2871c35d504d 205 0, 0, false, true );
rtavk3 0:2871c35d504d 206
rtavk3 0:2871c35d504d 207 #else
rtavk3 0:2871c35d504d 208
rtavk3 0:2871c35d504d 209 #error "Please define a modem in the compiler options."
rtavk3 0:2871c35d504d 210
rtavk3 0:2871c35d504d 211 #endif
rtavk3 0:2871c35d504d 212
rtavk3 0:2871c35d504d 213
rtavk3 0:2871c35d504d 214 if (DEBUG_MESSAGE)
rtavk3 0:2871c35d504d 215 dprintf("Starting INIT_LOOP");
rtavk3 0:2871c35d504d 216
rtavk3 0:2871c35d504d 217
rtavk3 0:2871c35d504d 218
rtavk3 0:2871c35d504d 219 while( 1 ) {
rtavk3 0:2871c35d504d 220 #ifdef TARGET_STM32L4
rtavk3 0:2871c35d504d 221 WatchDogUpdate();
rtavk3 0:2871c35d504d 222 #endif
rtavk3 0:2871c35d504d 223
rtavk3 0:2871c35d504d 224 switch( State ) {
rtavk3 0:2871c35d504d 225 case SLEEP:
rtavk3 0:2871c35d504d 226
rtavk3 0:2871c35d504d 227 dprintf("Sleep()");
rtavk3 0:2871c35d504d 228 wait_ms(10000);
rtavk3 0:2871c35d504d 229 State = RX_INIT;
rtavk3 0:2871c35d504d 230 break;
rtavk3 0:2871c35d504d 231 case RX_INIT:
rtavk3 0:2871c35d504d 232 dprintf("RX_INIT()");
rtavk3 0:2871c35d504d 233 Radio->Rx( 8000 );
rtavk3 0:2871c35d504d 234 while(State == RX_INIT) {}
rtavk3 0:2871c35d504d 235 break;
rtavk3 0:2871c35d504d 236 case RX_ENUM:
rtavk3 0:2871c35d504d 237 dprintf("RX_ENUM()!!!!!!!!!!!!!!!!!!!!!!!!");
rtavk3 0:2871c35d504d 238 Radio->Rx( 23000 );
rtavk3 0:2871c35d504d 239 while(State == RX_ENUM) {}
rtavk3 0:2871c35d504d 240 break;
rtavk3 0:2871c35d504d 241 case RX_TIMEOUT:
rtavk3 0:2871c35d504d 242 dprintf("RX_TIMEOUT()");
rtavk3 0:2871c35d504d 243 State = SLEEP;
rtavk3 0:2871c35d504d 244 break;
rtavk3 0:2871c35d504d 245
rtavk3 0:2871c35d504d 246 case TX_PING:
rtavk3 0:2871c35d504d 247 dprintf("RX_Ping()!!!!!!!!!!!!!!!!!!!!!!!!");
rtavk3 0:2871c35d504d 248 State = SLEEP;
rtavk3 0:2871c35d504d 249 break;
rtavk3 0:2871c35d504d 250 case TX_INIT:
rtavk3 0:2871c35d504d 251 int txcount = 0;
rtavk3 0:2871c35d504d 252 for(txcount=0;txcount<1000;txcount++) {
rtavk3 0:2871c35d504d 253 dprintf("TX_INIT()");
rtavk3 0:2871c35d504d 254 // Send the next PING frame
rtavk3 0:2871c35d504d 255 //memcpy(Buffer, PingMsg, 2);
rtavk3 0:2871c35d504d 256
rtavk3 0:2871c35d504d 257 wait_ms( 1000 );
rtavk3 0:2871c35d504d 258 dprintf("dump(0x%x, %d bytes)", PingMsg, 2);
rtavk3 0:2871c35d504d 259 Radio->Send( (void*) PingMsg, BufferSize );
rtavk3 0:2871c35d504d 260 dprintf("TX_INIT_SENT()");
rtavk3 0:2871c35d504d 261 State = TX_INIT_WAIT;
rtavk3 0:2871c35d504d 262 while(State == TX_INIT_WAIT) {};
rtavk3 0:2871c35d504d 263
rtavk3 0:2871c35d504d 264 }
rtavk3 0:2871c35d504d 265 State=TX_ENUM;
rtavk3 0:2871c35d504d 266 break;
rtavk3 0:2871c35d504d 267 case TX_INIT_WAIT:
rtavk3 0:2871c35d504d 268 wait_ms(100);
rtavk3 0:2871c35d504d 269 break;
rtavk3 0:2871c35d504d 270 case TX_ENUM:
rtavk3 0:2871c35d504d 271 dprintf("TX_ENUM()!!!!!!!!!!!!!!!!!!!!!!!!!!");
rtavk3 0:2871c35d504d 272 wait_ms(500);
rtavk3 0:2871c35d504d 273 // Send the next PING frame
rtavk3 0:2871c35d504d 274 memcpy(Buffer, PingMsg, sizeof(PingMsg));
rtavk3 0:2871c35d504d 275 for( i = 4; i < BufferSize; i++ ) {
rtavk3 0:2871c35d504d 276 Buffer[i] = i - 4;
rtavk3 0:2871c35d504d 277 }
rtavk3 0:2871c35d504d 278 wait_ms( 10 );
rtavk3 0:2871c35d504d 279 Radio->Send( Buffer, BufferSize );
rtavk3 0:2871c35d504d 280 dprintf("TX_ENUM_SENT()");
rtavk3 0:2871c35d504d 281 State = TX_INIT_WAIT;
rtavk3 0:2871c35d504d 282 while(State == TX_INIT_WAIT) {}
rtavk3 0:2871c35d504d 283 break;
rtavk3 0:2871c35d504d 284 default:
rtavk3 0:2871c35d504d 285 State = SLEEP;
rtavk3 0:2871c35d504d 286 break;
rtavk3 0:2871c35d504d 287 }
rtavk3 0:2871c35d504d 288 }
rtavk3 0:2871c35d504d 289 }
rtavk3 0:2871c35d504d 290
rtavk3 0:2871c35d504d 291 void OnTxDone(void *radio, void *a, void *b)
rtavk3 0:2871c35d504d 292 {
rtavk3 0:2871c35d504d 293 Radio->Sleep( );
rtavk3 0:2871c35d504d 294 if(State == TX_INIT_WAIT) State = TX_INIT;
rtavk3 0:2871c35d504d 295 dprintf("> OnTxDone");
rtavk3 0:2871c35d504d 296 }
rtavk3 0:2871c35d504d 297
rtavk3 0:2871c35d504d 298 void OnRxDone(void *radio, void *a, void *b, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
rtavk3 0:2871c35d504d 299 {
rtavk3 0:2871c35d504d 300 dprintf("dump(0x%x, %d bytes)", payload, 2);
rtavk3 0:2871c35d504d 301 dprintf("> OnRxDone");
rtavk3 0:2871c35d504d 302 Radio->Sleep( );
rtavk3 0:2871c35d504d 303 BufferSize = size;
rtavk3 0:2871c35d504d 304 //memcpy( Buffer, payload, BufferSize );
rtavk3 0:2871c35d504d 305 dprintf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d, size=%d", rssi, snr, size);
rtavk3 0:2871c35d504d 306 if(size != 2) {
rtavk3 0:2871c35d504d 307 State=SLEEP;
rtavk3 0:2871c35d504d 308 dprintf("> Payload error");
rtavk3 0:2871c35d504d 309 return;}
rtavk3 0:2871c35d504d 310 decodePayload(payload, size);
rtavk3 0:2871c35d504d 311 }
rtavk3 0:2871c35d504d 312
rtavk3 0:2871c35d504d 313 void decodePayload(const void *data, int len)
rtavk3 0:2871c35d504d 314 {
rtavk3 0:2871c35d504d 315 dprintf("dump(0x%x, %d bytes)", data, len);
rtavk3 0:2871c35d504d 316
rtavk3 0:2871c35d504d 317 unsigned char *u;
rtavk3 0:2871c35d504d 318
rtavk3 0:2871c35d504d 319 u = (unsigned char *)data;
rtavk3 0:2871c35d504d 320 if(*u == 1) State = RX_ENUM;
rtavk3 0:2871c35d504d 321 if(*u == 2) State == TX_PING;
rtavk3 0:2871c35d504d 322 else {
rtavk3 0:2871c35d504d 323 dprintf("> Invalid RX Command");
rtavk3 0:2871c35d504d 324 State = SLEEP;
rtavk3 0:2871c35d504d 325 }
rtavk3 0:2871c35d504d 326 }
rtavk3 0:2871c35d504d 327
rtavk3 0:2871c35d504d 328 void OnTxTimeout(void *radio, void *a, void *b)
rtavk3 0:2871c35d504d 329 {
rtavk3 0:2871c35d504d 330 Radio->Sleep( );
rtavk3 0:2871c35d504d 331 State = SLEEP;
rtavk3 0:2871c35d504d 332 dprintf("> OnTxTimeout");
rtavk3 0:2871c35d504d 333 }
rtavk3 0:2871c35d504d 334
rtavk3 0:2871c35d504d 335 void OnRxTimeout(void *radio, void *a, void *b)
rtavk3 0:2871c35d504d 336 {
rtavk3 0:2871c35d504d 337 dprintf("> OnRxTimeout");
rtavk3 0:2871c35d504d 338 Radio->Sleep( );
rtavk3 0:2871c35d504d 339 Buffer[BufferSize-1] = 0;
rtavk3 0:2871c35d504d 340 dprintf("> OnRxTimeout");
rtavk3 0:2871c35d504d 341 State = SLEEP;
rtavk3 0:2871c35d504d 342 }
rtavk3 0:2871c35d504d 343
rtavk3 0:2871c35d504d 344 void OnRxError(void *radio, void *a, void *b)
rtavk3 0:2871c35d504d 345 {
rtavk3 0:2871c35d504d 346 dprintf("> OnRxError");
rtavk3 0:2871c35d504d 347 Radio->Sleep( );
rtavk3 0:2871c35d504d 348 dprintf("> OnRxError");
rtavk3 0:2871c35d504d 349 }
rtavk3 0:2871c35d504d 350
rtavk3 0:2871c35d504d 351 #endif