Smartage application

Dependencies:   BufferedSerial SX1276GenericLib USBDeviceHT mbed Crypto X_NUCLEO_IKS01A2

Fork of STM32L0_LoRa by Helmut Tschemernjak

Committer:
marcozecchini
Date:
Wed May 30 18:09:34 2018 +0000
Revision:
27:d308dd4d8f51
Parent:
26:d93f1206909c
Child:
28:9d7be893610d
Encrypting version

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