diff --git a/common/utils/itti/backtrace.c b/common/utils/itti/backtrace.c index d36514132edd8b89b62778fc9cddd3cf63a420f6..e995364c601de2ea0662efea1879724eac2e0841 100644 --- a/common/utils/itti/backtrace.c +++ b/common/utils/itti/backtrace.c @@ -60,5 +60,5 @@ void display_backtrace(void) void backtrace_handle_signal(siginfo_t *info) { display_backtrace(); - exit(EXIT_FAILURE); + //exit(EXIT_FAILURE); } diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c index 0c9cf4c73a95ca38716c8cc85a69acd12afd70f5..096024bb0d12dff28b34e467d133a03f37da0338 100644 --- a/common/utils/itti/signals.c +++ b/common/utils/itti/signals.c @@ -112,7 +112,7 @@ int signal_handle(int *end) return ret; } -// printf("Received signal %d\n", info.si_signo); + printf("Received signal %d\n", info.si_signo); /* Real-time signals are non constant and are therefore not suitable for * use in switch. diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index dc92d6e91dc7a18b7f918d3e8f3ec26e1534bac2..5b889e91f9c4b43ee48c2c2dbbb2c533b93b7927 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -169,8 +169,8 @@ unsigned char scope_enb_num_ue = 1; static SEM *mutex; //static CND *cond; -static int main_eNB_thread; -static int main_ue_thread; +static long main_eNB_thread; +static long main_ue_thread; #ifdef USRP static SEM *sync_sem; // to sync rx & tx streaming #endif @@ -438,26 +438,27 @@ static void set_latency_target(void) void reset_stats(FL_OBJECT *button, long arg) { int i,j,k; PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[0][0]; - for (k=0;k<8;k++) {//harq_processes - for (j=0;j<phy_vars_eNB->dlsch_eNB[i][0]->Mdlharq;j++) { - phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK[k][j]=0; - phy_vars_eNB->eNB_UE_stats[i].dlsch_ACK[k][j]=0; - phy_vars_eNB->eNB_UE_stats[i].dlsch_trials[k][j]=0; - } - phy_vars_eNB->eNB_UE_stats[i].dlsch_l2_errors[k]=0; - phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[k]=0; - phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0; - for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->Mdlharq;j++) { - phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[k][j]=0; + for (i=0;i<NUMBER_OF_UE_MAX;i++) { + for (k=0;k<8;k++) {//harq_processes + for (j=0;j<phy_vars_eNB->dlsch_eNB[i][0]->Mdlharq;j++) { + phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK[k][j]=0; + phy_vars_eNB->eNB_UE_stats[i].dlsch_ACK[k][j]=0; + phy_vars_eNB->eNB_UE_stats[i].dlsch_trials[k][j]=0; + } + phy_vars_eNB->eNB_UE_stats[i].dlsch_l2_errors[k]=0; + phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[k]=0; + phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0; + for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->Mdlharq;j++) { + phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[k][j]=0; phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[k][j]=0; phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[k][j]=0; phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[k][j]=0; + } } + phy_vars_eNB->eNB_UE_stats[i].dlsch_sliding_cnt=0; + phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK_round0=0; + phy_vars_eNB->eNB_UE_stats[i].dlsch_mcs_offset=0; } - phy_vars_eNB->eNB_UE_stats[i].dlsch_sliding_cnt=0; - phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK_round0=0; - phy_vars_eNB->eNB_UE_stats[i].dlsch_mcs_offset=0; - } static void *scope_thread(void *arg) { @@ -473,12 +474,12 @@ static void *scope_thread(void *arg) { printf("Scope thread has priority %d\n",sched_param.sched_priority); - /* - if (UE_flag==1) +# ifdef ENABLE_XFORMS_WRITE_STATS + if (UE_flag==1) UE_stats = fopen("UE_stats.txt", "w"); - else + else eNB_stats = fopen("eNB_stats.txt", "w"); - */ +#endif while (!oai_exit) { if (UE_flag==1) { @@ -487,10 +488,7 @@ static void *scope_thread(void *arg) { # endif dump_ue_stats (PHY_vars_UE_g[0][0], stats_buffer, 0, mode,rx_input_level_dBm); fl_set_object_label(form_stats->stats_text, stats_buffer); -# ifdef ENABLE_XFORMS_WRITE_STATS - rewind (UE_stats); - fwrite (stats_buffer, 1, len, UE_stats); -# endif + phy_scope_UE(form_ue[UE_id], PHY_vars_UE_g[UE_id][0], eNB_id, @@ -499,15 +497,16 @@ static void *scope_thread(void *arg) { } else { # ifdef ENABLE_XFORMS_WRITE_STATS len = -# endif - dump_eNB_stats (PHY_vars_eNB_g[0][0], stats_buffer, 0); - fl_set_object_label(form_stats->stats_text, stats_buffer); -# ifdef ENABLE_XFORMS_WRITE_STATS - rewind (eNB_stats); - fwrite (stats_buffer, 1, len, eNB_stats); # endif dump_eNB_l2_stats (stats_buffer, 0); fl_set_object_label(form_stats_l2->stats_text, stats_buffer); + +# ifdef ENABLE_XFORMS_WRITE_STATS + len = +# endif + dump_eNB_stats (PHY_vars_eNB_g[0][0], stats_buffer, 0); + fl_set_object_label(form_stats->stats_text, stats_buffer); + for(UE_id=0;UE_id<scope_enb_num_ue;UE_id++) { phy_scope_eNB(form_enb[UE_id], PHY_vars_eNB_g[eNB_id][0], @@ -519,10 +518,24 @@ static void *scope_thread(void *arg) { //usleep(100000); // 100 ms sleep(1); } + + printf("%s",stats_buffer); # ifdef ENABLE_XFORMS_WRITE_STATS - fclose (UE_stats); - fclose (eNB_stats); + if (UE_flag==1) { + if (UE_stats) { + rewind (UE_stats); + fwrite (stats_buffer, 1, len, UE_stats); + fclose (UE_stats); + } + } + else { + if (eNB_stats) { + rewind (eNB_stats); + fwrite (stats_buffer, 1, len, eNB_stats); + fclose (eNB_stats); + } + } # endif pthread_exit((void*)arg); @@ -1336,21 +1349,15 @@ static void *eNB_thread(void *arg) first_run=0; if (diff<0) diff = diff +150; - LOG_I(HW,"eNB Frame %d, time %llu: diff %d\n",frame, rt_get_time_ns(), diff); + LOG_I(HW,"eNB Frame %d, time %llu: slot %d, hw_slot %d, diff %d\n",frame, rt_get_time_ns(), slot, hw_slot, diff); } if (((slot%2==0) && (diff < (-14))) || ((slot%2==1) && (diff < (-7)))) { // at the eNB, even slots have double as much time since most of the processing is done here and almost nothing in odd slots - LOG_D(HW,"eNB Frame %d, time %llu: missed slot, proceeding with next one (slot %d, hw_slot %d, diff %d)\n",frame, rt_get_time_ns(), slot, hw_slot, diff); + LOG_D(HW,"eNB Frame %d, time %llu: missed slot, proceeding with next one (slot %d, hw_slot %d, mbox_current %d, mbox_target %d, diff %d)\n",frame, rt_get_time_ns(), slot, hw_slot, mbox_current, mbox_target, diff); slot++; - if (frame > 0) { - exit_fun("[HW][eNB] missed slot"); - } - if (slot==20){ - slot=0; - frame++; - } - continue; + //if (frame > 0) + exit_fun("[HW][eNB] missed slot"); } if (diff>8) LOG_D(HW,"eNB Frame %d, time %llu: skipped slot, waiting for hw to catch up (slot %d, hw_slot %d, mbox_current %d, mbox_target %d, diff %d)\n",frame, rt_get_time_ns(), slot, hw_slot, mbox_current, mbox_target, diff); @@ -3079,7 +3086,7 @@ int main(int argc, char **argv) { for(CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { rf_map[CC_id].card=0; - rf_map[CC_id].chain=CC_id; + rf_map[CC_id].chain=CC_id+1; } // connect the TX/RX buffers @@ -3253,7 +3260,7 @@ int main(int argc, char **argv) { // start the main thread if (UE_flag == 1) { init_UE_threads(); - + sleep(1); #ifdef RTAI main_ue_thread = rt_thread_create(UE_thread, NULL, 100000000); #else @@ -3277,9 +3284,10 @@ int main(int argc, char **argv) { if (multi_thread>0) { init_eNB_proc(); + sleep(1); LOG_D(HW,"[lte-softmodem.c] eNB threads created\n"); } - printf("Creating eNB_thread \n"); + printf("Creating main eNB_thread \n"); #ifdef RTAI main_eNB_thread = rt_thread_create(eNB_thread, NULL, OPENAIR_THREAD_STACK_SIZE); #else @@ -3295,7 +3303,7 @@ int main(int argc, char **argv) { } // Sleep to allow all threads to setup - sleep(5); + sleep(1); #ifdef USRP