Merge tag '2017.w20' into UE_logging
This commit is contained in:
@@ -809,20 +809,19 @@ function main() {
|
||||
build_dir=$rrh_build_dir
|
||||
fi
|
||||
|
||||
# build RF device libraries (currently EXMIMO is not complied with the rest of HW targets)
|
||||
# build RF device libraries
|
||||
if [ "$HW" != "None" ] ; then
|
||||
rm -f liboai_device.so
|
||||
rm -f $dbin/liboai_device.so
|
||||
|
||||
|
||||
# link liboai_device.so with the selected RF device library
|
||||
if [ "$HW" == "EXMIMO" ] ; then
|
||||
|
||||
#add exmimo compilation
|
||||
#TODO EXMIMO library support
|
||||
compilations \
|
||||
$build_dir oai_exmimodevif \
|
||||
liboai_exmimodevif.so $dbin/liboai_exmimodevif.so.$REL
|
||||
|
||||
ln -sf liboai_exmimodevif.so liboai_device.so
|
||||
ln -sf $dbin/liboai_exmimodevif.so.$REL $dbin/liboai_device.so
|
||||
echo_info "liboai_device.so is linked to EXMIMO device library"
|
||||
elif [ "$HW" == "OAI_USRP" ] ; then
|
||||
if [ -d "/usr/include/uhd" ] ; then
|
||||
|
||||
@@ -150,7 +150,7 @@ function main()
|
||||
# -u | --num-ue )
|
||||
|
||||
-V | --vcd)
|
||||
"setting gtk-wave output"
|
||||
echo "setting gtk-wave output"
|
||||
exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd"
|
||||
shift ;
|
||||
;;
|
||||
@@ -164,6 +164,11 @@ function main()
|
||||
exe_arguments="$exe_arguments -n $2"
|
||||
shift 2;
|
||||
;;
|
||||
-x | --xforms)
|
||||
echo "running with xforms"
|
||||
exe_arguments="$exe_arguments --xforms"
|
||||
shift 1;
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option $1"
|
||||
help
|
||||
@@ -212,11 +217,11 @@ function main()
|
||||
fi
|
||||
|
||||
if [ $run_gdb -eq 0 ]; then
|
||||
exec $SUDO $OPENAIR_DIR/targets/bin/oaisim_nos1.Rel10 $exe_arguments | tee /tmp/enb_ue_nos1.log.txt
|
||||
exec $SUDO $OPENAIR_DIR/targets/bin/oaisim_nos1.Rel14 $exe_arguments | tee /tmp/enb_ue_nos1.log.txt
|
||||
else
|
||||
touch ~/.gdb_enb_ue_nos1
|
||||
chmod 777 ~/.gdb_enb_ue_nos1
|
||||
echo "file $OPENAIR_DIR/targets/bin/oaisim_nos1.Rel10" > ~/.gdb_enb_ue_nos1
|
||||
echo "file $OPENAIR_DIR/targets/bin/oaisim_nos1.Rel14" > ~/.gdb_enb_ue_nos1
|
||||
echo "set args $exe_arguments" >> ~/.gdb_enb_ue_nos1
|
||||
echo "run" >> ~/.gdb_enb_ue_nos1
|
||||
cat ~/.gdb_enb_ue_nos1
|
||||
|
||||
@@ -174,7 +174,7 @@ function main()
|
||||
;;
|
||||
|
||||
-V | --vcd)
|
||||
"setting gtk-wave output"
|
||||
echo "setting gtk-wave output"
|
||||
exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd"
|
||||
shift ;
|
||||
;;
|
||||
@@ -183,6 +183,11 @@ function main()
|
||||
exe_arguments="$exe_arguments -P wireshark"
|
||||
shift 2;
|
||||
;;
|
||||
-x | --xforms)
|
||||
echo "running with xforms"
|
||||
exe_arguments="$exe_arguments --xforms"
|
||||
shift 1;
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option $1"
|
||||
help
|
||||
@@ -258,11 +263,11 @@ function main()
|
||||
fi
|
||||
|
||||
if [ $run_gdb -eq 0 ]; then
|
||||
exec $OPENAIR_DIR/targets/bin/oaisim.Rel10 $exe_arguments | tee /tmp/enb_ue_s1.log.txt
|
||||
exec $OPENAIR_DIR/targets/bin/oaisim.Rel14 $exe_arguments | tee /tmp/enb_ue_s1.log.txt
|
||||
else
|
||||
touch ~/.gdb_enb_ue_s1
|
||||
chmod 777 ~/.gdb_enb_ue_s1
|
||||
echo "file $OPENAIR_DIR/targets/bin/oaisim.Rel10" > ~/.gdb_enb_ue_s1
|
||||
echo "file $OPENAIR_DIR/targets/bin/oaisim.Rel14" > ~/.gdb_enb_ue_s1
|
||||
echo "set args $exe_arguments" >> ~/.gdb_enb_ue_s1
|
||||
echo "run" >> ~/.gdb_enb_ue_s1
|
||||
cat ~/.gdb_enb_ue_s1
|
||||
|
||||
@@ -28,7 +28,7 @@ ID = ENB_PHY_DLSCH_UE_NACK
|
||||
ID = ENB_PHY_ULSCH_UE_DCI
|
||||
DESC = eNodeB uplink UE specific DCI as sent by the PHY layer
|
||||
GROUP = ALL:PHY:GRAPHIC:ENB
|
||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS
|
||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS : int,L : int,firstCCE
|
||||
ID = ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION
|
||||
DESC = eNodeB uplink UE retransmission due to PHICH NACK (see generate_phich_top)
|
||||
GROUP = ALL:PHY:GRAPHIC:ENB
|
||||
|
||||
Executable → Regular
Regular → Executable
+12
-3
@@ -1979,6 +1979,9 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci,
|
||||
uint16_t numCCE = 0;
|
||||
uint8_t i;
|
||||
uint8_t nCCEmin = 0;
|
||||
uint16_t CCE_max_used_index = 0;
|
||||
uint16_t firstCCE_max = dci_alloc[0].firstCCE;
|
||||
uint8_t L = dci_alloc[0].L;
|
||||
|
||||
// check pdcch duration imposed by PHICH duration (Section 6.9 of 36-211)
|
||||
if (frame_parms->Ncp==1) { // extended prefix
|
||||
@@ -1995,16 +1998,22 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci,
|
||||
for (i=0; i<num_dci; i++) {
|
||||
// printf("dci %d => %d\n",i,dci_alloc[i].L);
|
||||
numCCE += (1<<(dci_alloc[i].L));
|
||||
|
||||
if(firstCCE_max < dci_alloc[i].firstCCE) {
|
||||
firstCCE_max = dci_alloc[i].firstCCE;
|
||||
L = dci_alloc[i].L;
|
||||
}
|
||||
}
|
||||
CCE_max_used_index = firstCCE_max + (1<<L) - 1;
|
||||
|
||||
//if ((9*numCCE) <= (frame_parms->N_RB_DL*2))
|
||||
if (numCCE <= get_nCCE(1, frame_parms, get_mi(frame_parms, subframe)))
|
||||
if (CCE_max_used_index < get_nCCE(1, frame_parms, get_mi(frame_parms, subframe)))
|
||||
return(cmax(1,nCCEmin));
|
||||
//else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antenna_ports_eNB==4) ? 4 : 5)))
|
||||
else if (numCCE <= get_nCCE(2, frame_parms, get_mi(frame_parms, subframe)))
|
||||
else if (CCE_max_used_index < get_nCCE(2, frame_parms, get_mi(frame_parms, subframe)))
|
||||
return(cmax(2,nCCEmin));
|
||||
//else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antenna_ports_eNB==4) ? 7 : 8)))
|
||||
else if (numCCE <= get_nCCE(3, frame_parms, get_mi(frame_parms, subframe)))
|
||||
else if (CCE_max_used_index < get_nCCE(3, frame_parms, get_mi(frame_parms, subframe)))
|
||||
return(cmax(3,nCCEmin));
|
||||
else if (frame_parms->N_RB_DL<=10) {
|
||||
if (frame_parms->Ncp == 0) { // normal CP
|
||||
|
||||
@@ -4888,7 +4888,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 %d \n",rballoc, RIV_max);
|
||||
LOG_I(PHY,"bad dci rballoc rballoc %d RIV_max %lld \n",rballoc, RIV_max);
|
||||
// DCI false detection
|
||||
return(0);
|
||||
}
|
||||
@@ -5124,7 +5124,7 @@ 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 %d\n", rballoc, RIV_max);
|
||||
LOG_I(PHY,"bad rballoc %d RIV_max %lld\n", rballoc, RIV_max);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
Executable → Regular
Executable → Regular
@@ -135,6 +135,17 @@ unsigned char subframe2_ul_harq(LTE_DL_FRAME_PARMS *frame_parms,unsigned char su
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if ( (subframe == 8) || (subframe == 9) ) {
|
||||
return(subframe-8);
|
||||
} else {
|
||||
LOG_E(PHY,"phich.c: subframe2_ul_harq, illegal subframe %d for tdd_config %d\n",
|
||||
subframe,frame_parms->tdd_config);
|
||||
return(0);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return(0);
|
||||
@@ -1396,6 +1407,7 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
HI16,
|
||||
nseq_PHICH,
|
||||
ngroup_PHICH,
|
||||
ulsch->harq_processes[harq_pid]->round,
|
||||
ulsch->Mlimit);
|
||||
#endif
|
||||
|
||||
|
||||
Executable → Regular
Executable → Regular
@@ -2510,6 +2510,8 @@ const static int16_t tw64[96] __attribute__((aligned(32))) = {
|
||||
-30273,12539,-25330,20787,-18205,27244,-9512,31356
|
||||
};
|
||||
|
||||
#if 0
|
||||
/* this is defined but not used, let's comment */
|
||||
const static int16_t tw64rep[192] __attribute__((aligned(32))) = {
|
||||
32767,0,32609,-3212,32137,-6393,31356,-9512,32767,0,32609,-3212,32137,-6393,31356,-9512,
|
||||
30272,-12540,28897,-15447,27244,-18205,25329,-20788,30272,-12540,28897,-15447,27244,-18205,25329,-20788,
|
||||
@@ -2524,6 +2526,7 @@ const static int16_t tw64rep[192] __attribute__((aligned(32))) = {
|
||||
-23170,-23170,-28898,-15447,-32138,-6393,-32610,3211,-23170,-23170,-28898,-15447,-32138,-6393,-32610,3211,
|
||||
-30273,12539,-25330,20787,-18205,27244,-9512,31356,-30273,12539,-25330,20787,-18205,27244,-9512,31356
|
||||
};
|
||||
#endif
|
||||
|
||||
const static int16_t tw64a[96] __attribute__((aligned(32))) = {
|
||||
32767,0,32609,3212,32137,6393,31356,9512,
|
||||
@@ -2539,6 +2542,8 @@ const static int16_t tw64a[96] __attribute__((aligned(32))) = {
|
||||
-23170,23170,-28898,15447,-32138,6393,-32610,-3211,
|
||||
-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356
|
||||
};
|
||||
#if 0
|
||||
/* this is defined but not used, let's comment */
|
||||
const static int16_t tw64arep[192] __attribute__((aligned(32))) = {
|
||||
32767,0,32609,3212,32137,6393,31356,9512,32767,0,32609,3212,32137,6393,31356,9512,
|
||||
30272,12540,28897,15447,27244,18205,25329,20788,30272,12540,28897,15447,27244,18205,25329,20788,
|
||||
@@ -2553,6 +2558,7 @@ const static int16_t tw64arep[192] __attribute__((aligned(32))) = {
|
||||
-23170,23170,-28898,15447,-32138,6393,-32610,-3211,-23170,23170,-28898,15447,-32138,6393,-32610,-3211,
|
||||
-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356,-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356
|
||||
};
|
||||
#endif
|
||||
|
||||
const static int16_t tw64b[96] __attribute__((aligned(32))) = {
|
||||
0,32767,-3212,32609,-6393,32137,-9512,31356,
|
||||
@@ -2569,6 +2575,8 @@ const static int16_t tw64b[96] __attribute__((aligned(32))) = {
|
||||
12539,-30273,20787,-25330,27244,-18205,31356,-9512
|
||||
};
|
||||
|
||||
#if 0
|
||||
/* this is defined but not used, let's comment */
|
||||
const static int16_t tw64brep[192] __attribute__((aligned(32))) = {
|
||||
0,32767,-3212,32609,-6393,32137,-9512,31356,0,32767,-3212,32609,-6393,32137,-9512,31356,
|
||||
-12540,30272,-15447,28897,-18205,27244,-20788,25329,-12540,30272,-15447,28897,-18205,27244,-20788,25329,
|
||||
@@ -2583,6 +2591,7 @@ const static int16_t tw64brep[192] __attribute__((aligned(32))) = {
|
||||
-23170,-23170,-15447,-28898,-6393,-32138,3211,-32610,-23170,-23170,-15447,-28898,-6393,-32138,3211,-32610,
|
||||
12539,-30273,20787,-25330,27244,-18205,31356,-9512,12539,-30273,20787,-25330,27244,-18205,31356,-9512
|
||||
};
|
||||
#endif
|
||||
|
||||
const static int16_t tw64c[96] __attribute__((aligned(32))) = {
|
||||
0,32767,3212,32609,6393,32137,9512,31356,
|
||||
@@ -2599,6 +2608,8 @@ const static int16_t tw64c[96] __attribute__((aligned(32))) = {
|
||||
-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512
|
||||
};
|
||||
|
||||
#if 0
|
||||
/* this is defined but not used, let's comment */
|
||||
const static int16_t tw64crep[192] __attribute__((aligned(32))) = {
|
||||
0,32767,3212,32609,6393,32137,9512,31356,0,32767,3212,32609,6393,32137,9512,31356,
|
||||
12540,30272,15447,28897,18205,27244,20788,25329,12540,30272,15447,28897,18205,27244,20788,25329,
|
||||
@@ -2613,6 +2624,7 @@ const static int16_t tw64crep[192] __attribute__((aligned(32))) = {
|
||||
23170,-23170,15447,-28898,6393,-32138,-3211,-32610,23170,-23170,15447,-28898,6393,-32138,-3211,-32610,
|
||||
-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512,-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
|
||||
Executable → Regular
Executable → Regular
@@ -105,7 +105,47 @@ void get_Msg3_alloc(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
*frame = (current_frame+2) & 1023;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (frame_parms->tdd_config == 4) {
|
||||
switch (current_subframe) {
|
||||
|
||||
case 0:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
*subframe = 2;
|
||||
*frame = (current_frame+1) & 1023;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
*subframe = 3;
|
||||
*frame = (current_frame+1) & 1023;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
case 9:
|
||||
*subframe = 2;
|
||||
*frame = (current_frame+2) & 1023;
|
||||
break;
|
||||
}
|
||||
} else if (frame_parms->tdd_config == 5) {
|
||||
switch (current_subframe) {
|
||||
|
||||
case 0:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
*subframe = 2;
|
||||
*frame = (current_frame+1) & 1023;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
*subframe = 2;
|
||||
*frame = (current_frame+2) & 1023;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,6 +177,13 @@ void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
// original PUSCH in 3, PHICH in 9, ret in 3 next frame
|
||||
// original PUSCH in 4, PHICH in 0, ret in 4 next frame
|
||||
*frame=(current_frame+1) & 1023;
|
||||
} else if (frame_parms->tdd_config == 4) {
|
||||
// original PUSCH in 2, PHICH in 8, ret in 2 next frame
|
||||
// original PUSCH in 3, PHICH in 9, ret in 3 next frame
|
||||
*frame=(current_frame+1) & 1023;
|
||||
} else if (frame_parms->tdd_config == 5) {
|
||||
// original PUSCH in 2, PHICH in 8, ret in 2 next frame
|
||||
*frame=(current_frame+1) & 1023;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -253,6 +300,24 @@ unsigned char ul_ACK_subframe2_dl_subframe(LTE_DL_FRAME_PARMS *frame_parms,unsig
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (subframe == 2) { // ACK subframes 0, 4 and 5
|
||||
//if (ACK_index==2)
|
||||
// return(1); TBC
|
||||
if (ACK_index==2)
|
||||
return(0);
|
||||
|
||||
return(4+ACK_index);
|
||||
} else if (subframe == 3) { // ACK subframes 6, 7 8 and 9
|
||||
return(6+ACK_index); // To be updated
|
||||
} else {
|
||||
LOG_E(PHY,"phy_procedures_lte_common.c/subframe2_dl_harq_pid: illegal subframe %d for tdd_config %d\n",
|
||||
subframe,frame_parms->tdd_config);
|
||||
return(0);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (subframe == 2) { // ACK subframes 5 and 6
|
||||
return(5+ACK_index);
|
||||
@@ -297,6 +362,30 @@ unsigned char ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char s
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (subframe == 2) { // ACK subframes 0,4 and 5
|
||||
return(3); // should be 4
|
||||
} else if (subframe == 3) { // ACK subframes 6,7,8 and 9
|
||||
return(4);
|
||||
} else {
|
||||
LOG_E(PHY,"phy_procedures_lte_common.c/subframe2_dl_harq_pid: illegal subframe %d for tdd_config %d\n",
|
||||
subframe,frame_parms->tdd_config);
|
||||
return(0);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (subframe == 2) { // ACK subframes 0,3,4,5,6,7,8 and 9
|
||||
return(8); // should be 3
|
||||
} else {
|
||||
LOG_E(PHY,"phy_procedures_lte_common.c/subframe2_dl_harq_pid: illegal subframe %d for tdd_config %d\n",
|
||||
subframe,frame_parms->tdd_config);
|
||||
return(0);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (subframe == 2) { // ACK subframes 5 and 6
|
||||
return(2);
|
||||
@@ -331,7 +420,7 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t do_reset) // 1 to reset ACK/NACK status : 0 otherwise
|
||||
{
|
||||
uint8_t status=0;
|
||||
uint8_t subframe_ul=0xff, subframe_dl0=0xff, subframe_dl1=0xff;
|
||||
uint8_t subframe_ul=0xff, subframe_dl0=0xff, subframe_dl1=0xff,subframe_dl2=0xff, subframe_dl3=0xff;
|
||||
|
||||
// printf("get_ack: SF %d\n",subframe);
|
||||
if (frame_parms->frame_type == FDD) {
|
||||
@@ -485,6 +574,63 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (subframe_tx == 2) { // ACK subframes 4, 5 and 0
|
||||
subframe_dl0 = 4;
|
||||
subframe_dl1 = 5;
|
||||
subframe_dl2 = 0;
|
||||
subframe_ul = 2;
|
||||
//printf("subframe_tx 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_tx == 3) { // ACK subframes 6, 7 8 and 9
|
||||
subframe_dl0 = 6;
|
||||
subframe_dl1 = 7;
|
||||
subframe_dl2 = 8;
|
||||
subframe_dl3 = 9;
|
||||
subframe_ul = 3;
|
||||
//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]);
|
||||
} else {
|
||||
LOG_E(PHY,"phy_procedures_lte.c: get_ack, illegal subframe_tx %d for tdd_config %d\n",
|
||||
subframe_tx,frame_parms->tdd_config);
|
||||
return(0);
|
||||
}
|
||||
|
||||
// report ACK/NACK status
|
||||
o_ACK[cw_idx] = 0;
|
||||
if (harq_ack[subframe_dl0].send_harq_status == 1)
|
||||
o_ACK[cw_idx] = harq_ack[subframe_dl0].ack;
|
||||
|
||||
if (harq_ack[subframe_dl1].send_harq_status == 1)
|
||||
o_ACK[cw_idx] &= harq_ack[subframe_dl1].ack;
|
||||
|
||||
if (harq_ack[subframe_dl2].send_harq_status == 1)
|
||||
o_ACK[cw_idx] &= harq_ack[subframe_dl2].ack;
|
||||
|
||||
if (harq_ack[subframe_dl3].send_harq_status == 1)
|
||||
o_ACK[cw_idx] &= harq_ack[subframe_dl3].ack;
|
||||
|
||||
pN_bundled[0] = harq_ack[subframe_rx].vDAI_UL;
|
||||
status = harq_ack[subframe_dl0].send_harq_status + harq_ack[subframe_dl1].send_harq_status + harq_ack[subframe_dl2].send_harq_status + harq_ack[subframe_dl3].send_harq_status;
|
||||
|
||||
LOG_I(PHY,"TDD Config3 UL Sfn %d, dl Sfn0 %d status %d o_Ack %d, dl Sfn1 %d status %d o_Ack %d dl Sfn2 %d status %d o_Ack %d dl Sfn3 %d status %d o_Ack %d subframe_rx %d N_bundled %d status %d\n",
|
||||
subframe_tx, subframe_dl0, harq_ack[subframe_dl0].send_harq_status,harq_ack[subframe_dl0].ack,
|
||||
subframe_dl1, harq_ack[subframe_dl1].send_harq_status,harq_ack[subframe_dl1].ack,
|
||||
subframe_dl2, harq_ack[subframe_dl2].send_harq_status,harq_ack[subframe_dl2].ack,
|
||||
subframe_dl3, harq_ack[subframe_dl3].send_harq_status,harq_ack[subframe_dl3].ack,subframe_rx, pN_bundled[0], status);
|
||||
if (do_reset) {
|
||||
// reset ACK/NACK status
|
||||
harq_ack[subframe_dl0].ack = 2;
|
||||
harq_ack[subframe_dl1].ack = 2;
|
||||
harq_ack[subframe_dl2].ack = 2;
|
||||
harq_ack[subframe_dl3].ack = 2;
|
||||
harq_ack[subframe_dl0].send_harq_status = 0;
|
||||
harq_ack[subframe_dl1].send_harq_status = 0;
|
||||
harq_ack[subframe_dl2].send_harq_status = 0;
|
||||
harq_ack[subframe_dl3].send_harq_status = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -609,6 +755,29 @@ lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,unsigned char sub
|
||||
return(255);
|
||||
}
|
||||
|
||||
case 4:
|
||||
if ((subframe<1) || (subframe>=4))
|
||||
return(SF_DL);
|
||||
else if ((subframe>1) && (subframe < 4))
|
||||
return(SF_UL);
|
||||
else if (subframe==1)
|
||||
return (SF_S);
|
||||
else {
|
||||
LOG_E(PHY,"[PHY_PROCEDURES_LTE] Unknown subframe number\n");
|
||||
return(255);
|
||||
}
|
||||
|
||||
case 5:
|
||||
if ((subframe<1) || (subframe>=3))
|
||||
return(SF_DL);
|
||||
else if ((subframe>1) && (subframe < 3))
|
||||
return(SF_UL);
|
||||
else if (subframe==1)
|
||||
return (SF_S);
|
||||
else {
|
||||
LOG_E(PHY,"[PHY_PROCEDURES_LTE] Unknown subframe number\n");
|
||||
return(255);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -683,13 +852,13 @@ unsigned int is_phich_subframe(LTE_DL_FRAME_PARMS *frame_parms,unsigned char sub
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if ((subframe == 0) || (subframe == 8) )
|
||||
if ((subframe == 8) || (subframe == 9) )
|
||||
return(1);
|
||||
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (subframe == 0)
|
||||
if (subframe == 8)
|
||||
return(1);
|
||||
|
||||
break;
|
||||
|
||||
@@ -906,7 +906,9 @@ void generate_eNB_ulsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC
|
||||
T_INT(eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->round),
|
||||
T_INT(eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->first_rb),
|
||||
T_INT(eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->nb_rb),
|
||||
T_INT(eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->TBS));
|
||||
T_INT(eNB->ulsch[(uint32_t)UE_id]->harq_processes[harq_pid]->TBS),
|
||||
T_INT(dci_alloc->L),
|
||||
T_INT(dci_alloc->firstCCE));
|
||||
}
|
||||
|
||||
void pdsch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t *dlsch1,LTE_eNB_UE_stats *ue_stats,int ra_flag,int num_pdcch_symbols) {
|
||||
|
||||
@@ -700,13 +700,14 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
{
|
||||
|
||||
LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
|
||||
uint8_t nCCE0,nCCE1,harq_ack1,harq_ack0;
|
||||
uint8_t nCCE0,nCCE1,nCCE2,nCCE3,harq_ack1,harq_ack0,harq_ack3,harq_ack2;
|
||||
ANFBmode_t bundling_flag;
|
||||
uint16_t n1_pucch0=0,n1_pucch1=0;
|
||||
uint16_t n1_pucch0=0,n1_pucch1=0,n1_pucch2=0,n1_pucch3=0,n1_pucch_inter;
|
||||
static uint8_t candidate_dl[9]; // which downlink(s) the current ACK/NACK is associating to
|
||||
uint8_t last_dl=0xff; // the last downlink with valid DL-DCI. for calculating the PUCCH resource index
|
||||
int sf;
|
||||
int M;
|
||||
uint8_t ack_counter=0;
|
||||
// clear this, important for case where n1_pucch selection is not used
|
||||
int subframe=proc->subframe_tx;
|
||||
|
||||
@@ -726,10 +727,10 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
|
||||
if (bundling_flag==bundling) {
|
||||
LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
LOG_I(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
|
||||
} else {
|
||||
LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
LOG_I(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
|
||||
}
|
||||
|
||||
@@ -835,6 +836,11 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+last_dl].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
harq_ack0 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+last_dl].ack;
|
||||
|
||||
LOG_D(PHY,"SFN/SF %d/%d calculating n1_pucch cce0=%d n1_pucch0=%d cce1=%d n1_pucch1=%d\n",
|
||||
proc->frame_tx%1024,
|
||||
proc->subframe_tx,
|
||||
nCCE0,n1_pucch0,
|
||||
nCCE1,n1_pucch1);
|
||||
|
||||
if (harq_ack1!=2) { // n-6 // subframe 6,8,0 and maybe 5,7,9 is to be ACK/NAKed
|
||||
|
||||
@@ -891,6 +897,239 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
|
||||
break;
|
||||
|
||||
case 4: // DL:S:UL:UL:DL:DL:DL:DL:DL:DL
|
||||
// in this configuration we have M=4 from pg 68 of 36.213 (v8.6)
|
||||
// Note: this doesn't allow using subframe 1 for PDSCH transmission!!! (i.e. SF 1 cannot be acked in SF 2)
|
||||
// set ACK/NAKs to DTX
|
||||
harq_ack3 = 2; // DTX
|
||||
harq_ack2 = 2; // DTX
|
||||
harq_ack1 = 2; // DTX
|
||||
harq_ack0 = 2; // DTX
|
||||
// This is the offset for a particular subframe (2,3,4) => (0,2,4)
|
||||
//last_dl = (subframe-2)<<1;
|
||||
if (subframe == 2) {
|
||||
// i=0
|
||||
//nCCE0 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[2+subframe];
|
||||
nCCE0 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(8+subframe)%10];
|
||||
n1_pucch0 = 2*get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=1
|
||||
nCCE1 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[2+subframe];
|
||||
n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,0) + get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=2
|
||||
nCCE2 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(8+subframe)%10];
|
||||
n1_pucch2 = 2*get_Np(frame_parms->N_RB_DL,nCCE2,1) + nCCE2+ frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=3
|
||||
//nCCE3 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(9+subframe)%10];
|
||||
//n1_pucch3 = get_Np(frame_parms->N_RB_DL,nCCE3,1) + nCCE3 + frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
|
||||
// set ACK/NAK to values if not DTX
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(8+subframe)%10].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
|
||||
harq_ack0 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(8+subframe)%10].ack;
|
||||
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[2+subframe].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
harq_ack1 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[2+subframe].ack;
|
||||
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[3+subframe].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
|
||||
harq_ack2 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[3+subframe].ack;
|
||||
|
||||
//if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
//harq_ack3 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].ack;
|
||||
//LOG_I(PHY,"SFN/SF %d/%d calculating n1_pucch cce0=%d n1_pucch0=%d cce1=%d n1_pucch1=%d cce2=%d n1_pucch2=%d\n",
|
||||
// proc->frame_tx%1024,
|
||||
// proc->subframe_tx,
|
||||
// nCCE0,n1_pucch0,
|
||||
// nCCE1,n1_pucch1, nCCE2, n1_pucch2);
|
||||
}else if (subframe == 3) {
|
||||
// i=0
|
||||
|
||||
nCCE0 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[4+subframe];
|
||||
n1_pucch0 = 3*get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=1
|
||||
nCCE1 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[5+subframe];
|
||||
n1_pucch1 = 2*get_Np(frame_parms->N_RB_DL,nCCE1,0) + get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=2
|
||||
nCCE2 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(6+subframe)];
|
||||
n1_pucch2 = get_Np(frame_parms->N_RB_DL,nCCE2,0) + 2*get_Np(frame_parms->N_RB_DL,nCCE2,1) + nCCE2+ frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=3
|
||||
nCCE3 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(3+subframe)];
|
||||
n1_pucch3 = 3*get_Np(frame_parms->N_RB_DL,nCCE3,1) + nCCE3 + frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
|
||||
// set ACK/NAK to values if not DTX
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[4+subframe].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
|
||||
harq_ack0 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[4+subframe].ack;
|
||||
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+subframe].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
harq_ack1 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+subframe].ack;
|
||||
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(6+subframe)].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
|
||||
harq_ack2 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(6+subframe)].ack;
|
||||
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(3+subframe)].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
harq_ack3 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(3+subframe)].ack;
|
||||
}
|
||||
|
||||
//LOG_I(PHY,"SFN/SF %d/%d calculating n1_pucch cce0=%d n1_pucch0=%d harq_ack0=%d cce1=%d n1_pucch1=%d harq_ack1=%d cce2=%d n1_pucch2=%d harq_ack2=%d cce3=%d n1_pucch3=%d harq_ack3=%d bundling_flag=%d\n",
|
||||
// proc->frame_tx%1024,
|
||||
// proc->subframe_tx,
|
||||
// nCCE0,n1_pucch0,harq_ack0,
|
||||
// nCCE1,n1_pucch1,harq_ack1, nCCE2, n1_pucch2, harq_ack2,
|
||||
// nCCE3, n1_pucch3, harq_ack3, bundling_flag);
|
||||
|
||||
if ((bundling_flag==bundling)&&(SR == 0)) { // This is for bundling without SR,
|
||||
if ((harq_ack0!=2) ) {
|
||||
b[0] = harq_ack0;
|
||||
n1_pucch_inter = n1_pucch0;
|
||||
}
|
||||
if ((harq_ack1!=2) ) {
|
||||
b[0] = b[0]&harq_ack1;
|
||||
n1_pucch_inter = n1_pucch1;
|
||||
}
|
||||
if ((harq_ack2!=2) ) {
|
||||
b[0] = b[0]&harq_ack2;
|
||||
n1_pucch_inter = n1_pucch2;
|
||||
}
|
||||
if ((harq_ack3!=2) ) {
|
||||
b[0] = b[0]&harq_ack3;
|
||||
n1_pucch_inter = n1_pucch3;
|
||||
}
|
||||
|
||||
if (subframe == 3) {
|
||||
n1_pucch_inter = n1_pucch2;
|
||||
} else if (subframe == 2) {
|
||||
n1_pucch_inter = n1_pucch2;
|
||||
}
|
||||
|
||||
//LOG_I(PHY,"SFN/SF %d/%d calculating n1_pucch n1_pucch_inter=%d b[0]=%d b[1]=%d \n",
|
||||
// proc->frame_tx%1024,
|
||||
// proc->subframe_tx,n1_pucch_inter,
|
||||
// b[0],b[1]);
|
||||
|
||||
return(n1_pucch_inter);
|
||||
|
||||
} else if ((bundling_flag==multiplexing)&&(SR==0)) { // Table 10.1
|
||||
|
||||
if ((harq_ack0 == 1) && (harq_ack1 == 1) && (harq_ack2 == 1) && (harq_ack3 == 1)) {
|
||||
b[1] = 1;
|
||||
b[0] = 1;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 1) && (harq_ack1 == 1) && (harq_ack2 == 1) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if (((harq_ack0 == 0) || (harq_ack0 == 2)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 0) && (harq_ack3 == 2)) {
|
||||
b[1] = 1;
|
||||
b[0] = 1;
|
||||
return(n1_pucch2);
|
||||
} else if ((harq_ack0 == 1) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && (harq_ack3 == 1)) {
|
||||
b[1] = 1;
|
||||
b[0] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 0) && (harq_ack1 == 2) && (harq_ack2 == 2) && (harq_ack3 == 2)) {
|
||||
b[1] = 1;
|
||||
b[0] = 0;
|
||||
return(n1_pucch0);
|
||||
} else if ((harq_ack0 == 1) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[1] = 1;
|
||||
b[0] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1) && (harq_ack3 == 1)) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch3);
|
||||
} else if (((harq_ack0 == 0) || (harq_ack0 == 2)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && (harq_ack3 == 0)) {
|
||||
b[1] = 1;
|
||||
b[0] = 1;
|
||||
return(n1_pucch3);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch2);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && (harq_ack3 == 1)) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch0);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch0);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && (harq_ack1 == 1) && (harq_ack2 == 1) && (harq_ack3 == 1)) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch3);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && (harq_ack1 == 0) && (harq_ack2 == 2) && (harq_ack3 == 2)) {
|
||||
b[0] = 0;
|
||||
b[1] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && (harq_ack1 == 1) && (harq_ack2 == 1) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch2);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && (harq_ack3 == 1)) {
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch3);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch1);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1) && (harq_ack3 == 1)) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch3);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 0;
|
||||
b[1] = 0;
|
||||
return(n1_pucch2);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack3 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0))) {
|
||||
b[0] = 0;
|
||||
b[1] = 0;
|
||||
return(n1_pucch3);
|
||||
}
|
||||
|
||||
} else if (SR==1) { // SR and 0,1,or 2 ACKS, (first 3 entries in Table 7.3-1 of 36.213)
|
||||
// this should be number of ACKs (including
|
||||
if (harq_ack0==1)
|
||||
ack_counter ++;
|
||||
if (harq_ack1==1)
|
||||
ack_counter ++;
|
||||
if (harq_ack2==1)
|
||||
ack_counter ++;
|
||||
if (harq_ack3==1)
|
||||
ack_counter ++;
|
||||
|
||||
switch (ack_counter) {
|
||||
case 0:
|
||||
b[0] = 0;
|
||||
b[1] = 0;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
ack_counter = 0;
|
||||
return(ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
} // switch tdd_config
|
||||
}
|
||||
|
||||
|
||||
Executable → Regular
@@ -101,7 +101,7 @@ void fill_channel_desc(channel_desc_t *chan_desc,
|
||||
|
||||
LOG_D(OCM,"[CHANNEL] Filling a (nb_taps %d)\n",nb_taps);
|
||||
for (i = 0; i<nb_taps; i++) {
|
||||
LOG_D(OCM,"tap %d (%p,%d)\n",i,&chan_desc->a[i],nb_tx*nb_rx * sizeof(struct complex));
|
||||
LOG_D(OCM,"tap %d (%p,%zu)\n",i,&chan_desc->a[i],nb_tx*nb_rx * sizeof(struct complex));
|
||||
chan_desc->a[i] = (struct complex*) malloc(nb_tx*nb_rx * sizeof(struct complex));
|
||||
}
|
||||
|
||||
|
||||
@@ -140,10 +140,14 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
|
||||
|
||||
rnti = UE_RNTI(module_idP, i);
|
||||
CC_id = UE_PCCID(module_idP, i);
|
||||
if ((frameP==0)&&(subframeP==0))
|
||||
LOG_I(MAC,"UE rnti %x : %s, PHR %d dB\n", rnti,
|
||||
UE_list->UE_sched_ctrl[i].ul_out_of_sync==0 ? "in synch" : "out of sync",
|
||||
UE_list->UE_template[CC_id][i].phr_info);
|
||||
if ((frameP==0)&&(subframeP==0)) {
|
||||
LTE_eNB_UE_stats *eNB_UE_stats = mac_xface->get_eNB_UE_stats(module_idP, CC_id, rnti);
|
||||
int cqi = eNB_UE_stats == NULL ? -1 : eNB_UE_stats->DL_cqi[0];
|
||||
LOG_I(MAC,"UE rnti %x : %s, PHR %d dB CQI %d\n", rnti,
|
||||
UE_list->UE_sched_ctrl[i].ul_out_of_sync==0 ? "in synch" : "out of sync",
|
||||
UE_list->UE_template[CC_id][i].phr_info,
|
||||
cqi);
|
||||
}
|
||||
|
||||
PHY_vars_eNB_g[module_idP][CC_id]->pusch_stats_bsr[i][(frameP*10)+subframeP]=-63;
|
||||
if (i==UE_list->head)
|
||||
|
||||
Regular → Executable
+5
-7
@@ -612,17 +612,15 @@ schedule_ue_spec(
|
||||
|
||||
if (round > 0) {
|
||||
|
||||
if (frame_parms[CC_id]->frame_type == TDD) {
|
||||
UE_list->UE_template[CC_id][UE_id].DAI++;
|
||||
update_ul_dci(module_idP,CC_id,rnti,UE_list->UE_template[CC_id][UE_id].DAI);
|
||||
LOG_D(MAC,"DAI update: CC_id %d subframeP %d: UE %d, DAI %d\n",
|
||||
CC_id,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].DAI);
|
||||
}
|
||||
|
||||
// get freq_allocation
|
||||
nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid];
|
||||
|
||||
if (nb_rb <= nb_available_rb) {
|
||||
if (frame_parms[CC_id]->frame_type == TDD) {
|
||||
UE_list->UE_template[CC_id][UE_id].DAI++;
|
||||
update_ul_dci(module_idP,CC_id,rnti,UE_list->UE_template[CC_id][UE_id].DAI);
|
||||
LOG_D(MAC,"DAI update: CC_id %d subframeP %d: UE %d, DAI %d\n", CC_id,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].DAI);
|
||||
}
|
||||
|
||||
if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) {
|
||||
for(j=0; j<frame_parms[CC_id]->N_RBG; j++) { // for indicating the rballoc for each sub-band
|
||||
|
||||
@@ -87,7 +87,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
|
||||
unsigned char header_len_mcch=0,header_len_msi=0,header_len_mtch=0, header_len_mtch_temp=0, header_len_mcch_temp=0, header_len_msi_temp=0;
|
||||
int ii=0, msi_pos=0;
|
||||
int mcch_mcs = -1;
|
||||
uint16_t TBS,j,padding=0,post_padding=0;
|
||||
uint16_t TBS,j=-1,padding=0,post_padding=0;
|
||||
mac_rlc_status_resp_t rlc_status;
|
||||
int num_mtch;
|
||||
int msi_length,i,k;
|
||||
|
||||
@@ -545,7 +545,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
|
||||
pdcp_read_state_g = 0;
|
||||
// print_active_requests()
|
||||
#ifdef PDCP_DEBUG
|
||||
LOG_D(PDCP, "[PDCP][NETLINK] Something in socket, length %d \n",
|
||||
LOG_D(PDCP, "[PDCP][NETLINK] Something in socket, length %zu\n",
|
||||
nas_nlh_rx->nlmsg_len - sizeof(struct nlmsghdr));
|
||||
#endif
|
||||
|
||||
@@ -603,7 +603,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
|
||||
|
||||
if (h_rc == HASH_TABLE_OK) {
|
||||
#ifdef PDCP_DEBUG
|
||||
LOG_D(PDCP, "[FRAME %5u][eNB][NETLINK][IP->PDCP] INST %d: Received socket with length %d (nlmsg_len = %d) on Rab %d \n",
|
||||
LOG_D(PDCP, "[FRAME %5u][eNB][NETLINK][IP->PDCP] INST %d: Received socket with length %d (nlmsg_len = %zu) on Rab %d \n",
|
||||
ctxt.frame,
|
||||
pdcp_read_header_g.inst,
|
||||
len,
|
||||
@@ -693,7 +693,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
|
||||
if (h_rc == HASH_TABLE_OK) {
|
||||
rab_id = pdcp_p->rb_id;
|
||||
#ifdef PDCP_DEBUG
|
||||
LOG_D(PDCP, "[FRAME %5u][UE][NETLINK][IP->PDCP] INST %d: Received socket with length %d (nlmsg_len = %d) on Rab %d \n",
|
||||
LOG_D(PDCP, "[FRAME %5u][UE][NETLINK][IP->PDCP] INST %d: Received socket with length %d (nlmsg_len = %zu) on Rab %d \n",
|
||||
ctxt.frame,
|
||||
pdcp_read_header_g.inst,
|
||||
len,
|
||||
|
||||
@@ -747,10 +747,10 @@ rrc_ue_establish_drb(
|
||||
# ifdef OAI_EMU
|
||||
oai_emulation.info.oai_ifup[ue_mod_idP]=1;
|
||||
# endif
|
||||
LOG_I(OIP,"[UE %d] Config the oai%d to send/receive pkt on DRB %d to/from the protocol stack\n",
|
||||
LOG_I(OIP,"[UE %d] Config the oai%d to send/receive pkt on DRB %ld to/from the protocol stack\n",
|
||||
ue_mod_idP,
|
||||
ip_addr_offset3+ue_mod_idP,
|
||||
(eNB_index * maxDRB) + DRB_config->drb_Identity);
|
||||
(long int)((eNB_index * maxDRB) + DRB_config->drb_Identity));
|
||||
|
||||
rb_conf_ipv4(0,//add
|
||||
ue_mod_idP,//cx align with the UE index
|
||||
@@ -1042,7 +1042,7 @@ rrc_ue_update_radioResourceConfigDedicated(RadioResourceConfigDedicated_t* radio
|
||||
// Update cqi_ReportConfig
|
||||
if(radioResourceConfigDedicated->physicalConfigDedicated->cqi_ReportConfig != NULL)
|
||||
{
|
||||
LOG_I(RRC,"Update cqi_ReportConfig config (size=%d,%d)\n", sizeof(*physicalConfigDedicated2->cqi_ReportConfig), sizeof(CQI_ReportConfig_t));
|
||||
LOG_I(RRC,"Update cqi_ReportConfig config (size=%zu,%zu)\n", sizeof(*physicalConfigDedicated2->cqi_ReportConfig), sizeof(CQI_ReportConfig_t));
|
||||
|
||||
if(UE_rrc_inst[ctxt_pP->module_id].physicalConfigDedicated[eNB_index]->cqi_ReportConfig == NULL)
|
||||
UE_rrc_inst[ctxt_pP->module_id].physicalConfigDedicated[eNB_index]->cqi_ReportConfig = CALLOC(1,sizeof(CQI_ReportConfig_t));
|
||||
@@ -1052,7 +1052,7 @@ rrc_ue_update_radioResourceConfigDedicated(RadioResourceConfigDedicated_t* radio
|
||||
sizeof(*physicalConfigDedicated2->cqi_ReportConfig));
|
||||
|
||||
if (radioResourceConfigDedicated->physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic != NULL) {
|
||||
LOG_I(RRC,"Update cqi_ReportPeriodic config (size=%d,%d)\n", sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic), sizeof(CQI_ReportPeriodic_t));
|
||||
LOG_I(RRC,"Update cqi_ReportPeriodic config (size=%zu,%zu)\n", sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic), sizeof(CQI_ReportPeriodic_t));
|
||||
|
||||
if(UE_rrc_inst[ctxt_pP->module_id].physicalConfigDedicated[eNB_index]->cqi_ReportConfig->cqi_ReportPeriodic == NULL)
|
||||
UE_rrc_inst[ctxt_pP->module_id].physicalConfigDedicated[eNB_index]->cqi_ReportConfig->cqi_ReportPeriodic = CALLOC(1,sizeof(CQI_ReportPeriodic_t));
|
||||
|
||||
@@ -2268,8 +2268,8 @@ rrc_eNB_process_MeasurementReport(
|
||||
LOG_I(RRC, "RSRP of Source %ld\n", measResults2->measResultPCell.rsrpResult);
|
||||
LOG_I(RRC, "RSRQ of Source %ld\n", measResults2->measResultPCell.rsrqResult);
|
||||
#else
|
||||
LOG_I(RRC, "RSRP of Source %d\n", measResults2->measResultServCell.rsrpResult);
|
||||
LOG_I(RRC, "RSRQ of Source %d\n", measResults2->measResultServCell.rsrqResult);
|
||||
LOG_I(RRC, "RSRP of Source %ld\n", measResults2->measResultServCell.rsrpResult);
|
||||
LOG_I(RRC, "RSRQ of Source %ld\n", measResults2->measResultServCell.rsrqResult);
|
||||
#endif
|
||||
|
||||
if (ue_context_pP->ue_context.handover_info->ho_prepare != 0xF0) {
|
||||
@@ -3613,9 +3613,9 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
|
||||
dest_ip_offset = 8;
|
||||
# endif
|
||||
LOG_I(OIP,
|
||||
"[eNB %d] Config the oai%d to send/receive pkt on DRB %d to/from the protocol stack\n",
|
||||
"[eNB %d] Config the oai%d to send/receive pkt on DRB %ld to/from the protocol stack\n",
|
||||
ctxt_pP->module_id, ctxt_pP->module_id,
|
||||
(ue_context_pP->local_uid * maxDRB) + DRB_configList->list.array[i]->drb_Identity);
|
||||
(long int)((ue_context_pP->local_uid * maxDRB) + DRB_configList->list.array[i]->drb_Identity));
|
||||
ue_module_id = oai_emulation.info.eNB_ue_local_uid_to_ue_module_id[ctxt_pP->module_id][ue_context_pP->local_uid];
|
||||
rb_conf_ipv4(0, //add
|
||||
ue_module_id, //cx
|
||||
|
||||
@@ -287,10 +287,10 @@ rrc_eNB_process_security(
|
||||
|
||||
// translation
|
||||
LOG_D(RRC,
|
||||
"[eNB %d] NAS security_capabilities.encryption_algorithms %u AS ciphering_algorithm %u NAS security_capabilities.integrity_algorithms %u AS integrity_algorithm %u\n",
|
||||
"[eNB %d] NAS security_capabilities.encryption_algorithms %u AS ciphering_algorithm %lu NAS security_capabilities.integrity_algorithms %u AS integrity_algorithm %u\n",
|
||||
ctxt_pP->module_id,
|
||||
ue_context_pP->ue_context.security_capabilities.encryption_algorithms,
|
||||
ue_context_pP->ue_context.ciphering_algorithm,
|
||||
(unsigned long)ue_context_pP->ue_context.ciphering_algorithm,
|
||||
ue_context_pP->ue_context.security_capabilities.integrity_algorithms,
|
||||
ue_context_pP->ue_context.integrity_algorithm);
|
||||
/* Select relevant algorithms */
|
||||
@@ -308,11 +308,11 @@ rrc_eNB_process_security(
|
||||
changed = TRUE;
|
||||
}
|
||||
|
||||
LOG_I (RRC, "[eNB %d][UE %x] Selected security algorithms (%p): %x, %x, %s\n",
|
||||
LOG_I (RRC, "[eNB %d][UE %x] Selected security algorithms (%p): %lx, %x, %s\n",
|
||||
ctxt_pP->module_id,
|
||||
ue_context_pP->ue_context.rnti,
|
||||
security_capabilities_pP,
|
||||
cipheringAlgorithm,
|
||||
(unsigned long)cipheringAlgorithm,
|
||||
integrityProtAlgorithm,
|
||||
changed ? "changed" : "same");
|
||||
|
||||
|
||||
@@ -259,8 +259,8 @@ void log_set_instance_type (log_instance_type_t instance);
|
||||
# include "log_if.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
int logInit (void);
|
||||
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...);
|
||||
void logRecord(const char *file, const char *func, int line,int comp, int level, const char *format, ...);
|
||||
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
||||
void logRecord(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
||||
int set_comp_log(int component, int level, int verbosity, int interval);
|
||||
int set_log(int component, int level, int interval);
|
||||
void set_glog(int level, int verbosity);
|
||||
|
||||
@@ -248,6 +248,14 @@ void display_usim_data(const char *filename) {
|
||||
memcpy(key, data.keys.ik, USIM_IK_SIZE);
|
||||
printf("\tIK\t: \"%s\"\n", key);
|
||||
|
||||
printf("\n\tusim_api_k:");
|
||||
for (int i = 0; i < 16; i++)
|
||||
printf(" %2.2x", data.keys.usim_api_k[i]);
|
||||
printf("\n\topc :");
|
||||
for (int i = 0; i < 16; i++)
|
||||
printf(" %2.2x", data.keys.opc[i]);
|
||||
printf("\n\n");
|
||||
|
||||
printf("EPS NAS security context:\n");
|
||||
printf("\tKSIasme\t: 0x%.2x\n", data.securityctx.KSIasme.value[0]);
|
||||
char kasme[USIM_K_ASME_SIZE + 1];
|
||||
|
||||
@@ -203,6 +203,52 @@ void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const c
|
||||
LOG_TRACE(INFO, "EMM-MAIN - USIM application data successfully read");
|
||||
user->emm_data->usim_is_valid = TRUE;
|
||||
|
||||
/* print keys (for debugging) */
|
||||
{
|
||||
char usim_api_k[256];
|
||||
char opc[256];
|
||||
sprintf(usim_api_k,
|
||||
"%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x "
|
||||
"%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x",
|
||||
user->usim_data.keys.usim_api_k[0],
|
||||
user->usim_data.keys.usim_api_k[1],
|
||||
user->usim_data.keys.usim_api_k[2],
|
||||
user->usim_data.keys.usim_api_k[3],
|
||||
user->usim_data.keys.usim_api_k[4],
|
||||
user->usim_data.keys.usim_api_k[5],
|
||||
user->usim_data.keys.usim_api_k[6],
|
||||
user->usim_data.keys.usim_api_k[7],
|
||||
user->usim_data.keys.usim_api_k[8],
|
||||
user->usim_data.keys.usim_api_k[9],
|
||||
user->usim_data.keys.usim_api_k[10],
|
||||
user->usim_data.keys.usim_api_k[11],
|
||||
user->usim_data.keys.usim_api_k[12],
|
||||
user->usim_data.keys.usim_api_k[13],
|
||||
user->usim_data.keys.usim_api_k[14],
|
||||
user->usim_data.keys.usim_api_k[15]);
|
||||
sprintf(opc,
|
||||
"%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x "
|
||||
"%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x",
|
||||
user->usim_data.keys.opc[0],
|
||||
user->usim_data.keys.opc[1],
|
||||
user->usim_data.keys.opc[2],
|
||||
user->usim_data.keys.opc[3],
|
||||
user->usim_data.keys.opc[4],
|
||||
user->usim_data.keys.opc[5],
|
||||
user->usim_data.keys.opc[6],
|
||||
user->usim_data.keys.opc[7],
|
||||
user->usim_data.keys.opc[8],
|
||||
user->usim_data.keys.opc[9],
|
||||
user->usim_data.keys.opc[10],
|
||||
user->usim_data.keys.opc[11],
|
||||
user->usim_data.keys.opc[12],
|
||||
user->usim_data.keys.opc[13],
|
||||
user->usim_data.keys.opc[14],
|
||||
user->usim_data.keys.opc[15]);
|
||||
LOG_TRACE(INFO, "EMM-MAIN - usim_api_k: %s", usim_api_k);
|
||||
LOG_TRACE(INFO, "EMM-MAIN - opc: %s", opc);
|
||||
}
|
||||
|
||||
/* Get the Home PLMN derived from the IMSI */
|
||||
user->emm_data->hplmn.MCCdigit1 = user->usim_data.imsi.u.num.digit1;
|
||||
user->emm_data->hplmn.MCCdigit2 = user->usim_data.imsi.u.num.digit2;
|
||||
|
||||
@@ -297,7 +297,7 @@ int ethernet_tune(openair0_device *device, unsigned int option, int value) {
|
||||
if (ret == -1) {
|
||||
fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
|
||||
} else {
|
||||
printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
|
||||
printf ("[ETHERNET] status of %s is %d\n", system_cmd, WEXITSTATUS(ret));
|
||||
}
|
||||
printf("[ETHERNET] Coalesce parameters %s\n",system_cmd);
|
||||
} else {
|
||||
@@ -314,7 +314,7 @@ int ethernet_tune(openair0_device *device, unsigned int option, int value) {
|
||||
if (ret == -1) {
|
||||
fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
|
||||
} else {
|
||||
printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
|
||||
printf ("[ETHERNET] status of %s is %d\n", system_cmd, WEXITSTATUS(ret));
|
||||
}
|
||||
printf("[ETHERNET] Pause parameters %s\n",system_cmd);
|
||||
} else {
|
||||
@@ -329,7 +329,7 @@ int ethernet_tune(openair0_device *device, unsigned int option, int value) {
|
||||
if (ret == -1) {
|
||||
fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
|
||||
} else {
|
||||
printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
|
||||
printf ("[ETHERNET] status of %s is %d\n", system_cmd, WEXITSTATUS(ret));
|
||||
}
|
||||
printf("[ETHERNET] Ring parameters %s\n",system_cmd);
|
||||
} else {
|
||||
|
||||
@@ -261,7 +261,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
|
||||
LOG_E(PHY,"[recv] received %d samples out of %d\n",samples_received,nsamps);
|
||||
|
||||
if ( s->rx_md.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE)
|
||||
LOG_E(PHY,s->rx_md.to_pp_string(true).c_str());
|
||||
LOG_E(PHY, "%s\n", s->rx_md.to_pp_string(true).c_str());
|
||||
|
||||
s->rx_count += nsamps;
|
||||
s->rx_timestamp = s->rx_md.time_spec.to_ticks(s->sample_rate);
|
||||
@@ -664,7 +664,7 @@ extern "C" {
|
||||
LOG_I(PHY,"RF board max packet size %u, size for 100µs jitter %d \n", max, samples);
|
||||
if ( samples < max )
|
||||
stream_args_rx.args["spp"] = str(boost::format("%d") % samples );
|
||||
LOG_I(PHY,"rx_max_num_samps %u\n",
|
||||
LOG_I(PHY,"rx_max_num_samps %zu\n",
|
||||
s->usrp->get_rx_stream(stream_args_rx)->get_max_num_samps());
|
||||
|
||||
for (int i = 0; i<openair0_cfg[0].rx_num_channels; i++)
|
||||
|
||||
@@ -972,8 +972,8 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
|
||||
end_rf_ts = proc->timestamp_rx+eNB->ts_offset+(tx_sfoffset*fp->samples_per_tti)-openair0_cfg[0].tx_sample_advance;
|
||||
if (recv_if_count != 0 ) {
|
||||
recv_if_count = recv_if_count-1;
|
||||
LOG_D(HW,"[From Timestamp %d to Timestamp %d] RTT_RF: %"PRId64"; RTT_RF\n", start_rf_prev_ts, end_rf_ts, clock_difftime_ns(start_rf_prev, end_rf));
|
||||
LOG_D(HW,"[From Timestamp %d to Timestamp %d] RTT_RF: %"PRId64"; RTT_RF\n",start_rf_prev2_ts, end_rf_ts, clock_difftime_ns(start_rf_prev2, end_rf));
|
||||
LOG_D(HW,"[From Timestamp %"PRId64" to Timestamp %"PRId64"] RTT_RF: %"PRId64"; RTT_RF\n", start_rf_prev_ts, end_rf_ts, clock_difftime_ns(start_rf_prev, end_rf));
|
||||
LOG_D(HW,"[From Timestamp %"PRId64" to Timestamp %"PRId64"] RTT_RF: %"PRId64"; RTT_RF\n",start_rf_prev2_ts, end_rf_ts, clock_difftime_ns(start_rf_prev2, end_rf));
|
||||
}
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
|
||||
|
||||
|
||||
@@ -281,7 +281,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr %f dBm/RE (%f dBm RSSI)for subframe %d\n",UE_id,
|
||||
10*log10(rx_pwr),
|
||||
10*log10(rx_pwr*(double)frame_parms->N_RB_DL*12),subframe);
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (noise) -132 dBm/RE (N0fs = %.1f dBm, N0B = %.1f dBm) for slot %d (subframe %d)\n",
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (noise) -132 dBm/RE (N0fs = %.1f dBm, N0B = %.1f dBm) for subframe %d\n",
|
||||
UE_id,
|
||||
10*log10(eNB2UE[eNB_id][UE_id][CC_id]->sampling_rate*1e6)-174,
|
||||
10*log10(eNB2UE[eNB_id][UE_id][CC_id]->sampling_rate*1e6*12*frame_parms->N_RB_DL/(double)frame_parms->ofdm_symbol_size)-174,
|
||||
|
||||
@@ -513,7 +513,7 @@ void update_mac(Event_t event)
|
||||
if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) {
|
||||
oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer;
|
||||
UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer;
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE %:", i);
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:", i);
|
||||
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer);
|
||||
}
|
||||
|
||||
@@ -637,7 +637,7 @@ void update_mac(Event_t event)
|
||||
if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) {
|
||||
oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer;
|
||||
UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer;
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE %:", i);
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:", i);
|
||||
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer);
|
||||
}
|
||||
|
||||
@@ -903,13 +903,13 @@ void update_mac(Event_t event)
|
||||
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
|
||||
oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval;
|
||||
UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval;
|
||||
LOG_I(EMU,"cqiSchedInterval UE :\n", i);
|
||||
LOG_I(EMU,"cqiSchedInterval UE %d:\n", i);
|
||||
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval);
|
||||
}
|
||||
} else {
|
||||
oai_emulation->mac_config[event.ue].cqiSchedInterval= mac_config[event.ue].cqiSchedInterval;
|
||||
UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval = oai_emulation->mac_config[event.ue].cqiSchedInterval;
|
||||
LOG_I(EMU,"cqiSchedInterval UE :\n", event.ue);
|
||||
LOG_I(EMU,"cqiSchedInterval UE %d:\n", event.ue);
|
||||
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval);
|
||||
}
|
||||
} else if(!strcmp((char *) event.key, "mac_ContentionResolutionTimer") && event.value!=NULL && validate_mac(event)) {
|
||||
@@ -923,13 +923,13 @@ void update_mac(Event_t event)
|
||||
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
|
||||
oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer;
|
||||
UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer;
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE :\n", i);
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:\n", i);
|
||||
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer);
|
||||
}
|
||||
} else {
|
||||
oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer= mac_config[event.ue].mac_ContentionResolutionTimer;
|
||||
UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer = oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer;
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE :\n", event.ue);
|
||||
LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:\n", event.ue);
|
||||
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer);
|
||||
}
|
||||
} else if(!strcmp((char *) event.key, "max_allowed_rbs") && event.value!=NULL && validate_mac(event)) {
|
||||
@@ -1040,7 +1040,7 @@ void update_sys_model(Event_t event)
|
||||
LOG_I(EMU,"free_space_model_parameters.pathloss_exponent %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_exponent);
|
||||
LOG_I(EMU,"free_space_model_parameters.pathloss_0_dB %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB);
|
||||
|
||||
LOG_I(EMU,"ricean_8tap.rice_factor_dB %G\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB);
|
||||
LOG_I(EMU,"ricean_8tap.rice_factor_dB %d\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB);
|
||||
|
||||
//Antenna
|
||||
LOG_I(EMU,"antenna.eNB_antenna.number_of_sectors %d\n",oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors);
|
||||
@@ -1103,7 +1103,7 @@ void update_sys_model(Event_t event)
|
||||
} else if(!strcmp((char *) event.key, "free_space_model_parameters.pathloss_0_dB")) {
|
||||
LOG_I(EMU,"free_space_model_parameters.pathloss_0_dB %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB);
|
||||
} else if(!strcmp((char *) event.key, "ricean_8tap.rice_factor_dB")) {
|
||||
LOG_I(EMU,"ricean_8tap.rice_factor_dB %G\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB);
|
||||
LOG_I(EMU,"ricean_8tap.rice_factor_dB %d\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB);
|
||||
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.number_of_sectors")) {
|
||||
LOG_I(EMU,"antenna.eNB_antenna.number_of_sectors %d\n",oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors);
|
||||
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.beam_width_dB")) {
|
||||
@@ -1202,8 +1202,8 @@ void update_topo_model(Event_t event)
|
||||
LOG_I(EMU,"UE_moving_dynamics_max_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps);
|
||||
LOG_I(EMU,"UE_moving_dynamics_min_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms);
|
||||
LOG_I(EMU,"UE_moving_dynamics_max_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms);
|
||||
LOG_I(EMU,"grid_map_horizontal_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid);
|
||||
LOG_I(EMU,"grid_map_vertical_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid);
|
||||
LOG_I(EMU,"grid_map_horizontal_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid);
|
||||
LOG_I(EMU,"grid_map_vertical_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid);
|
||||
LOG_I(EMU,"UE_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option);
|
||||
LOG_I(EMU,"random_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes);
|
||||
LOG_I(EMU,"concentrated_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes);
|
||||
@@ -1245,9 +1245,9 @@ void update_topo_model(Event_t event)
|
||||
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_journey_time_ms")) {
|
||||
LOG_I(EMU,"UE_moving_dynamics_max_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms);
|
||||
} else if(!strcmp((char *) event.key, "grid_map_horizontal_grid")) {
|
||||
LOG_I(EMU,"grid_map_horizontal_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid);
|
||||
LOG_I(EMU,"grid_map_horizontal_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid);
|
||||
} else if(!strcmp((char *) event.key, "grid_map_vertical_grid")) {
|
||||
LOG_I(EMU,"grid_map_vertical_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid);
|
||||
LOG_I(EMU,"grid_map_vertical_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid);
|
||||
} else if(!strcmp((char *) event.key, "UE_initial_distribution_selected_option")) {
|
||||
LOG_I(EMU,"UE_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option);
|
||||
} else if(!strcmp((char *) event.key, "random_UE_distribution_number_of_nodes")) {
|
||||
|
||||
@@ -1188,6 +1188,15 @@ int T_port = 2021; /* default port to listen to to wait for the tracer */
|
||||
int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */
|
||||
#endif
|
||||
|
||||
static void print_current_directory(void)
|
||||
{
|
||||
char dir[8192]; /* arbitrary size (should be big enough) */
|
||||
if (getcwd(dir, 8192) == NULL)
|
||||
printf("ERROR getting working directory\n");
|
||||
else
|
||||
printf("working directory: %s\n", dir);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------*/
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
@@ -1195,6 +1204,8 @@ main (int argc, char **argv)
|
||||
|
||||
clock_t t;
|
||||
|
||||
print_current_directory();
|
||||
|
||||
start_background_system();
|
||||
|
||||
#ifdef SMBV
|
||||
@@ -1350,6 +1361,11 @@ main (int argc, char **argv)
|
||||
LOG_N(EMU,
|
||||
">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU initialization done <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n");
|
||||
|
||||
#ifndef PACKAGE_VERSION
|
||||
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
#endif
|
||||
LOG_I(EMU, "Version: %s\n", PACKAGE_VERSION);
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
|
||||
// Handle signals until all tasks are terminated
|
||||
|
||||
@@ -468,7 +468,7 @@ int ocg_config_env(void)
|
||||
oai_emulation.info.frame_type[CC_id] = map_str_to_int(frame_type_names, oai_emulation.info.frame_type_name[CC_id]);
|
||||
|
||||
if (oai_emulation.info.frame_type[CC_id] == -1) {
|
||||
LOG_E(EMU,"frame type incorrect %s, set it to TDD \n",oai_emulation.info.frame_type_name);
|
||||
LOG_E(EMU,"frame type incorrect %s, set it to TDD \n",oai_emulation.info.frame_type_name[CC_id]);
|
||||
oai_emulation.info.frame_type[CC_id]=TDD;
|
||||
} else
|
||||
LOG_I(EMU,"Frame type is %s \n",oai_emulation.info.frame_type_name[CC_id]);
|
||||
@@ -478,7 +478,7 @@ int ocg_config_env(void)
|
||||
LOG_E(EMU,"TDD config %d out of range, set it to 3\n",oai_emulation.info.tdd_config[CC_id]);
|
||||
oai_emulation.info.tdd_config[CC_id]=3;
|
||||
} else
|
||||
LOG_I(EMU,"TDD config is set to \n",oai_emulation.info.tdd_config[CC_id]);
|
||||
LOG_I(EMU,"TDD config is set to %d\n",oai_emulation.info.tdd_config[CC_id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1087,8 +1087,8 @@ int ocg_config_app(void)
|
||||
oai_emulation.application_config.customized_traffic.holding_time_pe_off[customized_traffic_config_index];
|
||||
|
||||
|
||||
LOG_I(OTG,"customized:: OCG_config_OTG: (2) FORMAT (%d:%d) source = %d, dest = %d, dist type for size = %d start/duration %d/%d\n", source_id_start, source_id_end, source_id_index,
|
||||
destination_id_index, g_otg->size_dist[source_id_index][destination_id_index][0],
|
||||
LOG_I(OTG,"customized:: OCG_config_OTG: (2) FORMAT (%s:%s) source = %d, dest = %d, dist type for size = %d [TODO: check code, printed value may not be correct, checks the indexes of the arry access] start/duration %d/%d\n", source_id_start, source_id_end, source_id_index,
|
||||
destination_id_index, g_otg->size_dist[source_id_index][destination_id_index][0][0],
|
||||
g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]],
|
||||
g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]);
|
||||
per_source_id = strtok(NULL, comma);
|
||||
|
||||
@@ -1050,15 +1050,15 @@ int eNB_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void *
|
||||
|
||||
*ptimestamp = last_eNB_rx_timestamp[eNB_id][CC_id];
|
||||
|
||||
LOG_D(EMU,"eNB_trx_read nsamps %d TS(%llu,%llu) => subframe %d\n",nsamps,
|
||||
(unsigned long long)current_eNB_rx_timestamp[eNB_id][CC_id],
|
||||
(unsigned long long)last_eNB_rx_timestamp[eNB_id][CC_id],
|
||||
(*ptimestamp/PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.samples_per_tti)%10);
|
||||
LOG_D(EMU,"eNB_trx_read nsamps %d TS(%"PRId64",%"PRId64") => subframe %d\n",nsamps,
|
||||
current_eNB_rx_timestamp[eNB_id][CC_id],
|
||||
last_eNB_rx_timestamp[eNB_id][CC_id],
|
||||
(int)((*ptimestamp/PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.samples_per_tti)%10));
|
||||
// if we're at a subframe boundary generate UL signals for this eNB
|
||||
|
||||
while (nsamps) {
|
||||
while (current_eNB_rx_timestamp[eNB_id][CC_id] == last) {
|
||||
LOG_D(EMU,"eNB: current TS %llu, last TS %llu, sleeping\n",current_eNB_rx_timestamp[eNB_id][CC_id],last_eNB_rx_timestamp[eNB_id][CC_id]);
|
||||
LOG_D(EMU,"eNB: current TS %"PRId64", last TS %"PRId64", sleeping\n",current_eNB_rx_timestamp[eNB_id][CC_id],last_eNB_rx_timestamp[eNB_id][CC_id]);
|
||||
usleep(500);
|
||||
}
|
||||
|
||||
@@ -1126,7 +1126,7 @@ int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **
|
||||
usleep(500);
|
||||
}
|
||||
while (current_UE_rx_timestamp[UE_id][CC_id] == last) {
|
||||
LOG_D(EMU,"UE_trx_read : current TS %d, last TS %d, sleeping\n",current_UE_rx_timestamp[UE_id][CC_id],last_UE_rx_timestamp[UE_id][CC_id]);
|
||||
LOG_D(EMU,"UE_trx_read : current TS %"PRId64", last TS %"PRId64", sleeping\n",current_UE_rx_timestamp[UE_id][CC_id],last_UE_rx_timestamp[UE_id][CC_id]);
|
||||
|
||||
usleep(500);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user