diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 7c077b3669d9548df113747286c9e4ee2b037e13..dddd2456391c850b47e7a8f1681a637eeb2de9a7 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -277,7 +277,7 @@ static void *UE_thread_synch(void *arg) { #endif } #ifdef EXMIMO - openair0_config(&openair0_cfg[card],1); + //openair0_config(&openair0_cfg[card],1); #endif } #ifdef USRP @@ -357,7 +357,7 @@ static void *UE_thread_synch(void *arg) { } #ifdef EXMIMO - openair0_config(&openair0_cfg[card],1); + //openair0_config(&openair0_cfg[card],1); #endif } #ifdef USRP @@ -368,7 +368,7 @@ static void *UE_thread_synch(void *arg) { #endif break; case pbch: - printf("Running initial sync\n"); + // printf("synch: Running initial sync\n"); // This is a hack to fix a bug when using USRP memset(PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0],0,1024); if (initial_sync(UE,UE->mode)==0) { @@ -399,7 +399,7 @@ static void *UE_thread_synch(void *arg) { LOG_I(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset); } - else { + else { // intial_synch if (openair_daq_vars.freq_offset >= 0) { openair_daq_vars.freq_offset += 100; @@ -408,6 +408,7 @@ static void *UE_thread_synch(void *arg) { else { openair_daq_vars.freq_offset *= -1; } + if (abs(openair_daq_vars.freq_offset) > 7500) { LOG_I(PHY,"[initial_sync] No cell synchronization found, abandoning\n"); mac_xface->macphy_exit("No cell synchronization found, abandoning"); @@ -421,8 +422,9 @@ static void *UE_thread_synch(void *arg) { for (i=0; i<openair0_cfg[card].rx_num_channels; i++) { openair0_cfg[card].rx_freq[i] = downlink_frequency[card][i]+openair_daq_vars.freq_offset; openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i]+openair_daq_vars.freq_offset; - openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB-USRP_GAIN_OFFSET; // 65 calibrated for USRP B210 @ 2.6 GHz #ifdef USRP + openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB-USRP_GAIN_OFFSET; // 65 calibrated for USRP B210 @ 2.6 GHz + switch(UE->lte_frame_parms.N_RB_DL) { case 6: openair0_cfg[card].rx_gain[i] -= 12; @@ -437,37 +439,37 @@ static void *UE_thread_synch(void *arg) { printf("Unknown number of RBs %d\n",UE->lte_frame_parms.N_RB_DL); break; } - printf("UE synch: setting RX gain (%d,%d) to %d\n",card,i,openair0_cfg[card].rx_gain[i]); + // printf("UE synch: setting RX gain (%d,%d) to %d\n",card,i,openair0_cfg[card].rx_gain[i]); #endif } #ifdef EXMIMO - openair0_config(&openair0_cfg[card],1); + //openair0_config(&openair0_cfg[card],1); + //rt_sleep_ns(FRAME_PERIOD); #endif - } + } #ifdef USRP #ifndef USRP_DEBUG openair0_set_frequencies(&openair0,&openair0_cfg[0]); // openair0_set_gains(&openair0,&openair0_cfg[0]); #endif -#else - #endif + + // openair0_dump_config(&openair0_cfg[0],UE_flag); - // openair0_dump_config(&openair0_cfg[0],UE_flag); - - // rt_sleep_ns(FRAME_PERIOD); - } // freq_offset - } // initial_sync=0 + // rt_sleep_ns(FRAME_PERIOD); + + } // freq_offset + } // initial_sync=0 break; case si: default: break; } vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH,0); - printf("Finished synch : Locking synch mutex (thread_sync)\n"); + if (pthread_mutex_lock(&UE->mutex_synch) != 0) { printf("[openair][SCHED][eNB] error locking mutex for UE synch\n"); } @@ -653,7 +655,7 @@ static void *UE_thread_rx(void *arg) { // This creates a 1ms reservation every 10ms period attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 1 * 800000; // each rx thread requires 1ms to finish its job + attr.sched_runtime = 1 * 500000; // each rx thread requires 1ms to finish its job attr.sched_deadline =1 * 1000000; // each rx thread will finish within 1ms attr.sched_period = 1 * 1000000; // each rx thread has a period of 1ms from the starting point @@ -1111,7 +1113,7 @@ void *UE_thread(void *arg) { // This creates a .25 ms reservation attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 0.25 * 1000000; + attr.sched_runtime = 0.1 * 1000000; attr.sched_deadline = 0.25 * 1000000; attr.sched_period = 0.5 * 1000000; @@ -1119,7 +1121,7 @@ void *UE_thread(void *arg) { // if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) { // perror("[MAIN_ENB_THREAD] pthread_setaffinity_np failed\n"); // } - + if (sched_setattr(0, &attr, flags) < 0 ){ perror("[SCHED] main UE thread: sched_setattr failed\n"); exit_fun("Nothing to add"); @@ -1339,15 +1341,19 @@ void *UE_thread(void *arg) { // wait until we can lock mutex_synch + printf("Locking mutex_synch (UE_thread)\n"); if (pthread_mutex_lock(&UE->mutex_synch) != 0) { LOG_E(PHY,"[SCHED][UE] error locking mutex for UE initial synch thread\n"); exit_fun("noting to add"); } else { + printf("Before getting frame IC %d (UE_thread)\n",UE->instance_cnt_synch); if (UE->instance_cnt_synch < 0) { wait_sync_cnt=0; + openair0_get_frame(0); + rt_sleep_ns(FRAME_PERIOD); // increment instance count for sync thread UE->instance_cnt_synch++; pthread_mutex_unlock(&UE->mutex_synch); @@ -1359,6 +1365,7 @@ void *UE_thread(void *arg) { else { wait_sync_cnt++; pthread_mutex_unlock(&UE->mutex_synch); + if (wait_sync_cnt>1000) exit_fun("waiting to long for synch thread"); else