H261 decoder
Dependencies: SDL_lib2 SX1276Lib mbed
Diff: lora.h
- Revision:
- 1:1ed97958d0f3
- Parent:
- 0:5bd441b8ab2d
--- a/lora.h Thu Sep 22 00:04:30 2016 +0000 +++ b/lora.h Wed Jan 11 20:18:38 2017 +0000 @@ -1,30 +1,25 @@ -//Author: Miguel Ruiz García -//Company: University of Cantabria. 2016 -//mail: mrg47@alumnos.unican.es -//code for TX & RX #include "mbed.h" #include "lora2.h" #include "sx1276-hal.h" #include "debug.h" -//#include "functions.h" + /* Set this flag to '1' to display debug messages on the console */ -#define DEBUG_MESSAGE 1 - - +#define DEBUG_MESSAGE 0 + /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */ #define USE_MODEM_LORA 1 #define USE_MODEM_FSK !USE_MODEM_LORA - -#define RF_FREQUENCY 869000000 // Hz -#define TX_OUTPUT_POWER 14 // 14 dBm - + +#define RF_FREQUENCY 868000000 // Hz +#define TX_OUTPUT_POWER 20 // 14 dBm + #if USE_MODEM_LORA == 1 - - #define LORA_BANDWIDTH 1 // [0: 125 kHz, + + #define LORA_BANDWIDTH 2 // [0: 125 kHz, // 1: 250 kHz, // 2: 500 kHz, // 3: Reserved] - #define LORA_SPREADING_FACTOR 10 // [SF7..SF12] + #define LORA_SPREADING_FACTOR 7 // [SF7..SF12] #define LORA_CODINGRATE 1 // [1: 4/5, // 2: 4/6, // 3: 4/7, @@ -32,13 +27,13 @@ #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx #define LORA_SYMBOL_TIMEOUT 5 // Symbols #define LORA_FIX_LENGTH_PAYLOAD_ON false - #define LORA_FHSS_ENABLED true + #define LORA_FHSS_ENABLED false #define LORA_NB_SYMB_HOP 4 #define LORA_IQ_INVERSION_ON false #define LORA_CRC_ENABLED true #elif USE_MODEM_FSK == 1 - + #define FSK_FDEV 25000 // Hz #define FSK_DATARATE 19200 // bps #define FSK_BANDWIDTH 50000 // Hz @@ -50,19 +45,18 @@ #else #error "Please define a modem in the compiler options." #endif - -#define RX_TIMEOUT_VALUE 3500000 // in us -#define BUFFER_SIZE 255 // Define the payload size here [min:1 max:255] - + +#define RX_TIMEOUT_VALUE 9500000 // in us +#define BUFFER_SIZE 32 // Define the payload size here + #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) ) DigitalOut led(LED2); #else DigitalOut led(LED1); #endif - - + /* - * Global variables declarations + * Global variables declarations */ typedef enum { @@ -79,82 +73,80 @@ CAD, CAD_DONE }AppStates_t; - + volatile AppStates_t State = LOWPOWER; - + /*! * Radio events function pointer */ static RadioEvents_t RadioEvents; - + /* * Global variables declarations */ SX1276MB1xAS Radio( NULL ); - + const uint8_t PingMsg[] = "PING"; const uint8_t PongMsg[] = "PONG"; + + const uint8_t AckMsg[] = "ACK"; const uint8_t EOPMsg[] = "EOP"; const uint8_t RfSMsg[] = "RfS"; +const uint8_t InitMsg[] = "INIT"; +const uint8_t PaqMsg[] = "\t\n"; + int py=0,pu=0,pv=0,py2=0,pu2=0,pv2=0; int py_ant=0,pu_ant=0,pv_ant=0; int flag_y=0,flag_u=0,flag_v=0; +short int length_y=0,length_u=0,length_v=0; uint16_t BufferSize = BUFFER_SIZE; uint8_t Buffer[BUFFER_SIZE]; //uint8_t Buffer2[4]; - +int init=0; int16_t RssiValue = 0.0; int8_t SnrValue = 0.0; - +short int init_packet=0; +int start=0; bool first_y=true,first_u=true,first_v=true; -void lora(short int *temp1,short int index1,short int *temp2,short int index2,short int *temp3,short int index3) + +void lora(short int *temp1,short int index1,short int *temp2,short int index2,short int *temp3,short int index3,short int acumulador[3]) { - //index1=300;index2=300;index3=300; uint8_t i; - bool isMaster = false;//MASTER (TX) OR SLAVE(RX) ? + bool isMaster = false; - //pc.baud(BPS); - //pc.format (BITS,SerialBase::None, STOP_BITS) ; - - - - //debug( "\n\n\r SX1276 Ping Pong Demo Application \n\n\r" ); - //pc.printf("\n\n\r SX1276 Image transfer Application \n\n\r"); - + //debug( "\n\n\r SX1276 JPEG Compressor Application \n\n\r" ); + // Initialize Radio driver RadioEvents.TxDone = OnTxDone; RadioEvents.RxDone = OnRxDone; RadioEvents.RxError = OnRxError; RadioEvents.TxTimeout = OnTxTimeout; RadioEvents.RxTimeout = OnRxTimeout; - RadioEvents.FhssChangeChannel = OnFhssChangeChannel; Radio.Init( &RadioEvents ); // verify the connection with the board - goto start; while( Radio.Read( REG_VERSION ) == 0x00 ) { - //debug( "Radio could not be detected!\n\r", NULL ); - //pc.printf( "Radio could not be detected!\n\r", NULL ); + debug( "Radio could not be detected!\n\r", NULL ); wait( 1 ); } - start: + //debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ) , "\n\r > Board Type: SX1276MB1LAS < \n\r" ); //debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ) , "\n\r > Board Type: SX1276MB1MAS < \n\r" ); - Radio.SetChannel( HoppingFrequencies[0] ); - + Radio.SetChannel( RF_FREQUENCY ); + #if USE_MODEM_LORA == 1 //debug_if( LORA_FHSS_ENABLED, "\n\n\r > LORA FHSS Mode < \n\n\r"); //debug_if( !LORA_FHSS_ENABLED, "\n\n\r > LORA Mode < \n\n\r"); - + Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, - LORA_IQ_INVERSION_ON, 4000000 ); + LORA_IQ_INVERSION_ON, 2000000 ); Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, @@ -163,12 +155,12 @@ LORA_IQ_INVERSION_ON, true ); #elif USE_MODEM_FSK == 1 - - debug("\n\n\r > FSK Mode < \n\n\r"); + + //debug("\n\n\r > FSK Mode < \n\n\r"); Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0, FSK_DATARATE, 0, FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON, - FSK_CRC_ENABLED, 0, 0, 0, 3000000 ); + FSK_CRC_ENABLED, 0, 0, 0, 2000000 ); Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE, 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, @@ -176,18 +168,19 @@ 0, 0, false, true ); #else - + #error "Please define a modem in the compiler options." - + #endif - + //debug_if( DEBUG_MESSAGE, "Starting image transmission loop\r\n" ); - //pc.printf("Starting image transmission loop\r\n"); led = 0; - + flag_y=0,flag_u=0,flag_v=0; + int finish=0; + first_y=true,first_u=true,first_v=true; Radio.Rx( RX_TIMEOUT_VALUE ); - State=RX;//Estado inicial para el receptor + while( 1 ) { switch( State ) @@ -195,34 +188,118 @@ case RX: if( isMaster == true ) { - //debug( "waiting for response....\r\n" ); if( BufferSize > 0 ) { - - if( strncmp( ( const char* )Buffer, ( const char* )AckMsg, 3 ) != 0 ) + if( strncmp( ( const char* )Buffer, ( const char* )AckMsg, 3 ) == 0 ) { led = !led; - //debug( "Packet acknoledged....\r\n" ); - // pc.printf( "Packet acknoledged....\r\n" ); - // Send the next frame - State = TX; - } + //debug( "...Ack RX\r\n" ); + + Buffer[0]='\t'; + Buffer[1]='\n'; + //index1=20;index2=20;index3=20; + int pointer=0; + for(pointer=2;pointer<BufferSize;pointer+=2){ - else if( strncmp( ( const char* )Buffer, ( const char* )RfSMsg, 3 ) == 0 ){ + if(flag_y==0) {//se comprueba si se ha cargado en el buffer de transmisión cada una de las componentes + if(first_y == true) {//en primer lugar se manda la longitud de la componente y u v + Buffer[pointer]=index1&0xff;//Se carga la parte baja del short int y en el siguiente byte se carga la parte alta. + Buffer[pointer+1]=(index1>>8)&0xff; + // debug("%c %c \r\n",Buffer[pointer],Buffer[pointer+1]); + first_y = false; + + //debug( "transmitting y length...\r\n" ); + } + else{ + Buffer[pointer]=*(temp1+py) & 0x00ff; + Buffer[pointer+1]=(*(temp1+py)>>8) & 0x00ff; + py++; + //debug( "transmitting y data..\r\n" ); + if(py >= index1) { + + flag_y=1; + break; + //Buffer[pointer+2]='\t'; + //pointer+=2; + } + } + } + else if(flag_u==0){ + if(first_u == true) { + Buffer[pointer]=index2&0xff; + Buffer[pointer+1]=(index2>>8)&0xff; + first_u = false; + //debug( "transmitting u length...\r\n" ); + } + else{ + + Buffer[pointer]=*(temp2+pu) & 0x00ff; + Buffer[pointer+1]=(*(temp2+pu)>>8) & 0x00ff; + pu++; + //debug( "transmitting u data...\r\n" ); + if(pu>= index2) { + flag_u=1; + //Buffer[pointer+2]='\t'; + //pointer+=2; + break; + } + } + } - led = !led; - debug( "Retransmit packet....\r\n" ); - // pc.printf( "Retransmit packet....\r\n" ); - // Send the next frame - State = TX; - py=py_ant; pu=pu_ant; pv=pv_ant;//Si hay que reenviar el paquete se reestablecen los valores de punteros. - } + else{ + if(first_v == true) { + Buffer[pointer]=index3&0xff; + Buffer[pointer+1]=(index3>>8)&0xff; + first_v = false; + //debug( "transmitting v length...\r\n" ); + } + else{ + Buffer[pointer]=*(temp3+pv) & 0x00ff; + Buffer[pointer+1]=(*(temp3+pv)>>8) & 0x00ff; + pv++; + //debug( "transmitting v data ...\r\n" ); + if(pv >= index3) { + flag_v=1; + //Buffer[pointer+2]='\n';//salto de línea es EOT + //pointer+=2; + break; + } + } + } + + + } - else // valid reception but neither a message + //debug( "end of cycle..\r\n" ); + int finish=0; + if(flag_y==1 && flag_u==1 && flag_v==1){ + //Buffer[pointer]='\n';//salto de línea es EOT + flag_y=0;flag_u=0;flag_v=0; + //debug( "finished transmission ...\r\n" ); + first_y=true;first_u=true;first_v=true; + finish=1; + + + } + else{ + for( i = pointer; i < BufferSize; i++ ) + { + Buffer[i] = i - 4; + } + + } + + + + wait_ms( 10 ); + //debug( "Sending packet...\r\n" ); + Radio.Send( Buffer, BufferSize ); + if(finish==1) goto end; + } + + else // valid reception but neither a PING or a PONG message { // Set device as master ans start again - debug( "no message received...\r\n" ); - // pc.printf( "hola...\r\n" ); - isMaster = true;//this intruction is DANGEROUS!!!!!! + isMaster = true; Radio.Rx( RX_TIMEOUT_VALUE ); } } @@ -231,85 +308,139 @@ { if( BufferSize > 0 ) { - + if( strncmp( ( const char* )Buffer, ( const char* )InitMsg, 4 ) == 0 ) + { led = !led; - debug( "Reading... \r\n" ); - // pc.printf( "Reading... \r\n" ); + // debug( "...Init received gfd\r\n" ); + short int num=0; + num=0xff & Buffer[5]; + num=num<<8; + num=num | (Buffer[4] & 0xff); + // debug( "py = %i\r\n",num ); + + py=num; + + num=0; + num=0xff & Buffer[7]; + num=num<<8; + num=num | (Buffer[6] & 0xff); + // debug( "pu = %i\r\n",num ); + pu=num; + num=0; + num=0xff & Buffer[9]; + num=num<<8; + num=num | (Buffer[8] & 0xff); + // debug( "pv = %i\r\n",num ); + + pv=num; + //py=py_ant;pu=pu_ant;pv=pv_ant; + + if(pv<=0) { + flag_v=0; + first_v=true; + pv=0; + } + if(pu<=0) { + flag_u=0; + first_v=true; + pu=0; + } + if(py<=0) { + flag_y=0; + first_v=true; + py=0; + } + - int pointer=0; - int length_y=0,length_v=0,length_u=0; - for(pointer=0;pointer<254;pointer+=4){ + // Send the reply to the PING string + strcpy( ( char* )Buffer, ( char* )AckMsg ); + // We fill the buffer with numbers for the payload + for( i = 3; i < BufferSize; i++ ) + { + Buffer[i] = i - 4; + } + wait_ms( 10 ); + Radio.Send( Buffer, BufferSize ); + } + else if( strncmp( ( const char* )Buffer, ( const char* )PaqMsg, 2 ) == 0 ) + { // A master already exists then become a slave + + // debug( "...Receiving data TX \r\n" ); + led = !led; + int pointer=0; + py_ant=py; + pu_ant=pu; + pv_ant=pv; + + + for(pointer=2;pointer<BufferSize;pointer+=2){ if(flag_y==0) {//se comprueba si se ha cargado en el buffer de transmisión cada una de las componentes if(first_y == true) {//EL PRIMER DATO ES LA LONGITUD length_y=0xff & Buffer[pointer+1]; length_y=length_y<<8; - length_y=length_y | Buffer[pointer]; + length_y=length_y | (Buffer[pointer] & 0xff); first_y = false; - temp1=(short int *)malloc(sizeof(short int)*length_y); - pointer-=2;//this is to avoid lose the first byte of the component - //in the cycle 'pointer+=4' but in the first package of the component there´s no a pair [length,value] - + + acumulador[0]=length_y; + // debug("length_y = %i \r\n",length_y); } else{ - if(Buffer[pointer]!='\t'){//VERIFY the character is not EOC (end of component y u v) + //if(Buffer[pointer]!='\t'){//VERIFY the character is not EOC (end of component y u v) short int num=0; num=0xff & Buffer[pointer+1]; num=num<<8; - num=num | Buffer[pointer]; - *(temp1+py2)=num; - py2++; - - if (py2 > length_y) {flag_y=1;} + num=num | (Buffer[pointer] & 0xff); + *(temp1+py)=num; + py++; - num=0xff & Buffer[pointer+3]; - num=num<<8; - num=num | Buffer[pointer+2]; - *(temp1+py2)=num; - py2++; + // debug("valor py = %i \r\n",py); + // debug("num = %i \r\n",num); + if (py >= length_y) { + flag_y=1; + //acumulador[0]=py; + // debug("valor py = %i \r\n",py); + break; + } + + - if (py2 > length_y) {flag_y=1;}//if all bytes of the component are read, indicator is raised + //if all bytes of the component are read -> flag raised //originally designed with goto. - } - else { - flag_y=1; - } - } + + } } - + else if(flag_u==0){ if(first_u == true) { length_u=0xff & Buffer[pointer+1]; length_u=length_u<<8; - length_u=length_u | Buffer[pointer]; + length_u=length_u | (Buffer[pointer] & 0xff); + acumulador[1]=length_u; first_u = false; - temp2=(short int *)malloc(sizeof(short int)*length_u); - pointer-=2; + + // debug("length_u = %i \r\n",length_u); } else{ - if(Buffer[pointer]!='\t'){//VERIFY the character is not "end of component" + short int num=0; num=0xff & Buffer[pointer+1]; num=num<<8; - num=num | Buffer[pointer]; - *(temp2+pu2)=num; - pu2++; - - if (pu2 > length_u) {flag_u=1;} + num=num | (Buffer[pointer] & 0xff); + *(temp2+pu)=num; + pu++; + // debug("valor pu = %i \r\n",pu); + // debug("num = %i \r\n",num); + if (pu >= length_u) { + flag_u=1; + //acumulador[1]=pu; + break; + } - num=0xff & Buffer[pointer+3]; - num=num<<8; - num=num | Buffer[pointer+2]; - *(temp2+pu2)=num; - pu2++; - - if (pu2 > length_u) {flag_u=1;} - } - else { - flag_u=1; - } + + } } @@ -317,245 +448,190 @@ if(first_v == true) { length_v=0xff & Buffer[pointer+1]; length_v=length_v<<8; - length_v=length_v | Buffer[pointer]; + length_v=length_v | (Buffer[pointer] & 0xff); + acumulador[2]=length_v; first_v = false; - temp3=(short int *)malloc(sizeof(short int)*length_v); - pointer-=2; + + // debug("length_v = %i \r\n",length_v); + + } else{ - if(Buffer[pointer]!='\n'){//VERIFY the character is not EOT + //if(Buffer[pointer]!='\n'){//VERIFY the character is not EOT short int num=0; num=0xff & Buffer[pointer+1]; num=num<<8; - num=num | Buffer[pointer]; - *(temp3+pv2)=num; - py2++; - - if (pv2 > length_v) {flag_v=1;} + num=num | (Buffer[pointer] & 0xff); + *(temp3+pv)=num; + pv++; + // debug("valor pv = %i \r\n",pv); + // debug("num = %i \r\n",num); + if (pv >= length_v) { + flag_v=1; + //acumulador[2]=pv; + break;} - num=0xff & Buffer[pointer+3]; - num=num<<8; - num=num | Buffer[pointer+2]; - *(temp3+pv2)=num; - pv2++; - - if (pv2 > length_v) {flag_v=1;} - } - else { - flag_v=1; - break; - } + + } } } if(flag_y==1 && flag_u==1 && flag_v ==1){ + py=0;pu=0;pv=0; + //py_ant=0;pu_ant=0;pv_ant=0; + //flag_y=0;flag_u=0;flag_v=0; + //first_y=true;first_u=true;first_v=true; + + // debug( "Packet received (final de imagen)\r\n" ); + + State = LOWPOWER; + //goto end; + finish=1; + + + } + strcpy( ( char* )Buffer, ( char* )AckMsg ); // We fill the buffer with numbers for the payload - for( i = 4; i < BufferSize; i++ ) + for( i = 4; i < 32; i++ ) { Buffer[i] = i - 4; } wait_ms( 10 ); + + // debug( "Packet received \r\n" ); + Radio.Send( Buffer, BufferSize ); + if(finish==1) { + py_ant=0;pu_ant=0;pv_ant=0; + flag_y=0;flag_u=0;flag_v=0; + first_y=true;first_u=true;first_v=true; + goto end; + } + } + else // valid reception but not a PAQ or init as expected (Request for send) + { // Set device as master and start again + //isMaster = true; + + strcpy( ( char* )Buffer, ( char* )AckMsg ); + // We fill the buffer with numbers for the payload + for( i = 4; i < 32; i++ ) + { + Buffer[i] = i - 4; + } + wait_ms( 10 ); + + // debug( "RfS received \r\n" ); Radio.Send( Buffer, BufferSize ); - first_y=true;first_u=true;first_v=true; + } + - // debug( "Packet received \r\n" ); - // pc.printf( "Packet received \r\n" ); - State = LOWPOWER; - goto end; - - } - - State=TX; + } } - + State = LOWPOWER; break; case TX: led = !led; if( isMaster == true ) { - //debug( "transmission of packet (320x8)...\r\n" ); - //pc.printf( "transmission of packet (320x8)...\r\n" ); - int pointer=0; - - py_ant=py;pu_ant=pu;pv_ant=pv; - for(pointer=0;pointer<254;pointer+=2){ - - if(flag_y==0) {//se comprueba si se ha cargado en el buffer de transmisión cada una de las componentes - if(first_y == true) {//en primer lugar se manda la longitud de la componente y u v despues del rlc - Buffer[pointer]=index1&0xff; - Buffer[pointer+1]=(index1>>8)&0xff; - first_y = false; - //debug( "transmitting y length...\r\n" ); - } - else{ - Buffer[pointer]=*(temp1+py) & 0x00ff; - Buffer[pointer+1]=(*(temp1+py)>>8) & 0x00ff; - py++; - // debug( "transmitting y data..\r\n" ); - if(py >= index1) { - flag_y=1; - Buffer[pointer+2]='\t'; - pointer+=2; - } - } - } - else if(flag_u==0){ - if(first_u == true) { - Buffer[pointer]=index2&0xff; - Buffer[pointer+1]=(index2>>8)&0xff; - first_u = false; - //debug( "transmitting u length...\r\n" ); - } - else{ - Buffer[pointer]=*(temp2+pu) & 0x00ff; - Buffer[pointer+1]=(*(temp2+pu)>>8) & 0x00ff; - pu++; - //debug( "transmitting u data...\r\n" ); - if(pu>= index2) { - flag_u=1; - Buffer[pointer+2]='\t'; - pointer+=2; - } - } - } - - else{ - if(first_v == true) { - Buffer[pointer]=index2&0xff; - Buffer[pointer+1]=(index2>>8)&0xff; - first_v = false; - //debug( "transmitting v length...\r\n" ); - } - else{ - Buffer[pointer]=*(temp3+pv) & 0x00ff; - Buffer[pointer+1]=(*(temp3+pv)>>8) & 0x00ff; - pv++; - //debug( "transmitting v data ...\r\n" ); - if(pv >= index3) { - flag_v=1; - Buffer[pointer+2]='\n';//salto de línea es EOT - pointer+=2; - break; - } - } - } - - - } - - if(flag_y==1 && flag_u==1 && flag_v==1){ - Buffer[pointer]='\n';//salto de línea es EOT - flag_y=0;flag_u=0;flag_v=0; - //debug( "finished transmission ...\r\n" ); - first_y=true;first_u=true;first_v=true; - goto end; - for( i = Buffer[pointer]; i < BufferSize; i++ ) - { - Buffer[i] = i - 4; - } - } - else{ - for( i = Buffer[pointer]; i < BufferSize; i++ ) - { - Buffer[i] = i - 4; - } - } - - - - wait_ms( 10 ); - //debug( "Sending packet...\r\n" ); - Radio.Send( Buffer, BufferSize ); - - // pc.printf( "Sending packet...\r\n" ); + //debug( "Iransmitting packet TX...\r\n" ); } - else { - //debug( "hola...\r\n" ); - //pc.printf( "hola...\r\n" ); - strcpy( ( char* )Buffer, ( char* )AckMsg ); + // debug( "ACK RX...\r\n" ); + + } + Radio.Rx( RX_TIMEOUT_VALUE ); + State = LOWPOWER; + break; + case RX_TIMEOUT: + if( isMaster == true ) + { + + strcpy( ( char* )Buffer, ( char* )InitMsg ); for( i = 4; i < BufferSize; i++ ) { Buffer[i] = i - 4; } wait_ms( 10 ); Radio.Send( Buffer, BufferSize ); - Radio.Rx( RX_TIMEOUT_VALUE ); - } - - State = RX; - break; - case RX_TIMEOUT: - if( isMaster == true ) - { - //debug( "hola rx_timeout...\r\n" ); - //pc.printf( "hola...\r\n" ); - // Send the next PING frame - strcpy( ( char* )Buffer, ( char* )RfSMsg ); - for( i = 4; i < BufferSize; i++ ) - { - Buffer[i] = i - 4; - } - wait_ms( 10 ); - Radio.Send( Buffer, BufferSize ); + //debug("start!\r\n");//empezamos aqui } else { - //debug( "hola...\r\n" ); - //pc.printf( "hola...\r\n" ); - strcpy( ( char* )Buffer, ( char* )RfSMsg ); + // debug("RX_TIMEOUT... \r\n"); + wait(3); + /*strcpy( ( char* )Buffer, ( char* )AckMsg ); for( i = 4; i < BufferSize; i++ ) { Buffer[i] = i - 4; } wait_ms( 10 ); - Radio.Send( Buffer, BufferSize ); - Radio.Rx( RX_TIMEOUT_VALUE ); + Radio.Send( Buffer, BufferSize ); */ + Radio.Rx( RX_TIMEOUT_VALUE ); } State = LOWPOWER; break; - case RX_ERROR: - // We have received a Packet with a CRC error, request packet again. + // We have received a Packet with a CRC error, send reply as if packet was correct if( isMaster == true ) { - - //debug( "hola rx_error...\r\n" ); - //pc.printf( "hola...\r\n" ); - strcpy( ( char* )Buffer, ( char* )RfSMsg); + // Send the next PING frame + strcpy( ( char* )Buffer, ( char* )InitMsg ); for( i = 4; i < BufferSize; i++ ) { Buffer[i] = i - 4; } - wait_ms( 10 ); Radio.Send( Buffer, BufferSize ); - State = LOWPOWER; } else { - //debug( "hola ...\r\n" ); - //pc.printf( "hola...\r\n" ); - // Send the RfS again - strcpy( ( char* )Buffer, ( char* )RfSMsg); + // Send the next PONG frame + // debug("CRC ERROR... \r\n"); + //wait(3); + + + /*while(1){ + led=!led; + wait(1); + }*/ + const uint8_t RfSY[] = "RfSy"; + const uint8_t RfSU[] = "RfSu"; + const uint8_t RfSV[] = "RfSv"; + + if(py < acumulador[0]) { + // debug("sent RFSY message \r\n"); + strcpy( ( char* )Buffer, ( char* )RfSY ); + + + } + else if(pu < acumulador[1]) { + // debug("sent RFSu message \r\n"); + strcpy( ( char* )Buffer, ( char* )RfSU ); + + + } + else { + // debug("sent RFSV message \r\n"); + strcpy( ( char* )Buffer, ( char* )RfSV ); + + + + } for( i = 4; i < BufferSize; i++ ) { Buffer[i] = i - 4; } - py=py_ant;pu=pu_ant;pv=pv_ant; wait_ms( 10 ); Radio.Send( Buffer, BufferSize ); - State = LOWPOWER; } - //State = LOWPOWER; + State = LOWPOWER; break; case TX_TIMEOUT: Radio.Rx( RX_TIMEOUT_VALUE ); @@ -571,18 +647,16 @@ end: int a; } - + void OnTxDone( void ) { - Radio.SetChannel( HoppingFrequencies[0] ); Radio.Sleep( ); State = TX; debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" ); } - + void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) { - Radio.SetChannel( HoppingFrequencies[0] ); Radio.Sleep( ); BufferSize = size; memcpy( Buffer, payload, BufferSize ); @@ -591,34 +665,26 @@ State = RX; debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" ); } - + void OnTxTimeout( void ) { - Radio.SetChannel( HoppingFrequencies[0] ); Radio.Sleep( ); State = TX_TIMEOUT; - //debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" ); + debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" ); } - + void OnRxTimeout( void ) { - Radio.SetChannel( HoppingFrequencies[0] ); Radio.Sleep( ); Buffer[ BufferSize ] = 0; State = RX_TIMEOUT; - //debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" ); + debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" ); } - + void OnRxError( void ) { - Radio.SetChannel( HoppingFrequencies[0] ); Radio.Sleep( ); State = RX_ERROR; debug_if( DEBUG_MESSAGE, "> OnRxError\n\r" ); } -void OnFhssChangeChannel( uint8_t channelIndex ) -{ - Radio.SetChannel( HoppingFrequencies[channelIndex] ); - debug_if( DEBUG_MESSAGE, "F%d-", channelIndex); -}