fixed some bugs that prevented lte-softmodem to exit properly
eNB stats are printed on screen on program exit git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5870 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -60,5 +60,5 @@ void display_backtrace(void)
|
|||||||
void backtrace_handle_signal(siginfo_t *info)
|
void backtrace_handle_signal(siginfo_t *info)
|
||||||
{
|
{
|
||||||
display_backtrace();
|
display_backtrace();
|
||||||
exit(EXIT_FAILURE);
|
//exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ int signal_handle(int *end)
|
|||||||
return ret;
|
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
|
/* Real-time signals are non constant and are therefore not suitable for
|
||||||
* use in switch.
|
* use in switch.
|
||||||
|
|||||||
@@ -169,8 +169,8 @@ unsigned char scope_enb_num_ue = 1;
|
|||||||
static SEM *mutex;
|
static SEM *mutex;
|
||||||
//static CND *cond;
|
//static CND *cond;
|
||||||
|
|
||||||
static int main_eNB_thread;
|
static long main_eNB_thread;
|
||||||
static int main_ue_thread;
|
static long main_ue_thread;
|
||||||
#ifdef USRP
|
#ifdef USRP
|
||||||
static SEM *sync_sem; // to sync rx & tx streaming
|
static SEM *sync_sem; // to sync rx & tx streaming
|
||||||
#endif
|
#endif
|
||||||
@@ -438,26 +438,27 @@ static void set_latency_target(void)
|
|||||||
void reset_stats(FL_OBJECT *button, long arg) {
|
void reset_stats(FL_OBJECT *button, long arg) {
|
||||||
int i,j,k;
|
int i,j,k;
|
||||||
PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[0][0];
|
PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[0][0];
|
||||||
for (k=0;k<8;k++) {//harq_processes
|
for (i=0;i<NUMBER_OF_UE_MAX;i++) {
|
||||||
for (j=0;j<phy_vars_eNB->dlsch_eNB[i][0]->Mdlharq;j++) {
|
for (k=0;k<8;k++) {//harq_processes
|
||||||
phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK[k][j]=0;
|
for (j=0;j<phy_vars_eNB->dlsch_eNB[i][0]->Mdlharq;j++) {
|
||||||
phy_vars_eNB->eNB_UE_stats[i].dlsch_ACK[k][j]=0;
|
phy_vars_eNB->eNB_UE_stats[i].dlsch_NAK[k][j]=0;
|
||||||
phy_vars_eNB->eNB_UE_stats[i].dlsch_trials[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].dlsch_l2_errors[k]=0;
|
||||||
phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
|
phy_vars_eNB->eNB_UE_stats[i].ulsch_errors[k]=0;
|
||||||
for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->Mdlharq;j++) {
|
phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
|
||||||
phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[k][j]=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_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_errors[k][j]=0;
|
||||||
phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[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) {
|
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);
|
printf("Scope thread has priority %d\n",sched_param.sched_priority);
|
||||||
|
|
||||||
/*
|
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||||
if (UE_flag==1)
|
if (UE_flag==1)
|
||||||
UE_stats = fopen("UE_stats.txt", "w");
|
UE_stats = fopen("UE_stats.txt", "w");
|
||||||
else
|
else
|
||||||
eNB_stats = fopen("eNB_stats.txt", "w");
|
eNB_stats = fopen("eNB_stats.txt", "w");
|
||||||
*/
|
#endif
|
||||||
|
|
||||||
while (!oai_exit) {
|
while (!oai_exit) {
|
||||||
if (UE_flag==1) {
|
if (UE_flag==1) {
|
||||||
@@ -487,10 +488,7 @@ static void *scope_thread(void *arg) {
|
|||||||
# endif
|
# endif
|
||||||
dump_ue_stats (PHY_vars_UE_g[0][0], stats_buffer, 0, mode,rx_input_level_dBm);
|
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);
|
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_scope_UE(form_ue[UE_id],
|
||||||
PHY_vars_UE_g[UE_id][0],
|
PHY_vars_UE_g[UE_id][0],
|
||||||
eNB_id,
|
eNB_id,
|
||||||
@@ -499,15 +497,16 @@ static void *scope_thread(void *arg) {
|
|||||||
} else {
|
} else {
|
||||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||||
len =
|
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
|
# endif
|
||||||
dump_eNB_l2_stats (stats_buffer, 0);
|
dump_eNB_l2_stats (stats_buffer, 0);
|
||||||
fl_set_object_label(form_stats_l2->stats_text, stats_buffer);
|
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++) {
|
for(UE_id=0;UE_id<scope_enb_num_ue;UE_id++) {
|
||||||
phy_scope_eNB(form_enb[UE_id],
|
phy_scope_eNB(form_enb[UE_id],
|
||||||
PHY_vars_eNB_g[eNB_id][0],
|
PHY_vars_eNB_g[eNB_id][0],
|
||||||
@@ -519,10 +518,24 @@ static void *scope_thread(void *arg) {
|
|||||||
//usleep(100000); // 100 ms
|
//usleep(100000); // 100 ms
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("%s",stats_buffer);
|
||||||
|
|
||||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||||
fclose (UE_stats);
|
if (UE_flag==1) {
|
||||||
fclose (eNB_stats);
|
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
|
# endif
|
||||||
|
|
||||||
pthread_exit((void*)arg);
|
pthread_exit((void*)arg);
|
||||||
@@ -1336,21 +1349,15 @@ static void *eNB_thread(void *arg)
|
|||||||
first_run=0;
|
first_run=0;
|
||||||
if (diff<0)
|
if (diff<0)
|
||||||
diff = diff +150;
|
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)))) {
|
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
|
// 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++;
|
slot++;
|
||||||
if (frame > 0) {
|
//if (frame > 0)
|
||||||
exit_fun("[HW][eNB] missed slot");
|
exit_fun("[HW][eNB] missed slot");
|
||||||
}
|
|
||||||
if (slot==20){
|
|
||||||
slot=0;
|
|
||||||
frame++;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
if (diff>8)
|
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);
|
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++) {
|
for(CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
||||||
rf_map[CC_id].card=0;
|
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
|
// connect the TX/RX buffers
|
||||||
@@ -3253,7 +3260,7 @@ int main(int argc, char **argv) {
|
|||||||
// start the main thread
|
// start the main thread
|
||||||
if (UE_flag == 1) {
|
if (UE_flag == 1) {
|
||||||
init_UE_threads();
|
init_UE_threads();
|
||||||
|
sleep(1);
|
||||||
#ifdef RTAI
|
#ifdef RTAI
|
||||||
main_ue_thread = rt_thread_create(UE_thread, NULL, 100000000);
|
main_ue_thread = rt_thread_create(UE_thread, NULL, 100000000);
|
||||||
#else
|
#else
|
||||||
@@ -3277,9 +3284,10 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
if (multi_thread>0) {
|
if (multi_thread>0) {
|
||||||
init_eNB_proc();
|
init_eNB_proc();
|
||||||
|
sleep(1);
|
||||||
LOG_D(HW,"[lte-softmodem.c] eNB threads created\n");
|
LOG_D(HW,"[lte-softmodem.c] eNB threads created\n");
|
||||||
}
|
}
|
||||||
printf("Creating eNB_thread \n");
|
printf("Creating main eNB_thread \n");
|
||||||
#ifdef RTAI
|
#ifdef RTAI
|
||||||
main_eNB_thread = rt_thread_create(eNB_thread, NULL, OPENAIR_THREAD_STACK_SIZE);
|
main_eNB_thread = rt_thread_create(eNB_thread, NULL, OPENAIR_THREAD_STACK_SIZE);
|
||||||
#else
|
#else
|
||||||
@@ -3295,7 +3303,7 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sleep to allow all threads to setup
|
// Sleep to allow all threads to setup
|
||||||
sleep(5);
|
sleep(1);
|
||||||
|
|
||||||
|
|
||||||
#ifdef USRP
|
#ifdef USRP
|
||||||
|
|||||||
Reference in New Issue
Block a user