Polytech school project. RICM4 students, see http://air.imag.fr/index.php/Projets-2016-2017-Station_de_pompage_connect%C3%A9e for more information

Dependencies:   SX1272Lib mbed WakeUp

Fork of SX1272PingPong by Semtech

Committer:
chevamax
Date:
Fri Mar 03 13:42:44 2017 +0000
Revision:
16:85fb5e37def7
Parent:
14:261007103beb
Child:
17:cce0eada6d82
Ajout timer d'?coute d'ordre

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:1ed39951ab7b 1 #include "mbed.h"
GregCr 4:5ece30264cd9 2 #include "main.h"
GregCr 13:edb9b443c1dd 3 #include "sx1272-hal.h"
GregCr 8:f956dee63a56 4 #include "debug.h"
chevamax 14:261007103beb 5 #include "trame.h"
chevamax 14:261007103beb 6 #include "ordre.h"
chevamax 14:261007103beb 7 #include "pompe.h"
chevamax 16:85fb5e37def7 8 #include "WakeUp.h"
chevamax 14:261007103beb 9 //#include "niveau.h"
GregCr 0:1ed39951ab7b 10
GregCr 0:1ed39951ab7b 11 /* Set this flag to '1' to display debug messages on the console */
GregCr 13:edb9b443c1dd 12 #define DEBUG_MESSAGE 1
chevamax 14:261007103beb 13 #define ID_DEVICE 0x24
chevamax 14:261007103beb 14 #define ID_STATION 0x55
chevamax 16:85fb5e37def7 15 #define TEMPS_ECOUTE_ORDRE_SECONDE 20.0
GregCr 0:1ed39951ab7b 16
GregCr 0:1ed39951ab7b 17 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
GregCr 5:f2431c4fe3bb 18 #define USE_MODEM_LORA 1
GregCr 0:1ed39951ab7b 19 #define USE_MODEM_FSK !USE_MODEM_LORA
GregCr 0:1ed39951ab7b 20
chevamax 14:261007103beb 21 #define RF_FREQUENCY 865000000 // Hz
GregCr 0:1ed39951ab7b 22 #define TX_OUTPUT_POWER 14 // 14 dBm
GregCr 0:1ed39951ab7b 23
GregCr 0:1ed39951ab7b 24 #if USE_MODEM_LORA == 1
GregCr 0:1ed39951ab7b 25
GregCr 1:126d70d374f6 26 #define LORA_BANDWIDTH 2 // [0: 125 kHz,
GregCr 0:1ed39951ab7b 27 // 1: 250 kHz,
GregCr 0:1ed39951ab7b 28 // 2: 500 kHz,
GregCr 0:1ed39951ab7b 29 // 3: Reserved]
GregCr 0:1ed39951ab7b 30 #define LORA_SPREADING_FACTOR 7 // [SF7..SF12]
GregCr 0:1ed39951ab7b 31 #define LORA_CODINGRATE 1 // [1: 4/5,
GregCr 0:1ed39951ab7b 32 // 2: 4/6,
GregCr 0:1ed39951ab7b 33 // 3: 4/7,
GregCr 0:1ed39951ab7b 34 // 4: 4/8]
GregCr 0:1ed39951ab7b 35 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
GregCr 0:1ed39951ab7b 36 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
GregCr 0:1ed39951ab7b 37 #define LORA_FIX_LENGTH_PAYLOAD_ON false
GregCr 3:8b9e2a4df4b5 38 #define LORA_FHSS_ENABLED false
GregCr 3:8b9e2a4df4b5 39 #define LORA_NB_SYMB_HOP 4
GregCr 0:1ed39951ab7b 40 #define LORA_IQ_INVERSION_ON false
GregCr 3:8b9e2a4df4b5 41 #define LORA_CRC_ENABLED true
GregCr 3:8b9e2a4df4b5 42
GregCr 0:1ed39951ab7b 43 #elif USE_MODEM_FSK == 1
GregCr 0:1ed39951ab7b 44
GregCr 2:59e108728d71 45 #define FSK_FDEV 25000 // Hz
GregCr 2:59e108728d71 46 #define FSK_DATARATE 19200 // bps
GregCr 2:59e108728d71 47 #define FSK_BANDWIDTH 50000 // Hz
GregCr 2:59e108728d71 48 #define FSK_AFC_BANDWIDTH 83333 // Hz
GregCr 0:1ed39951ab7b 49 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
GregCr 0:1ed39951ab7b 50 #define FSK_FIX_LENGTH_PAYLOAD_ON false
GregCr 3:8b9e2a4df4b5 51 #define FSK_CRC_ENABLED true
GregCr 3:8b9e2a4df4b5 52
GregCr 0:1ed39951ab7b 53 #else
GregCr 0:1ed39951ab7b 54 #error "Please define a modem in the compiler options."
GregCr 0:1ed39951ab7b 55 #endif
GregCr 0:1ed39951ab7b 56
chevamax 14:261007103beb 57 #define RX_TIMEOUT_VALUE 30000000//3500000 // in us
GregCr 0:1ed39951ab7b 58 #define BUFFER_SIZE 32 // Define the payload size here
GregCr 0:1ed39951ab7b 59
GregCr 8:f956dee63a56 60 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
GregCr 3:8b9e2a4df4b5 61 DigitalOut led(LED2);
GregCr 3:8b9e2a4df4b5 62 #else
GregCr 3:8b9e2a4df4b5 63 DigitalOut led(LED1);
GregCr 3:8b9e2a4df4b5 64 #endif
GregCr 3:8b9e2a4df4b5 65
GregCr 0:1ed39951ab7b 66 /*
GregCr 0:1ed39951ab7b 67 * Global variables declarations
GregCr 0:1ed39951ab7b 68 */
mluis 10:7af820d1e1df 69 typedef enum
mluis 10:7af820d1e1df 70 {
mluis 10:7af820d1e1df 71 LOWPOWER = 0,
mluis 10:7af820d1e1df 72 IDLE,
mluis 10:7af820d1e1df 73
mluis 10:7af820d1e1df 74 RX,
mluis 10:7af820d1e1df 75 RX_TIMEOUT,
mluis 10:7af820d1e1df 76 RX_ERROR,
mluis 10:7af820d1e1df 77
mluis 10:7af820d1e1df 78 TX,
mluis 10:7af820d1e1df 79 TX_TIMEOUT,
mluis 10:7af820d1e1df 80
mluis 10:7af820d1e1df 81 CAD,
mluis 10:7af820d1e1df 82 CAD_DONE
mluis 10:7af820d1e1df 83 }AppStates_t;
GregCr 0:1ed39951ab7b 84
mluis 10:7af820d1e1df 85 volatile AppStates_t State = LOWPOWER;
mluis 10:7af820d1e1df 86
mluis 10:7af820d1e1df 87 /*!
mluis 10:7af820d1e1df 88 * Radio events function pointer
mluis 10:7af820d1e1df 89 */
mluis 10:7af820d1e1df 90 static RadioEvents_t RadioEvents;
mluis 10:7af820d1e1df 91
mluis 10:7af820d1e1df 92 /*
mluis 10:7af820d1e1df 93 * Global variables declarations
mluis 10:7af820d1e1df 94 */
GregCr 13:edb9b443c1dd 95 SX1272MB2xAS Radio( NULL );
GregCr 0:1ed39951ab7b 96
chevamax 14:261007103beb 97 //const uint8_t PingMsg[] = "PING";
chevamax 14:261007103beb 98 //const uint8_t PongMsg[] = "PONG";
GregCr 0:1ed39951ab7b 99
GregCr 0:1ed39951ab7b 100 uint16_t BufferSize = BUFFER_SIZE;
GregCr 0:1ed39951ab7b 101 uint8_t Buffer[BUFFER_SIZE];
GregCr 0:1ed39951ab7b 102
GregCr 5:f2431c4fe3bb 103 int16_t RssiValue = 0.0;
GregCr 5:f2431c4fe3bb 104 int8_t SnrValue = 0.0;
GregCr 0:1ed39951ab7b 105
chevamax 16:85fb5e37def7 106 /*Ticker flipper;
chevamax 16:85fb5e37def7 107
chevamax 16:85fb5e37def7 108
chevamax 16:85fb5e37def7 109 void doNothing(){
chevamax 16:85fb5e37def7 110 NULL;
chevamax 16:85fb5e37def7 111 }*/
chevamax 16:85fb5e37def7 112
chevamax 16:85fb5e37def7 113 void dormir(){
chevamax 16:85fb5e37def7 114 debug("dodo\r\n");
chevamax 16:85fb5e37def7 115 Radio.Sleep();
chevamax 16:85fb5e37def7 116 //flipper.attach(&doNothing, 20.0);
chevamax 16:85fb5e37def7 117 // critical section
chevamax 16:85fb5e37def7 118 WakeUp::set_ms(10000);
chevamax 16:85fb5e37def7 119 sleep();
chevamax 16:85fb5e37def7 120
chevamax 16:85fb5e37def7 121 wait(5);
chevamax 16:85fb5e37def7 122 }
chevamax 16:85fb5e37def7 123 /*
chevamax 16:85fb5e37def7 124 void flip(){
chevamax 16:85fb5e37def7 125 debug("flip\r\n");
chevamax 16:85fb5e37def7 126 dormir();
chevamax 16:85fb5e37def7 127 }*/
chevamax 16:85fb5e37def7 128
chevamax 16:85fb5e37def7 129 Timer ecouterOrdre;
chevamax 16:85fb5e37def7 130
GregCr 0:1ed39951ab7b 131 int main()
GregCr 0:1ed39951ab7b 132 {
GregCr 0:1ed39951ab7b 133 uint8_t i;
GregCr 0:1ed39951ab7b 134 bool isMaster = true;
GregCr 0:1ed39951ab7b 135
chevamax 14:261007103beb 136 debug( "\n\n\r SX1272 Cuve Demo Application \n\n\r" );
mluis 10:7af820d1e1df 137
mluis 10:7af820d1e1df 138 // Initialize Radio driver
mluis 10:7af820d1e1df 139 RadioEvents.TxDone = OnTxDone;
mluis 10:7af820d1e1df 140 RadioEvents.RxDone = OnRxDone;
mluis 10:7af820d1e1df 141 RadioEvents.RxError = OnRxError;
mluis 10:7af820d1e1df 142 RadioEvents.TxTimeout = OnTxTimeout;
mluis 10:7af820d1e1df 143 RadioEvents.RxTimeout = OnRxTimeout;
mluis 10:7af820d1e1df 144 Radio.Init( &RadioEvents );
GregCr 0:1ed39951ab7b 145
GregCr 7:c1bbd6c56979 146 // verify the connection with the board
GregCr 7:c1bbd6c56979 147 while( Radio.Read( REG_VERSION ) == 0x00 )
GregCr 2:59e108728d71 148 {
GregCr 7:c1bbd6c56979 149 debug( "Radio could not be detected!\n\r", NULL );
GregCr 7:c1bbd6c56979 150 wait( 1 );
GregCr 2:59e108728d71 151 }
GregCr 7:c1bbd6c56979 152
GregCr 13:edb9b443c1dd 153 debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1272MB2XAS ) ) , "\n\r > Board Type: SX1272MB2xAS < \n\r" );
GregCr 13:edb9b443c1dd 154
GregCr 0:1ed39951ab7b 155 Radio.SetChannel( RF_FREQUENCY );
GregCr 0:1ed39951ab7b 156
GregCr 0:1ed39951ab7b 157 #if USE_MODEM_LORA == 1
GregCr 3:8b9e2a4df4b5 158
GregCr 7:c1bbd6c56979 159 debug_if( LORA_FHSS_ENABLED, "\n\n\r > LORA FHSS Mode < \n\n\r");
GregCr 7:c1bbd6c56979 160 debug_if( !LORA_FHSS_ENABLED, "\n\n\r > LORA Mode < \n\n\r");
GregCr 7:c1bbd6c56979 161
GregCr 0:1ed39951ab7b 162 Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
GregCr 0:1ed39951ab7b 163 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
GregCr 0:1ed39951ab7b 164 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
GregCr 3:8b9e2a4df4b5 165 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
GregCr 7:c1bbd6c56979 166 LORA_IQ_INVERSION_ON, 2000000 );
GregCr 0:1ed39951ab7b 167
GregCr 0:1ed39951ab7b 168 Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
GregCr 0:1ed39951ab7b 169 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
mluis 9:e764990e45df 170 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
GregCr 3:8b9e2a4df4b5 171 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
GregCr 3:8b9e2a4df4b5 172 LORA_IQ_INVERSION_ON, true );
GregCr 0:1ed39951ab7b 173
GregCr 0:1ed39951ab7b 174 #elif USE_MODEM_FSK == 1
GregCr 0:1ed39951ab7b 175
GregCr 7:c1bbd6c56979 176 debug("\n\n\r > FSK Mode < \n\n\r");
GregCr 0:1ed39951ab7b 177 Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
GregCr 0:1ed39951ab7b 178 FSK_DATARATE, 0,
GregCr 0:1ed39951ab7b 179 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
GregCr 7:c1bbd6c56979 180 FSK_CRC_ENABLED, 0, 0, 0, 2000000 );
GregCr 0:1ed39951ab7b 181
GregCr 0:1ed39951ab7b 182 Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
GregCr 0:1ed39951ab7b 183 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
mluis 9:e764990e45df 184 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
GregCr 3:8b9e2a4df4b5 185 0, 0, false, true );
GregCr 0:1ed39951ab7b 186
GregCr 0:1ed39951ab7b 187 #else
GregCr 0:1ed39951ab7b 188
GregCr 0:1ed39951ab7b 189 #error "Please define a modem in the compiler options."
GregCr 0:1ed39951ab7b 190
GregCr 0:1ed39951ab7b 191 #endif
GregCr 1:126d70d374f6 192
chevamax 14:261007103beb 193 debug_if( DEBUG_MESSAGE, "Starting Cuve loop\r\n" );
GregCr 0:1ed39951ab7b 194
GregCr 3:8b9e2a4df4b5 195 led = 0;
chevamax 14:261007103beb 196
chevamax 14:261007103beb 197 DigitalOut pompe(PC_14);
chevamax 14:261007103beb 198
chevamax 14:261007103beb 199 //Pompe pompe(PC_14);
chevamax 14:261007103beb 200
chevamax 14:261007103beb 201 DigitalIn p1(PC_15);//(PC_15); //Poid fort
chevamax 14:261007103beb 202 DigitalIn p2(PH_0);
chevamax 14:261007103beb 203 DigitalIn p3(PH_1); //Poid faible
chevamax 14:261007103beb 204
chevamax 14:261007103beb 205 //Niveau cuve();
chevamax 14:261007103beb 206 //char niveau = (char) ((p1.read()<<2) | (p2.read()<<1) | p3.read());
chevamax 14:261007103beb 207 TrameData dataPaquet(ID_DEVICE, 63, (char) pompe.read(), 0x1F, 0xF);
chevamax 14:261007103beb 208
chevamax 14:261007103beb 209 bool enAttente = false;
chevamax 14:261007103beb 210
chevamax 16:85fb5e37def7 211 //The low-power oscillator can be quite inaccurate on some targets
chevamax 16:85fb5e37def7 212 //this function calibrates it against the main clock
chevamax 16:85fb5e37def7 213 WakeUp::calibrate();
chevamax 16:85fb5e37def7 214
chevamax 14:261007103beb 215 //TODO
chevamax 14:261007103beb 216 // Distinguer deux temps. Il faut pouvoir s'endormir une heure, mais aussi écouter pendant 5 minutes
GregCr 0:1ed39951ab7b 217 Radio.Rx( RX_TIMEOUT_VALUE );
GregCr 0:1ed39951ab7b 218
GregCr 0:1ed39951ab7b 219 while( 1 )
GregCr 0:1ed39951ab7b 220 {
GregCr 0:1ed39951ab7b 221 switch( State )
GregCr 0:1ed39951ab7b 222 {
GregCr 0:1ed39951ab7b 223 case RX:
chevamax 14:261007103beb 224 //If the board is the master, it have the initiative
chevamax 14:261007103beb 225 if( enAttente == true )
GregCr 0:1ed39951ab7b 226 {
chevamax 14:261007103beb 227 debug("1\r\n");
GregCr 0:1ed39951ab7b 228 if( BufferSize > 0 )
GregCr 0:1ed39951ab7b 229 {
chevamax 14:261007103beb 230 debug("2\r\n");
chevamax 14:261007103beb 231 debug((const char* )Buffer);
chevamax 14:261007103beb 232 debug(" ");
chevamax 14:261007103beb 233 debug((const char* ) ID_DEVICE);
chevamax 14:261007103beb 234 Ordre trameRecue((char*)Buffer);
chevamax 14:261007103beb 235 //Si message recu alors trouver ordre correspondant et faire traitement
chevamax 14:261007103beb 236 if( trameRecue.getIdRecepteur() == (char) ID_DEVICE )
GregCr 0:1ed39951ab7b 237 {
chevamax 16:85fb5e37def7 238 debug("ID DEVICE OK\r\n");
chevamax 14:261007103beb 239 if( trameRecue.getIdEmetteur() == (char) ID_STATION ){
chevamax 16:85fb5e37def7 240 debug("ID STATION OK\r\n");
chevamax 14:261007103beb 241 //Ordre pour nous
chevamax 14:261007103beb 242 led = !led;
chevamax 14:261007103beb 243 debug( "...Ordre recu \r\n" );
chevamax 14:261007103beb 244 Ordre o((char *) Buffer);
chevamax 14:261007103beb 245
chevamax 14:261007103beb 246 //TODO executer ordre
chevamax 14:261007103beb 247 debug("Executer Ordre\r\n");
chevamax 14:261007103beb 248
chevamax 16:85fb5e37def7 249 //On attend 10 secondes
chevamax 14:261007103beb 250 debug("Dormir\r\n");
chevamax 16:85fb5e37def7 251 dormir();
chevamax 16:85fb5e37def7 252
chevamax 16:85fb5e37def7 253
chevamax 14:261007103beb 254 enAttente = false;
chevamax 14:261007103beb 255 Radio.Rx( RX_TIMEOUT_VALUE );
chevamax 14:261007103beb 256 }else{
chevamax 14:261007103beb 257 debug("autre station\r\n");
chevamax 16:85fb5e37def7 258 Radio.Rx( RX_TIMEOUT_VALUE );
GregCr 0:1ed39951ab7b 259 }
GregCr 2:59e108728d71 260 }
GregCr 2:59e108728d71 261 else // valid reception but neither a PING or a PONG message
GregCr 2:59e108728d71 262 { // Set device as master ans start again
chevamax 14:261007103beb 263 debug("Reception message pour quelqu'un d'autre\r\n");
chevamax 14:261007103beb 264 Radio.Rx( RX_TIMEOUT_VALUE ); //La on reattend pour 5 minutes à chaque foi que qq'un envoit un message c'est pas top....
GregCr 2:59e108728d71 265 }
GregCr 0:1ed39951ab7b 266 }
GregCr 0:1ed39951ab7b 267 }
chevamax 16:85fb5e37def7 268 State = LOWPOWER;
chevamax 16:85fb5e37def7 269 break;
chevamax 16:85fb5e37def7 270 case TX:
chevamax 16:85fb5e37def7 271 led = !led;
chevamax 16:85fb5e37def7 272 debug( "Envoi des donnees...\r\n" );
chevamax 16:85fb5e37def7 273 debug("En attente ORDRE\r\n");
chevamax 16:85fb5e37def7 274 //flipper.attach(&dormir, 40.0); // the address of the function to be attached (flip) and the interval (2 seconds)
chevamax 16:85fb5e37def7 275 Radio.Rx( RX_TIMEOUT_VALUE );
chevamax 16:85fb5e37def7 276 State = LOWPOWER;
chevamax 16:85fb5e37def7 277 break;
chevamax 16:85fb5e37def7 278 case RX_TIMEOUT:
chevamax 16:85fb5e37def7 279 //TODO executer ordre
chevamax 16:85fb5e37def7 280 /*debug("Pas Ordre\r\n");
chevamax 16:85fb5e37def7 281
chevamax 16:85fb5e37def7 282 //On attend 10 secondes
chevamax 16:85fb5e37def7 283 debug("Dormir\r\n");
chevamax 16:85fb5e37def7 284 dormir();
chevamax 16:85fb5e37def7 285
chevamax 16:85fb5e37def7 286 wait(5);
chevamax 16:85fb5e37def7 287 enAttente = false; */
chevamax 16:85fb5e37def7 288 Radio.Rx( RX_TIMEOUT_VALUE );
chevamax 16:85fb5e37def7 289 State = LOWPOWER;
chevamax 16:85fb5e37def7 290 break;
chevamax 16:85fb5e37def7 291 case RX_ERROR:
chevamax 16:85fb5e37def7 292 //Erreur CRC, faire une demande de renvoi
chevamax 16:85fb5e37def7 293 //TODO
chevamax 16:85fb5e37def7 294 debug("Erreur CRC \r\n");
chevamax 16:85fb5e37def7 295 Radio.Rx( RX_TIMEOUT_VALUE );
chevamax 16:85fb5e37def7 296
chevamax 16:85fb5e37def7 297 State = LOWPOWER;
chevamax 16:85fb5e37def7 298 break;
chevamax 16:85fb5e37def7 299 case TX_TIMEOUT:
chevamax 16:85fb5e37def7 300 Radio.Rx( RX_TIMEOUT_VALUE );
chevamax 16:85fb5e37def7 301 State = LOWPOWER;
chevamax 16:85fb5e37def7 302 break;
chevamax 16:85fb5e37def7 303 case LOWPOWER:
chevamax 16:85fb5e37def7 304 if(!enAttente){
chevamax 16:85fb5e37def7 305 //Corps de l'application
chevamax 16:85fb5e37def7 306 //On envoie les données
chevamax 16:85fb5e37def7 307 debug("envoie3\r\n");
chevamax 14:261007103beb 308 dataPaquet.mettreAJourEtatPompe((char) 0);
chevamax 14:261007103beb 309 dataPaquet.mettreAJourNiveauCuve((char) 0x1F);
chevamax 14:261007103beb 310 dataPaquet.mettreAJourNiveauBatterie((char) 0xF); //TODO
chevamax 14:261007103beb 311
chevamax 14:261007103beb 312 char * trame = dataPaquet.creerTrame();
chevamax 14:261007103beb 313 debug( trame);
chevamax 14:261007103beb 314 strcpy( ( char* ) Buffer, trame);
chevamax 14:261007103beb 315 for (i = TAILLE_TRAME_DATA; i < BufferSize; i++ )
GregCr 0:1ed39951ab7b 316 {
chevamax 14:261007103beb 317 Buffer[i] = i - 4;
GregCr 0:1ed39951ab7b 318 }
chevamax 14:261007103beb 319 wait_ms( 10 );
chevamax 14:261007103beb 320 // Send the data
chevamax 14:261007103beb 321 Radio.Send( Buffer, BufferSize );
chevamax 14:261007103beb 322 enAttente = true;
chevamax 16:85fb5e37def7 323 ecouterOrdre.start();
chevamax 16:85fb5e37def7 324 }else{
chevamax 16:85fb5e37def7 325 if(ecouterOrdre.read() > TEMPS_ECOUTE_ORDRE_SECONDE){
chevamax 16:85fb5e37def7 326 debug("delaisAttente depasse. Dormir.\r\n");
chevamax 16:85fb5e37def7 327 ecouterOrdre.stop();
chevamax 16:85fb5e37def7 328 ecouterOrdre.reset();
chevamax 16:85fb5e37def7 329 dormir();
chevamax 16:85fb5e37def7 330 debug("fin dodo\r\n");
chevamax 16:85fb5e37def7 331 enAttente = false;
chevamax 16:85fb5e37def7 332 }
GregCr 0:1ed39951ab7b 333 }
GregCr 0:1ed39951ab7b 334 break;
GregCr 0:1ed39951ab7b 335 default:
GregCr 0:1ed39951ab7b 336 State = LOWPOWER;
GregCr 0:1ed39951ab7b 337 break;
GregCr 0:1ed39951ab7b 338 }
GregCr 0:1ed39951ab7b 339 }
GregCr 0:1ed39951ab7b 340 }
GregCr 0:1ed39951ab7b 341
GregCr 0:1ed39951ab7b 342 void OnTxDone( void )
GregCr 0:1ed39951ab7b 343 {
GregCr 5:f2431c4fe3bb 344 Radio.Sleep( );
GregCr 0:1ed39951ab7b 345 State = TX;
GregCr 7:c1bbd6c56979 346 debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" );
GregCr 0:1ed39951ab7b 347 }
GregCr 0:1ed39951ab7b 348
GregCr 4:5ece30264cd9 349 void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
GregCr 0:1ed39951ab7b 350 {
GregCr 0:1ed39951ab7b 351 Radio.Sleep( );
GregCr 0:1ed39951ab7b 352 BufferSize = size;
GregCr 0:1ed39951ab7b 353 memcpy( Buffer, payload, BufferSize );
GregCr 0:1ed39951ab7b 354 RssiValue = rssi;
GregCr 0:1ed39951ab7b 355 SnrValue = snr;
GregCr 0:1ed39951ab7b 356 State = RX;
GregCr 7:c1bbd6c56979 357 debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" );
GregCr 0:1ed39951ab7b 358 }
GregCr 0:1ed39951ab7b 359
GregCr 0:1ed39951ab7b 360 void OnTxTimeout( void )
GregCr 0:1ed39951ab7b 361 {
GregCr 0:1ed39951ab7b 362 Radio.Sleep( );
GregCr 0:1ed39951ab7b 363 State = TX_TIMEOUT;
GregCr 7:c1bbd6c56979 364 debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" );
GregCr 0:1ed39951ab7b 365 }
GregCr 0:1ed39951ab7b 366
GregCr 0:1ed39951ab7b 367 void OnRxTimeout( void )
GregCr 0:1ed39951ab7b 368 {
GregCr 0:1ed39951ab7b 369 Radio.Sleep( );
GregCr 1:126d70d374f6 370 Buffer[ BufferSize ] = 0;
GregCr 0:1ed39951ab7b 371 State = RX_TIMEOUT;
GregCr 7:c1bbd6c56979 372 debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" );
GregCr 0:1ed39951ab7b 373 }
GregCr 0:1ed39951ab7b 374
GregCr 0:1ed39951ab7b 375 void OnRxError( void )
GregCr 0:1ed39951ab7b 376 {
GregCr 0:1ed39951ab7b 377 Radio.Sleep( );
GregCr 0:1ed39951ab7b 378 State = RX_ERROR;
GregCr 7:c1bbd6c56979 379 debug_if( DEBUG_MESSAGE, "> OnRxError\n\r" );
GregCr 0:1ed39951ab7b 380 }
GregCr 3:8b9e2a4df4b5 381