From a026c87bbe6cf5cb530316b481701a361fee1580 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr> Date: Fri, 11 Apr 2014 09:56:55 +0000 Subject: [PATCH] updating EXMIMO2 firmware (corresponding to r5585 of openair0) and driver updating emos-raw (seperate thread for logfile, GPS supported again) small cosmetic changes in openair1 git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5241 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../LTE/IMPORT_FILTER/struct_template_new.m | 2 + openair1/PHY/LTE_TRANSPORT/dci_tools.c | 2 +- openair1/PHY/LTE_TRANSPORT/initial_sync.c | 10 +- openair1/PHY/LTE_TRANSPORT/print_stats.c | 9 +- openair1/PHY/TOOLS/defs.h | 7 +- openair1/PHY/impl_defs_top.h | 6 +- openair1/SCHED/phy_procedures_lte_eNb.c | 12 +- openair1/SCHED/phy_procedures_lte_ue.c | 17 +- openair1/SIMULATION/RF/dac.c | 1 + openair1/SIMULATION/TOOLS/defs.h | 2 +- targets/ARCH/EXMIMO/DEFS/openair_device.h | 4 +- .../ARCH/EXMIMO/DRIVER/eurecom/module_main.c | 24 +- .../ARCH/EXMIMO/USERSPACE/LIB/gain_control.c | 2 - .../ARCH/EXMIMO/USERSPACE/LIB/gain_control.h | 8 +- .../OAI_FW_INIT/sdr_expressmimo2_v10 | Bin 203231 -> 226928 bytes targets/RTAI/USER/Makefile | 7 +- targets/RTAI/USER/emos-raw.c | 214 +++++++++++++----- 17 files changed, 223 insertions(+), 104 deletions(-) diff --git a/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m b/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m index 8e4946e57b..dd0a84560a 100644 --- a/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m +++ b/openair1/EMOS/LTE/IMPORT_FILTER/struct_template_new.m @@ -44,6 +44,8 @@ phy_measurements_struct = struct(... 'n_adj_cells_id', uint32(zeros(1,6)),... 'rsrq', int32(zeros(1,7)),... 'rsrp', int32(zeros(1,7)),... + 'rsrp_filtered', single(zeros(1,7)),... + 'rsrq_filtered', single(zeros(1,7)),... 'n0_power', uint32(zeros(1,NB_ANTENNAS_RX)),... 'n0_power_dB', uint16(zeros(1,NB_ANTENNAS_RX)),... 'n0_power_tot', uint32(0),... diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 920ce8c479..cb28ae488f 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -1582,7 +1582,7 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) { break; case format1E_2A_M10PRB: - msg("DCI format1E_2A_M10PRB, rnti %x (%8x): harq_pid %d, rah %d, rb_alloc %x, mcs %d, rv %d, tpmi %d, ndi %d, dl_power_offset %d\n", + LOG_D(PHY,"DCI format1E_2A_M10PRB, rnti %x (%8x): harq_pid %d, rah %d, rb_alloc %x, mcs %d, rv %d, tpmi %d, ndi %d, dl_power_offset %d\n", dci->rnti, ((uint32_t *)&dci->dci_pdu)[0], ((DCI1E_5MHz_2A_M10PRB_TDD_t *)&dci->dci_pdu[0])->harq_pid, diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index 8b412d9e04..c427cf27de 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -44,8 +44,9 @@ #include "SCHED/extern.h" #include "defs.h" #include "extern.h" - - +#ifdef EXMIMO +#include "gain_control.h" +#endif //#define DEBUG_INITIAL_SYNCH @@ -270,9 +271,12 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) { LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] ); #endif +#ifdef EXMIMO if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) && (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) ) - phy_adjust_gain(phy_vars_ue,0); + //phy_adjust_gain(phy_vars_ue,0); + gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0); +#endif // SSS detection diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c index 05d82bee5d..3db7055ab9 100644 --- a/openair1/PHY/LTE_TRANSPORT/print_stats.c +++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c @@ -95,9 +95,9 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t #else #ifdef EXMIMO #ifdef DRIVER2013 - len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (rf_mode %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, phy_vars_ue->rx_gain_mode[0],p_exmimo_config->rf.rx_gain[0][0]); + len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, (p_exmimo_config->rf.rf_mode[0]& LNAGAINMASK) >> 14,p_exmimo_config->rf.rx_gain[0][0]); #else - len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (rf_mode %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, phy_vars_ue->rx_gain_mode[0],exmimo_pci_interface->rf.rx_gain00); + len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, (p_exmimo_config->rf.rf_mode[0]& LNAGAINMASK) >> 14,exmimo_pci_interface->rf.rx_gain00); #endif #else len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB\n",phy_vars_ue->rx_total_gain_dB); @@ -199,6 +199,11 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %d, RSSI %d, RSRQ[0] %d\n",phy_vars_ue->PHY_measurements.rsrp[0], phy_vars_ue->PHY_measurements.rssi, phy_vars_ue->PHY_measurements.rsrq[0]); len += sprintf(&buffer[len], "[UE PROC] Transmission Mode %d (mode1_flag %d)\n",phy_vars_ue->transmission_mode[eNB],phy_vars_ue->lte_frame_parms.mode1_flag); + len += sprintf(&buffer[len], "[UE PROC] PBCH err conseq %d, PBCH error total %d, PBCH FER %d\n", + phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_errors_conseq, + phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_errors, + phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_fer); + if (phy_vars_ue->transmission_mode[eNB] == 6) len += sprintf(&buffer[len], "[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB\n",eNB,phy_vars_ue->PHY_measurements.precoded_cqi_dB[eNB][0]); if (phy_vars_ue->dlsch_ue[0] && phy_vars_ue->dlsch_ue[0][0] && phy_vars_ue->dlsch_ue[0][1]) { diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h index 91547fcd04..641c623aea 100644 --- a/openair1/PHY/TOOLS/defs.h +++ b/openair1/PHY/TOOLS/defs.h @@ -7,13 +7,8 @@ * @{ */ - -#ifndef NO_OPENAIR1 -#include "PHY/defs.h" -#else + #include <stdint.h> -#define msg printf -#endif #ifdef __SSE2__ #include <emmintrin.h> diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h index 17d46e6b15..cf86eb5aa6 100755 --- a/openair1/PHY/impl_defs_top.h +++ b/openair1/PHY/impl_defs_top.h @@ -171,9 +171,9 @@ #ifdef EXMIMO -#define TARGET_RX_POWER 40 // Target digital power for the AGC -#define TARGET_RX_POWER_MAX 65 // Maximum digital power, such that signal does not saturate (value found by simulation) -#define TARGET_RX_POWER_MIN 30 // Minimum digital power, anything below will be discarded (value found by simulation) +#define TARGET_RX_POWER 55 // Target digital power for the AGC +#define TARGET_RX_POWER_MAX 55 // Maximum digital power, such that signal does not saturate (value found by simulation) +#define TARGET_RX_POWER_MIN 50 // Minimum digital power, anything below will be discarded (value found by simulation) #else #define TARGET_RX_POWER 50 // Target digital power for the AGC #define TARGET_RX_POWER_MAX 65 // Maximum digital power, such that signal does not saturate (value found by simulation) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 40e7557892..d2c6209ac5 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -541,7 +541,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) { BCCH_alloc_pdu.type = 1; BCCH_alloc_pdu.vrb_type = 0; BCCH_alloc_pdu.rballoc = computeRIV(25,10,3); - BCCH_alloc_pdu.ndi = 1; + BCCH_alloc_pdu.ndi = phy_vars_eNB->frame&1; BCCH_alloc_pdu.rv = 1; BCCH_alloc_pdu.mcs = 1; BCCH_alloc_pdu.harq_pid = 0; @@ -586,7 +586,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) { DLSCH_alloc_pdu.harq_pid = 0; DLSCH_alloc_pdu.mcs = openair_daq_vars.target_ue_dl_mcs; //DLSCH_alloc_pdu.mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28); - DLSCH_alloc_pdu.ndi = 1; + DLSCH_alloc_pdu.ndi = phy_vars_eNB->frame&1; DLSCH_alloc_pdu.rv = 0; memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t)); @@ -620,7 +620,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) { DLSCH_alloc_pdu1E.tpmi = 5; //5=use feedback DLSCH_alloc_pdu1E.rv = 0; - DLSCH_alloc_pdu1E.ndi = 1; + DLSCH_alloc_pdu1E.ndi = phy_vars_eNB->frame&1; //DLSCH_alloc_pdu1E.mcs = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]]; //DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28); DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs; @@ -687,7 +687,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) { UL_alloc_pdu.hopping = 0; UL_alloc_pdu.rballoc = computeRIV(25,2,openair_daq_vars.ue_ul_nb_rb); UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs; - UL_alloc_pdu.ndi = 1; + UL_alloc_pdu.ndi = phy_vars_eNB->frame&1; UL_alloc_pdu.TPC = 0; UL_alloc_pdu.cshift = 0; UL_alloc_pdu.dai = 0; @@ -707,7 +707,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB) { else UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb); UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs; - UL_alloc_pdu.ndi = 1; + UL_alloc_pdu.ndi = phy_vars_eNB->frame&1; UL_alloc_pdu.TPC = 0; if ((cooperation_flag==0) || (cooperation_flag==1)) UL_alloc_pdu.cshift = 0; @@ -1377,11 +1377,13 @@ void phy_procedures_eNB_TX(unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,ui #else DCI_pdu = &DCI_pdu_tmp; #ifdef EMOS + /* if (((phy_vars_eNB->frame%1024)%3 == 0) && (next_slot == 0)) { //openair_daq_vars.target_ue_dl_mcs = (openair_daq_vars.target_ue_dl_mcs+1)%28; openair_daq_vars.target_ue_dl_mcs = taus()%28; LOG_D(PHY,"[MYEMOS] frame %d, increasing MCS to %d\n",phy_vars_eNB->frame,openair_daq_vars.target_ue_dl_mcs); } + */ /* if (phy_vars_eNB->frame > 28000) { LOG_E(PHY,"More that 28000 frames reached! Exiting!\n"); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 39d5c6ebf7..9ba21bf93f 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -54,6 +54,7 @@ #ifdef EXMIMO #ifdef DRIVER2013 #include "openair0_lib.h" +#include "gain_control.h" extern int card; #else #include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h" @@ -1480,11 +1481,13 @@ void lte_ue_measurement_procedures(uint8_t last_slot, uint16_t l, PHY_VARS_UE *p if ((last_slot==1) && (l==(4-frame_parms->Ncp))) { // AGC - +#ifdef EXMIMO if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) && (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) ) - phy_adjust_gain (phy_vars_ue,0); - + //phy_adjust_gain (phy_vars_ue,0); + gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id],0); +#endif + eNB_id = 0; if (abstraction_flag == 0) @@ -2284,7 +2287,11 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v openair_daq_vars.use_ia_receiver = 0; else openair_daq_vars.use_ia_receiver = (openair_daq_vars.use_ia_receiver+1)%3; - LOG_I(PHY,"[MYEMOS] frame %d, IA receiver %d, MCS %d, bitrate %d\n",phy_vars_ue->frame,openair_daq_vars.use_ia_receiver, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,phy_vars_ue->bitrate[eNB_id]); + LOG_I(PHY,"[MYEMOS] frame %d, IA receiver %d, MCS %d, bitrate %d\n", + phy_vars_ue->frame, + openair_daq_vars.use_ia_receiver, + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs, + phy_vars_ue->bitrate[eNB_id]); } #endif @@ -2405,7 +2412,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) { #ifndef DLSCH_THREAD //USER_MODE harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid; - // printf("PDSCH active in subframe %d, harq_pid %d\n",(last_slot>>1)-1,harq_pid); + //printf("PDSCH active in subframe %d, harq_pid %d\n",(last_slot>>1)-1,harq_pid); if ((phy_vars_ue->transmission_mode[eNB_id] == 5) && (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) && (openair_daq_vars.use_ia_receiver ==1)) { diff --git a/openair1/SIMULATION/RF/dac.c b/openair1/SIMULATION/RF/dac.c index a959a1d6a3..ef82c1f2df 100755 --- a/openair1/SIMULATION/RF/dac.c +++ b/openair1/SIMULATION/RF/dac.c @@ -1,5 +1,6 @@ #define DEBUG_DAC 1 #include <math.h> +#include <stdio.h> #include "PHY/TOOLS/defs.h" void dac(double **s_re, diff --git a/openair1/SIMULATION/TOOLS/defs.h b/openair1/SIMULATION/TOOLS/defs.h index 6a28ad512c..d7a39c03eb 100644 --- a/openair1/SIMULATION/TOOLS/defs.h +++ b/openair1/SIMULATION/TOOLS/defs.h @@ -1,6 +1,6 @@ #ifndef __SIMULATION_TOOLS_DEFS_H__ #define __SIMULATION_TOOLS_DEFS_H__ -#include "PHY/TOOLS/defs.h" +#include "PHY/defs.h" /** @defgroup _numerical_ Useful Numerical Functions *@{ diff --git a/targets/ARCH/EXMIMO/DEFS/openair_device.h b/targets/ARCH/EXMIMO/DEFS/openair_device.h index 5ba4587ac9..8be9a27137 100755 --- a/targets/ARCH/EXMIMO/DEFS/openair_device.h +++ b/targets/ARCH/EXMIMO/DEFS/openair_device.h @@ -4,8 +4,8 @@ // Maximum number of concurrently supported cards // -#define MAX_CARDS 20 -#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +#define MAX_CARDS 8 +#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0}; /** PCIe subsystem configuration Space diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c index af776cceb8..9f5e32d992 100755 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c @@ -49,6 +49,7 @@ static int __init openair_init_module( void ) unsigned int readback; unsigned int card, j; unsigned int vid,did; + unsigned int val; unsigned short vendor, subid; exmimo_id_t exmimo_id_tmp[MAX_CARDS]; @@ -94,15 +95,16 @@ static int __init openair_init_module( void ) // Now look for more cards on the same bus while (card<MAX_CARDS) - { + { pdev[card] = pci_get_device(vid,did, pdev[card-1]); if(pdev[card]) - { - // This print does not work for 64 bit kernels - // printk("[openair][INIT_MODULE][INFO]: openair card %d found, bus 0x%x, primary 0x%x, secondary 0x%x\n",card, - // pdev[card]->bus->number,pdev[card]->bus->primary,pdev[card]->bus->secondary); - - pci_read_config_word(pdev[card], PCI_SUBSYSTEM_ID, &subid); + { + // This print does not work for 64 bit kernels + // printk("[openair][INIT_MODULE][INFO]: openair card %d found, bus 0x%x, primary 0x%x, secondary 0x%x\n",card, + // pdev[card]->bus->number,pdev[card]->bus->primary,pdev[card]->bus->secondary); + + + pci_read_config_word(pdev[card], PCI_SUBSYSTEM_ID, &subid); pci_read_config_word(pdev[card], PCI_SUBSYSTEM_VENDOR_ID, &vendor); exmimo_id_tmp[card].board_vendor = vendor; @@ -194,7 +196,13 @@ static int __init openair_init_module( void ) udelay(1000); readback = ioread32( bar[card] +PCIE_CONTROL0); printk("CONTROL0 readback %x\n",readback); - + + // This is for displaying the card number in the leds of the exmimo card + val = ioread32(bar[card]+PCIE_CONTROL0); + iowrite32(val| ((card & 0x1F) << 9),bar[card]+PCIE_CONTROL0); + //val = ioread32(bar[card]+PCIE_CONTROL0); + //printk("[openair][INIT_MODULE][INFO]: writing leds for card %d control0 %x\n",card,val); + // allocating buffers if ( exmimo_memory_alloc( card ) ) { printk("[openair][MODULE][ERROR] exmimo_memory_alloc() failed!\n"); diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c index f3c3c734d4..c54fce5072 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c @@ -1,8 +1,6 @@ #include "openair0_lib.h" #include "gain_control.h" //#define DEBUG_PHY -#define min(a,b) (((a)<(b))?(a):(b)) -#define max(a,b) (((a)>(b))?(a):(b)) void gain_control_all (unsigned int rx_power_fil_dB, unsigned int card) { unsigned int ant; diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h index 4667d5b0d6..9bdb5790ae 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h @@ -1,6 +1,8 @@ -#define TARGET_RX_POWER 55 // Target digital power for the AGC -#define TARGET_RX_POWER_MAX 55 // Maximum digital power for AGC -#define TARGET_RX_POWER_MIN 50 // Minimum digital power for AGC +#define TARGET_RX_POWER 50 // Target digital power for the AGC +#define TARGET_RX_POWER_MAX 53 // Maximum digital power for AGC +#define TARGET_RX_POWER_MIN 48 // Minimum digital power for AGC +#define min(a,b) (((a)<(b))?(a):(b)) +#define max(a,b) (((a)>(b))?(a):(b)) void gain_control_all (unsigned int rx_power_fil_dB, unsigned int card); void gain_control (unsigned int rx_power_fil_dB, unsigned int ant, unsigned int card); diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10 b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10 index 98a9be8081870a9ce371bdede0158f53cdafb764..b0399db879bfd2240e0e9300bbaab71081c022a2 100755 GIT binary patch delta 64087 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%0D^0kT*b3nUQVk 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 A@c;k- delta 43401 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�=^XXy+ss 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 diff --git a/targets/RTAI/USER/Makefile b/targets/RTAI/USER/Makefile index 2717b5cce5..f3b01ed781 100644 --- a/targets/RTAI/USER/Makefile +++ b/targets/RTAI/USER/Makefile @@ -156,15 +156,10 @@ CFLAGS += -DNAS_NETLINK -DLINUX OBJ += $(NAS_OBJS) endif -LDFLAGS += -lpthread -lm -lforms -lconfig +LDFLAGS += -lpthread -lm -lforms -lconfig -lrt ifeq ($(RTAI),1) RTAI_CFLAGS += $(shell rtai-config --lxrt-cflags) -DRTAI LDFLAGS += $(shell rtai-config --lxrt-ldflags) -ifdef ENABLE_ITTI -LDFLAGS += -lrt -endif -else -LDFLAGS += -lrt endif ifeq ($(USRP),1) diff --git a/targets/RTAI/USER/emos-raw.c b/targets/RTAI/USER/emos-raw.c index b28398b54c..77266c3480 100644 --- a/targets/RTAI/USER/emos-raw.c +++ b/targets/RTAI/USER/emos-raw.c @@ -93,14 +93,16 @@ char title[255]; #ifdef EMOS #include <gps.h> +struct gps_fix_t dummy_gps_data; #ifdef RTAI #include <rtai_fifos.h> #endif //#define CHANSOUNDER_FIFO_SIZE 10485760 // 10 Mbytes FIFO -#define CHANSOUNDER_FIFO_SIZE 20971520 // 20 Mbytes FIFO -//#define CHANSOUNDER_FIFO_SIZE 52428800 // 50 Mbytes FIFO +//#define CHANSOUNDER_FIFO_SIZE 20971520 // 20 Mbytes FIFO +#define CHANSOUNDER_FIFO_SIZE 52428800 // 50 Mbytes FIFO //#define CHANSOUNDER_FIFO_SIZE 104857600 // 100 Mbytes FIFO +//#define CHANSOUNDER_FIFO_SIZE 1073741824 // 1Gbyte FIFO #define CHANSOUNDER_FIFO_MINOR 4 // minor of the FIFO device - this is /dev/rtf3 #define CHANSOUNDER_FIFO_DEV "/dev/rtf4" #endif @@ -118,7 +120,7 @@ static SEM *mutex; //static CND *cond; static long int thread0; -static long int thread1; +//static long int thread1; //static long int sync_thread; #else pthread_t thread0; @@ -130,6 +132,7 @@ struct sched_param sched_param_dlsch; pthread_t thread2; //xforms pthread_t thread3; //emos pthread_t thread4; //GPS +pthread_t thread5; //log /* static int instance_cnt=-1; //0 means worker is busy, -1 means its free @@ -155,11 +158,30 @@ char UE_flag=0; uint8_t eNB_id=0,UE_id=0; // this array sets the bandwidth used for each card (and applies to all chains on one card). -exmimo_bw_t bandwidth[MAX_CARDS] = {BW20,BW10,BW5,BW5}; +exmimo_bw_t bandwidth[MAX_CARDS] = {BW5,BW5,BW5,BW5}; // the array carrier_freq sets the frequency for each chain of each card. A 0 means that the chain is disabled. // Please make sure that the total number of channels enabled per card is in accordance with the following rules: // BW20: one channel, BW10: 2 channels, BW5: 4 channels -uint32_t carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0},{0,0,0,0}}; +//uint32_t carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0}}; +//uint32_t carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0},{0,0,0,0}}; +uint32_t carrier_freq[MAX_CARDS][4] = {{771500000,771500000,771500000,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; + +// the following paramters set the aquisition time and period. These parameters have to be set in accordance with the write speed of your harddisk and the required throughput according to the setting above (see also channel_buffer_size which is computed later). +#define AQU_LENGTH_FRAMES 100 //Aquisition time in frames +#define AQU_PERIOD_FRAMES 100 //Repetition time of aquisition in frames +#define AQU_LENGTH_SLOTS (AQU_LENGTH_FRAMES*LTE_SLOTS_PER_FRAME) //Aquisition time in slots +#define AQU_PERIOD_SLOTS (AQU_PERIOD_FRAMES*LTE_SLOTS_PER_FRAME) //Repetition time of aquisition in slots + +int32_t rx_total_gain_dB[3] = {-112, -124, -136}; + +/* +// this array sets the bandwidth used for each card (and applies to all chains on one card). +exmimo_bw_t bandwidth[MAX_CARDS] = {BW20,BW20,BW10,BW5}; +// the array carrier_freq sets the frequency for each chain of each card. A 0 means that the chain is disabled. +// Please make sure that the total number of channels enabled per card is in accordance with the following rules: +// BW20: one channel, BW10: 2 channels, BW5: 4 channels +uint32_t carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0}}; +//uint32_t carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,2605000000,0,0},{0,0,0,0},{0,0,0,0}}; //uint32_t carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; // the following paramters set the aquisition time and period. These parameters have to be set in accordance with the write speed of your harddisk and the required throughput according to the setting above (see also channel_buffer_size which is computed later). @@ -168,13 +190,17 @@ uint32_t carrier_freq[MAX_CARDS][4] = {{2590000000,0,0,0},{2605000000,26050 #define AQU_LENGTH_SLOTS (AQU_LENGTH_FRAMES*LTE_SLOTS_PER_FRAME) //Aquisition time in slots #define AQU_PERIOD_SLOTS (AQU_PERIOD_FRAMES*LTE_SLOTS_PER_FRAME) //Repetition time of aquisition in slots +int32_t rx_total_gain_dB[3] = {-105, -110, -115}; +*/ + char dumpfile_dir[256] = "/mnt/emos"; char *conf_config_file_name = NULL; unsigned int lost_bytes=0; -int rssi_lin,rssi_lin_avg; -int8_t rssi_avg_dB; +unsigned int rssi_lin[MAX_CARDS][4],rssi_lin_max[MAX_CARDS],rssi_lin_avg[MAX_CARDS]; +uint8_t rssi_avg_dB[MAX_CARDS]; +long long unsigned int total_bytes=0; struct timing_info_t { //unsigned int frame, hw_slot, last_slot, next_slot; @@ -197,13 +223,6 @@ int otg_enabled; int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,76,84,90,98,106,114,120,128,136,144, 0}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers //int mbox_bounds[20] = {6,14,22,28,36,44,52,58,66,74,82,88,96,104,112,118,126,134,142, 148}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers -int init_dlsch_threads(void); -void cleanup_dlsch_threads(void); -int32_t init_rx_pdsch_thread(void); -void cleanup_rx_pdsch_thread(void); -int init_ulsch_threads(void); -void cleanup_ulsch_threads(void); - //void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier); //void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier); void test_config(int card, int ant, unsigned int rf_mode, int UE_flag); @@ -305,7 +324,7 @@ void *scope_thread(void *arg) { idx = 0; for (card=0;card<number_of_cards;card++) { for (ant=0;ant<4;ant++) { - if (carrier_freq[card][ant] != 0) { + if ((carrier_freq[card][ant] != 0) && (idx<4)) { len = FRAME_LENGTH_COMPLEX_SAMPLES/(1<<openair0_exmimo_pci[card].exmimo_config_ptr->framing.resampling_factor[ant]); for (i=0; i<len; i++) { //rxsig_t_dB[0][i] = 10*log10(1.0+(float) ((((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i])*(((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i])+(((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i+1])*(((int16_t*) openair0_exmimo_pci[card].adc_head[0])[2*i+1]))); @@ -333,13 +352,13 @@ void *scope_thread(void *arg) { int dummy_tx_buffer[3840*4] __attribute__((aligned(16))); -#ifdef EMOS +#ifdef EMOS void* gps_thread (void *arg) { - struct gps_data_t *gps_data = NULL; - struct gps_fix_t dummy_gps_data; + struct gps_data_t gps_data; + struct gps_data_t *gps_data_ptr = &gps_data; struct sched_param sched_param; int ret; @@ -351,71 +370,121 @@ void* gps_thread (void *arg) memset(&dummy_gps_data,0,sizeof(struct gps_fix_t)); #if GPSD_API_MAJOR_VERSION>=5 - ret = gps_open("127.0.0.1","2947",gps_data); + ret = gps_open("127.0.0.1","2947",gps_data_ptr); if (ret!=0) #else - gps_data = gps_open("127.0.0.1","2947"); - if (gps_data == NULL) + gps_data_ptr = gps_open("127.0.0.1","2947"); + if (gps_data_ptr == NULL) #endif { printf("[EMOS] Could not open GPS\n"); pthread_exit((void*)arg); } #if GPSD_API_MAJOR_VERSION>=4 - else if (gps_stream(gps_data, WATCH_ENABLE,NULL) != 0) + else if (gps_stream(gps_data_ptr, WATCH_ENABLE,NULL) != 0) #else - else if (gps_query(gps_data, "w+x") != 0) + else if (gps_query(gps_data_ptr, "w+x") != 0) #endif { printf("[EMOS] Error sending command to GPS\n"); pthread_exit((void*) arg); } else - printf("[EMOS] Opened GPS, gps_data=%p\n", gps_data); + printf("[EMOS] Opened GPS, gps_data=%p\n", gps_data_ptr); while (!oai_exit) { printf("[EMOS] polling data from gps\n"); #if GPSD_API_MAJOR_VERSION>=5 - if (gps_waiting(gps_data,500)) { - if (gps_read(gps_data) != 0) { + if (gps_waiting(gps_data_ptr,500)) { + if (gps_read(gps_data_ptr) <= 0) { #else - if (gps_waiting(gps_data)) { - if (gps_poll(gps_data) != 0) { + if (gps_waiting(gps_data_ptr)) { + if (gps_poll(gps_data_ptr) != 0) { #endif printf("[EMOS] problem polling data from gps\n"); } else { - memcpy(&dummy_gps_data,gps_data,sizeof(struct gps_fix_t)); - printf("[EMOS] lat %g, lon %g\n",gps_data->fix.latitude,gps_data->fix.longitude); + memcpy(&dummy_gps_data,&(gps_data_ptr->fix),sizeof(struct gps_fix_t)); + printf("[EMOS] lat %g, lon %g\n",gps_data_ptr->fix.latitude,gps_data_ptr->fix.longitude); } } //gps_waiting else { printf("[EMOS] WARNING: No GPS data available, storing dummy packet\n"); } - rt_sleep_ns(1000000000LL); + //rt_sleep_ns(1000000000LL); + sleep(1); } //oai_exit pthread_exit((void*) arg); } +void *log_thread (void *arg) +{ + //struct tm now_sec; + struct timeval now; + int card; + FILE *logfile_id; + char logfile_name[1024]; + time_t starttime_tmp; + struct tm starttime; + + //open file + time(&starttime_tmp); + localtime_r(&starttime_tmp,&starttime); + snprintf(logfile_name,1024,"%s/%s_data_%d%02d%02d_%02d%02d%02d.log", + dumpfile_dir, + (UE_flag==0) ? "eNB" : "UE", + 1900+starttime.tm_year, starttime.tm_mon+1, starttime.tm_mday, starttime.tm_hour, starttime.tm_min, starttime.tm_sec); + logfile_id = fopen(logfile_name,"w"); + if ((logfile_id == NULL)) + { + fprintf(stderr, "[EMOS] Error opening logfile %s\n",logfile_name); + exit(EXIT_FAILURE); + } + + fprintf(logfile_id,"#time, frame, total bytes wrote, total bytes lost, GPS time, GPS mode, lat, lon, alt, speed, rssi_lin_max[0], rssi_lin_avg[0], rssi_avg_dBm[0], rssi_avg_dB[0], rx_gain[0], LNA[0], ...\n"); + + while (!oai_exit) { + gettimeofday(&now,NULL); + //localtime_r(&(now.tv_sec),&now_sec); + fprintf(logfile_id,"%d.%06d, %d, %llu, %u, %e, %d, %e, %e, %e, %e, ", + (int) now.tv_sec, (int)now.tv_usec, + frame, total_bytes,lost_bytes, + dummy_gps_data.time, dummy_gps_data.mode, dummy_gps_data.latitude, dummy_gps_data.longitude, dummy_gps_data.altitude, dummy_gps_data.speed); + for (card=0;card<number_of_cards;card++) + if (carrier_freq[card][0] != 0) + fprintf(logfile_id,"%d, %d, %d, %d, %d, %d, ", rssi_lin_max[card], rssi_lin_avg[card], + rssi_avg_dB[card] + rx_total_gain_dB[((openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14)-1] - openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0], + rssi_avg_dB[card], openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0], (openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14); + fprintf(logfile_id,"\n"); + usleep(10000); + } + + //close file + fclose(logfile_id); + + pthread_exit((void*) arg); + + } + void *emos_thread (void *arg) { char c; char *fifo2file_buffer, *fifo2file_ptr; int fifo, counter=0, bytes; - long long unsigned int total_bytes=0; FILE *dumpfile_id; char dumpfile_name[1024]; time_t starttime_tmp; struct tm starttime; - time_t timer; - struct tm *now; + //time_t timer; + struct tm now_sec; + struct timeval now; struct sched_param sched_param; int ret; @@ -423,19 +492,20 @@ void *emos_thread (void *arg) int card, ant; int channel_buffer_size=0; //in bytes + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); sched_param.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; sched_setscheduler(0, SCHED_FIFO,&sched_param); printf("EMOS thread has priority %d\n",sched_param.sched_priority); - timer = time(NULL); - now = localtime(&timer); + //timer = time(NULL); + //now = localtime(&timer); for (card=0; card<number_of_cards; card++) for (ant=0; ant<4; ant++) if (carrier_freq[card][ant] != 0) { - printf("card %d, ant %d\n",card,ant); + printf("card %d, ant %d: freq %u, BW %d\n",card,ant,carrier_freq[card][ant],bandwidth[card]); channel_buffer_size += SAMPLES_PER_SLOT/(1<<openair0_exmimo_pci[card].exmimo_config_ptr->framing.resampling_factor[ant]); } channel_buffer_size *= 4; //4 bytes per sample @@ -460,12 +530,12 @@ void *emos_thread (void *arg) time(&starttime_tmp); localtime_r(&starttime_tmp,&starttime); snprintf(dumpfile_name,1024,"%s/%s_data_%d%02d%02d_%02d%02d%02d.EMOS", - dumpfile_dir, + dumpfile_dir, (UE_flag==0) ? "eNB" : "UE", 1900+starttime.tm_year, starttime.tm_mon+1, starttime.tm_mday, starttime.tm_hour, starttime.tm_min, starttime.tm_sec); dumpfile_id = fopen(dumpfile_name,"w"); - if (dumpfile_id == NULL) + if ((dumpfile_id == NULL)) { fprintf(stderr, "[EMOS] Error opening dumpfile %s\n",dumpfile_name); exit(EXIT_FAILURE); @@ -475,9 +545,15 @@ void *emos_thread (void *arg) while (!oai_exit) { - bytes = rtf_read_timed(fifo, fifo2file_ptr, channel_buffer_size,100); - if (bytes<=0) + //bytes = rtf_read_timed(fifo, fifo2file_ptr, channel_buffer_size,100); + bytes = rtf_read_all_at_once(fifo, fifo2file_ptr, channel_buffer_size); + if (bytes<=0) { + usleep(100); continue; + } + if (bytes != channel_buffer_size) { + printf("[EMOS] Frame %d: ERROR! Only got %d bytes instead of %d!\n",frame,bytes,channel_buffer_size); + } /* if (UE_flag==0) printf("eNB: count %d, frame %d, read: %d bytes from the fifo\n",counter, ((fifo_dump_emos_eNB*)fifo2file_ptr)->frame_tx,bytes); @@ -495,6 +571,8 @@ void *emos_thread (void *arg) fifo2file_ptr = fifo2file_buffer; //counter = 0; + printf("[EMOS] Frame %d: start writing %d bytes to disk\n",frame,AQU_LENGTH_SLOTS*channel_buffer_size); + //flush buffer to disk if (fwrite(fifo2file_buffer, sizeof(char), AQU_LENGTH_SLOTS*channel_buffer_size, dumpfile_id) != AQU_LENGTH_SLOTS*channel_buffer_size) { @@ -507,10 +585,17 @@ void *emos_thread (void *arg) } if ((counter%AQU_LENGTH_SLOTS)==0) { - time(&starttime_tmp); - localtime_r(&starttime_tmp,&starttime); - printf("[EMOS] %02d:%02d:%02d, frame %d, total bytes wrote %llu, bytes lost %d\n", starttime.tm_hour, starttime.tm_min, starttime.tm_sec, frame, total_bytes,lost_bytes); - printf("[EMOS] %02d:%02d:%02d, frame %d, rssi_lin %d, rssi_lin_avg %d, rssi_avg_dB %d, rx_gain %d, LNA %d\n", starttime.tm_hour, starttime.tm_min, starttime.tm_sec, frame, rssi_lin, rssi_lin_avg, rssi_avg_dB, p_exmimo_config->rf.rx_gain[0][0], (p_exmimo_config->rf.rf_mode[0] & LNAGAINMASK) >> 14); + //time(&starttime_tmp); + gettimeofday(&now,NULL); + localtime_r(&(now.tv_sec),&now_sec); + printf("[EMOS] %02d:%02d:%02d.%03d, frame %d, total bytes wrote %llu, bytes lost %u\n", + now_sec.tm_hour, now_sec.tm_min, now_sec.tm_sec, (int)(now.tv_usec/1000), frame, total_bytes,lost_bytes); + for (card=0;card<number_of_cards;card++) + if (carrier_freq[card][0] != 0) + printf("[EMOS] %02d:%02d:%02d.%03d, card %d, rssi_lin_max %d, rssi_lin_avg %d, rssi_avg_dBm %d (rssi_avg_dB %d, rx_gain %d, LNA %d)\n", + now_sec.tm_hour, now_sec.tm_min, now_sec.tm_sec, (int)(now.tv_usec/1000), card, rssi_lin_max[card], rssi_lin_avg[card], + rssi_avg_dB[card] + rx_total_gain_dB[((openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14)-1] - openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0], + rssi_avg_dB[card], openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0], (openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0] & LNAGAINMASK) >> 14); //printf("[EMOS] %02d:%02d:%02d, frame %d, GPS time %e, GPS mode %d, lat %e, lon %e, alt %e, speed %e\n", starttime.tm_hour, starttime.tm_min, starttime.tm_sec, counter/20, dummy_gps_data.time, dummy_gps_data.mode, dummy_gps_data.latitude, dummy_gps_data.longitude, dummy_gps_data.altitude, dummy_gps_data.speed); } } @@ -539,7 +624,7 @@ static void *eNB_thread(void *arg) int mbox_target=0,mbox_current=0; int i,ret; int tx_offset; - int bytes, bytes_tot, bytes_len; + int bytes, bytes_tot=0, bytes_len; long long int k1=1000; long long int k2=1024-k1; int ant,len,card = 0; @@ -581,8 +666,8 @@ static void *eNB_thread(void *arg) // 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); slot++; - if (frame>0) - oai_exit=1; + //if (frame>0) + //oai_exit=1; if (slot==20){ slot=0; frame++; @@ -623,7 +708,7 @@ static void *eNB_thread(void *arg) last_slot+=20; next_slot = (slot+3)%LTE_SLOTS_PER_FRAME; - if (frame>AQU_LENGTH_FRAMES) + if (frame>=AQU_LENGTH_FRAMES) { timing_info.time_last = timing_info.time_now; timing_info.time_now = rt_get_time_ns(); @@ -643,11 +728,17 @@ static void *eNB_thread(void *arg) if (last_slot==0) { for (card=0;card<number_of_cards;card++) { len = SAMPLES_PER_SLOT/(1<<openair0_exmimo_pci[card].exmimo_config_ptr->framing.resampling_factor[0]); - rssi_lin = signal_energy(&(((int32_t*) openair0_exmimo_pci[card].adc_head[0])[last_slot*len]), len); - rssi_lin_avg = (int) ((k1*((long long int)(rssi_lin_avg)) + (k2*((long long int)(rssi_lin))))>>10); - rssi_avg_dB = dB_fixed(rssi_lin_avg); + rssi_lin_max[card] = 0; + for (ant=0;ant<4;ant++) { + if (carrier_freq[card][ant] != 0) { + rssi_lin[card][ant] = signal_energy(&(((int32_t*) openair0_exmimo_pci[card].adc_head[ant])[last_slot*len]), len); + rssi_lin_max[card] = max(rssi_lin_max[card],rssi_lin[card][ant]); + } + } + rssi_lin_avg[card] = (int) ((k1*((long long int)(rssi_lin_avg[card])) + (k2*((long long int)(rssi_lin_max[card]))))>>10); + rssi_avg_dB[card] = dB_fixed(rssi_lin_avg[card]); if (frame%100==0) { - gain_control_all(rssi_avg_dB,card); + gain_control_all(rssi_avg_dB[card],card); //printf("AGC for card %d: rx_power_fil_dB=%d, rx_gain=%d, LNA=%d (1=Byp,2=Med,3=Max)\n",card,rssi_avg_dB,openair0_exmimo_pci[card].exmimo_config_ptr->rf.rx_gain[0][0],(openair0_exmimo_pci[card].exmimo_config_ptr->rf.rf_mode[0]&LNAGAINMASK)>>14); } } @@ -724,7 +815,7 @@ int main(int argc, char **argv) { uint32_t rf_vcocal[4] = {910,910,910,910}; uint32_t rf_vcocal_850[4] = {2015, 2015, 2015, 2015}; uint32_t rf_rxdc[4] = {32896,32896,32896,32896}; - uint32_t rxgain[4] = {0,0,0,0}; + uint32_t rxgain[4] = {30,30,30,30}; uint32_t txgain[4] = {0,0,0,0}; uint16_t Nid_cell = 0; @@ -995,11 +1086,13 @@ int main(int argc, char **argv) { else p_exmimo_config->framing.eNB_flag = !UE_flag; - //p_exmimo_config->framing.multicard_syncmode = SYNCMODE_FREE; if (card==0) p_exmimo_config->framing.multicard_syncmode = SYNCMODE_MASTER; - else + else p_exmimo_config->framing.multicard_syncmode = SYNCMODE_SLAVE; + + //p_exmimo_config->framing.multicard_syncmode = SYNCMODE_FREE; + p_exmimo_config->framing.tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_TESTRX; //TXRXSWITCH_LSB; @@ -1146,7 +1239,7 @@ int main(int argc, char **argv) { printf("mutex=%p\n",mutex); #endif - DAQ_MBOX = (volatile unsigned int *) openair0_exmimo_pci[card].rxcnt_ptr[0]; + DAQ_MBOX = (volatile unsigned int *) openair0_exmimo_pci[0].rxcnt_ptr[0]; // this starts the DMA transfers if (UE_flag!=1) @@ -1207,6 +1300,8 @@ int main(int argc, char **argv) { printf("EMOS thread created, ret=%d\n",ret); ret = pthread_create(&thread4, NULL, gps_thread, NULL); printf("GPS thread created, ret=%d\n",ret); + ret = pthread_create(&thread5, NULL, log_thread, NULL); + printf("LOG thread created, ret=%d\n",ret); #endif rt_sleep_ns(10*FRAME_PERIOD); @@ -1340,10 +1435,15 @@ int main(int argc, char **argv) { printf("waiting for GPS thread\n"); pthread_cancel(thread4); pthread_join(thread4,&status); + printf("waiting for log thread\n"); + pthread_cancel(thread5); + pthread_join(thread5,&status); #endif #ifdef EMOS error_code = rtf_destroy(CHANSOUNDER_FIFO_MINOR); + while (error_code>0) + error_code = rtf_destroy(CHANSOUNDER_FIFO_MINOR); printf("[OPENAIR][SCHED][CLEANUP] EMOS FIFO closed, error_code %d\n", error_code); #endif -- GitLab