Fork for LoDev S76S

Dependencies:   mbed BufferedSerial SX1276GenericLib USBDeviceHT

Committer:
steve918
Date:
Mon Feb 18 22:57:14 2019 +0000
Revision:
21:6379a5650867
Parent:
19:992eda680d91
First working rev for LoDev S76S

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut64 0:c43b6919ae15 1 /*
Helmut64 0:c43b6919ae15 2 * This file contains a copy of the master content sx1276PingPong
Helmut64 0:c43b6919ae15 3 * with adaption for the SX1276Generic environment
Helmut64 0:c43b6919ae15 4 * (c) 2017 Helmut Tschemernjak
Helmut64 0:c43b6919ae15 5 * 30826 Garbsen (Hannover) Germany
Helmut64 0:c43b6919ae15 6 */
Helmut64 0:c43b6919ae15 7
Helmut64 0:c43b6919ae15 8 #include "mbed.h"
Helmut64 0:c43b6919ae15 9 #include "PinMap.h"
Helmut64 0:c43b6919ae15 10 #include "GenericPingPong.h"
Helmut64 0:c43b6919ae15 11 #include "sx1276-mbed-hal.h"
Helmut64 0:c43b6919ae15 12 #include "main.h"
Helmut64 0:c43b6919ae15 13
Helmut64 0:c43b6919ae15 14 #ifdef FEATURE_LORA
Helmut64 0:c43b6919ae15 15
Helmut64 0:c43b6919ae15 16 /* Set this flag to '1' to display debug messages on the console */
Helmut64 0:c43b6919ae15 17 #define DEBUG_MESSAGE 1
Helmut64 0:c43b6919ae15 18
Helmut64 0:c43b6919ae15 19 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
Helmut64 0:c43b6919ae15 20 #define USE_MODEM_LORA 1
Helmut64 0:c43b6919ae15 21 #define USE_MODEM_FSK !USE_MODEM_LORA
steve918 21:6379a5650867 22 #define RF_FREQUENCY 915010000 // Hz
steve918 21:6379a5650867 23 #define TX_OUTPUT_POWER 14 // 14 dBm
Helmut64 0:c43b6919ae15 24
Helmut64 0:c43b6919ae15 25 #if USE_MODEM_LORA == 1
Helmut64 0:c43b6919ae15 26
Helmut64 7:6a8a82bfb0c6 27 #define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap
Helmut64 0:c43b6919ae15 28 #define LORA_SPREADING_FACTOR LORA_SF7
Helmut64 0:c43b6919ae15 29 #define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5
Helmut64 0:c43b6919ae15 30
Helmut64 0:c43b6919ae15 31 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
Helmut64 0:c43b6919ae15 32 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
Helmut64 0:c43b6919ae15 33 #define LORA_FIX_LENGTH_PAYLOAD_ON false
Helmut64 0:c43b6919ae15 34 #define LORA_FHSS_ENABLED false
Helmut64 0:c43b6919ae15 35 #define LORA_NB_SYMB_HOP 4
Helmut64 0:c43b6919ae15 36 #define LORA_IQ_INVERSION_ON false
Helmut64 0:c43b6919ae15 37 #define LORA_CRC_ENABLED true
Helmut64 0:c43b6919ae15 38
Helmut64 0:c43b6919ae15 39 #elif USE_MODEM_FSK == 1
Helmut64 0:c43b6919ae15 40
Helmut64 0:c43b6919ae15 41 #define FSK_FDEV 25000 // Hz
Helmut64 0:c43b6919ae15 42 #define FSK_DATARATE 19200 // bps
Helmut64 0:c43b6919ae15 43 #define FSK_BANDWIDTH 50000 // Hz
Helmut64 0:c43b6919ae15 44 #define FSK_AFC_BANDWIDTH 83333 // Hz
Helmut64 0:c43b6919ae15 45 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
Helmut64 0:c43b6919ae15 46 #define FSK_FIX_LENGTH_PAYLOAD_ON false
Helmut64 0:c43b6919ae15 47 #define FSK_CRC_ENABLED true
Helmut64 0:c43b6919ae15 48
Helmut64 0:c43b6919ae15 49 #else
Helmut64 0:c43b6919ae15 50 #error "Please define a modem in the compiler options."
Helmut64 0:c43b6919ae15 51 #endif
Helmut64 0:c43b6919ae15 52
Helmut64 0:c43b6919ae15 53
steve918 21:6379a5650867 54 #define RX_TIMEOUT_VALUE 5000 // in ms
Helmut64 0:c43b6919ae15 55
Helmut64 0:c43b6919ae15 56 #define BUFFER_SIZE 64 // Define the payload size here
Helmut64 0:c43b6919ae15 57
Helmut64 0:c43b6919ae15 58 /*
Helmut64 0:c43b6919ae15 59 * Global variables declarations
Helmut64 0:c43b6919ae15 60 */
Helmut64 0:c43b6919ae15 61 typedef enum
Helmut64 0:c43b6919ae15 62 {
Helmut64 0:c43b6919ae15 63 LOWPOWER = 0,
Helmut64 0:c43b6919ae15 64 IDLE,
Helmut64 0:c43b6919ae15 65
Helmut64 0:c43b6919ae15 66 RX,
Helmut64 0:c43b6919ae15 67 RX_TIMEOUT,
Helmut64 0:c43b6919ae15 68 RX_ERROR,
Helmut64 0:c43b6919ae15 69
Helmut64 0:c43b6919ae15 70 TX,
Helmut64 0:c43b6919ae15 71 TX_TIMEOUT,
Helmut64 0:c43b6919ae15 72
Helmut64 0:c43b6919ae15 73 CAD,
Helmut64 0:c43b6919ae15 74 CAD_DONE
Helmut64 0:c43b6919ae15 75 } AppStates_t;
Helmut64 0:c43b6919ae15 76
Helmut64 0:c43b6919ae15 77 volatile AppStates_t State = LOWPOWER;
Helmut64 0:c43b6919ae15 78
Helmut64 0:c43b6919ae15 79 /*!
Helmut64 0:c43b6919ae15 80 * Radio events function pointer
Helmut64 0:c43b6919ae15 81 */
Helmut64 0:c43b6919ae15 82 static RadioEvents_t RadioEvents;
Helmut64 0:c43b6919ae15 83
Helmut64 0:c43b6919ae15 84 /*
Helmut64 0:c43b6919ae15 85 * Global variables declarations
Helmut64 0:c43b6919ae15 86 */
Helmut64 0:c43b6919ae15 87 SX1276Generic *Radio;
Helmut64 0:c43b6919ae15 88
Helmut64 0:c43b6919ae15 89
Helmut64 0:c43b6919ae15 90 const uint8_t PingMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'I', 'N', 'G'};// "PING";
steve918 21:6379a5650867 91 const uint8_t PongMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'O', 'N' , 'G'};// "PONG";
Helmut64 0:c43b6919ae15 92
Helmut64 0:c43b6919ae15 93 uint16_t BufferSize = BUFFER_SIZE;
Helmut64 0:c43b6919ae15 94 uint8_t *Buffer;
Helmut64 0:c43b6919ae15 95
Helmut64 0:c43b6919ae15 96 DigitalOut *led3;
Helmut64 0:c43b6919ae15 97
Helmut64 0:c43b6919ae15 98
Helmut64 0:c43b6919ae15 99 int SX1276PingPong()
Helmut64 0:c43b6919ae15 100 {
Helmut64 0:c43b6919ae15 101 DigitalOut *led = new DigitalOut(LED1);
Helmut64 0:c43b6919ae15 102 led3 = led;
Helmut64 0:c43b6919ae15 103
Helmut64 0:c43b6919ae15 104 Buffer = new uint8_t[BUFFER_SIZE];
Helmut64 0:c43b6919ae15 105 *led3 = 1;
Helmut64 0:c43b6919ae15 106
Helmut64 0:c43b6919ae15 107 Radio = new SX1276Generic(NULL, RFM95_SX1276,
Helmut64 0:c43b6919ae15 108 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut64 0:c43b6919ae15 109 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5);
Helmut64 0:c43b6919ae15 110
Helmut64 0:c43b6919ae15 111 uint8_t i;
Helmut64 0:c43b6919ae15 112 bool isMaster = true;
Helmut64 0:c43b6919ae15 113
Helmut64 0:c43b6919ae15 114 dprintf("SX1276 Ping Pong Demo Application" );
Helmut64 0:c43b6919ae15 115 dprintf("Freqency: %.1f", (double)RF_FREQUENCY/1000000.0);
Helmut64 0:c43b6919ae15 116 dprintf("TXPower: %d dBm", TX_OUTPUT_POWER);
Helmut64 0:c43b6919ae15 117 #if USE_MODEM_LORA == 1
Helmut64 8:3b0d7b4ff28f 118 dprintf("Bandwidth: %d Hz", LORA_BANDWIDTH);
Helmut64 0:c43b6919ae15 119 dprintf("Spreading factor: SF%d", LORA_SPREADING_FACTOR);
Helmut64 0:c43b6919ae15 120 #elif USE_MODEM_FSK == 1
Helmut64 0:c43b6919ae15 121 dprintf("Bandwidth: %d kHz", FSK_BANDWIDTH);
Helmut64 0:c43b6919ae15 122 dprintf("Baudrate: %d", FSK_DATARATE);
Helmut64 0:c43b6919ae15 123 #endif
Helmut64 0:c43b6919ae15 124 // Initialize Radio driver
Helmut64 0:c43b6919ae15 125 RadioEvents.TxDone = OnTxDone;
Helmut64 0:c43b6919ae15 126 RadioEvents.RxDone = OnRxDone;
Helmut64 0:c43b6919ae15 127 RadioEvents.RxError = OnRxError;
Helmut64 0:c43b6919ae15 128 RadioEvents.TxTimeout = OnTxTimeout;
Helmut64 6:1b598b0e52e4 129 RadioEvents.RxTimeout = OnRxTimeout;
Helmut64 6:1b598b0e52e4 130 if (Radio->Init( &RadioEvents ) == false) {
Helmut64 6:1b598b0e52e4 131 while(1) {
Helmut64 6:1b598b0e52e4 132 dprintf("Radio could not be detected!");
Helmut64 6:1b598b0e52e4 133 wait( 1 );
Helmut64 6:1b598b0e52e4 134 }
Helmut64 0:c43b6919ae15 135 }
Helmut64 6:1b598b0e52e4 136
Helmut64 0:c43b6919ae15 137
steve918 21:6379a5650867 138 Radio->DetectBoardType();
steve918 21:6379a5650867 139 Radio->SetChannel(RF_FREQUENCY );
Helmut64 0:c43b6919ae15 140
Helmut64 0:c43b6919ae15 141 #if USE_MODEM_LORA == 1
Helmut64 0:c43b6919ae15 142
Helmut64 0:c43b6919ae15 143 if (LORA_FHSS_ENABLED)
Helmut64 0:c43b6919ae15 144 dprintf(" > LORA FHSS Mode <");
Helmut64 0:c43b6919ae15 145 if (!LORA_FHSS_ENABLED)
Helmut64 0:c43b6919ae15 146 dprintf(" > LORA Mode <");
Helmut64 0:c43b6919ae15 147
Helmut64 0:c43b6919ae15 148 Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
Helmut64 0:c43b6919ae15 149 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
Helmut64 0:c43b6919ae15 150 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
Helmut64 0:c43b6919ae15 151 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
Helmut64 0:c43b6919ae15 152 LORA_IQ_INVERSION_ON, 2000 );
Helmut64 0:c43b6919ae15 153
Helmut64 0:c43b6919ae15 154 Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
Helmut64 0:c43b6919ae15 155 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
Helmut64 0:c43b6919ae15 156 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
Helmut64 0:c43b6919ae15 157 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
Helmut64 0:c43b6919ae15 158 LORA_IQ_INVERSION_ON, true );
Helmut64 0:c43b6919ae15 159
Helmut64 0:c43b6919ae15 160 #elif USE_MODEM_FSK == 1
Helmut64 0:c43b6919ae15 161
Helmut64 0:c43b6919ae15 162 dprintf(" > FSK Mode <");
Helmut64 0:c43b6919ae15 163 Radio->SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
Helmut64 0:c43b6919ae15 164 FSK_DATARATE, 0,
Helmut64 0:c43b6919ae15 165 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
Helmut64 0:c43b6919ae15 166 FSK_CRC_ENABLED, 0, 0, 0, 2000 );
Helmut64 0:c43b6919ae15 167
Helmut64 0:c43b6919ae15 168 Radio->SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
Helmut64 0:c43b6919ae15 169 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
Helmut64 0:c43b6919ae15 170 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
Helmut64 0:c43b6919ae15 171 0, 0, false, true );
Helmut64 0:c43b6919ae15 172
Helmut64 0:c43b6919ae15 173 #else
Helmut64 0:c43b6919ae15 174
Helmut64 0:c43b6919ae15 175 #error "Please define a modem in the compiler options."
Helmut64 0:c43b6919ae15 176
Helmut64 0:c43b6919ae15 177 #endif
Helmut64 0:c43b6919ae15 178
Helmut64 0:c43b6919ae15 179 if (DEBUG_MESSAGE)
Helmut64 0:c43b6919ae15 180 dprintf("Starting Ping-Pong loop");
Helmut64 0:c43b6919ae15 181
Helmut64 0:c43b6919ae15 182
Helmut64 0:c43b6919ae15 183 Radio->Rx( RX_TIMEOUT_VALUE );
Helmut64 0:c43b6919ae15 184
Helmut64 0:c43b6919ae15 185 while( 1 )
Helmut64 0:c43b6919ae15 186 {
Helmut64 0:c43b6919ae15 187
Helmut64 0:c43b6919ae15 188 switch( State )
Helmut64 0:c43b6919ae15 189 {
Helmut64 0:c43b6919ae15 190 case RX:
Helmut64 0:c43b6919ae15 191 *led3 = 0;
Helmut64 0:c43b6919ae15 192 if( isMaster == true )
Helmut64 0:c43b6919ae15 193 {
Helmut64 0:c43b6919ae15 194 if( BufferSize > 0 )
Helmut64 0:c43b6919ae15 195 {
Helmut64 0:c43b6919ae15 196 if( memcmp(Buffer, PongMsg, sizeof(PongMsg)) == 0 )
Helmut64 0:c43b6919ae15 197 {
Helmut64 0:c43b6919ae15 198 *led = !*led;
Helmut64 0:c43b6919ae15 199 dprintf( "...Pong" );
Helmut64 0:c43b6919ae15 200 // Send the next PING frame
Helmut64 0:c43b6919ae15 201 memcpy(Buffer, PingMsg, sizeof(PingMsg));
Helmut64 0:c43b6919ae15 202 // We fill the buffer with numbers for the payload
Helmut64 0:c43b6919ae15 203 for( i = sizeof(PingMsg); i < BufferSize; i++ )
Helmut64 0:c43b6919ae15 204 {
Helmut64 0:c43b6919ae15 205 Buffer[i] = i - sizeof(PingMsg);
Helmut64 0:c43b6919ae15 206 }
Helmut64 0:c43b6919ae15 207 wait_ms( 10 );
Helmut64 0:c43b6919ae15 208 Radio->Send( Buffer, BufferSize );
Helmut64 0:c43b6919ae15 209 }
Helmut64 0:c43b6919ae15 210 else if( memcmp(Buffer, PingMsg, sizeof(PingMsg)) == 0 )
Helmut64 0:c43b6919ae15 211 { // A master already exists then become a slave
Helmut64 0:c43b6919ae15 212 dprintf( "...Ping" );
Helmut64 0:c43b6919ae15 213 *led = !*led;
Helmut64 0:c43b6919ae15 214 isMaster = false;
Helmut64 0:c43b6919ae15 215 // Send the next PONG frame
Helmut64 0:c43b6919ae15 216 memcpy(Buffer, PongMsg, sizeof(PongMsg));
Helmut64 0:c43b6919ae15 217 // We fill the buffer with numbers for the payload
Helmut64 0:c43b6919ae15 218 for( i = sizeof(PongMsg); i < BufferSize; i++ )
Helmut64 0:c43b6919ae15 219 {
Helmut64 0:c43b6919ae15 220 Buffer[i] = i - sizeof(PongMsg);
Helmut64 0:c43b6919ae15 221 }
Helmut64 0:c43b6919ae15 222 wait_ms( 10 );
Helmut64 0:c43b6919ae15 223 Radio->Send( Buffer, BufferSize );
Helmut64 0:c43b6919ae15 224 }
Helmut64 0:c43b6919ae15 225 else // valid reception but neither a PING or a PONG message
Helmut64 0:c43b6919ae15 226 { // Set device as master ans start again
Helmut64 0:c43b6919ae15 227 isMaster = true;
Helmut64 0:c43b6919ae15 228 Radio->Rx( RX_TIMEOUT_VALUE );
Helmut64 0:c43b6919ae15 229 }
Helmut64 0:c43b6919ae15 230 }
Helmut64 0:c43b6919ae15 231 }
Helmut64 0:c43b6919ae15 232 else
Helmut64 0:c43b6919ae15 233 {
Helmut64 0:c43b6919ae15 234 if( BufferSize > 0 )
Helmut64 0:c43b6919ae15 235 {
Helmut64 0:c43b6919ae15 236 if( memcmp(Buffer, PingMsg, sizeof(PingMsg)) == 0 )
Helmut64 0:c43b6919ae15 237 {
Helmut64 0:c43b6919ae15 238 *led = !*led;
Helmut64 0:c43b6919ae15 239 dprintf( "...Ping" );
Helmut64 0:c43b6919ae15 240 // Send the reply to the PING string
Helmut64 0:c43b6919ae15 241 memcpy(Buffer, PongMsg, sizeof(PongMsg));
Helmut64 0:c43b6919ae15 242 // We fill the buffer with numbers for the payload
Helmut64 0:c43b6919ae15 243 for( i = sizeof(PongMsg); i < BufferSize; i++ )
Helmut64 0:c43b6919ae15 244 {
Helmut64 0:c43b6919ae15 245 Buffer[i] = i - sizeof(PongMsg);
Helmut64 0:c43b6919ae15 246 }
Helmut64 0:c43b6919ae15 247 wait_ms( 10 );
Helmut64 0:c43b6919ae15 248 Radio->Send( Buffer, BufferSize );
Helmut64 0:c43b6919ae15 249 }
Helmut64 0:c43b6919ae15 250 else // valid reception but not a PING as expected
Helmut64 0:c43b6919ae15 251 { // Set device as master and start again
Helmut64 0:c43b6919ae15 252 isMaster = true;
Helmut64 0:c43b6919ae15 253 Radio->Rx( RX_TIMEOUT_VALUE );
Helmut64 0:c43b6919ae15 254 }
Helmut64 0:c43b6919ae15 255 }
Helmut64 0:c43b6919ae15 256 }
Helmut64 0:c43b6919ae15 257 State = LOWPOWER;
Helmut64 0:c43b6919ae15 258 break;
Helmut64 0:c43b6919ae15 259 case TX:
Helmut64 0:c43b6919ae15 260 *led3 = 1;
Helmut64 0:c43b6919ae15 261 if( isMaster == true )
Helmut64 0:c43b6919ae15 262 {
Helmut64 0:c43b6919ae15 263 dprintf("Ping..." );
Helmut64 0:c43b6919ae15 264 }
Helmut64 0:c43b6919ae15 265 else
Helmut64 0:c43b6919ae15 266 {
Helmut64 0:c43b6919ae15 267 dprintf("Pong..." );
Helmut64 0:c43b6919ae15 268 }
Helmut64 0:c43b6919ae15 269 Radio->Rx( RX_TIMEOUT_VALUE );
Helmut64 0:c43b6919ae15 270 State = LOWPOWER;
Helmut64 0:c43b6919ae15 271 break;
Helmut64 0:c43b6919ae15 272 case RX_TIMEOUT:
Helmut64 0:c43b6919ae15 273 if( isMaster == true )
Helmut64 0:c43b6919ae15 274 {
Helmut64 0:c43b6919ae15 275 // Send the next PING frame
Helmut64 0:c43b6919ae15 276 memcpy(Buffer, PingMsg, sizeof(PingMsg));
Helmut64 0:c43b6919ae15 277 for( i = sizeof(PingMsg); i < BufferSize; i++ )
Helmut64 0:c43b6919ae15 278 {
Helmut64 0:c43b6919ae15 279 Buffer[i] = i - sizeof(PingMsg);
Helmut64 0:c43b6919ae15 280 }
Helmut64 0:c43b6919ae15 281 wait_ms( 10 );
Helmut64 0:c43b6919ae15 282 Radio->Send( Buffer, BufferSize );
Helmut64 0:c43b6919ae15 283 }
Helmut64 0:c43b6919ae15 284 else
Helmut64 0:c43b6919ae15 285 {
Helmut64 0:c43b6919ae15 286 Radio->Rx( RX_TIMEOUT_VALUE );
Helmut64 0:c43b6919ae15 287 }
Helmut64 0:c43b6919ae15 288 State = LOWPOWER;
Helmut64 0:c43b6919ae15 289 break;
Helmut64 0:c43b6919ae15 290 case RX_ERROR:
Helmut64 0:c43b6919ae15 291 // We have received a Packet with a CRC error, send reply as if packet was correct
Helmut64 0:c43b6919ae15 292 if( isMaster == true )
Helmut64 0:c43b6919ae15 293 {
Helmut64 0:c43b6919ae15 294 // Send the next PING frame
Helmut64 0:c43b6919ae15 295 memcpy(Buffer, PingMsg, sizeof(PingMsg));
Helmut64 0:c43b6919ae15 296 for( i = 4; i < BufferSize; i++ )
Helmut64 0:c43b6919ae15 297 {
Helmut64 0:c43b6919ae15 298 Buffer[i] = i - 4;
Helmut64 0:c43b6919ae15 299 }
Helmut64 0:c43b6919ae15 300 wait_ms( 10 );
Helmut64 0:c43b6919ae15 301 Radio->Send( Buffer, BufferSize );
Helmut64 0:c43b6919ae15 302 }
Helmut64 0:c43b6919ae15 303 else
Helmut64 0:c43b6919ae15 304 {
Helmut64 0:c43b6919ae15 305 // Send the next PONG frame
Helmut64 0:c43b6919ae15 306 memcpy(Buffer, PongMsg, sizeof(PongMsg));
Helmut64 0:c43b6919ae15 307 for( i = sizeof(PongMsg); i < BufferSize; i++ )
Helmut64 0:c43b6919ae15 308 {
Helmut64 0:c43b6919ae15 309 Buffer[i] = i - sizeof(PongMsg);
Helmut64 0:c43b6919ae15 310 }
Helmut64 0:c43b6919ae15 311 wait_ms( 10 );
Helmut64 0:c43b6919ae15 312 Radio->Send( Buffer, BufferSize );
Helmut64 0:c43b6919ae15 313 }
Helmut64 0:c43b6919ae15 314 State = LOWPOWER;
Helmut64 0:c43b6919ae15 315 break;
Helmut64 0:c43b6919ae15 316 case TX_TIMEOUT:
Helmut64 0:c43b6919ae15 317 Radio->Rx( RX_TIMEOUT_VALUE );
Helmut64 0:c43b6919ae15 318 State = LOWPOWER;
Helmut64 0:c43b6919ae15 319 break;
Helmut64 0:c43b6919ae15 320 case LOWPOWER:
Helmut64 1:65d602e2d746 321 sleep();
Helmut64 0:c43b6919ae15 322 break;
Helmut64 0:c43b6919ae15 323 default:
Helmut64 0:c43b6919ae15 324 State = LOWPOWER;
Helmut64 0:c43b6919ae15 325 break;
Helmut64 0:c43b6919ae15 326 }
Helmut64 0:c43b6919ae15 327 }
Helmut64 0:c43b6919ae15 328 }
Helmut64 0:c43b6919ae15 329
Helmut64 11:d3a591c20cd7 330 void OnTxDone(void *radio, void *userThisPtr, void *userData)
Helmut64 0:c43b6919ae15 331 {
Helmut64 0:c43b6919ae15 332 Radio->Sleep( );
Helmut64 0:c43b6919ae15 333 State = TX;
Helmut64 0:c43b6919ae15 334 if (DEBUG_MESSAGE)
Helmut64 0:c43b6919ae15 335 dprintf("> OnTxDone");
Helmut64 0:c43b6919ae15 336 }
Helmut64 0:c43b6919ae15 337
Helmut64 11:d3a591c20cd7 338 void OnRxDone(void *radio, void *userThisPtr, void *userData, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
Helmut64 0:c43b6919ae15 339 {
Helmut64 0:c43b6919ae15 340 Radio->Sleep( );
Helmut64 0:c43b6919ae15 341 BufferSize = size;
Helmut64 0:c43b6919ae15 342 memcpy( Buffer, payload, BufferSize );
Helmut64 0:c43b6919ae15 343 State = RX;
Helmut64 0:c43b6919ae15 344 if (DEBUG_MESSAGE)
Helmut64 0:c43b6919ae15 345 dprintf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d", rssi, snr);
Helmut64 0:c43b6919ae15 346 dump("Data:", payload, size);
Helmut64 0:c43b6919ae15 347 }
Helmut64 0:c43b6919ae15 348
Helmut64 11:d3a591c20cd7 349 void OnTxTimeout(void *radio, void *userThisPtr, void *userData)
Helmut64 0:c43b6919ae15 350 {
Helmut64 0:c43b6919ae15 351 *led3 = 0;
Helmut64 0:c43b6919ae15 352 Radio->Sleep( );
Helmut64 0:c43b6919ae15 353 State = TX_TIMEOUT;
Helmut64 0:c43b6919ae15 354 if(DEBUG_MESSAGE)
Helmut64 0:c43b6919ae15 355 dprintf("> OnTxTimeout");
Helmut64 0:c43b6919ae15 356 }
Helmut64 0:c43b6919ae15 357
Helmut64 11:d3a591c20cd7 358 void OnRxTimeout(void *radio, void *userThisPtr, void *userData)
Helmut64 0:c43b6919ae15 359 {
Helmut64 0:c43b6919ae15 360 *led3 = 0;
Helmut64 0:c43b6919ae15 361 Radio->Sleep( );
Helmut64 0:c43b6919ae15 362 Buffer[BufferSize-1] = 0;
Helmut64 0:c43b6919ae15 363 State = RX_TIMEOUT;
Helmut64 0:c43b6919ae15 364 if (DEBUG_MESSAGE)
Helmut64 0:c43b6919ae15 365 dprintf("> OnRxTimeout");
Helmut64 0:c43b6919ae15 366 }
Helmut64 0:c43b6919ae15 367
Helmut64 11:d3a591c20cd7 368 void OnRxError(void *radio, void *userThisPtr, void *userData)
Helmut64 0:c43b6919ae15 369 {
Helmut64 0:c43b6919ae15 370 Radio->Sleep( );
Helmut64 0:c43b6919ae15 371 State = RX_ERROR;
Helmut64 0:c43b6919ae15 372 if (DEBUG_MESSAGE)
Helmut64 0:c43b6919ae15 373 dprintf("> OnRxError");
Helmut64 0:c43b6919ae15 374 }
Helmut64 0:c43b6919ae15 375
Helmut64 0:c43b6919ae15 376 #endif