mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-21 08:30:31 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bea08ab65 | ||
|
|
6e21152fac | ||
|
|
a6e6a2d649 | ||
|
|
eb711645d0 | ||
|
|
ec92c55528 | ||
|
|
33e89e3e9f |
@@ -60,7 +60,7 @@ int lte_segmentation(unsigned char *input_buffer,
|
||||
}
|
||||
|
||||
if ((*C)>MAX_NUM_DLSCH_SEGMENTS) {
|
||||
msg("lte_segmentation.c: too many segments %d\n",*C);
|
||||
LOG_E(PHY,"lte_segmentation.c: too many segments %d, B %d, L %d, Bprime %d\n",*C,B,L,Bprime);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -3248,7 +3248,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
SI_RNTI,
|
||||
ra_rnti,
|
||||
P_RNTI,
|
||||
3,
|
||||
0,
|
||||
format1A,
|
||||
format1A,
|
||||
format1A,
|
||||
@@ -3277,7 +3277,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
SI_RNTI,
|
||||
ra_rnti,
|
||||
P_RNTI,
|
||||
2,
|
||||
1,
|
||||
format1A,
|
||||
format1A,
|
||||
format1A,
|
||||
@@ -3310,7 +3310,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
SI_RNTI,
|
||||
ra_rnti,
|
||||
P_RNTI,
|
||||
1,
|
||||
2,
|
||||
format1A,
|
||||
format1A,
|
||||
format1A,
|
||||
@@ -3339,7 +3339,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
SI_RNTI,
|
||||
ra_rnti,
|
||||
P_RNTI,
|
||||
0,
|
||||
3,
|
||||
format1A,
|
||||
format1A,
|
||||
format1A,
|
||||
|
||||
@@ -4456,6 +4456,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
dlsch0_harq->DCINdi = ndi;
|
||||
|
||||
dlsch[0]->harq_ack[subframe].send_harq_status = 1;
|
||||
if (dlsch0_harq->first_tx==1) {
|
||||
LOG_D(PHY,"[PDSCH %x/%d] Format 1 DCI First TX: Clearing flag\n");
|
||||
dlsch0_harq->first_tx = 0;
|
||||
@@ -5556,7 +5557,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
|
||||
#ifdef DEBUG_DCI
|
||||
|
||||
if (dlsch[0] && (dlsch[0]->rnti != 0xffff)) {
|
||||
printf("dci_format:%d \n",dci_format);
|
||||
printf("dci_format:%d Abssubframe: %d.%d \n",dci_format,frame,subframe);
|
||||
printf("PDSCH dlsch0 UE: rnti %x\n",dlsch[0]->rnti);
|
||||
printf("PDSCH dlsch0 UE: NBRB %d\n",dlsch0_harq->nb_rb);
|
||||
printf("PDSCH dlsch0 UE: rballoc %x\n",dlsch0_harq->rb_alloc_even[0]);
|
||||
@@ -6231,13 +6232,22 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
|
||||
uint8_t harq_pid;
|
||||
uint8_t transmission_mode = ue->transmission_mode[eNB_id];
|
||||
ANFBmode_t AckNackFBMode = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
|
||||
ANFBmode_t AckNackFBMode;
|
||||
LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
|
||||
// LTE_UE_DLSCH_t **dlsch = ue->dlsch[0];
|
||||
PHY_MEASUREMENTS *meas = &ue->measurements;
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||
// uint32_t current_dlsch_cqi = ue->current_dlsch_cqi[eNB_id];
|
||||
|
||||
if(frame_parms->frame_type == TDD)
|
||||
{
|
||||
AckNackFBMode = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
|
||||
}
|
||||
else
|
||||
{
|
||||
AckNackFBMode = 1; // 1: multiplexing for FDD
|
||||
}
|
||||
|
||||
uint32_t cqi_req;
|
||||
uint32_t dai=0;
|
||||
uint32_t cshift;
|
||||
@@ -6444,29 +6454,30 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
// UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx);
|
||||
//#endif
|
||||
|
||||
|
||||
ulsch->harq_processes[harq_pid] = ulsch->harq_processes[8];
|
||||
ulsch->harq_processes[harq_pid]->round++;
|
||||
//LOG_I(PHY," Adaptative retransmission - copy temporary harq Process to current harq process. [harqId %d round %d] \n",harq_pid, ulsch->harq_processes[8]->round);
|
||||
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->round >= UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx)
|
||||
if (ulsch->harq_processes[harq_pid]->round > 0) // NACK detected on phich
|
||||
{
|
||||
ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
ulsch->harq_processes[harq_pid]->round = 0;
|
||||
ulsch->harq_processes[harq_pid]->status = IDLE;
|
||||
//LOG_I(PHY," PUSCH MAX Retransmission acheived ==> flush harq buff (%d) \n",harq_pid);
|
||||
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK MAX RETRANS(%d) ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag, ulsch->harq_processes[harq_pid]->round);
|
||||
}
|
||||
else
|
||||
{
|
||||
// ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
|
||||
uint8_t rv_table[4] = {0, 2, 3, 1};
|
||||
ulsch->harq_processes[harq_pid]->rvidx = rv_table[ulsch->harq_processes[harq_pid]->round&3];
|
||||
ulsch->O_RI = 0;
|
||||
ulsch->O = 0;
|
||||
ulsch->uci_format = HLC_subband_cqi_nopmi;
|
||||
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag,ulsch->harq_processes[harq_pid]->round);
|
||||
// ulsch->harq_processes[harq_pid]->round++; already done on phich_rx
|
||||
ulsch->harq_processes[harq_pid] = ulsch->harq_processes[8];
|
||||
// LOG_I(PHY," Adaptative retransmission - copy temporary harq Process to current harq process. [harqId %d round %d] \n",harq_pid, ulsch->harq_processes[8]->round);
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->round >= UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx)
|
||||
{
|
||||
ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
ulsch->harq_processes[harq_pid]->round = 0;
|
||||
ulsch->harq_processes[harq_pid]->status = IDLE;
|
||||
//LOG_I(PHY," PUSCH MAX Retransmission acheived ==> flush harq buff (%d) \n",harq_pid);
|
||||
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK MAX RETRANS(%d) ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag, ulsch->harq_processes[harq_pid]->round);
|
||||
}
|
||||
else
|
||||
{
|
||||
// ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
|
||||
uint8_t rv_table[4] = {0, 2, 3, 1};
|
||||
ulsch->harq_processes[harq_pid]->rvidx = rv_table[ulsch->harq_processes[harq_pid]->round&3];
|
||||
ulsch->O_RI = 0;
|
||||
ulsch->O = 0;
|
||||
ulsch->uci_format = HLC_subband_cqi_nopmi;
|
||||
//LOG_I(PHY," [HARQ-UL harqId: %d] Adaptative retransmission NACK ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag,ulsch->harq_processes[harq_pid]->round);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7087,7 +7098,8 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
|
||||
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
|
||||
|
||||
#ifdef DEBUG_DCI
|
||||
#ifdef DEBUG_DCI
|
||||
printf("Format 0 DCI : ulsch (ue): AbsSubframe %d.%d\n",proc->frame_rx,subframe);
|
||||
printf("Format 0 DCI : ulsch (ue): NBRB %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
|
||||
printf("Format 0 DCI :ulsch (ue): first_rb %d\n",ulsch->harq_processes[harq_pid]->first_rb);
|
||||
printf("Format 0 DCI :ulsch (ue): rballoc %d\n",rballoc);
|
||||
@@ -7106,6 +7118,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
|
||||
printf("Format 0 DCI :ulsch (ue): Nsymb_pusch %d\n",ulsch->Nsymb_pusch);
|
||||
printf("Format 0 DCI :ulsch (ue): cshift %d\n",ulsch->harq_processes[harq_pid]->n_DMRS2);
|
||||
printf("Format 0 DCI :ulsch (ue): phich status %d\n",ulsch->harq_processes[harq_pid]->status);
|
||||
#else
|
||||
UNUSED_VARIABLE(dai);
|
||||
#endif
|
||||
|
||||
@@ -1050,7 +1050,6 @@ void generate_phich(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
// This routine demodulates the PHICH and updates PUSCH/ULSCH parameters
|
||||
|
||||
|
||||
void rx_phich(PHY_VARS_UE *ue,
|
||||
UE_rxtx_proc_t *proc,
|
||||
uint8_t subframe,
|
||||
@@ -1085,8 +1084,10 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
if (!ulsch)
|
||||
return;
|
||||
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH RX Status: %d \n",ue->Mod_id,harq_pid,proc->frame_rx,subframe, ulsch->harq_processes[harq_pid]->status);
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->status == ACTIVE) {
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH RX ACTIVE\n",ue->Mod_id,harq_pid,proc->frame_rx,subframe);
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH RX ACTIVE\n",ue->Mod_id,harq_pid,proc->frame_rx,subframe);
|
||||
Ngroup_PHICH = (frame_parms->phich_config_common.phich_resource*frame_parms->N_RB_DL)/48;
|
||||
|
||||
if (((frame_parms->phich_config_common.phich_resource*frame_parms->N_RB_DL)%48) > 0)
|
||||
@@ -1386,11 +1387,20 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
// ulsch->harq_processes[harq_pid]->Ndi = 0;
|
||||
ulsch->harq_processes[harq_pid]->round++;
|
||||
|
||||
if (ulsch->harq_processes[harq_pid]->round >= UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx)
|
||||
if ( ulsch->harq_processes[harq_pid]->round >= (UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx - 1) )
|
||||
{
|
||||
ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
ulsch->harq_processes[harq_pid]->round = 0;
|
||||
// this is last push re transmission
|
||||
ulsch->harq_processes[harq_pid]->rvidx = rv_table[ulsch->harq_processes[harq_pid]->round&3];
|
||||
ulsch->O_RI = 0;
|
||||
ulsch->O = 0;
|
||||
ulsch->uci_format = HLC_subband_cqi_nopmi;
|
||||
|
||||
// disable phich decoding since it is the last retransmission
|
||||
ulsch->harq_processes[harq_pid]->status = IDLE;
|
||||
|
||||
//ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
//ulsch->harq_processes[harq_pid]->round = 0;
|
||||
|
||||
//LOG_I(PHY,"PUSCH MAX Retransmission acheived ==> flush harq buff (%d) \n",harq_pid);
|
||||
//LOG_I(PHY,"[HARQ-UL harqId: %d] PHICH NACK MAX RETRANS(%d) ==> subframe_scheduling_flag = %d round: %d\n", harq_pid, UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag, ulsch->harq_processes[harq_pid]->round);
|
||||
}
|
||||
|
||||
@@ -501,9 +501,9 @@ uint32_t ulsch_encoding(uint8_t *a,
|
||||
ulsch->harq_processes[harq_pid]->G = G;
|
||||
|
||||
/*
|
||||
LOG_I(PHY,"ULSCH Encoding G %d, Q_RI %d (O_RI%d, Msc_initial %d, Nsymb_initial%d, beta_offset_ri_times8 %d), Q_CQI %d \n",G,Q_RI,ulsch->O_RI,ulsch->harq_processes[harq_pid]->Msc_initial,ulsch->harq_processes[harq_pid]->Nsymb_initial,ulsch->beta_offset_ri_times8,Q_CQI);
|
||||
LOG_I(PHY,"ULSCH Encoding G %d, Q_RI %d (O_RI%d, Msc_initial %d, Nsymb_initial%d, beta_offset_ri_times8 %d), Q_CQI %d, Q_ACK %d \n",G,Q_RI,ulsch->O_RI,ulsch->harq_processes[harq_pid]->Msc_initial,ulsch->harq_processes[harq_pid]->Nsymb_initial,ulsch->beta_offset_ri_times8,Q_CQI,Q_ACK);
|
||||
|
||||
LOG_I(PHY,"ulsch_decoding (Nid_cell %d, rnti %x): harq_pid %d round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d\n",
|
||||
LOG_I(PHY,"ULSCH Encoding (Nid_cell %d, rnti %x): harq_pid %d round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d\n",
|
||||
frame_parms->Nid_cell,ulsch->rnti,
|
||||
harq_pid,
|
||||
ulsch->harq_processes[harq_pid]->round,
|
||||
|
||||
@@ -424,9 +424,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
|
||||
Q_m = get_Qm_ul(ulsch->harq_processes[harq_pid]->mcs);
|
||||
|
||||
//G = (int)ulsch->harq_processes[harq_pid]->nb_rb * (12 * Q_m) * (ulsch->Nsymb_pusch);
|
||||
G = (int)ulsch->harq_processes[harq_pid]->nb_rb * (12 * Q_m) * (ulsch->Nsymb_pusch);
|
||||
|
||||
G = ulsch->harq_processes[harq_pid]->G;
|
||||
|
||||
// Mapping
|
||||
nsymb = (frame_parms->Ncp==0) ? 14:12;
|
||||
|
||||
@@ -61,6 +61,9 @@ fifo_dump_emos_UE emos_dump_UE;
|
||||
# include "intertask_interface.h"
|
||||
#endif
|
||||
|
||||
#include "PHY/defs.h"
|
||||
|
||||
#include "PHY/CODING/extern.h"
|
||||
|
||||
#define DLSCH_RB_ALLOC 0x1fbf // skip DC RB (total 23/25 RBs)
|
||||
#define DLSCH_RB_ALLOC_12 0x0aaa // skip DC RB (total 23/25 RBs)
|
||||
@@ -944,9 +947,18 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
|
||||
ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
|
||||
ue->hw_timing_advance-
|
||||
ue->timing_advance-
|
||||
ue->N_TA_offset+5)%(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
|
||||
ue->hw_timing_advance-
|
||||
ue->timing_advance-
|
||||
ue->N_TA_offset+5);
|
||||
//LOG_E(PHY,"ul-signal [subframe: %d, ulsch_start %d]\n",subframe_tx, ulsch_start);
|
||||
|
||||
if(ulsch_start < 0)
|
||||
ulsch_start = ulsch_start + (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
|
||||
|
||||
if (ulsch_start > (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti))
|
||||
ulsch_start = ulsch_start % (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
|
||||
|
||||
//LOG_E(PHY,"ul-signal [subframe: %d, ulsch_start %d]\n",subframe_tx, ulsch_start);
|
||||
#else //this is the normal case
|
||||
ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-ue->N_TA_offset; //-ue->timing_advance;
|
||||
#endif //else EXMIMO
|
||||
@@ -1017,6 +1029,15 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
/*
|
||||
only for debug
|
||||
LOG_I(PHY,"ul-signal [subframe: %d, ulsch_start %d, TA: %d, rxOffset: %d, timing_advance: %d, hw_timing_advance: %d]\n",subframe_tx, ulsch_start, ue->N_TA_offset, ue->rx_offset, ue->timing_advance, ue->hw_timing_advance);
|
||||
if( (crash == 1) && (subframe_tx == 0) )
|
||||
{
|
||||
LOG_E(PHY,"***** DUMP TX Signal [ulsch_start %d] *****\n",ulsch_start);
|
||||
write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1);
|
||||
}
|
||||
*/
|
||||
|
||||
} //nb_antennas_tx
|
||||
|
||||
@@ -1214,6 +1235,13 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
|
||||
// deactivate service request
|
||||
// ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
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_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx);
|
||||
if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round >= (UE_mac_inst[eNB_id].scheduling_info.maxHARQ_Tx - 1))
|
||||
{
|
||||
LOG_D(PHY,"PUSCH MAX Retransmission acheived ==> send last pusch (%d) \n");
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
|
||||
}
|
||||
|
||||
ack_status = get_ack(&ue->frame_parms,
|
||||
ue->dlsch[eNB_id][0]->harq_ack,
|
||||
@@ -1226,6 +1254,27 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
|
||||
|
||||
|
||||
|
||||
if (ack_status > 0) {
|
||||
|
||||
// check if we received a PDSCH at subframe_tx - 4
|
||||
// ==> send ACK/NACK on PUSCH
|
||||
if( (ue->dlsch[eNB_id][0]->harq_ack[proc->subframe_rx].send_harq_status) == 1)
|
||||
{
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = 0;
|
||||
}
|
||||
LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d Generating ACK (%d,%d) for %d bits on PUSCH\n",
|
||||
Mod_id,
|
||||
ue->ulsch[eNB_id]->rnti,
|
||||
frame_tx,subframe_tx,
|
||||
ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
|
||||
ue->ulsch[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",
|
||||
@@ -1244,15 +1293,6 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
|
||||
#endif
|
||||
|
||||
if (ack_status > 0) {
|
||||
LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d Generating ACK (%d,%d) for %d bits on PUSCH\n",
|
||||
Mod_id,
|
||||
ue->ulsch[eNB_id]->rnti,
|
||||
frame_tx,subframe_tx,
|
||||
ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1519,6 +1559,17 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
ACK/NACK and SR using the shortened PUCCH format. This shortened PUCCH format shall be used in a cell
|
||||
specific SRS subframe even if the UE does not transmit SRS in that subframe
|
||||
*/
|
||||
|
||||
int harq_pid = subframe2harq_pid(&ue->frame_parms,
|
||||
frame_tx,
|
||||
subframe_tx);
|
||||
|
||||
if(ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag)
|
||||
{
|
||||
LOG_D(PHY,"PUSCH is programmed on this subframe [pid %d] AbsSuframe %d.%d ==> Skip PUCCH transmission \n",harq_pid,frame_tx,subframe_tx);
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t isShortenPucch = (pSoundingrs_ul_config_dedicated->srsCellSubframe && frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission);
|
||||
|
||||
bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
|
||||
|
||||
@@ -53,6 +53,7 @@ rlc_am_get_buffer_occupancy_in_bytes (
|
||||
uint32_t header_overhead;
|
||||
|
||||
// priority of control trafic
|
||||
rlc_pP->status_buffer_occupancy = 0;
|
||||
if (rlc_pP->status_requested) {
|
||||
if (rlc_pP->t_status_prohibit.running == 0) {
|
||||
#if TRACE_RLC_AM_BO
|
||||
@@ -64,7 +65,7 @@ rlc_am_get_buffer_occupancy_in_bytes (
|
||||
}
|
||||
|
||||
#endif
|
||||
return ((15 + rlc_pP->num_nack_sn*(10+1) + rlc_pP->num_nack_so*(15+15+1) + 7) >> 3);
|
||||
rlc_pP->status_buffer_occupancy = ((15 + rlc_pP->num_nack_sn*(10+1) + rlc_pP->num_nack_so*(15+15+1) + 7) >> 3);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user