From c0950c555d6b00c432a2f282672afc65d947cdd0 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr> Date: Fri, 24 Oct 2014 14:16:50 +0000 Subject: [PATCH] updated config files for band 7 for exmimo2 and USRP fixed bug in lte-softmodem for USRP and other minor updates other small fixes tested on EXMIMO and USRP git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5936 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair1/SCHED/defs.h | 2 + openair1/SCHED/phy_procedures_lte_eNb.c | 36 ++++++--- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 19 +++-- openair2/LAYER2/MAC/main.c | 1 + openair2/PHY_INTERFACE/defs.h | 2 + openair2/RRC/LITE/MESSAGES/asn1_msg.c | 7 +- openair2/RRC/LITE/rrc_eNB.c | 4 +- openair2/RRC/LITE/rrc_eNB_S1AP.c | 2 +- openair2/UTIL/LOG/vcd_signal_dumper.c | 2 +- .../CONF/enb.band7.exmimo2.conf | 14 ++-- .../CONF/enb.band7.usrpb210.conf | 34 ++++----- targets/RT/USER/Makefile | 4 +- targets/RT/USER/lte-softmodem.c | 75 +++++++++---------- 13 files changed, 115 insertions(+), 87 deletions(-) diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index 8f287ea2be..41507a5151 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -531,6 +531,8 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id, int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid); +int16_t get_target_ul_rx_power(module_id_t module_idP, uint8_t CC_id); + int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame, uint8_t subframe,uint8_t *harq_pid,uint8_t *round,uint8_t ul_flag); void ulsch_decoding_procedures(unsigned char last_slot, unsigned int i, PHY_VARS_eNB *phy_vars_eNB, unsigned char abstraction_flag); diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index ed4cc1dcad..6ddde6d7f9 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -367,6 +367,10 @@ int get_nCCE_offset(unsigned char L, int nCCE, int common_dci, unsigned short rn } } +int16_t get_target_ul_rx_power(module_id_t module_idP, uint8_t CC_id) { + return PHY_vars_eNB_g[module_idP][CC_id]->PHY_measurements_eNB[0].n0_power_tot_dBm; +} + #ifdef EMOS void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_eNB) { @@ -2914,15 +2918,6 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e stop_meas(&phy_vars_eNB->ulsch_demodulation_stats); - for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++) - //this is the RSSI per RB - phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = - dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]* - (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb*12)/ - phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) - - phy_vars_eNB->rx_total_gain_eNB_dB - - hundred_times_log10_NPRB[phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100; - start_meas(&phy_vars_eNB->ulsch_decoding_stats); if (abstraction_flag == 0) { ret = ulsch_decoding(phy_vars_eNB, @@ -3000,14 +2995,20 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e } if (ret == (1+MAX_TURBO_ITERATIONS)) { + + /* + if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round>0) { + dump_ulsch(phy_vars_eNB, sched_subframe, i); + mac_xface->macphy_exit("retransmission in error"); + } + */ + phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++; phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1; phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0; phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++; LOG_D(PHY,"[eNB][PUSCH %d] Increasing to round %d\n",harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round); - // dump_ulsch(phy_vars_eNB, sched_subframe, i); - // exit(-1); if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) { LOG_I(PHY,"[eNB %d][RAPROC] frame %d, subframe %d, UE %d: Error receiving ULSCH (Msg3), round %d/%d\n", @@ -3096,6 +3097,9 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors == ULSCH_max_consecutive_errors) { LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, removing UE\n", phy_vars_eNB->Mod_id,frame,subframe, i, phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors); + + mac_xface->macphy_exit("Consecutive error count reached"); + phy_vars_eNB->eNB_UE_stats[i].mode = PRACH; #ifdef OPENAIR2 /* mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id, @@ -3113,6 +3117,16 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->Mod_id,harq_pid, frame,subframe); + for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++) + //this is the RSSI per RB + phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = + dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]* + (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb*12)/ + phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) - + phy_vars_eNB->rx_total_gain_eNB_dB - + hundred_times_log10_NPRB[phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100 - + get_hundred_times_delta_IF_eNB(phy_vars_eNB,i,harq_pid)/100; + phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1; phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1; phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index f526ecf78c..483c1b87f5 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -571,6 +571,7 @@ void schedule_ulsch_rnti(module_id_t module_idP, int32_t buffer_occupancy=0; uint32_t cqi_req,cshift,ndi,mcs,rballoc,tpc; int32_t normalized_rx_power, target_rx_power=-85; + static int32_t tpc_accumulated=0; int n,CC_id; eNB_MAC_INST *eNB=&eNB_mac_inst[module_idP]; @@ -654,23 +655,27 @@ void schedule_ulsch_rnti(module_id_t module_idP, //compute the expected ULSCH RX power (for the stats) // this is the normalized RX power and this should be constant (regardless of mcs - //todo: put this function into mac_xface - normalized_rx_power = eNB_UE_stats->UL_rssi[0] - - mac_xface->get_hundred_times_delta_TF(module_idP,CC_id,rnti,harq_pid)/100; + normalized_rx_power = eNB_UE_stats->UL_rssi[0]; + //-mac_xface->get_hundred_times_delta_TF(module_idP,CC_id,rnti,harq_pid)/100; + //target_rx_power = mac_xface->get_target_ul_rx_power(module_idP,CC_id)+5; // this assumes accumulated tpc if (subframeP==0) { - if (normalized_rx_power>(target_rx_power+1)) + if (normalized_rx_power>(target_rx_power+1)) { tpc = 0; //-1 - else if (normalized_rx_power<(target_rx_power-1)) + tpc_accumulated--; + } + else if (normalized_rx_power<(target_rx_power-1)) { tpc = 2; //+1 + tpc_accumulated++; + } else tpc = 1; //0 } else tpc = 1; //0 - // LOG_I(MAC,"[eNB %d] ULSCH scheduler: harq_pid %d, Ndi %d, mcs %d, tpc %d, normalized/target rx power %d/%d\n",module_idP,harq_pid,ndi,mcs,tpc,normalized_rx_power,target_rx_power); - + LOG_D(MAC,"[eNB %d] ULSCH scheduler: subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",module_idP,subframeP,harq_pid,tpc,tpc_accumulated,normalized_rx_power,target_rx_power); + // new transmission if (round==0) { diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index cf9d134ede..f1812e0729 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -498,6 +498,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_ mac_xface->get_mu_mimo_mode = get_mu_mimo_mode; mac_xface->get_hundred_times_delta_TF = get_hundred_times_delta_IF_mac; + mac_xface->get_target_ul_rx_power = get_target_ul_rx_power; #ifdef Rel10 mac_xface->get_mch_sdu = get_mch_sdu; diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h index 0ef6fc5fd3..c1b301c0d7 100755 --- a/openair2/PHY_INTERFACE/defs.h +++ b/openair2/PHY_INTERFACE/defs.h @@ -310,6 +310,8 @@ typedef struct int16_t (*get_hundred_times_delta_TF) (module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid); + int16_t (*get_target_ul_rx_power) (module_id_t module_idP, uint8_t CC_id); + unsigned char is_cluster_head; unsigned char is_primary_cluster_head; unsigned char is_secondary_cluster_head; diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c index 074ca48ec6..90e0c4b8a0 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c @@ -106,6 +106,8 @@ int errno; # endif #endif +//#define XER_PRINT + typedef struct xer_sprint_string_s { char *string; @@ -1448,7 +1450,7 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id, //assign_enum(&physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled, // UplinkPowerControlDedicated__deltaMCS_Enabled_en1); physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled= UplinkPowerControlDedicated__deltaMCS_Enabled_en1; - physicalConfigDedicated2->uplinkPowerControlDedicated->accumulationEnabled = 1; // FALSE + physicalConfigDedicated2->uplinkPowerControlDedicated->accumulationEnabled = 1; // TRUE physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUCCH = 0; // 0 dB physicalConfigDedicated2->uplinkPowerControlDedicated->pSRS_Offset = 0; // 0 dB physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = CALLOC(1,sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient)); @@ -1590,6 +1592,9 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id, #endif +#ifdef XER_PRINT + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); +#endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg, buffer, diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index dacd0a85a1..05355002a8 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -2843,7 +2843,7 @@ int rrc_eNB_decode_ccch( rrcConnectionReestablishmentRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionReestablishmentRequest.criticalExtensions.choice.rrcConnectionReestablishmentRequest_r8; LOG_I(RRC, "[eNB %d] Frame %d UE %d: RRCConnectionReestablishmentRequest cause %s\n", enb_mod_idP, - frameP, + frameP, ue_mod_id, ((rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_otherFailure) ? "Other Failure" : (rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_handoverFailure) ? "Handover Failure" : "reconfigurationFailure")); @@ -2862,8 +2862,8 @@ int rrc_eNB_decode_ccch( }else { rrc_eNB_generate_RRCConnectionReestablishementReject(enb_mod_idP, frameP, ue_mod_id); } - break; */ + break; case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest: #ifdef RRC_MSG_PRINT LOG_F(RRC,"[MSG] RRC Connection Request\n"); diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index dcd525b014..44900bd57f 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -832,7 +832,7 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch return (-1); } else { - rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index); + //rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index); LOG_W(RRC, "[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n", instance, diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index e6b5367b9c..3e28aeafeb 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -245,7 +245,7 @@ RTIME start; # define VCD_POLL_DELAY (500) // Poll delay in micro-seconds # define VCD_MAX_WAIT_DELAY (200 * 1000) // Maximum data ready wait delay in micro-seconds -# define VCD_FIFO_NB_ELEMENTS (1 << 20) // Must be a power of 2 +# define VCD_FIFO_NB_ELEMENTS (1 << 24) // Must be a power of 2 # define VCD_FIFO_MASK (VCD_FIFO_NB_ELEMENTS - 1) typedef struct vcd_queue_user_data_s { diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf index 1a922a166b..26b6f31ef3 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf @@ -30,7 +30,7 @@ eNBs = tdd_config_s = 0; prefix_type = "NORMAL"; eutra_band = 7; - downlink_frequency = 2660000000L; + downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; N_RB_DL = 25; @@ -39,7 +39,7 @@ eNBs = nb_antennas_rx = 1; tx_gain = 20; rx_gain = 20; - prach_root = 22; + prach_root = 0; prach_config_index = 0; prach_high_speed = "DISABLE"; prach_zero_correlation = 1; @@ -57,7 +57,7 @@ eNBs = pusch_groupHoppingEnabled = "ENABLE"; pusch_groupAssignment = 0; pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; + pusch_nDMRS1 = 0; phich_duration = "NORMAL"; phich_resource = "ONESIXTH"; srs_enable = "DISABLE"; @@ -123,19 +123,19 @@ eNBs = log_config : { - global_log_level ="info"; + global_log_level ="debug"; global_log_verbosity ="medium"; hw_log_level ="debug"; hw_log_verbosity ="medium"; - phy_log_level ="info"; + phy_log_level ="debug"; phy_log_verbosity ="medium"; - mac_log_level ="info"; + mac_log_level ="debug"; mac_log_verbosity ="high"; rlc_log_level ="info"; rlc_log_verbosity ="medium"; pdcp_log_level ="info"; pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; + rrc_log_level ="debug"; rrc_log_verbosity ="medium"; }; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf index 2b9a3c5219..019d895350 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf @@ -30,31 +30,31 @@ eNBs = tdd_config_s = 0; prefix_type = "NORMAL"; eutra_band = 7; - downlink_frequency = 2660000000L; + downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antennas_tx = 1; nb_antennas_rx = 1; - tx_gain = 120; + tx_gain = 90; rx_gain = 135; - prach_root = 22; - prach_config_index = 3; + prach_root = 0; + prach_config_index = 0; prach_high_speed = "DISABLE"; - prach_zero_correlation = 0; - prach_freq_offset = 0; + prach_zero_correlation = 1; + prach_freq_offset = 2; pucch_delta_shift = 1; pucch_nRB_CQI = 1; pucch_nCS_AN = 0; pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; + pdsch_referenceSignalPower = -26; pdsch_p_b = 0; pusch_n_SB = 1; pusch_enable64QAM = "DISABLE"; pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 4; - pusch_groupHoppingEnabled = "DISABLE"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; pusch_groupAssignment = 0; pusch_sequenceHoppingEnabled = "DISABLE"; pusch_nDMRS1 = 1; @@ -66,9 +66,9 @@ eNBs = srs_ackNackST =; srs_MaxUpPts =;*/ - pusch_p0_Nominal = -95; - pusch_alpha = "AL08"; - pucch_p0_Nominal = -117; + pusch_p0_Nominal = -108; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; msg3_delta_Preamble = 6; pucch_deltaF_Format1 = "deltaF2"; pucch_deltaF_Format1b = "deltaF3"; @@ -76,16 +76,16 @@ eNBs = pucch_deltaF_Format2a = "deltaF0"; pucch_deltaF_Format2b = "deltaF0"; - rach_numberOfRA_Preambles = 52; + rach_numberOfRA_Preambles = 64; rach_preamblesGroupAConfig = "DISABLE"; /* rach_sizeOfRA_PreamblesGroupA = ; rach_messageSizeGroupA = ; rach_messagePowerOffsetGroupB = ; */ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -104; - rach_preambleTransMax = 6; + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; rach_raResponseWindowSize = 10; rach_macContentionResolutionTimer = 48; rach_maxHARQ_Msg3Tx = 4; @@ -125,7 +125,7 @@ eNBs = { global_log_level ="info"; global_log_verbosity ="medium"; - hw_log_level ="debug"; + hw_log_level ="info"; hw_log_verbosity ="medium"; phy_log_level ="info"; phy_log_verbosity ="medium"; diff --git a/targets/RT/USER/Makefile b/targets/RT/USER/Makefile index adcb9715a6..d2963de1b5 100644 --- a/targets/RT/USER/Makefile +++ b/targets/RT/USER/Makefile @@ -37,8 +37,8 @@ endif ifeq ($(DEBUG),1) CFLAGS += -g -ggdb -CFLAGS += -DRRC_MSG_PRINT -CFLAGS += -DPDCP_MSG_PRINT +#CFLAGS += -DRRC_MSG_PRINT +#CFLAGS += -DPDCP_MSG_PRINT endif ifdef ($(MSG_PRINT),1) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 8a4b07dcaf..cde85f16a2 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -171,9 +171,8 @@ static SEM *mutex; static long main_eNB_thread; static long main_ue_thread; -#ifdef USRP static SEM *sync_sem; // to sync rx & tx streaming -#endif + //static int sync_thread; #else pthread_t main_eNB_thread; @@ -181,12 +180,11 @@ pthread_t main_ue_thread; pthread_attr_t attr_dlsch_threads; struct sched_param sched_param_dlsch; -#ifndef EXMIMO pthread_cond_t sync_cond; pthread_mutex_t sync_mutex; - -#endif +int sync_var=-1; #endif + RTIME T0; pthread_attr_t attr_UE_init_synch; @@ -1258,9 +1256,9 @@ static void *eNB_thread(void *arg) RT_TASK *task; #endif #ifdef EXMIMO - unsigned char slot=1; -#else unsigned char slot=0; +#else + unsigned char slot=1; #endif int frame=0; int CC_id; @@ -1283,10 +1281,12 @@ static void *eNB_thread(void *arg) hw_subframe = 0; #endif + /* #if defined(ENABLE_ITTI) - /* Wait for eNB application initialization to be complete (eNB registration to MME) */ + // Wait for eNB application initialization to be complete (eNB registration to MME) wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB); #endif + */ #ifdef RTAI task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF); @@ -1313,17 +1313,16 @@ static void *eNB_thread(void *arg) timing_info.time_avg = 0; timing_info.n_samples = 0; -#ifndef EXMIMO - printf("waiting for USRP sync (eNB_thread)\n"); + printf("waiting for sync (eNB_thread)\n"); #ifdef RTAI rt_sem_wait(sync_sem); #else pthread_mutex_lock(&sync_mutex); - pthread_cond_wait(&sync_cond, &sync_mutex); + while (sync_var<0) + pthread_cond_wait(&sync_cond, &sync_mutex); pthread_mutex_unlock(&sync_mutex); #endif // printf("starting eNB thread @ %llu\n",get_usrp_time(&openair0)); -#endif while (!oai_exit) { @@ -1634,7 +1633,8 @@ static void *UE_thread_synch(void *arg) { pthread_mutex_lock(&sync_mutex); printf("Locked sync_mutex, waiting (UE_sync_thread)\n"); - pthread_cond_wait(&sync_cond, &sync_mutex); + while (sync_var<0) + pthread_cond_wait(&sync_cond, &sync_mutex); pthread_mutex_unlock(&sync_mutex); printf("unlocked sync_mutex (UE_sync_thread)\n"); #endif @@ -1814,7 +1814,8 @@ static void *UE_thread_rx(void *arg) { #else pthread_mutex_lock(&sync_mutex); printf("Locked sync_mutex, waiting (UE_thread_rx)\n"); - pthread_cond_wait(&sync_cond, &sync_mutex); + while (sync_var<0) + pthread_cond_wait(&sync_cond, &sync_mutex); pthread_mutex_unlock(&sync_mutex); printf("unlocked sync_mutex, waiting (UE_thread_rx)\n"); #endif @@ -1906,7 +1907,8 @@ static void *UE_thread(void *arg) { #else pthread_mutex_lock(&sync_mutex); printf("Locked sync_mutex, waiting (UE_thread)\n"); - pthread_cond_wait(&sync_cond, &sync_mutex); + while (sync_var<0) + pthread_cond_wait(&sync_cond, &sync_mutex); pthread_mutex_unlock(&sync_mutex); printf("unlocked sync_mutex, waiting (UE_thread)\n"); #endif @@ -3176,25 +3178,23 @@ int main(int argc, char **argv) { } else printf("mutex=%p\n",mutex); -#ifndef EXMIMO + sync_sem = rt_typed_sem_init(nam2num("syncsem"), 0, BIN_SEM|FIFO_Q); if(sync_sem == 0) printf("error init sync semphore\n"); -#endif + #else -#ifndef EXMIMO pthread_cond_init(&sync_cond,NULL); pthread_mutex_init(&sync_mutex, NULL); -#endif #endif - /*#if defined(ENABLE_ITTI) +#if defined(ENABLE_ITTI) // Wait for eNB application initialization to be complete (eNB registration to MME) if (UE_flag==0) { printf("Waiting for eNB application to be ready\n"); wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB); } - #endif*/ +#endif // this starts the DMA transfers @@ -3207,24 +3207,16 @@ int main(int argc, char **argv) { #ifdef XFORMS if (do_forms==1) { fl_initialize (&argc, argv, NULL, 0, 0); - form_stats = create_form_stats_form(); - if (UE_flag==1) { - form_ue[UE_id] = create_lte_phy_scope_ue(); - sprintf (title, "LTE DL SCOPE UE"); - fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title); - } else { + + if (UE_flag==0) { form_stats_l2 = create_form_stats_form(); + fl_show_form (form_stats_l2->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "l2 stats"); + form_stats = create_form_stats_form(); + fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats"); for(UE_id=0;UE_id<scope_enb_num_ue;UE_id++) { form_enb[UE_id] = create_lte_phy_scope_enb(); sprintf (title, "UE%d LTE UL SCOPE eNB",UE_id+1); fl_show_form (form_enb[UE_id]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title); - } - } - fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats"); - if (UE_flag==0) { - fl_show_form (form_stats_l2->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "l2 stats"); - - for (UE_id=0;UE_id<scope_enb_num_ue;UE_id++) { if (otg_enabled) { fl_set_button(form_enb[UE_id]->button_0,1); fl_set_object_label(form_enb[UE_id]->button_0,"DL Traffic ON"); @@ -3236,6 +3228,13 @@ int main(int argc, char **argv) { } } else { + form_stats = create_form_stats_form(); + fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats"); + UE_id = 0; + form_ue[UE_id] = create_lte_phy_scope_ue(); + sprintf (title, "LTE DL SCOPE UE"); + fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title); + if (openair_daq_vars.use_ia_receiver) { fl_set_button(form_ue[UE_id]->button_0,1); fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver ON"); @@ -3326,21 +3325,23 @@ int main(int argc, char **argv) { // Sleep to allow all threads to setup //sleep(1); - #ifndef EXMIMO #ifndef USRP_DEBUG openair0.trx_start_func(&openair0); // printf("returning from usrp start streaming: %llu\n",get_usrp_time(&openair0)); #endif +#endif + #ifdef RTAI rt_sem_signal(sync_sem); #else pthread_mutex_lock(&sync_mutex); printf("Sending sync ...\n"); + sync_var=0; pthread_cond_broadcast(&sync_cond); pthread_mutex_unlock(&sync_mutex); #endif -#endif + // wait for end of program printf("TYPE <CTRL-C> TO TERMINATE\n"); //getchar(); @@ -3415,7 +3416,6 @@ int main(int argc, char **argv) { //cleanup_pdcp_thread(); #endif -#ifndef EXMIMO #ifdef RTAI rt_sem_delete(sync_sem); stop_rt_timer(); @@ -3423,7 +3423,6 @@ int main(int argc, char **argv) { pthread_cond_destroy(&sync_cond); pthread_mutex_destroy(&sync_mutex); #endif -#endif #ifdef EXMIMO printf("stopping card\n"); -- GitLab