JPEG compressor
Dependencies: SDL_lib SX1276Lib mbed
Diff: lora_tansc.h
- Revision:
- 2:f256eebcade8
- Parent:
- 1:f0c646dfe574
--- a/lora_tansc.h Thu Sep 22 00:01:55 2016 +0000 +++ b/lora_tansc.h Wed Jan 11 20:20:00 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,17 +45,16 @@ #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 7500000 // 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 */ @@ -79,82 +73,86 @@ 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 RfSY[] = "RfSy"; +const uint8_t RfSU[] = "RfSu"; +const uint8_t RfSV[] = "RfSv"; +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; uint16_t BufferSize = BUFFER_SIZE; uint8_t Buffer[BUFFER_SIZE]; +int empezar=0; //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) { - //index1=300;index2=300;index3=300; uint8_t i; - bool isMaster = true;//MASTER (TX) OR SLAVE(RX) ? + bool isMaster = true; - //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 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 +161,12 @@ LORA_IQ_INVERSION_ON, true ); #elif USE_MODEM_FSK == 1 - + 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 +174,20 @@ 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"); + + //debug_if( DEBUG_MESSAGE, "Starting Ping-Pong loop\r\n" ); led = 0; - + flag_y=0,flag_u=0,flag_v=0; + first_y=true,first_u=true,first_v=true; + + int finish=0,start=0; Radio.Rx( RX_TIMEOUT_VALUE ); - State=TX; + while( 1 ) { switch( State ) @@ -195,35 +195,190 @@ 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=22;index2=25;index3=25; + 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) {//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" ); + // debug( " %u %u ...\r\n",Buffer[pointer],Buffer[pointer+1]); + } + else{ + // debug( "py= %i..\r\n",py ); + Buffer[pointer]=*(temp1+py) & 0xff; + + Buffer[pointer+1]=(*(temp1+py)>>8) & 0xff; + py++; + // debug( "transmitting y data %i..\r\n",py ); + if(py >= index1) { + // debug( "py final = %i...\r\n",py ); + flag_y=1; + + break; + + } + } + } + else if(flag_u==0){ + if(first_u == true) { + // debug( "pu= %i..\r\n",pu ); + Buffer[pointer]=index2&0xff; + Buffer[pointer+1]=(index2>>8)&0xff; + first_u = false; + // debug( "transmitting u length...\r\n" ); + // debug( " %u %u ...\r\n",Buffer[pointer],Buffer[pointer+1]); + } + else{ + + Buffer[pointer]=*(temp2+pu) & 0xff; + Buffer[pointer+1]=(*(temp2+pu)>>8) & 0xff; + pu++; + // debug( "transmitting u data...\r\n" ); + if(pu>= index2) { + flag_u=1; + + break; + } + } + } + + else{ + if(first_v == true) { + Buffer[pointer]=index3&0xff; + Buffer[pointer+1]=(index3>>8)&0xff; + first_v = false; + // debug( "transmitting v length...\r\n" ); + // debug( " %u %u ...\r\n",Buffer[pointer],Buffer[pointer+1]); + } + else{ + // debug( "pv= %i..\r\n",pv ); + Buffer[pointer]=*(temp3+pv) & 0xff; + Buffer[pointer+1]=(*(temp3+pv)>>8) & 0xff; + pv++; + // debug( "transmitting v data ...\r\n" ); + if(pv >= index3) { + flag_v=1; + + break; + } + } + } + + + } + if(finish==1){ + flag_y=0;flag_u=0;flag_v=0; + py=0;pu=0;pv=0; + first_y=true;first_u=true;first_v=true; + start=0; + goto end; } - - else if( strncmp( ( const char* )Buffer, ( const char* )RfSMsg, 3 ) == 0 ){ - 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. - } + //debug( "end of cycle..\r\n" ); - else // valid reception but neither a message + if(flag_y==1 && flag_u==1 && flag_v==1){ + //flag_y=0;flag_u=0;flag_v=0; + //py_ant=0;pu_ant=0;pv_ant=0; + py=0;pu=0;pv=0; + //start=0; + // debug( "finished transmission ...\r\n" ); + //first_y=true;first_u=true;first_v=true; + finish=1; + + + } + + + + 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!!!!!! - Radio.Rx( RX_TIMEOUT_VALUE ); + isMaster = true; + // debug("RfS received...\r\n"); + if(strncmp( ( const char* )Buffer, ( const char* )RfSY, 4 ) == 0 ) { + + py=py_ant; + //py-=15; + /*py=0xff & Buffer[6]; + py=py<<8; + py=py | (Buffer[5] & 0xff);*/ + flag_y=0; + if(py<=0) { + first_y=true; + py=0; + } + + } + else if(strncmp( ( const char* )Buffer, ( const char* )RfSU, 4 ) == 0) { + pu=pu_ant; + //pu-=15; + /* pu=0xff & Buffer[6]; + pu=pu<<8; + pu=pu | (Buffer[5] & 0xff);*/ + flag_u=0; + if(pu<=0) { + first_u=true; + pu=0; + } + + } + else { + pv=pv_ant; + //pv-=15; + /*pv=0xff & Buffer[6]; + pv=pv<<8; + pv=pv | (Buffer[5] & 0xff);*/ + + flag_v=0; + if(pv<=0) { + first_v=true; + pv=0; + } + + } + + strcpy( ( char* )Buffer, ( char* )InitMsg ); + Buffer[4]=py&0xff; + Buffer[5]=(py>>8)&0xff; + + Buffer[6]=pu&0xff; + Buffer[7]=(pu>>8)&0xff; + Buffer[8]=pv&0xff; + Buffer[9]=(pv>>8)&0xff; + // We fill the buffer with numbers for the payload + for( i = 10; i < BufferSize; i++ ) + { + Buffer[i] = i - 4; + } + wait_ms( 10 ); + Radio.Send( Buffer, BufferSize ); + + } } } @@ -231,331 +386,145 @@ { if( BufferSize > 0 ) { - + if( strncmp( ( const char* )Buffer, ( const char* )InitMsg, 4 ) == 0 ) + { led = !led; - debug( "Reading... \r\n" ); - // pc.printf( "Reading... \r\n" ); - - int pointer=0; - int length_y=0,length_v=0,length_u=0; - for(pointer=0;pointer<254;pointer+=4){ - 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]; - 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] - - } - else{ - 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=0xff & Buffer[pointer+3]; - num=num<<8; - num=num | Buffer[pointer+2]; - *(temp1+py2)=num; - py2++; - - if (py2 > length_y) {flag_y=1;}//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]; - first_u = false; - temp2=(short int *)malloc(sizeof(short int)*length_u); - pointer-=2; - } - 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=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; - } - } - } - - else{ - if(first_v == true) { - length_v=0xff & Buffer[pointer+1]; - length_v=length_v<<8; - length_v=length_v | Buffer[pointer]; - first_v = false; - temp3=(short int *)malloc(sizeof(short int)*length_v); - pointer-=2; - } - else{ - 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=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){ + // debug( "...Init received\r\n" ); + // Send the reply to the PING string strcpy( ( char* )Buffer, ( char* )AckMsg ); // We fill the buffer with numbers for the payload - for( i = 4; i < BufferSize; i++ ) - { + for( i = 3; i < BufferSize; i++ ) + { Buffer[i] = i - 4; - } + } wait_ms( 10 ); Radio.Send( Buffer, BufferSize ); - - first_y=true;first_u=true;first_v=true; + } + else if( strncmp( ( const char* )Buffer, ( const char* )PaqMsg, 2 ) == 0 ) + { // A master already exists then become a slave - // debug( "Packet received \r\n" ); - // pc.printf( "Packet received \r\n" ); - State = LOWPOWER; - goto end; - + // debug( "...Receiving data TX \r\n" ); + led = !led; + //isMaster = false; + // Send the next PONG frame + strcpy( ( char* )Buffer, ( char* )AckMsg ); + // We fill the buffer with numbers for the payload + for( i = 4; i < BufferSize; i++ ) + { + Buffer[i] = i - 4; + } + wait_ms( 10 ); + Radio.Send( Buffer, BufferSize ); } - - State=TX; + else // RfS + { // Set device as master and start again + + Radio.Rx( RX_TIMEOUT_VALUE ); + } } } - + 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 - 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" ); + //if(finish==1) goto end; } - else { - //debug( "hola...\r\n" ); - //pc.printf( "hola...\r\n" ); - 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 ); - } - - State = RX; + // debug( "ACK RX...\r\n" ); + } + Radio.Rx( RX_TIMEOUT_VALUE ); + State = LOWPOWER; break; case RX_TIMEOUT: if( isMaster == true ) { - //debug( "hola rx_timeout...\r\n" ); - //pc.printf( "hola...\r\n" ); + // Send the next PING frame + + + // debug("start!\r\n");//empezamos aqui + //py-=15;pu-=15;pv-=15; + if(start==0) { + py=0;pu=0;pv=0; + start=1; + } + else{ + 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; + } + } + strcpy( ( char* )Buffer, ( char* )InitMsg ); + Buffer[4]=py&0xff; + Buffer[5]=(py>>8)&0xff; + + Buffer[6]=pu&0xff; + Buffer[7]=(pu>>8)&0xff; + Buffer[8]=pv&0xff; + Buffer[9]=(pv>>8)&0xff; + for( i = 10; i < BufferSize; i++ ) + { + Buffer[i] = i - 4; + } + + wait_ms( 10 ); + Radio.Send( Buffer, BufferSize ); + + + Radio.Rx( RX_TIMEOUT_VALUE ); + } + else + { + Radio.Rx( RX_TIMEOUT_VALUE ); + } + State = LOWPOWER; + break; + case RX_ERROR: + // We have received a Packet with a CRC error, send reply as if packet was correct + if( isMaster == true ) + { // Send the next PING frame strcpy( ( char* )Buffer, ( char* )RfSMsg ); for( i = 4; i < BufferSize; i++ ) { Buffer[i] = i - 4; } - wait_ms( 10 ); + // debug("CRC error!\r\n");//empezamos aqui + //py=py_ant;pu=pu_ant;pv=pv_ant; + wait_ms( 10 ); Radio.Send( Buffer, BufferSize ); + + } else { - //debug( "hola...\r\n" ); - //pc.printf( "hola...\r\n" ); - strcpy( ( char* )Buffer, ( char* )RfSMsg ); + // Send the next PONG frame + 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 ); - } - State = LOWPOWER; - break; - - case RX_ERROR: - // We have received a Packet with a CRC error, request packet again. - if( isMaster == true ) - { - - //debug( "hola rx_error...\r\n" ); - //pc.printf( "hola...\r\n" ); - strcpy( ( char* )Buffer, ( char* )RfSMsg); - 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); - 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 +540,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 +558,25 @@ 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); -}