Commit c59c85df authored by Raymond Knopp's avatar Raymond Knopp

modifications applied to lte-ru because of common interface changes with nr-ru

parent 07d6d0ab
...@@ -403,7 +403,7 @@ typedef struct RU_t_s{ ...@@ -403,7 +403,7 @@ typedef struct RU_t_s{
/// function pointer to initialization function for radio interface /// function pointer to initialization function for radio interface
int (*start_if)(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB); int (*start_if)(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB);
/// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL) /// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
void (*feprx)(struct RU_t_s *ru); void (*feprx)(struct RU_t_s *ru,int subframe);
/// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL) /// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
void (*feptx_ofdm)(struct RU_t_s *ru,int frame_tx,int tti_tx); void (*feptx_ofdm)(struct RU_t_s *ru,int frame_tx,int tti_tx);
/// function pointer to TX front-end processing routine (PRECODING) /// function pointer to TX front-end processing routine (PRECODING)
......
...@@ -60,23 +60,23 @@ void feptx0(RU_t *ru,int slot) { ...@@ -60,23 +60,23 @@ void feptx0(RU_t *ru,int slot) {
unsigned int aa,slot_offset; unsigned int aa,slot_offset;
int slot_sizeF = (fp->ofdm_symbol_size)* int slot_sizeF = (fp->ofdm_symbol_size)*
((fp->Ncp==1) ? 6 : 7); ((fp->Ncp==1) ? 6 : 7);
int subframe = ru->proc.tti_tx;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+slot , 1 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+slot , 1 );
slot_offset = subframe*fp->samples_per_tti + (slot*(fp->samples_per_tti>>1)); slot_offset = slot*(fp->samples_per_tti>>1);
//LOG_D(PHY,"SFN/SF:RU:TX:%d/%d Generating slot %d\n",ru->proc.frame_tx, ru->proc.subframe_tx,slot); //LOG_D(PHY,"SFN/SF:RU:TX:%d/%d Generating slot %d\n",ru->proc.frame_tx, ru->proc.subframe_tx,slot);
for (aa=0; aa<ru->nb_tx; aa++) { for (aa=0; aa<ru->nb_tx; aa++) {
if (fp->Ncp == EXTENDED) PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot*slot_sizeF], if (fp->Ncp == EXTENDED) PHY_ofdm_mod(&ru->common.txdataF_BF[aa][(slot&1)*slot_sizeF],
(int*)&ru->common.txdata[aa][slot_offset], (int*)&ru->common.txdata[aa][slot_offset],
fp->ofdm_symbol_size, fp->ofdm_symbol_size,
6, 6,
fp->nb_prefix_samples, fp->nb_prefix_samples,
CYCLIC_PREFIX); CYCLIC_PREFIX);
else normal_prefix_mod(&ru->common.txdataF_BF[aa][slot*slot_sizeF], else normal_prefix_mod(&ru->common.txdataF_BF[aa][(slot&1)*slot_sizeF],
(int*)&ru->common.txdata[aa][slot_offset], (int*)&ru->common.txdata[aa][slot_offset],
7, 7,
fp); fp);
...@@ -123,7 +123,7 @@ void feptx0(RU_t *ru,int slot) { ...@@ -123,7 +123,7 @@ void feptx0(RU_t *ru,int slot) {
} }
}*/ }*/
} }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+slot , 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+(slot&1) , 0);
} }
static void *feptx_thread(void *param) { static void *feptx_thread(void *param) {
...@@ -136,9 +136,13 @@ static void *feptx_thread(void *param) { ...@@ -136,9 +136,13 @@ static void *feptx_thread(void *param) {
while (!oai_exit) { while (!oai_exit) {
if (wait_on_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"feptx thread")<0) break; if (wait_on_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"feptx thread")<0) break;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+1 , 1 );
if (oai_exit) break; if (oai_exit) break;
//stop_meas(&ru->ofdm_mod_wakeup_stats); //stop_meas(&ru->ofdm_mod_wakeup_stats);
feptx0(ru,1); feptx0(ru,proc->slot_feptx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+1 , 0 );
if (release_thread(&proc->mutex_feptx,&proc->instance_cnt_feptx,"feptx thread")<0) break; if (release_thread(&proc->mutex_feptx,&proc->instance_cnt_feptx,"feptx thread")<0) break;
if (pthread_cond_signal(&proc->cond_feptx) != 0) { if (pthread_cond_signal(&proc->cond_feptx) != 0) {
...@@ -155,16 +159,14 @@ static void *feptx_thread(void *param) { ...@@ -155,16 +159,14 @@ static void *feptx_thread(void *param) {
return(NULL); return(NULL);
} }
void feptx_ofdm_2thread(RU_t *ru) { void feptx_ofdm_2thread(RU_t *ru,int frame,int subframe) {
LTE_DL_FRAME_PARMS *fp=ru->frame_parms; LTE_DL_FRAME_PARMS *fp=ru->frame_parms;
RU_proc_t *proc = &ru->proc; RU_proc_t *proc = &ru->proc;
struct timespec wait; struct timespec wait;
int subframe = ru->proc.tti_tx;
wait.tv_sec=0; wait.tv_sec=0;
wait.tv_nsec=5000000L; wait.tv_nsec=5000000L;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 );
start_meas(&ru->ofdm_mod_stats); start_meas(&ru->ofdm_mod_stats);
if (subframe_select(fp,subframe) == SF_UL) return; if (subframe_select(fp,subframe) == SF_UL) return;
...@@ -185,7 +187,8 @@ void feptx_ofdm_2thread(RU_t *ru) { ...@@ -185,7 +187,8 @@ void feptx_ofdm_2thread(RU_t *ru) {
pthread_mutex_unlock( &proc->mutex_feptx ); pthread_mutex_unlock( &proc->mutex_feptx );
return; return;
} }
proc->slot_feptx=1+(subframe<<1);
++proc->instance_cnt_feptx; ++proc->instance_cnt_feptx;
...@@ -200,7 +203,7 @@ void feptx_ofdm_2thread(RU_t *ru) { ...@@ -200,7 +203,7 @@ void feptx_ofdm_2thread(RU_t *ru) {
} }
// call first slot in this thread // call first slot in this thread
feptx0(ru,0); feptx0(ru,(subframe<<1));
start_meas(&ru->ofdm_mod_wait_stats); start_meas(&ru->ofdm_mod_wait_stats);
wait_on_busy_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"feptx thread"); wait_on_busy_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"feptx thread");
stop_meas(&ru->ofdm_mod_wait_stats); stop_meas(&ru->ofdm_mod_wait_stats);
...@@ -209,14 +212,13 @@ void feptx_ofdm_2thread(RU_t *ru) { ...@@ -209,14 +212,13 @@ void feptx_ofdm_2thread(RU_t *ru) {
printf("delay in feptx wait on codition in frame_rx: %d subframe_rx: %d \n",proc->frame_tx,proc->subframe_tx); printf("delay in feptx wait on codition in frame_rx: %d subframe_rx: %d \n",proc->frame_tx,proc->subframe_tx);
}*/ }*/
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 );
stop_meas(&ru->ofdm_mod_stats); stop_meas(&ru->ofdm_mod_stats);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 );
} }
void feptx_ofdm(RU_t *ru) { void feptx_ofdm(RU_t *ru,int frame,int subframe) {
LTE_DL_FRAME_PARMS *fp=ru->frame_parms; LTE_DL_FRAME_PARMS *fp=ru->frame_parms;
...@@ -227,7 +229,6 @@ void feptx_ofdm(RU_t *ru) { ...@@ -227,7 +229,6 @@ void feptx_ofdm(RU_t *ru) {
((fp->Ncp==1) ? 6 : 7); ((fp->Ncp==1) ? 6 : 7);
int len,len2; int len,len2;
int16_t *txdata; int16_t *txdata;
int subframe = ru->proc.tti_tx;
// int CC_id = ru->proc.CC_id; // int CC_id = ru->proc.CC_id;
...@@ -356,13 +357,12 @@ void feptx_ofdm(RU_t *ru) { ...@@ -356,13 +357,12 @@ void feptx_ofdm(RU_t *ru) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 );
} }
void feptx_prec(RU_t *ru) { void feptx_prec(RU_t *ru,int frame,int subframe) {
int l,i,aa; int l,i,aa;
PHY_VARS_eNB **eNB_list = ru->eNB_list,*eNB; PHY_VARS_eNB **eNB_list = ru->eNB_list,*eNB;
LTE_DL_FRAME_PARMS *fp; LTE_DL_FRAME_PARMS *fp;
int32_t ***bw; int32_t ***bw;
int subframe = ru->proc.tti_tx;
if (ru->num_eNB == 1) { if (ru->num_eNB == 1) {
eNB = eNB_list[0]; eNB = eNB_list[0];
...@@ -506,7 +506,7 @@ extern void kill_feptx_thread(RU_t *ru) ...@@ -506,7 +506,7 @@ extern void kill_feptx_thread(RU_t *ru)
pthread_cond_destroy( &proc->cond_feptx ); pthread_cond_destroy( &proc->cond_feptx );
} }
void ru_fep_full_2thread(RU_t *ru) { void ru_fep_full_2thread(RU_t *ru,int subframe) {
RU_proc_t *proc = &ru->proc; RU_proc_t *proc = &ru->proc;
...@@ -515,7 +515,7 @@ void ru_fep_full_2thread(RU_t *ru) { ...@@ -515,7 +515,7 @@ void ru_fep_full_2thread(RU_t *ru) {
LTE_DL_FRAME_PARMS *fp=ru->frame_parms; LTE_DL_FRAME_PARMS *fp=ru->frame_parms;
if ((fp->frame_type == TDD) && if ((fp->frame_type == TDD) &&
(subframe_select(fp,proc->tti_rx) != SF_UL)) return; (subframe_select(fp,subframe) != SF_UL)) return;
if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 ); if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 );
...@@ -567,20 +567,19 @@ void ru_fep_full_2thread(RU_t *ru) { ...@@ -567,20 +567,19 @@ void ru_fep_full_2thread(RU_t *ru) {
void fep_full(RU_t *ru) { void fep_full(RU_t *ru,int subframe) {
RU_proc_t *proc = &ru->proc;
int l; int l;
LTE_DL_FRAME_PARMS *fp=ru->frame_parms; LTE_DL_FRAME_PARMS *fp=ru->frame_parms;
if ((fp->frame_type == TDD) && if ((fp->frame_type == TDD) &&
(subframe_select(fp,proc->tti_rx) != SF_UL)) return; (subframe_select(fp,subframe) != SF_UL)) return;
start_meas(&ru->ofdm_demod_stats); start_meas(&ru->ofdm_demod_stats);
if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 ); if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 );
remove_7_5_kHz(ru,proc->tti_rx<<1); remove_7_5_kHz(ru,subframe<<1);
remove_7_5_kHz(ru,1+(proc->tti_rx<<1)); remove_7_5_kHz(ru,1+(subframe<<1));
for (l=0; l<fp->symbols_per_tti/2; l++) { for (l=0; l<fp->symbols_per_tti/2; l++) {
slot_fep_ul(ru, slot_fep_ul(ru,
......
[*] [*]
[*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI [*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
[*] Mon Oct 29 17:36:13 2018 [*] Sun May 19 21:39:57 2019
[*] [*]
[dumpfile] "/mnt/hgfs/Documents/Devel/openair_dump_eNB.vcd" [dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "Mon Oct 29 17:34:25 2018" [dumpfile_mtime] "Sun May 19 21:30:25 2019"
[dumpfile_size] 4559568 [dumpfile_size] 11590554
[savefile] "/home/kaltenbe/Devel/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw" [savefile] "/home/sphex/raymond/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[timestart] 7635200000 [timestart] 7629910000
[size] 1535 780 [size] 1840 795
[pos] -1 -1 [pos] -1 -1
*-21.832302 7639830000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 *-21.832302 7639830000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[sst_width] 386 [sst_width] 386
...@@ -24,9 +24,11 @@ variables.trx_tst[63:0] ...@@ -24,9 +24,11 @@ variables.trx_tst[63:0]
functions.eNB_thread_rxtx0 functions.eNB_thread_rxtx0
@24 @24
variables.frame_number_RX0_RU[63:0] variables.frame_number_RX0_RU[63:0]
variables.subframe_number_RX0_RU[63:0] @25
variables.tti_number_RX0_RU[63:0]
@24
variables.frame_number_TX0_RU[63:0] variables.frame_number_TX0_RU[63:0]
variables.subframe_number_TX0_RU[63:0] variables.tti_number_TX0_RU[63:0]
@28 @28
functions.mac_schedule_dlsch functions.mac_schedule_dlsch
functions.macxface_eNB_dlsch_ulsch_scheduler functions.macxface_eNB_dlsch_ulsch_scheduler
...@@ -54,9 +56,7 @@ functions.phy_procedures_eNb_rx_uespec1 ...@@ -54,9 +56,7 @@ functions.phy_procedures_eNb_rx_uespec1
functions.phy_enb_sfgen functions.phy_enb_sfgen
functions.phy_procedures_eNb_tx0 functions.phy_procedures_eNb_tx0
functions.phy_procedures_eNb_tx1 functions.phy_procedures_eNb_tx1
@29
functions.phy_procedures_ru_feprx0 functions.phy_procedures_ru_feprx0
@28
functions.phy_procedures_ru_feprx1 functions.phy_procedures_ru_feprx1
functions.phy_procedures_ru_feptx_ofdm0 functions.phy_procedures_ru_feptx_ofdm0
functions.phy_procedures_ru_feptx_ofdm1 functions.phy_procedures_ru_feptx_ofdm1
......
...@@ -309,23 +309,23 @@ int connect_rau(RU_t *ru) { ...@@ -309,23 +309,23 @@ int connect_rau(RU_t *ru) {
/* Southbound Fronthaul functions, RCC/RAU */ /* Southbound Fronthaul functions, RCC/RAU */
// southbound IF5 fronthaul for 16-bit OAI format // southbound IF5 fronthaul for 16-bit OAI format
static inline void fh_if5_south_out(RU_t *ru) { static inline void fh_if5_south_out(RU_t *ru,int frame, int subframe, uint64_t timestamp) {
if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff ); if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
send_IF5(ru, ru->proc.timestamp_tx, ru->proc.tti_tx, &ru->seqno, IF5_RRH_GW_DL); send_IF5(ru, timestamp, subframe, &ru->seqno, IF5_RRH_GW_DL);
} }
// southbound IF5 fronthaul for Mobipass packet format // southbound IF5 fronthaul for Mobipass packet format
static inline void fh_if5_mobipass_south_out(RU_t *ru) { static inline void fh_if5_mobipass_south_out(RU_t *ru,int frame, int subframe, uint64_t timestamp) {
if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff ); if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
send_IF5(ru, ru->proc.timestamp_tx, ru->proc.tti_tx, &ru->seqno, IF5_MOBIPASS); send_IF5(ru, timestamp, subframe, &ru->seqno, IF5_MOBIPASS);
} }
// southbound IF4p5 fronthaul // southbound IF4p5 fronthaul
static inline void fh_if4p5_south_out(RU_t *ru) { static inline void fh_if4p5_south_out(RU_t *ru,int frame, int subframe, uint64_t timestamp) {
if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff ); if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.tti_tx); LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.tti_tx);
if (subframe_select(ru->frame_parms,ru->proc.tti_tx)!=SF_UL) if (subframe_select(ru->frame_parms,subframe)!=SF_UL)
send_IF4p5(ru,ru->proc.frame_tx, ru->proc.tti_tx, IF4p5_PDLFFT); send_IF4p5(ru,frame, subframe, IF4p5_PDLFFT);
} }
/*************************************************************/ /*************************************************************/
...@@ -841,7 +841,7 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) { ...@@ -841,7 +841,7 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
} }
void tx_rf(RU_t *ru) { void tx_rf(RU_t *ru,int frame,int subframe,uint64_t timestamp) {
RU_proc_t *proc = &ru->proc; RU_proc_t *proc = &ru->proc;
LTE_DL_FRAME_PARMS *fp = ru->frame_parms; LTE_DL_FRAME_PARMS *fp = ru->frame_parms;
...@@ -849,12 +849,12 @@ void tx_rf(RU_t *ru) { ...@@ -849,12 +849,12 @@ void tx_rf(RU_t *ru) {
unsigned int txs; unsigned int txs;
int i; int i;
T(T_ENB_PHY_OUTPUT_SIGNAL, T_INT(0), T_INT(0), T_INT(proc->frame_tx), T_INT(proc->tti_tx), T(T_ENB_PHY_OUTPUT_SIGNAL, T_INT(0), T_INT(0), T_INT(frame), T_INT(subframe),
T_INT(0), T_BUFFER(&ru->common.txdata[0][proc->tti_tx * fp->samples_per_tti], fp->samples_per_tti * 4)); T_INT(0), T_BUFFER(&ru->common.txdata[0][subframe * fp->samples_per_tti], fp->samples_per_tti * 4));
lte_subframe_t SF_type = subframe_select(fp,proc->tti_tx%10); lte_subframe_t SF_type = subframe_select(fp,subframe%10);
lte_subframe_t prevSF_type = subframe_select(fp,(proc->tti_tx+9)%10); lte_subframe_t prevSF_type = subframe_select(fp,(subframe+9)%10);
lte_subframe_t nextSF_type = subframe_select(fp,(proc->tti_tx+1)%10); lte_subframe_t nextSF_type = subframe_select(fp,(subframe+1)%10);
int sf_extension = 0; int sf_extension = 0;
if ((SF_type == SF_DL) || if ((SF_type == SF_DL) ||
...@@ -892,7 +892,7 @@ void tx_rf(RU_t *ru) { ...@@ -892,7 +892,7 @@ void tx_rf(RU_t *ru) {
#endif #endif
for (i=0; i<ru->nb_tx; i++) for (i=0; i<ru->nb_tx; i++)
txp[i] = (void*)&ru->common.txdata[i][(proc->tti_tx*fp->samples_per_tti)-sf_extension]; txp[i] = (void*)&ru->common.txdata[i][(subframe*fp->samples_per_tti)-sf_extension];
/* add fail safe for late command */ /* add fail safe for late command */
if(late_control!=STATE_BURST_NORMAL){//stop burst if(late_control!=STATE_BURST_NORMAL){//stop burst
...@@ -925,22 +925,22 @@ void tx_rf(RU_t *ru) { ...@@ -925,22 +925,22 @@ void tx_rf(RU_t *ru) {
} }
/* add fail safe for late command end */ /* add fail safe for late command end */
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, frame);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, proc->tti_tx ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, subframe);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (proc->timestamp_tx-ru->openair0_cfg.tx_sample_advance)&0xffffffff ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (timestamp-ru->openair0_cfg.tx_sample_advance)&0xffffffff );
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
// prepare tx buffer pointers // prepare tx buffer pointers
txs = ru->rfdevice.trx_write_func(&ru->rfdevice, txs = ru->rfdevice.trx_write_func(&ru->rfdevice,
proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension, timestamp+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
txp, txp,
siglen+sf_extension, siglen+sf_extension,
ru->nb_tx, ru->nb_tx,
flags); flags);
LOG_D(PHY,"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",ru->idx, LOG_D(PHY,"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",ru->idx,
(long long unsigned int)proc->timestamp_tx,proc->frame_tx,proc->frame_tx_unwrap,proc->tti_tx); (long long unsigned int)timestamp,frame,proc->frame_tx_unwrap,subframe);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
...@@ -1764,7 +1764,7 @@ static void* ru_thread( void* param ) { ...@@ -1764,7 +1764,7 @@ static void* ru_thread( void* param ) {
// do RX front-end processing (frequency-shift, dft) if needed // do RX front-end processing (frequency-shift, dft) if needed
if (ru->feprx) ru->feprx(ru); if (ru->feprx) ru->feprx(ru,proc->tti_rx);
// At this point, all information for subframe has been received on FH interface // At this point, all information for subframe has been received on FH interface
// If this proc is to provide synchronization, do so // If this proc is to provide synchronization, do so
...@@ -2112,8 +2112,8 @@ int stop_rf(RU_t *ru) ...@@ -2112,8 +2112,8 @@ int stop_rf(RU_t *ru)
return 0; return 0;
} }
extern void fep_full(RU_t *ru); extern void fep_full(RU_t *ru,int subframe);
extern void ru_fep_full_2thread(RU_t *ru); extern void ru_fep_full_2thread(RU_t *ru,int subframe);
extern void feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx); extern void feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx);
extern void feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx); extern void feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx);
extern void feptx_prec(RU_t *ru,int frame_tx,int tti_tx); extern void feptx_prec(RU_t *ru,int frame_tx,int tti_tx);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment