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:
Sat Apr 01 12:29:59 2017 +0000
Revision:
17:cce0eada6d82
Parent:
16:85fb5e37def7
Version finale

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