updated dlsim to FAPI interfaces
This commit is contained in:
@@ -2157,11 +2157,12 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
|
||||
${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c
|
||||
${XFORMS_SOURCE}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
)
|
||||
target_link_libraries (${myExe}
|
||||
|
||||
-Wl,--start-group SIMU UTIL SCHED_LIB PHY LFDS ${ITTI_LIB} LFDS7 -Wl,--end-group
|
||||
pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB}
|
||||
pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB} dl
|
||||
)
|
||||
endforeach(myExe)
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ crc24a (unsigned char * inptr, int bitlen)
|
||||
resbit = (bitlen % 8);
|
||||
|
||||
while (octetlen-- > 0) {
|
||||
// printf("in %x => crc %x\n",crc,*inptr);
|
||||
// printf("crc24a: in %x => crc %x\n",crc,*inptr);
|
||||
crc = (crc << 8) ^ crc24aTable[(*inptr++) ^ (crc >> 24)];
|
||||
}
|
||||
|
||||
@@ -128,6 +128,7 @@ unsigned int crc24b (unsigned char * inptr, int bitlen)
|
||||
resbit = (bitlen % 8);
|
||||
|
||||
while (octetlen-- > 0) {
|
||||
// printf("crc24b: in %x => crc %x (%x)\n",crc,*inptr,crc24bTable[(*inptr) ^ (crc >> 24)]);
|
||||
crc = (crc << 8) ^ crc24bTable[(*inptr++) ^ (crc >> 24)];
|
||||
}
|
||||
|
||||
|
||||
@@ -322,8 +322,11 @@ void init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms);
|
||||
|
||||
//void copy_lte_parms_to_phy_framing(LTE_DL_FRAME_PARMS *frame_parm, PHY_FRAMING *phy_framing);
|
||||
|
||||
void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
unsigned char N_tx,
|
||||
void lte_param_init(PHY_VARS_eNB **eNBp,
|
||||
PHY_VARS_UE **UEp,
|
||||
RU_t **rup,
|
||||
unsigned char N_tx_port_eNB,
|
||||
unsigned char N_tx_phy,
|
||||
unsigned char N_rx,
|
||||
unsigned char transmission_mode,
|
||||
uint8_t extended_prefix_flag,
|
||||
@@ -331,10 +334,12 @@ void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
uint16_t Nid_cell,
|
||||
uint8_t tdd_config,
|
||||
uint8_t N_RB_DL,
|
||||
uint8_t pa,
|
||||
uint8_t threequarter_fs,
|
||||
uint8_t osf,
|
||||
uint32_t perfect_ce);
|
||||
|
||||
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
void phy_config_dedicated_scell_ue(uint8_t Mod_id,
|
||||
uint8_t eNB_index,
|
||||
@@ -359,18 +364,6 @@ void phy_config_request(PHY_Config_t *phy_config);
|
||||
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
|
||||
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
|
||||
|
||||
void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
unsigned char N_tx_phy,
|
||||
unsigned char N_rx,
|
||||
unsigned char transmission_mode,
|
||||
uint8_t extended_prefix_flag,
|
||||
frame_t frame_type,
|
||||
uint16_t Nid_cell,
|
||||
uint8_t tdd_config,
|
||||
uint8_t N_RB_DL,
|
||||
uint8_t threequarter_fs,
|
||||
uint8_t osf,
|
||||
uint32_t perfect_ce);
|
||||
/** @} */
|
||||
#endif
|
||||
|
||||
|
||||
@@ -32,8 +32,12 @@
|
||||
|
||||
extern PHY_VARS_eNB *eNB;
|
||||
extern PHY_VARS_UE *UE;
|
||||
extern RU_t *ru;
|
||||
|
||||
void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
void lte_param_init(PHY_VARS_eNB **eNBp,
|
||||
PHY_VARS_UE **UEp,
|
||||
RU_t **rup,
|
||||
unsigned char N_tx_port_eNB,
|
||||
unsigned char N_tx_phy,
|
||||
unsigned char N_rx,
|
||||
unsigned char transmission_mode,
|
||||
@@ -42,6 +46,7 @@ void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
uint16_t Nid_cell,
|
||||
uint8_t tdd_config,
|
||||
uint8_t N_RB_DL,
|
||||
uint8_t pa,
|
||||
uint8_t threequarter_fs,
|
||||
uint8_t osf,
|
||||
uint32_t perfect_ce)
|
||||
@@ -49,13 +54,27 @@ void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
|
||||
LTE_DL_FRAME_PARMS *frame_parms;
|
||||
int i;
|
||||
|
||||
PHY_VARS_eNB *eNB;
|
||||
PHY_VARS_UE *UE;
|
||||
RU_t *ru;
|
||||
printf("Start lte_param_init\n");
|
||||
eNB = malloc(sizeof(PHY_VARS_eNB));
|
||||
UE = malloc(sizeof(PHY_VARS_UE));
|
||||
*eNBp = malloc(sizeof(PHY_VARS_eNB));
|
||||
*UEp = malloc(sizeof(PHY_VARS_UE));
|
||||
*rup = malloc(sizeof(RU_t));
|
||||
eNB = *eNBp;
|
||||
UE = *UEp;
|
||||
ru = *rup;
|
||||
printf("eNB %p, UE %p, ru %p\n",eNB,UE,ru);
|
||||
|
||||
|
||||
|
||||
memset((void*)eNB,0,sizeof(PHY_VARS_eNB));
|
||||
memset((void*)UE,0,sizeof(PHY_VARS_UE));
|
||||
memset((void*)ru,0,sizeof(RU_t));
|
||||
|
||||
ru->eNB_list[0] = eNB;
|
||||
eNB->RU_list[0] = ru;
|
||||
ru->num_eNB=1;
|
||||
|
||||
srand(0);
|
||||
randominit(0);
|
||||
@@ -90,12 +109,17 @@ void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
|
||||
UE->is_secondary_ue = 0;
|
||||
UE->frame_parms = *frame_parms;
|
||||
eNB->frame_parms = *frame_parms;
|
||||
// eNB->frame_parms = *frame_parms;
|
||||
ru->frame_parms = *frame_parms;
|
||||
ru->nb_tx = N_tx_phy;
|
||||
ru->nb_rx = 1;
|
||||
ru->if_south = LOCAL_RF;
|
||||
|
||||
eNB->configured=1;
|
||||
|
||||
eNB->transmission_mode[0] = transmission_mode;
|
||||
UE->transmission_mode[0] = transmission_mode;
|
||||
|
||||
init_lte_top(frame_parms);
|
||||
dump_frame_parms(frame_parms);
|
||||
|
||||
UE->measurements.n_adj_cells=0;
|
||||
@@ -105,23 +129,24 @@ void lte_param_init(unsigned char N_tx_port_eNB,
|
||||
for (i=0; i<3; i++)
|
||||
lte_gold(frame_parms,UE->lte_gold_table[i],Nid_cell+i);
|
||||
|
||||
init_lte_ue(UE,1,0);
|
||||
printf("Calling init_lte_ue_signal\n");
|
||||
init_lte_ue_signal(UE,1,0);
|
||||
printf("Calling phy_init_lte_eNB\n");
|
||||
phy_init_lte_eNB(eNB,0,0);
|
||||
|
||||
printf("Calling phy_init_RU (%p)\n",ru);
|
||||
phy_init_RU(ru);
|
||||
generate_pcfich_reg_mapping(&UE->frame_parms);
|
||||
generate_phich_reg_mapping(&UE->frame_parms);
|
||||
|
||||
// DL power control init
|
||||
//if (transmission_mode == 1) {
|
||||
UE->pdsch_config_dedicated->p_a = pa;
|
||||
|
||||
if (transmission_mode == 1 || transmission_mode ==7) {
|
||||
eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
|
||||
((eNB->frame_parms).pdsch_config_common).p_b = 0;
|
||||
UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
|
||||
((UE->frame_parms).pdsch_config_common).p_b = 0;
|
||||
} else { // rho_a = rhob
|
||||
eNB->pdsch_config_dedicated->p_a = dBm3; // 4 = 0dB
|
||||
((eNB->frame_parms).pdsch_config_common).p_b = 1;
|
||||
UE->pdsch_config_dedicated->p_a = dBm3; // 4 = 0dB
|
||||
((UE->frame_parms).pdsch_config_common).p_b = 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
//extern uint16_t phich_reg[MAX_NUM_PHICH_GROUPS][3];
|
||||
//extern uint16_t pcfich_reg[4];
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
|
||||
uint32_t check_phich_reg(LTE_DL_FRAME_PARMS *frame_parms,uint32_t kprime,uint8_t lprime,uint8_t mi)
|
||||
{
|
||||
|
||||
@@ -177,7 +180,7 @@ void dci_encoding(uint8_t *a,
|
||||
// encode dci
|
||||
|
||||
#ifdef DEBUG_DCI_ENCODING
|
||||
printf("Doing DCI encoding for %d bits, e %p, rnti %x\n",A,e,rnti);
|
||||
printf("Doing DCI encoding for %d bits, e %p, rnti %x, E %d\n",A,e,rnti,E);
|
||||
#endif
|
||||
|
||||
memset((void *)d,LTE_NULL,96);
|
||||
@@ -231,18 +234,23 @@ uint8_t *generate_dci0(uint8_t *dci,
|
||||
|
||||
coded_bits = 72 * aggregation_level;
|
||||
|
||||
/*
|
||||
|
||||
|
||||
#ifdef DEBUG_DCI_ENCODING
|
||||
for (i=0;i<1+((DCI_LENGTH+16)/8);i++)
|
||||
for (int i=0;i<1+((DCI_LENGTH+16)/8);i++)
|
||||
printf("i %d : %x\n",i,dci[i]);
|
||||
#endif
|
||||
*/
|
||||
|
||||
if (DCI_LENGTH<=32) {
|
||||
dci_flip[0] = dci[3];
|
||||
dci_flip[1] = dci[2];
|
||||
dci_flip[2] = dci[1];
|
||||
dci_flip[3] = dci[0];
|
||||
#ifdef DEBUG_DCI_ENCODING
|
||||
printf("DCI => %x,%x,%x,%x\n",
|
||||
dci_flip[0],dci_flip[1],dci_flip[2],dci_flip[3]);
|
||||
|
||||
#endif
|
||||
} else {
|
||||
dci_flip[0] = dci[7];
|
||||
dci_flip[1] = dci[6];
|
||||
@@ -2271,7 +2279,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
|
||||
/* clear all bits, the above code may generate too much false detections
|
||||
* (not sure about this, to be checked somehow)
|
||||
*/
|
||||
// memset(e, 0, DCI_BITS_MAX);
|
||||
// memset(e, 0, DCI_BITS_MAX);
|
||||
|
||||
e_ptr = e;
|
||||
|
||||
@@ -2285,11 +2293,11 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
|
||||
if (dci_alloc[i].L == (uint8_t)L) {
|
||||
|
||||
#ifdef DEBUG_DCI_ENCODING
|
||||
if (dci_alloc[i].rnti==0x02)
|
||||
LOG_I(PHY,"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x\n",i,num_dci,dci_alloc[i].firstCCE,dci_alloc[i].dci_length,dci_alloc[i].L,
|
||||
if (dci_alloc[i].rnti==0x1234)
|
||||
LOG_D(PHY,"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x\n",i,num_dci,dci_alloc[i].firstCCE,dci_alloc[i].dci_length,dci_alloc[i].L,
|
||||
*(unsigned int*)dci_alloc[i].dci_pdu,
|
||||
dci_alloc[i].rnti);
|
||||
//dump_dci(frame_parms,&dci_alloc[i]);
|
||||
dump_dci(frame_parms,&dci_alloc[i]);
|
||||
#endif
|
||||
|
||||
if (dci_alloc[i].firstCCE>=0) {
|
||||
@@ -2894,17 +2902,17 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
|
||||
LOG_D(PHY,"[DCI search nPdcch %d - common] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x)\n",
|
||||
pdcch_vars[eNB_id]->num_pdcch_symbols,m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask);
|
||||
else
|
||||
LOG_D(PHY,"[DCI search nPdcch %d - ue spec] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x) format %d\n",
|
||||
pdcch_vars[eNB_id]->num_pdcch_symbols,m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask,format_c);
|
||||
LOG_D(PHY,"[DCI search nPdcch %d - ue spec %x] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x) format %d\n",
|
||||
pdcch_vars[eNB_id]->num_pdcch_symbols,pdcch_vars[eNB_id]->crnti,m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask,format_c);
|
||||
|
||||
dci_decoding(sizeof_bits,
|
||||
L,
|
||||
&pdcch_vars[eNB_id]->e_rx[CCEind*72],
|
||||
&dci_decoded_output[current_thread_id][0]);
|
||||
/*
|
||||
/*
|
||||
for (i=0;i<3+(sizeof_bits>>3);i++)
|
||||
printf("dci_decoded_output[%d] => %x\n",i,dci_decoded_output[i]);
|
||||
*/
|
||||
printf("dci_decoded_output[%d][%d] => %x\n",current_thread_id,i,dci_decoded_output[current_thread_id][i]);
|
||||
*/
|
||||
|
||||
crc = (crc16(&dci_decoded_output[current_thread_id][0],sizeof_bits)>>16) ^ extract_crc(&dci_decoded_output[current_thread_id][0],sizeof_bits);
|
||||
#ifdef DEBUG_DCI_DECODING
|
||||
@@ -3823,7 +3831,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
} else if (tmode == 3) {
|
||||
|
||||
|
||||
LOG_D(PHY," Now check UE_SPEC format 2A_2A search aggregation 1 dci length: %d[bits] %d[bytes]\n",format2A_size_bits,format2A_size_bytes);
|
||||
// LOG_D(PHY," Now check UE_SPEC format 2A_2A search aggregation 1 dci length: %d[bits] %d[bytes]\n",format2A_size_bits,format2A_size_bytes);
|
||||
// Now check UE_SPEC format 2A_2A search spaces at aggregation 1
|
||||
old_dci_cnt=dci_cnt;
|
||||
dci_decoding_procedure0(pdcch_vars,0,mode,
|
||||
@@ -3895,7 +3903,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
return(dci_cnt);
|
||||
|
||||
// Now check UE_SPEC format 2_2A search spaces at aggregation 4
|
||||
LOG_D(PHY," Now check UE_SPEC format 2_2A search spaces at aggregation 4 \n");
|
||||
// LOG_D(PHY," Now check UE_SPEC format 2_2A search spaces at aggregation 4 \n");
|
||||
old_dci_cnt=dci_cnt;
|
||||
dci_decoding_procedure0(pdcch_vars,0,mode,
|
||||
subframe,
|
||||
@@ -4238,3 +4246,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
|
||||
return(dci_cnt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -44,6 +44,11 @@
|
||||
#include "LAYER2/MAC/extern.h"
|
||||
#include "LAYER2/MAC/defs.h"
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
//#undef LOG_I
|
||||
//#define LOG_I(A,B,C...) printf(B,C)
|
||||
|
||||
//#define DEBUG_DCI
|
||||
|
||||
uint32_t localRIV2alloc_LUT6[32];
|
||||
@@ -4680,13 +4685,13 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
|
||||
|
||||
if(harq_pid>=8)
|
||||
{
|
||||
LOG_I(PHY,"bad harq id \n");
|
||||
// LOG_I(PHY,"bad harq id \n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
if(dci_format == format1 && ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) )
|
||||
{
|
||||
LOG_I(PHY,"bad dci format \n");
|
||||
// LOG_I(PHY,"bad dci format \n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -4695,13 +4700,13 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
|
||||
{
|
||||
if(pdlsch0_harq->round == 0)
|
||||
{
|
||||
LOG_I(PHY,"bad dci mcs + round \n");
|
||||
// LOG_I(PHY,"bad dci mcs + round \n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
if((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti))
|
||||
{
|
||||
LOG_I(PHY,"bad dci mcs + rnti \n");
|
||||
// LOG_I(PHY,"bad dci mcs + rnti \n");
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
@@ -4767,7 +4772,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
|
||||
|
||||
if(rballoc > RIV_max)
|
||||
{
|
||||
LOG_I(PHY,"bad dci rballoc rballoc %d RIV_max %lld \n",rballoc, RIV_max);
|
||||
// LOG_I(PHY,"bad dci rballoc rballoc %d RIV_max %lld \n",rballoc, RIV_max);
|
||||
// DCI false detection
|
||||
return(0);
|
||||
}
|
||||
@@ -4775,7 +4780,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
|
||||
if(NPRB == 0)
|
||||
{
|
||||
// DCI false detection
|
||||
LOG_I(PHY,"bad NPRB = 0 \n");
|
||||
// LOG_I(PHY,"bad NPRB = 0 \n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -4894,13 +4899,13 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
|
||||
// I- check dci content minimum coherency
|
||||
if(harq_pid>=8)
|
||||
{
|
||||
LOG_I(PHY,"bad harq pid\n");
|
||||
// LOG_I(PHY,"bad harq pid\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
if( (rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti) )
|
||||
{
|
||||
LOG_I(PHY,"bad rnti\n");
|
||||
// LOG_I(PHY,"bad rnti\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -4909,7 +4914,7 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
|
||||
{
|
||||
if(pdlsch0_harq->round == 0)
|
||||
{
|
||||
LOG_I(PHY,"bad mcs1\n");
|
||||
// LOG_I(PHY,"bad mcs1\n");
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
@@ -4918,7 +4923,7 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
|
||||
{
|
||||
if(pdlsch1_harq->round == 0)
|
||||
{
|
||||
LOG_I(PHY,"bad mcs2\n");
|
||||
// LOG_I(PHY,"bad mcs2\n");
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
@@ -4927,14 +4932,14 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
|
||||
if((pdlsch0_harq->round == 0) && (rv1 > 0) && (mcs1 != 0))
|
||||
{
|
||||
// DCI false detection
|
||||
LOG_I(PHY,"bad rv1\n");
|
||||
// LOG_I(PHY,"bad rv1\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
if((pdlsch1_harq->round == 0) && (rv2 > 0) && (mcs2 != 0))
|
||||
{
|
||||
// DCI false detection
|
||||
LOG_I(PHY,"bad rv2\n");
|
||||
// LOG_I(PHY,"bad rv2\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -4995,14 +5000,14 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
|
||||
if( (rballoc > RIV_max) && (rah == 1) )
|
||||
{
|
||||
// DCI false detection
|
||||
LOG_I(PHY,"bad rballoc %d RIV_max %lld\n", rballoc, RIV_max);
|
||||
// LOG_I(PHY,"bad rballoc %d RIV_max %lld\n", rballoc, RIV_max);
|
||||
return(0);
|
||||
}
|
||||
|
||||
if(NPRB == 0)
|
||||
{
|
||||
// DCI false detection
|
||||
LOG_I(PHY,"bad NPRB\n");
|
||||
// LOG_I(PHY,"bad NPRB\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -5026,7 +5031,7 @@ void compute_llr_offset(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
pdsch_vars->llr_offset[pdcch_vars->num_pdcch_symbols] = 0;
|
||||
|
||||
//LOG_I(PHY,"compute_llr_offset: nb RB %d - Qm %d \n", nb_rb_alloc, dlsch0_harq->Qm);
|
||||
LOG_I(PHY,"compute_llr_offset: nb RB %d - Qm %d \n", nb_rb_alloc, dlsch0_harq->Qm);
|
||||
|
||||
//dlsch0_harq->rb_alloc_even;
|
||||
//dlsch0_harq->rb_alloc_odd;
|
||||
@@ -5056,15 +5061,15 @@ void compute_llr_offset(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
if(symbol < (frame_parms->symbols_per_tti-1))
|
||||
pdsch_vars->llr_offset[symbol+1] = pdsch_vars->llr_offset[symbol] + llr_offset;
|
||||
|
||||
// LOG_I(PHY,"Granted Re subframe %d / symbol %d => %d (%d RBs)\n", subframe, symbol_mod, granted_re,dlsch0_harq->nb_rb);
|
||||
// LOG_I(PHY,"Pbch/PSS/SSS Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, pbch_pss_sss_re);
|
||||
// LOG_I(PHY,"CRS Re Per PRB subframe %d / symbol %d => %d \n", subframe, symbol_mod, crs_re);
|
||||
// LOG_I(PHY,"Data Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, data_re);
|
||||
LOG_I(PHY,"Granted Re subframe %d / symbol %d => %d (%d RBs)\n", subframe, symbol_mod, granted_re,dlsch0_harq->nb_rb);
|
||||
LOG_I(PHY,"Pbch/PSS/SSS Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, pbch_pss_sss_re);
|
||||
LOG_I(PHY,"CRS Re Per PRB subframe %d / symbol %d => %d \n", subframe, symbol_mod, crs_re);
|
||||
LOG_I(PHY,"Data Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, data_re);
|
||||
|
||||
|
||||
|
||||
//LOG_I(PHY,"Data Re subframe %d-symbol %d => llr length %d, llr offset %d \n", subframe, symbol,
|
||||
// pdsch_vars->llr_length[symbol], pdsch_vars->llr_offset[symbol]);
|
||||
LOG_I(PHY,"Data Re subframe %d-symbol %d => llr length %d, llr offset %d \n", subframe, symbol,
|
||||
pdsch_vars->llr_length[symbol], pdsch_vars->llr_offset[symbol]);
|
||||
}
|
||||
}
|
||||
void prepare_dl_decoding_format1_1A(DCI_format_t dci_format,
|
||||
@@ -5179,7 +5184,7 @@ void prepare_dl_decoding_format1_1A(DCI_format_t dci_format,
|
||||
//packet was actually decoded in previous transmission (ACK was missed by eNB)
|
||||
//However, the round is not a good check as it might have been decoded in a retransmission prior to this one.
|
||||
{
|
||||
LOG_D(PHY,"skip pdsch decoding and report ack\n");
|
||||
// LOG_D(PHY,"skip pdsch decoding and report ack\n");
|
||||
// skip pdsch decoding and report ack
|
||||
//pdlsch0_harq->status = SCH_IDLE;
|
||||
pdlsch0->active = 0;
|
||||
@@ -5804,7 +5809,7 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
|
||||
//LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW0 subframe %d (pid %d, round %d)\n",
|
||||
// subframe,harq_pid,dlsch0_harq->round);
|
||||
if ( dlsch0_harq->first_tx==1) {
|
||||
LOG_D(PHY,"Format 2 DCI First TX0: Clearing flag\n");
|
||||
// LOG_D(PHY,"Format 2 DCI First TX0: Clearing flag\n");
|
||||
dlsch0_harq->first_tx = 0;
|
||||
}
|
||||
}
|
||||
@@ -5852,7 +5857,7 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
|
||||
//LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW1 subframe %d (pid %d, round %d)\n",
|
||||
// subframe,harq_pid,dlsch0_harq->round);
|
||||
if (dlsch1_harq->first_tx==1) {
|
||||
LOG_D(PHY,"Format 2 DCI First TX1: Clearing flag\n");
|
||||
// LOG_D(PHY,"Format 2 DCI First TX1: Clearing flag\n");
|
||||
dlsch1_harq->first_tx = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -604,7 +604,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
|
||||
// if (dlsch->harq_processes[harq_pid]->Ndi == 1) { // this is a new packet
|
||||
if (dlsch->harq_processes[harq_pid]->round == 0) { // this is a new packet
|
||||
#ifdef DEBUG_DLSCH_CODING
|
||||
printf("encoding thinks this is a new packet \n");
|
||||
printf("encoding thinks this is a new packet for harq_pid %d (%p) \n",harq_pid,dlsch->harq_processes[harq_pid]->b);
|
||||
#endif
|
||||
/*
|
||||
int i;
|
||||
@@ -614,6 +614,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
|
||||
printf("\n");
|
||||
*/
|
||||
// Add 24-bit crc (polynomial A) to payload
|
||||
|
||||
crc = crc24a(a,
|
||||
A)>>8;
|
||||
a[A>>3] = ((uint8_t*)&crc)[2];
|
||||
|
||||
@@ -37,6 +37,12 @@
|
||||
#include "SCHED/extern.h"
|
||||
#include "SIMULATION/TOOLS/defs.h"
|
||||
//#define DEBUG_DLSCH_DECODING
|
||||
//#define UE_DEBUG_TRACE 1
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
//#undef LOG_I
|
||||
//#define LOG_I(A,B,C...) printf(B,C)
|
||||
|
||||
extern double cpuf;
|
||||
|
||||
|
||||
@@ -49,12 +49,14 @@ int16_t interf_unaw_shift = 13;
|
||||
//#define DEBUG_HARQ
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D LOG_I
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
//#undef LOG_I
|
||||
//#define LOG_I(A,B,C...) printf(B,C)
|
||||
|
||||
//#define DEBUG_PHY 1
|
||||
#define DEBUG_PHY 1
|
||||
//#define DEBUG_DLSCH_DEMOD 1
|
||||
|
||||
|
||||
//#define DISABLE_LOG_X
|
||||
|
||||
// [MCS][i_mod (0,1,2) = (2,4,6)]
|
||||
unsigned char offset_mumimo_llr_drange_fix=0;
|
||||
@@ -370,7 +372,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
|
||||
//printf("nb_rb = %d, eNB_id %d\n",nb_rb,eNB_id);
|
||||
if (nb_rb==0) {
|
||||
LOG_D(PHY,"dlsch_demodulation.c: nb_rb=0\n");
|
||||
// LOG_D(PHY,"dlsch_demodulation.c: nb_rb=0\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -845,7 +847,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
pllr_symbol_cw1 = (int8_t*)pdsch_vars[eNB_id]->llr[1];
|
||||
pllr_symbol_cw0 += llr_offset_symbol;
|
||||
pllr_symbol_cw1 += llr_offset_symbol;
|
||||
/*
|
||||
|
||||
LOG_I(PHY,"compute LLRs [AbsSubframe %d.%d-%d] NbRB %d Qm %d LLRs-Length %d LLR-Offset %d @LLR Buff %x @LLR Buff(symb) %x\n",
|
||||
frame, subframe,symbol,
|
||||
nb_rb,dlsch0_harq->Qm,
|
||||
@@ -853,7 +855,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
pdsch_vars[eNB_id]->llr_offset[symbol],
|
||||
(int16_t*)pdsch_vars[eNB_id]->llr[0],
|
||||
pllr_symbol_cw0);
|
||||
*/
|
||||
|
||||
switch (dlsch0_harq->Qm) {
|
||||
case 2 :
|
||||
if ((rx_type==rx_standard) || (codeword_TB1 == -1)) {
|
||||
|
||||
@@ -2125,6 +2125,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
||||
amp_rho_b = (int16_t)(((int32_t)amp*dlsch1->sqrt_rho_b)>>13);
|
||||
}
|
||||
|
||||
|
||||
if (mod_order0 == 4)
|
||||
for (i=0;i<4; i++) {
|
||||
qam16_table_a0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15);
|
||||
|
||||
@@ -124,14 +124,18 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
}
|
||||
|
||||
#ifdef DEBUG_SCRAMBLING
|
||||
#ifdef Rel14
|
||||
printf("scrambling: i0 %d rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x\n",dlsch->i0,dlsch->rnti,q,Ns,frame_parms->Nid_cell, G, x2);
|
||||
#else
|
||||
printf("scrambling: rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x\n",dlsch->rnti,q,Ns,frame_parms->Nid_cell, G, x2);
|
||||
#endif
|
||||
#endif
|
||||
s = lte_gold_scram(&x1, &x2, 1);
|
||||
|
||||
for (n=0; n<(1+(G>>5)); n++) {
|
||||
|
||||
#ifdef DEBUG_SCRAMBLING
|
||||
printf("scrambling %d : %d => ",k,e[k]);
|
||||
for (int k=0;k<32;k++) printf("scrambling %d : %d xor %d = %d\n",k+(n<<5),e[k],(s>>k)&1,e[k]^((s>>k)&1));
|
||||
#endif
|
||||
|
||||
|
||||
@@ -171,9 +175,8 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
// This is not faster for some unknown reason
|
||||
// ((__m128i *)e)[0] = _mm_xor_si128(((__m128i *)e)[0],((__m128i *)scrambling_lut)[s&65535]);
|
||||
// ((__m128i *)e)[1] = _mm_xor_si128(((__m128i *)e)[1],((__m128i *)scrambling_lut)[s>>16]);
|
||||
#ifdef DEBUG_SCRAMBLING
|
||||
printf("%d\n",e[k]);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
s = lte_gold_scram(&x1, &x2, 0);
|
||||
@@ -213,7 +216,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
for (i=0; i<(1+(G>>5)); i++) {
|
||||
for (j=0; j<32; j++,k++) {
|
||||
#ifdef DEBUG_SCRAMBLING
|
||||
printf("unscrambling %d : %d => ",k,llr[k]);
|
||||
printf("unscrambling %d : %d xor %d =",k,llr[k],(s>>j)&1);
|
||||
#endif
|
||||
llr[k] = ((2*((s>>j)&1))-1)*llr[k];
|
||||
#ifdef DEBUG_SCRAMBLING
|
||||
|
||||
@@ -33,20 +33,20 @@ double ratioPB[2][4]={{ 0.00000, -0.96910, -2.21849, -3.97940}, //in db
|
||||
|
||||
double pa_values[8]={-6.0,-4.77,-3.0,-1.77,0.0,1.0,2.0,3.0}; //reported by higher layers
|
||||
|
||||
double get_pa_dB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated)
|
||||
double get_pa_dB(uint8_t pa)
|
||||
{
|
||||
if (pdsch_config_dedicated)
|
||||
return(pa_values[ pdsch_config_dedicated->p_a]);
|
||||
else
|
||||
return(0.0);
|
||||
AssertFatal(pa<8,"pa %d is not in (0...7)\n",pa);
|
||||
|
||||
return(pa_values[pa]);
|
||||
|
||||
}
|
||||
|
||||
double computeRhoA_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
double computeRhoA_eNB(uint8_t pa,
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB, int dl_power_off, uint8_t n_antenna_port){
|
||||
double rho_a_dB;
|
||||
double sqrt_rho_a_lin;
|
||||
|
||||
rho_a_dB = get_pa_dB(pdsch_config_dedicated);
|
||||
rho_a_dB = get_pa_dB(pa);
|
||||
|
||||
if(!dl_power_off) //if dl_power_offset is 0, this is for MU-interference, TM5
|
||||
rho_a_dB-=10*log10(2);
|
||||
@@ -59,14 +59,14 @@ double computeRhoA_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
dlsch_eNB->sqrt_rho_a= (short) (sqrt_rho_a_lin*pow(2,13));
|
||||
|
||||
#if DEBUG_PC
|
||||
printf("eNB: p_a=%d, value=%f, sqrt_rho_a=%d\n",pdsch_config_dedicated->p_a,pa_values[ pdsch_config_dedicated->p_a],dlsch_eNB->sqrt_rho_a);
|
||||
printf("eNB: p_a=%d, value=%f, sqrt_rho_a=%d\n",p_a,pa_values[ pdsch_config_dedicated->p_a],dlsch_eNB->sqrt_rho_a);
|
||||
#endif
|
||||
|
||||
return(rho_a_dB);
|
||||
}
|
||||
|
||||
double computeRhoB_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
PDSCH_CONFIG_COMMON *pdsch_config_common,
|
||||
double computeRhoB_eNB(uint8_t pa,
|
||||
uint8_t pb,
|
||||
uint8_t n_antenna_port,
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB,
|
||||
int dl_power_off)
|
||||
@@ -75,19 +75,21 @@ double computeRhoB_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
double rho_a_dB, rho_b_dB;
|
||||
double sqrt_rho_b_lin;
|
||||
|
||||
rho_a_dB= computeRhoA_eNB(pdsch_config_dedicated,dlsch_eNB,dl_power_off, n_antenna_port);
|
||||
AssertFatal(pa<8,"pa %d is not in (0...7)\n",pa);
|
||||
AssertFatal(pb<4,"pb %d is not in (0...3)\n",pb);
|
||||
rho_a_dB= computeRhoA_eNB(pa,dlsch_eNB,dl_power_off, n_antenna_port);
|
||||
|
||||
if(n_antenna_port>1)
|
||||
rho_b_dB= ratioPB[1][pdsch_config_common->p_b] + rho_a_dB;
|
||||
rho_b_dB= ratioPB[1][pb] + rho_a_dB;
|
||||
else
|
||||
rho_b_dB= ratioPB[0][pdsch_config_common->p_b] + rho_a_dB;
|
||||
rho_b_dB= ratioPB[0][pb] + rho_a_dB;
|
||||
|
||||
sqrt_rho_b_lin= pow(10,(0.05*rho_b_dB));
|
||||
|
||||
dlsch_eNB->sqrt_rho_b= (short) (sqrt_rho_b_lin*pow(2,13));
|
||||
|
||||
#ifdef DEBUG_PC
|
||||
printf("eNB: n_ant=%d, p_b=%d -> rho_b/rho_a=%f -> sqrt_rho_b=%d\n",n_antenna_port,pdsch_config_common->p_b,ratioPB[1][pdsch_config_common->p_b],dlsch_eNB->sqrt_rho_b);
|
||||
printf("eNB: n_ant=%d, p_b=%d -> rho_b/rho_a=%f -> sqrt_rho_b=%d\n",n_antenna_port,pb,ratioPB[1][pb],dlsch_eNB->sqrt_rho_b);
|
||||
#endif
|
||||
return(rho_b_dB);
|
||||
}
|
||||
@@ -102,7 +104,7 @@ double computeRhoA_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
double rho_a_dB;
|
||||
double sqrt_rho_a_lin;
|
||||
|
||||
rho_a_dB = get_pa_dB(pdsch_config_dedicated);
|
||||
rho_a_dB = get_pa_dB(pdsch_config_dedicated->p_a);
|
||||
|
||||
if(!dl_power_off)
|
||||
rho_a_dB-=10*log10(2);
|
||||
|
||||
@@ -2221,15 +2221,15 @@ uint32_t dlsch_decoding_abstraction(double *dlsch_MIPB,
|
||||
uint8_t num_pdcch_symbols);
|
||||
|
||||
// DL power control functions
|
||||
double get_pa_dB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated);
|
||||
double get_pa_dB(uint8_t pa);
|
||||
|
||||
double computeRhoA_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB,
|
||||
double computeRhoA_eNB(uint8_t pa,
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB,
|
||||
int dl_power_off,
|
||||
uint8_t n_antenna_port);
|
||||
|
||||
double computeRhoB_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
PDSCH_CONFIG_COMMON *pdsch_config_common,
|
||||
double computeRhoB_eNB(uint8_t pa,
|
||||
uint8_t pb,
|
||||
uint8_t n_antenna_port,
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB,
|
||||
int dl_power_off);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "common/ran_context.h"
|
||||
|
||||
char* namepointer_chMag ;
|
||||
char fmageren_name2[512];
|
||||
|
||||
@@ -37,6 +37,11 @@
|
||||
#include "nfapi_interface.h"
|
||||
#include "fapi_l1.h"
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
//#undef LOG_I
|
||||
//#define LOG_I(A,B,C...) printf(B,C)
|
||||
|
||||
int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req);
|
||||
int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req);
|
||||
int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req);
|
||||
@@ -190,12 +195,12 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr
|
||||
eNB->pdsch_config_dedicated[UE_id].p_a = rel8->pa;
|
||||
|
||||
if (dlsch0->active){
|
||||
computeRhoA_eNB(&eNB->pdsch_config_dedicated[UE_id], dlsch0,dlsch0_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB);
|
||||
computeRhoB_eNB(&eNB->pdsch_config_dedicated[UE_id],&(eNB->frame_parms.pdsch_config_common),eNB->frame_parms.nb_antenna_ports_eNB,dlsch0,dlsch0_harq->dl_power_off);
|
||||
computeRhoA_eNB(rel8->pa, dlsch0,dlsch0_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB);
|
||||
computeRhoB_eNB(rel8->pa,eNB->frame_parms.pdsch_config_common.p_b,eNB->frame_parms.nb_antenna_ports_eNB,dlsch0,dlsch0_harq->dl_power_off);
|
||||
}
|
||||
if (dlsch1->active){
|
||||
computeRhoA_eNB(&eNB->pdsch_config_dedicated[UE_id], dlsch1,dlsch1_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB);
|
||||
computeRhoB_eNB(&eNB->pdsch_config_dedicated[UE_id],&(eNB->frame_parms.pdsch_config_common),eNB->frame_parms.nb_antenna_ports_eNB,dlsch1,dlsch1_harq->dl_power_off);
|
||||
computeRhoA_eNB(rel8->pa, dlsch1,dlsch1_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB);
|
||||
computeRhoB_eNB(rel8->pa,eNB->frame_parms.pdsch_config_common.p_b,eNB->frame_parms.nb_antenna_ports_eNB,dlsch1,dlsch1_harq->dl_power_off);
|
||||
}
|
||||
|
||||
dlsch0_harq->pdsch_start = eNB->pdcch_vars[subframe & 1].num_pdcch_symbols;
|
||||
|
||||
@@ -50,6 +50,9 @@
|
||||
# include "intertask_interface.h"
|
||||
#endif
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
|
||||
extern uint8_t nfapi_mode;
|
||||
int oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind);
|
||||
|
||||
@@ -395,6 +398,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
||||
|
||||
|
||||
|
||||
|
||||
void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
||||
eNB_rxtx_proc_t *proc,
|
||||
relaying_type_t r_type,
|
||||
@@ -416,7 +420,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
||||
|
||||
int offset = eNB->CC_id;//proc == &eNB->proc.proc_rxtx[0] ? 0 : 1;
|
||||
|
||||
|
||||
|
||||
if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)==SF_UL)) return;
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX+offset,1);
|
||||
@@ -429,6 +433,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (nfapi_mode == 0 || nfapi_mode == 1) {
|
||||
if (is_pmch_subframe(frame,subframe,fp)) {
|
||||
pmch_procedures(eNB,proc,rn,r_type);
|
||||
@@ -439,6 +444,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// clear existing ulsch dci allocations before applying info from MAC (this is table
|
||||
ul_subframe = pdcch_alloc2ul_subframe(fp,subframe);
|
||||
ul_frame = pdcch_alloc2ul_frame(fp,frame,subframe);
|
||||
|
||||
@@ -73,6 +73,9 @@
|
||||
|
||||
extern double cpuf;
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
|
||||
void Msg1_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
|
||||
void Msg3_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
|
||||
|
||||
@@ -1373,7 +1376,7 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
if (ue->mac_enabled==1){
|
||||
// ask L2 for RACH transport
|
||||
if ((mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) && (mode != no_L2_connect) ) {
|
||||
LOG_D(PHY,"Getting PRACH resources\n");
|
||||
//LOG_D(PHY,"Getting PRACH resources\n");
|
||||
|
||||
ue->prach_resources[eNB_id] = ue_get_rach(ue->Mod_id,
|
||||
ue->CC_id,
|
||||
@@ -1590,7 +1593,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
LOG_D(PHY,"Generating PUSCH (Abssubframe: %d.%d): harq-Id: %d, round: %d, MaxReTrans: %d \n",frame_tx,subframe_tx,harq_pid,ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,ue->ulsch[eNB_id]->Mlimit);
|
||||
if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round >= (ue->ulsch[eNB_id]->Mlimit - 1))
|
||||
{
|
||||
LOG_D(PHY,"PUSCH MAX Retransmission achieved ==> send last pusch\n");
|
||||
// LOG_D(PHY,"PUSCH MAX Retransmission achieved ==> send last pusch\n");
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
|
||||
}
|
||||
@@ -2070,10 +2073,10 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
(bundling_flag==bundling) ||
|
||||
((frame_parms->frame_type==TDD)&&(frame_parms->tdd_config==1)&&((subframe_tx!=2)||(subframe_tx!=7)))) {
|
||||
format = pucch_format1a;
|
||||
LOG_D(PHY,"[UE] PUCCH 1a\n");
|
||||
// LOG_D(PHY,"[UE] PUCCH 1a\n");
|
||||
} else {
|
||||
format = pucch_format1b;
|
||||
LOG_D(PHY,"[UE] PUCCH 1b\n");
|
||||
// LOG_D(PHY,"[UE] PUCCH 1b\n");
|
||||
}
|
||||
|
||||
// Part - I
|
||||
@@ -3108,7 +3111,7 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
|
||||
int ret=0;
|
||||
|
||||
if (is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
|
||||
LOG_D(PHY,"ue calling pmch subframe ..\n ");
|
||||
// LOG_D(PHY,"ue calling pmch subframe ..\n ");
|
||||
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Querying for PMCH demodulation\n",
|
||||
ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx);
|
||||
|
||||
+406
-1230
File diff suppressed because it is too large
Load Diff
@@ -1079,7 +1079,7 @@ typedef struct eNB_MAC_INST_s {
|
||||
/// Prealocated TX pdu list
|
||||
nfapi_tx_request_pdu_t
|
||||
tx_request_pdu[MAX_NUM_CCs][MAX_NUM_TX_REQUEST_PDU];
|
||||
/// NFAPI DL PDU structure
|
||||
/// NFAPI DL PDU structuree
|
||||
nfapi_tx_request_t TX_req[MAX_NUM_CCs];
|
||||
/// UL handle
|
||||
uint32_t ul_handle;
|
||||
|
||||
Reference in New Issue
Block a user