modifications in UE system information handling to allow for decoding of all SIBs. For USRP targets, timing advance and TX power control.
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7563 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -2,13 +2,13 @@ cmake_minimum_required(VERSION 2.8)
|
||||
set(XFORMS True)
|
||||
set(RRC_ASN1_VERSION "Rel10")
|
||||
set(ENABLE_VCD_FIFO False )
|
||||
set(RF_BOARD "EXMIMO")
|
||||
set(RF_BOARD "OAI_USRP")
|
||||
set(ENABLE_ITTI True)
|
||||
set(ENABLE_USE_MME False)
|
||||
set(PDCP_USE_NETLINK True)
|
||||
set(LINK_ENB_PDCP_TO_IP_DRIVER True)
|
||||
set(LINK_ENB_PDCP_TO_GTPV1U False)
|
||||
set(PDCP_USE_NETLINK True )
|
||||
set(PDCP_USE_NETLINK_QUEUES False)
|
||||
set(LINUX True)
|
||||
set(SECU False)
|
||||
set(NAS_UE False)
|
||||
|
||||
@@ -39,9 +39,7 @@
|
||||
#include "SCHED/extern.h"
|
||||
#include "MAC_INTERFACE/defs.h"
|
||||
#include "MAC_INTERFACE/extern.h"
|
||||
#ifdef USER_MODE
|
||||
#include <math.h>
|
||||
#endif
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#include "LAYER2/MAC/defs.h"
|
||||
@@ -296,12 +294,10 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
|
||||
|
||||
|
||||
|
||||
#ifdef USER_MODE
|
||||
#ifdef DEBUG_PHY
|
||||
write_output("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
|
||||
write_output("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
|
||||
write_output("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
|
||||
#endif
|
||||
#endif
|
||||
return (1);
|
||||
}
|
||||
@@ -310,7 +306,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
|
||||
void lte_sync_time_free(void)
|
||||
{
|
||||
|
||||
#ifdef USER_MODE
|
||||
|
||||
if (sync_corr_ue0) {
|
||||
msg("Freeing sync_corr_ue (%p)...\n",sync_corr_ue0);
|
||||
@@ -342,7 +337,6 @@ void lte_sync_time_free(void)
|
||||
free(primary_synch2_time);
|
||||
}
|
||||
|
||||
#endif
|
||||
sync_corr_ue0 = NULL;
|
||||
sync_corr_ue1 = NULL;
|
||||
sync_corr_ue2 = NULL;
|
||||
@@ -502,7 +496,7 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
|
||||
sync_source,peak_pos,peak_val);
|
||||
|
||||
|
||||
#ifdef USER_MODE
|
||||
|
||||
|
||||
if (debug_cnt == 0) {
|
||||
write_output("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
|
||||
@@ -514,7 +508,7 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
|
||||
debug_cnt++;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -574,11 +568,8 @@ int lte_sync_time_eNB(int32_t **rxdata, ///rx data in time domain
|
||||
|
||||
//calculate dot product of primary_synch0_time and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n];
|
||||
for (ar=0; ar<frame_parms->nb_antennas_rx; ar++) {
|
||||
//#ifndef USER_MODE
|
||||
|
||||
result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, 15);
|
||||
//#else
|
||||
// result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples, 12);
|
||||
//#endif
|
||||
//((short*)sync_corr)[2*n] += ((short*) &result)[0];
|
||||
//((short*)sync_corr)[2*n+1] += ((short*) &result)[1];
|
||||
sync_corr_eNB[n] += abs32(result);
|
||||
|
||||
@@ -3714,10 +3714,10 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
}*/
|
||||
|
||||
if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) { //
|
||||
if (dlsch0_harq->round == 4) {
|
||||
// if ((dlsch0_harq->round == 4) || ( {
|
||||
dlsch0_harq->round = 0;
|
||||
dlsch0_harq->first_tx = 1;
|
||||
}
|
||||
// }
|
||||
|
||||
// if (dlsch0_harq->round == 0)
|
||||
// ndi = 1-dlsch0_harq->DCINdi;
|
||||
@@ -3731,8 +3731,15 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0_harq->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI;
|
||||
dlsch0_harq->dl_power_off = 1; //no power offset
|
||||
|
||||
//LOG_I(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,dlsch0_harq->DCINdi,
|
||||
//dlsch0_harq->first_tx,dlsch0_harq->status);
|
||||
LOG_D(PHY,"UE (%x/%d): Subframe %d Format1A DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d, round %d\n",
|
||||
dlsch[0]->rnti,
|
||||
harq_pid,
|
||||
subframe,
|
||||
ndi,
|
||||
dlsch0_harq->DCINdi,
|
||||
dlsch0_harq->first_tx,
|
||||
dlsch0_harq->status,
|
||||
dlsch0_harq->round);
|
||||
if ((ndi!=dlsch0_harq->DCINdi)|| // DCI has been toggled or this is the first transmission
|
||||
(dlsch0_harq->first_tx==1)) {
|
||||
dlsch0_harq->round = 0;
|
||||
@@ -3746,7 +3753,14 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0_harq->DCINdi = ndi;
|
||||
|
||||
dlsch0_harq->mcs = mcs;
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1];
|
||||
if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) {
|
||||
dlsch0_harq->TBS = TBStable[mcs][NPRB-1];
|
||||
dlsch0_harq->Qm = 2;
|
||||
}
|
||||
else {
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1];
|
||||
dlsch0_harq->Qm = get_Qm(mcs);
|
||||
}
|
||||
dlsch[0]->rnti = rnti;
|
||||
dlsch0 = dlsch[0];
|
||||
//printf("Format 1A: harq_pid %d, nb_rb %d, round %d\n",harq_pid,dlsch0_harq->nb_rb,dlsch0_harq->round);
|
||||
@@ -3898,6 +3912,12 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0_harq->mcs = mcs;
|
||||
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1];
|
||||
if (mcs <= 28)
|
||||
dlsch0_harq->Qm = get_Qm(mcs);
|
||||
else if (mcs<=31)
|
||||
dlsch0_harq->Qm = (mcs-28)<<1;
|
||||
else
|
||||
LOG_E(PHY,"invalid mcs %d\n",mcs);
|
||||
// msg("test: MCS %d, NPRB %d, TBS %d\n",mcs,NPRB,dlsch0_harq->TBS);
|
||||
dlsch[0]->current_harq_pid = harq_pid;
|
||||
|
||||
@@ -4238,9 +4258,17 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
|
||||
if (dlsch0_harq->nb_rb>1) {
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
if (mcs1 <= 28)
|
||||
dlsch0_harq->Qm = get_Qm(mcs1);
|
||||
else if (mcs1<=31)
|
||||
dlsch0_harq->Qm = (mcs1-28)<<1;
|
||||
else
|
||||
LOG_E(PHY,"invalid mcs1 %d\n",mcs1);
|
||||
|
||||
} else
|
||||
dlsch0_harq->TBS =0;
|
||||
|
||||
|
||||
/*
|
||||
if (dlsch0_harq->mcs > 18)
|
||||
printf("mcs %d, TBS %d\n",dlsch0_harq->mcs,dlsch0_harq->TBS);
|
||||
@@ -4256,9 +4284,16 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
|
||||
if (dlsch1_harq->nb_rb>1) {
|
||||
dlsch1_harq->TBS = TBStable[dlsch1_harq->mcs][dlsch1_harq->nb_rb-1];
|
||||
if (mcs2 <= 28)
|
||||
dlsch1_harq->Qm = get_Qm(mcs2);
|
||||
else if (mcs1<=31)
|
||||
dlsch1_harq->Qm = (mcs2-28)<<1;
|
||||
else
|
||||
LOG_E(PHY,"invalid mcs2 %d\n",mcs2);
|
||||
} else
|
||||
dlsch1_harq->TBS = 0;
|
||||
|
||||
|
||||
dlsch0->rnti = rnti;
|
||||
dlsch1->rnti = rnti;
|
||||
|
||||
@@ -4626,6 +4661,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
|
||||
|
||||
|
||||
if ((dlsch0->active==1) && (dlsch1->active==1)) {
|
||||
dlsch0_harq->mimo_mode = LARGE_CDD;
|
||||
dlsch1_harq->mimo_mode = LARGE_CDD;
|
||||
@@ -4644,7 +4681,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0_harq->dl_power_off = 0; //apply power offset
|
||||
dlsch1_harq->dl_power_off = 0; //apply power offset
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
|
||||
|
||||
break;
|
||||
|
||||
case 1: // one-layers on TB 0, two on TB 1
|
||||
@@ -4721,6 +4759,20 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
LOG_E(PHY,"Illegal number of antennas for eNB %d\n",frame_parms->nb_antennas_tx_eNB);
|
||||
}
|
||||
|
||||
if (mcs1 <= 28)
|
||||
dlsch0_harq->Qm = get_Qm(mcs1);
|
||||
else if (mcs1<=31)
|
||||
dlsch0_harq->Qm = (mcs1-28)<<1;
|
||||
else
|
||||
LOG_E(PHY,"invalid mcs1 %d\n",mcs1);
|
||||
|
||||
if (mcs2 <= 28)
|
||||
dlsch1_harq->Qm = get_Qm(mcs2);
|
||||
else if (mcs2<=31)
|
||||
dlsch1_harq->Qm = (mcs2-28)<<1;
|
||||
else
|
||||
LOG_E(PHY,"invalid mcs2 %d\n",mcs2);
|
||||
|
||||
// printf("Format 2A: NPRB=%d (rballoc %x,mcs1 %d, mcs2 %d, frame_type %d N_RB_DL %d,active %d/%d)\n",NPRB,rballoc,mcs1,mcs2,frame_parms->frame_type,frame_parms->N_RB_DL,dlsch0->active,dlsch1->active);
|
||||
//printf("UE (%x/%d): Subframe %d Format2A DCI: ndi1 %d, old_ndi1 %d, ndi2 %d, old_ndi2 %d (first tx1 %d, first tx2 %d) harq_status1 %d, harq_status2 %d\n",dlsch0->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi,
|
||||
// dlsch0_harq->first_tx,dlsch1_harq->first_tx,dlsch0_harq->status,dlsch1_harq->status);
|
||||
|
||||
@@ -515,6 +515,8 @@ typedef struct {
|
||||
uint8_t round;
|
||||
/// MCS format for this DLSCH
|
||||
uint8_t mcs;
|
||||
/// Qm (modulation order) for this DLSCH
|
||||
uint8_t Qm;
|
||||
/// Redundancy-version of the current sub-frame
|
||||
uint8_t rvidx;
|
||||
/// MIMO mode for this DLSCH
|
||||
|
||||
@@ -244,8 +244,6 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
*/
|
||||
A = harq_process->TBS; //2072 for QPSK 1/3
|
||||
|
||||
// mod_order = get_Qm(harq_process->mcs);
|
||||
|
||||
ret = dlsch->max_turbo_iterations;
|
||||
|
||||
|
||||
@@ -278,8 +276,33 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
err_flag = 0;
|
||||
r_offset = 0;
|
||||
|
||||
unsigned char bw_scaling =1;
|
||||
|
||||
switch (frame_parms->N_RB_DL) {
|
||||
case 6:
|
||||
bw_scaling =16;
|
||||
break;
|
||||
|
||||
case 25:
|
||||
bw_scaling =4;
|
||||
break;
|
||||
|
||||
case 50:
|
||||
bw_scaling =2;
|
||||
break;
|
||||
|
||||
default:
|
||||
bw_scaling =1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (harq_process->C >= MAX_NUM_DLSCH_SEGMENTS/bw_scaling) {
|
||||
LOG_E(PHY,"Illegal harq_process->C %d > %d\n",harq_process->C,MAX_NUM_DLSCH_SEGMENTS/bw_scaling);
|
||||
return((1+dlsch->max_turbo_iterations));
|
||||
}
|
||||
for (r=0; r<harq_process->C; r++) {
|
||||
|
||||
|
||||
// Get Turbo interleaver parameters
|
||||
if (r<harq_process->Cminus)
|
||||
Kr = harq_process->Kminus;
|
||||
@@ -316,7 +339,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
harq_pid,r, G,
|
||||
Kr*3,
|
||||
harq_process->TBS,
|
||||
get_Qm(harq_process->mcs),
|
||||
harq_process->Qm,
|
||||
harq_process->nb_rb,
|
||||
harq_process->Nl,
|
||||
harq_process->rvidx,
|
||||
@@ -335,7 +358,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
dlsch->Kmimo,
|
||||
harq_process->rvidx,
|
||||
(harq_process->round==0)?1:0,
|
||||
get_Qm(harq_process->mcs),
|
||||
harq_process->Qm,
|
||||
harq_process->Nl,
|
||||
r,
|
||||
&E)==-1) {
|
||||
|
||||
@@ -325,7 +325,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
frame_parms,
|
||||
symbol,
|
||||
first_symbol_flag,
|
||||
get_Qm(dlsch0_harq->mcs),
|
||||
dlsch0_harq->Qm,
|
||||
nb_rb,
|
||||
lte_ue_pdsch_vars[eNB_id]->log2_maxh,
|
||||
phy_measurements); // log2_maxh+I0_shift
|
||||
@@ -380,7 +380,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
avg, symbol, nb_rb);
|
||||
|
||||
// LOG_D(PHY,"llr_offset = %d\n",offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->mcs>>1)-1]);
|
||||
avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(get_Qm(dlsch1_harq->mcs)>>1)-1];
|
||||
avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->Qm>>1)-1];
|
||||
|
||||
lte_ue_pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
|
||||
// printf("log2_maxh =%d\n",lte_ue_pdsch_vars[eNB_id]->log2_maxh);
|
||||
@@ -391,8 +391,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
phy_measurements,
|
||||
eNB_id,
|
||||
symbol,
|
||||
get_Qm(dlsch0_harq->mcs),
|
||||
get_Qm(dlsch1_harq->mcs),
|
||||
dlsch0_harq->Qm,
|
||||
dlsch1_harq->Qm,
|
||||
dlsch0_harq->round,
|
||||
nb_rb,
|
||||
lte_ue_pdsch_vars[eNB_id]->log2_maxh);
|
||||
@@ -451,7 +451,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
phy_measurements,
|
||||
eNB_id,
|
||||
symbol,
|
||||
get_Qm(dlsch0_harq->mcs),
|
||||
dlsch0_harq->Qm,
|
||||
nb_rb,
|
||||
lte_ue_pdsch_vars[eNB_id]->log2_maxh,
|
||||
dlsch0_harq->dl_power_off);
|
||||
@@ -526,7 +526,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
phy_measurements,
|
||||
eNB_id,
|
||||
symbol,
|
||||
get_Qm(dlsch0_harq->mcs),
|
||||
dlsch0_harq->Qm,
|
||||
nb_rb,
|
||||
lte_ue_pdsch_vars[eNB_id]->log2_maxh,
|
||||
1);
|
||||
@@ -599,7 +599,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
|
||||
// printf("LLR");
|
||||
|
||||
switch (get_Qm(dlsch0_harq->mcs)) {
|
||||
switch (dlsch0_harq->Qm) {
|
||||
case 2 :
|
||||
if (dlsch0_harq->mimo_mode != LARGE_CDD) {
|
||||
if (dual_stream_flag == 0)
|
||||
@@ -643,7 +643,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
} else { // TM3
|
||||
DevAssert(dlsch1_harq);
|
||||
|
||||
if (get_Qm(dlsch1_harq->mcs) == 2) {
|
||||
if (dlsch1_harq->Qm == 2) {
|
||||
/* dlsch_qpsk_llr(frame_parms,
|
||||
lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
|
||||
lte_ue_pdsch_vars[eNB_id]->llr[0],
|
||||
@@ -667,7 +667,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
symbol,first_symbol_flag,nb_rb,
|
||||
adjust_G2(frame_parms,dlsch1_harq->rb_alloc,2,subframe,symbol),
|
||||
lte_ue_pdsch_vars[eNB_id]->llr128_2ndstream);
|
||||
} else if (get_Qm(dlsch1_harq->mcs) == 4) {
|
||||
} else if (dlsch1_harq->Qm == 4) {
|
||||
dlsch_qpsk_16qam_llr(frame_parms,
|
||||
lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0,
|
||||
lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round],
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
#include "common_lib.h"
|
||||
extern openair0_config_t openair0_cfg[];
|
||||
#endif
|
||||
//#define DEBUG_INITIAL_SYNCH
|
||||
#define DEBUG_INITIAL_SYNCH
|
||||
|
||||
int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
{
|
||||
@@ -292,6 +292,8 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
frame_parms->frame_type=FDD;
|
||||
init_frame_parms(frame_parms,1);
|
||||
|
||||
// write_output("rxdata0.m","rxd0",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
|
||||
#ifdef OAI_USRP
|
||||
for (aarx = 0; aarx<frame_parms->nb_antennas_rx;aarx++) {
|
||||
rxdata128 = (__m128i*)phy_vars_ue->lte_ue_common_vars.rxdata[aarx];
|
||||
@@ -304,6 +306,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
frame_parms,
|
||||
(int *)&phy_vars_ue->lte_ue_common_vars.eNb_id);
|
||||
|
||||
// write_output("rxdata1.m","rxd1",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
if (sync_pos >= frame_parms->nb_prefix_samples)
|
||||
sync_pos2 = sync_pos - frame_parms->nb_prefix_samples;
|
||||
else
|
||||
@@ -361,6 +364,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
|
||||
lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
|
||||
ret = pbch_detection(phy_vars_ue,mode);
|
||||
// write_output("rxdata2.m","rxd2",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
@@ -407,7 +411,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
init_frame_parms(&phy_vars_ue->lte_frame_parms,1);
|
||||
lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
|
||||
ret = pbch_detection(phy_vars_ue,mode);
|
||||
|
||||
// write_output("rxdata3.m","rxd3",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
|
||||
@@ -454,7 +458,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
|
||||
lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
|
||||
ret = pbch_detection(phy_vars_ue,mode);
|
||||
|
||||
// write_output("rxdata4.m","rxd4",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
@@ -501,6 +505,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell);
|
||||
ret = pbch_detection(phy_vars_ue,mode);
|
||||
|
||||
// write_output("rxdata5.m","rxd5",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret);
|
||||
@@ -590,6 +595,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
|
||||
}
|
||||
|
||||
// exit_fun("debug exit");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,23 +33,6 @@
|
||||
|
||||
#define SOFFSET 0
|
||||
|
||||
void rescale(int16_t *input,int length)
|
||||
{
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
__m128i *input128 = (__m128i *)input;
|
||||
#elif defined(__arm__)
|
||||
int16x8_t *input128 = (int16x8_t *)input;
|
||||
#endif
|
||||
int i;
|
||||
|
||||
for (i=0; i<length>>2; i++) {
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
input128[i] = _mm_srai_epi16(input128[i],4);
|
||||
#elif defined(__arm__)
|
||||
input128[i] = vshrq_n_s16(input128[i],4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
int slot_fep(PHY_VARS_UE *phy_vars_ue,
|
||||
unsigned char l,
|
||||
@@ -148,18 +131,11 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
|
||||
memcpy((void *)tmp_dft_in,
|
||||
(void *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples0) % frame_length_samples],
|
||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||
#ifdef OAI_USRP
|
||||
rescale((int16_t *)tmp_dft_in,
|
||||
frame_parms->ofdm_symbol_size);
|
||||
#endif
|
||||
dft((int16_t *)tmp_dft_in,
|
||||
(int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||
} else { // use dft input from RX buffer directly
|
||||
start_meas(&phy_vars_ue->rx_dft_stats);
|
||||
#ifdef OAI_USRP
|
||||
rescale((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples0) % frame_length_samples],
|
||||
frame_parms->ofdm_symbol_size+nb_prefix_samples0);
|
||||
#endif
|
||||
|
||||
dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||
(int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||
stop_meas(&phy_vars_ue->rx_dft_stats);
|
||||
@@ -186,17 +162,10 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
|
||||
memcpy((void *)tmp_dft_in,
|
||||
(void *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||
#ifdef OAI_USRP
|
||||
rescale((int16_t *)tmp_dft_in,
|
||||
frame_parms->ofdm_symbol_size);
|
||||
#endif
|
||||
dft((int16_t *)tmp_dft_in,
|
||||
(int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||
} else { // use dft input from RX buffer directly
|
||||
#ifdef OAI_USRP
|
||||
rescale((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples) % frame_length_samples],
|
||||
frame_parms->ofdm_symbol_size+nb_prefix_samples);
|
||||
#endif
|
||||
|
||||
dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||
(int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ typedef struct {
|
||||
int32_t freq_offset;
|
||||
uint32_t tx_rx_switch_point;
|
||||
uint32_t manual_timing_advance; /// 1 to override automatic timing advance
|
||||
uint32_t timing_advance;
|
||||
int32_t timing_advance;
|
||||
uint32_t dual_tx; /// 1 for dual-antenna TX, 0 for single-antenna TX
|
||||
uint32_t tdd; /// 1 for TDD mode, 0 for FDD mode
|
||||
uint32_t rx_rf_mode;
|
||||
|
||||
@@ -135,7 +135,7 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t
|
||||
coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
|
||||
get_Qm(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]->Qm,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
|
||||
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||
phy_vars_ue->frame_rx,subframe);
|
||||
@@ -164,7 +164,7 @@ void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
|
||||
coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc,
|
||||
get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs),
|
||||
2,
|
||||
1,
|
||||
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||
phy_vars_ue->frame_rx,subframe);
|
||||
@@ -265,7 +265,7 @@ void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe)
|
||||
coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc,
|
||||
get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs),
|
||||
2,
|
||||
1,
|
||||
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||
phy_vars_ue->frame_rx,subframe);
|
||||
@@ -985,7 +985,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm, amp %d\n",
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm, amp %d\n",
|
||||
Mod_id,harq_pid,frame_tx,subframe_tx,phy_vars_ue->tx_power_dBm, tx_amp);
|
||||
start_meas(&phy_vars_ue->ulsch_modulation_stats);
|
||||
ulsch_modulation(phy_vars_ue->lte_ue_common_vars.txdataF,
|
||||
@@ -1246,14 +1246,15 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
#else //this is the normal case
|
||||
ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-phy_vars_ue->N_TA_offset; //-phy_vars_ue->timing_advance;
|
||||
#endif //else EXMIMO
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
|
||||
Mod_id,frame_tx,subframe_tx,
|
||||
ulsch_start,
|
||||
phy_vars_ue->rx_offset,
|
||||
openair_daq_vars.timing_advance,
|
||||
phy_vars_ue->timing_advance,
|
||||
phy_vars_ue->N_TA_offset);
|
||||
|
||||
if ((frame_tx%100) == 0)
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
|
||||
Mod_id,frame_tx,subframe_tx,
|
||||
ulsch_start,
|
||||
phy_vars_ue->rx_offset,
|
||||
openair_daq_vars.timing_advance,
|
||||
phy_vars_ue->timing_advance,
|
||||
phy_vars_ue->N_TA_offset);
|
||||
|
||||
|
||||
if (generate_ul_signal == 1 ) {
|
||||
|
||||
@@ -1379,7 +1380,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
#endif
|
||||
|
||||
if (abstraction_flag == 0) {
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n",
|
||||
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n",
|
||||
Mod_id,
|
||||
frame_tx,
|
||||
subframe_tx,
|
||||
@@ -1410,7 +1411,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
|
||||
phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = AMP;
|
||||
#endif
|
||||
if ((mode == calib_prach_tx) && (((phy_vars_ue->frame_tx&0xfffe)%100)==0))
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_tx>>1,phy_vars_ue->tx_power_dBm,
|
||||
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_tx>>1,phy_vars_ue->tx_power_dBm,
|
||||
phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp);
|
||||
|
||||
|
||||
@@ -2473,15 +2474,16 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
}
|
||||
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",phy_vars_ue->Mod_id,subframe_rx,slot_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active);
|
||||
|
||||
// This is normal processing (i.e. not MBSFN)
|
||||
// RX processing of symbols in slot_rx
|
||||
|
||||
|
||||
|
||||
for (l=0; l<n_symb; l++) {
|
||||
if (abstraction_flag == 0) {
|
||||
start_meas(&phy_vars_ue->ofdm_demod_stats);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
|
||||
|
||||
slot_fep(phy_vars_ue,
|
||||
l,
|
||||
slot_rx,
|
||||
@@ -2576,7 +2578,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
(openair_daq_vars.use_ia_receiver ==1)) {
|
||||
dual_stream_UE = 1;
|
||||
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 = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
|
||||
|
||||
if (frame_rx%100==0) {
|
||||
LOG_I(PHY,"using IA receiver\n");
|
||||
@@ -2624,7 +2626,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G = get_G(&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
|
||||
get_Qm(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]->Qm,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
|
||||
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||
frame_rx,subframe_prev);
|
||||
@@ -2782,7 +2784,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
get_G(&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc,
|
||||
get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs),1,
|
||||
2,
|
||||
1,
|
||||
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||
frame_rx,subframe_prev);
|
||||
|
||||
@@ -2835,7 +2838,17 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
if (ret == (1+phy_vars_ue->dlsch_ue_SI[eNB_id]->max_turbo_iterations)) {
|
||||
phy_vars_ue->dlsch_SI_errors[eNB_id]++;
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI in error\n",phy_vars_ue->Mod_id,frame_rx,subframe_prev);
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI in error (TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
|
||||
phy_vars_ue->Mod_id,
|
||||
frame_rx,
|
||||
subframe_prev,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[0],
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[1],
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[2],
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[3]);
|
||||
#endif
|
||||
|
||||
//dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev);
|
||||
@@ -2847,9 +2860,15 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
//if ((frame_rx % 100) == 0)
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI for TBS %d, mcs %d\n",
|
||||
phy_vars_ue->Mod_id,frame_rx,subframe_prev,phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs);
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI for TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n",
|
||||
phy_vars_ue->Mod_id,frame_rx,subframe_prev,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx,
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[0],
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[1],
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[2],
|
||||
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[3]);
|
||||
#endif
|
||||
|
||||
#ifdef OPENAIR2
|
||||
@@ -2923,10 +2942,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
|
||||
if (abstraction_flag==0) {
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc,
|
||||
get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs),1,
|
||||
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc,
|
||||
2,
|
||||
1,
|
||||
phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||
frame_rx,
|
||||
subframe_prev);
|
||||
|
||||
@@ -2950,7 +2970,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id],
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0],
|
||||
subframe_prev, // subframe
|
||||
harq_pid,
|
||||
phy_vars_ue->dlsch_ue_ra[eNB_id]->current_harq_pid,
|
||||
0,0);
|
||||
}
|
||||
|
||||
@@ -3104,7 +3124,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
(openair_daq_vars.use_ia_receiver ==1)) {
|
||||
dual_stream_UE = 1;
|
||||
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 = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
|
||||
} else {
|
||||
dual_stream_UE = 0;
|
||||
eNB_id_i = eNB_id+1;
|
||||
@@ -3173,7 +3193,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
(openair_daq_vars.use_ia_receiver ==1)) {
|
||||
dual_stream_UE = 1;
|
||||
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 = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm;
|
||||
} else {
|
||||
dual_stream_UE = 0;
|
||||
eNB_id_i = eNB_id+1;
|
||||
@@ -3301,7 +3321,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
|
||||
phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms,
|
||||
phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->rb_alloc,
|
||||
get_Qm(phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->mcs),
|
||||
phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->Qm,
|
||||
1,
|
||||
2,
|
||||
(subframe_rx==9?-1:0)+frame_rx,subframe_rx);
|
||||
|
||||
@@ -163,7 +163,7 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u
|
||||
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH += (mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0) + PL);
|
||||
|
||||
LOG_I(PHY,"[UE %d][RAPROC] frame %d, subframe %d: Msg3 Po_PUSCH %d dBm (%d,%d,100*PL=%d,%d,%d)\n",
|
||||
LOG_D(PHY,"[UE %d][RAPROC] frame %d, subframe %d: Msg3 Po_PUSCH %d dBm (%d,%d,100*PL=%d,%d,%d)\n",
|
||||
phy_vars_ue->Mod_id,phy_vars_ue->frame_tx,subframe,phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH,
|
||||
100*mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0),
|
||||
hundred_times_log10_NPRB[nb_rb-1],
|
||||
@@ -182,7 +182,7 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u
|
||||
else if (phy_vars_ue->ulsch_ue[eNB_id]->PHR > 40)
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->PHR = 40;
|
||||
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d] frame %d, subframe %d: Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n",
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] frame %d, subframe %d: Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n",
|
||||
phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_tx,subframe,
|
||||
phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH,
|
||||
phy_vars_ue->tx_power_max_dBm,
|
||||
|
||||
@@ -244,7 +244,7 @@ void Msg3_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id
|
||||
}
|
||||
|
||||
// start contention resolution timer
|
||||
LOG_I(MAC,"[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n",module_idP,frameP);
|
||||
LOG_D(MAC,"[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n",module_idP,frameP);
|
||||
UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0;
|
||||
UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
|
||||
#if defined(USER_MODE) && defined(OAI_EMU)
|
||||
@@ -448,9 +448,45 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP,
|
||||
UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER++;
|
||||
UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER +=
|
||||
(rach_ConfigCommon->powerRampingParameters.powerRampingStep<<1); // 2dB increments in ASN.1 definition
|
||||
int preambleTransMax;
|
||||
switch (rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax) {
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n3:
|
||||
preambleTransMax = 3;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n4:
|
||||
preambleTransMax = 4;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n5:
|
||||
preambleTransMax = 5;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n6:
|
||||
preambleTransMax = 6;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n7:
|
||||
preambleTransMax = 7;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n8:
|
||||
preambleTransMax = 8;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n10:
|
||||
preambleTransMax = 10;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n20:
|
||||
preambleTransMax = 20;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n50:
|
||||
preambleTransMax = 50;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n100:
|
||||
preambleTransMax = 100;
|
||||
break;
|
||||
case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n200:
|
||||
preambleTransMax = 200;
|
||||
break;
|
||||
}
|
||||
|
||||
if (UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER == rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax) {
|
||||
LOG_D(MAC,"[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n",module_idP,frameP,rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax);
|
||||
if (UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER == preambleTransMax) {
|
||||
LOG_D(MAC,"[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n",module_idP,frameP,preambleTransMax);
|
||||
// send message to RRC
|
||||
UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER=1;
|
||||
UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER = get_Po_NOMINAL_PUSCH(module_idP,CC_id);
|
||||
|
||||
@@ -1435,7 +1435,7 @@ void ue_get_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subf
|
||||
bsr_l,
|
||||
post_padding); // long_bsr
|
||||
|
||||
LOG_I(MAC,
|
||||
LOG_D(MAC,
|
||||
"[UE %d] Generate header :bufflen %d sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d, dcch_header_len %d, dtch_header_len %d, padding %d,post_padding %d, bsr len %d, phr len %d, reminder %d \n",
|
||||
module_idP,buflen, sdu_length_total,num_sdus,sdu_lengths[0],sdu_lcids[0],payload_offset, dcch_header_len, dtch_header_len,
|
||||
short_padding,post_padding, bsr_len, phr_len,buflen-sdu_length_total-payload_offset);
|
||||
|
||||
@@ -362,7 +362,7 @@ mac_rrc_lite_data_ind(
|
||||
|
||||
if(eNB_flagP == ENB_FLAG_NO) {
|
||||
if(srb_idP == BCCH) {
|
||||
LOG_T(RRC,"[UE %d] Received SDU for BCCH on SRB %d from eNB %d\n",module_idP,srb_idP,eNB_indexP);
|
||||
LOG_D(RRC,"[UE %d] Received SDU for BCCH on SRB %d from eNB %d\n",module_idP,srb_idP,eNB_indexP);
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
{
|
||||
|
||||
@@ -189,9 +189,9 @@ typedef enum HO_STATE_e {
|
||||
|
||||
typedef struct UE_RRC_INFO_s {
|
||||
UE_STATE_t State;
|
||||
uint8_t SIB1Status;
|
||||
uint8_t SIB1systemInfoValueTag;
|
||||
uint8_t SIStatus;
|
||||
uint32_t SIStatus;
|
||||
uint32_t SIcnt;
|
||||
#ifdef Rel10
|
||||
uint8_t MCCHStatus[8]; // MAX_MBSFN_AREA
|
||||
#endif
|
||||
|
||||
+211
-143
@@ -255,8 +255,8 @@ static void init_SI_UE( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_
|
||||
|
||||
UE_rrc_inst[ctxt_pP->module_id].si[eNB_index] = (SystemInformation_t*)malloc16_clear( sizeof(SystemInformation_t) );
|
||||
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status = 0;
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 0;
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt = 0;
|
||||
}
|
||||
|
||||
#ifdef Rel10
|
||||
@@ -2332,12 +2332,15 @@ int decode_BCCH_DLSCH_Message(
|
||||
const uint8_t rsrp )
|
||||
{
|
||||
BCCH_DL_SCH_Message_t *bcch_message = NULL;
|
||||
SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
|
||||
int i;
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN );
|
||||
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 1) &&
|
||||
(UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus == 1)) {
|
||||
// Avoid decoding to prevent memory bloating
|
||||
if (((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 1) && // SIB1 received
|
||||
(UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt == sib1->schedulingInfoList.list.count)) {
|
||||
// Avoid decoding SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
|
||||
// to prevent memory bloating
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT );
|
||||
return 0;
|
||||
}
|
||||
@@ -2354,6 +2357,9 @@ int decode_BCCH_DLSCH_Message(
|
||||
LOG_E( RRC, "[UE %"PRIu8"] Failed to decode BCCH_DLSCH_MESSAGE (%zu bits)\n",
|
||||
ctxt_pP->module_id,
|
||||
dec_rval.consumed );
|
||||
for (i=0;i<Sdu_len;i++)
|
||||
printf("%02x ",Sdu[i]);
|
||||
printf("\n");
|
||||
// free the memory
|
||||
SEQUENCE_free( &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message, 1 );
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT );
|
||||
@@ -2393,7 +2399,7 @@ int decode_BCCH_DLSCH_Message(
|
||||
case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1:
|
||||
if ((ctxt_pP->frame % 2) == 0) {
|
||||
// even frame
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 0) {
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 0) {
|
||||
SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
|
||||
memcpy( (void*)sib1,
|
||||
(void*)&bcch_message->message.choice.c1.choice.systemInformationBlockType1,
|
||||
@@ -2406,7 +2412,7 @@ int decode_BCCH_DLSCH_Message(
|
||||
break;
|
||||
|
||||
case BCCH_DL_SCH_MessageType__c1_PR_systemInformation:
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 1) {
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 1) {
|
||||
// SIB1 with schedulingInfoList is available
|
||||
|
||||
SystemInformation_t* si = UE_rrc_inst[ctxt_pP->module_id].si[eNB_index];
|
||||
@@ -2599,7 +2605,7 @@ static int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_
|
||||
#endif
|
||||
);
|
||||
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status = 1;
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1systemInfoValueTag = sib1->systemInfoValueTag;
|
||||
|
||||
#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
|
||||
@@ -3000,6 +3006,8 @@ static int decode_SI( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_in
|
||||
{
|
||||
|
||||
SystemInformation_t** si = &UE_rrc_inst[ctxt_pP->module_id].si[eNB_index];
|
||||
int new_sib = 0;
|
||||
SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index];
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI, VCD_FUNCTION_IN );
|
||||
|
||||
@@ -3019,181 +3027,241 @@ static int decode_SI( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_in
|
||||
|
||||
switch(typeandinfo->present) {
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index], &typeandinfo->choice.sib2, sizeof(SystemInformationBlockType2_t) );
|
||||
LOG_D( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB2 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
dump_sib2( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index] );
|
||||
LOG_D( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB2 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
|
||||
ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id );
|
||||
rrc_mac_config_req(ctxt_pP->module_id, 0, ENB_FLAG_NO, 0, eNB_index,
|
||||
&UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->radioResourceConfigCommon,
|
||||
(struct PhysicalConfigDedicated *)NULL,
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&2) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=2;
|
||||
new_sib=1;
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index], &typeandinfo->choice.sib2, sizeof(SystemInformationBlockType2_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB2 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
dump_sib2( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index] );
|
||||
LOG_I( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB2 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
|
||||
ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id );
|
||||
rrc_mac_config_req(ctxt_pP->module_id, 0, ENB_FLAG_NO, 0, eNB_index,
|
||||
&UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->radioResourceConfigCommon,
|
||||
(struct PhysicalConfigDedicated *)NULL,
|
||||
#ifdef Rel10
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
#endif
|
||||
(MeasObjectToAddMod_t **)NULL,
|
||||
(MAC_MainConfig_t *)NULL,
|
||||
0,
|
||||
(struct LogicalChannelConfig *)NULL,
|
||||
(MeasGapConfig_t *)NULL,
|
||||
(TDD_Config_t *)NULL,
|
||||
(MobilityControlInfo_t *)NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_CarrierFreq,
|
||||
UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_Bandwidth,
|
||||
&UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.additionalSpectrumEmission,
|
||||
UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->mbsfn_SubframeConfigList
|
||||
(MeasObjectToAddMod_t **)NULL,
|
||||
(MAC_MainConfig_t *)NULL,
|
||||
0,
|
||||
(struct LogicalChannelConfig *)NULL,
|
||||
(MeasGapConfig_t *)NULL,
|
||||
(TDD_Config_t *)NULL,
|
||||
(MobilityControlInfo_t *)NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_CarrierFreq,
|
||||
UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_Bandwidth,
|
||||
&UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.additionalSpectrumEmission,
|
||||
UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->mbsfn_SubframeConfigList
|
||||
#ifdef Rel10
|
||||
,0,
|
||||
(MBSFN_AreaInfoList_r9_t *)NULL,
|
||||
(PMCH_InfoList_r9_t *)NULL
|
||||
,0,
|
||||
(MBSFN_AreaInfoList_r9_t *)NULL,
|
||||
(PMCH_InfoList_r9_t *)NULL
|
||||
#endif
|
||||
#ifdef CBA
|
||||
,0,
|
||||
0
|
||||
,0,
|
||||
0
|
||||
#endif
|
||||
);
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
|
||||
// After SI is received, prepare RRCConnectionRequest
|
||||
);
|
||||
// After SI is received, prepare RRCConnectionRequest
|
||||
#ifdef Rel10
|
||||
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option
|
||||
#endif
|
||||
#if !(defined(ENABLE_ITTI) && defined(ENABLE_USE_MME))
|
||||
rrc_ue_generate_RRCConnectionRequest( ctxt_pP, eNB_index );
|
||||
|
||||
LOG_I( RRC, "not sending connection request\n" );
|
||||
rrc_ue_generate_RRCConnectionRequest( ctxt_pP, eNB_index );
|
||||
|
||||
LOG_I( RRC, "not sending connection request\n" );
|
||||
#endif
|
||||
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State == RRC_IDLE) {
|
||||
LOG_I( RRC, "[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n", ctxt_pP->module_id );
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State = RRC_SI_RECEIVED;
|
||||
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State == RRC_IDLE) {
|
||||
LOG_I( RRC, "[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n", ctxt_pP->module_id );
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State = RRC_SI_RECEIVED;
|
||||
#ifdef ENABLE_RAL
|
||||
{
|
||||
MessageDef *message_ral_p = NULL;
|
||||
rrc_ral_system_information_ind_t ral_si_ind;
|
||||
|
||||
message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_SYSTEM_INFORMATION_IND);
|
||||
memset(&ral_si_ind, 0, sizeof(rrc_ral_system_information_ind_t));
|
||||
ral_si_ind.plmn_id.MCCdigit2 = '0';
|
||||
ral_si_ind.plmn_id.MCCdigit1 = '2';
|
||||
ral_si_ind.plmn_id.MNCdigit3 = '0';
|
||||
ral_si_ind.plmn_id.MCCdigit3 = '8';
|
||||
ral_si_ind.plmn_id.MNCdigit2 = '9';
|
||||
ral_si_ind.plmn_id.MNCdigit1 = '9';
|
||||
ral_si_ind.cell_id = 1;
|
||||
ral_si_ind.dbm = 0;
|
||||
//ral_si_ind.dbm = fifo_dump_emos_UE.PHY_measurements->rx_rssi_dBm[eNB_index];
|
||||
// TO DO
|
||||
ral_si_ind.sinr = 0;
|
||||
//ral_si_ind.sinr = fifo_dump_emos_UE.PHY_measurements->subband_cqi_dB[eNB_index][phy_vars_ue->lte_frame_parms.nb_antennas_rx][0];
|
||||
// TO DO
|
||||
ral_si_ind.link_data_rate = 0;
|
||||
memcpy (&message_ral_p->ittiMsg, (void *) &ral_si_ind, sizeof(rrc_ral_system_information_ind_t));
|
||||
{
|
||||
MessageDef *message_ral_p = NULL;
|
||||
rrc_ral_system_information_ind_t ral_si_ind;
|
||||
|
||||
message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_SYSTEM_INFORMATION_IND);
|
||||
memset(&ral_si_ind, 0, sizeof(rrc_ral_system_information_ind_t));
|
||||
ral_si_ind.plmn_id.MCCdigit2 = '0';
|
||||
ral_si_ind.plmn_id.MCCdigit1 = '2';
|
||||
ral_si_ind.plmn_id.MNCdigit3 = '0';
|
||||
ral_si_ind.plmn_id.MCCdigit3 = '8';
|
||||
ral_si_ind.plmn_id.MNCdigit2 = '9';
|
||||
ral_si_ind.plmn_id.MNCdigit1 = '9';
|
||||
ral_si_ind.cell_id = 1;
|
||||
ral_si_ind.dbm = 0;
|
||||
//ral_si_ind.dbm = fifo_dump_emos_UE.PHY_measurements->rx_rssi_dBm[eNB_index];
|
||||
// TO DO
|
||||
ral_si_ind.sinr = 0;
|
||||
//ral_si_ind.sinr = fifo_dump_emos_UE.PHY_measurements->subband_cqi_dB[eNB_index][phy_vars_ue->lte_frame_parms.nb_antennas_rx][0];
|
||||
// TO DO
|
||||
ral_si_ind.link_data_rate = 0;
|
||||
memcpy (&message_ral_p->ittiMsg, (void *) &ral_si_ind, sizeof(rrc_ral_system_information_ind_t));
|
||||
#warning "ue_mod_idP ? for instance ?"
|
||||
itti_send_msg_to_task (TASK_RAL_UE, UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id), message_ral_p);
|
||||
}
|
||||
itti_send_msg_to_task (TASK_RAL_UE, UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id), message_ral_p);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
break; // case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index], &typeandinfo->choice.sib3, sizeof(SystemInformationBlockType3_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB3 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
dump_sib3( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index] );
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
|
||||
rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&4) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=4;
|
||||
new_sib=1;
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index], &typeandinfo->choice.sib3, sizeof(SystemInformationBlockType3_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB3 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
dump_sib3( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index] );
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib4[eNB_index], &typeandinfo->choice.sib4, sizeof(SystemInformationBlockType4_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB4 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&8) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=8;
|
||||
new_sib=1;
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib4[eNB_index], &typeandinfo->choice.sib4, sizeof(SystemInformationBlockType4_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB4 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index], &typeandinfo->choice.sib5, sizeof(SystemInformationBlockType5_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB5 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&16) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=16;
|
||||
new_sib=1;
|
||||
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index], &typeandinfo->choice.sib5, sizeof(SystemInformationBlockType5_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB5 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib6:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib6[eNB_index], &typeandinfo->choice.sib6, sizeof(SystemInformationBlockType6_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB6 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&32) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=32;
|
||||
new_sib=1;
|
||||
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib6[eNB_index], &typeandinfo->choice.sib6, sizeof(SystemInformationBlockType6_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB6 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib7:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib7[eNB_index], &typeandinfo->choice.sib7, sizeof(SystemInformationBlockType7_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB7 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&64) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=64;
|
||||
new_sib=1;
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib7[eNB_index], &typeandinfo->choice.sib7, sizeof(SystemInformationBlockType7_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB7 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib8:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib8[eNB_index], &typeandinfo->choice.sib8, sizeof(SystemInformationBlockType8_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB8 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&128) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=128;
|
||||
new_sib=1;
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib8[eNB_index], &typeandinfo->choice.sib8, sizeof(SystemInformationBlockType8_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB8 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib9:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib9[eNB_index], &typeandinfo->choice.sib9, sizeof(SystemInformationBlockType9_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB9 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&256) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=256;
|
||||
new_sib=1;
|
||||
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib9[eNB_index], &typeandinfo->choice.sib9, sizeof(SystemInformationBlockType9_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB9 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib10:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib10[eNB_index], &typeandinfo->choice.sib10, sizeof(SystemInformationBlockType10_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB10 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&512) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=512;
|
||||
new_sib=1;
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib10[eNB_index], &typeandinfo->choice.sib10, sizeof(SystemInformationBlockType10_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB10 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib11:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib11[eNB_index], &typeandinfo->choice.sib11, sizeof(SystemInformationBlockType11_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB11 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1024) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=1024;
|
||||
new_sib=1;
|
||||
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib11[eNB_index], &typeandinfo->choice.sib11, sizeof(SystemInformationBlockType11_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB11 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef Rel10
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib12[eNB_index], &typeandinfo->choice.sib12_v920, sizeof(SystemInformationBlockType12_r9_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB12 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&2048) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=2048;
|
||||
new_sib=1;
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib12[eNB_index], &typeandinfo->choice.sib12_v920, sizeof(SystemInformationBlockType12_r9_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB12 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920:
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index], &typeandinfo->choice.sib13_v920, sizeof(SystemInformationBlockType13_r9_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB13 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
dump_sib13( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index] );
|
||||
// adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer
|
||||
LOG_D( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB13 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
|
||||
ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id);
|
||||
rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index,
|
||||
(RadioResourceConfigCommonSIB_t *)NULL,
|
||||
(struct PhysicalConfigDedicated *)NULL,
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
(MeasObjectToAddMod_t **)NULL,
|
||||
(MAC_MainConfig_t *)NULL,
|
||||
0,
|
||||
(struct LogicalChannelConfig *)NULL,
|
||||
(MeasGapConfig_t *)NULL,
|
||||
(TDD_Config_t *)NULL,
|
||||
(MobilityControlInfo_t *)NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(MBSFN_SubframeConfigList_t *)NULL,
|
||||
0,
|
||||
&UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9,
|
||||
(PMCH_InfoList_r9_t *)NULL
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&4096) == 0) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=4096;
|
||||
new_sib=1;
|
||||
|
||||
memcpy( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index], &typeandinfo->choice.sib13_v920, sizeof(SystemInformationBlockType13_r9_t) );
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB13 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index );
|
||||
dump_sib13( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index] );
|
||||
// adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer
|
||||
LOG_D( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB13 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n",
|
||||
ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id);
|
||||
rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index,
|
||||
(RadioResourceConfigCommonSIB_t *)NULL,
|
||||
(struct PhysicalConfigDedicated *)NULL,
|
||||
(SCellToAddMod_r10_t *)NULL,
|
||||
(MeasObjectToAddMod_t **)NULL,
|
||||
(MAC_MainConfig_t *)NULL,
|
||||
0,
|
||||
(struct LogicalChannelConfig *)NULL,
|
||||
(MeasGapConfig_t *)NULL,
|
||||
(TDD_Config_t *)NULL,
|
||||
(MobilityControlInfo_t *)NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(MBSFN_SubframeConfigList_t *)NULL,
|
||||
0,
|
||||
&UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9,
|
||||
(PMCH_InfoList_r9_t *)NULL
|
||||
#ifdef CBA
|
||||
,0,
|
||||
0
|
||||
,0,
|
||||
0
|
||||
#endif
|
||||
);
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
|
||||
break;
|
||||
);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (new_sib == 1) {
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt++;
|
||||
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt == sib1->schedulingInfoList.list.count)
|
||||
rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE );
|
||||
|
||||
LOG_I(RRC,"SIStatus %x, SIcnt %d/%d\n",
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus,
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt,
|
||||
sib1->schedulingInfoList.list.count);
|
||||
}
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI , VCD_FUNCTION_OUT);
|
||||
return 0;
|
||||
@@ -3705,7 +3773,7 @@ void *rrc_ue_task( void *args_p )
|
||||
break;
|
||||
|
||||
case MESSAGE_TEST:
|
||||
LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
|
||||
LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
|
||||
break;
|
||||
|
||||
/* MAC messages */
|
||||
@@ -3722,7 +3790,7 @@ void *rrc_ue_task( void *args_p )
|
||||
break;
|
||||
|
||||
case RRC_MAC_OUT_OF_SYNC_IND:
|
||||
LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name,
|
||||
LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name,
|
||||
RRC_MAC_OUT_OF_SYNC_IND (msg_p).frame, RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index);
|
||||
|
||||
UE_rrc_inst[ue_mod_id].Info[RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index].N310_cnt ++;
|
||||
@@ -3743,7 +3811,7 @@ void *rrc_ue_task( void *args_p )
|
||||
break;
|
||||
|
||||
case RRC_MAC_CCCH_DATA_CNF:
|
||||
LOG_I(RRC, "[UE %d] Received %s: eNB %d\n", ue_mod_id, msg_name,
|
||||
LOG_D(RRC, "[UE %d] Received %s: eNB %d\n", ue_mod_id, msg_name,
|
||||
RRC_MAC_CCCH_DATA_CNF (msg_p).enb_index);
|
||||
|
||||
// reset the tx buffer to indicate RRC that ccch was successfully transmitted (for example if contention resolution succeeds)
|
||||
@@ -3751,7 +3819,7 @@ void *rrc_ue_task( void *args_p )
|
||||
break;
|
||||
|
||||
case RRC_MAC_CCCH_DATA_IND:
|
||||
LOG_I(RRC, "[UE %d] RNTI %x Received %s: frameP %d, eNB %d\n",
|
||||
LOG_D(RRC, "[UE %d] RNTI %x Received %s: frameP %d, eNB %d\n",
|
||||
ue_mod_id,
|
||||
RRC_MAC_CCCH_DATA_IND (msg_p).rnti,
|
||||
msg_name,
|
||||
@@ -3773,7 +3841,7 @@ void *rrc_ue_task( void *args_p )
|
||||
# ifdef Rel10
|
||||
|
||||
case RRC_MAC_MCCH_DATA_IND:
|
||||
LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", ue_mod_id, msg_name,
|
||||
LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", ue_mod_id, msg_name,
|
||||
RRC_MAC_MCCH_DATA_IND (msg_p).frame, RRC_MAC_MCCH_DATA_IND (msg_p).enb_index, RRC_MAC_MCCH_DATA_IND (msg_p).mbsfn_sync_area);
|
||||
|
||||
//PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_NO, M_RNTI, RRC_MAC_MCCH_DATA_IND (msg_p).frame, 0);
|
||||
@@ -3790,14 +3858,14 @@ void *rrc_ue_task( void *args_p )
|
||||
/* PDCP messages */
|
||||
case RRC_DCCH_DATA_IND:
|
||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, RRC_DCCH_DATA_IND (msg_p).module_id, ENB_FLAG_NO, RRC_DCCH_DATA_IND (msg_p).rnti, RRC_DCCH_DATA_IND (msg_p).frame, 0,RRC_DCCH_DATA_IND (msg_p).eNB_index);
|
||||
LOG_I(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n",
|
||||
LOG_D(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n",
|
||||
RRC_DCCH_DATA_IND (msg_p).module_id,
|
||||
msg_name,
|
||||
RRC_DCCH_DATA_IND (msg_p).frame,
|
||||
RRC_DCCH_DATA_IND (msg_p).dcch_index,
|
||||
RRC_DCCH_DATA_IND (msg_p).eNB_index);
|
||||
|
||||
LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT"Received %s DCCH %d, eNB %d\n",
|
||||
LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT"Received %s DCCH %d, eNB %d\n",
|
||||
PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt),
|
||||
msg_name,
|
||||
RRC_DCCH_DATA_IND (msg_p).dcch_index,
|
||||
@@ -3818,7 +3886,7 @@ void *rrc_ue_task( void *args_p )
|
||||
case NAS_CELL_SELECTION_REQ:
|
||||
ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */
|
||||
|
||||
LOG_I(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id),
|
||||
LOG_D(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id),
|
||||
NAS_CELL_SELECTION_REQ (msg_p).plmnID, NAS_CELL_SELECTION_REQ (msg_p).rat);
|
||||
|
||||
if (rrc_get_state(ue_mod_id) == RRC_STATE_INACTIVE) {
|
||||
@@ -3830,7 +3898,7 @@ void *rrc_ue_task( void *args_p )
|
||||
{
|
||||
UE_rrc_inst[ue_mod_id].plmnID = NAS_CELL_SELECTION_REQ (msg_p).plmnID;
|
||||
UE_rrc_inst[ue_mod_id].rat = NAS_CELL_SELECTION_REQ (msg_p).rat;
|
||||
LOG_I(RRC, "[UE %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n",
|
||||
LOG_D(RRC, "[UE %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n",
|
||||
ue_mod_id,
|
||||
UE_rrc_inst[ue_mod_id].plmnID.MCCdigit1,
|
||||
UE_rrc_inst[ue_mod_id].plmnID.MCCdigit2,
|
||||
@@ -3882,7 +3950,7 @@ void *rrc_ue_task( void *args_p )
|
||||
break;
|
||||
|
||||
case NAS_CONN_ESTABLI_REQ:
|
||||
LOG_I(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", ue_mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause,
|
||||
LOG_D(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", ue_mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause,
|
||||
NAS_CONN_ESTABLI_REQ (msg_p).type, NAS_CONN_ESTABLI_REQ (msg_p).s_tmsi, NAS_CONN_ESTABLI_REQ (msg_p).plmnID);
|
||||
|
||||
//PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_NO, NOT_A_RNTI, 0, 0);
|
||||
@@ -3894,7 +3962,7 @@ void *rrc_ue_task( void *args_p )
|
||||
case RRC_STATE_IDLE: {
|
||||
if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) {
|
||||
rrc_ue_generate_RRCConnectionRequest(&ctxt, 0);
|
||||
LOG_I(RRC, "not sending connection request\n");
|
||||
LOG_D(RRC, "not sending connection request\n");
|
||||
|
||||
rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING);
|
||||
}
|
||||
@@ -3919,7 +3987,7 @@ void *rrc_ue_task( void *args_p )
|
||||
uint32_t length;
|
||||
uint8_t *buffer;
|
||||
|
||||
LOG_I(RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid);
|
||||
LOG_D(RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid);
|
||||
|
||||
/* Create message for PDCP (ULInformationTransfer_t) */
|
||||
length = do_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.data);
|
||||
@@ -3940,7 +4008,7 @@ void *rrc_ue_task( void *args_p )
|
||||
# if defined(ENABLE_RAL)
|
||||
|
||||
case RRC_RAL_SCAN_REQ:
|
||||
LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name);
|
||||
LOG_D(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name);
|
||||
|
||||
switch (rrc_get_state(ue_mod_id)) {
|
||||
case RRC_STATE_INACTIVE: {
|
||||
@@ -3987,7 +4055,7 @@ void *rrc_ue_task( void *args_p )
|
||||
break;
|
||||
|
||||
case PHY_FIND_CELL_IND:
|
||||
LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id));
|
||||
LOG_D(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id));
|
||||
|
||||
switch (rrc_get_state(ue_mod_id)) {
|
||||
case RRC_STATE_IDLE:
|
||||
@@ -4051,7 +4119,7 @@ void *rrc_ue_task( void *args_p )
|
||||
&PHY_MEAS_REPORT_IND(msg_p).link_param,
|
||||
sizeof(RRC_RAL_MEASUREMENT_REPORT_IND (message_p).link_param));
|
||||
|
||||
LOG_I(RRC, "[UE %d] PHY_MEAS_REPORT_IN: sending msg %s to %s \n", ue_mod_id, "RRC_RAL_MEASUREMENT_REPORT_IND", "TASK_RAL_UE");
|
||||
LOG_D(RRC, "[UE %d] PHY_MEAS_REPORT_IN: sending msg %s to %s \n", ue_mod_id, "RRC_RAL_MEASUREMENT_REPORT_IND", "TASK_RAL_UE");
|
||||
itti_send_msg_to_task(TASK_RAL_UE, instance, message_p);
|
||||
break;
|
||||
}
|
||||
@@ -4061,14 +4129,14 @@ void *rrc_ue_task( void *args_p )
|
||||
break;
|
||||
|
||||
case RRC_RAL_CONNECTION_ESTABLISHMENT_REQ:
|
||||
LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
|
||||
LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
|
||||
|
||||
switch (rrc_get_state(ue_mod_id)) {
|
||||
case RRC_STATE_IDLE: {
|
||||
if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) {
|
||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, ENB_FLAG_NO, UE_rrc_inst[ue_mod_id].Info[0].rnti, 0, 0, 0);
|
||||
rrc_ue_generate_RRCConnectionRequest(&ctxt, 0);
|
||||
LOG_I(RRC, "not sending connection request\n");
|
||||
LOG_D(RRC, "not sending connection request\n");
|
||||
rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING);
|
||||
}
|
||||
|
||||
@@ -4090,7 +4158,7 @@ void *rrc_ue_task( void *args_p )
|
||||
|
||||
case RRC_RAL_CONNECTION_RELEASE_REQ:
|
||||
ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */
|
||||
LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
|
||||
LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -283,7 +283,7 @@ double rx_gain[MAX_NUM_CCs][4] = {{110,0,0,0}};
|
||||
#endif
|
||||
|
||||
double sample_rate=30.72e6;
|
||||
double bw = 14e6;
|
||||
double bw = 10.0e6;
|
||||
|
||||
static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/;
|
||||
|
||||
@@ -2537,7 +2537,7 @@ int main( int argc, char **argv )
|
||||
}
|
||||
|
||||
#endif
|
||||
#ifdef NAS_NETLINK
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
netlink_init();
|
||||
#endif
|
||||
|
||||
@@ -2774,6 +2774,7 @@ int main( int argc, char **argv )
|
||||
|
||||
if(frame_parms[0]->N_RB_DL == 100) {
|
||||
sample_rate = 30.72e6;
|
||||
bw = 10.0e6;
|
||||
#ifndef EXMIMO
|
||||
openair0_cfg[0].samples_per_packet = 2048;
|
||||
samples_per_frame = 307200;
|
||||
@@ -2783,6 +2784,7 @@ int main( int argc, char **argv )
|
||||
#endif
|
||||
} else if(frame_parms[0]->N_RB_DL == 50) {
|
||||
sample_rate = 15.36e6;
|
||||
bw = 5.0e6;
|
||||
#ifndef EXMIMO
|
||||
openair0_cfg[0].samples_per_packet = 2048;
|
||||
samples_per_frame = 153600;
|
||||
@@ -2791,6 +2793,7 @@ int main( int argc, char **argv )
|
||||
#endif
|
||||
} else if (frame_parms[0]->N_RB_DL == 25) {
|
||||
sample_rate = 7.68e6;
|
||||
bw = 2.5e6;
|
||||
#ifndef EXMIMO
|
||||
openair0_cfg[0].samples_per_packet = 1024;
|
||||
samples_per_frame = 76800;
|
||||
@@ -2799,6 +2802,7 @@ int main( int argc, char **argv )
|
||||
#endif
|
||||
} else if (frame_parms[0]->N_RB_DL == 6) {
|
||||
sample_rate = 1.92e6;
|
||||
bw = 0.96e6;
|
||||
#ifndef EXMIMO
|
||||
openair0_cfg[0].samples_per_packet = 256;
|
||||
samples_per_frame = 19200;
|
||||
@@ -2961,8 +2965,11 @@ int main( int argc, char **argv )
|
||||
|
||||
// connect the TX/RX buffers
|
||||
if (UE_flag==1) {
|
||||
openair_daq_vars.timing_advance = 0;
|
||||
|
||||
#ifdef OAI_USRP
|
||||
openair_daq_vars.timing_advance = 160;
|
||||
#else
|
||||
openair_daq_vars.timing_advance = 170;
|
||||
#endif
|
||||
if (setup_ue_buffers(UE,&openair0_cfg[0],rf_map)!=0) {
|
||||
printf("Error setting up eNB buffer\n");
|
||||
exit(-1);
|
||||
|
||||
+122
-10
@@ -390,6 +390,7 @@ static void *UE_thread_synch(void *arg)
|
||||
|
||||
case pbch:
|
||||
|
||||
|
||||
if (initial_sync( UE, UE->mode ) == 0) {
|
||||
|
||||
hw_slot_offset = (UE->rx_offset<<1) / UE->lte_frame_parms.samples_per_tti;
|
||||
@@ -410,15 +411,23 @@ static void *UE_thread_synch(void *arg)
|
||||
switch(UE->lte_frame_parms.N_RB_DL) {
|
||||
case 6:
|
||||
openair0_cfg[0].sample_rate =1.92e6;
|
||||
openair0_cfg[0].rx_bw =.96e6;
|
||||
openair0_cfg[0].tx_bw =.96e6;
|
||||
break;
|
||||
case 25:
|
||||
openair0_cfg[0].sample_rate=7.68e6;
|
||||
openair0_cfg[0].sample_rate =7.68e6;
|
||||
openair0_cfg[0].rx_bw =2.5e6;
|
||||
openair0_cfg[0].tx_bw =2.5e6;
|
||||
break;
|
||||
case 50:
|
||||
openair0_cfg[0].sample_rate=15.36e6;
|
||||
openair0_cfg[0].sample_rate =15.36e6;
|
||||
openair0_cfg[0].rx_bw =5.0e6;
|
||||
openair0_cfg[0].tx_bw =5.0e6;
|
||||
break;
|
||||
case 100:
|
||||
openair0_cfg[0].sample_rate=30.72e6;
|
||||
openair0_cfg[0].rx_bw=10.0e6;
|
||||
openair0_cfg[0].tx_bw=10.0e6;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -687,6 +696,27 @@ static void *UE_thread_tx(void *arg)
|
||||
* \param arg is a pointer to a \ref PHY_VARS_UE structure.
|
||||
* \returns a pointer to an int. The storage is not on the heap and must not be freed.
|
||||
*/
|
||||
|
||||
#ifdef OAI_USRP
|
||||
void rescale(int16_t *input,int length)
|
||||
{
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
__m128i *input128 = (__m128i *)input;
|
||||
#elif defined(__arm__)
|
||||
int16x8_t *input128 = (int16x8_t *)input;
|
||||
#endif
|
||||
int i;
|
||||
|
||||
for (i=0; i<length>>2; i++) {
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
input128[i] = _mm_srai_epi16(input128[i],4);
|
||||
#elif defined(__arm__)
|
||||
input128[i] = vshrq_n_s16(input128[i],4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void *UE_thread_rx(void *arg)
|
||||
{
|
||||
static int UE_thread_rx_retval;
|
||||
@@ -767,11 +797,78 @@ static void *UE_thread_rx(void *arg)
|
||||
for (i=0; i<2; i++) {
|
||||
if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_DL) ||
|
||||
(UE->lte_frame_parms.frame_type == FDD)) {
|
||||
#ifdef OAI_USRP
|
||||
// this does the adjustments of RX signal amplitude to bring into least 12 significant bits
|
||||
int slot_length = UE->lte_frame_parms.samples_per_tti>>1;
|
||||
int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset;
|
||||
int frame_length = UE->lte_frame_parms.samples_per_tti*10;
|
||||
int aa;
|
||||
if (rx_offset > frame_length)
|
||||
rx_offset-=frame_length;
|
||||
|
||||
|
||||
if (rx_offset >= 0) {
|
||||
if (rx_offset + slot_length < frame_length)
|
||||
for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++)
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
|
||||
slot_length);
|
||||
else {
|
||||
int diff = rx_offset + slot_length - frame_length;
|
||||
for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
|
||||
slot_length-diff);
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
|
||||
diff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
|
||||
-rx_offset);
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
|
||||
slot_length+rx_offset);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL );
|
||||
}
|
||||
|
||||
if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_S) &&
|
||||
((UE->slot_rx&1) == 0)) {
|
||||
#ifdef OAI_USRP
|
||||
// this does the adjustments of RX signal amplitude to bring into least 12 significant bits
|
||||
int slot_length = UE->lte_frame_parms.samples_per_tti>>1;
|
||||
int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset;
|
||||
int frame_length = UE->lte_frame_parms.samples_per_tti*10;
|
||||
if (rx_offset > frame_length)
|
||||
rx_offset-=frame_length;
|
||||
int aa;
|
||||
|
||||
if (rx_offset >= 0) {
|
||||
if (rx_offset + slot_length < frame_length)
|
||||
for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++)
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
|
||||
slot_length);
|
||||
else {
|
||||
int diff = rx_offset + slot_length - frame_length;
|
||||
for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)],
|
||||
slot_length-diff);
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
|
||||
diff);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (aa=0;aa<UE->lte_frame_parms.nb_antennas_rx;aa++){
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)],
|
||||
-rx_offset);
|
||||
rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0],
|
||||
slot_length+rx_offset);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL );
|
||||
}
|
||||
|
||||
@@ -938,9 +1035,9 @@ void *UE_thread(void *arg)
|
||||
for (int i=0; i<UE->lte_frame_parms.nb_antennas_rx; i++)
|
||||
rxp[i] = (dummy_dump==0) ? (void*)&rxdata[i][rxpos] : (void*)dummy[i];
|
||||
|
||||
// if (dummy_dump == 0)
|
||||
// printf("writing %d samples to %d\n",spp - ((first_rx==1) ? rx_off_diff : 0),rxpos);
|
||||
|
||||
/* if (dummy_dump == 0)
|
||||
printf("writing %d samples to %d (first_rx %d)\n",spp - ((first_rx==1) ? rx_off_diff : 0),rxpos,first_rx);
|
||||
*/
|
||||
rxs = openair0.trx_read_func(&openair0,
|
||||
×tamp,
|
||||
rxp,
|
||||
@@ -952,7 +1049,9 @@ void *UE_thread(void *arg)
|
||||
return &UE_thread_retval;
|
||||
}
|
||||
|
||||
rx_off_diff = 0;
|
||||
if (rx_off_diff !=0)
|
||||
LOG_I(PHY,"frame %d, rx_offset %d, rx_off_diff %d\n",UE->frame_rx,UE->rx_offset,rx_off_diff);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
|
||||
|
||||
// Transmit TX buffer based on timestamp from RX
|
||||
@@ -968,7 +1067,7 @@ void *UE_thread(void *arg)
|
||||
openair0.trx_write_func(&openair0,
|
||||
(timestamp+spp*tx_delay-tx_forward_nsamps),
|
||||
txp,
|
||||
spp,
|
||||
spp - ((first_rx==1) ? rx_off_diff : 0),
|
||||
UE->lte_frame_parms.nb_antennas_tx,
|
||||
1);
|
||||
|
||||
@@ -980,6 +1079,9 @@ void *UE_thread(void *arg)
|
||||
rt_sleep_ns(1000000);
|
||||
#endif
|
||||
|
||||
rx_off_diff = 0;
|
||||
first_rx = 0;
|
||||
|
||||
rxpos += spp;
|
||||
txpos += spp;
|
||||
|
||||
@@ -1128,6 +1230,7 @@ void *UE_thread(void *arg)
|
||||
rx_off_diff = 0;
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &UE->lte_frame_parms; // for macro FRAME_LENGTH_COMPLEX_SAMPLES
|
||||
|
||||
// LOG_I(PHY,"UE->rx_offset %d\n",UE->rx_offset);
|
||||
if ((UE->rx_offset > RX_OFF_MAX) && (start_rx_stream == 0)) {
|
||||
start_rx_stream=1;
|
||||
frame=0;
|
||||
@@ -1148,11 +1251,20 @@ void *UE_thread(void *arg)
|
||||
#endif
|
||||
UE->rx_offset=0;
|
||||
tx_enabled = 1;
|
||||
} else if ((UE->rx_offset < RX_OFF_MIN) && (start_rx_stream==1) && (rx_correction_timer == 0)) {
|
||||
} else if ((UE->rx_offset<(FRAME_LENGTH_COMPLEX_SAMPLES/2)) &&
|
||||
(UE->rx_offset > RX_OFF_MIN) &&
|
||||
(start_rx_stream==1) &&
|
||||
(rx_correction_timer == 0)) {
|
||||
rx_off_diff = -UE->rx_offset + RX_OFF_MIN;
|
||||
LOG_D(PHY,"UE->rx_offset %d > %d, diff %d\n",UE->rx_offset,RX_OFF_MIN,rx_off_diff);
|
||||
rx_correction_timer = 5;
|
||||
} else if ((UE->rx_offset > (FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MAX)) && (start_rx_stream==1) && (rx_correction_timer == 0)) {
|
||||
rx_off_diff = FRAME_LENGTH_COMPLEX_SAMPLES-UE->rx_offset;
|
||||
} else if ((UE->rx_offset>(FRAME_LENGTH_COMPLEX_SAMPLES/2)) &&
|
||||
(UE->rx_offset < (FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MIN)) &&
|
||||
(start_rx_stream==1) &&
|
||||
(rx_correction_timer == 0)) { // moving to the left so drop rx_off_diff samples
|
||||
rx_off_diff = FRAME_LENGTH_COMPLEX_SAMPLES - RX_OFF_MIN - UE->rx_offset;
|
||||
LOG_D(PHY,"UE->rx_offset %d < %d, diff %d\n",UE->rx_offset,FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MIN,rx_off_diff);(UE->rx_offset>(FRAME_LENGTH_COMPLEX_SAMPLES/2));
|
||||
|
||||
rx_correction_timer = 5;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user