mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
Compare commits
20 Commits
develop
...
testing-cm
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb79eca65b | ||
|
|
233e97c54c | ||
|
|
8985d4c97c | ||
|
|
6165f97c85 | ||
|
|
bb1ade9784 | ||
|
|
792e4ad50b | ||
|
|
c914b6bb1a | ||
|
|
b6c109d76a | ||
|
|
995ffc9c02 | ||
|
|
75b32aad87 | ||
|
|
ebbdf1e4ae | ||
|
|
0870e4bf85 | ||
|
|
719bbfc0a5 | ||
|
|
de02814304 | ||
|
|
551a272192 | ||
|
|
a0ae0c0775 | ||
|
|
b6465619b7 | ||
|
|
d03d70a60b | ||
|
|
ac3faf6a2f | ||
|
|
cd38e36013 |
@@ -52,7 +52,7 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
|
||||
x2 = frame_parms->Nid_cell/30;
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("[PHY] GroupHop:");
|
||||
printf("[PHY] GroupHop:");
|
||||
#endif
|
||||
|
||||
for (ns=0; ns<20; ns++) {
|
||||
@@ -68,12 +68,12 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[ns]);
|
||||
printf("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[ns]);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("\n");
|
||||
printf("\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ void generate_seqhop(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
|
||||
s = lte_gold_generic(&x1,&x2,reset);
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("[PHY] SeqHop:");
|
||||
printf("[PHY] SeqHop:");
|
||||
#endif
|
||||
|
||||
for (ns=0; ns<20; ns++) {
|
||||
@@ -100,12 +100,12 @@ void generate_seqhop(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[ns] = 0;
|
||||
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[ns]);
|
||||
printf("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[ns]);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("\n");
|
||||
printf("\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
|
||||
x2 = (32*(uint32_t)(frame_parms->Nid_cell/30)) + fss_pusch;
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("[PHY] nPRS:");
|
||||
printf("[PHY] nPRS:");
|
||||
#endif
|
||||
|
||||
for (n=0; n<(20*Nsymb_UL); n++) { //loop over total number of bytes to generate
|
||||
@@ -137,7 +137,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
if (n == next) {
|
||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[ns] = ((uint8_t*)&s)[next&3];
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[ns]);
|
||||
printf("%d.",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[ns]);
|
||||
#endif
|
||||
ns++;
|
||||
next+=Nsymb_UL;
|
||||
@@ -145,7 +145,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GROUPHOP
|
||||
msg("\n");
|
||||
printf("\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -1016,7 +1016,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
|
||||
#if defined(EXMIMO) || defined(OAI_USRP)
|
||||
int j;
|
||||
int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_ue->lte_frame_parms.samples_per_tti;
|
||||
LOG_D( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
|
||||
LOG_I( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
|
||||
|
||||
for (i=prach_start,j=0; i<min(phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,prach_start+prach_len); i++,j++) {
|
||||
((int16_t*)phy_vars_ue->lte_ue_common_vars.txdata[0])[2*i] = prach[2*j]<<4;
|
||||
|
||||
@@ -178,6 +178,231 @@ int generate_eNB_ulsch_params_from_rar(unsigned char *rar_pdu,
|
||||
|
||||
int8_t delta_PUSCH_msg2[8] = {-6,-4,-2,0,2,4,6,8};
|
||||
|
||||
|
||||
#define CMW
|
||||
#ifdef CMW
|
||||
int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
|
||||
unsigned char eNB_id )
|
||||
{
|
||||
|
||||
int bi_flag=0;
|
||||
int j_rapdi_index=0;
|
||||
int i,j;
|
||||
// RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)rar_pdu;
|
||||
uint8_t transmission_mode = phy_vars_ue->transmission_mode[eNB_id];
|
||||
//unsigned char *rar_pdu = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b;
|
||||
unsigned char *dlsch_buffer = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b;
|
||||
unsigned char subframe = phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id];
|
||||
LTE_UE_ULSCH_t *ulsch = phy_vars_ue->ulsch_ue[eNB_id];
|
||||
PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements;
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
|
||||
// int current_dlsch_cqi = phy_vars_ue->current_dlsch_cqi[eNB_id];
|
||||
|
||||
//uint8_t *rar = (uint8_t *)(rar_pdu+1);
|
||||
uint8_t harq_pid = subframe2harq_pid(frame_parms,phy_vars_ue->frame_tx,subframe);
|
||||
uint16_t rballoc;
|
||||
uint8_t cqireq;
|
||||
uint16_t *RIV2nb_rb_LUT, *RIV2first_rb_LUT;
|
||||
uint16_t RIV_max = 0;
|
||||
|
||||
LOG_I(PHY,"[eNB][RAPROC] Frame %d: generate_ue_ulsch_params_from_rar: subframe %d (harq_pid %d)\n",phy_vars_ue->frame_tx,subframe,harq_pid);
|
||||
|
||||
|
||||
for( i=0; i < 8; i++ ){
|
||||
if( ((dlsch_buffer[i]&0x80)>>7) ){
|
||||
if( i==0 && ((dlsch_buffer[i]&0x40)>>6)==0 ){ //BI sub-header
|
||||
/*LOG_I(MAC,"[UE %d][RAPROC] MAC sub-header(%d): E(%d)/T(%d)/R(%d)/R(%d)/BI(%d)\n",
|
||||
module_idP,i,
|
||||
((dlsch_buffer[i]&0x80)>>7), //E
|
||||
((dlsch_buffer[i]&0x40)>>6), //T
|
||||
((dlsch_buffer[i]&0x20)>>5), //R
|
||||
((dlsch_buffer[i]&0x10)>>4), //R
|
||||
((dlsch_buffer[i]&0x0F))); //BI*/
|
||||
bi_flag=1;
|
||||
}else{ //Regular RAPID
|
||||
/*LOG_I(MAC,"[UE %d][RAPROC] MAC sub-header(%d): E(%d)/T(%d)/RAPID(%d)\n",
|
||||
module_idP,i,
|
||||
((dlsch_buffer[i]&0x80)>>7), //E
|
||||
((dlsch_buffer[i]&0x40)>>6), //T
|
||||
((dlsch_buffer[i]&0x3f))); //RAPID*/
|
||||
}
|
||||
}else{
|
||||
/*LOG_I(MAC,"[UE %d][RAPROC] MAC sub-header(%d): E(%d)/T(%d)/RAPID(%d)\n",
|
||||
module_idP,i,
|
||||
((dlsch_buffer[i]&0x80)>>7), //E
|
||||
((dlsch_buffer[i]&0x40)>>6), //T
|
||||
((dlsch_buffer[i]&0x3f))); //RAPID
|
||||
rarh->RAPID = ((dlsch_buffer[i]&0x3f));*/
|
||||
j_rapdi_index=i++;
|
||||
if(bi_flag)
|
||||
j_rapdi_index--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//i++;
|
||||
/*for(j=0; j < i*6; j+=6 ){
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->Timing_Advance_Command %d\n",module_idP,j/6,(((uint16_t)(dlsch_buffer[i+j]&0x7f))<<4) + (dlsch_buffer[i+j+1]>>4));
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->rballoc %d\n",module_idP,j/6,(((uint16_t)(dlsch_buffer[i+j+1]&7))<<7)|(dlsch_buffer[i+j+2]>>1));
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->mcs %d\n",module_idP,j/6,((dlsch_buffer[i+j+2]&1)<<3)|(dlsch_buffer[i+j+3]>>5));
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->TPC %d\n",module_idP,j/6,(dlsch_buffer[i+j+3]>>3)&7);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->cqi %d\n",module_idP,j/6,dlsch_buffer[i+j+3]&1);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->t_crnti %x\n",module_idP,j/6,(uint16_t)dlsch_buffer[i+j+5]+(dlsch_buffer[i+j+4]<<8));
|
||||
}*/
|
||||
|
||||
|
||||
LOG_W(MAC,"[UE %d][RAPROC] Processing RAR PDU: TA(%d),rballoc(%d),mcs(%d),TPC(%d),cqi(%d),t_cnrti(%x)\n",phy_vars_ue->Mod_id,
|
||||
(((uint16_t)(dlsch_buffer[i+j_rapdi_index*6]&0x7f))<<4) + (dlsch_buffer[i+j_rapdi_index*6+1]>>4),
|
||||
(((uint16_t)(dlsch_buffer[i+j_rapdi_index*6+1]&7))<<7)|(dlsch_buffer[i+j_rapdi_index*6+2]>>1),
|
||||
((dlsch_buffer[i+j_rapdi_index*6+2]&1)<<3)|(dlsch_buffer[i+j_rapdi_index*6+3]>>5),
|
||||
(dlsch_buffer[i+j_rapdi_index*6+3]>>3)&7,
|
||||
dlsch_buffer[i+j_rapdi_index*6+3]&1,
|
||||
(uint16_t)dlsch_buffer[i+j_rapdi_index*6+5]+(dlsch_buffer[i+j_rapdi_index*6+4]<<8));
|
||||
|
||||
|
||||
switch (frame_parms->N_RB_DL) {
|
||||
case 6:
|
||||
RIV2nb_rb_LUT = &RIV2nb_rb_LUT6[0];
|
||||
RIV2first_rb_LUT = &RIV2first_rb_LUT6[0];
|
||||
RIV_max = RIV_max6;
|
||||
break;
|
||||
|
||||
case 25:
|
||||
RIV2nb_rb_LUT = &RIV2nb_rb_LUT25[0];
|
||||
RIV2first_rb_LUT = &RIV2first_rb_LUT25[0];
|
||||
RIV_max = RIV_max25;
|
||||
break;
|
||||
|
||||
case 50:
|
||||
RIV2nb_rb_LUT = &RIV2nb_rb_LUT50[0];
|
||||
RIV2first_rb_LUT = &RIV2first_rb_LUT50[0];
|
||||
RIV_max = RIV_max50;
|
||||
break;
|
||||
|
||||
case 100:
|
||||
RIV2nb_rb_LUT = &RIV2nb_rb_LUT100[0];
|
||||
RIV2first_rb_LUT = &RIV2first_rb_LUT100[0];
|
||||
RIV_max = RIV_max100;
|
||||
break;
|
||||
|
||||
default:
|
||||
DevParam(frame_parms->N_RB_DL, eNB_id, harq_pid);
|
||||
break;
|
||||
}
|
||||
|
||||
printf("RIV_max %d\n",RIV_max);
|
||||
|
||||
|
||||
//ulsch->harq_processes[harq_pid]->TPC = (rar[3]>>3)&7;//rar->TPC;
|
||||
ulsch->harq_processes[harq_pid]->TPC = (dlsch_buffer[i+j_rapdi_index*6+3]>>3)&7;//rar->TPC;
|
||||
|
||||
//rballoc = (((uint16_t)(rar[1]&7))<<7)|(rar[2]>>1);
|
||||
rballoc = (((uint16_t)(dlsch_buffer[i+j_rapdi_index*6+1]&7))<<7)|(dlsch_buffer[i+j_rapdi_index*6+2]>>1);
|
||||
//cqireq=rar[3]&1;
|
||||
cqireq=dlsch_buffer[i+j_rapdi_index*6+3]&1;
|
||||
|
||||
if (rballoc>RIV_max) {
|
||||
printf("rar_tools.c: ERROR: rb_alloc (%x) > RIV_max\n",rballoc);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
ulsch->harq_processes[harq_pid]->first_rb = RIV2first_rb_LUT[rballoc];
|
||||
ulsch->harq_processes[harq_pid]->nb_rb = RIV2nb_rb_LUT[rballoc];
|
||||
|
||||
//ulsch->harq_processes[harq_pid]->first_rb = rballoc%25;
|
||||
//ulsch->harq_processes[harq_pid]->nb_rb = rballoc/25+1;
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->nb_rb ==0){
|
||||
printf("Error\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
ulsch->power_offset = ue_power_offsets[ulsch->harq_processes[harq_pid]->nb_rb];
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->nb_rb > 4) {
|
||||
printf("rar_tools.c: unlikely rb count for RAR grant : nb_rb > 4\n");
|
||||
//return(-1);
|
||||
}
|
||||
|
||||
// ulsch->harq_processes[harq_pid]->Ndi = 1;
|
||||
if (ulsch->harq_processes[harq_pid]->round == 0)
|
||||
ulsch->harq_processes[harq_pid]->status = ACTIVE;
|
||||
|
||||
if (cqireq==1) {
|
||||
ulsch->O_RI = 1;
|
||||
|
||||
if (meas->rank[eNB_id] == 1) {
|
||||
ulsch->uci_format = wideband_cqi_rank2_2A;
|
||||
ulsch->O = sizeof_wideband_cqi_rank2_2A_5MHz;
|
||||
ulsch->o_RI[0] = 1;
|
||||
} else {
|
||||
ulsch->uci_format = wideband_cqi_rank1_2A;
|
||||
ulsch->O = sizeof_wideband_cqi_rank1_2A_5MHz;
|
||||
ulsch->o_RI[0] = 0;
|
||||
}
|
||||
|
||||
ulsch->uci_format = HLC_subband_cqi_nopmi;
|
||||
fill_CQI(ulsch,meas,eNB_id,0,phy_vars_ue->lte_frame_parms.N_RB_DL,0, transmission_mode,phy_vars_ue->sinr_eff);
|
||||
|
||||
if (((phy_vars_ue->frame_tx % 100) == 0) || (phy_vars_ue->frame_tx < 10))
|
||||
print_CQI(ulsch->o,ulsch->uci_format,eNB_id,phy_vars_ue->lte_frame_parms.N_RB_DL);
|
||||
} else {
|
||||
ulsch->O_RI = 0;
|
||||
ulsch->O = 0;
|
||||
}
|
||||
|
||||
ulsch->harq_processes[harq_pid]->O_ACK = 0;//2;
|
||||
|
||||
ulsch->beta_offset_cqi_times8 = 18;
|
||||
ulsch->beta_offset_ri_times8 = 10;
|
||||
ulsch->beta_offset_harqack_times8 = 16;
|
||||
|
||||
ulsch->Nsymb_pusch = 12-(frame_parms->Ncp<<1);
|
||||
//ulsch->rnti = (((uint16_t)rar[4])<<8)+rar[5]; //rar->t_crnti;
|
||||
ulsch->rnti = (uint16_t)dlsch_buffer[i+j_rapdi_index*6+5]+(dlsch_buffer[i+j_rapdi_index*6+4]<<8); //rar->t_crnti;
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->round == 0) {
|
||||
ulsch->harq_processes[harq_pid]->status = ACTIVE;
|
||||
ulsch->harq_processes[harq_pid]->rvidx = 0;
|
||||
//ulsch->harq_processes[harq_pid]->mcs = ((rar[2]&1)<<3)|(rar[3]>>5);
|
||||
ulsch->harq_processes[harq_pid]->mcs = ((dlsch_buffer[i+j_rapdi_index*6+2]&1)<<3)|(dlsch_buffer[i+j_rapdi_index*6+3]>>5);
|
||||
//ulsch->harq_processes[harq_pid]->TPC = (rar[3]>>2)&7;
|
||||
ulsch->harq_processes[harq_pid]->TPC = (dlsch_buffer[i+j_rapdi_index*6+3]>>3)&7;
|
||||
//ulsch->harq_processes[harq_pid]->TBS = dlsch_tbs25[ulsch->harq_processes[harq_pid]->mcs][ulsch->harq_processes[harq_pid]->nb_rb-1];
|
||||
ulsch->harq_processes[harq_pid]->TBS = TBStable[get_I_TBS_UL(ulsch->harq_processes[harq_pid]->mcs)][ulsch->harq_processes[harq_pid]->nb_rb-1];
|
||||
ulsch->harq_processes[harq_pid]->Msc_initial = 12*ulsch->harq_processes[harq_pid]->nb_rb;
|
||||
ulsch->harq_processes[harq_pid]->Nsymb_initial = 9;
|
||||
ulsch->harq_processes[harq_pid]->round = 0;
|
||||
} else {
|
||||
ulsch->harq_processes[harq_pid]->rvidx = 0;
|
||||
ulsch->harq_processes[harq_pid]->round++;
|
||||
}
|
||||
|
||||
// initialize power control based on PRACH power
|
||||
ulsch->f_pusch = delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC] +
|
||||
mac_xface->get_deltaP_rampup(phy_vars_ue->Mod_id,phy_vars_ue->CC_id);
|
||||
LOG_D(PHY,"[UE %d][PUSCH PC] Initializing f_pusch to %d dB, TPC %d (delta_PUSCH_msg2 %d dB), deltaP_rampup %d dB\n",
|
||||
phy_vars_ue->Mod_id,ulsch->f_pusch,ulsch->harq_processes[harq_pid]->TPC,delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC],
|
||||
mac_xface->get_deltaP_rampup(phy_vars_ue->Mod_id,phy_vars_ue->CC_id));
|
||||
|
||||
|
||||
//#ifdef DEBUG_RAR
|
||||
printf("ulsch ra (UE): harq_pid %d\n",harq_pid);
|
||||
printf("ulsch ra (UE): NBRB %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
|
||||
printf("ulsch ra (UE): first_rb %x\n",ulsch->harq_processes[harq_pid]->first_rb);
|
||||
printf("ulsch ra (UE): nb_rb %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
|
||||
printf("ulsch ra (UE): round %d\n",ulsch->harq_processes[harq_pid]->round);
|
||||
printf("ulsch ra (UE): TBS %d\n",ulsch->harq_processes[harq_pid]->TBS);
|
||||
printf("ulsch ra (UE): mcs %d\n",ulsch->harq_processes[harq_pid]->mcs);
|
||||
printf("ulsch ra (UE): TPC %d\n",ulsch->harq_processes[harq_pid]->TPC);
|
||||
printf("ulsch ra (UE): O %d\n",ulsch->O);
|
||||
printf("ulsch ra (UE): ORI %d\n",ulsch->O_RI);
|
||||
//#endif
|
||||
return(-1);
|
||||
return(0);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
|
||||
unsigned char eNB_id )
|
||||
{
|
||||
@@ -198,7 +423,7 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
|
||||
uint16_t *RIV2nb_rb_LUT, *RIV2first_rb_LUT;
|
||||
uint16_t RIV_max = 0;
|
||||
|
||||
LOG_D(PHY,"[eNB][RAPROC] Frame %d: generate_ue_ulsch_params_from_rar: subframe %d (harq_pid %d)\n",phy_vars_ue->frame_tx,subframe,harq_pid);
|
||||
LOG_I(PHY,"[eNB][RAPROC] Frame %d: generate_ue_ulsch_params_from_rar: subframe %d (harq_pid %d)\n",phy_vars_ue->frame_tx,subframe,harq_pid);
|
||||
|
||||
switch (frame_parms->N_RB_DL) {
|
||||
case 6:
|
||||
@@ -238,20 +463,22 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
|
||||
cqireq=rar[3]&1;
|
||||
|
||||
if (rballoc>RIV_max) {
|
||||
msg("rar_tools.c: ERROR: rb_alloc (%x) > RIV_max\n",rballoc);
|
||||
return(-1);
|
||||
printf("rar_tools.c: ERROR: rb_alloc (%x) > RIV_max\n",rballoc);
|
||||
//return(-1);
|
||||
}
|
||||
|
||||
ulsch->harq_processes[harq_pid]->first_rb = RIV2first_rb_LUT[rballoc];
|
||||
ulsch->harq_processes[harq_pid]->nb_rb = RIV2nb_rb_LUT[rballoc];
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->nb_rb ==0)
|
||||
if (ulsch->harq_processes[harq_pid]->nb_rb ==0){
|
||||
printf("Error\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
ulsch->power_offset = ue_power_offsets[ulsch->harq_processes[harq_pid]->nb_rb];
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->nb_rb > 4) {
|
||||
msg("rar_tools.c: unlikely rb count for RAR grant : nb_rb > 3\n");
|
||||
printf("rar_tools.c: unlikely rb count for RAR grant : nb_rb > 3\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -329,3 +556,6 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
|
||||
return(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -94,7 +94,7 @@ static inline void cmacc(__m128i a,__m128i b, __m128i *re32, __m128i *im32)
|
||||
cmac_tmp = _mm_sign_epi16(b,*(__m128i*)reflip);
|
||||
// cmac_tmp = _mm_shufflelo_epi16(b,_MM_SHUFFLE(2,3,0,1));
|
||||
// cmac_tmp = _mm_shufflehi_epi16(cmac_tmp,_MM_SHUFFLE(2,3,0,1));
|
||||
cmac_tmp = _mm_shuffle_epi8(b,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
|
||||
cmac_tmp = _mm_shuffle_epi8(cmac_tmp,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
|
||||
cmac_tmp_im32 = _mm_madd_epi16(cmac_tmp,a);
|
||||
|
||||
*re32 = _mm_add_epi32(*re32,cmac_tmp_re32);
|
||||
|
||||
@@ -781,6 +781,21 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
|
||||
|
||||
|
||||
LOG_I(PHY,
|
||||
"[UE %d][PUSCH %d] Frame %d subframe %d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d\n",
|
||||
Mod_id,harq_pid,frame_tx,subframe_tx,
|
||||
first_rb,nb_rb,
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round,
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->mcs,
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->rvidx,
|
||||
(frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift+
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->n_DMRS2+
|
||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[slot_tx])%12,
|
||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->n_DMRS2,
|
||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[slot_tx],
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[0],phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[1],
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->O_ACK);
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,
|
||||
"[UE %d][PUSCH %d] Frame %d subframe %d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d\n",
|
||||
@@ -977,7 +992,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
|
||||
Mod_id,harq_pid,frame_tx,subframe_tx,phy_vars_ue->tx_power_dBm,phy_vars_ue->tx_power_max_dBm, tx_amp);
|
||||
start_meas(&phy_vars_ue->ulsch_modulation_stats);
|
||||
ulsch_modulation(phy_vars_ue->lte_ue_common_vars.txdataF,
|
||||
@@ -1238,8 +1253,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
#else //this is the normal case
|
||||
ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-phy_vars_ue->N_TA_offset; //-phy_vars_ue->timing_advance;
|
||||
#endif //else EXMIMO
|
||||
if ((frame_tx%100) == 0)
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
|
||||
if (generate_ul_signal == 1 ) {
|
||||
|
||||
LOG_I(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
|
||||
Mod_id,frame_tx,subframe_tx,
|
||||
ulsch_start,
|
||||
phy_vars_ue->rx_offset,
|
||||
@@ -1247,11 +1263,6 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
phy_vars_ue->timing_advance,
|
||||
phy_vars_ue->N_TA_offset);
|
||||
|
||||
|
||||
if (generate_ul_signal == 1 ) {
|
||||
|
||||
|
||||
|
||||
start_meas(&phy_vars_ue->ofdm_mod_stats);
|
||||
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
@@ -1282,12 +1293,12 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
&phy_vars_ue->lte_ue_common_vars.txdataF[0][nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe],
|
||||
nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe,
|
||||
phy_vars_ue->lte_ue_common_vars.txdataF[0]);
|
||||
write_output("txsigF8.m","txsF8", &phy_vars_ue->lte_ue_common_vars.txdataF[0][nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe],
|
||||
phy_vars_ue->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
|
||||
write_output("txsig8.m","txs8", &phy_vars_ue->lte_ue_common_vars.txdata[0][phy_vars_ue->lte_frame_parms.samples_per_tti*subframe],
|
||||
phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
|
||||
}
|
||||
*/
|
||||
|
||||
#ifndef OFDMA_ULSCH
|
||||
#if defined(EXMIMO) || defined(OAI_USRP)
|
||||
apply_7_5_kHz(phy_vars_ue,dummy_tx_buffer,0);
|
||||
@@ -1296,12 +1307,6 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
apply_7_5_kHz(phy_vars_ue,&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],0);
|
||||
apply_7_5_kHz(phy_vars_ue,&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],1);
|
||||
#endif
|
||||
/*
|
||||
if (subframe_tx == 8) {
|
||||
write_output("txsig8_mod.m","txs8_mod", &phy_vars_ue->lte_ue_common_vars.txdata[0][phy_vars_ue->lte_frame_parms.samples_per_tti*subframe],
|
||||
phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP)
|
||||
@@ -1330,9 +1335,19 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
#endif
|
||||
#endif
|
||||
|
||||
} //nb_antennas_tx
|
||||
} //nb_antennas_tx
|
||||
|
||||
stop_meas(&phy_vars_ue->ofdm_mod_stats);
|
||||
|
||||
/*
|
||||
write_output("/tmp/txsigF.m","txsF", &phy_vars_ue->lte_ue_common_vars.txdataF[0][nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*subframe_tx],
|
||||
phy_vars_ue->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
write_output("/tmp/txsig.m","txs", &phy_vars_ue->lte_ue_common_vars.txdata[0][0],
|
||||
10*phy_vars_ue->lte_frame_parms.samples_per_tti,1,1);
|
||||
|
||||
mac_xface->macphy_exit("signals written to /tmp\n");
|
||||
*/
|
||||
|
||||
stop_meas(&phy_vars_ue->ofdm_mod_stats);
|
||||
} // generate_ul_signal == 1
|
||||
else { // no uplink so clear signal buffer instead
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
@@ -1439,7 +1454,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
#endif
|
||||
}
|
||||
|
||||
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, subframe %d: Generating PRACH (eNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB), l3msg \n",
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, subframe %d: Generating PRACH (eNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB), l3msg \n",
|
||||
Mod_id,frame_tx,subframe_tx,eNB_id,
|
||||
phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex,
|
||||
phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id),
|
||||
@@ -2232,10 +2247,10 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
|
||||
|
||||
else if ((phy_vars_ue->prach_resources[eNB_id]) &&
|
||||
(dci_alloc_rx[i].rnti == phy_vars_ue->prach_resources[eNB_id]->ra_RNTI) &&
|
||||
(dci_alloc_rx[i].format == format1A)) {
|
||||
(dci_alloc_rx[i].format == format1A || dci_alloc_rx[i].format == format1C)) {
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",phy_vars_ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i);
|
||||
LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1%s, dci_cnt %d\n",phy_vars_ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
|
||||
|
||||
//if (((frame_rx%100) == 0) || (frame_rx < 20))
|
||||
//dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
|
||||
@@ -2255,9 +2270,9 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
|
||||
|
||||
if (generate_ue_dlsch_params_from_dci(frame_rx,
|
||||
subframe_rx,
|
||||
(DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu,
|
||||
(void*)&dci_alloc_rx[i].dci_pdu,//(DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu,
|
||||
phy_vars_ue->prach_resources[eNB_id]->ra_RNTI,
|
||||
format1A,
|
||||
dci_alloc_rx[i].format, //format1A,
|
||||
&phy_vars_ue->dlsch_ue_ra[eNB_id],
|
||||
&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->pdsch_config_dedicated,
|
||||
@@ -2453,6 +2468,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
|
||||
#endif
|
||||
|
||||
//printf("subframe_rx(%d),slot_rx(%d)\n",subframe_rx,slot_rx);
|
||||
if (phy_vars_ue->lte_frame_parms.Ncp == 0) { // normal prefix
|
||||
pilot1 = 4;
|
||||
pilot2 = 7;
|
||||
@@ -2470,7 +2486,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
else
|
||||
n_symb = 0;
|
||||
} else {
|
||||
/*
|
||||
/*
|
||||
if (is_pmch_subframe(frame_rx,subframe_rx,&phy_vars_ue->lte_frame_parms)) {
|
||||
if ((slot_rx%2)==0) {
|
||||
n_symb=2;
|
||||
@@ -2480,7 +2496,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
n_symb=0;
|
||||
}
|
||||
else*/
|
||||
n_symb = phy_vars_ue->lte_frame_parms.symbols_per_tti/2;
|
||||
n_symb = phy_vars_ue->lte_frame_parms.symbols_per_tti/2;
|
||||
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
@@ -3016,7 +3033,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
#ifdef OPENAIR2
|
||||
|
||||
if ((phy_vars_ue->UE_mode[eNB_id] != PUSCH) && (phy_vars_ue->prach_resources[eNB_id]->Msg3!=NULL)) {
|
||||
LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Invoking MAC for RAR (current preamble %d)\n",
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d subframe %d Invoking MAC for RAR (current preamble %d)\n",
|
||||
phy_vars_ue->Mod_id,frame_rx-((subframe_prev==9) ? 1 : 0),
|
||||
subframe_prev,
|
||||
phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex);
|
||||
@@ -3101,6 +3118,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
|
||||
// rt_printk("[PDCCH] Frame %d, slot %d, start %llu\n",frame_rx,slot_rx,rt_get_time_ns());
|
||||
if (lte_ue_pdcch_procedures(eNB_id,phy_vars_ue,abstraction_flag) == -1) {
|
||||
LOG_E(PHY,"[UE %d] Frame %d, slot %d: Error in pdcch procedures\n",phy_vars_ue->Mod_id,frame_rx,slot_rx);
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_E(PHY,"[UE %d] Frame %d, slot %d: Error in pdcch procedures\n",phy_vars_ue->Mod_id,frame_rx,slot_rx);
|
||||
#endif
|
||||
|
||||
@@ -149,7 +149,9 @@ ue_process_rar(
|
||||
)
|
||||
//------------------------------------------------------------------------------
|
||||
{
|
||||
|
||||
int j_rapdi_index=0;
|
||||
int bi_flag=0;
|
||||
int i,j,nh;
|
||||
RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)dlsch_buffer;
|
||||
// RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1);
|
||||
uint8_t *rar = (uint8_t *)(dlsch_buffer+1);
|
||||
@@ -159,31 +161,72 @@ ue_process_rar(
|
||||
return(0xffff);
|
||||
}
|
||||
|
||||
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",module_idP,frameP,
|
||||
*(uint8_t*)rarh,rar[0],rar[1],rar[2],rar[3],rar[4],rar[5],
|
||||
rarh->RAPID,preamble_index);
|
||||
#ifdef DEBUG_RAR
|
||||
LOG_D(MAC,"[UE %d][RAPROC] rarh->E %d\n",module_idP,rarh->E);
|
||||
LOG_D(MAC,"[UE %d][RAPROC] rarh->T %d\n",module_idP,rarh->T);
|
||||
LOG_D(MAC,"[UE %d][RAPROC] rarh->RAPID %d\n",module_idP,rarh->RAPID);
|
||||
|
||||
// LOG_I(MAC,"[UE %d][RAPROC] rar->R %d\n",module_idP,rar->R);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] rar->Timing_Advance_Command %d\n",module_idP,(((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4));
|
||||
// LOG_I(MAC,"[UE %d][RAPROC] rar->hopping_flag %d\n",module_idP,rar->hopping_flag);
|
||||
// LOG_I(MAC,"[UE %d][RAPROC] rar->rb_alloc %d\n",module_idP,rar->rb_alloc);
|
||||
// LOG_I(MAC,"[UE %d][RAPROC] rar->mcs %d\n",module_idP,rar->mcs);
|
||||
// LOG_I(MAC,"[UE %d][RAPROC] rar->TPC %d\n",module_idP,rar->TPC);
|
||||
// LOG_I(MAC,"[UE %d][RAPROC] rar->UL_delay %d\n",module_idP,rar->UL_delay);
|
||||
// LOG_I(MAC,"[UE %d][RAPROC] rar->cqi_req %d\n",module_idP,rar->cqi_req);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] rar->t_crnti %x\n",module_idP,(uint16_t)rar[5]+(rar[4]<<8));
|
||||
for( i=0; i < 8; i++ ){
|
||||
if( ((dlsch_buffer[i]&0x80)>>7) ){
|
||||
if( i==0 && ((dlsch_buffer[i]&0x40)>>6)==0 ){ //BI sub-header
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC sub-header(%d): E(%d)/T(%d)/R(%d)/R(%d)/BI(%d)\n",
|
||||
module_idP,i,
|
||||
((dlsch_buffer[i]&0x80)>>7), //E
|
||||
((dlsch_buffer[i]&0x40)>>6), //T
|
||||
((dlsch_buffer[i]&0x20)>>5), //R
|
||||
((dlsch_buffer[i]&0x10)>>4), //R
|
||||
((dlsch_buffer[i]&0x0F))); //BI
|
||||
bi_flag=1;
|
||||
}else{ //Regular RAPID
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC sub-header(%d): E(%d)/T(%d)/RAPID(%d)\n",
|
||||
module_idP,i,
|
||||
((dlsch_buffer[i]&0x80)>>7), //E
|
||||
((dlsch_buffer[i]&0x40)>>6), //T
|
||||
((dlsch_buffer[i]&0x3f))); //RAPID
|
||||
}
|
||||
}else{
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC sub-header(%d): E(%d)/T(%d)/RAPID(%d)\n",
|
||||
module_idP,i,
|
||||
((dlsch_buffer[i]&0x80)>>7), //E
|
||||
((dlsch_buffer[i]&0x40)>>6), //T
|
||||
((dlsch_buffer[i]&0x3f))); //RAPID
|
||||
rarh->RAPID = ((dlsch_buffer[i]&0x3f));
|
||||
j_rapdi_index=i++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//i++;
|
||||
for(j=0; j < i*6; j+=6 ){
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->R %d\n",module_idP,j/6,(dlsch_buffer[i+j]>>7));
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->Timing_Advance_Command %d\n",module_idP,j/6,(((uint16_t)(dlsch_buffer[i+j]&0x7f))<<4) + (dlsch_buffer[i+j+1]>>4));
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->Hopping_Flag %d\n",(dlsch_buffer[i+j+1]&0x08)>>3);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->rballoc %d\n",module_idP,j/6,(((uint16_t)(dlsch_buffer[i+j+1]&7))<<7)|(dlsch_buffer[i+j+2]>>1)&0x01ff);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->mcs %d\n",module_idP,j/6,((dlsch_buffer[i+j+2]&1)<<3)|(dlsch_buffer[i+j+3]>>5));
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->TPC %d\n",module_idP,j/6,(dlsch_buffer[i+j+3]>>3)&7);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->cqi %d\n",module_idP,j/6,dlsch_buffer[i+j+3]&1);
|
||||
LOG_I(MAC,"[UE %d][RAPROC] MAC RAR(%d) rar->t_crnti %x\n",module_idP,j/6,(uint16_t)dlsch_buffer[i+j+5]+(dlsch_buffer[i+j+4]<<8));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if (preamble_index == rarh->RAPID) {
|
||||
*t_crnti = (uint16_t)rar[5]+(rar[4]<<8);//rar->t_crnti;
|
||||
|
||||
LOG_W(MAC,"[eNB %d][RAPROC] Frame %d Identified RAR,RAPID(%d): TA(%d),rballoc(%d),mcs(%d),TPC(%d),cqi(%d),t_cnrti(%x)\n",module_idP,frameP,((dlsch_buffer[j_rapdi_index]&0x3f)),
|
||||
(((uint16_t)(dlsch_buffer[i+j_rapdi_index*6]&0x7f))<<4) + (dlsch_buffer[i+j_rapdi_index*6+1]>>4),
|
||||
(((uint16_t)(dlsch_buffer[i+j_rapdi_index*6+1]&7))<<7)|(dlsch_buffer[i+j_rapdi_index*6+2]>>1),
|
||||
((dlsch_buffer[i+j_rapdi_index*6+2]&1)<<3)|(dlsch_buffer[i+j_rapdi_index*6+3]>>5),
|
||||
(dlsch_buffer[i+j_rapdi_index*6+3]>>3)&7,
|
||||
dlsch_buffer[i+j_rapdi_index*6+3]&1,
|
||||
(uint16_t)dlsch_buffer[i+j_rapdi_index*6+5]+(dlsch_buffer[i+j_rapdi_index*6+4]<<8));
|
||||
|
||||
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",module_idP,frameP,
|
||||
*(uint8_t*)rarh,rar[0],rar[1],rar[2],rar[3],rar[4],rar[5],
|
||||
rarh->RAPID,preamble_index);
|
||||
|
||||
|
||||
//if (preamble_index == rarh->RAPID) {
|
||||
if (preamble_index == (dlsch_buffer[j_rapdi_index]&0x3f) ) {
|
||||
//*t_crnti = (uint16_t)rar[5]+(rar[4]<<8);//rar->t_crnti;
|
||||
*t_crnti = (uint16_t)dlsch_buffer[i+j_rapdi_index*6+5]+(dlsch_buffer[i+j_rapdi_index*6+4]<<8);
|
||||
UE_mac_inst[module_idP].crnti = *t_crnti;//rar->t_crnti;
|
||||
//return(rar->Timing_Advance_Command);
|
||||
return((((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4));
|
||||
//return((((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4));
|
||||
return((((uint16_t)(dlsch_buffer[i+j_rapdi_index*6]&0x7f))<<4) + (dlsch_buffer[i+j_rapdi_index*6+1]>>4));
|
||||
} else {
|
||||
UE_mac_inst[module_idP].crnti=0;
|
||||
return(0xffff);
|
||||
|
||||
@@ -107,7 +107,7 @@ int errno;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
//#define XER_PRINT
|
||||
#define XER_PRINT
|
||||
|
||||
extern Enb_properties_array_t enb_properties;
|
||||
typedef struct xer_sprint_string_s {
|
||||
@@ -1298,6 +1298,11 @@ uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uin
|
||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
|
||||
#ifdef XER_PRINT
|
||||
xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
# if !defined(DISABLE_XER_SPRINT)
|
||||
{
|
||||
|
||||
@@ -103,7 +103,7 @@ extern UE_MAC_INST *UE_mac_inst;
|
||||
extern void *bigphys_malloc(int);
|
||||
#endif
|
||||
|
||||
//#define XER_PRINT
|
||||
#define XER_PRINT
|
||||
|
||||
extern int8_t dB_fixed2(uint32_t x,uint32_t y);
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
|
||||
openair0_dev_init_exmimo(device, openair0_cfg);
|
||||
printf("openair0_dev_init_exmimo...\n");
|
||||
#elif OAI_USRP
|
||||
device->type=USRP_IF;
|
||||
device->type=USRP_B200_IF;
|
||||
openair0_dev_init_usrp(device, openair0_cfg);
|
||||
printf("openair0_dev_init_usrp ...\n");
|
||||
#elif OAI_BLADERF
|
||||
|
||||
@@ -98,6 +98,10 @@ typedef struct {
|
||||
//! \brief Center frequency in Hz for TX.
|
||||
//! index: [0..rx_num_channels[ !!! see lte-ue.c:427 FIXME iterates over rx_num_channels
|
||||
double tx_freq[4];
|
||||
|
||||
//! \brief Pointer to Calibration table for RX gains
|
||||
rx_gain_calib_table_t *rx_gain_calib_table;
|
||||
|
||||
//! mode for rxgain (ExpressMIMO2)
|
||||
rx_gain_t rxg_mode[4];
|
||||
//! \brief Gain for RX in dB.
|
||||
@@ -147,8 +151,10 @@ typedef enum {
|
||||
ETH_IF,
|
||||
/*!\brief device is ExpressMIMO */
|
||||
EXMIMO_IF,
|
||||
/*!\brief device is USRP*/
|
||||
USRP_IF,
|
||||
/*!\brief device is USRP B200/B210*/
|
||||
USRP_B200_IF,
|
||||
/*!\brief device is USRP X300/X310*/
|
||||
USRP_X300_IF,
|
||||
/*!\brief device is BLADE RF*/
|
||||
BLADERF_IF,
|
||||
/*!\brief device is NONE*/
|
||||
|
||||
@@ -171,31 +171,45 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
if (cc>1) {
|
||||
if (device->type == USRP_B200_IF) {
|
||||
if (cc>1) {
|
||||
// receive multiple channels (e.g. RF A and RF B)
|
||||
std::vector<void *> buff_ptrs;
|
||||
for (int i=0;i<cc;i++) buff_ptrs.push_back(buff_tmp[i]);
|
||||
samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md);
|
||||
} else {
|
||||
std::vector<void *> buff_ptrs;
|
||||
|
||||
for (int i=0;i<cc;i++) buff_ptrs.push_back(buff_tmp[i]);
|
||||
samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md);
|
||||
} else {
|
||||
// receive a single channel (e.g. from connector RF A)
|
||||
samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md);
|
||||
}
|
||||
|
||||
samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md);
|
||||
}
|
||||
|
||||
// bring RX data into 12 LSBs for softmodem RX
|
||||
for (int i=0;i<cc;i++) {
|
||||
for (int j=0; j<nsamps2; j++) {
|
||||
for (int i=0;i<cc;i++) {
|
||||
for (int j=0; j<nsamps2; j++) {
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
#ifdef __AVX2__
|
||||
((__m256i *)buff[i])[j] = _mm256_srai_epi16(buff_tmp[i][j],4);
|
||||
((__m256i *)buff[i])[j] = _mm256_srai_epi16(buff_tmp[i][j],4);
|
||||
#else
|
||||
((__m128i *)buff[i])[j] = _mm_srai_epi16(buff_tmp[i][j],4);
|
||||
((__m128i *)buff[i])[j] = _mm_srai_epi16(buff_tmp[i][j],4);
|
||||
#endif
|
||||
#elif defined(__arm__)
|
||||
((int16x8_t*)buff[i])[j] = vshrq_n_s16(buff_tmp[i][j],4);
|
||||
((int16x8_t*)buff[i])[j] = vshrq_n_s16(buff_tmp[i][j],4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} else if (device->type == USRP_X300_IF) {
|
||||
if (cc>1) {
|
||||
// receive multiple channels (e.g. RF A and RF B)
|
||||
std::vector<void *> buff_ptrs;
|
||||
|
||||
for (int i=0;i<cc;i++) buff_ptrs.push_back(buff[i]);
|
||||
samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md);
|
||||
} else {
|
||||
// receive a single channel (e.g. from connector RF A)
|
||||
samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md);
|
||||
}
|
||||
}
|
||||
|
||||
if (samples_received < nsamps) {
|
||||
printf("[recv] received %d samples out of %d\n",samples_received,nsamps);
|
||||
|
||||
@@ -279,7 +293,7 @@ int trx_usrp_set_gains(openair0_device* device,
|
||||
exit(-1);
|
||||
}
|
||||
s->usrp->set_rx_gain(openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]);
|
||||
printf("Setting USRP RX gain to %f\n", openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]);
|
||||
printf("Setting USRP RX gain to %f (rx_gain %f,gain_range.stop() %f)\n", openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0],openair0_cfg[0].rx_gain[0],gain_range.stop());
|
||||
|
||||
return(0);
|
||||
}
|
||||
@@ -289,7 +303,7 @@ int trx_usrp_stop(int card) {
|
||||
}
|
||||
|
||||
|
||||
rx_gain_calib_table_t calib_table[] = {
|
||||
rx_gain_calib_table_t calib_table_b210[] = {
|
||||
{3500000000.0,46.0},
|
||||
{2660000000.0,53.0},
|
||||
{2300000000.0,54.0},
|
||||
@@ -297,19 +311,29 @@ rx_gain_calib_table_t calib_table[] = {
|
||||
{816000000.0,62.0},
|
||||
{-1,0}};
|
||||
|
||||
rx_gain_calib_table_t calib_table_x310[] = {
|
||||
{3500000000.0,77.0},
|
||||
{2660000000.0,80.0},
|
||||
{2300000000.0,81.0},
|
||||
{1880000000.0,82.0},
|
||||
{816000000.0,85.0},
|
||||
{-1,0}};
|
||||
|
||||
void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
|
||||
|
||||
int i=0;
|
||||
// loop through calibration table to find best adjustment factor for RX frequency
|
||||
double min_diff = 6e9,diff;
|
||||
|
||||
while (calib_table[i].freq>0) {
|
||||
diff = fabs(openair0_cfg->rx_freq[chain_index] - calib_table[i].freq);
|
||||
|
||||
while (openair0_cfg->rx_gain_calib_table[i].freq>0) {
|
||||
diff = fabs(openair0_cfg->rx_freq[chain_index] - openair0_cfg->rx_gain_calib_table[i].freq);
|
||||
printf("cal %d: freq %f, offset %f, diff %f\n",
|
||||
i,calib_table[i].freq,calib_table[i].offset,diff);
|
||||
i,
|
||||
openair0_cfg->rx_gain_calib_table[i].freq,
|
||||
openair0_cfg->rx_gain_calib_table[i].offset,diff);
|
||||
if (min_diff > diff) {
|
||||
min_diff = diff;
|
||||
openair0_cfg->rx_gain_offset[chain_index] = calib_table[i].offset;
|
||||
openair0_cfg->rx_gain_offset[chain_index] = openair0_cfg->rx_gain_calib_table[i].offset;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
@@ -372,9 +396,14 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
|
||||
// lock mboard clocks
|
||||
s->usrp->set_clock_source("internal");
|
||||
|
||||
//Setting device type to USRP X300/X310
|
||||
device->type=USRP_X300_IF;
|
||||
|
||||
// this is not working yet, master clock has to be set via constructor
|
||||
// set master clock rate and sample rate for tx & rx for streaming
|
||||
//s->usrp->set_master_clock_rate(usrp_master_clock);
|
||||
|
||||
openair0_cfg[0].rx_gain_calib_table = calib_table_x310;
|
||||
} else {
|
||||
printf("Found USRP B200");
|
||||
s->usrp = uhd::usrp::multi_usrp::make(args);
|
||||
@@ -387,6 +416,8 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
|
||||
// s->usrp->set_clock_source("internal");
|
||||
// set master clock rate and sample rate for tx & rx for streaming
|
||||
s->usrp->set_master_clock_rate(30.72e6);
|
||||
|
||||
openair0_cfg[0].rx_gain_calib_table = calib_table_b210;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ eNBs =
|
||||
|
||||
mobile_country_code = "208";
|
||||
|
||||
mobile_network_code = "92";
|
||||
mobile_network_code = "93";
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
@@ -131,7 +131,7 @@ eNBs =
|
||||
};
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.13.11";
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.70";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
@@ -141,10 +141,10 @@ eNBs =
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
|
||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ eNBs =
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 32;
|
||||
rx_gain = 84;
|
||||
rx_gain = 116;
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
eNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
eNB_ID = 0xe00;
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
mobile_country_code = "208";
|
||||
mobile_network_code = "92";
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
component_carriers = (
|
||||
{
|
||||
frame_type = "FDD";
|
||||
tdd_config = 3;
|
||||
tdd_config_s = 0;
|
||||
prefix_type = "NORMAL";
|
||||
eutra_band = 7;
|
||||
downlink_frequency = 2660000000L;
|
||||
uplink_frequency_offset = -120000000;
|
||||
Nid_cell = 0;
|
||||
N_RB_DL = 25;
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 32;
|
||||
rx_gain = 116;
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
prach_zero_correlation = 1;
|
||||
prach_freq_offset = 2;
|
||||
pucch_delta_shift = 1;
|
||||
pucch_nRB_CQI = 1;
|
||||
pucch_nCS_AN = 0;
|
||||
pucch_n1_AN = 32;
|
||||
pdsch_referenceSignalPower = -16;
|
||||
pdsch_p_b = 0;
|
||||
pusch_n_SB = 1;
|
||||
pusch_enable64QAM = "DISABLE";
|
||||
pusch_hoppingMode = "interSubFrame";
|
||||
pusch_hoppingOffset = 0;
|
||||
pusch_groupHoppingEnabled = "ENABLE";
|
||||
pusch_groupAssignment = 0;
|
||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||
pusch_nDMRS1 = 1;
|
||||
phich_duration = "NORMAL";
|
||||
phich_resource = "ONESIXTH";
|
||||
srs_enable = "DISABLE";
|
||||
/* srs_BandwidthConfig =;
|
||||
srs_SubframeConfig =;
|
||||
srs_ackNackST =;
|
||||
srs_MaxUpPts =;*/
|
||||
|
||||
pusch_p0_Nominal = -90;
|
||||
pusch_alpha = "AL1";
|
||||
pucch_p0_Nominal = -108;
|
||||
msg3_delta_Preamble = 6;
|
||||
pucch_deltaF_Format1 = "deltaF2";
|
||||
pucch_deltaF_Format1b = "deltaF3";
|
||||
pucch_deltaF_Format2 = "deltaF0";
|
||||
pucch_deltaF_Format2a = "deltaF0";
|
||||
pucch_deltaF_Format2b = "deltaF0";
|
||||
|
||||
rach_numberOfRA_Preambles = 64;
|
||||
rach_preamblesGroupAConfig = "DISABLE";
|
||||
/*
|
||||
rach_sizeOfRA_PreamblesGroupA = ;
|
||||
rach_messageSizeGroupA = ;
|
||||
rach_messagePowerOffsetGroupB = ;
|
||||
*/
|
||||
rach_powerRampingStep = 4;
|
||||
rach_preambleInitialReceivedTargetPower = -108;
|
||||
rach_preambleTransMax = 10;
|
||||
rach_raResponseWindowSize = 10;
|
||||
rach_macContentionResolutionTimer = 48;
|
||||
rach_maxHARQ_Msg3Tx = 4;
|
||||
|
||||
pcch_default_PagingCycle = 128;
|
||||
pcch_nB = "oneT";
|
||||
bcch_modificationPeriodCoeff = 2;
|
||||
ue_TimersAndConstants_t300 = 1000;
|
||||
ue_TimersAndConstants_t301 = 1000;
|
||||
ue_TimersAndConstants_t310 = 1000;
|
||||
ue_TimersAndConstants_t311 = 10000;
|
||||
ue_TimersAndConstants_n310 = 20;
|
||||
ue_TimersAndConstants_n311 = 1;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
srb1_parameters :
|
||||
{
|
||||
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||
timer_poll_retransmit = 80;
|
||||
|
||||
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||
timer_reordering = 35;
|
||||
|
||||
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||
timer_status_prohibit = 0;
|
||||
|
||||
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||
poll_pdu = 4;
|
||||
|
||||
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||
poll_byte = 99999;
|
||||
|
||||
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||
max_retx_threshold = 4;
|
||||
}
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="debug";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
@@ -35,7 +35,7 @@ eNBs =
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 32;
|
||||
rx_gain = 82;
|
||||
rx_gain = 120;
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
|
||||
@@ -133,7 +133,7 @@ eNBs =
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.11";
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.70";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
@@ -143,10 +143,10 @@ eNBs =
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.216/24";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24";
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.216/24";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24";
|
||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ eNBs =
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 32;
|
||||
rx_gain = 84;
|
||||
rx_gain = 116;
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
|
||||
@@ -17,7 +17,7 @@ eNBs =
|
||||
|
||||
mobile_country_code = "208";
|
||||
|
||||
mobile_network_code = "92";
|
||||
mobile_network_code = "93";
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
@@ -132,7 +132,7 @@ eNBs =
|
||||
};
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.13.11";
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.70";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
@@ -142,10 +142,10 @@ eNBs =
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
|
||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@ void config_BBU_mod( rrh_module_t *mod_enb, uint8_t RT_flag, uint8_t NRT_flag) {
|
||||
mod_enb->devs->openair0_cfg.tx_delay = 8;
|
||||
}
|
||||
}
|
||||
else if (mod_enb->devs->type == USRP_IF) {
|
||||
else if ((mod_enb->devs->type == USRP_B200_IF )||(mod_enb->devs->type == USRP_X300_IF )) {
|
||||
if ( mod_enb->devs->openair0_cfg.num_rb_dl == 100 ) {
|
||||
mod_enb->devs->openair0_cfg.samples_per_packet = 2048;
|
||||
mod_enb->devs->openair0_cfg.tx_forward_nsamps = 175;
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
Contact Information
|
||||
OpenAirInterface Admin: openair_admin@eurecom.fr
|
||||
OpenAirInterface Tech : openair_tech@eurecom.fr
|
||||
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
|
||||
OpenAirInterface Dev : openair4g-devel@eurecom.fr
|
||||
|
||||
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
||||
|
||||
@@ -251,6 +251,8 @@ int UE_scan_carrier = 0;
|
||||
runmode_t mode = normal_txrx;
|
||||
|
||||
FILE *input_fd=NULL;
|
||||
input_file= NULL;
|
||||
input_buffer_l = 0;
|
||||
|
||||
|
||||
#ifdef EXMIMO
|
||||
@@ -318,6 +320,7 @@ static LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
|
||||
int multi_thread=1;
|
||||
uint32_t target_dl_mcs = 28; //maximum allowed mcs
|
||||
uint32_t target_ul_mcs = 10;
|
||||
int32_t timing_advance = 0;
|
||||
uint8_t exit_missed_slots=1;
|
||||
uint64_t num_missed_slots=0; // counter for the number of missed slots
|
||||
|
||||
@@ -331,7 +334,7 @@ void print_opp_meas(void);
|
||||
int transmission_mode=1;
|
||||
|
||||
|
||||
int16_t glog_level = LOG_INFO;
|
||||
int16_t glog_level = LOG_DEBUG;
|
||||
int16_t glog_verbosity = LOG_MED;
|
||||
int16_t hw_log_level = LOG_INFO;
|
||||
int16_t hw_log_verbosity = LOG_MED;
|
||||
@@ -2042,7 +2045,7 @@ static void get_options (int argc, char **argv)
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
while ((c = getopt_long (argc, argv, "C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:x:",long_options,NULL)) != -1) {
|
||||
while ((c = getopt_long (argc, argv, "C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:x:A:",long_options,NULL)) != -1) {
|
||||
switch (c) {
|
||||
case LONG_OPTION_MAXPOWER:
|
||||
tx_max_power[0]=atoi(optarg);
|
||||
@@ -2102,9 +2105,16 @@ static void get_options (int argc, char **argv)
|
||||
break;
|
||||
|
||||
case LONG_OPTION_LOOPMEMORY:
|
||||
#ifdef EXMIMO
|
||||
fprintf(stderr, "loop memory option not supported with EXMIMO engine ... use USRP option\n");
|
||||
exit(-1);
|
||||
#endif
|
||||
mode=loop_through_memory;
|
||||
input_file = (char*)malloc(sizeof(char)*100);
|
||||
strcpy(input_file,optarg);
|
||||
input_fd = fopen(optarg,"r");
|
||||
AssertFatal(input_fd != NULL,"Please provide an input file\n");
|
||||
printf("%s\n",input_file);
|
||||
break;
|
||||
|
||||
case LONG_OPTION_DUMP_FRAME:
|
||||
@@ -2117,6 +2127,10 @@ static void get_options (int argc, char **argv)
|
||||
#endif
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
timing_advance = atoi (optarg);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
downlink_frequency[CC_id][0] = atof(optarg); // Use float to avoid issue with frequency over 2^31.
|
||||
@@ -2510,9 +2524,9 @@ int main( int argc, char **argv )
|
||||
|
||||
set_comp_log(HW, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(RLC, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(PDCP, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(MAC, LOG_DEBUG, LOG_HIGH, 1);
|
||||
set_comp_log(RLC, LOG_DEBUG, LOG_HIGH, 1);
|
||||
set_comp_log(PDCP, LOG_DEBUG, LOG_HIGH, 1);
|
||||
set_comp_log(OTG, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(RRC, LOG_INFO, LOG_HIGH, 1);
|
||||
#if defined(ENABLE_ITTI)
|
||||
@@ -2965,24 +2979,28 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
|
||||
else {
|
||||
openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB;// - USRP_GAIN_OFFSET; // calibrated for USRP B210 @ 2.6 GHz, 30.72 MS/s
|
||||
}
|
||||
|
||||
|
||||
switch(frame_parms[0]->N_RB_DL) {
|
||||
case 6:
|
||||
openair0_cfg[card].rx_gain[i] -= 6;
|
||||
openair0_cfg[card].rx_gain[i] -= 12;
|
||||
break;
|
||||
|
||||
case 25:
|
||||
openair0_cfg[card].rx_gain[i] += 6;
|
||||
openair0_cfg[card].rx_gain[i] -= 6;
|
||||
break;
|
||||
|
||||
case 50:
|
||||
openair0_cfg[card].rx_gain[i] += 8;
|
||||
openair0_cfg[card].rx_gain[i] -= 3;
|
||||
break;
|
||||
|
||||
case 100:
|
||||
openair0_cfg[card].rx_gain[i] -= 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -2991,7 +3009,23 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
|
||||
|
||||
openair0.func_type = BBU_FUNC;
|
||||
openair0_cfg[0].log_level = glog_level;
|
||||
|
||||
|
||||
#ifdef ETHERNET
|
||||
openair0.type=ETH_IF; // not used for the moment
|
||||
openair0.func_type = BBU_FUNC;
|
||||
openair0_dev_init_eth(&openair0, &openair0_cfg[0]);
|
||||
#else
|
||||
#ifdef EXMIMO
|
||||
openair0.type=EXMIMO_IF;
|
||||
printf("Setting the HW to EXMIMO and initializing openair0 ...\n");
|
||||
#elif OAI_USRP
|
||||
openair0.type=USRP_B200_IF;
|
||||
printf("Setting the HW to USRP and initializing openair0 ...\n");
|
||||
#elif OAI_BLADERF
|
||||
openair0.type=BLADERF_IF;
|
||||
printf("Setting the HW to BLADERF and initializing openair0 ...\n");
|
||||
#endif
|
||||
|
||||
if ((mode!=loop_through_memory) &&
|
||||
(openair0_device_init(&openair0, &openair0_cfg[0]) <0)) {
|
||||
printf("Exiting, cannot initialize device\n");
|
||||
@@ -2999,7 +3033,8 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
|
||||
}
|
||||
else if (mode==loop_through_memory) {
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
printf("Done\n");
|
||||
|
||||
mac_xface = malloc(sizeof(MAC_xface));
|
||||
@@ -3070,9 +3105,9 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
|
||||
// connect the TX/RX buffers
|
||||
if (UE_flag==1) {
|
||||
#ifdef OAI_USRP
|
||||
openair_daq_vars.timing_advance = 160;
|
||||
openair_daq_vars.timing_advance = timing_advance;
|
||||
#else
|
||||
openair_daq_vars.timing_advance = 160;
|
||||
openair_daq_vars.timing_advance = timing_advance;
|
||||
#endif
|
||||
if (setup_ue_buffers(UE,&openair0_cfg[0],rf_map)!=0) {
|
||||
printf("Error setting up eNB buffer\n");
|
||||
@@ -3089,11 +3124,14 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
|
||||
}
|
||||
|
||||
if (input_fd) {
|
||||
printf("Reading in from file to antenna buffer %d\n",0);
|
||||
printf("Reading in from file to antenna buffer %d, buffer_size %d\n",input_fd,frame_parms[0]->samples_per_tti*10);
|
||||
//fseek(input_fd, 7680000/2,0);
|
||||
fread(UE[0]->lte_ue_common_vars.rxdata[0],
|
||||
sizeof(int32_t),
|
||||
frame_parms[0]->samples_per_tti*10,
|
||||
input_fd);
|
||||
input_buffer_l = ftell(input_fd);
|
||||
fclose(input_fd);
|
||||
}
|
||||
//p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX;
|
||||
} else {
|
||||
|
||||
@@ -119,6 +119,9 @@ extern int oai_exit;
|
||||
extern int32_t **rxdata;
|
||||
extern int32_t **txdata;
|
||||
|
||||
extern char * input_file;
|
||||
extern int input_buffer_l;
|
||||
|
||||
//extern unsigned int tx_forward_nsamps;
|
||||
//extern int tx_delay;
|
||||
|
||||
@@ -410,6 +413,7 @@ static void *UE_thread_synch(void *arg)
|
||||
UE->UE_scan_carrier = 0;
|
||||
// rerun with new cell parameters and frequency-offset
|
||||
for (i=0;i<openair0_cfg[0].rx_num_channels;i++) {
|
||||
openair0_cfg[0].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
|
||||
openair0_cfg[0].rx_freq[i] -= UE->lte_ue_common_vars.freq_offset;
|
||||
openair0_cfg[0].tx_freq[i] = openair0_cfg[0].rx_freq[i]+uplink_frequency_offset[0][i];
|
||||
downlink_frequency[0][i] = openair0_cfg[0].rx_freq[i];
|
||||
@@ -1188,9 +1192,43 @@ void *UE_thread(void *arg)
|
||||
|
||||
LOG_D(HW,"signalled rx thread to wake up, hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 );
|
||||
if (UE->mode == loop_through_memory) {
|
||||
printf("Processing subframe %d",UE->slot_rx>>1);
|
||||
if (pthread_mutex_lock(&UE->mutex_rx) != 0) {
|
||||
LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RX thread\n" );
|
||||
exit_fun("nothing to add");
|
||||
return &UE_thread_retval;
|
||||
}
|
||||
printf(" Processing subframe %d",UE->slot_rx>>1);
|
||||
if( input_file){
|
||||
if( (UE->slot_rx>>1) == 9 ){
|
||||
FILE * in_fd = fopen(input_file,"r");
|
||||
AssertFatal(in_fd != NULL,"Please provide an input file\n");
|
||||
if(in_fd){
|
||||
fseek(in_fd,0,SEEK_END);
|
||||
int numbytes = ftell(in_fd);
|
||||
fseek(in_fd,0,SEEK_SET);
|
||||
printf("input_file:%s, numbytes(%d)\n",input_file,numbytes);
|
||||
if( input_buffer_l + sizeof(int32_t)* UE->lte_frame_parms.samples_per_tti*10 > numbytes )
|
||||
input_buffer_l = 0;
|
||||
LOG_W(PHY,"Reading in from file to antenna buffer, buffer_size %d ,dessired position %d\n", UE->lte_frame_parms.samples_per_tti*10*sizeof(int32_t),input_buffer_l);
|
||||
fseek(in_fd,input_buffer_l,0);
|
||||
fread(UE->lte_ue_common_vars.rxdata[0],
|
||||
sizeof(int32_t),
|
||||
UE->lte_frame_parms.samples_per_tti*10,
|
||||
in_fd);
|
||||
input_buffer_l+=ftell(in_fd);
|
||||
fclose(in_fd);
|
||||
LOG_W(PHY,"Buffer left %d\n",numbytes - input_buffer_l);
|
||||
}
|
||||
}
|
||||
}
|
||||
LOG_D(PHY,"Unlocking mutex_rx (IC %d)\n",instance_cnt_rx);
|
||||
if (pthread_mutex_unlock(&UE->mutex_rx) != 0) {
|
||||
LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE RX thread\n" );
|
||||
exit_fun("nothing to add");
|
||||
return &UE_thread_retval;
|
||||
}
|
||||
getchar();
|
||||
}
|
||||
}
|
||||
|
||||
if (UE->mode == rx_calib_ue) {
|
||||
if (frame == 10) {
|
||||
@@ -1901,6 +1939,13 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg,
|
||||
free(phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i]);
|
||||
phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card].dac_head[rf_map[CC_id].chain+i];
|
||||
|
||||
if (phy_vars_ue[CC_id]->mode == loop_through_memory) {
|
||||
if( !phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i] ){
|
||||
LOG_W(PHY,"mode:loop_through_memory -- lte_ue_common_vars.txdata buffer no init by exmimo driver ... proceed with a local malloc\n");
|
||||
phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) );
|
||||
}
|
||||
}
|
||||
|
||||
if (openair0_cfg[rf_map[CC_id].card].tx_freq[rf_map[CC_id].chain+i]) {
|
||||
printf("Error with rf_map! A channel has already been allocated!\n");
|
||||
return(-1);
|
||||
|
||||
@@ -216,7 +216,7 @@ static rrh_module_t new_module (unsigned int id) {
|
||||
LOG_I(RRH,"Setting RF device to EXMIMO\n");
|
||||
#elif OAI_USRP
|
||||
rrh_mod.devs=oai_dv;
|
||||
rrh_mod.devs->type=USRP_IF;
|
||||
rrh_mod.devs->type=USRP_B200_IF;
|
||||
LOG_I(RRH,"Setting RF device to USRP\n");
|
||||
#elif OAI_BLADERF
|
||||
rrh_mod.devs=oai_dv;
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
/*! \brief RRH supports two types of modules: eNB and UE
|
||||
each module is associated with an ethernet device (device of ETH_IF)
|
||||
and optionally with a RF device (device type can be USRP_IF/BLADERF_IF/EXMIMO_IF/NONE_IF)
|
||||
and optionally with a RF device (device type can be USRP_B200/USRP_X300/BLADERF_IF/EXMIMO_IF/NONE_IF)
|
||||
UE modules will always have RF device type NONE_IF */
|
||||
typedef struct {
|
||||
/*! \brief module id */
|
||||
|
||||
Reference in New Issue
Block a user