* fix few bugs in oaisim and UL scheduling
* update the CBA operation (non standard feature) * update OTG * add a set of templates for different combination of packet sizes and inter-departure time git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6351 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -50,9 +50,6 @@ enum THREAD_INDEX { OPENAIR_THREAD_INDEX = 0,
|
||||
#define OPENAIR_THREAD_STACK_SIZE 8192 //4096 //RTL_PTHREAD_STACK_MIN*6
|
||||
//#define DLC_THREAD_STACK_SIZE 4096 //DLC stack size
|
||||
|
||||
|
||||
|
||||
|
||||
enum openair_SCHED_STATUS {
|
||||
openair_SCHED_STOPPED=1,
|
||||
openair_SCHED_STARTING,
|
||||
|
||||
@@ -376,7 +376,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
else if (harq_ack[6].send_harq_status == 1)
|
||||
o_ACK[0] = harq_ack[6].ack;
|
||||
status = harq_ack[5].send_harq_status + (harq_ack[6].send_harq_status<<1);
|
||||
printf("Subframe 2, TDD config 3: harq_ack[5] = %d (%d),harq_ack[6] = %d (%d)\n",harq_ack[5].ack,harq_ack[5].send_harq_status,harq_ack[6].ack,harq_ack[6].send_harq_status);
|
||||
//printf("Subframe 2, TDD config 3: harq_ack[5] = %d (%d),harq_ack[6] = %d (%d)\n",harq_ack[5].ack,harq_ack[5].send_harq_status,harq_ack[6].ack,harq_ack[6].send_harq_status);
|
||||
}
|
||||
else if (subframe == 3) { // ACK subframes 7 and 8
|
||||
if (harq_ack[7].send_harq_status == 1) {
|
||||
@@ -388,7 +388,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
o_ACK[0] = harq_ack[8].ack;
|
||||
|
||||
status = harq_ack[7].send_harq_status + (harq_ack[8].send_harq_status<<1);
|
||||
printf("Subframe 3, TDD config 3: harq_ack[7] = %d,harq_ack[8] = %d\n",harq_ack[7].ack,harq_ack[8].ack);
|
||||
//printf("Subframe 3, TDD config 3: harq_ack[7] = %d,harq_ack[8] = %d\n",harq_ack[7].ack,harq_ack[8].ack);
|
||||
//printf("status %d : o_ACK (%d,%d)\n", status,o_ACK[0],o_ACK[1]);
|
||||
}
|
||||
else if (subframe == 4) { // ACK subframes 9 and 0
|
||||
@@ -401,7 +401,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
o_ACK[0] = harq_ack[8].ack;
|
||||
|
||||
status = harq_ack[9].send_harq_status + (harq_ack[0].send_harq_status<<1);
|
||||
printf("Subframe 4, TDD config 3: harq_ack[9] = %d,harq_ack[0] = %d\n",harq_ack[9].ack,harq_ack[0].ack);
|
||||
//printf("Subframe 4, TDD config 3: harq_ack[9] = %d,harq_ack[0] = %d\n",harq_ack[9].ack,harq_ack[0].ack);
|
||||
}
|
||||
else {
|
||||
LOG_E(PHY,"phy_procedures_lte.c: get_ack, illegal subframe %d for tdd_config %d\n",
|
||||
|
||||
@@ -275,7 +275,7 @@ int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame,
|
||||
ulsch_frame,
|
||||
ulsch_subframe);
|
||||
*round = ULSCH_ptr->harq_processes[*harq_pid]->round;
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Checking HARQ, round %d\n",Mod_id,*harq_pid,frame,subframe,*round);
|
||||
LOG_T(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Checking HARQ, round %d\n",Mod_id,*harq_pid,frame,subframe,*round);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
@@ -2990,7 +2990,11 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
//if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50))
|
||||
print_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,0,phy_vars_eNB->lte_frame_parms.N_RB_DL);
|
||||
#endif
|
||||
extract_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode);
|
||||
extract_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,
|
||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,
|
||||
&phy_vars_eNB->eNB_UE_stats[i],
|
||||
phy_vars_eNB->lte_frame_parms.N_RB_DL,
|
||||
&rnti, &access_mode);
|
||||
phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_RI[0];
|
||||
}
|
||||
|
||||
@@ -3622,7 +3626,12 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
//if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50))
|
||||
print_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,0,phy_vars_eNB->lte_frame_parms.N_RB_DL);
|
||||
#endif
|
||||
extract_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode);
|
||||
access_mode = UNKNOWN_ACCESS;
|
||||
extract_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,
|
||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,
|
||||
&phy_vars_eNB->eNB_UE_stats[i],
|
||||
phy_vars_eNB->lte_frame_parms.N_RB_DL,
|
||||
&rnti, &access_mode);
|
||||
phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_RI[0];
|
||||
}
|
||||
/* LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d harq_pid %d resetting the sched_subframeuling_flag, total cba groups %d %d\n",
|
||||
@@ -3688,17 +3697,23 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
harq_pid,
|
||||
NULL);
|
||||
|
||||
phy_vars_eNB->cba_last_reception[i%num_active_cba_groups]=1;//(subframe);
|
||||
phy_vars_eNB->cba_last_reception[i%num_active_cba_groups]+=1;//(subframe);
|
||||
} else {
|
||||
LOG_N(PHY,"[eNB %d] Frame %d subframe %d : CBA collision detected for UE%d for group %d, set the SR for this UE \n ",
|
||||
if (phy_vars_eNB->cba_last_reception[i%num_active_cba_groups] == 1 )
|
||||
LOG_N(PHY,"[eNB%d] Frame %d subframe %d : first CBA collision detected \n ",
|
||||
phy_vars_eNB->Mod_id,frame,subframe);
|
||||
|
||||
LOG_N(PHY,"[eNB%d] Frame %d subframe %d : CBA collision set SR for UE %d in group %d \n ",
|
||||
phy_vars_eNB->Mod_id,frame,subframe,
|
||||
i,i%num_active_cba_groups );
|
||||
phy_vars_eNB->cba_last_reception[i%num_active_cba_groups],i%num_active_cba_groups );
|
||||
|
||||
phy_vars_eNB->cba_last_reception[i%num_active_cba_groups]+=1;
|
||||
|
||||
mac_xface->SR_indication(phy_vars_eNB->Mod_id,
|
||||
phy_vars_eNB->CC_id,
|
||||
frame,
|
||||
phy_vars_eNB->dlsch_eNB[i][0]->rnti,subframe);
|
||||
}
|
||||
|
||||
}
|
||||
} // ULSCH CBA not in error
|
||||
}
|
||||
@@ -3941,9 +3956,10 @@ void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **phy_vars_eNB,u
|
||||
|
||||
phy_vars_eNB[CC_id]->proc[subframe].frame_tx++;
|
||||
phy_vars_eNB[CC_id]->proc[subframe].frame_rx++;
|
||||
if (phy_vars_eNB[CC_id]->proc[subframe].frame_tx==1024)
|
||||
|
||||
if (phy_vars_eNB[CC_id]->proc[subframe].frame_tx==MAX_FRAME_NUMBER) // defined in impl_defs_top.h
|
||||
phy_vars_eNB[CC_id]->proc[subframe].frame_tx=0;
|
||||
if (phy_vars_eNB[CC_id]->proc[subframe].frame_rx==1024)
|
||||
if (phy_vars_eNB[CC_id]->proc[subframe].frame_rx==MAX_FRAME_NUMBER)
|
||||
phy_vars_eNB[CC_id]->proc[subframe].frame_rx=0;
|
||||
}
|
||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE,0);
|
||||
|
||||
@@ -950,58 +950,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
phy_vars_ue->sr[subframe_tx]=0;
|
||||
}
|
||||
} // ULSCH is active
|
||||
else if ((phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag == 1) &&
|
||||
(phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status == CBA_ACTIVE)) {
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
// phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status= IDLE;
|
||||
first_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->first_rb;
|
||||
nb_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb;
|
||||
input_buffer_length = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS/8;
|
||||
access_mode=CBA_ACCESS;
|
||||
|
||||
LOG_I(PHY,"[UE %d] Frame %d, subframe %d: CBA num dci %d \n",
|
||||
Mod_id,frame_tx,subframe_tx,
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->num_cba_dci[subframe_tx]);
|
||||
|
||||
mac_xface->ue_get_sdu(Mod_id,
|
||||
CC_id,
|
||||
frame_tx,
|
||||
subframe_tx,
|
||||
eNB_id,
|
||||
ulsch_input_buffer,
|
||||
input_buffer_length,
|
||||
&access_mode);
|
||||
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->num_cba_dci[subframe_tx]=0;
|
||||
|
||||
if (access_mode > UNKNOWN_ACCESS){
|
||||
|
||||
if (abstraction_flag==0) {
|
||||
if (ulsch_encoding(ulsch_input_buffer,
|
||||
phy_vars_ue,
|
||||
harq_pid,
|
||||
eNB_id,
|
||||
phy_vars_ue->transmission_mode[eNB_id],0,
|
||||
0)!=0) { // Nbundled, to be updated!!!!
|
||||
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
|
||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
stop_meas(&phy_vars_ue->phy_proc_tx);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#ifdef PHY_ABSTRACTION
|
||||
else {
|
||||
ulsch_encoding_emul(ulsch_input_buffer,phy_vars_ue,eNB_id,harq_pid,0);
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status= IDLE;
|
||||
//reset_cba_uci(phy_vars_ue->ulsch_ue[eNB_id]->o);
|
||||
LOG_N(PHY,"[UE %d] Frame %d, subframe %d: CBA transmission cancelled or postponed\n",
|
||||
Mod_id, frame_tx,subframe_tx);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef PUCCH
|
||||
else if (phy_vars_ue->UE_mode[eNB_id] == PUSCH){ // check if we need to use PUCCH 1a/1b
|
||||
// debug_LOG_D(PHY,"[UE%d] Frame %d, subframe %d: Checking for PUCCH 1a/1b\n",Mod_id,frame_tx,subframe_tx);
|
||||
@@ -1174,6 +1123,58 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
}
|
||||
#endif // PUCCH
|
||||
|
||||
#ifdef CBA
|
||||
if ((phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag >= 1) &&
|
||||
(phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status == CBA_ACTIVE)) {
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag=0; //-=1
|
||||
// phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status= IDLE;
|
||||
first_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->first_rb;
|
||||
nb_rb = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb;
|
||||
//cba_mcs=phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->mcs;
|
||||
input_buffer_length = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS/8;
|
||||
access_mode=CBA_ACCESS;
|
||||
|
||||
LOG_I(PHY,"[UE %d] Frame %d, subframe %d: CBA num dci %d\n",
|
||||
Mod_id,frame_tx,subframe_tx,
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->num_cba_dci[subframe_tx]);
|
||||
|
||||
mac_xface->ue_get_sdu(Mod_id,
|
||||
CC_id,
|
||||
frame_tx,
|
||||
subframe_tx,
|
||||
eNB_id,
|
||||
ulsch_input_buffer,
|
||||
input_buffer_length,
|
||||
&access_mode);
|
||||
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->num_cba_dci[subframe_tx]=0;
|
||||
|
||||
if (access_mode > UNKNOWN_ACCESS){
|
||||
|
||||
if (abstraction_flag==0) {
|
||||
if (ulsch_encoding(ulsch_input_buffer,
|
||||
phy_vars_ue,
|
||||
harq_pid,
|
||||
eNB_id,
|
||||
phy_vars_ue->transmission_mode[eNB_id],0,
|
||||
0)!=0) { // Nbundled, to be updated!!!!
|
||||
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
#ifdef PHY_ABSTRACTION
|
||||
else {
|
||||
ulsch_encoding_emul(ulsch_input_buffer,phy_vars_ue,eNB_id,harq_pid,0);
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->status= IDLE;
|
||||
//reset_cba_uci(phy_vars_ue->ulsch_ue[eNB_id]->o);
|
||||
LOG_N(PHY,"[UE %d] Frame %d, subframe %d: CBA transmission cancelled or postponed\n",
|
||||
Mod_id, frame_tx,subframe_tx);
|
||||
}
|
||||
}
|
||||
#endif // end CBA
|
||||
|
||||
if (abstraction_flag == 0) {
|
||||
if (generate_ul_signal == 1 ) {
|
||||
|
||||
Reference in New Issue
Block a user