Programme pour envoyer les données avec capteur A

Dependencies:   SX1272Lib WakeUp mbed-src mbed

Committer:
guillouhouede
Date:
Sat May 13 16:24:23 2017 +0000
Revision:
0:525251350363
A;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
guillouhouede 0:525251350363 1 #include "mbed.h"
guillouhouede 0:525251350363 2 #include "main.h"
guillouhouede 0:525251350363 3 #include "sx1272-hal.h"
guillouhouede 0:525251350363 4 #include "debug.h"
guillouhouede 0:525251350363 5 #include "DHT.h"
guillouhouede 0:525251350363 6 #include "WakeUp.h"
guillouhouede 0:525251350363 7
guillouhouede 0:525251350363 8 //glenn
guillouhouede 0:525251350363 9 AnalogIn in(PC_3);// Pour la photorésistance
guillouhouede 0:525251350363 10 AnalogIn in2(PC_2);// Pour la conductivite
guillouhouede 0:525251350363 11
guillouhouede 0:525251350363 12 DHT sensor(PC_5,DHT22); // Pour humi/tempe
guillouhouede 0:525251350363 13
guillouhouede 0:525251350363 14
guillouhouede 0:525251350363 15 /*****************************************************
guillouhouede 0:525251350363 16 Attention /!\ On récupère la valeur de la résistance et pas des lux
guillouhouede 0:525251350363 17 Et aussi on a la valeur du sensor direct, pas de la conductivité exactement
guillouhouede 0:525251350363 18 Mettre ça dans la raspberry je pense, ou direct sur le site web
guillouhouede 0:525251350363 19 ******************************************************/
guillouhouede 0:525251350363 20
guillouhouede 0:525251350363 21
guillouhouede 0:525251350363 22 #define DEBUG_MESSAGE 1
guillouhouede 0:525251350363 23
guillouhouede 0:525251350363 24 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
guillouhouede 0:525251350363 25 #define USE_MODEM_LORA 1
guillouhouede 0:525251350363 26 #define USE_MODEM_FSK !USE_MODEM_LORA
guillouhouede 0:525251350363 27
guillouhouede 0:525251350363 28 #define RF_FREQUENCY 868000000 // Hz
guillouhouede 0:525251350363 29 #define TX_OUTPUT_POWER 14 // 14 dBm
guillouhouede 0:525251350363 30
guillouhouede 0:525251350363 31 #if USE_MODEM_LORA == 1
guillouhouede 0:525251350363 32
guillouhouede 0:525251350363 33 #define LORA_BANDWIDTH 2 // [0: 125 kHz,
guillouhouede 0:525251350363 34 // 1: 250 kHz,
guillouhouede 0:525251350363 35 // 2: 500 kHz,
guillouhouede 0:525251350363 36 // 3: Reserved]
guillouhouede 0:525251350363 37 #define LORA_SPREADING_FACTOR 7 // [SF7..SF12]
guillouhouede 0:525251350363 38 #define LORA_CODINGRATE 1 // [1: 4/5,
guillouhouede 0:525251350363 39 // 2: 4/6,
guillouhouede 0:525251350363 40 // 3: 4/7,
guillouhouede 0:525251350363 41 // 4: 4/8]
guillouhouede 0:525251350363 42 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
guillouhouede 0:525251350363 43 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
guillouhouede 0:525251350363 44 #define LORA_FIX_LENGTH_PAYLOAD_ON false
guillouhouede 0:525251350363 45 #define LORA_FHSS_ENABLED false
guillouhouede 0:525251350363 46 #define LORA_NB_SYMB_HOP 4
guillouhouede 0:525251350363 47 #define LORA_IQ_INVERSION_ON false
guillouhouede 0:525251350363 48 #define LORA_CRC_ENABLED true
guillouhouede 0:525251350363 49
guillouhouede 0:525251350363 50 #elif USE_MODEM_FSK == 1
guillouhouede 0:525251350363 51
guillouhouede 0:525251350363 52 #define FSK_FDEV 25000 // Hz
guillouhouede 0:525251350363 53 #define FSK_DATARATE 19200 // bps
guillouhouede 0:525251350363 54 #define FSK_BANDWIDTH 50000 // Hz
guillouhouede 0:525251350363 55 #define FSK_AFC_BANDWIDTH 83333 // Hz
guillouhouede 0:525251350363 56 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
guillouhouede 0:525251350363 57 #define FSK_FIX_LENGTH_PAYLOAD_ON false
guillouhouede 0:525251350363 58 #define FSK_CRC_ENABLED true
guillouhouede 0:525251350363 59
guillouhouede 0:525251350363 60 #else
guillouhouede 0:525251350363 61 #error "Please define a modem in the compiler options."
guillouhouede 0:525251350363 62 #endif
guillouhouede 0:525251350363 63
guillouhouede 0:525251350363 64 #define RX_TIMEOUT_VALUE 3500000 // in us
guillouhouede 0:525251350363 65 #define BUFFER_SIZE 32 // Define the payload size here
guillouhouede 0:525251350363 66
guillouhouede 0:525251350363 67 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
guillouhouede 0:525251350363 68 DigitalOut led(LED2);
guillouhouede 0:525251350363 69 #else
guillouhouede 0:525251350363 70 DigitalOut led(LED1);
guillouhouede 0:525251350363 71 #endif
guillouhouede 0:525251350363 72
guillouhouede 0:525251350363 73 /*********************************************
guillouhouede 0:525251350363 74 // fonction sleep
guillouhouede 0:525251350363 75 **********************************************/
guillouhouede 0:525251350363 76 /*Timeout timeout; // Create the Timeout object
guillouhouede 0:525251350363 77 void wait_LowPow(unsigned long time);
guillouhouede 0:525251350363 78 void timer_interrupt() // The Timer interrupt service routine
guillouhouede 0:525251350363 79 {
guillouhouede 0:525251350363 80 // Nothing to do, just for wakeup the system
guillouhouede 0:525251350363 81 }
guillouhouede 0:525251350363 82 void wait_LowPow(unsigned long time) // Wait in low power mode function implementation
guillouhouede 0:525251350363 83 {
guillouhouede 0:525251350363 84 timeout.attach(&timer_interrupt, time); // Set the timer interrupt service rutine (ISR) and the time for the timeout (in seconds)
guillouhouede 0:525251350363 85 sleep(); // Enter Low Power Mode (It cant be used deep_sleep() mode, because that mode disable the timer)
guillouhouede 0:525251350363 86 }*/
guillouhouede 0:525251350363 87
guillouhouede 0:525251350363 88 //
guillouhouede 0:525251350363 89 /*
guillouhouede 0:525251350363 90 * Global variables declarations
guillouhouede 0:525251350363 91 */
guillouhouede 0:525251350363 92 typedef enum
guillouhouede 0:525251350363 93 {
guillouhouede 0:525251350363 94 LOWPOWER = 0,
guillouhouede 0:525251350363 95 IDLE,
guillouhouede 0:525251350363 96
guillouhouede 0:525251350363 97 RX,
guillouhouede 0:525251350363 98 RX_TIMEOUT,
guillouhouede 0:525251350363 99 RX_ERROR,
guillouhouede 0:525251350363 100
guillouhouede 0:525251350363 101 TX,
guillouhouede 0:525251350363 102 TX_TIMEOUT,
guillouhouede 0:525251350363 103
guillouhouede 0:525251350363 104 CAD,
guillouhouede 0:525251350363 105 CAD_DONE
guillouhouede 0:525251350363 106 }AppStates_t;
guillouhouede 0:525251350363 107
guillouhouede 0:525251350363 108 volatile AppStates_t State = LOWPOWER;
guillouhouede 0:525251350363 109
guillouhouede 0:525251350363 110 /*!
guillouhouede 0:525251350363 111 * Radio events function pointer
guillouhouede 0:525251350363 112 */
guillouhouede 0:525251350363 113 static RadioEvents_t RadioEvents;
guillouhouede 0:525251350363 114
guillouhouede 0:525251350363 115 /*
guillouhouede 0:525251350363 116 * Global variables declarations
guillouhouede 0:525251350363 117 */
guillouhouede 0:525251350363 118 SX1272MB2xAS Radio( NULL );
guillouhouede 0:525251350363 119
guillouhouede 0:525251350363 120 //const uint8_t PingMsg[] = "PING";
guillouhouede 0:525251350363 121 //const uint8_t PongMsg[] = "PONG";
guillouhouede 0:525251350363 122 const uint8_t CommandeDebut[] = "1";
guillouhouede 0:525251350363 123
guillouhouede 0:525251350363 124 /*const uint8_t PingMsg[] = 42;
guillouhouede 0:525251350363 125 const uint8_t PongMsg[] = "Message reçu !";*/
guillouhouede 0:525251350363 126
guillouhouede 0:525251350363 127 uint16_t BufferSize = BUFFER_SIZE;
guillouhouede 0:525251350363 128 uint8_t Buffer[BUFFER_SIZE];
guillouhouede 0:525251350363 129
guillouhouede 0:525251350363 130 int16_t RssiValue = 0.0;
guillouhouede 0:525251350363 131 int8_t SnrValue = 0.0;
guillouhouede 0:525251350363 132
guillouhouede 0:525251350363 133
guillouhouede 0:525251350363 134
guillouhouede 0:525251350363 135 int main()
guillouhouede 0:525251350363 136 {
guillouhouede 0:525251350363 137 int err;//pour dht22
guillouhouede 0:525251350363 138 //float val_celcius;//dht22
guillouhouede 0:525251350363 139 // float val_humi;//dht22
guillouhouede 0:525251350363 140 uint8_t i;
guillouhouede 0:525251350363 141 bool isMaster = false;
guillouhouede 0:525251350363 142
guillouhouede 0:525251350363 143 debug( "\n\n\r SX1272 Ping Pong Demo Application \n\n\r" );
guillouhouede 0:525251350363 144
guillouhouede 0:525251350363 145 // Initialize Radio driver
guillouhouede 0:525251350363 146 RadioEvents.TxDone = OnTxDone;
guillouhouede 0:525251350363 147 RadioEvents.RxDone = OnRxDone;
guillouhouede 0:525251350363 148 RadioEvents.RxError = OnRxError;
guillouhouede 0:525251350363 149 RadioEvents.TxTimeout = OnTxTimeout;
guillouhouede 0:525251350363 150 RadioEvents.RxTimeout = OnRxTimeout;
guillouhouede 0:525251350363 151 Radio.Init( &RadioEvents );
guillouhouede 0:525251350363 152
guillouhouede 0:525251350363 153
guillouhouede 0:525251350363 154
guillouhouede 0:525251350363 155
guillouhouede 0:525251350363 156 //
guillouhouede 0:525251350363 157
guillouhouede 0:525251350363 158 // verify the connection with the board
guillouhouede 0:525251350363 159 while( Radio.Read( REG_VERSION ) == 0x00 )
guillouhouede 0:525251350363 160 {
guillouhouede 0:525251350363 161 debug( "Radio could not be detected!\n\r", NULL );
guillouhouede 0:525251350363 162 wait( 1 );
guillouhouede 0:525251350363 163 }
guillouhouede 0:525251350363 164
guillouhouede 0:525251350363 165 debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1272MB2XAS ) ) , "\n\r > Board Type: SX1272MB2xAS < \n\r" );
guillouhouede 0:525251350363 166
guillouhouede 0:525251350363 167 Radio.SetChannel( RF_FREQUENCY );
guillouhouede 0:525251350363 168
guillouhouede 0:525251350363 169 #if USE_MODEM_LORA == 1
guillouhouede 0:525251350363 170
guillouhouede 0:525251350363 171 debug_if( LORA_FHSS_ENABLED, "\n\n\r > LORA FHSS Mode < \n\n\r");
guillouhouede 0:525251350363 172 debug_if( !LORA_FHSS_ENABLED, "\n\n\r > LORA Mode < \n\n\r");
guillouhouede 0:525251350363 173
guillouhouede 0:525251350363 174 Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
guillouhouede 0:525251350363 175 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
guillouhouede 0:525251350363 176 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
guillouhouede 0:525251350363 177 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
guillouhouede 0:525251350363 178 LORA_IQ_INVERSION_ON, 2000000 );
guillouhouede 0:525251350363 179
guillouhouede 0:525251350363 180 Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
guillouhouede 0:525251350363 181 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
guillouhouede 0:525251350363 182 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
guillouhouede 0:525251350363 183 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
guillouhouede 0:525251350363 184 LORA_IQ_INVERSION_ON, true );
guillouhouede 0:525251350363 185
guillouhouede 0:525251350363 186 #elif USE_MODEM_FSK == 1
guillouhouede 0:525251350363 187
guillouhouede 0:525251350363 188 debug("\n\n\r > FSK Mode < \n\n\r");
guillouhouede 0:525251350363 189 Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
guillouhouede 0:525251350363 190 FSK_DATARATE, 0,
guillouhouede 0:525251350363 191 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
guillouhouede 0:525251350363 192 FSK_CRC_ENABLED, 0, 0, 0, 2000000 );
guillouhouede 0:525251350363 193
guillouhouede 0:525251350363 194 Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
guillouhouede 0:525251350363 195 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
guillouhouede 0:525251350363 196 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
guillouhouede 0:525251350363 197 0, 0, false, true );
guillouhouede 0:525251350363 198
guillouhouede 0:525251350363 199 #else
guillouhouede 0:525251350363 200
guillouhouede 0:525251350363 201 #error "Please define a modem in the compiler options."
guillouhouede 0:525251350363 202
guillouhouede 0:525251350363 203 #endif
guillouhouede 0:525251350363 204
guillouhouede 0:525251350363 205 debug_if( DEBUG_MESSAGE, "Starting Ping-Pong loop\r\n" );
guillouhouede 0:525251350363 206
guillouhouede 0:525251350363 207 led = 0;
guillouhouede 0:525251350363 208
guillouhouede 0:525251350363 209 Radio.Rx( RX_TIMEOUT_VALUE );
guillouhouede 0:525251350363 210 wait(1);
guillouhouede 0:525251350363 211
guillouhouede 0:525251350363 212 union{
guillouhouede 0:525251350363 213 float val_celcius;
guillouhouede 0:525251350363 214 uint8_t array_celcius[4];
guillouhouede 0:525251350363 215 };
guillouhouede 0:525251350363 216 union{
guillouhouede 0:525251350363 217 float res;
guillouhouede 0:525251350363 218 uint8_t array_res[4];
guillouhouede 0:525251350363 219 };
guillouhouede 0:525251350363 220 union{
guillouhouede 0:525251350363 221 float val_humi;
guillouhouede 0:525251350363 222 uint8_t array_humi[4];
guillouhouede 0:525251350363 223 };
guillouhouede 0:525251350363 224 union{
guillouhouede 0:525251350363 225 float val_condu;
guillouhouede 0:525251350363 226 uint8_t array_condu[4];
guillouhouede 0:525251350363 227 };
guillouhouede 0:525251350363 228
guillouhouede 0:525251350363 229 /*fill le buffer au debut
guillouhouede 0:525251350363 230 */
guillouhouede 0:525251350363 231 for( i = 0; i < BufferSize; i++ )
guillouhouede 0:525251350363 232 {
guillouhouede 0:525251350363 233 Buffer[i] = 0;
guillouhouede 0:525251350363 234 }
guillouhouede 0:525251350363 235
guillouhouede 0:525251350363 236 WakeUp::calibrate();
guillouhouede 0:525251350363 237
guillouhouede 0:525251350363 238 while( 1 )
guillouhouede 0:525251350363 239 {
guillouhouede 0:525251350363 240 /***************************************************************************************************
guillouhouede 0:525251350363 241 Declaraction et récupération des données capteurs
guillouhouede 0:525251350363 242 *****************************************************************************************************/
guillouhouede 0:525251350363 243
guillouhouede 0:525251350363 244 float in_value = in.read();
guillouhouede 0:525251350363 245 res=(10000*in_value)/(3.3 - in_value); // valeur resistance, voir lux après
guillouhouede 0:525251350363 246 float in2_value = in2.read();
guillouhouede 0:525251350363 247 val_condu = in2_value;//Valeur conductivity, voir pour les coef après
guillouhouede 0:525251350363 248
guillouhouede 0:525251350363 249 debug("la valeur de conductivité du capteur vaut %f\n",val_condu);
guillouhouede 0:525251350363 250
guillouhouede 0:525251350363 251 err = sensor.readData(); //on lit le dht22
guillouhouede 0:525251350363 252 if (err == 0) {//Valeurs pour dht22
guillouhouede 0:525251350363 253 val_celcius= sensor.ReadTemperature(CELCIUS);
guillouhouede 0:525251350363 254 val_humi= sensor.ReadHumidity();
guillouhouede 0:525251350363 255 printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
guillouhouede 0:525251350363 256 //printf("val_celcius vaut %f\n",val_celcius);
guillouhouede 0:525251350363 257 } else
guillouhouede 0:525251350363 258 printf("\r\nErr %i \n",err);
guillouhouede 0:525251350363 259
guillouhouede 0:525251350363 260 wait(2);
guillouhouede 0:525251350363 261 /***************************************************************************************************
guillouhouede 0:525251350363 262 On passe les données en uint8_t pour les mettre dans le buffer
guillouhouede 0:525251350363 263 *****************************************************************************************************/
guillouhouede 0:525251350363 264 /****************************************************************************************************
guillouhouede 0:525251350363 265 Test mise en veille
guillouhouede 0:525251350363 266 *****************************************************************************************************/
guillouhouede 0:525251350363 267 /* WakeUp::set_ms(5000);
guillouhouede 0:525251350363 268 //Enter deepsleep, the program won't go beyond this point until it is woken up
guillouhouede 0:525251350363 269 //sleep(10);
guillouhouede 0:525251350363 270 //wait_LowPow(10);
guillouhouede 0:525251350363 271 deepsleep();
guillouhouede 0:525251350363 272 wait(5);*/
guillouhouede 0:525251350363 273 /***************************************************************************************************
guillouhouede 0:525251350363 274 Les états de Lora
guillouhouede 0:525251350363 275 ***************************************************************************************************/
guillouhouede 0:525251350363 276 switch( State )
guillouhouede 0:525251350363 277 {
guillouhouede 0:525251350363 278 case RX:
guillouhouede 0:525251350363 279 if( BufferSize > 0 )
guillouhouede 0:525251350363 280 {
guillouhouede 0:525251350363 281 debug("buffer 0 : %d\n",Buffer[0]);
guillouhouede 0:525251350363 282 if(Buffer[0] == 1 )
guillouhouede 0:525251350363 283 {
guillouhouede 0:525251350363 284 led = !led;
guillouhouede 0:525251350363 285 debug( "ordre de commencer\r\n" );
guillouhouede 0:525251350363 286
guillouhouede 0:525251350363 287 //Buffer[0,1,2] c'est pour commander les différents appareils. Ici buffer 0
guillouhouede 0:525251350363 288 Buffer[1]=1;//Ordre pour dire qu'on a bien renvoyer le message
guillouhouede 0:525251350363 289 // We fill the buffer with numbers for the payload
guillouhouede 0:525251350363 290 Buffer[4]=array_res[0];
guillouhouede 0:525251350363 291 Buffer[5]=array_res[1];
guillouhouede 0:525251350363 292 Buffer[6]=array_res[2];
guillouhouede 0:525251350363 293 Buffer[7]=array_res[3];
guillouhouede 0:525251350363 294
guillouhouede 0:525251350363 295 Buffer[8]=array_condu[0];
guillouhouede 0:525251350363 296 Buffer[9]=array_condu[1];
guillouhouede 0:525251350363 297 Buffer[10]=array_condu[2];
guillouhouede 0:525251350363 298 Buffer[11]=array_condu[3];
guillouhouede 0:525251350363 299
guillouhouede 0:525251350363 300 Buffer[12]=array_celcius[0];
guillouhouede 0:525251350363 301 Buffer[13]=array_celcius[1];
guillouhouede 0:525251350363 302 Buffer[14]=array_celcius[2];
guillouhouede 0:525251350363 303 Buffer[15]=array_celcius[3];
guillouhouede 0:525251350363 304
guillouhouede 0:525251350363 305 Buffer[16]=array_humi[0];
guillouhouede 0:525251350363 306 Buffer[17]=array_humi[1];
guillouhouede 0:525251350363 307 Buffer[18]=array_humi[2];
guillouhouede 0:525251350363 308 Buffer[19]=array_humi[3];
guillouhouede 0:525251350363 309 for( i = 20; i < BufferSize; i++ )
guillouhouede 0:525251350363 310 {
guillouhouede 0:525251350363 311 Buffer[i] = i - 20;
guillouhouede 0:525251350363 312 }
guillouhouede 0:525251350363 313
guillouhouede 0:525251350363 314 Buffer[0]=0;
guillouhouede 0:525251350363 315 wait_ms( 2000 ); //On attend 2sec c'est pour le dht
guillouhouede 0:525251350363 316 Radio.Send( Buffer, BufferSize );
guillouhouede 0:525251350363 317 //On sleep ici
guillouhouede 0:525251350363 318 //sleep(1000);
guillouhouede 0:525251350363 319 //sleep();
guillouhouede 0:525251350363 320 //wait(10);
guillouhouede 0:525251350363 321 WakeUp::set_ms(3600000);
guillouhouede 0:525251350363 322 //Enter deepsleep, the program won't go beyond this point until it is woken up
guillouhouede 0:525251350363 323 //sleep(10);
guillouhouede 0:525251350363 324 //wait_LowPow(10);
guillouhouede 0:525251350363 325 deepsleep();
guillouhouede 0:525251350363 326 wait(3600);
guillouhouede 0:525251350363 327 //debug("fin deepsleep");
guillouhouede 0:525251350363 328
guillouhouede 0:525251350363 329 }
guillouhouede 0:525251350363 330 else // valid reception but not a PING as expected
guillouhouede 0:525251350363 331 { // Set device as master and start again
guillouhouede 0:525251350363 332 //isMaster = true;
guillouhouede 0:525251350363 333 Radio.Rx( RX_TIMEOUT_VALUE );
guillouhouede 0:525251350363 334 }
guillouhouede 0:525251350363 335 }
guillouhouede 0:525251350363 336
guillouhouede 0:525251350363 337 State = LOWPOWER;
guillouhouede 0:525251350363 338 break;
guillouhouede 0:525251350363 339 case TX:
guillouhouede 0:525251350363 340 led = !led;
guillouhouede 0:525251350363 341
guillouhouede 0:525251350363 342 if( isMaster == true )
guillouhouede 0:525251350363 343 {
guillouhouede 0:525251350363 344 //debug( "Ping...\r\n" );
guillouhouede 0:525251350363 345
guillouhouede 0:525251350363 346 //debug("La resistance vaut %f\n",res);
guillouhouede 0:525251350363 347 }
guillouhouede 0:525251350363 348 else
guillouhouede 0:525251350363 349 {
guillouhouede 0:525251350363 350 debug( "Dans tx sans etre le maitre\r\n" );
guillouhouede 0:525251350363 351 debug("La resistance vaut %f\n",res);
guillouhouede 0:525251350363 352 }
guillouhouede 0:525251350363 353 Radio.Rx( RX_TIMEOUT_VALUE );
guillouhouede 0:525251350363 354 State = LOWPOWER;
guillouhouede 0:525251350363 355 break;
guillouhouede 0:525251350363 356 case RX_TIMEOUT:
guillouhouede 0:525251350363 357 if( isMaster == true )
guillouhouede 0:525251350363 358 {
guillouhouede 0:525251350363 359 // Send the next PING frame
guillouhouede 0:525251350363 360 //strcpy( ( char* )Buffer, ( char* )PingMsg );
guillouhouede 0:525251350363 361 for( i = 4; i < BufferSize; i++ )
guillouhouede 0:525251350363 362 {
guillouhouede 0:525251350363 363 Buffer[i] = i - 4;
guillouhouede 0:525251350363 364 }
guillouhouede 0:525251350363 365 wait_ms( 2000 );
guillouhouede 0:525251350363 366 Radio.Send( Buffer, BufferSize );
guillouhouede 0:525251350363 367 }
guillouhouede 0:525251350363 368 else
guillouhouede 0:525251350363 369 {
guillouhouede 0:525251350363 370 Radio.Rx( RX_TIMEOUT_VALUE );
guillouhouede 0:525251350363 371 }
guillouhouede 0:525251350363 372 State = LOWPOWER;
guillouhouede 0:525251350363 373 break;
guillouhouede 0:525251350363 374 case RX_ERROR:
guillouhouede 0:525251350363 375 // We have received a Packet with a CRC error, send reply as if packet was correct
guillouhouede 0:525251350363 376 if( isMaster == true )
guillouhouede 0:525251350363 377 {
guillouhouede 0:525251350363 378 // Send the next PING frame
guillouhouede 0:525251350363 379 //strcpy( ( char* )Buffer, ( char* )PingMsg );
guillouhouede 0:525251350363 380 for( i = 4; i < BufferSize; i++ )
guillouhouede 0:525251350363 381 {
guillouhouede 0:525251350363 382 Buffer[i] = i - 4;
guillouhouede 0:525251350363 383 }
guillouhouede 0:525251350363 384 wait_ms( 2000 );
guillouhouede 0:525251350363 385 Radio.Send( Buffer, BufferSize );
guillouhouede 0:525251350363 386 }
guillouhouede 0:525251350363 387 else
guillouhouede 0:525251350363 388 {
guillouhouede 0:525251350363 389 // Send the next PONG frame
guillouhouede 0:525251350363 390 //strcpy( ( char* )Buffer, ( char* )PongMsg );
guillouhouede 0:525251350363 391 for( i = 4; i < BufferSize; i++ )
guillouhouede 0:525251350363 392 {
guillouhouede 0:525251350363 393 Buffer[i] = i - 4;
guillouhouede 0:525251350363 394 }
guillouhouede 0:525251350363 395 wait_ms( 2000 );
guillouhouede 0:525251350363 396 Radio.Send( Buffer, BufferSize );
guillouhouede 0:525251350363 397 }
guillouhouede 0:525251350363 398 State = LOWPOWER;
guillouhouede 0:525251350363 399 break;
guillouhouede 0:525251350363 400 case TX_TIMEOUT:
guillouhouede 0:525251350363 401 Radio.Rx( RX_TIMEOUT_VALUE );
guillouhouede 0:525251350363 402 State = LOWPOWER;
guillouhouede 0:525251350363 403 break;
guillouhouede 0:525251350363 404 case LOWPOWER:
guillouhouede 0:525251350363 405 break;
guillouhouede 0:525251350363 406 default:
guillouhouede 0:525251350363 407 State = LOWPOWER;
guillouhouede 0:525251350363 408 break;
guillouhouede 0:525251350363 409 }
guillouhouede 0:525251350363 410 //wait(2);
guillouhouede 0:525251350363 411 }
guillouhouede 0:525251350363 412 }
guillouhouede 0:525251350363 413
guillouhouede 0:525251350363 414 void OnTxDone( void )
guillouhouede 0:525251350363 415 {
guillouhouede 0:525251350363 416 Radio.Sleep( );
guillouhouede 0:525251350363 417 State = TX;
guillouhouede 0:525251350363 418 debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" );
guillouhouede 0:525251350363 419 }
guillouhouede 0:525251350363 420
guillouhouede 0:525251350363 421 void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
guillouhouede 0:525251350363 422 {
guillouhouede 0:525251350363 423 Radio.Sleep( );
guillouhouede 0:525251350363 424 BufferSize = size;
guillouhouede 0:525251350363 425 memcpy( Buffer, payload, BufferSize );
guillouhouede 0:525251350363 426 RssiValue = rssi;
guillouhouede 0:525251350363 427 SnrValue = snr;
guillouhouede 0:525251350363 428 State = RX;
guillouhouede 0:525251350363 429 debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" );
guillouhouede 0:525251350363 430 }
guillouhouede 0:525251350363 431
guillouhouede 0:525251350363 432 void OnTxTimeout( void )
guillouhouede 0:525251350363 433 {
guillouhouede 0:525251350363 434 Radio.Sleep( );
guillouhouede 0:525251350363 435 State = TX_TIMEOUT;
guillouhouede 0:525251350363 436 debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" );
guillouhouede 0:525251350363 437 }
guillouhouede 0:525251350363 438
guillouhouede 0:525251350363 439 void OnRxTimeout( void )
guillouhouede 0:525251350363 440 {
guillouhouede 0:525251350363 441 Radio.Sleep( );
guillouhouede 0:525251350363 442 Buffer[ BufferSize ] = 0;
guillouhouede 0:525251350363 443 State = RX_TIMEOUT;
guillouhouede 0:525251350363 444 debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" );
guillouhouede 0:525251350363 445 }
guillouhouede 0:525251350363 446
guillouhouede 0:525251350363 447 void OnRxError( void )
guillouhouede 0:525251350363 448 {
guillouhouede 0:525251350363 449 Radio.Sleep( );
guillouhouede 0:525251350363 450 State = RX_ERROR;
guillouhouede 0:525251350363 451 debug_if( DEBUG_MESSAGE, "> OnRxError\n\r" );
guillouhouede 0:525251350363 452 }
guillouhouede 0:525251350363 453