H261 decoder

Dependencies:   SDL_lib2 SX1276Lib mbed

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?

UserRevisionLine numberNew 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