diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 30b1452236ec8d556675f3ca08d04730b7fd34e5..c31c0d33ff6d95c74a017cb957a19b83115b385c 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1012,7 +1012,7 @@ static void * eNB_thread_tx(void *param) { vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe),0); //LOG_I(PHY,"Locking mutex for eNB proc %d (IC %d,mutex %p)\n",proc->subframe,proc->instance_cnt,&proc->mutex); - // printf("Locking mutex for eNB proc %d (subframe_tx %d))\n",proc->subframe,proc->subframe_tx); + // printf("Locking mutex for eNB proc %d (subframe_tx %d))\n",proc->subframe,proc->instance_cnt_tx); if (pthread_mutex_lock(&proc->mutex_tx) != 0) { LOG_E(PHY,"[SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe); @@ -1022,11 +1022,11 @@ static void * eNB_thread_tx(void *param) { while (proc->instance_cnt_tx < 0) { // LOG_I(PHY,"Waiting and unlocking mutex for eNB proc %d (IC %d,lock %d)\n",proc->subframe,proc->instance_cnt,pthread_mutex_trylock(&proc->mutex)); - //printf("Waiting and unlocking mutex for eNB proc %d (subframe_tx %d)\n",proc->subframe,subframe_tx); + //printf("Waiting and unlocking mutex for eNB proc %d (subframe_tx %d)\n",proc->subframe,proc->instance_cnt_tx); pthread_cond_wait(&proc->cond_tx,&proc->mutex_tx); } - // LOG_I(PHY,"Waking up and unlocking mutex for eNB proc %d\n",proc->subframe); + // LOG_I(PHY,"Waking up and unlocking mutex for eNB proc %d instance_cnt_tx %d\n",proc->subframe,proc->instance_cnt_tx); if (pthread_mutex_unlock(&proc->mutex_tx) != 0) { LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->subframe); oai_exit=1; @@ -1042,7 +1042,7 @@ static void * eNB_thread_tx(void *param) { if ((((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD)&& (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx)==SF_DL))|| (PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD))) { - + phy_procedures_eNB_TX(proc->subframe,PHY_vars_eNB_g[0][proc->CC_id],0,no_relay,NULL); } @@ -1050,7 +1050,6 @@ static void * eNB_thread_tx(void *param) { phy_procedures_eNB_TX(proc->subframe,PHY_vars_eNB_g[0][proc->CC_id],0,no_relay,NULL); } - do_OFDM_mod_rt(proc->subframe_tx,PHY_vars_eNB_g[0][proc->CC_id]); if (pthread_mutex_lock(&proc->mutex_tx) != 0) { @@ -1166,18 +1165,18 @@ static void * eNB_thread_rx(void *param) { vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0+(2*proc->subframe),0); - // LOG_I(PHY,"Locking mutex for eNB proc %d (IC %d,mutex %p)\n",proc->subframe,proc->instance_cnt,&proc->mutex); + // LOG_I(PHY,"Locking mutex for eNB proc %d (IC %d,mutex %p)\n",proc->subframe,proc->instance_cnt_rx,&proc->mutex_rx); if (pthread_mutex_lock(&proc->mutex_rx) != 0) { LOG_E(PHY,"[SCHED][eNB] error locking mutex for eNB RX proc %d\n",proc->subframe); } else { while (proc->instance_cnt_rx < 0) { - // LOG_I(PHY,"Waiting and unlocking mutex for eNB proc %d (IC %d,lock %d)\n",proc->subframe,proc->instance_cnt,pthread_mutex_trylock(&proc->mutex)); + // LOG_I(PHY,"Waiting and unlocking mutex for eNB proc %d (IC %d,lock %d)\n",proc->subframe,proc->instance_cnt_rx,pthread_mutex_trylock(&proc->mutex_rx)); pthread_cond_wait(&proc->cond_rx,&proc->mutex_rx); } - // LOG_I(PHY,"Waking up and unlocking mutex for eNB proc %d\n",proc->subframe); + // LOG_I(PHY,"Waking up and unlocking mutex for eNB RX proc %d instance_cnt_rx %d\n",proc->subframe,proc->instance_cnt_rx); if (pthread_mutex_unlock(&proc->mutex_rx) != 0) { LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB RX proc %d\n",proc->subframe); } @@ -1560,6 +1559,7 @@ static void *eNB_thread(void *arg) samples_per_packets, PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx); stop_meas(&softmodem_stats_hw); + if (rxs != samples_per_packets) oai_exit=1; @@ -1677,16 +1677,18 @@ static void *eNB_thread(void *arg) LOG_E(PHY,"[eNB] ERROR pthread_mutex_lock for eNB RX thread %d (IC %d)\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx); } else { - // LOG_I(PHY,"[eNB] Waking up eNB process %d (IC %d)\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt); + // LOG_I(PHY,"[eNB] Waking up eNB process %d (IC %d) CC_id %d rx_cnt %d\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx,CC_id,rx_cnt); PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx++; pthread_mutex_unlock(&PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_rx); if (PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx == 0) { if (pthread_cond_signal(&PHY_vars_eNB_g[0][CC_id]->proc[sf].cond_rx) != 0) { LOG_E(PHY,"[eNB] ERROR pthread_cond_signal for eNB RX thread %d\n",sf); } + //else + // LOG_I(PHY,"[eNB] pthread_cond_signal for eNB RX thread %d instance_cnt_rx %d\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx); } else { - LOG_W(PHY,"[eNB] Frame %d, eNB RX thread %d busy!!\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_rx,sf); + LOG_W(PHY,"[eNB] Frame %d, eNB RX thread %d busy!! instance_cnt %d CC_id %d\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_rx,sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx,CC_id); oai_exit=1; } } @@ -1944,7 +1946,7 @@ static void *UE_thread_rx(void *arg) { mlockall(MCL_CURRENT | MCL_FUTURE); #ifndef EXMIMO - printf("waiting for USRP sync (UE_thread_rx)\n"); + printf("waiting for sync (UE_thread_rx)\n"); #ifdef RTAI rt_sem_wait(sync_sem); #else @@ -2039,7 +2041,7 @@ static void *UE_thread(void *arg) { unsigned int rxs; void *rxp[2],*txp[2]; - printf("waiting for USRP sync (UE_thread)\n"); + printf("waiting for sync (UE_thread)\n"); #ifdef RTAI rt_sem_wait(sync_sem); #else @@ -2872,8 +2874,10 @@ int main(int argc, char **argv) { #endif #ifdef ETHERNET - char *rrh_ip = "127.0.0.1"; - int rrh_port = 22222; + char *rrh_eNB_ip = "192.168.12.196"; + int rrh_eNB_port = 50000; + char *rrh_UE_ip = "192.168.12.196"; + int rrh_UE_port = 22222; #endif // int amp; // uint8_t prach_fmt; @@ -3278,9 +3282,17 @@ int main(int argc, char **argv) { ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx)); openair0_cfg[card].Mod_id = 0; #ifdef ETHERNET - printf("ETHERNET: Configuring ETH for %s:%d\n",rrh_ip,rrh_port); - openair0_cfg[card].rrh_ip = &rrh_ip[0]; - openair0_cfg[card].rrh_port = rrh_port; + if (UE_flag){ + printf("ETHERNET: Configuring UE ETH for %s:%d\n",rrh_UE_ip,rrh_UE_port); + openair0_cfg[card].rrh_ip = &rrh_UE_ip[0]; + openair0_cfg[card].rrh_port = rrh_UE_port; + } + else + { + printf("ETHERNET: Configuring eNB ETH for %s:%d\n",rrh_eNB_ip,rrh_eNB_port); + openair0_cfg[card].rrh_ip = &rrh_eNB_ip[0]; + openair0_cfg[card].rrh_port = rrh_eNB_port; + } #endif openair0_cfg[card].sample_rate = sample_rate; openair0_cfg[card].tx_bw = bw; @@ -3918,7 +3930,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c } for (i=0;i<frame_parms->nb_antennas_tx;i++) { free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]); - txdata[i] = (int32_t*)(16 + malloc16(16+samples_per_frame*sizeof(int32_t))); + txdata[i] = (int32_t*)(16 + malloc16(16 + samples_per_frame*sizeof(int32_t))); phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i] = txdata[i]; memset(txdata[i], 0, samples_per_frame*sizeof(int32_t)); printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]);