Smartage application

Dependencies:   BufferedSerial SX1276GenericLib USBDeviceHT mbed Crypto X_NUCLEO_IKS01A2

Fork of STM32L0_LoRa by Helmut Tschemernjak

Committer:
marcozecchini
Date:
Fri May 25 15:13:25 2018 +0000
Revision:
24:bb733d746bda
Parent:
23:5d46bbe685a1
Child:
26:d93f1206909c
sensor measuring added

Who changed what in which revision?

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