diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h index fcfb7e7b25c5ea6971d0adeac1550a0a30e8d51b..5ce27612562295decfac1882807933f0349bfe41 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 811025d65e669134968ee3cc24e3cc50fb797248..9d8a70905cb7bfdb51259e4a750722dab2d3f50a 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 0000000000000000000000000000000000000000..7d3d44e1bd946a1f82cc168284c0faf10a82c7a3 --- /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 f2854f181551cdc597e94dfc008e798e8261436a..b9fe29b4e89aa59dc962c0587431d958eea749a6 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 90b1662b2c33fd4b995c43be1b160d3f75c4bc8b..ef00e588e2714478a3358b92fef47dd562ff2542 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 99625582d44b37d66e735010ba56a5f355c5d9dd..905803ef1257c4d2982c50934f9f4cc296e674e8 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); }