Commit 0dda7569 authored by Khodr Saaifan's avatar Khodr Saaifan Committed by Thomas Schlichter

enable uci_fromat for TM4 at eNB

parent 4ae259b1
......@@ -8486,10 +8486,12 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
* TODO: deal with TM 8&9 correctly when they are implemented.
* TODO: deal with periodic reporting if we implement it.
*/
if (transmission_mode == 3 || transmission_mode == 4)
//SFN FIX:
// O_RI: 1 bit for RI
//if (transmission_mode == 3 || transmission_mode == 4)
ulsch->harq_processes[harq_pid]->O_RI = 1; //we only support 2 antenna ports, so this is always 1 according to 3GPP 36.213 Table
else
ulsch->harq_processes[harq_pid]->O_RI = 0;
//else
//ulsch->harq_processes[harq_pid]->O_RI = 0;
switch(transmission_mode) {
// The aperiodic CQI reporting mode is fixed for every transmission mode instead of being configured by higher layer signaling
......@@ -8566,27 +8568,41 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA;
} else {
ulsch->harq_processes[harq_pid]->Or2 = 0;
switch (frame_parms->N_RB_DL) {
case 6:
ulsch->harq_processes[harq_pid]->Or2 = 0;
ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_1_5MHz;
break;
case 25:
ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz;
//SFN:
/*To support PMI reporting for transmission mode 2,
* Hardcoded only for 25 RBs to test TM4 feedback
* we add TM4 uci_format as follows:
* */
//ulsch->harq_processes[harq_pid]->Or2 = 0;
//ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz;
ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz;
ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz;
break;
case 50:
ulsch->harq_processes[harq_pid]->Or2 = 0;
ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_10MHz;
break;
case 100:
ulsch->harq_processes[harq_pid]->Or2 = 0;
ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_20MHz;
break;
}
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
/*SFN
* add uci_format wideband_cqi_rank1_2A into TM2*/
//ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
ulsch->harq_processes[harq_pid]->uci_format = wideband_cqi_rank1_2A;
}
break;
......
......@@ -700,12 +700,19 @@ int dump_eNB_stats(PHY_VARS_eNB *eNB, char* buffer, int length)
len += sprintf(&buffer[len],"\n");
*/
len += sprintf(&buffer[len],"DL TM %d,DL_cqi %d, DL_pmi_single %jx ",
len += sprintf(&buffer[len],"////////////////////////CQI/PMI Reporting /////////////////////////////\n");
len += sprintf(&buffer[len],"DL TM %d, DL_cqi %d, Rank Indicator %d, DL_pmi_single %jx\n",
eNB->transmission_mode[UE_id],
eNB->UE_stats[UE_id].DL_cqi[0],
pmi2hex_2Ar1(eNB->UE_stats[UE_id].DL_pmi_single));
eNB->UE_stats[UE_id].rank,
eNB->UE_stats[UE_id].rank? pmi2hex_2Ar2(eNB->UE_stats[UE_id].DL_pmi_single) : pmi2hex_2Ar1(eNB->UE_stats[UE_id].DL_pmi_single));
len += sprintf(&buffer[len],"eNB can schedule TM %d\n",eNB->UE_stats[UE_id].rank?4:2);
len += sprintf(&buffer[len],"////////////////////////******************/////////////////////////////\n");
len += sprintf(&buffer[len],"Timing advance %d samples (%d 16Ts), update %d ",
eNB->UE_stats[UE_id].UE_timing_offset,
......
......@@ -256,9 +256,12 @@ void extract_CQI(void *o,UCI_format_t uci_format,LTE_eNB_UE_stats *stats, uint8_
switch(uci_format) {
case wideband_cqi_rank1_2A:
/*sfn: we are here
*
* */
stats->DL_cqi[0] = (((wideband_cqi_rank1_2A_5MHz *)o)->cqi1);
if (stats->DL_cqi[0] > 24)
if (stats->DL_cqi[0] > 24)//limit CQI
stats->DL_cqi[0] = 24;
stats->DL_pmi_single = ((wideband_cqi_rank1_2A_5MHz *)o)->pmi;
......@@ -284,6 +287,8 @@ void extract_CQI(void *o,UCI_format_t uci_format,LTE_eNB_UE_stats *stats, uint8_
break;
case HLC_subband_cqi_nopmi:
//sfn debug here
stats->DL_cqi[0] = (((HLC_subband_cqi_nopmi_5MHz *)o)->cqi1);
if (stats->DL_cqi[0] > 24)
......
......@@ -51,7 +51,8 @@
#include "UTIL/LOG/vcd_signal_dumper.h"
//#define DEBUG_ULSCH_DECODING
//SFN
#include "sudas_tm4.h"
void free_eNB_ulsch(LTE_eNB_ULSCH_t *ulsch)
{
......@@ -1333,9 +1334,15 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
for (i=0; i<Qprime_RI; i++) {
r = Rmux_prime -1 - (i>>2);
for (q=0; q<Q_m; q++)
ulsch_harq->q_RI[(q+(Q_m*i))%len_RI] += y[q+(Q_m*((r*Cmux) + columnset[j]))];
for (q=0; q<Q_m; q++){
//SFN bug fix here
if (i==0)
ulsch_harq->q_RI[(q+(Q_m*i))%len_RI] = y[q+(Q_m*((r*Cmux) + columnset[j]))];
// sudas_LOG_PHY(debug_sudas_LOG_PHY,"[SFN goo] ulsch_harq->q_RI[0] %d ulsch_harq->q_RI[1] %d len_RI %d\n",ulsch_harq->q_RI[0],ulsch_harq->q_RI[1],len_RI);
// fflush(debug_sudas_LOG_PHY);
}
ytag[(r*Cmux) + columnset[j]] = LTE_NULL;
j=(j+3)&3;
}
......@@ -1540,17 +1547,52 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
}
// RI
//SFN: fix here
// rank 1
if ((ulsch_harq->O_RI == 1) && (Qprime_RI > 0)) {
ulsch_harq->o_RI[0] = ((ulsch_harq->q_RI[0] + ulsch_harq->q_RI[Q_m/2]) > 0) ? 0 : 1;
switch (Q_m) {
case 2:
ulsch_harq->o_RI[0] =((ulsch_harq->q_RI[0] + ulsch_harq->q_RI[1]) > 0) ? 1 : 0;
// sudas_LOG_PHY(debug_sudas_LOG_PHY,"[SFN] ulsch_harq->q_RI[0] %d ulsch_harq->q_RI[1] %d Qprime_RI %d\n",ulsch_harq->q_RI[0],ulsch_harq->q_RI[1],Qprime_RI);
//sudas_LOG_PHY(debug_sudas_LOG_PHY,"[SFN] ulsch_harq->q_RI[0] %d ulsch_harq->q_RI[1] %d Qprime_RI %d\n",ulsch_harq->q_RI[0],ulsch_harq->q_RI[1],Qprime_RI);
//fflush(debug_sudas_LOG_PHY);
break;
case 4:
ulsch_harq->o_RI[0] =((ulsch_harq->q_RI[0]+ ulsch_harq->q_RI[1]) > 0) ? 1 : 0;
//sudas_LOG_PHY(debug_sudas_LOG_PHY,"[SFN] ulsch_harq->q_RI[0] %d ulsch_harq->q_RI[1] %d Qprime_RI %d\n",ulsch_harq->q_RI[0],ulsch_harq->q_RI[1],Qprime_RI);
//fflush(debug_sudas_LOG_PHY);
break;
case 6:
ulsch_harq->o_RI[0] =((ulsch_harq->q_RI[0] + ulsch_harq->q_RI[1]) > 0) ? 1 : 0;
//sudas_LOG_PHY(debug_sudas_LOG_PHY,"[SFN] ulsch_harq->q_RI[0] %d ulsch_harq->q_RI[1] %d Qprime_RI %d\n",ulsch_harq->q_RI[0],ulsch_harq->q_RI[1],Qprime_RI);
//fflush(debug_sudas_LOG_PHY);
break;
}
//sudas_LOG_PHY(debug_sudas_LOG_PHY,"[SFN]ulsch_harq->o_RI[0] %d Qprime_RI %d\n",ulsch_harq->o_RI[0],Qprime_RI);
//fflush(debug_sudas_LOG_PHY);
}
//ulsch_harq->o_RI[0] = ulsch_harq->q_RI[0]&1;//((ulsch_harq->q_RI[0] + ulsch_harq->q_RI[Q_m/2]) > 0) ? 0 : 1;
// CQI
static int ri_disply_cntr=0;
// printf("before cqi c[%d] = %p\n",0,ulsch_harq->c[0]);
ulsch_harq->cqi_crc_status = 0;
if (Q_CQI>0) {
ri_disply_cntr++;
if (ri_disply_cntr>10){
ri_disply_cntr=0;
//show log
LOG_I(PHY,"Qprime_RI %d [SFN CQI reports %d] O_RI %d o_RI[0]%d\n",Qprime_RI,ri_disply_cntr,ulsch_harq->O_RI,ulsch_harq->o_RI[0]);
}
//sudas_LOG_PHY(debug_sudas_LOG_PHY,"[SFN]ulsch_harq->O_RI %d ulsch_harq->o_RI[0]%d\n",ulsch_harq->O_RI,ulsch_harq->o_RI[0]);
// fflush(debug_sudas_LOG_PHY);
memset((void *)&dummy_w_cc[0],0,3*(ulsch_harq->Or1+8+32));
O_RCC = generate_dummy_w_cc(ulsch_harq->Or1+8,
......
......@@ -57,6 +57,11 @@
#include <time.h>
//SFN
#include "sudas_tm4.h"
#if defined(ENABLE_ITTI)
# include "intertask_interface.h"
#endif
......@@ -3115,6 +3120,11 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
#endif
eNB->ulsch[i]->harq_processes[harq_pid]->subframe_scheduling_flag=0;
/* sfn: CQI/PMI Extract
*
*
* */
if (eNB->ulsch[i]->harq_processes[harq_pid]->cqi_crc_status == 1) {
#ifdef DEBUG_PHY_PROC
//if (((frame%10) == 0) || (frame < 50))
......
......@@ -1553,8 +1553,6 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
uint8_t ack_status_cw1=0;
uint8_t cqi_status = 0;
uint8_t ri_status = 0;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC,VCD_FUNCTION_IN);
// get harq_pid from subframe relationship
......
......@@ -1214,6 +1214,11 @@ static void get_options (int argc, char **argv) {
//this is needed for phy-test option
transmission_mode = enb_properties->properties[0]->ue_TransmissionMode[0]+1;
//SFN: Transmission Mode
//sudas_LOG_PHY(debug_sudas_LOG_PHY,"[get_optrian()]: ue_TransmissionMode %d transmission_mode %d\n",enb_properties->properties[0]->ue_TransmissionMode[0],transmission_mode);
//fflush(debug_sudas_LOG_PHY);
} else if (UE_flag == 1) {
if (conf_config_file_name != NULL) {
......@@ -1388,10 +1393,10 @@ int main( int argc, char **argv ) {
int i,j,k,aa,re;
debug_sudas_LOG_PHY = fopen("debug_sudas_LOG_PHY.txt", "w");
debug_sudas_LOG_MAC = fopen("debug_sudas_LOG_MAC.txt", "w");
debug_sudas_LOG_MAC = fopen("debug_sudas_LOG_MAC.txt", "w");
sudas_LOG_PHY(debug_sudas_LOG_PHY,"main();\n");
fflush(debug_sudas_LOG_PHY);
sudas_LOG_PHY(debug_sudas_LOG_PHY,"main();\n");
fflush(debug_sudas_LOG_PHY);
......@@ -1671,6 +1676,9 @@ int main( int argc, char **argv ) {
// initialization for phy-test
for (k=0; k<NUMBER_OF_UE_MAX; k++) {
PHY_vars_eNB_g[0][CC_id]->transmission_mode[k] = transmission_mode;
//SFN
//sudas_LOG_PHY(debug_sudas_LOG_PHY,"[init eNB]: PHY_vars_eNB_g[0][%d]->transmission_mode[%d]= %d\n",CC_id,k,transmission_mode);
//fflush(debug_sudas_LOG_PHY);
if (transmission_mode==7)
lte_gold_ue_spec_port5(PHY_vars_eNB_g[0][CC_id]->lte_gold_uespec_port5_table[k],frame_parms[CC_id]->Nid_cell,0x1235+k);
}
......
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