diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index ff302ec80db0825e597634e11f600761d6f94b08..427f69180f7d0030deb279ed1d8941c6a6afe7eb 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -301,6 +301,7 @@ static void* eNB_thread_rxtx( void* param ) { uint16_t packet_type; uint32_t symbol_number=0; + uint32_t symbol_mask, symbol_mask_full; uint8_t seqno=0; @@ -502,10 +503,16 @@ static void* eNB_thread_rxtx( void* param ) { } } else if (PHY_vars_eNB_g[0][proc->CC_id]->node_function == NGFI_RRU_IF4) { /// **** recv_IF4 of txdataF from RCC **** /// + symbol_number = 0; + symbol_mask = 0; + symbol_mask_full = (1<<PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.symbols_per_tti)-1; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 1 ); do { recv_IF4(PHY_vars_eNB_g[0][proc->CC_id], &proc->frame_tx, &proc->subframe_tx, &packet_type, &symbol_number); - } while (symbol_number < PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.symbols_per_tti-1); + symbol_mask = symbol_mask | (1<<symbol_number); + + } while (symbol_mask != symbol_mask_full); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 ); @@ -805,13 +812,12 @@ static void* eNB_thread_asynch_rx( void* param ) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 ); if (packet_type == IF4_PULFFT) { - symbol_mask = symbol_mask | (1<<symbol_number); - + symbol_mask = symbol_mask | (1<<symbol_number); + prach_rx = (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>0) ? 1 : 0; } else if (packet_type == IF4_PRACH) { - // wake up thread for PRACH RX - prach_rx = 1; + prach_rx = 0; } - } while( (symbol_mask != symbol_mask_full) && (prach_rx == 0)); + } while( (symbol_mask != symbol_mask_full) || (prach_rx == 1)); if (proc->first_rx == 0) { if (subframe_rx < proc->subframe_rx+2){ @@ -1122,32 +1128,33 @@ static void* eNB_thread_FH( void* param ) { symbol_mask = 0; symbol_mask_full = (1<<fp->symbols_per_tti)-1; prach_rx = 0; - + do { // Blocking, we need a timeout on this !!!!!!!!!!!!!!!!!!!!!!! VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 1 ); recv_IF4(eNB, &proc->frame_rx, &proc->subframe_rx, &packet_type, &symbol_number); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RECV_IF4, 0 ); if (packet_type == IF4_PULFFT) { - symbol_mask = symbol_mask | (1<<symbol_number); - + symbol_mask = symbol_mask | (1<<symbol_number); + prach_rx = (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>0) ? 1 : 0; } else if (packet_type == IF4_PRACH) { - // wake up thread for PRACH RX - prach_rx = 1; - } - } while( (symbol_mask != symbol_mask_full) && (prach_rx == 0)); + prach_rx = 0; + } + } while( (symbol_mask != symbol_mask_full) || (prach_rx == 1)); if (proc->first_rx == 0) { if (proc->subframe_rx != subframe){ LOG_E(PHY,"Received Timestamp doesn't correspond to the time we think it is (proc->subframe_rx %d, subframe %d)\n",proc->subframe_rx,subframe); - //exit_fun("Exiting"); + exit_fun("Exiting"); } if (proc->frame_rx != frame) { LOG_E(PHY,"Received Timestamp doesn't correspond to the time we think it is (proc->frame_rx %d frame %d)\n",proc->frame_rx,frame); - //exit_fun("Exiting"); + exit_fun("Exiting"); } } else { proc->first_rx = 0; + frame = proc->frame_rx; + subframe = proc->subframe_rx; } VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, proc->timestamp_rx&0xffffffff );