From 0f04910f2f6d5349d976ae6d75bdaee561599417 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Fri, 22 Mar 2019 15:22:19 +0100 Subject: [PATCH] moving get_band to separate function --- openair1/PHY/INIT/nr_parms.c | 63 ++++++++++++++++++++++++++++++++ openair1/PHY/INIT/phy_init.h | 3 ++ openair1/PHY/defs_nr_common.h | 17 +++++++++ targets/RT/USER/nr-ue.c | 39 ++------------------ targets/RT/USER/nr-uesoftmodem.c | 14 +++---- 5 files changed, 93 insertions(+), 43 deletions(-) diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c index 021d0b10bb..7fee692f08 100644 --- a/openair1/PHY/INIT/nr_parms.c +++ b/openair1/PHY/INIT/nr_parms.c @@ -300,3 +300,66 @@ void nr_dump_frame_parms(NR_DL_FRAME_PARMS *fp) LOG_I(PHY,"fp->initial_bwp_dl.location=%d\n",fp->initial_bwp_dl.location); LOG_I(PHY,"fp->initial_bwp_dl.ofdm_symbol_size=%d\n",fp->initial_bwp_dl.ofdm_symbol_size); } + + +static const eutra_band_t eutra_bands[] = { + {1, 1920000, 1980000, 2110000, 2170000, FDD}, + {2, 1850000, 1910000, 1930000, 1990000, FDD}, + {3, 1710000, 1785000, 1805000, 1880000, FDD}, + {5, 824000, 849000, 869000, 894000, FDD}, + {7, 2500000, 2570000, 2620000, 2690000, FDD}, + {8, 880000, 915000, 925000, 960000, FDD}, + {12, 698000, 716000, 728000, 746000, FDD}, + {20, 832000, 862000, 791000, 821000, FDD}, + {25, 1850000, 1915000, 1930000, 1995000, FDD}, + {28, 703000, 758000, 758000, 813000, FDD}, + {34, 2010000, 2025000, 2010000, 2025000, TDD}, + {38, 2570000, 2620000, 2570000, 2630000, TDD}, + {39, 1880000, 1920000, 1880000, 1920000, TDD}, + {40, 2300000, 2400000, 2300000, 2400000, TDD}, + {41, 2496000, 2690000, 2496000, 2690000, TDD}, + {50, 1432000, 1517000, 1432000, 1517000, TDD}, + {51, 1427000, 1432000, 1427000, 1432000, TDD}, + {66, 1710000, 1780000, 2110000, 2200000, FDD}, + {70, 1695000, 1710000, 1995000, 2020000, FDD}, + {71, 663000, 698000, 617000, 652000, FDD}, + {74, 1427000, 1470000, 1475000, 1518000, FDD}, + {75, 000, 000, 1432000, 1517000, FDD}, + {76, 000, 000, 1427000, 1432000, FDD}, + {77, 3300000, 4200000, 3300000, 4200000, TDD}, + {78, 3300000, 3800000, 3300000, 3800000, TDD}, + {79, 4400000, 5000000, 4400000, 5000000, TDD}, + {80, 1710000, 1785000, 000, 000, FDD}, + {81, 860000, 915000, 000, 000, FDD}, + {82, 832000, 862000, 000, 000, FDD}, + {83, 703000, 748000, 000, 000, FDD}, + {84, 1920000, 1980000, 000, 000, FDD}, + {86, 1710000, 1785000, 000, 000, FDD} +}; + +int get_band(uint32_t downlink_frequency, uint8_t *current_band, int32_t *current_offset, lte_frame_type_t *current_type) { + + int ind; + int64_t dl_freq_khz = downlink_frequency/1000; + for ( ind=0; + ind < sizeof(eutra_bands) / sizeof(eutra_bands[0]); + ind++) { + *current_band = eutra_bands[ind].band; + *current_type = eutra_bands[ind].frame_type; + LOG_I(PHY, "Scanning band %d, dl_min %"PRIu32", ul_min %"PRIu32"\n", ind, eutra_bands[ind].dl_min,eutra_bands[ind].ul_min); + + if ( eutra_bands[ind].dl_min <= dl_freq_khz && eutra_bands[ind].dl_max >= dl_freq_khz ) { + *current_offset = (eutra_bands[ind].ul_min - eutra_bands[ind].dl_min)*1000; + + LOG_I( PHY, "DL frequency %"PRIu32": band %d, frame_type %d, UL frequency %"PRIu32"\n", + downlink_frequency, *current_band, *current_type, downlink_frequency+*current_offset); + break; + } + } + + if( ind == sizeof(eutra_bands) / sizeof(eutra_bands[0])) { + LOG_E(PHY,"Can't find EUTRA band for frequency %d\n", downlink_frequency); + return(-1); + } +} + diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h index ddda39a4c8..f500375e4b 100644 --- a/openair1/PHY/INIT/phy_init.h +++ b/openair1/PHY/INIT/phy_init.h @@ -391,6 +391,9 @@ void init_nr_transport(PHY_VARS_gNB *gNB); void init_dfts(void); +int get_band(uint32_t downlink_frequency, uint8_t *current_band, int32_t *current_offset, lte_frame_type_t *current_type); + + /** @} */ #endif diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h index 267c156184..c09566c67e 100644 --- a/openair1/PHY/defs_nr_common.h +++ b/openair1/PHY/defs_nr_common.h @@ -321,4 +321,21 @@ typedef struct NR_DL_FRAME_PARMS { } NR_DL_FRAME_PARMS; +#define KHz (1000UL) +#define MHz (1000*KHz) + +typedef struct eutra_band_s { + int16_t band; + uint32_t ul_min; + uint32_t ul_max; + uint32_t dl_min; + uint32_t dl_max; + lte_frame_type_t frame_type; +} eutra_band_t; + +typedef struct band_info_s { + int nbands; + eutra_band_t band_info[100]; +} band_info_t; + #endif diff --git a/targets/RT/USER/nr-ue.c b/targets/RT/USER/nr-ue.c index afab7be1ad..a4afdcd6b6 100644 --- a/targets/RT/USER/nr-ue.c +++ b/targets/RT/USER/nr-ue.c @@ -150,27 +150,12 @@ void init_UE(int nb_inst); int32_t **rxdata; int32_t **txdata; -#define KHz (1000UL) -#define MHz (1000*KHz) #define SAIF_ENABLED #ifdef SAIF_ENABLED uint64_t g_ue_rx_thread_busy = 0; #endif -typedef struct eutra_band_s { - int16_t band; - uint32_t ul_min; - uint32_t ul_max; - uint32_t dl_min; - uint32_t dl_max; - lte_frame_type_t frame_type; -} eutra_band_t; - -typedef struct band_info_s { - int nbands; - eutra_band_t band_info[100]; -} band_info_t; band_info_t bands_to_scan; @@ -354,29 +339,11 @@ static void *UE_thread_synch(void *arg) { init_thread(100000, 500000, FIFO_PRIORITY-1, &cpuset, threadname); UE->is_synchronized = 0; + printf("UE_scan %d\n",UE->UE_scan); + if (UE->UE_scan == 0) { - int ind; - int64_t dl_freq_khz = downlink_frequency[0][0]/1000; - for ( ind=0; - ind < sizeof(eutra_bands) / sizeof(eutra_bands[0]); - ind++) { - current_band = eutra_bands[ind].band; - current_type = eutra_bands[ind].frame_type; - LOG_D(PHY, "Scanning band %d, dl_min %"PRIu32", ul_min %"PRIu32"\n", current_band, eutra_bands[ind].dl_min,eutra_bands[ind].ul_min); - if ( eutra_bands[ind].dl_min <= dl_freq_khz && eutra_bands[ind].dl_max >= dl_freq_khz ) { - for (i=0; i<4; i++) - uplink_frequency_offset[CC_id][i] = (eutra_bands[ind].ul_min - eutra_bands[ind].dl_min)*1000; - - break; - } - } - - - AssertFatal( ind < sizeof(eutra_bands) / sizeof(eutra_bands[0]), "Can't find EUTRA band for frequency"); - - UE->frame_parms.eutra_band = current_band; - UE->frame_parms.frame_type = current_type; + get_band(downlink_frequency[CC_id][0], &UE->frame_parms.eutra_band, &uplink_frequency_offset[CC_id][0], &UE->frame_parms.frame_type); LOG_I( PHY, "[SCHED][UE] Check absolute frequency DL %"PRIu32", UL %"PRIu32" (oai_exit %d, rx_num_channels %d)\n", downlink_frequency[0][0], downlink_frequency[0][0]+uplink_frequency_offset[0][0], diff --git a/targets/RT/USER/nr-uesoftmodem.c b/targets/RT/USER/nr-uesoftmodem.c index bb3dfe8282..226010a1db 100644 --- a/targets/RT/USER/nr-uesoftmodem.c +++ b/targets/RT/USER/nr-uesoftmodem.c @@ -932,14 +932,14 @@ int main( int argc, char **argv ) { LOG_I(PHY,"Set nb_rx_antenna %d , nb_tx_antenna %d \n",frame_parms[CC_id]->nb_antennas_rx, frame_parms[CC_id]->nb_antennas_tx); - //init_ul_hopping(frame_parms[CC_id]); - //phy_init_nr_top(frame_parms[CC_id]); - } + get_band(downlink_frequency[CC_id][0], &frame_parms[CC_id]->eutra_band, &uplink_frequency_offset[CC_id][0], &frame_parms[CC_id]->frame_type); - for (CC_id=0; CC_idprach_config_common.prach_ConfigInfo.prach_ConfigIndex, frame_parms->frame_type); - // N_ZC = (prach_fmt <4)?839:139; + //init_ul_hopping(frame_parms[CC_id]); + //phy_init_nr_top(frame_parms[CC_id]); + + //init prach for openair1 test + // prach_fmt = get_prach_fmt(frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex, frame_parms->frame_type); + // N_ZC = (prach_fmt <4)?839:139; } NB_UE_INST=1;