Minor modifications to make nfapi-L2-emulator work again and redundant logs removal.
This commit is contained in:
@@ -449,11 +449,13 @@ static void* eNB_thread_rxtx( void* param ) {
|
||||
exit_fun( "ERROR pthread_cond_signal" );
|
||||
}
|
||||
pthread_mutex_unlock( &proc->mutex_rxtx );
|
||||
if(get_nprocs() >= 8) wakeup_tx(eNB,eNB->proc.ru_proc);
|
||||
else
|
||||
{
|
||||
phy_procedures_eNB_TX(eNB, proc, 1);
|
||||
wakeup_txfh(proc,eNB->proc.ru_proc);
|
||||
if (nfapi_mode!=2){
|
||||
if(get_nprocs() >= 8) wakeup_tx(eNB,eNB->proc.ru_proc);
|
||||
else
|
||||
{
|
||||
phy_procedures_eNB_TX(eNB, proc, 1);
|
||||
wakeup_txfh(proc,eNB->proc.ru_proc);
|
||||
}
|
||||
}
|
||||
|
||||
} // while !oai_exit
|
||||
@@ -1013,7 +1015,7 @@ void init_eNB_proc(int inst) {
|
||||
//pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, proc_rxtx );
|
||||
|
||||
|
||||
// Panos: Should we also include here the case where single_thread_flag = 1 ?
|
||||
//Should we also include here the case where single_thread_flag = 1 ?
|
||||
if(nfapi_mode!=2){
|
||||
pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, proc );
|
||||
pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, tx_thread, proc);
|
||||
|
||||
+13
-326
@@ -183,7 +183,7 @@ PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
ue->Mod_id = UE_id;
|
||||
ue->mac_enabled = 1;
|
||||
|
||||
// Panos: In phy_stub_UE (MAC-to-MAC) mode these init functions don't need to get called. Is this correct?
|
||||
// In phy_stub_UE (MAC-to-MAC) mode these init functions don't need to get called. Is this correct?
|
||||
if (nfapi_mode!=3)
|
||||
{
|
||||
// initialize all signal buffers
|
||||
@@ -285,7 +285,7 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti
|
||||
#endif
|
||||
}
|
||||
|
||||
// Panos: Initiating all UEs within a single set of threads for PHY_STUB. Future extensions -> multiple
|
||||
// Initiating all UEs within a single set of threads for PHY_STUB. Future extensions -> multiple
|
||||
// set of threads for multiple UEs.
|
||||
void init_UE_stub_single_thread(int nb_inst,int eMBMS_active, int uecap_xer_in, char *emul_iface) {
|
||||
|
||||
@@ -931,8 +931,6 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) {
|
||||
LOG_E( MAC, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" );
|
||||
exit_fun("nothing to add");
|
||||
}
|
||||
LOG_D(MAC," Panos-D [UE_phy_stub_thread_rxn_txnp4 1] Frame: %d, Subframe: %d \n" "\n" "\n", timer_frame, timer_subframe);
|
||||
|
||||
|
||||
proc->subframe_rx=timer_subframe;
|
||||
proc->frame_rx = timer_frame;
|
||||
@@ -943,14 +941,14 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) {
|
||||
|
||||
oai_subframe_ind(timer_frame, timer_subframe);
|
||||
|
||||
// Panos: Guessing that the next 4 lines are not needed for the phy_stub mode.
|
||||
//Guessing that the next 4 lines are not needed for the phy_stub mode.
|
||||
/*initRefTimes(t2);
|
||||
initRefTimes(t3);
|
||||
pickTime(current);
|
||||
updateTimes(proc->gotIQs, &t2, 10000, "Delay to wake up UE_Thread_Rx (case 2)");*/
|
||||
|
||||
|
||||
//Panos: Not sure whether we should put the memory allocation here and not sure how much memory
|
||||
// Not sure whether we should put the memory allocation here and not sure how much memory
|
||||
//we should allocate for each subframe cycle.
|
||||
UL_INFO = (UL_IND_t*)malloc(sizeof(UL_IND_t));
|
||||
|
||||
@@ -1082,7 +1080,7 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) {
|
||||
//ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode);
|
||||
}
|
||||
} // mode is PRACH
|
||||
// Panos: Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger
|
||||
// Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger
|
||||
// UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB).
|
||||
// Generate UL_indications which correspond to UL traffic.
|
||||
if(ul_config_req!=NULL){ //&& UE_mac_inst[Mod_id].ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){
|
||||
@@ -1222,7 +1220,7 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) {
|
||||
phy_stub_ticking->ticking_var = -1;
|
||||
proc->subframe_rx=proc->sub_frame_start;
|
||||
|
||||
//PANOS: CAREFUL HERE!
|
||||
// CAREFUL HERE!
|
||||
wait_sync("UE_phy_stub_thread_rxn_txnp4");
|
||||
|
||||
while (!oai_exit) {
|
||||
@@ -1242,8 +1240,6 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) {
|
||||
LOG_E( MAC, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" );
|
||||
exit_fun("nothing to add");
|
||||
}
|
||||
LOG_D(MAC," Panos-D [UE_phy_stub_thread_rxn_txnp4 1] Frame: %d, Subframe: %d \n" "\n" "\n", timer_frame, timer_subframe);
|
||||
|
||||
|
||||
proc->subframe_rx=timer_subframe;
|
||||
proc->frame_rx = timer_frame;
|
||||
@@ -1286,7 +1282,6 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) {
|
||||
}
|
||||
//if(UE_mac_inst[Mod_id].hi_dci0_req!= NULL){
|
||||
if (hi_dci0_req!=NULL && hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){
|
||||
LOG_I( MAC, "Panos-D: UE_phy_stub_thread_rxn_txnp4 after oai_subframe_ind 4 \n");
|
||||
hi_dci0_req_UE_MAC(hi_dci0_req, Mod_id);
|
||||
//if(UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){
|
||||
free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list);
|
||||
@@ -1350,7 +1345,6 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) {
|
||||
if (UE->mode != loop_through_memory){
|
||||
|
||||
if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH) ) {
|
||||
//LOG_D(MAC, "Panos-D: UE_phy_stub_thread_rxn_txnp4 before RACH \n");
|
||||
|
||||
// check if we have PRACH opportunity
|
||||
|
||||
@@ -1365,7 +1359,7 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) {
|
||||
//ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode);
|
||||
}
|
||||
} // mode is PRACH
|
||||
// Panos: Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger
|
||||
// Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger
|
||||
// UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB).
|
||||
// Generate UL_indications which correspond to UL traffic.
|
||||
if(ul_config_req!= NULL && ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){
|
||||
@@ -1751,12 +1745,12 @@ void init_UE_single_thread_stub(int nb_inst) {
|
||||
pthread_attr_init (&UE->proc.attr_ue);
|
||||
pthread_attr_setstacksize(&UE->proc.attr_ue,8192);//5*PTHREAD_STACK_MIN);
|
||||
|
||||
// Panos: Don't need synch for phy_stub mode
|
||||
// Don't need synch for phy_stub mode
|
||||
//pthread_mutex_init(&UE->proc.mutex_synch,NULL);
|
||||
//pthread_cond_init(&UE->proc.cond_synch,NULL);
|
||||
|
||||
// the threads are not yet active, therefore access is allowed without locking
|
||||
// Panos: In phy_stub_UE mode due to less heavy processing operations we don't need two threads
|
||||
// In phy_stub_UE mode due to less heavy processing operations we don't need two threads
|
||||
//int nb_threads=RX_NB_TH;
|
||||
int nb_threads=1;
|
||||
for (int i=0; i<nb_threads; i++) {
|
||||
@@ -1773,7 +1767,7 @@ void init_UE_single_thread_stub(int nb_inst) {
|
||||
pthread_create(&UE->proc.proc_rxtx[i].pthread_rxtx, NULL, UE_phy_stub_single_thread_rxn_txnp4, rtd);
|
||||
|
||||
}
|
||||
// Panos: Remove thread for UE_sync in phy_stub_UE mode.
|
||||
// Remove thread for UE_sync in phy_stub_UE mode.
|
||||
//pthread_create(&UE->proc.pthread_synch,NULL,UE_thread_synch,(void*)UE);
|
||||
}
|
||||
|
||||
@@ -1803,12 +1797,12 @@ void init_UE_threads_stub(int inst) {
|
||||
pthread_attr_init (&UE->proc.attr_ue);
|
||||
pthread_attr_setstacksize(&UE->proc.attr_ue,8192);//5*PTHREAD_STACK_MIN);
|
||||
|
||||
// Panos: Don't need synch for phy_stub mode
|
||||
// Don't need synch for phy_stub mode
|
||||
//pthread_mutex_init(&UE->proc.mutex_synch,NULL);
|
||||
//pthread_cond_init(&UE->proc.cond_synch,NULL);
|
||||
|
||||
// the threads are not yet active, therefore access is allowed without locking
|
||||
// Panos: In phy_stub_UE mode due to less heavy processing operations we don't need two threads
|
||||
// In phy_stub_UE mode due to less heavy processing operations we don't need two threads
|
||||
//int nb_threads=RX_NB_TH;
|
||||
int nb_threads=1;
|
||||
for (int i=0; i<nb_threads; i++) {
|
||||
@@ -1826,7 +1820,7 @@ void init_UE_threads_stub(int inst) {
|
||||
|
||||
|
||||
}
|
||||
// Panos: Remove thread for UE_sync in phy_stub_UE mode.
|
||||
// Remove thread for UE_sync in phy_stub_UE mode.
|
||||
//pthread_create(&UE->proc.pthread_synch,NULL,UE_thread_synch,(void*)UE);
|
||||
}
|
||||
|
||||
@@ -1906,168 +1900,6 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
|
||||
|
||||
|
||||
|
||||
/*static void* timer_thread( void* param ) {
|
||||
thread_top_init("timer_thread",1,870000L,1000000L,1000000L);
|
||||
timer_subframe =9;
|
||||
timer_frame =1023;
|
||||
//phy_stub_ticking = (SF_ticking*)malloc(sizeof(SF_ticking));
|
||||
phy_stub_ticking->ticking_var = -1;
|
||||
PHY_VARS_UE *UE;
|
||||
UE = PHY_vars_UE_g[0][0];
|
||||
double t_diff;
|
||||
int external_timer = 0;
|
||||
|
||||
|
||||
//struct timespec pselect_start;
|
||||
|
||||
|
||||
//struct timespec sf_duration;
|
||||
//sf_duration.tv_sec = 0;
|
||||
//sf_duration.tv_nsec = 1e6;
|
||||
|
||||
|
||||
wait_sync("timer_thread");
|
||||
|
||||
//pthread_mutex_init(&phy_stub_ticking->mutex_ticking,NULL);
|
||||
//pthread_cond_init(&phy_stub_ticking->cond_ticking,NULL);
|
||||
|
||||
// struct timespec start = {0};
|
||||
// struct timespec end = {0};
|
||||
//sleepValue.tv_nsec = 1000000;
|
||||
opp_enabled = 1;
|
||||
|
||||
// first check if we are receiving timing indications
|
||||
if(nfapi_mode==4) {
|
||||
usleep(10000);
|
||||
if (UE->instance_cnt_timer > 0) {
|
||||
external_timer = 1;
|
||||
int absSFm1 = ((emulator_absSF+10239)%10240);
|
||||
timer_frame = absSFm1/10;
|
||||
timer_subframe = absSFm1%10;
|
||||
pthread_mutex_lock(&UE->timer_mutex);
|
||||
UE->instance_cnt_timer = -1;
|
||||
pthread_mutex_unlock(&UE->timer_mutex);
|
||||
LOG_I(PHY,"Running with external timer\n");
|
||||
}
|
||||
else LOG_I(PHY,"Running with internal timer\n");
|
||||
}
|
||||
|
||||
struct timespec t_start;
|
||||
struct timespec t_now;
|
||||
struct timespec t_sleep;
|
||||
uint64_t T_0;
|
||||
uint64_t T_now;
|
||||
uint64_t T_next_SF;
|
||||
uint64_t T_sleep;
|
||||
uint64_t sf_cnt = 0; //Total Subframe counter
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &t_start);
|
||||
T_0 = (uint64_t) t_start.tv_sec*1000000000 + t_start.tv_nsec;
|
||||
LOG_I(MAC, "Panos-D: timer_thread(), T_0 value: %" PRId64 "\n", T_0);
|
||||
//printf("%" PRId64 "\n", t);
|
||||
|
||||
while (!oai_exit) {
|
||||
|
||||
// these are local subframe/frame counters to check that we are in synch with the fronthaul timing.
|
||||
// They are set on the first rx/tx in the underly FH routines.
|
||||
if (timer_subframe==9) {
|
||||
timer_subframe=0;
|
||||
timer_frame++;
|
||||
timer_frame&=1023;
|
||||
} else {
|
||||
timer_subframe++;
|
||||
}
|
||||
//printf("[timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe);
|
||||
//LOG_I(MAC," Panos-D [timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe);
|
||||
//AssertFatal( 0 == pthread_cond_signal(&phy_stub_ticking->cond_ticking), "");
|
||||
AssertFatal(pthread_mutex_lock(&phy_stub_ticking->mutex_ticking) ==0,"");
|
||||
phy_stub_ticking->ticking_var++;
|
||||
// This should probably be a call to pthread_cond_broadcast when we introduce support for multiple UEs (threads)
|
||||
if(phy_stub_ticking->ticking_var == 0){
|
||||
//AssertFatal(phy_stub_ticking->ticking_var == 0,"phy_stub_ticking->ticking_var = %d",
|
||||
//phy_stub_ticking->ticking_var);
|
||||
if (pthread_cond_signal(&phy_stub_ticking->cond_ticking) != 0) {
|
||||
//LOG_E( PHY, "[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread\n", UE->Mod_id);
|
||||
LOG_E( PHY, "timer_thread ERROR pthread_cond_signal for UE_thread\n");
|
||||
exit_fun("nothing to add");
|
||||
}
|
||||
}
|
||||
else
|
||||
LOG_I(MAC, "Panos-D: timer_thread() Timing problem! \n");
|
||||
|
||||
AssertFatal(pthread_mutex_unlock(&phy_stub_ticking->mutex_ticking) ==0,"");
|
||||
start_meas(&UE->timer_stats);
|
||||
|
||||
|
||||
//clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); // get initial time-stamp
|
||||
if (external_timer == 0) {
|
||||
sf_cnt++;
|
||||
T_next_SF = T_0 + sf_cnt*1000000;
|
||||
do{
|
||||
clock_gettime(CLOCK_MONOTONIC, &t_now);
|
||||
T_now =(uint64_t) t_now.tv_sec*1000000000 + t_now.tv_nsec;
|
||||
}while(T_now < T_next_SF);
|
||||
//usleep(1000);
|
||||
UE_tport_t pdu;
|
||||
pdu.header.packet_type = TTI_SYNC;
|
||||
pdu.header.absSF = (timer_frame*10)+timer_subframe;
|
||||
if (nfapi_mode!=3){
|
||||
multicast_link_write_sock(0,
|
||||
&pdu,
|
||||
sizeof(UE_tport_header_t));
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
wait_on_condition(&UE->timer_mutex,&UE->timer_cond,&UE->instance_cnt_timer,"timer_thread");
|
||||
release_thread(&UE->timer_mutex,&UE->instance_cnt_timer,"timer_thread");
|
||||
}
|
||||
//clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); // get final time-stamp
|
||||
|
||||
//double t_ns = (double)(end.tv_sec - start.tv_sec) * 1.0e9 +
|
||||
// (double)(end.tv_nsec - start.tv_nsec);
|
||||
//printf("Panos-D: [timer_thread] REAL TIME difference: %f", t_ns);
|
||||
|
||||
|
||||
stop_meas(&UE->timer_stats);
|
||||
t_diff = get_time_meas_us(&UE->timer_stats);
|
||||
|
||||
//printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now);
|
||||
//LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP);
|
||||
//if (t_diff > 1100)
|
||||
|
||||
|
||||
// LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff);
|
||||
//LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff);
|
||||
|
||||
//printf("Panos-D: Absolute time: %f", t_diff);
|
||||
|
||||
|
||||
stop_meas(&UE->timer_stats);
|
||||
t_diff = get_time_meas_us(&UE->timer_stats);
|
||||
//printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now);
|
||||
//LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP);
|
||||
//if (t_diff > 1100) LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff);
|
||||
//printf("Panos-D: Absolute time: %f", t_diff);
|
||||
|
||||
//UE->proc.ticking_var++;
|
||||
// pthread_cond_signal() //Send signal to ue_thread()?
|
||||
// We also need to somehow pass the information of SFN/SF
|
||||
}
|
||||
free(phy_stub_ticking);
|
||||
pthread_cond_destroy(&phy_stub_ticking->cond_ticking);
|
||||
pthread_mutex_destroy(&phy_stub_ticking->mutex_ticking);
|
||||
return 0;
|
||||
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Panos: This timer thread is used only in the phy_stub mode as an independent timer
|
||||
// which will be ticking and provide the SFN/SF values that will be used from the UE threads
|
||||
@@ -2198,151 +2030,6 @@ static void* timer_thread( void* param ) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*static void* timer_thread( void* param ) {
|
||||
thread_top_init("timer_thread",1,870000L,1000000L,1000000L);
|
||||
timer_subframe =9;
|
||||
timer_frame =1023;
|
||||
//phy_stub_ticking = (SF_ticking*)malloc(sizeof(SF_ticking));
|
||||
phy_stub_ticking->ticking_var = -1;
|
||||
PHY_VARS_UE *UE;
|
||||
UE = PHY_vars_UE_g[0][0];
|
||||
double t_diff;
|
||||
int external_timer = 0;
|
||||
|
||||
wait_sync("timer_thread");
|
||||
|
||||
//pthread_mutex_init(&phy_stub_ticking->mutex_ticking,NULL);
|
||||
//pthread_cond_init(&phy_stub_ticking->cond_ticking,NULL);
|
||||
|
||||
// struct timespec start = {0};
|
||||
// struct timespec end = {0};
|
||||
//sleepValue.tv_nsec = 1000000;
|
||||
opp_enabled = 1;
|
||||
|
||||
// first check if we are receiving timing indications
|
||||
if(nfapi_mode==4) {
|
||||
usleep(10000);
|
||||
if (UE->instance_cnt_timer > 0) {
|
||||
external_timer = 1;
|
||||
int absSFm1 = ((emulator_absSF+10239)%10240);
|
||||
timer_frame = absSFm1/10;
|
||||
timer_subframe = absSFm1%10;
|
||||
pthread_mutex_lock(&UE->timer_mutex);
|
||||
UE->instance_cnt_timer = -1;
|
||||
pthread_mutex_unlock(&UE->timer_mutex);
|
||||
LOG_I(PHY,"Running with external timer\n");
|
||||
}
|
||||
else LOG_I(PHY,"Running with internal timer\n");
|
||||
}
|
||||
|
||||
while (!oai_exit) {
|
||||
|
||||
// these are local subframe/frame counters to check that we are in synch with the fronthaul timing.
|
||||
// They are set on the first rx/tx in the underly FH routines.
|
||||
if (timer_subframe==9) {
|
||||
timer_subframe=0;
|
||||
timer_frame++;
|
||||
timer_frame&=1023;
|
||||
} else {
|
||||
timer_subframe++;
|
||||
}
|
||||
//printf("[timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe);
|
||||
//LOG_I(MAC," Panos-D [timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe);
|
||||
//AssertFatal( 0 == pthread_cond_signal(&phy_stub_ticking->cond_ticking), "");
|
||||
AssertFatal(pthread_mutex_lock(&phy_stub_ticking->mutex_ticking) ==0,"");
|
||||
phy_stub_ticking->ticking_var++;
|
||||
// This should probably be a call to pthread_cond_broadcast when we introduce support for multiple UEs (threads)
|
||||
if(phy_stub_ticking->ticking_var == 0){
|
||||
//AssertFatal(phy_stub_ticking->ticking_var == 0,"phy_stub_ticking->ticking_var = %d",
|
||||
// phy_stub_ticking->ticking_var);
|
||||
if (pthread_cond_signal(&phy_stub_ticking->cond_ticking) != 0) {
|
||||
//LOG_E( PHY, "[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread\n", UE->Mod_id);
|
||||
LOG_E( PHY, "timer_thread ERROR pthread_cond_signal for UE_thread\n");
|
||||
exit_fun("nothing to add");
|
||||
}
|
||||
}
|
||||
|
||||
AssertFatal(pthread_mutex_unlock(&phy_stub_ticking->mutex_ticking) ==0,"");
|
||||
start_meas(&UE->timer_stats);
|
||||
|
||||
|
||||
//clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); // get initial time-stamp
|
||||
if (external_timer == 0) {
|
||||
usleep(1000);
|
||||
UE_tport_t pdu;
|
||||
pdu.header.packet_type = TTI_SYNC;
|
||||
pdu.header.absSF = (timer_frame*10)+timer_subframe;
|
||||
multicast_link_write_sock(0,
|
||||
&pdu,
|
||||
sizeof(UE_tport_header_t));
|
||||
|
||||
}
|
||||
else {
|
||||
wait_on_condition(&UE->timer_mutex,&UE->timer_cond,&UE->instance_cnt_timer,"timer_thread");
|
||||
release_thread(&UE->timer_mutex,&UE->instance_cnt_timer,"timer_thread");
|
||||
}
|
||||
//clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); // get final time-stamp
|
||||
|
||||
//double t_ns = (double)(end.tv_sec - start.tv_sec) * 1.0e9 +
|
||||
// (double)(end.tv_nsec - start.tv_nsec);
|
||||
//printf("Panos-D: [timer_thread] REAL TIME difference: %f", t_ns);
|
||||
|
||||
|
||||
stop_meas(&UE->timer_stats);
|
||||
t_diff = get_time_meas_us(&UE->timer_stats);
|
||||
|
||||
//printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now);
|
||||
//LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP);
|
||||
//if (t_diff > 1100)
|
||||
|
||||
|
||||
// LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff);
|
||||
//LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff);
|
||||
|
||||
//printf("Panos-D: Absolute time: %f", t_diff);
|
||||
|
||||
|
||||
stop_meas(&UE->timer_stats);
|
||||
t_diff = get_time_meas_us(&UE->timer_stats);
|
||||
//printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now);
|
||||
//LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP);
|
||||
//if (t_diff > 1100) LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff);
|
||||
//printf("Panos-D: Absolute time: %f", t_diff);
|
||||
|
||||
//UE->proc.ticking_var++;
|
||||
// pthread_cond_signal() //Send signal to ue_thread()?
|
||||
// We also need to somehow pass the information of SFN/SF
|
||||
}
|
||||
free(phy_stub_ticking);
|
||||
pthread_cond_destroy(&phy_stub_ticking->cond_ticking);
|
||||
pthread_mutex_destroy(&phy_stub_ticking->mutex_ticking);
|
||||
return 0;
|
||||
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int init_timer_thread(void) {
|
||||
//PHY_VARS_UE *UE=PHY_vars_UE_g[0];
|
||||
PHY_VARS_UE *UE=PHY_vars_UE_g[0][0];
|
||||
|
||||
@@ -827,7 +827,7 @@ int main( int argc, char **argv )
|
||||
|
||||
printf("NFAPI_MODE value: %d \n", nfapi_mode);
|
||||
|
||||
// Panos: Not sure if the following is needed here
|
||||
// Not sure if the following is needed here
|
||||
/*if (CONFIG_ISFLAGSET(CONFIG_ABORT)) {
|
||||
if (UE_flag == 0) {
|
||||
fprintf(stderr,"Getting configuration failed\n");
|
||||
@@ -938,29 +938,6 @@ int main( int argc, char **argv )
|
||||
printf("Before CC \n");
|
||||
|
||||
|
||||
|
||||
// Panos: From old version
|
||||
/*if (UE_flag==1) {
|
||||
PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**)*NB_UE_INST);
|
||||
for (int i=0; i<NB_UE_INST; i++) {
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
|
||||
PHY_vars_UE_g[i] = malloc(sizeof(PHY_VARS_UE*)*MAX_NUM_CCs);
|
||||
PHY_vars_UE_g[i][CC_id] = init_ue_vars(frame_parms[CC_id], i,abstraction_flag);
|
||||
|
||||
UE[CC_id] = PHY_vars_UE_g[i][CC_id];
|
||||
printf("PHY_vars_UE_g[inst][%d] = %p\n",CC_id,UE[CC_id]);
|
||||
|
||||
if (phy_test==1)
|
||||
UE[CC_id]->mac_enabled = 0;
|
||||
else
|
||||
UE[CC_id]->mac_enabled = 1;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
//NB_UE_INST=1;
|
||||
NB_INST=1;
|
||||
if(nfapi_mode == 3){
|
||||
@@ -1093,7 +1070,7 @@ int main( int argc, char **argv )
|
||||
printf("cannot create ITTI tasks\n");
|
||||
exit(-1); // need a softer mode
|
||||
}
|
||||
if(nfapi_mode==3){ //Panos: Here we should add another nfapi_mode for the case of Supervised LTE-D2D
|
||||
if(nfapi_mode==3){ // Here we should add another nfapi_mode for the case of Supervised LTE-D2D
|
||||
UE_config_stub_pnf();
|
||||
}
|
||||
printf("ITTI tasks created\n");
|
||||
@@ -1101,7 +1078,7 @@ int main( int argc, char **argv )
|
||||
|
||||
// init UE_PF_PO and mutex lock
|
||||
pthread_mutex_init(&ue_pf_po_mutex, NULL);
|
||||
memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*NUMBER_OF_UE_MAX*MAX_NUM_CCs);
|
||||
memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*MAX_MOBILES_PER_ENB*MAX_NUM_CCs);
|
||||
|
||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||
|
||||
@@ -1144,7 +1121,7 @@ int main( int argc, char **argv )
|
||||
{
|
||||
config_sync_var=0;
|
||||
wait_nfapi_init("main?");
|
||||
//Panos: Temporarily we will be using single set of threads for multiple UEs.
|
||||
// Temporarily we will be using single set of threads for multiple UEs.
|
||||
//init_UE_stub(1,eMBMS_active,uecap_xer_in,emul_iface);
|
||||
init_UE_stub_single_thread(NB_UE_INST,eMBMS_active,uecap_xer_in,emul_iface);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user