Commit 524d1b4c authored by Raymond Knopp's avatar Raymond Knopp

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5757 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 036870ad
...@@ -2877,6 +2877,9 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, ...@@ -2877,6 +2877,9 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
dlsch[0]->harq_processes[harq_pid]->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI; dlsch[0]->harq_processes[harq_pid]->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI;
dlsch[0]->harq_processes[harq_pid]->dl_power_off = 1; //no power offset dlsch[0]->harq_processes[harq_pid]->dl_power_off = 1; //no power offset
LOG_D(PHY,"UE (%x/%d): Subframe %d Format1A DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch[0]->harq_processes[harq_pid]->DCINdi,
dlsch[0]->harq_processes[harq_pid]->first_tx,dlsch[0]->harq_processes[harq_pid]->status);
if ((ndi!=dlsch[0]->harq_processes[harq_pid]->DCINdi)|| // DCI has been toggled or this is the first transmission if ((ndi!=dlsch[0]->harq_processes[harq_pid]->DCINdi)|| // DCI has been toggled or this is the first transmission
(dlsch[0]->harq_processes[harq_pid]->first_tx==1)) { (dlsch[0]->harq_processes[harq_pid]->first_tx==1)) {
dlsch[0]->harq_processes[harq_pid]->round = 0; dlsch[0]->harq_processes[harq_pid]->round = 0;
...@@ -3000,8 +3003,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, ...@@ -3000,8 +3003,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
dlsch[0]->harq_processes[harq_pid]->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; dlsch[0]->harq_processes[harq_pid]->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI;
dlsch[0]->harq_processes[harq_pid]->dl_power_off = 1; //no power offset dlsch[0]->harq_processes[harq_pid]->dl_power_off = 1; //no power offset
LOG_D(PHY,"Format1 DCI: ndi %d, old_ndi %d (first tx %d)\n",ndi,dlsch[0]->harq_processes[harq_pid]->DCINdi, LOG_D(PHY,"UE (%x/%d): Subframe %d Format1 DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch[0]->harq_processes[harq_pid]->DCINdi,
dlsch[0]->harq_processes[harq_pid]->first_tx); dlsch[0]->harq_processes[harq_pid]->first_tx,dlsch[0]->harq_processes[harq_pid]->status);
// printf("Format1 DCI (UE, hard pid %d): ndi %d, old_ndi %d (first tx %d)\n",harq_pid,ndi,dlsch[0]->harq_processes[harq_pid]->DCINdi, // printf("Format1 DCI (UE, hard pid %d): ndi %d, old_ndi %d (first tx %d)\n",harq_pid,ndi,dlsch[0]->harq_processes[harq_pid]->DCINdi,
// dlsch[0]->harq_processes[harq_pid]->first_tx); // dlsch[0]->harq_processes[harq_pid]->first_tx);
......
...@@ -409,7 +409,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, ...@@ -409,7 +409,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
dlsch->harq_ack[subframe].harq_id = harq_pid; dlsch->harq_ack[subframe].harq_id = harq_pid;
dlsch->harq_ack[subframe].send_harq_status = 1; dlsch->harq_ack[subframe].send_harq_status = 1;
harq_process->round++; harq_process->round++;
// msg("DLSCH: Setting NACK for subframe %d (pid %d, round %d)\n",subframe,harq_pid,harq_process->round); LOG_D(PHY,"[UE %d] DLSCH: Setting NACK for subframe %d (pid %d, round %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round);
if (harq_process->round >= dlsch->Mdlharq) { if (harq_process->round >= dlsch->Mdlharq) {
harq_process->status = SCH_IDLE; harq_process->status = SCH_IDLE;
} }
...@@ -422,7 +422,8 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, ...@@ -422,7 +422,8 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
dlsch->harq_ack[subframe].ack = 1; dlsch->harq_ack[subframe].ack = 1;
dlsch->harq_ack[subframe].harq_id = harq_pid; dlsch->harq_ack[subframe].harq_id = harq_pid;
dlsch->harq_ack[subframe].send_harq_status = 1; dlsch->harq_ack[subframe].send_harq_status = 1;
// msg("DLSCH decoding: Setting ACK for subframe %d (pid %d)\n",subframe,harq_pid); LOG_D(PHY,"[UE %d] DLSCH: Setting ACK for subframe %d (pid %d, round %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round);
} }
// Reassembly of Transport block here // Reassembly of Transport block here
offset = 0; offset = 0;
......
...@@ -354,6 +354,12 @@ typedef struct ...@@ -354,6 +354,12 @@ typedef struct
uint8_t Mod_id; uint8_t Mod_id;
uint8_t CC_id; uint8_t CC_id;
uint8_t local_flag; uint8_t local_flag;
int instance_cnt_tx;
int instance_cnt_rx;
pthread_cond_t cond_tx;
pthread_cond_t cond_rx;
pthread_mutex_t mutex_tx;
pthread_mutex_t mutex_rx;
uint32_t tx_total_gain_dB; uint32_t tx_total_gain_dB;
uint32_t rx_total_gain_dB; ///this is a function of rx_gain_mode (and the corresponding gain) and the rx_gain of the card uint32_t rx_total_gain_dB; ///this is a function of rx_gain_mode (and the corresponding gain) and the rx_gain of the card
uint32_t rx_gain_max[4]; uint32_t rx_gain_max[4];
...@@ -365,6 +371,8 @@ typedef struct ...@@ -365,6 +371,8 @@ typedef struct
int tx_total_RE; int tx_total_RE;
int8_t tx_power_max_dBm; int8_t tx_power_max_dBm;
uint32_t frame; uint32_t frame;
uint32_t frame_rx,frame_tx;
uint32_t slot_tx,slot_rx;
uint8_t n_connected_eNB; uint8_t n_connected_eNB;
uint8_t ho_initiated; uint8_t ho_initiated;
uint8_t ho_triggered; uint8_t ho_triggered;
......
...@@ -321,10 +321,11 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -321,10 +321,11 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
unsigned char subframe, unsigned char subframe,
unsigned char *o_ACK) { unsigned char *o_ACK) {
//printf("get_ack: SF %d\n",subframe);
uint8_t status=0; uint8_t status=0;
uint8_t subframe_dl; uint8_t subframe_dl;
printf("get_ack: SF %d\n",subframe);
if (frame_parms->frame_type == FDD) { if (frame_parms->frame_type == FDD) {
if (subframe < 4) if (subframe < 4)
subframe_dl = subframe + 6; subframe_dl = subframe + 6;
...@@ -372,6 +373,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -372,6 +373,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
else if (harq_ack[6].send_harq_status == 1) else if (harq_ack[6].send_harq_status == 1)
o_ACK[0] = harq_ack[6].ack; o_ACK[0] = harq_ack[6].ack;
status = harq_ack[5].send_harq_status + (harq_ack[6].send_harq_status<<1); status = harq_ack[5].send_harq_status + (harq_ack[6].send_harq_status<<1);
printf("Subframe 2, TDD config 3: harq_ack[5] = %d (%d),harq_ack[6] = %d (%d)\n",harq_ack[5].ack,harq_ack[5].send_harq_status,harq_ack[6].ack,harq_ack[6].send_harq_status);
} }
else if (subframe == 3) { // ACK subframes 7 and 8 else if (subframe == 3) { // ACK subframes 7 and 8
if (harq_ack[7].send_harq_status == 1) { if (harq_ack[7].send_harq_status == 1) {
...@@ -383,6 +385,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -383,6 +385,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
o_ACK[0] = harq_ack[8].ack; o_ACK[0] = harq_ack[8].ack;
status = harq_ack[7].send_harq_status + (harq_ack[8].send_harq_status<<1); status = harq_ack[7].send_harq_status + (harq_ack[8].send_harq_status<<1);
printf("Subframe 3, TDD config 3: harq_ack[7] = %d,harq_ack[8] = %d\n",harq_ack[7].ack,harq_ack[8].ack);
//printf("status %d : o_ACK (%d,%d)\n", status,o_ACK[0],o_ACK[1]); //printf("status %d : o_ACK (%d,%d)\n", status,o_ACK[0],o_ACK[1]);
} }
else if (subframe == 4) { // ACK subframes 9 and 0 else if (subframe == 4) { // ACK subframes 9 and 0
...@@ -395,6 +398,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -395,6 +398,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
o_ACK[0] = harq_ack[8].ack; o_ACK[0] = harq_ack[8].ack;
status = harq_ack[9].send_harq_status + (harq_ack[0].send_harq_status<<1); status = harq_ack[9].send_harq_status + (harq_ack[0].send_harq_status<<1);
printf("Subframe 4, TDD config 3: harq_ack[9] = %d,harq_ack[0] = %d\n",harq_ack[9].ack,harq_ack[0].ack);
} }
else { else {
LOG_E(PHY,"phy_procedures_lte.c: get_ack, illegal subframe %d for tdd_config %d\n", LOG_E(PHY,"phy_procedures_lte.c: get_ack, illegal subframe %d for tdd_config %d\n",
......
...@@ -2208,7 +2208,7 @@ void process_HARQ_feedback(uint8_t UE_id, ...@@ -2208,7 +2208,7 @@ void process_HARQ_feedback(uint8_t UE_id,
// but we have to adapt the code below. For example, if only one out of 2 are scheduled, only 1 bit o_ACK is used // but we have to adapt the code below. For example, if only one out of 2 are scheduled, only 1 bit o_ACK is used
dlsch_ACK[0] = phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->o_ACK[0]; dlsch_ACK[0] = phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->o_ACK[0];
dlsch_ACK[1] = phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->o_ACK[1]; dlsch_ACK[1] = (phy_vars_eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode == bundling)?phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->o_ACK[0]:phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->o_ACK[1];
// printf("UE %d: ACK %d,%d\n",UE_id,dlsch_ACK[0],dlsch_ACK[1]); // printf("UE %d: ACK %d,%d\n",UE_id,dlsch_ACK[0],dlsch_ACK[1]);
} }
...@@ -2315,8 +2315,8 @@ void process_HARQ_feedback(uint8_t UE_id, ...@@ -2315,8 +2315,8 @@ void process_HARQ_feedback(uint8_t UE_id,
if ( dlsch_ACK[mp]==0) { if ( dlsch_ACK[mp]==0) {
// Received NAK // Received NAK
#ifdef DEBUG_PHY_PROC #ifdef DEBUG_PHY_PROC
LOG_I(PHY,"[eNB %d][PDSCH %x/%d] NAK Received in round %d, requesting retransmission\n",phy_vars_eNB->Mod_id, LOG_I(PHY,"[eNB %d][PDSCH %x/%d] M = %d, m= %d, mp=%d NAK Received in round %d, requesting retransmission\n",phy_vars_eNB->Mod_id,
dlsch->rnti,dl_harq_pid[m],dlsch_harq_proc->round); dlsch->rnti,dl_harq_pid[m],M,m,mp,dlsch_harq_proc->round);
#endif #endif
// if (dlsch_harq_proc->round == 0) // if (dlsch_harq_proc->round == 0)
......
...@@ -2074,6 +2074,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v ...@@ -2074,6 +2074,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
#ifdef DEBUG_PHY_PROC #ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",phy_vars_ue->Mod_id,dci_alloc_rx[i].format); LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",phy_vars_ue->Mod_id,dci_alloc_rx[i].format);
dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]); dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",phy_vars_ue->Mod_id,(last_slot>>1),last_slot,phy_vars_ue->dlsch_ue[eNB_id][0]->active);
#endif #endif
// we received a CRNTI, so we're in PUSCH // we received a CRNTI, so we're in PUSCH
...@@ -2352,6 +2353,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v ...@@ -2352,6 +2353,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
n_symb = phy_vars_ue->lte_frame_parms.symbols_per_tti/2; n_symb = phy_vars_ue->lte_frame_parms.symbols_per_tti/2;
} }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",phy_vars_ue->Mod_id,(last_slot>>1),last_slot,phy_vars_ue->dlsch_ue[eNB_id][0]->active);
// This is normal processing (i.e. not MBSFN) // This is normal processing (i.e. not MBSFN)
// RX processing of symbols in last_slot // RX processing of symbols in last_slot
...@@ -2426,7 +2429,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v ...@@ -2426,7 +2429,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
} }
} }
// trigger DLSCH decoding thread // trigger DLSCH decoding thread
if (!(last_slot%2)) // odd slots if ((last_slot%2)==1) // odd slots
phy_vars_ue->dlsch_ue[eNB_id][0]->active = 0; phy_vars_ue->dlsch_ue[eNB_id][0]->active = 0;
} }
} }
...@@ -2435,18 +2438,20 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v ...@@ -2435,18 +2438,20 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
// process last DLSCH symbols + invoke decoding // process last DLSCH symbols + invoke decoding
if (((last_slot%2)==0) && (l==0)) { if (((last_slot%2)==0) && (l==0)) {
// Regular PDSCH // Regular PDSCH
LOG_D(PHY,"[UE %d] dlsch->active in subframe %d => %d\n",phy_vars_ue->Mod_id,((last_slot>>1)+9)%10,phy_vars_ue->dlsch_ue[eNB_id][0]->active);
if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) { if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) {
#ifndef DLSCH_THREAD //USER_MODE #ifndef DLSCH_THREAD //USER_MODE
harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid; harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
//printf("PDSCH active in subframe %d, harq_pid %d\n",(last_slot>>1)-1,harq_pid); LOG_D(PHY,"[UE %d] PDSCH active in subframe %d, harq_pid %d\n",phy_vars_ue->Mod_id,((last_slot>>1)+1)%10,harq_pid);
if ((phy_vars_ue->transmission_mode[eNB_id] == 5) && if ((phy_vars_ue->transmission_mode[eNB_id] == 5) &&
(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) && (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
(openair_daq_vars.use_ia_receiver ==1)) { (openair_daq_vars.use_ia_receiver ==1)) {
dual_stream_UE = 1; dual_stream_UE = 1;
eNB_id_i = phy_vars_ue->n_connected_eNB; eNB_id_i = phy_vars_ue->n_connected_eNB;
i_mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs); i_mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
if (phy_vars_ue->frame%100==0) { if (phy_vars_ue->frame%100==0) {
LOG_I(PHY,"using IA receiver\n"); LOG_I(PHY,"using IA receiver\n");
} }
} }
else { else {
...@@ -2541,9 +2546,9 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v ...@@ -2541,9 +2546,9 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
#endif #endif
} }
else { else {
LOG_I(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: Received DLSCH (rv %d,mcs %d,TBS %d)\n", LOG_I(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d (last_slot %d): Received DLSCH (rv %d,mcs %d,TBS %d)\n",
phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti, phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,
harq_pid,phy_vars_ue->frame,((last_slot>>1)==0)?9:(last_slot>>1)-1, harq_pid,phy_vars_ue->frame,((last_slot>>1)==0)?9:(last_slot>>1)-1,last_slot,
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS); phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS);
...@@ -2943,6 +2948,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v ...@@ -2943,6 +2948,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
#ifndef DLSCH_THREAD #ifndef DLSCH_THREAD
if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) { if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) {
harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid; harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
LOG_D(PHY,"[UE %d] PDSCH active in subframe %d (%d), harq_pid %d\n",phy_vars_ue->Mod_id,(last_slot>>1),last_slot,harq_pid);
if ((phy_vars_ue->transmission_mode[eNB_id] == 5) && if ((phy_vars_ue->transmission_mode[eNB_id] == 5) &&
(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) && (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) &&
(openair_daq_vars.use_ia_receiver ==1)) { (openair_daq_vars.use_ia_receiver ==1)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment