From 8344996895b4bd4a3c71d90d6401eb7727b65ee9 Mon Sep 17 00:00:00 2001 From: Guy De Souza <desouza@eurecom.fr> Date: Fri, 20 Apr 2018 11:02:03 +0200 Subject: [PATCH] half frame index fix --- .../nfapi/public_inc/nfapi_interface.h | 9 ++--- openair1/PHY/INIT/nr_init.c | 2 +- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 40 +++++++++++++++++++ openair1/SCHED_NR/nr_ru_procedures.c | 2 +- openair1/SCHED_NR/phy_procedures_nr_common.c | 2 +- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 6 ++- 6 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 openair1/PHY/NR_TRANSPORT/nr_pbch.c diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h index fcfb7e7b25..5ce2761256 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h @@ -75,6 +75,9 @@ #define NFAPI_VERSION_3_0_11 0x000 #define NFAPI_VERSION_3_0_12 0x001 +#define NFAPI_HALF_FRAME_INDEX_FIRST_HALF 0 +#define NFAPI_HALF_FRAME_INDEX_SECOND_HALF 1 + // The IANA agreed port definition of the P5 SCTP VNF enpoint // http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=7701 #define NFAPI_P5_SCTP_PORT 7701 @@ -671,16 +674,12 @@ typedef struct { #define NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG 0x0015 #define NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG 0x0016 -typedef enum { - NFAPI_HALF_FRAME_INDEX_FIRST_HALF = 0, - NFAPI_HALF_FRAME_INDEX_SECOND_HALF = 1 -} nfapi_half_frame_index_e; typedef struct { nfapi_uint16_tlv_t primary_synchronization_signal_epre_eprers; nfapi_uint16_tlv_t secondary_synchronization_signal_epre_eprers; nfapi_uint16_tlv_t physical_cell_id; - nfapi_half_frame_index_e half_frame_index; + nfapi_uint16_tlv_t half_frame_index; nfapi_uint16_tlv_t ssb_subcarrier_offset; nfapi_uint16_tlv_t ssb_position_in_burst; nfapi_uint16_tlv_t ssb_periodicity; diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 811025d65e..9d8a70905c 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -345,7 +345,7 @@ void nr_phy_config_request(PHY_VARS_gNB *gNB) gNB_config->rf_config.tx_antenna_ports.value = 1; gNB_config->rf_config.dl_channel_bandwidth.value = 106; gNB_config->rf_config.ul_channel_bandwidth.value = 106; - gNB_config->sch_config.half_frame_index = 0; + gNB_config->sch_config.half_frame_index.value = 0; gNB_config->sch_config.ssb_subcarrier_offset.value = 0; diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c new file mode 100644 index 0000000000..7d3d44e1bd --- /dev/null +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -0,0 +1,40 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file PHY/LTE_TRANSPORT/pbch.c +* \brief Top-level routines for generating and decoding the PBCH/BCH physical/transport channel V8.6 2009-03 +* \author R. Knopp, F. Kaltenberger +* \date 2011 +* \version 0.1 +* \company Eurecom +* \email: knopp@eurecom.fr,florian.kaltenberger.fr +* \note +* \warning +*/ +#include "PHY/defs.h" +#include "PHY/CODING/extern.h" +#include "PHY/CODING/lte_interleaver_inline.h" +#include "defs.h" +#include "extern.h" +#include "PHY/extern.h" +#include "PHY/sse_intrin.h" + +//#define DEBUG_PBCH 1 diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index f2854f1815..b9fe29b4e8 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -72,7 +72,7 @@ void nr_feptx0(RU_t *ru,int slot) { slot_offset = subframe*fp->samples_per_subframe + (slot*(fp->samples_per_subframe / fp->slots_per_subframe)); - LOG_I(PHY,"SFN/SF:RU:TX:%d/%d Generating slot %d\n",ru->proc.frame_tx, ru->proc.subframe_tx,slot); + LOG_D(PHY,"SFN/SF:RU:TX:%d/%d Generating slot %d\n",ru->proc.frame_tx, ru->proc.subframe_tx,slot); for (aa=0; aa<ru->nb_tx; aa++) { nr_normal_prefix_mod(&ru->common.txdataF_BF[aa][slot*slot_sizeF], diff --git a/openair1/SCHED_NR/phy_procedures_nr_common.c b/openair1/SCHED_NR/phy_procedures_nr_common.c index 90b1662b2c..ef00e588e2 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_common.c +++ b/openair1/SCHED_NR/phy_procedures_nr_common.c @@ -69,7 +69,7 @@ int nr_get_ssb_start_symbol(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp) AssertFatal(0==1, "Invalid numerology index %d for the synchronization block\n", mu); } - if (cfg->sch_config.half_frame_index) + if (cfg->sch_config.half_frame_index.value) symbol += (5 * fp->symbols_per_slot * fp->slots_per_subframe); return symbol; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 99625582d4..905803ef12 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -46,14 +46,16 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int subframe) { nfapi_config_request_t *cfg = &gNB->gNB_config; int **txdataF = gNB->common_vars.txdataF; uint8_t *pbch_pdu=&gNB->pbch_pdu[0]; + int ss_subframe = (cfg->sch_config.half_frame_index.value)? 0:5; - LOG_D(PHY,"common_signal_procedures: frame %d, subframe %d\n",frame,subframe); + LOG_I(PHY,"common_signal_procedures: frame %d, subframe %d\n",frame,subframe); int ssb_start_symbol = nr_get_ssb_start_symbol(cfg, fp); //nr_set_ssb_first_subcarrier(cfg); - if (subframe == (cfg->sch_config.half_frame_index)? 0:5) + if (subframe == ss_subframe) { + LOG_I(PHY,"SS TX: frame %d, subframe %d\n",frame,subframe); nr_generate_pss(gNB->d_pss, txdataF, AMP, ssb_start_symbol, cfg, fp); nr_generate_sss(gNB->d_sss, txdataF, AMP_OVER_2, ssb_start_symbol, cfg, fp); } -- GitLab