create a LoRa Modem from the PingPong example

Dependencies:   SX1276Lib mbed

Fork of SX1276PingPong by Semtech

Committer:
donsez
Date:
Sun Mar 06 12:03:51 2016 +0000
Revision:
16:352011886276
Parent:
10:9184674b5cfd
add comment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donsez 16:352011886276 1 // LoRa Modem for receiving and sending data on fixed channels
donsez 16:352011886276 2
GregCr 0:1ed39951ab7b 3 #include "mbed.h"
GregCr 4:5ece30264cd9 4 #include "main.h"
GregCr 0:1ed39951ab7b 5 #include "sx1276-hal.h"
donsez 10:9184674b5cfd 6
GregCr 8:f956dee63a56 7 #include "debug.h"
GregCr 0:1ed39951ab7b 8
donsez 10:9184674b5cfd 9 /* CONFIGURATION */
donsez 10:9184674b5cfd 10
donsez 10:9184674b5cfd 11 #define NODE_ADDR 0x411A
donsez 10:9184674b5cfd 12
GregCr 0:1ed39951ab7b 13 /* Set this flag to '1' to display debug messages on the console */
donsez 10:9184674b5cfd 14 #define DEBUG_MESSAGE 1
donsez 10:9184674b5cfd 15
donsez 10:9184674b5cfd 16 #define RX_MODE 1
donsez 10:9184674b5cfd 17
donsez 10:9184674b5cfd 18 #define TX_MODE !RX_MODE
donsez 10:9184674b5cfd 19
donsez 10:9184674b5cfd 20 /* Set the mode RX_MODE or TX_MODE */
donsez 10:9184674b5cfd 21 #define MODE RX_MODE
donsez 10:9184674b5cfd 22
donsez 10:9184674b5cfd 23 /* Set the delay (according the duty cycle for the ISM band of the frequency RF_FREQUENCY */
donsez 10:9184674b5cfd 24
donsez 10:9184674b5cfd 25 #define DUTY_CYCLE 0.01
donsez 10:9184674b5cfd 26 //#define DELAY_NEXT_TX_IN_MILLISEC ((int)((timeOnAirInMilli / DUTY_CYCLE)-timeOnAirInMilli))
donsez 10:9184674b5cfd 27
donsez 10:9184674b5cfd 28 #define DELAY_NEXT_TX_IN_MILLISEC 5000
GregCr 0:1ed39951ab7b 29
GregCr 0:1ed39951ab7b 30 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
GregCr 5:f2431c4fe3bb 31 #define USE_MODEM_LORA 1
GregCr 0:1ed39951ab7b 32 #define USE_MODEM_FSK !USE_MODEM_LORA
GregCr 0:1ed39951ab7b 33
donsez 10:9184674b5cfd 34 #define RF_FREQUENCY 868100000 // Hz
GregCr 0:1ed39951ab7b 35 #define TX_OUTPUT_POWER 14 // 14 dBm
GregCr 0:1ed39951ab7b 36
donsez 10:9184674b5cfd 37
GregCr 0:1ed39951ab7b 38 #if USE_MODEM_LORA == 1
GregCr 0:1ed39951ab7b 39
donsez 10:9184674b5cfd 40 #define LORA_BANDWIDTH 0 // [0: 125 kHz,
GregCr 0:1ed39951ab7b 41 // 1: 250 kHz,
GregCr 0:1ed39951ab7b 42 // 2: 500 kHz,
GregCr 0:1ed39951ab7b 43 // 3: Reserved]
donsez 10:9184674b5cfd 44 #define LORA_SPREADING_FACTOR 12 // [SF7..SF12]
GregCr 0:1ed39951ab7b 45 #define LORA_CODINGRATE 1 // [1: 4/5,
GregCr 0:1ed39951ab7b 46 // 2: 4/6,
GregCr 0:1ed39951ab7b 47 // 3: 4/7,
GregCr 0:1ed39951ab7b 48 // 4: 4/8]
GregCr 0:1ed39951ab7b 49 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
GregCr 0:1ed39951ab7b 50 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
GregCr 0:1ed39951ab7b 51 #define LORA_FIX_LENGTH_PAYLOAD_ON false
GregCr 3:8b9e2a4df4b5 52 #define LORA_FHSS_ENABLED false
GregCr 3:8b9e2a4df4b5 53 #define LORA_NB_SYMB_HOP 4
GregCr 0:1ed39951ab7b 54 #define LORA_IQ_INVERSION_ON false
GregCr 3:8b9e2a4df4b5 55 #define LORA_CRC_ENABLED true
GregCr 3:8b9e2a4df4b5 56
GregCr 0:1ed39951ab7b 57 #elif USE_MODEM_FSK == 1
GregCr 0:1ed39951ab7b 58
GregCr 2:59e108728d71 59 #define FSK_FDEV 25000 // Hz
GregCr 2:59e108728d71 60 #define FSK_DATARATE 19200 // bps
GregCr 2:59e108728d71 61 #define FSK_BANDWIDTH 50000 // Hz
GregCr 2:59e108728d71 62 #define FSK_AFC_BANDWIDTH 83333 // Hz
GregCr 0:1ed39951ab7b 63 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
GregCr 0:1ed39951ab7b 64 #define FSK_FIX_LENGTH_PAYLOAD_ON false
GregCr 3:8b9e2a4df4b5 65 #define FSK_CRC_ENABLED true
GregCr 3:8b9e2a4df4b5 66
GregCr 0:1ed39951ab7b 67 #else
GregCr 0:1ed39951ab7b 68 #error "Please define a modem in the compiler options."
GregCr 0:1ed39951ab7b 69 #endif
GregCr 0:1ed39951ab7b 70
donsez 10:9184674b5cfd 71 #define RX_TIMEOUT_VALUE 1000000000 // in us
donsez 10:9184674b5cfd 72 #define BUFFER_SIZE 17 // Define the payload size here
donsez 10:9184674b5cfd 73
donsez 10:9184674b5cfd 74
donsez 10:9184674b5cfd 75 Serial pc(USBTX,USBRX);
GregCr 0:1ed39951ab7b 76
GregCr 8:f956dee63a56 77 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
GregCr 3:8b9e2a4df4b5 78 DigitalOut led(LED2);
GregCr 3:8b9e2a4df4b5 79 #else
GregCr 3:8b9e2a4df4b5 80 DigitalOut led(LED1);
GregCr 3:8b9e2a4df4b5 81 #endif
GregCr 3:8b9e2a4df4b5 82
GregCr 0:1ed39951ab7b 83 /*
GregCr 0:1ed39951ab7b 84 * Global variables declarations
GregCr 0:1ed39951ab7b 85 */
GregCr 0:1ed39951ab7b 86 typedef RadioState States_t;
GregCr 7:c1bbd6c56979 87 volatile States_t State = LOWPOWER;
GregCr 0:1ed39951ab7b 88
donsez 10:9184674b5cfd 89 SX1276MB1xAS Radio( OnTxDone, OnTxTimeout, OnRxDone, OnRxTimeout, OnRxError, NULL /*OnFhssChangeChannel*/, NULL /*OnCadDone*/ );
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
donsez 10:9184674b5cfd 94 int16_t RssiValue = 0;
donsez 10:9184674b5cfd 95 int8_t SnrValue = 0;
donsez 10:9184674b5cfd 96
donsez 10:9184674b5cfd 97 ModemType Modem;
donsez 10:9184674b5cfd 98
donsez 10:9184674b5cfd 99 uint16_t SeqNum = 0;
donsez 10:9184674b5cfd 100
donsez 10:9184674b5cfd 101 // Address of the Source Node
donsez 10:9184674b5cfd 102 uint16_t NodeSrcAddr = NODE_ADDR;
donsez 10:9184674b5cfd 103
donsez 10:9184674b5cfd 104 void hexprintf(Serial* pc, const uint8_t* buffer, uint16_t size)
donsez 10:9184674b5cfd 105 {
donsez 10:9184674b5cfd 106 for(uint16_t count = 0; count < size; count++)
donsez 10:9184674b5cfd 107 {
donsez 10:9184674b5cfd 108 pc->printf("%02x", buffer[count]);
donsez 10:9184674b5cfd 109 }
donsez 10:9184674b5cfd 110 }
donsez 10:9184674b5cfd 111 const uint8_t Msg[] = "TEST**##abcdefghijklmnopqrstuvwxyz#0123456789#ABCDEFGHIJKLMNOPQRSTUVWXYZ#0123456789#abcdefghijklmnopqrstuvwxyz#0123456789#ABCDEFGHIJKLMNOPQRSTUVWXYZ#0123456789#abcdefghijklmnopqrstuvwxyz#0123456789#ABCDEFGHIJKLMNOPQRSTUVWXYZ#0123456789#abcdefghijklmnopqrs#"; /* abc.. is for padding */
donsez 10:9184674b5cfd 112
GregCr 0:1ed39951ab7b 113
GregCr 0:1ed39951ab7b 114 int main()
donsez 10:9184674b5cfd 115 {
donsez 10:9184674b5cfd 116
donsez 10:9184674b5cfd 117 pc.format(8, Serial::None, 1);
donsez 10:9184674b5cfd 118 pc.baud(115200);
GregCr 0:1ed39951ab7b 119
donsez 10:9184674b5cfd 120 sx_debug( ">INFO RX/TX Modem \r\n\n" );
GregCr 0:1ed39951ab7b 121
GregCr 7:c1bbd6c56979 122 // verify the connection with the board
GregCr 7:c1bbd6c56979 123 while( Radio.Read( REG_VERSION ) == 0x00 )
GregCr 2:59e108728d71 124 {
donsez 10:9184674b5cfd 125 sx_debug( ">ERROR : Radio could not be detected!\r\n", NULL );
GregCr 7:c1bbd6c56979 126 wait( 1 );
GregCr 2:59e108728d71 127 }
GregCr 7:c1bbd6c56979 128
donsez 10:9184674b5cfd 129 sx_debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ) , ">INFO Board Type: SX1276MB1LAS\r\n" );
donsez 10:9184674b5cfd 130 sx_debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ) , ">INFO Board Type: SX1276MB1MAS\r\n" );
GregCr 1:126d70d374f6 131
GregCr 0:1ed39951ab7b 132 Radio.SetChannel( RF_FREQUENCY );
GregCr 0:1ed39951ab7b 133
donsez 10:9184674b5cfd 134
GregCr 0:1ed39951ab7b 135 #if USE_MODEM_LORA == 1
GregCr 3:8b9e2a4df4b5 136
donsez 10:9184674b5cfd 137 sx_debug_if( LORA_FHSS_ENABLED, ">INFO LORA FHSS Mode\r\n");
donsez 10:9184674b5cfd 138 sx_debug_if( !LORA_FHSS_ENABLED, ">INFO LORA Mode\r\n");
GregCr 7:c1bbd6c56979 139
donsez 10:9184674b5cfd 140 Modem = MODEM_LORA;
donsez 10:9184674b5cfd 141
donsez 10:9184674b5cfd 142 Radio.SetTxConfig( Modem, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
GregCr 0:1ed39951ab7b 143 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
GregCr 0:1ed39951ab7b 144 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
GregCr 3:8b9e2a4df4b5 145 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
GregCr 7:c1bbd6c56979 146 LORA_IQ_INVERSION_ON, 2000000 );
GregCr 0:1ed39951ab7b 147
donsez 10:9184674b5cfd 148 pc.printf(">INFO TX Parameters freq=%d bw=%d sf=%d cr=%d preamble=%d crc=%d fhss=%d hop=%d iq=%d\r\n",
donsez 10:9184674b5cfd 149 RF_FREQUENCY, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE,
donsez 10:9184674b5cfd 150 LORA_PREAMBLE_LENGTH, LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
donsez 10:9184674b5cfd 151 LORA_IQ_INVERSION_ON
donsez 10:9184674b5cfd 152 );
donsez 10:9184674b5cfd 153
donsez 10:9184674b5cfd 154 Radio.SetRxConfig( Modem, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
GregCr 0:1ed39951ab7b 155 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
mluis 9:e764990e45df 156 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
GregCr 3:8b9e2a4df4b5 157 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
GregCr 3:8b9e2a4df4b5 158 LORA_IQ_INVERSION_ON, true );
GregCr 0:1ed39951ab7b 159
donsez 10:9184674b5cfd 160
donsez 10:9184674b5cfd 161 pc.printf(">INFO RX Parameters freq=%d bw=%d sf=%d cr=%d preamble=%d crc=%d fhss=%d hop=%d iq=%d\r\n",
donsez 10:9184674b5cfd 162 RF_FREQUENCY, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE,
donsez 10:9184674b5cfd 163 LORA_PREAMBLE_LENGTH, LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
donsez 10:9184674b5cfd 164 LORA_IQ_INVERSION_ON
donsez 10:9184674b5cfd 165 );
donsez 10:9184674b5cfd 166
GregCr 0:1ed39951ab7b 167 #elif USE_MODEM_FSK == 1
GregCr 0:1ed39951ab7b 168
donsez 10:9184674b5cfd 169 sx_debug(">INFO FSK Mode\r\n");
donsez 10:9184674b5cfd 170
donsez 10:9184674b5cfd 171 Modem = MODEM_FSK;
donsez 10:9184674b5cfd 172
GregCr 0:1ed39951ab7b 173 Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
GregCr 0:1ed39951ab7b 174 FSK_DATARATE, 0,
GregCr 0:1ed39951ab7b 175 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
GregCr 7:c1bbd6c56979 176 FSK_CRC_ENABLED, 0, 0, 0, 2000000 );
donsez 10:9184674b5cfd 177
donsez 10:9184674b5cfd 178 pc.printf(">INFO TX Parameters freq=%d bw=%d sf=%d dr=%d\r\n",
donsez 10:9184674b5cfd 179 RF_FREQUENCY, FSK_BANDWIDTH, FSK_DATARATE );
GregCr 0:1ed39951ab7b 180
GregCr 0:1ed39951ab7b 181 Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
GregCr 0:1ed39951ab7b 182 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
mluis 9:e764990e45df 183 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
GregCr 3:8b9e2a4df4b5 184 0, 0, false, true );
GregCr 0:1ed39951ab7b 185
donsez 10:9184674b5cfd 186 pc.printf(">INFO RX Parameters freq=%d bw=%d dr=%d afc_bw=%d preamble=%d crc=%d\r\n",
donsez 10:9184674b5cfd 187 RF_FREQUENCY, FSK_BANDWIDTH, FSK_DATARATE, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, FSK_CRC_ENABLED );
donsez 10:9184674b5cfd 188
donsez 10:9184674b5cfd 189
GregCr 0:1ed39951ab7b 190 #else
GregCr 0:1ed39951ab7b 191
GregCr 0:1ed39951ab7b 192 #error "Please define a modem in the compiler options."
GregCr 0:1ed39951ab7b 193
GregCr 0:1ed39951ab7b 194 #endif
donsez 10:9184674b5cfd 195
GregCr 0:1ed39951ab7b 196
GregCr 3:8b9e2a4df4b5 197 led = 0;
donsez 10:9184674b5cfd 198 #if MODE == RX_MODE
donsez 10:9184674b5cfd 199 sx_debug_if( DEBUG_MESSAGE, ">INFO Starting RX loop\r\n" );
donsez 10:9184674b5cfd 200
donsez 10:9184674b5cfd 201 // start RX
GregCr 0:1ed39951ab7b 202 Radio.Rx( RX_TIMEOUT_VALUE );
donsez 10:9184674b5cfd 203 State = LOWPOWER;
GregCr 0:1ed39951ab7b 204
donsez 10:9184674b5cfd 205 #elif MODE == TX_MODE
donsez 10:9184674b5cfd 206 sx_debug_if( DEBUG_MESSAGE, ">INFO Starting TX loop\r\n" );
donsez 10:9184674b5cfd 207 State = TX;
donsez 10:9184674b5cfd 208
donsez 10:9184674b5cfd 209 #else
donsez 10:9184674b5cfd 210 #error "Please define a valid mode (RX_MODE, TX_MODE)."
donsez 10:9184674b5cfd 211 #endif
donsez 10:9184674b5cfd 212
donsez 10:9184674b5cfd 213 // TODO ECHO_MODE : RX_MODE then TX_MODE
donsez 10:9184674b5cfd 214
GregCr 0:1ed39951ab7b 215 while( 1 )
GregCr 0:1ed39951ab7b 216 {
GregCr 0:1ed39951ab7b 217 switch( State )
GregCr 0:1ed39951ab7b 218 {
GregCr 0:1ed39951ab7b 219 case RX:
GregCr 0:1ed39951ab7b 220 if( BufferSize > 0 )
GregCr 0:1ed39951ab7b 221 {
donsez 10:9184674b5cfd 222 led = !led; // Invert LED
donsez 10:9184674b5cfd 223
donsez 10:9184674b5cfd 224
donsez 10:9184674b5cfd 225 // TODO ADD tmst | number | Internal timestamp of "RX finished" event (32b unsigned)
donsez 10:9184674b5cfd 226
donsez 10:9184674b5cfd 227 pc.printf(">INFO RX modem=%d size=%d rssi=%d snr=%d freq=%d bw=%d sf=%d cr=%d buffer=",
donsez 10:9184674b5cfd 228 Modem, BufferSize, RssiValue, SnrValue, RF_FREQUENCY, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE );
donsez 10:9184674b5cfd 229 hexprintf(&pc, Buffer, BufferSize);
donsez 10:9184674b5cfd 230 pc.printf("\r\n");
donsez 10:9184674b5cfd 231
donsez 10:9184674b5cfd 232 pc.printf("RX;%d;%d;%d;%d;%d;%d;%d;%d;",
donsez 10:9184674b5cfd 233 Modem, BufferSize, RssiValue, SnrValue, RF_FREQUENCY, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE );
donsez 10:9184674b5cfd 234 hexprintf(&pc, Buffer, BufferSize);
donsez 10:9184674b5cfd 235 pc.printf("\r\n");
donsez 10:9184674b5cfd 236 // wait_ms( 10 );
donsez 10:9184674b5cfd 237 Radio.Rx( RX_TIMEOUT_VALUE );
GregCr 0:1ed39951ab7b 238 }
donsez 10:9184674b5cfd 239
GregCr 0:1ed39951ab7b 240 State = LOWPOWER;
GregCr 0:1ed39951ab7b 241 break;
GregCr 0:1ed39951ab7b 242 case RX_TIMEOUT:
donsez 10:9184674b5cfd 243 Radio.Rx( RX_TIMEOUT_VALUE );
GregCr 0:1ed39951ab7b 244 State = LOWPOWER;
GregCr 0:1ed39951ab7b 245 break;
GregCr 0:1ed39951ab7b 246 case RX_ERROR:
donsez 10:9184674b5cfd 247 // We have received a Packet with a CRC error
donsez 10:9184674b5cfd 248 pc.printf(">INFO RX_ERROR size=%d\r\n", BufferSize);
donsez 10:9184674b5cfd 249 pc.printf("RX_ERROR;%d\r\n", BufferSize);
donsez 10:9184674b5cfd 250 Radio.Rx( RX_TIMEOUT_VALUE );
GregCr 0:1ed39951ab7b 251 State = LOWPOWER;
GregCr 0:1ed39951ab7b 252 break;
GregCr 0:1ed39951ab7b 253 case TX_TIMEOUT:
donsez 10:9184674b5cfd 254 pc.printf(">TX: TIMEOUT\r\n");
donsez 10:9184674b5cfd 255 case TX:
donsez 10:9184674b5cfd 256 int timeOnAirInMilli = Radio.TimeOnAir(Modem,BufferSize)/1000;
donsez 10:9184674b5cfd 257 if(DELAY_NEXT_TX_IN_MILLISEC!=0) {
donsez 10:9184674b5cfd 258 pc.printf(">INFO: wait %.4f sec before TX\r\n", DELAY_NEXT_TX_IN_MILLISEC/1000.0);
donsez 10:9184674b5cfd 259 wait_ms( DELAY_NEXT_TX_IN_MILLISEC );
donsez 10:9184674b5cfd 260 }
donsez 10:9184674b5cfd 261 led = !led; // Invert LED
donsez 10:9184674b5cfd 262 memcpy(( char* )Buffer, ( char* ) Msg, BufferSize);
donsez 10:9184674b5cfd 263 ++SeqNum;
donsez 10:9184674b5cfd 264 /* refresh counters in payload (big endian, for readability) */
donsez 10:9184674b5cfd 265 Buffer[4] = (uint8_t)(SeqNum >> 8); /* MSB */
donsez 10:9184674b5cfd 266 Buffer[5] = (uint8_t)(SeqNum & 0x00FF); /* LSB */
donsez 10:9184674b5cfd 267 Buffer[6] = (uint8_t)(NodeSrcAddr >> 8); /* MSB */
donsez 10:9184674b5cfd 268 Buffer[7] = (uint8_t)(NodeSrcAddr & 0x00FF); /* LSB */
donsez 10:9184674b5cfd 269
donsez 10:9184674b5cfd 270 /* send packet */
donsez 10:9184674b5cfd 271 pc.printf(">TX: src=%4x seqnum=%u size=%d timeOnAir=%.4f\r\n", NodeSrcAddr, SeqNum, BufferSize, timeOnAirInMilli/1000.0);
donsez 10:9184674b5cfd 272 wait_ms( 10 );
donsez 10:9184674b5cfd 273 Radio.Send( Buffer, BufferSize );
GregCr 0:1ed39951ab7b 274 State = LOWPOWER;
donsez 10:9184674b5cfd 275 break;
GregCr 0:1ed39951ab7b 276 case LOWPOWER:
GregCr 0:1ed39951ab7b 277 break;
GregCr 0:1ed39951ab7b 278 default:
GregCr 0:1ed39951ab7b 279 State = LOWPOWER;
GregCr 0:1ed39951ab7b 280 break;
GregCr 0:1ed39951ab7b 281 }
GregCr 0:1ed39951ab7b 282 }
GregCr 0:1ed39951ab7b 283 }
GregCr 0:1ed39951ab7b 284
GregCr 0:1ed39951ab7b 285 void OnTxDone( void )
GregCr 0:1ed39951ab7b 286 {
GregCr 5:f2431c4fe3bb 287 Radio.Sleep( );
GregCr 0:1ed39951ab7b 288 State = TX;
donsez 10:9184674b5cfd 289 sx_debug_if( DEBUG_MESSAGE, ">INFO OnTxDone\r\n" );
GregCr 0:1ed39951ab7b 290 }
GregCr 0:1ed39951ab7b 291
GregCr 4:5ece30264cd9 292 void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
GregCr 0:1ed39951ab7b 293 {
GregCr 0:1ed39951ab7b 294 Radio.Sleep( );
GregCr 0:1ed39951ab7b 295 BufferSize = size;
GregCr 0:1ed39951ab7b 296 memcpy( Buffer, payload, BufferSize );
GregCr 0:1ed39951ab7b 297 RssiValue = rssi;
GregCr 0:1ed39951ab7b 298 SnrValue = snr;
GregCr 0:1ed39951ab7b 299 State = RX;
donsez 10:9184674b5cfd 300 sx_debug_if( DEBUG_MESSAGE, ">INFO OnRxDone\r\n" );
GregCr 0:1ed39951ab7b 301 }
GregCr 0:1ed39951ab7b 302
GregCr 0:1ed39951ab7b 303 void OnTxTimeout( void )
GregCr 0:1ed39951ab7b 304 {
GregCr 0:1ed39951ab7b 305 Radio.Sleep( );
GregCr 0:1ed39951ab7b 306 State = TX_TIMEOUT;
donsez 10:9184674b5cfd 307 sx_debug_if( DEBUG_MESSAGE, ">INFO OnTxTimeout\r\n" );
GregCr 0:1ed39951ab7b 308 }
GregCr 0:1ed39951ab7b 309
GregCr 0:1ed39951ab7b 310 void OnRxTimeout( void )
GregCr 0:1ed39951ab7b 311 {
GregCr 0:1ed39951ab7b 312 Radio.Sleep( );
GregCr 1:126d70d374f6 313 Buffer[ BufferSize ] = 0;
GregCr 0:1ed39951ab7b 314 State = RX_TIMEOUT;
donsez 10:9184674b5cfd 315 sx_debug_if( DEBUG_MESSAGE, ">INFO OnRxTimeout\r\n" );
GregCr 0:1ed39951ab7b 316 }
GregCr 0:1ed39951ab7b 317
GregCr 0:1ed39951ab7b 318 void OnRxError( void )
GregCr 0:1ed39951ab7b 319 {
GregCr 0:1ed39951ab7b 320 Radio.Sleep( );
GregCr 0:1ed39951ab7b 321 State = RX_ERROR;
donsez 10:9184674b5cfd 322 sx_debug_if( DEBUG_MESSAGE, ">INFO OnRxError\r\n" );
GregCr 0:1ed39951ab7b 323 }
GregCr 3:8b9e2a4df4b5 324
donsez 10:9184674b5cfd 325 /*!
donsez 10:9184674b5cfd 326 * @brief Function executed on Radio Fhss Change Channel event
donsez 10:9184674b5cfd 327 */
donsez 10:9184674b5cfd 328 void OnFhssChangeChannel( uint8_t channelIndex )
donsez 10:9184674b5cfd 329 {
donsez 10:9184674b5cfd 330 sx_debug_if( DEBUG_MESSAGE, ">INFO OnFhssChangeChannel\r\n" );
donsez 10:9184674b5cfd 331 }
donsez 10:9184674b5cfd 332
donsez 10:9184674b5cfd 333 /*!
donsez 10:9184674b5cfd 334 * @brief Function executed on CAD Done event
donsez 10:9184674b5cfd 335 */
donsez 10:9184674b5cfd 336 void OnCadDone( void )
donsez 10:9184674b5cfd 337 {
donsez 10:9184674b5cfd 338 State = TX;
donsez 10:9184674b5cfd 339 sx_debug_if( DEBUG_MESSAGE, ">INFO OnCadDone\r\n" );
donsez 10:9184674b5cfd 340 }