H261 decoder
Dependencies: SDL_lib2 SX1276Lib mbed
lora.h@1:1ed97958d0f3, 2017-01-11 (annotated)
- Committer:
- miruga27
- Date:
- Wed Jan 11 20:18:38 2017 +0000
- Revision:
- 1:1ed97958d0f3
- Parent:
- 0:5bd441b8ab2d
JPEG Compressor and SX1276 transmitter
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
miruga27 | 0:5bd441b8ab2d | 1 | #include "mbed.h" |
miruga27 | 0:5bd441b8ab2d | 2 | #include "lora2.h" |
miruga27 | 0:5bd441b8ab2d | 3 | #include "sx1276-hal.h" |
miruga27 | 0:5bd441b8ab2d | 4 | #include "debug.h" |
miruga27 | 1:1ed97958d0f3 | 5 | |
miruga27 | 0:5bd441b8ab2d | 6 | /* Set this flag to '1' to display debug messages on the console */ |
miruga27 | 1:1ed97958d0f3 | 7 | #define DEBUG_MESSAGE 0 |
miruga27 | 1:1ed97958d0f3 | 8 | |
miruga27 | 0:5bd441b8ab2d | 9 | /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */ |
miruga27 | 0:5bd441b8ab2d | 10 | #define USE_MODEM_LORA 1 |
miruga27 | 0:5bd441b8ab2d | 11 | #define USE_MODEM_FSK !USE_MODEM_LORA |
miruga27 | 1:1ed97958d0f3 | 12 | |
miruga27 | 1:1ed97958d0f3 | 13 | #define RF_FREQUENCY 868000000 // Hz |
miruga27 | 1:1ed97958d0f3 | 14 | #define TX_OUTPUT_POWER 20 // 14 dBm |
miruga27 | 1:1ed97958d0f3 | 15 | |
miruga27 | 0:5bd441b8ab2d | 16 | #if USE_MODEM_LORA == 1 |
miruga27 | 1:1ed97958d0f3 | 17 | |
miruga27 | 1:1ed97958d0f3 | 18 | #define LORA_BANDWIDTH 2 // [0: 125 kHz, |
miruga27 | 0:5bd441b8ab2d | 19 | // 1: 250 kHz, |
miruga27 | 0:5bd441b8ab2d | 20 | // 2: 500 kHz, |
miruga27 | 0:5bd441b8ab2d | 21 | // 3: Reserved] |
miruga27 | 1:1ed97958d0f3 | 22 | #define LORA_SPREADING_FACTOR 7 // [SF7..SF12] |
miruga27 | 0:5bd441b8ab2d | 23 | #define LORA_CODINGRATE 1 // [1: 4/5, |
miruga27 | 0:5bd441b8ab2d | 24 | // 2: 4/6, |
miruga27 | 0:5bd441b8ab2d | 25 | // 3: 4/7, |
miruga27 | 0:5bd441b8ab2d | 26 | // 4: 4/8] |
miruga27 | 0:5bd441b8ab2d | 27 | #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx |
miruga27 | 0:5bd441b8ab2d | 28 | #define LORA_SYMBOL_TIMEOUT 5 // Symbols |
miruga27 | 0:5bd441b8ab2d | 29 | #define LORA_FIX_LENGTH_PAYLOAD_ON false |
miruga27 | 1:1ed97958d0f3 | 30 | #define LORA_FHSS_ENABLED false |
miruga27 | 0:5bd441b8ab2d | 31 | #define LORA_NB_SYMB_HOP 4 |
miruga27 | 0:5bd441b8ab2d | 32 | #define LORA_IQ_INVERSION_ON false |
miruga27 | 0:5bd441b8ab2d | 33 | #define LORA_CRC_ENABLED true |
miruga27 | 0:5bd441b8ab2d | 34 | |
miruga27 | 0:5bd441b8ab2d | 35 | #elif USE_MODEM_FSK == 1 |
miruga27 | 1:1ed97958d0f3 | 36 | |
miruga27 | 0:5bd441b8ab2d | 37 | #define FSK_FDEV 25000 // Hz |
miruga27 | 0:5bd441b8ab2d | 38 | #define FSK_DATARATE 19200 // bps |
miruga27 | 0:5bd441b8ab2d | 39 | #define FSK_BANDWIDTH 50000 // Hz |
miruga27 | 0:5bd441b8ab2d | 40 | #define FSK_AFC_BANDWIDTH 83333 // Hz |
miruga27 | 0:5bd441b8ab2d | 41 | #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx |
miruga27 | 0:5bd441b8ab2d | 42 | #define FSK_FIX_LENGTH_PAYLOAD_ON false |
miruga27 | 0:5bd441b8ab2d | 43 | #define FSK_CRC_ENABLED true |
miruga27 | 0:5bd441b8ab2d | 44 | |
miruga27 | 0:5bd441b8ab2d | 45 | #else |
miruga27 | 0:5bd441b8ab2d | 46 | #error "Please define a modem in the compiler options." |
miruga27 | 0:5bd441b8ab2d | 47 | #endif |
miruga27 | 1:1ed97958d0f3 | 48 | |
miruga27 | 1:1ed97958d0f3 | 49 | #define RX_TIMEOUT_VALUE 9500000 // in us |
miruga27 | 1:1ed97958d0f3 | 50 | #define BUFFER_SIZE 32 // Define the payload size here |
miruga27 | 1:1ed97958d0f3 | 51 | |
miruga27 | 0:5bd441b8ab2d | 52 | #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) ) |
miruga27 | 0:5bd441b8ab2d | 53 | DigitalOut led(LED2); |
miruga27 | 0:5bd441b8ab2d | 54 | #else |
miruga27 | 0:5bd441b8ab2d | 55 | DigitalOut led(LED1); |
miruga27 | 0:5bd441b8ab2d | 56 | #endif |
miruga27 | 1:1ed97958d0f3 | 57 | |
miruga27 | 0:5bd441b8ab2d | 58 | /* |
miruga27 | 1:1ed97958d0f3 | 59 | * Global variables declarations |
miruga27 | 0:5bd441b8ab2d | 60 | */ |
miruga27 | 0:5bd441b8ab2d | 61 | typedef enum |
miruga27 | 0:5bd441b8ab2d | 62 | { |
miruga27 | 0:5bd441b8ab2d | 63 | LOWPOWER = 0, |
miruga27 | 0:5bd441b8ab2d | 64 | IDLE, |
miruga27 | 0:5bd441b8ab2d | 65 | |
miruga27 | 0:5bd441b8ab2d | 66 | RX, |
miruga27 | 0:5bd441b8ab2d | 67 | RX_TIMEOUT, |
miruga27 | 0:5bd441b8ab2d | 68 | RX_ERROR, |
miruga27 | 0:5bd441b8ab2d | 69 | |
miruga27 | 0:5bd441b8ab2d | 70 | TX, |
miruga27 | 0:5bd441b8ab2d | 71 | TX_TIMEOUT, |
miruga27 | 0:5bd441b8ab2d | 72 | |
miruga27 | 0:5bd441b8ab2d | 73 | CAD, |
miruga27 | 0:5bd441b8ab2d | 74 | CAD_DONE |
miruga27 | 0:5bd441b8ab2d | 75 | }AppStates_t; |
miruga27 | 1:1ed97958d0f3 | 76 | |
miruga27 | 0:5bd441b8ab2d | 77 | volatile AppStates_t State = LOWPOWER; |
miruga27 | 1:1ed97958d0f3 | 78 | |
miruga27 | 0:5bd441b8ab2d | 79 | /*! |
miruga27 | 0:5bd441b8ab2d | 80 | * Radio events function pointer |
miruga27 | 0:5bd441b8ab2d | 81 | */ |
miruga27 | 0:5bd441b8ab2d | 82 | static RadioEvents_t RadioEvents; |
miruga27 | 1:1ed97958d0f3 | 83 | |
miruga27 | 0:5bd441b8ab2d | 84 | /* |
miruga27 | 0:5bd441b8ab2d | 85 | * Global variables declarations |
miruga27 | 0:5bd441b8ab2d | 86 | */ |
miruga27 | 0:5bd441b8ab2d | 87 | SX1276MB1xAS Radio( NULL ); |
miruga27 | 1:1ed97958d0f3 | 88 | |
miruga27 | 0:5bd441b8ab2d | 89 | const uint8_t PingMsg[] = "PING"; |
miruga27 | 0:5bd441b8ab2d | 90 | const uint8_t PongMsg[] = "PONG"; |
miruga27 | 1:1ed97958d0f3 | 91 | |
miruga27 | 1:1ed97958d0f3 | 92 | |
miruga27 | 0:5bd441b8ab2d | 93 | const uint8_t AckMsg[] = "ACK"; |
miruga27 | 0:5bd441b8ab2d | 94 | const uint8_t EOPMsg[] = "EOP"; |
miruga27 | 0:5bd441b8ab2d | 95 | const uint8_t RfSMsg[] = "RfS"; |
miruga27 | 1:1ed97958d0f3 | 96 | const uint8_t InitMsg[] = "INIT"; |
miruga27 | 1:1ed97958d0f3 | 97 | const uint8_t PaqMsg[] = "\t\n"; |
miruga27 | 1:1ed97958d0f3 | 98 | |
miruga27 | 0:5bd441b8ab2d | 99 | int py=0,pu=0,pv=0,py2=0,pu2=0,pv2=0; |
miruga27 | 0:5bd441b8ab2d | 100 | int py_ant=0,pu_ant=0,pv_ant=0; |
miruga27 | 0:5bd441b8ab2d | 101 | int flag_y=0,flag_u=0,flag_v=0; |
miruga27 | 1:1ed97958d0f3 | 102 | short int length_y=0,length_u=0,length_v=0; |
miruga27 | 0:5bd441b8ab2d | 103 | uint16_t BufferSize = BUFFER_SIZE; |
miruga27 | 0:5bd441b8ab2d | 104 | uint8_t Buffer[BUFFER_SIZE]; |
miruga27 | 0:5bd441b8ab2d | 105 | //uint8_t Buffer2[4]; |
miruga27 | 1:1ed97958d0f3 | 106 | int init=0; |
miruga27 | 0:5bd441b8ab2d | 107 | int16_t RssiValue = 0.0; |
miruga27 | 0:5bd441b8ab2d | 108 | int8_t SnrValue = 0.0; |
miruga27 | 1:1ed97958d0f3 | 109 | short int init_packet=0; |
miruga27 | 1:1ed97958d0f3 | 110 | int start=0; |
miruga27 | 0:5bd441b8ab2d | 111 | bool first_y=true,first_u=true,first_v=true; |
miruga27 | 1:1ed97958d0f3 | 112 | |
miruga27 | 1:1ed97958d0f3 | 113 | void lora(short int *temp1,short int index1,short int *temp2,short int index2,short int *temp3,short int index3,short int acumulador[3]) |
miruga27 | 0:5bd441b8ab2d | 114 | { |
miruga27 | 0:5bd441b8ab2d | 115 | uint8_t i; |
miruga27 | 1:1ed97958d0f3 | 116 | bool isMaster = false; |
miruga27 | 0:5bd441b8ab2d | 117 | |
miruga27 | 1:1ed97958d0f3 | 118 | //debug( "\n\n\r SX1276 JPEG Compressor Application \n\n\r" ); |
miruga27 | 1:1ed97958d0f3 | 119 | |
miruga27 | 0:5bd441b8ab2d | 120 | // Initialize Radio driver |
miruga27 | 0:5bd441b8ab2d | 121 | RadioEvents.TxDone = OnTxDone; |
miruga27 | 0:5bd441b8ab2d | 122 | RadioEvents.RxDone = OnRxDone; |
miruga27 | 0:5bd441b8ab2d | 123 | RadioEvents.RxError = OnRxError; |
miruga27 | 0:5bd441b8ab2d | 124 | RadioEvents.TxTimeout = OnTxTimeout; |
miruga27 | 0:5bd441b8ab2d | 125 | RadioEvents.RxTimeout = OnRxTimeout; |
miruga27 | 0:5bd441b8ab2d | 126 | Radio.Init( &RadioEvents ); |
miruga27 | 0:5bd441b8ab2d | 127 | |
miruga27 | 0:5bd441b8ab2d | 128 | // verify the connection with the board |
miruga27 | 0:5bd441b8ab2d | 129 | while( Radio.Read( REG_VERSION ) == 0x00 ) |
miruga27 | 0:5bd441b8ab2d | 130 | { |
miruga27 | 1:1ed97958d0f3 | 131 | debug( "Radio could not be detected!\n\r", NULL ); |
miruga27 | 0:5bd441b8ab2d | 132 | wait( 1 ); |
miruga27 | 0:5bd441b8ab2d | 133 | } |
miruga27 | 1:1ed97958d0f3 | 134 | |
miruga27 | 0:5bd441b8ab2d | 135 | //debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ) , "\n\r > Board Type: SX1276MB1LAS < \n\r" ); |
miruga27 | 0:5bd441b8ab2d | 136 | //debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ) , "\n\r > Board Type: SX1276MB1MAS < \n\r" ); |
miruga27 | 0:5bd441b8ab2d | 137 | |
miruga27 | 1:1ed97958d0f3 | 138 | Radio.SetChannel( RF_FREQUENCY ); |
miruga27 | 1:1ed97958d0f3 | 139 | |
miruga27 | 0:5bd441b8ab2d | 140 | #if USE_MODEM_LORA == 1 |
miruga27 | 0:5bd441b8ab2d | 141 | |
miruga27 | 0:5bd441b8ab2d | 142 | //debug_if( LORA_FHSS_ENABLED, "\n\n\r > LORA FHSS Mode < \n\n\r"); |
miruga27 | 0:5bd441b8ab2d | 143 | //debug_if( !LORA_FHSS_ENABLED, "\n\n\r > LORA Mode < \n\n\r"); |
miruga27 | 1:1ed97958d0f3 | 144 | |
miruga27 | 0:5bd441b8ab2d | 145 | Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, |
miruga27 | 0:5bd441b8ab2d | 146 | LORA_SPREADING_FACTOR, LORA_CODINGRATE, |
miruga27 | 0:5bd441b8ab2d | 147 | LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, |
miruga27 | 0:5bd441b8ab2d | 148 | LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, |
miruga27 | 1:1ed97958d0f3 | 149 | LORA_IQ_INVERSION_ON, 2000000 ); |
miruga27 | 0:5bd441b8ab2d | 150 | |
miruga27 | 0:5bd441b8ab2d | 151 | Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, |
miruga27 | 0:5bd441b8ab2d | 152 | LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, |
miruga27 | 0:5bd441b8ab2d | 153 | LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, |
miruga27 | 0:5bd441b8ab2d | 154 | LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, |
miruga27 | 0:5bd441b8ab2d | 155 | LORA_IQ_INVERSION_ON, true ); |
miruga27 | 0:5bd441b8ab2d | 156 | |
miruga27 | 0:5bd441b8ab2d | 157 | #elif USE_MODEM_FSK == 1 |
miruga27 | 1:1ed97958d0f3 | 158 | |
miruga27 | 1:1ed97958d0f3 | 159 | //debug("\n\n\r > FSK Mode < \n\n\r"); |
miruga27 | 0:5bd441b8ab2d | 160 | Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0, |
miruga27 | 0:5bd441b8ab2d | 161 | FSK_DATARATE, 0, |
miruga27 | 0:5bd441b8ab2d | 162 | FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON, |
miruga27 | 1:1ed97958d0f3 | 163 | FSK_CRC_ENABLED, 0, 0, 0, 2000000 ); |
miruga27 | 0:5bd441b8ab2d | 164 | |
miruga27 | 0:5bd441b8ab2d | 165 | Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE, |
miruga27 | 0:5bd441b8ab2d | 166 | 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, |
miruga27 | 0:5bd441b8ab2d | 167 | 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED, |
miruga27 | 0:5bd441b8ab2d | 168 | 0, 0, false, true ); |
miruga27 | 0:5bd441b8ab2d | 169 | |
miruga27 | 0:5bd441b8ab2d | 170 | #else |
miruga27 | 1:1ed97958d0f3 | 171 | |
miruga27 | 0:5bd441b8ab2d | 172 | #error "Please define a modem in the compiler options." |
miruga27 | 1:1ed97958d0f3 | 173 | |
miruga27 | 0:5bd441b8ab2d | 174 | #endif |
miruga27 | 1:1ed97958d0f3 | 175 | |
miruga27 | 0:5bd441b8ab2d | 176 | //debug_if( DEBUG_MESSAGE, "Starting image transmission loop\r\n" ); |
miruga27 | 0:5bd441b8ab2d | 177 | |
miruga27 | 0:5bd441b8ab2d | 178 | led = 0; |
miruga27 | 1:1ed97958d0f3 | 179 | flag_y=0,flag_u=0,flag_v=0; |
miruga27 | 1:1ed97958d0f3 | 180 | int finish=0; |
miruga27 | 1:1ed97958d0f3 | 181 | first_y=true,first_u=true,first_v=true; |
miruga27 | 0:5bd441b8ab2d | 182 | Radio.Rx( RX_TIMEOUT_VALUE ); |
miruga27 | 1:1ed97958d0f3 | 183 | |
miruga27 | 0:5bd441b8ab2d | 184 | while( 1 ) |
miruga27 | 0:5bd441b8ab2d | 185 | { |
miruga27 | 0:5bd441b8ab2d | 186 | switch( State ) |
miruga27 | 0:5bd441b8ab2d | 187 | { |
miruga27 | 0:5bd441b8ab2d | 188 | case RX: |
miruga27 | 0:5bd441b8ab2d | 189 | if( isMaster == true ) |
miruga27 | 0:5bd441b8ab2d | 190 | { |
miruga27 | 0:5bd441b8ab2d | 191 | if( BufferSize > 0 ) |
miruga27 | 0:5bd441b8ab2d | 192 | { |
miruga27 | 1:1ed97958d0f3 | 193 | if( strncmp( ( const char* )Buffer, ( const char* )AckMsg, 3 ) == 0 ) |
miruga27 | 0:5bd441b8ab2d | 194 | { |
miruga27 | 0:5bd441b8ab2d | 195 | led = !led; |
miruga27 | 1:1ed97958d0f3 | 196 | //debug( "...Ack RX\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 197 | |
miruga27 | 1:1ed97958d0f3 | 198 | Buffer[0]='\t'; |
miruga27 | 1:1ed97958d0f3 | 199 | Buffer[1]='\n'; |
miruga27 | 1:1ed97958d0f3 | 200 | //index1=20;index2=20;index3=20; |
miruga27 | 1:1ed97958d0f3 | 201 | int pointer=0; |
miruga27 | 1:1ed97958d0f3 | 202 | for(pointer=2;pointer<BufferSize;pointer+=2){ |
miruga27 | 0:5bd441b8ab2d | 203 | |
miruga27 | 1:1ed97958d0f3 | 204 | if(flag_y==0) {//se comprueba si se ha cargado en el buffer de transmisión cada una de las componentes |
miruga27 | 1:1ed97958d0f3 | 205 | if(first_y == true) {//en primer lugar se manda la longitud de la componente y u v |
miruga27 | 1:1ed97958d0f3 | 206 | Buffer[pointer]=index1&0xff;//Se carga la parte baja del short int y en el siguiente byte se carga la parte alta. |
miruga27 | 1:1ed97958d0f3 | 207 | Buffer[pointer+1]=(index1>>8)&0xff; |
miruga27 | 1:1ed97958d0f3 | 208 | // debug("%c %c \r\n",Buffer[pointer],Buffer[pointer+1]); |
miruga27 | 1:1ed97958d0f3 | 209 | first_y = false; |
miruga27 | 1:1ed97958d0f3 | 210 | |
miruga27 | 1:1ed97958d0f3 | 211 | //debug( "transmitting y length...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 212 | } |
miruga27 | 1:1ed97958d0f3 | 213 | else{ |
miruga27 | 1:1ed97958d0f3 | 214 | Buffer[pointer]=*(temp1+py) & 0x00ff; |
miruga27 | 1:1ed97958d0f3 | 215 | Buffer[pointer+1]=(*(temp1+py)>>8) & 0x00ff; |
miruga27 | 1:1ed97958d0f3 | 216 | py++; |
miruga27 | 1:1ed97958d0f3 | 217 | //debug( "transmitting y data..\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 218 | if(py >= index1) { |
miruga27 | 1:1ed97958d0f3 | 219 | |
miruga27 | 1:1ed97958d0f3 | 220 | flag_y=1; |
miruga27 | 1:1ed97958d0f3 | 221 | break; |
miruga27 | 1:1ed97958d0f3 | 222 | //Buffer[pointer+2]='\t'; |
miruga27 | 1:1ed97958d0f3 | 223 | //pointer+=2; |
miruga27 | 1:1ed97958d0f3 | 224 | } |
miruga27 | 1:1ed97958d0f3 | 225 | } |
miruga27 | 1:1ed97958d0f3 | 226 | } |
miruga27 | 1:1ed97958d0f3 | 227 | else if(flag_u==0){ |
miruga27 | 1:1ed97958d0f3 | 228 | if(first_u == true) { |
miruga27 | 1:1ed97958d0f3 | 229 | Buffer[pointer]=index2&0xff; |
miruga27 | 1:1ed97958d0f3 | 230 | Buffer[pointer+1]=(index2>>8)&0xff; |
miruga27 | 1:1ed97958d0f3 | 231 | first_u = false; |
miruga27 | 1:1ed97958d0f3 | 232 | //debug( "transmitting u length...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 233 | } |
miruga27 | 1:1ed97958d0f3 | 234 | else{ |
miruga27 | 1:1ed97958d0f3 | 235 | |
miruga27 | 1:1ed97958d0f3 | 236 | Buffer[pointer]=*(temp2+pu) & 0x00ff; |
miruga27 | 1:1ed97958d0f3 | 237 | Buffer[pointer+1]=(*(temp2+pu)>>8) & 0x00ff; |
miruga27 | 1:1ed97958d0f3 | 238 | pu++; |
miruga27 | 1:1ed97958d0f3 | 239 | //debug( "transmitting u data...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 240 | if(pu>= index2) { |
miruga27 | 1:1ed97958d0f3 | 241 | flag_u=1; |
miruga27 | 1:1ed97958d0f3 | 242 | //Buffer[pointer+2]='\t'; |
miruga27 | 1:1ed97958d0f3 | 243 | //pointer+=2; |
miruga27 | 1:1ed97958d0f3 | 244 | break; |
miruga27 | 1:1ed97958d0f3 | 245 | } |
miruga27 | 1:1ed97958d0f3 | 246 | } |
miruga27 | 1:1ed97958d0f3 | 247 | } |
miruga27 | 0:5bd441b8ab2d | 248 | |
miruga27 | 1:1ed97958d0f3 | 249 | else{ |
miruga27 | 1:1ed97958d0f3 | 250 | if(first_v == true) { |
miruga27 | 1:1ed97958d0f3 | 251 | Buffer[pointer]=index3&0xff; |
miruga27 | 1:1ed97958d0f3 | 252 | Buffer[pointer+1]=(index3>>8)&0xff; |
miruga27 | 1:1ed97958d0f3 | 253 | first_v = false; |
miruga27 | 1:1ed97958d0f3 | 254 | //debug( "transmitting v length...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 255 | } |
miruga27 | 1:1ed97958d0f3 | 256 | else{ |
miruga27 | 1:1ed97958d0f3 | 257 | Buffer[pointer]=*(temp3+pv) & 0x00ff; |
miruga27 | 1:1ed97958d0f3 | 258 | Buffer[pointer+1]=(*(temp3+pv)>>8) & 0x00ff; |
miruga27 | 1:1ed97958d0f3 | 259 | pv++; |
miruga27 | 1:1ed97958d0f3 | 260 | //debug( "transmitting v data ...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 261 | if(pv >= index3) { |
miruga27 | 1:1ed97958d0f3 | 262 | flag_v=1; |
miruga27 | 1:1ed97958d0f3 | 263 | //Buffer[pointer+2]='\n';//salto de línea es EOT |
miruga27 | 1:1ed97958d0f3 | 264 | //pointer+=2; |
miruga27 | 1:1ed97958d0f3 | 265 | break; |
miruga27 | 1:1ed97958d0f3 | 266 | } |
miruga27 | 1:1ed97958d0f3 | 267 | } |
miruga27 | 1:1ed97958d0f3 | 268 | } |
miruga27 | 1:1ed97958d0f3 | 269 | |
miruga27 | 1:1ed97958d0f3 | 270 | |
miruga27 | 1:1ed97958d0f3 | 271 | } |
miruga27 | 0:5bd441b8ab2d | 272 | |
miruga27 | 1:1ed97958d0f3 | 273 | //debug( "end of cycle..\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 274 | int finish=0; |
miruga27 | 1:1ed97958d0f3 | 275 | if(flag_y==1 && flag_u==1 && flag_v==1){ |
miruga27 | 1:1ed97958d0f3 | 276 | //Buffer[pointer]='\n';//salto de línea es EOT |
miruga27 | 1:1ed97958d0f3 | 277 | flag_y=0;flag_u=0;flag_v=0; |
miruga27 | 1:1ed97958d0f3 | 278 | //debug( "finished transmission ...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 279 | first_y=true;first_u=true;first_v=true; |
miruga27 | 1:1ed97958d0f3 | 280 | finish=1; |
miruga27 | 1:1ed97958d0f3 | 281 | |
miruga27 | 1:1ed97958d0f3 | 282 | |
miruga27 | 1:1ed97958d0f3 | 283 | } |
miruga27 | 1:1ed97958d0f3 | 284 | else{ |
miruga27 | 1:1ed97958d0f3 | 285 | for( i = pointer; i < BufferSize; i++ ) |
miruga27 | 1:1ed97958d0f3 | 286 | { |
miruga27 | 1:1ed97958d0f3 | 287 | Buffer[i] = i - 4; |
miruga27 | 1:1ed97958d0f3 | 288 | } |
miruga27 | 1:1ed97958d0f3 | 289 | |
miruga27 | 1:1ed97958d0f3 | 290 | } |
miruga27 | 1:1ed97958d0f3 | 291 | |
miruga27 | 1:1ed97958d0f3 | 292 | |
miruga27 | 1:1ed97958d0f3 | 293 | |
miruga27 | 1:1ed97958d0f3 | 294 | wait_ms( 10 ); |
miruga27 | 1:1ed97958d0f3 | 295 | //debug( "Sending packet...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 296 | Radio.Send( Buffer, BufferSize ); |
miruga27 | 1:1ed97958d0f3 | 297 | if(finish==1) goto end; |
miruga27 | 1:1ed97958d0f3 | 298 | } |
miruga27 | 1:1ed97958d0f3 | 299 | |
miruga27 | 1:1ed97958d0f3 | 300 | else // valid reception but neither a PING or a PONG message |
miruga27 | 0:5bd441b8ab2d | 301 | { // Set device as master ans start again |
miruga27 | 1:1ed97958d0f3 | 302 | isMaster = true; |
miruga27 | 0:5bd441b8ab2d | 303 | Radio.Rx( RX_TIMEOUT_VALUE ); |
miruga27 | 0:5bd441b8ab2d | 304 | } |
miruga27 | 0:5bd441b8ab2d | 305 | } |
miruga27 | 0:5bd441b8ab2d | 306 | } |
miruga27 | 0:5bd441b8ab2d | 307 | else |
miruga27 | 0:5bd441b8ab2d | 308 | { |
miruga27 | 0:5bd441b8ab2d | 309 | if( BufferSize > 0 ) |
miruga27 | 0:5bd441b8ab2d | 310 | { |
miruga27 | 1:1ed97958d0f3 | 311 | if( strncmp( ( const char* )Buffer, ( const char* )InitMsg, 4 ) == 0 ) |
miruga27 | 1:1ed97958d0f3 | 312 | { |
miruga27 | 0:5bd441b8ab2d | 313 | led = !led; |
miruga27 | 1:1ed97958d0f3 | 314 | // debug( "...Init received gfd\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 315 | short int num=0; |
miruga27 | 1:1ed97958d0f3 | 316 | num=0xff & Buffer[5]; |
miruga27 | 1:1ed97958d0f3 | 317 | num=num<<8; |
miruga27 | 1:1ed97958d0f3 | 318 | num=num | (Buffer[4] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 319 | // debug( "py = %i\r\n",num ); |
miruga27 | 1:1ed97958d0f3 | 320 | |
miruga27 | 1:1ed97958d0f3 | 321 | py=num; |
miruga27 | 1:1ed97958d0f3 | 322 | |
miruga27 | 1:1ed97958d0f3 | 323 | num=0; |
miruga27 | 1:1ed97958d0f3 | 324 | num=0xff & Buffer[7]; |
miruga27 | 1:1ed97958d0f3 | 325 | num=num<<8; |
miruga27 | 1:1ed97958d0f3 | 326 | num=num | (Buffer[6] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 327 | // debug( "pu = %i\r\n",num ); |
miruga27 | 1:1ed97958d0f3 | 328 | pu=num; |
miruga27 | 1:1ed97958d0f3 | 329 | num=0; |
miruga27 | 1:1ed97958d0f3 | 330 | num=0xff & Buffer[9]; |
miruga27 | 1:1ed97958d0f3 | 331 | num=num<<8; |
miruga27 | 1:1ed97958d0f3 | 332 | num=num | (Buffer[8] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 333 | // debug( "pv = %i\r\n",num ); |
miruga27 | 1:1ed97958d0f3 | 334 | |
miruga27 | 1:1ed97958d0f3 | 335 | pv=num; |
miruga27 | 1:1ed97958d0f3 | 336 | //py=py_ant;pu=pu_ant;pv=pv_ant; |
miruga27 | 1:1ed97958d0f3 | 337 | |
miruga27 | 1:1ed97958d0f3 | 338 | if(pv<=0) { |
miruga27 | 1:1ed97958d0f3 | 339 | flag_v=0; |
miruga27 | 1:1ed97958d0f3 | 340 | first_v=true; |
miruga27 | 1:1ed97958d0f3 | 341 | pv=0; |
miruga27 | 1:1ed97958d0f3 | 342 | } |
miruga27 | 1:1ed97958d0f3 | 343 | if(pu<=0) { |
miruga27 | 1:1ed97958d0f3 | 344 | flag_u=0; |
miruga27 | 1:1ed97958d0f3 | 345 | first_v=true; |
miruga27 | 1:1ed97958d0f3 | 346 | pu=0; |
miruga27 | 1:1ed97958d0f3 | 347 | } |
miruga27 | 1:1ed97958d0f3 | 348 | if(py<=0) { |
miruga27 | 1:1ed97958d0f3 | 349 | flag_y=0; |
miruga27 | 1:1ed97958d0f3 | 350 | first_v=true; |
miruga27 | 1:1ed97958d0f3 | 351 | py=0; |
miruga27 | 1:1ed97958d0f3 | 352 | } |
miruga27 | 1:1ed97958d0f3 | 353 | |
miruga27 | 0:5bd441b8ab2d | 354 | |
miruga27 | 1:1ed97958d0f3 | 355 | // Send the reply to the PING string |
miruga27 | 1:1ed97958d0f3 | 356 | strcpy( ( char* )Buffer, ( char* )AckMsg ); |
miruga27 | 1:1ed97958d0f3 | 357 | // We fill the buffer with numbers for the payload |
miruga27 | 1:1ed97958d0f3 | 358 | for( i = 3; i < BufferSize; i++ ) |
miruga27 | 1:1ed97958d0f3 | 359 | { |
miruga27 | 1:1ed97958d0f3 | 360 | Buffer[i] = i - 4; |
miruga27 | 1:1ed97958d0f3 | 361 | } |
miruga27 | 1:1ed97958d0f3 | 362 | wait_ms( 10 ); |
miruga27 | 1:1ed97958d0f3 | 363 | Radio.Send( Buffer, BufferSize ); |
miruga27 | 1:1ed97958d0f3 | 364 | } |
miruga27 | 1:1ed97958d0f3 | 365 | else if( strncmp( ( const char* )Buffer, ( const char* )PaqMsg, 2 ) == 0 ) |
miruga27 | 1:1ed97958d0f3 | 366 | { // A master already exists then become a slave |
miruga27 | 1:1ed97958d0f3 | 367 | |
miruga27 | 1:1ed97958d0f3 | 368 | // debug( "...Receiving data TX \r\n" ); |
miruga27 | 1:1ed97958d0f3 | 369 | led = !led; |
miruga27 | 1:1ed97958d0f3 | 370 | int pointer=0; |
miruga27 | 1:1ed97958d0f3 | 371 | py_ant=py; |
miruga27 | 1:1ed97958d0f3 | 372 | pu_ant=pu; |
miruga27 | 1:1ed97958d0f3 | 373 | pv_ant=pv; |
miruga27 | 1:1ed97958d0f3 | 374 | |
miruga27 | 1:1ed97958d0f3 | 375 | |
miruga27 | 1:1ed97958d0f3 | 376 | for(pointer=2;pointer<BufferSize;pointer+=2){ |
miruga27 | 0:5bd441b8ab2d | 377 | if(flag_y==0) {//se comprueba si se ha cargado en el buffer de transmisión cada una de las componentes |
miruga27 | 0:5bd441b8ab2d | 378 | if(first_y == true) {//EL PRIMER DATO ES LA LONGITUD |
miruga27 | 0:5bd441b8ab2d | 379 | length_y=0xff & Buffer[pointer+1]; |
miruga27 | 0:5bd441b8ab2d | 380 | length_y=length_y<<8; |
miruga27 | 1:1ed97958d0f3 | 381 | length_y=length_y | (Buffer[pointer] & 0xff); |
miruga27 | 0:5bd441b8ab2d | 382 | first_y = false; |
miruga27 | 1:1ed97958d0f3 | 383 | |
miruga27 | 1:1ed97958d0f3 | 384 | acumulador[0]=length_y; |
miruga27 | 1:1ed97958d0f3 | 385 | // debug("length_y = %i \r\n",length_y); |
miruga27 | 0:5bd441b8ab2d | 386 | } |
miruga27 | 0:5bd441b8ab2d | 387 | else{ |
miruga27 | 1:1ed97958d0f3 | 388 | //if(Buffer[pointer]!='\t'){//VERIFY the character is not EOC (end of component y u v) |
miruga27 | 0:5bd441b8ab2d | 389 | |
miruga27 | 0:5bd441b8ab2d | 390 | short int num=0; |
miruga27 | 0:5bd441b8ab2d | 391 | num=0xff & Buffer[pointer+1]; |
miruga27 | 0:5bd441b8ab2d | 392 | num=num<<8; |
miruga27 | 1:1ed97958d0f3 | 393 | num=num | (Buffer[pointer] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 394 | *(temp1+py)=num; |
miruga27 | 1:1ed97958d0f3 | 395 | py++; |
miruga27 | 0:5bd441b8ab2d | 396 | |
miruga27 | 1:1ed97958d0f3 | 397 | // debug("valor py = %i \r\n",py); |
miruga27 | 1:1ed97958d0f3 | 398 | // debug("num = %i \r\n",num); |
miruga27 | 1:1ed97958d0f3 | 399 | if (py >= length_y) { |
miruga27 | 1:1ed97958d0f3 | 400 | flag_y=1; |
miruga27 | 1:1ed97958d0f3 | 401 | //acumulador[0]=py; |
miruga27 | 1:1ed97958d0f3 | 402 | // debug("valor py = %i \r\n",py); |
miruga27 | 1:1ed97958d0f3 | 403 | break; |
miruga27 | 1:1ed97958d0f3 | 404 | } |
miruga27 | 1:1ed97958d0f3 | 405 | |
miruga27 | 1:1ed97958d0f3 | 406 | |
miruga27 | 0:5bd441b8ab2d | 407 | |
miruga27 | 1:1ed97958d0f3 | 408 | //if all bytes of the component are read -> flag raised |
miruga27 | 0:5bd441b8ab2d | 409 | //originally designed with goto. |
miruga27 | 1:1ed97958d0f3 | 410 | |
miruga27 | 1:1ed97958d0f3 | 411 | } |
miruga27 | 0:5bd441b8ab2d | 412 | } |
miruga27 | 0:5bd441b8ab2d | 413 | |
miruga27 | 1:1ed97958d0f3 | 414 | |
miruga27 | 0:5bd441b8ab2d | 415 | else if(flag_u==0){ |
miruga27 | 0:5bd441b8ab2d | 416 | if(first_u == true) { |
miruga27 | 0:5bd441b8ab2d | 417 | length_u=0xff & Buffer[pointer+1]; |
miruga27 | 0:5bd441b8ab2d | 418 | length_u=length_u<<8; |
miruga27 | 1:1ed97958d0f3 | 419 | length_u=length_u | (Buffer[pointer] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 420 | acumulador[1]=length_u; |
miruga27 | 0:5bd441b8ab2d | 421 | first_u = false; |
miruga27 | 1:1ed97958d0f3 | 422 | |
miruga27 | 1:1ed97958d0f3 | 423 | // debug("length_u = %i \r\n",length_u); |
miruga27 | 0:5bd441b8ab2d | 424 | } |
miruga27 | 0:5bd441b8ab2d | 425 | else{ |
miruga27 | 1:1ed97958d0f3 | 426 | |
miruga27 | 0:5bd441b8ab2d | 427 | |
miruga27 | 0:5bd441b8ab2d | 428 | short int num=0; |
miruga27 | 0:5bd441b8ab2d | 429 | num=0xff & Buffer[pointer+1]; |
miruga27 | 0:5bd441b8ab2d | 430 | num=num<<8; |
miruga27 | 1:1ed97958d0f3 | 431 | num=num | (Buffer[pointer] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 432 | *(temp2+pu)=num; |
miruga27 | 1:1ed97958d0f3 | 433 | pu++; |
miruga27 | 1:1ed97958d0f3 | 434 | // debug("valor pu = %i \r\n",pu); |
miruga27 | 1:1ed97958d0f3 | 435 | // debug("num = %i \r\n",num); |
miruga27 | 1:1ed97958d0f3 | 436 | if (pu >= length_u) { |
miruga27 | 1:1ed97958d0f3 | 437 | flag_u=1; |
miruga27 | 1:1ed97958d0f3 | 438 | //acumulador[1]=pu; |
miruga27 | 1:1ed97958d0f3 | 439 | break; |
miruga27 | 1:1ed97958d0f3 | 440 | } |
miruga27 | 0:5bd441b8ab2d | 441 | |
miruga27 | 1:1ed97958d0f3 | 442 | |
miruga27 | 1:1ed97958d0f3 | 443 | |
miruga27 | 0:5bd441b8ab2d | 444 | } |
miruga27 | 0:5bd441b8ab2d | 445 | } |
miruga27 | 0:5bd441b8ab2d | 446 | |
miruga27 | 0:5bd441b8ab2d | 447 | else{ |
miruga27 | 0:5bd441b8ab2d | 448 | if(first_v == true) { |
miruga27 | 0:5bd441b8ab2d | 449 | length_v=0xff & Buffer[pointer+1]; |
miruga27 | 0:5bd441b8ab2d | 450 | length_v=length_v<<8; |
miruga27 | 1:1ed97958d0f3 | 451 | length_v=length_v | (Buffer[pointer] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 452 | acumulador[2]=length_v; |
miruga27 | 0:5bd441b8ab2d | 453 | first_v = false; |
miruga27 | 1:1ed97958d0f3 | 454 | |
miruga27 | 1:1ed97958d0f3 | 455 | // debug("length_v = %i \r\n",length_v); |
miruga27 | 1:1ed97958d0f3 | 456 | |
miruga27 | 1:1ed97958d0f3 | 457 | |
miruga27 | 0:5bd441b8ab2d | 458 | } |
miruga27 | 0:5bd441b8ab2d | 459 | else{ |
miruga27 | 1:1ed97958d0f3 | 460 | //if(Buffer[pointer]!='\n'){//VERIFY the character is not EOT |
miruga27 | 0:5bd441b8ab2d | 461 | |
miruga27 | 0:5bd441b8ab2d | 462 | short int num=0; |
miruga27 | 0:5bd441b8ab2d | 463 | num=0xff & Buffer[pointer+1]; |
miruga27 | 0:5bd441b8ab2d | 464 | num=num<<8; |
miruga27 | 1:1ed97958d0f3 | 465 | num=num | (Buffer[pointer] & 0xff); |
miruga27 | 1:1ed97958d0f3 | 466 | *(temp3+pv)=num; |
miruga27 | 1:1ed97958d0f3 | 467 | pv++; |
miruga27 | 1:1ed97958d0f3 | 468 | // debug("valor pv = %i \r\n",pv); |
miruga27 | 1:1ed97958d0f3 | 469 | // debug("num = %i \r\n",num); |
miruga27 | 1:1ed97958d0f3 | 470 | if (pv >= length_v) { |
miruga27 | 1:1ed97958d0f3 | 471 | flag_v=1; |
miruga27 | 1:1ed97958d0f3 | 472 | //acumulador[2]=pv; |
miruga27 | 1:1ed97958d0f3 | 473 | break;} |
miruga27 | 0:5bd441b8ab2d | 474 | |
miruga27 | 1:1ed97958d0f3 | 475 | |
miruga27 | 1:1ed97958d0f3 | 476 | |
miruga27 | 0:5bd441b8ab2d | 477 | } |
miruga27 | 0:5bd441b8ab2d | 478 | } |
miruga27 | 0:5bd441b8ab2d | 479 | |
miruga27 | 0:5bd441b8ab2d | 480 | |
miruga27 | 0:5bd441b8ab2d | 481 | } |
miruga27 | 0:5bd441b8ab2d | 482 | if(flag_y==1 && flag_u==1 && flag_v ==1){ |
miruga27 | 1:1ed97958d0f3 | 483 | py=0;pu=0;pv=0; |
miruga27 | 1:1ed97958d0f3 | 484 | //py_ant=0;pu_ant=0;pv_ant=0; |
miruga27 | 1:1ed97958d0f3 | 485 | //flag_y=0;flag_u=0;flag_v=0; |
miruga27 | 1:1ed97958d0f3 | 486 | //first_y=true;first_u=true;first_v=true; |
miruga27 | 1:1ed97958d0f3 | 487 | |
miruga27 | 1:1ed97958d0f3 | 488 | // debug( "Packet received (final de imagen)\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 489 | |
miruga27 | 1:1ed97958d0f3 | 490 | State = LOWPOWER; |
miruga27 | 1:1ed97958d0f3 | 491 | //goto end; |
miruga27 | 1:1ed97958d0f3 | 492 | finish=1; |
miruga27 | 1:1ed97958d0f3 | 493 | |
miruga27 | 1:1ed97958d0f3 | 494 | |
miruga27 | 1:1ed97958d0f3 | 495 | } |
miruga27 | 1:1ed97958d0f3 | 496 | |
miruga27 | 0:5bd441b8ab2d | 497 | strcpy( ( char* )Buffer, ( char* )AckMsg ); |
miruga27 | 0:5bd441b8ab2d | 498 | // We fill the buffer with numbers for the payload |
miruga27 | 1:1ed97958d0f3 | 499 | for( i = 4; i < 32; i++ ) |
miruga27 | 0:5bd441b8ab2d | 500 | { |
miruga27 | 0:5bd441b8ab2d | 501 | Buffer[i] = i - 4; |
miruga27 | 0:5bd441b8ab2d | 502 | } |
miruga27 | 0:5bd441b8ab2d | 503 | wait_ms( 10 ); |
miruga27 | 1:1ed97958d0f3 | 504 | |
miruga27 | 1:1ed97958d0f3 | 505 | // debug( "Packet received \r\n" ); |
miruga27 | 1:1ed97958d0f3 | 506 | Radio.Send( Buffer, BufferSize ); |
miruga27 | 1:1ed97958d0f3 | 507 | if(finish==1) { |
miruga27 | 1:1ed97958d0f3 | 508 | py_ant=0;pu_ant=0;pv_ant=0; |
miruga27 | 1:1ed97958d0f3 | 509 | flag_y=0;flag_u=0;flag_v=0; |
miruga27 | 1:1ed97958d0f3 | 510 | first_y=true;first_u=true;first_v=true; |
miruga27 | 1:1ed97958d0f3 | 511 | goto end; |
miruga27 | 1:1ed97958d0f3 | 512 | } |
miruga27 | 1:1ed97958d0f3 | 513 | } |
miruga27 | 1:1ed97958d0f3 | 514 | else // valid reception but not a PAQ or init as expected (Request for send) |
miruga27 | 1:1ed97958d0f3 | 515 | { // Set device as master and start again |
miruga27 | 1:1ed97958d0f3 | 516 | //isMaster = true; |
miruga27 | 1:1ed97958d0f3 | 517 | |
miruga27 | 1:1ed97958d0f3 | 518 | strcpy( ( char* )Buffer, ( char* )AckMsg ); |
miruga27 | 1:1ed97958d0f3 | 519 | // We fill the buffer with numbers for the payload |
miruga27 | 1:1ed97958d0f3 | 520 | for( i = 4; i < 32; i++ ) |
miruga27 | 1:1ed97958d0f3 | 521 | { |
miruga27 | 1:1ed97958d0f3 | 522 | Buffer[i] = i - 4; |
miruga27 | 1:1ed97958d0f3 | 523 | } |
miruga27 | 1:1ed97958d0f3 | 524 | wait_ms( 10 ); |
miruga27 | 1:1ed97958d0f3 | 525 | |
miruga27 | 1:1ed97958d0f3 | 526 | // debug( "RfS received \r\n" ); |
miruga27 | 0:5bd441b8ab2d | 527 | Radio.Send( Buffer, BufferSize ); |
miruga27 | 0:5bd441b8ab2d | 528 | |
miruga27 | 1:1ed97958d0f3 | 529 | } |
miruga27 | 1:1ed97958d0f3 | 530 | |
miruga27 | 0:5bd441b8ab2d | 531 | |
miruga27 | 1:1ed97958d0f3 | 532 | |
miruga27 | 0:5bd441b8ab2d | 533 | } |
miruga27 | 0:5bd441b8ab2d | 534 | } |
miruga27 | 1:1ed97958d0f3 | 535 | State = LOWPOWER; |
miruga27 | 0:5bd441b8ab2d | 536 | break; |
miruga27 | 0:5bd441b8ab2d | 537 | case TX: |
miruga27 | 0:5bd441b8ab2d | 538 | led = !led; |
miruga27 | 0:5bd441b8ab2d | 539 | if( isMaster == true ) |
miruga27 | 0:5bd441b8ab2d | 540 | { |
miruga27 | 0:5bd441b8ab2d | 541 | |
miruga27 | 1:1ed97958d0f3 | 542 | //debug( "Iransmitting packet TX...\r\n" ); |
miruga27 | 0:5bd441b8ab2d | 543 | } |
miruga27 | 0:5bd441b8ab2d | 544 | else |
miruga27 | 0:5bd441b8ab2d | 545 | { |
miruga27 | 1:1ed97958d0f3 | 546 | // debug( "ACK RX...\r\n" ); |
miruga27 | 1:1ed97958d0f3 | 547 | |
miruga27 | 1:1ed97958d0f3 | 548 | } |
miruga27 | 1:1ed97958d0f3 | 549 | Radio.Rx( RX_TIMEOUT_VALUE ); |
miruga27 | 1:1ed97958d0f3 | 550 | State = LOWPOWER; |
miruga27 | 1:1ed97958d0f3 | 551 | break; |
miruga27 | 1:1ed97958d0f3 | 552 | case RX_TIMEOUT: |
miruga27 | 1:1ed97958d0f3 | 553 | if( isMaster == true ) |
miruga27 | 1:1ed97958d0f3 | 554 | { |
miruga27 | 1:1ed97958d0f3 | 555 | |
miruga27 | 1:1ed97958d0f3 | 556 | strcpy( ( char* )Buffer, ( char* )InitMsg ); |
miruga27 | 0:5bd441b8ab2d | 557 | for( i = 4; i < BufferSize; i++ ) |
miruga27 | 0:5bd441b8ab2d | 558 | { |
miruga27 | 0:5bd441b8ab2d | 559 | Buffer[i] = i - 4; |
miruga27 | 0:5bd441b8ab2d | 560 | } |
miruga27 | 0:5bd441b8ab2d | 561 | wait_ms( 10 ); |
miruga27 | 0:5bd441b8ab2d | 562 | Radio.Send( Buffer, BufferSize ); |
miruga27 | 1:1ed97958d0f3 | 563 | //debug("start!\r\n");//empezamos aqui |
miruga27 | 0:5bd441b8ab2d | 564 | } |
miruga27 | 0:5bd441b8ab2d | 565 | else |
miruga27 | 0:5bd441b8ab2d | 566 | { |
miruga27 | 1:1ed97958d0f3 | 567 | // debug("RX_TIMEOUT... \r\n"); |
miruga27 | 1:1ed97958d0f3 | 568 | wait(3); |
miruga27 | 1:1ed97958d0f3 | 569 | /*strcpy( ( char* )Buffer, ( char* )AckMsg ); |
miruga27 | 0:5bd441b8ab2d | 570 | for( i = 4; i < BufferSize; i++ ) |
miruga27 | 0:5bd441b8ab2d | 571 | { |
miruga27 | 0:5bd441b8ab2d | 572 | Buffer[i] = i - 4; |
miruga27 | 0:5bd441b8ab2d | 573 | } |
miruga27 | 0:5bd441b8ab2d | 574 | wait_ms( 10 ); |
miruga27 | 1:1ed97958d0f3 | 575 | Radio.Send( Buffer, BufferSize ); */ |
miruga27 | 1:1ed97958d0f3 | 576 | Radio.Rx( RX_TIMEOUT_VALUE ); |
miruga27 | 0:5bd441b8ab2d | 577 | } |
miruga27 | 0:5bd441b8ab2d | 578 | State = LOWPOWER; |
miruga27 | 0:5bd441b8ab2d | 579 | break; |
miruga27 | 0:5bd441b8ab2d | 580 | case RX_ERROR: |
miruga27 | 1:1ed97958d0f3 | 581 | // We have received a Packet with a CRC error, send reply as if packet was correct |
miruga27 | 0:5bd441b8ab2d | 582 | if( isMaster == true ) |
miruga27 | 0:5bd441b8ab2d | 583 | { |
miruga27 | 1:1ed97958d0f3 | 584 | // Send the next PING frame |
miruga27 | 1:1ed97958d0f3 | 585 | strcpy( ( char* )Buffer, ( char* )InitMsg ); |
miruga27 | 0:5bd441b8ab2d | 586 | for( i = 4; i < BufferSize; i++ ) |
miruga27 | 0:5bd441b8ab2d | 587 | { |
miruga27 | 0:5bd441b8ab2d | 588 | Buffer[i] = i - 4; |
miruga27 | 0:5bd441b8ab2d | 589 | } |
miruga27 | 0:5bd441b8ab2d | 590 | wait_ms( 10 ); |
miruga27 | 0:5bd441b8ab2d | 591 | Radio.Send( Buffer, BufferSize ); |
miruga27 | 0:5bd441b8ab2d | 592 | } |
miruga27 | 0:5bd441b8ab2d | 593 | else |
miruga27 | 0:5bd441b8ab2d | 594 | { |
miruga27 | 1:1ed97958d0f3 | 595 | // Send the next PONG frame |
miruga27 | 1:1ed97958d0f3 | 596 | // debug("CRC ERROR... \r\n"); |
miruga27 | 1:1ed97958d0f3 | 597 | //wait(3); |
miruga27 | 1:1ed97958d0f3 | 598 | |
miruga27 | 1:1ed97958d0f3 | 599 | |
miruga27 | 1:1ed97958d0f3 | 600 | /*while(1){ |
miruga27 | 1:1ed97958d0f3 | 601 | led=!led; |
miruga27 | 1:1ed97958d0f3 | 602 | wait(1); |
miruga27 | 1:1ed97958d0f3 | 603 | }*/ |
miruga27 | 1:1ed97958d0f3 | 604 | const uint8_t RfSY[] = "RfSy"; |
miruga27 | 1:1ed97958d0f3 | 605 | const uint8_t RfSU[] = "RfSu"; |
miruga27 | 1:1ed97958d0f3 | 606 | const uint8_t RfSV[] = "RfSv"; |
miruga27 | 1:1ed97958d0f3 | 607 | |
miruga27 | 1:1ed97958d0f3 | 608 | if(py < acumulador[0]) { |
miruga27 | 1:1ed97958d0f3 | 609 | // debug("sent RFSY message \r\n"); |
miruga27 | 1:1ed97958d0f3 | 610 | strcpy( ( char* )Buffer, ( char* )RfSY ); |
miruga27 | 1:1ed97958d0f3 | 611 | |
miruga27 | 1:1ed97958d0f3 | 612 | |
miruga27 | 1:1ed97958d0f3 | 613 | } |
miruga27 | 1:1ed97958d0f3 | 614 | else if(pu < acumulador[1]) { |
miruga27 | 1:1ed97958d0f3 | 615 | // debug("sent RFSu message \r\n"); |
miruga27 | 1:1ed97958d0f3 | 616 | strcpy( ( char* )Buffer, ( char* )RfSU ); |
miruga27 | 1:1ed97958d0f3 | 617 | |
miruga27 | 1:1ed97958d0f3 | 618 | |
miruga27 | 1:1ed97958d0f3 | 619 | } |
miruga27 | 1:1ed97958d0f3 | 620 | else { |
miruga27 | 1:1ed97958d0f3 | 621 | // debug("sent RFSV message \r\n"); |
miruga27 | 1:1ed97958d0f3 | 622 | strcpy( ( char* )Buffer, ( char* )RfSV ); |
miruga27 | 1:1ed97958d0f3 | 623 | |
miruga27 | 1:1ed97958d0f3 | 624 | |
miruga27 | 1:1ed97958d0f3 | 625 | |
miruga27 | 1:1ed97958d0f3 | 626 | } |
miruga27 | 0:5bd441b8ab2d | 627 | for( i = 4; i < BufferSize; i++ ) |
miruga27 | 0:5bd441b8ab2d | 628 | { |
miruga27 | 0:5bd441b8ab2d | 629 | Buffer[i] = i - 4; |
miruga27 | 0:5bd441b8ab2d | 630 | } |
miruga27 | 0:5bd441b8ab2d | 631 | wait_ms( 10 ); |
miruga27 | 0:5bd441b8ab2d | 632 | Radio.Send( Buffer, BufferSize ); |
miruga27 | 0:5bd441b8ab2d | 633 | } |
miruga27 | 1:1ed97958d0f3 | 634 | State = LOWPOWER; |
miruga27 | 0:5bd441b8ab2d | 635 | break; |
miruga27 | 0:5bd441b8ab2d | 636 | case TX_TIMEOUT: |
miruga27 | 0:5bd441b8ab2d | 637 | Radio.Rx( RX_TIMEOUT_VALUE ); |
miruga27 | 0:5bd441b8ab2d | 638 | State = LOWPOWER; |
miruga27 | 0:5bd441b8ab2d | 639 | break; |
miruga27 | 0:5bd441b8ab2d | 640 | case LOWPOWER: |
miruga27 | 0:5bd441b8ab2d | 641 | break; |
miruga27 | 0:5bd441b8ab2d | 642 | default: |
miruga27 | 0:5bd441b8ab2d | 643 | State = LOWPOWER; |
miruga27 | 0:5bd441b8ab2d | 644 | break; |
miruga27 | 0:5bd441b8ab2d | 645 | } |
miruga27 | 0:5bd441b8ab2d | 646 | } |
miruga27 | 0:5bd441b8ab2d | 647 | end: |
miruga27 | 0:5bd441b8ab2d | 648 | int a; |
miruga27 | 0:5bd441b8ab2d | 649 | } |
miruga27 | 1:1ed97958d0f3 | 650 | |
miruga27 | 0:5bd441b8ab2d | 651 | void OnTxDone( void ) |
miruga27 | 0:5bd441b8ab2d | 652 | { |
miruga27 | 0:5bd441b8ab2d | 653 | Radio.Sleep( ); |
miruga27 | 0:5bd441b8ab2d | 654 | State = TX; |
miruga27 | 0:5bd441b8ab2d | 655 | debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" ); |
miruga27 | 0:5bd441b8ab2d | 656 | } |
miruga27 | 1:1ed97958d0f3 | 657 | |
miruga27 | 0:5bd441b8ab2d | 658 | void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) |
miruga27 | 0:5bd441b8ab2d | 659 | { |
miruga27 | 0:5bd441b8ab2d | 660 | Radio.Sleep( ); |
miruga27 | 0:5bd441b8ab2d | 661 | BufferSize = size; |
miruga27 | 0:5bd441b8ab2d | 662 | memcpy( Buffer, payload, BufferSize ); |
miruga27 | 0:5bd441b8ab2d | 663 | RssiValue = rssi; |
miruga27 | 0:5bd441b8ab2d | 664 | SnrValue = snr; |
miruga27 | 0:5bd441b8ab2d | 665 | State = RX; |
miruga27 | 0:5bd441b8ab2d | 666 | debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" ); |
miruga27 | 0:5bd441b8ab2d | 667 | } |
miruga27 | 1:1ed97958d0f3 | 668 | |
miruga27 | 0:5bd441b8ab2d | 669 | void OnTxTimeout( void ) |
miruga27 | 0:5bd441b8ab2d | 670 | { |
miruga27 | 0:5bd441b8ab2d | 671 | Radio.Sleep( ); |
miruga27 | 0:5bd441b8ab2d | 672 | State = TX_TIMEOUT; |
miruga27 | 1:1ed97958d0f3 | 673 | debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" ); |
miruga27 | 0:5bd441b8ab2d | 674 | } |
miruga27 | 1:1ed97958d0f3 | 675 | |
miruga27 | 0:5bd441b8ab2d | 676 | void OnRxTimeout( void ) |
miruga27 | 0:5bd441b8ab2d | 677 | { |
miruga27 | 0:5bd441b8ab2d | 678 | Radio.Sleep( ); |
miruga27 | 0:5bd441b8ab2d | 679 | Buffer[ BufferSize ] = 0; |
miruga27 | 0:5bd441b8ab2d | 680 | State = RX_TIMEOUT; |
miruga27 | 1:1ed97958d0f3 | 681 | debug_if( DEBUG_MESSAGE, "> OnRxTimeout\n\r" ); |
miruga27 | 0:5bd441b8ab2d | 682 | } |
miruga27 | 1:1ed97958d0f3 | 683 | |
miruga27 | 0:5bd441b8ab2d | 684 | void OnRxError( void ) |
miruga27 | 0:5bd441b8ab2d | 685 | { |
miruga27 | 0:5bd441b8ab2d | 686 | Radio.Sleep( ); |
miruga27 | 0:5bd441b8ab2d | 687 | State = RX_ERROR; |
miruga27 | 0:5bd441b8ab2d | 688 | debug_if( DEBUG_MESSAGE, "> OnRxError\n\r" ); |
miruga27 | 0:5bd441b8ab2d | 689 | } |
miruga27 | 0:5bd441b8ab2d | 690 |