Merge branch 'RU-RAU-split' of https://gitlab.eurecom.fr/raymond.knopp/openairinterface5g into RU-RAU-split
This commit is contained in:
@@ -222,7 +222,7 @@ add_definitions("-DPACKAGE_BUGREPORT=\"openair4g-devel@lists.eurecom.fr\"")
|
|||||||
# Debug related options
|
# Debug related options
|
||||||
#########################################
|
#########################################
|
||||||
add_boolean_option(ASN_DEBUG False "ASN1 coder/decoder Debug")
|
add_boolean_option(ASN_DEBUG False "ASN1 coder/decoder Debug")
|
||||||
add_boolean_option(EMIT_ASN_DEBUG False "ASN1 coder/decoder Debug")
|
add_boolean_option(EMIT_ASN_DEBUG False "ASN1 coder/decoder Debug")
|
||||||
add_boolean_option(MSG_PRINT False "print debug messages")
|
add_boolean_option(MSG_PRINT False "print debug messages")
|
||||||
add_boolean_option(DISABLE_XER_PRINT False "print XER Format")
|
add_boolean_option(DISABLE_XER_PRINT False "print XER Format")
|
||||||
add_boolean_option(XER_PRINT False "print XER Format")
|
add_boolean_option(XER_PRINT False "print XER Format")
|
||||||
|
|||||||
@@ -192,7 +192,11 @@ void phy_config_request(PHY_Config_t *phy_config) {
|
|||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0] = cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value;
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0] = cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value;
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] = cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value;
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] = cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value;
|
||||||
AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0],
|
AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0],
|
||||||
"prach_starting_subframe_periodicity[0] < prach_numPetitionPerPreambleAttempt[0]\n");
|
"prach_starting_subframe_periodicity[0] %d < prach_numPetitionPerPreambleAttempt[0] %d\n",
|
||||||
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0],
|
||||||
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]);
|
||||||
|
AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] > 0,
|
||||||
|
"prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]==0\n");
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0] = cfg->emtc_config.prach_ce_level_0_configuration_index.value;
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0] = cfg->emtc_config.prach_ce_level_0_configuration_index.value;
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0] = cfg->emtc_config.prach_ce_level_0_frequency_offset.value;
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0] = cfg->emtc_config.prach_ce_level_0_frequency_offset.value;
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0] = cfg->emtc_config.prach_ce_level_0_hopping_enable.value;
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0] = cfg->emtc_config.prach_ce_level_0_hopping_enable.value;
|
||||||
|
|||||||
@@ -148,6 +148,8 @@ typedef struct {
|
|||||||
uint16_t nb_rb;
|
uint16_t nb_rb;
|
||||||
/// downlink power offset field
|
/// downlink power offset field
|
||||||
uint8_t dl_power_off;
|
uint8_t dl_power_off;
|
||||||
|
/// start symbold of pdsch
|
||||||
|
uint8_t pdsch_start;
|
||||||
/// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
|
/// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18)
|
||||||
uint8_t e[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32)));
|
uint8_t e[MAX_NUM_CHANNEL_BITS] __attribute__((aligned(32)));
|
||||||
/// Turbo-code outputs (36-212 V8.6 2009-03, p.12
|
/// Turbo-code outputs (36-212 V8.6 2009-03, p.12
|
||||||
@@ -172,8 +174,8 @@ typedef struct {
|
|||||||
uint8_t Nlayers;
|
uint8_t Nlayers;
|
||||||
/// First layer for this PSCH transmission
|
/// First layer for this PSCH transmission
|
||||||
uint8_t first_layer;
|
uint8_t first_layer;
|
||||||
/// codeword this transport block is mapped to
|
/// codeword this transport block is mapped to
|
||||||
uint8_t codeword;
|
uint8_t codeword;
|
||||||
} LTE_DL_eNB_HARQ_t;
|
} LTE_DL_eNB_HARQ_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -250,11 +252,18 @@ typedef struct {
|
|||||||
uint8_t decode_phich;
|
uint8_t decode_phich;
|
||||||
} LTE_UL_UE_HARQ_t;
|
} LTE_UL_UE_HARQ_t;
|
||||||
|
|
||||||
|
#ifdef Rel14
|
||||||
|
typedef enum {
|
||||||
|
CEmodeA = 0,
|
||||||
|
CEmodeB = 1
|
||||||
|
} CEmode_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding)
|
/// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding)
|
||||||
int32_t *txdataF[8];
|
int32_t *txdataF[8];
|
||||||
/// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers?
|
/// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers?
|
||||||
int32_t **ue_spec_bf_weights[4];
|
int32_t **ue_spec_bf_weights[4];
|
||||||
/// dl channel estimates (estimated from ul channel estimates)
|
/// dl channel estimates (estimated from ul channel estimates)
|
||||||
int32_t **calib_dl_ch_estimates;
|
int32_t **calib_dl_ch_estimates;
|
||||||
/// Allocated RNTI (0 means DLSCH_t is not currently used)
|
/// Allocated RNTI (0 means DLSCH_t is not currently used)
|
||||||
@@ -292,7 +301,11 @@ typedef struct {
|
|||||||
/// amplitude of PDSCH (compared to RS) in symbols containing pilots
|
/// amplitude of PDSCH (compared to RS) in symbols containing pilots
|
||||||
int16_t sqrt_rho_b;
|
int16_t sqrt_rho_b;
|
||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
|
/// indicator that this DLSCH corresponds to SIB1-BR, needed for c_init for scrambling
|
||||||
uint8_t sib1_br_flag;
|
uint8_t sib1_br_flag;
|
||||||
|
/// initial absolute subframe (see 36.211 Section 6.3.1), needed for c_init for scrambling
|
||||||
|
uint16_t i0;
|
||||||
|
CEmode_t CEmode;
|
||||||
#endif
|
#endif
|
||||||
} LTE_eNB_DLSCH_t;
|
} LTE_eNB_DLSCH_t;
|
||||||
|
|
||||||
|
|||||||
@@ -74,23 +74,50 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
int harq_pid,
|
int harq_pid,
|
||||||
int G,
|
int G,
|
||||||
uint8_t q,
|
uint8_t q,
|
||||||
|
uint16_t frame,
|
||||||
uint8_t Ns)
|
uint8_t Ns)
|
||||||
{
|
{
|
||||||
|
|
||||||
int i;
|
int n;
|
||||||
// uint8_t reset;
|
// uint8_t reset;
|
||||||
uint32_t x1, x2, s=0;
|
uint32_t x1, x2, s=0;
|
||||||
uint8_t *dlsch_e=dlsch->harq_processes[harq_pid]->e;
|
uint8_t *dlsch_e=dlsch->harq_processes[harq_pid]->e;
|
||||||
uint8_t *e=dlsch_e;
|
uint8_t *e=dlsch_e;
|
||||||
|
#ifdef Rel14
|
||||||
|
// Rule for accumulation of subframes for BL/CE UEs
|
||||||
|
uint8_t Nacc=4;
|
||||||
|
uint16_t j0,j,idelta;
|
||||||
|
uint16_t i = (Ns>>1) + (10*frame);
|
||||||
|
uint16_t i0 = dlsch->i0;
|
||||||
|
|
||||||
|
if (dlsch->sib1_br_flag==1) Nacc=1;
|
||||||
|
else if (dlsch->rnti == 0xFFFF || dlsch->rnti == 0xFFFE) Nacc = (frame_parms->frame_type == TDD) ? 10 : 4;
|
||||||
|
// Note: above SC-RNTI will also have to be added when/if implemented
|
||||||
|
else if (dlsch->CEmode == CEmodeA) Nacc=1;
|
||||||
|
else if (dlsch->CEmode == CEmodeB) Nacc = (frame_parms->frame_type == TDD) ? 10 : 4;
|
||||||
|
|
||||||
|
if (frame_parms->frame_type == FDD || Nacc == 1) idelta = 0;
|
||||||
|
else idelta = Nacc-2;
|
||||||
|
|
||||||
|
j0 = (i0+idelta)/Nacc;
|
||||||
|
j = (i - i0)/Nacc;
|
||||||
|
#endif
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_SCRAMBLING, VCD_FUNCTION_IN);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_SCRAMBLING, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
// reset = 1;
|
// reset = 1;
|
||||||
// x1 is set in lte_gold_generic
|
// x1 is set in lte_gold_generic
|
||||||
if (mbsfn_flag == 0) {
|
if (mbsfn_flag == 0) {
|
||||||
x2 = (dlsch->rnti<<14) + (q<<13) + ((Ns>>1)<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1
|
#ifdef Rel14
|
||||||
|
if (dlsch->i0 != 0xFFFF) {
|
||||||
|
// rule for BL/CE UEs from Section 6.3.1 in 36.211
|
||||||
|
x2= (dlsch->rnti<<14) + (q<<13) + ((((j0+j)*Nacc)%10)<<9) + frame_parms->Nid_cell;
|
||||||
|
if ((frame&1023) < 200) LOG_D(PHY,"Scrambling init for (i0 %d, i %d, j0 %d, j %d, Nacc %d) => x2 %d\n",i0,i,j0,j,Nacc,x2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
x2 = (dlsch->rnti<<14) + (q<<13) + ((Ns>>1)<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1 for PDSCH
|
||||||
} else {
|
} else {
|
||||||
x2 = ((Ns>>1)<<9) + frame_parms->Nid_cell_mbsfn; //this is c_init in 36.211 Sec 6.3.1
|
x2 = ((Ns>>1)<<9) + frame_parms->Nid_cell_mbsfn; //this is c_init in 36.211 Sec 6.3.1 for PMCH
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_SCRAMBLING
|
#ifdef DEBUG_SCRAMBLING
|
||||||
@@ -98,7 +125,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
#endif
|
#endif
|
||||||
s = lte_gold_scram(&x1, &x2, 1);
|
s = lte_gold_scram(&x1, &x2, 1);
|
||||||
|
|
||||||
for (i=0; i<(1+(G>>5)); i++) {
|
for (n=0; n<(1+(G>>5)); n++) {
|
||||||
|
|
||||||
#ifdef DEBUG_SCRAMBLING
|
#ifdef DEBUG_SCRAMBLING
|
||||||
printf("scrambling %d : %d => ",k,e[k]);
|
printf("scrambling %d : %d => ",k,e[k]);
|
||||||
|
|||||||
Executable
+122
@@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* 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.0 (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/dci.c
|
||||||
|
* \brief Implements PDCCH physical channel TX/RX procedures (36.211) and DCI encoding/decoding (36.212/36.213). Current LTE compliance V8.6 2009-03.
|
||||||
|
* \author R. Knopp
|
||||||
|
* \date 2011
|
||||||
|
* \version 0.1
|
||||||
|
* \company Eurecom
|
||||||
|
* \email: knopp@eurecom.fr
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
|
#ifdef USER_MODE
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
#include "PHY/defs.h"
|
||||||
|
#include "PHY/extern.h"
|
||||||
|
#include "SCHED/defs.h"
|
||||||
|
#include "SIMULATION/TOOLS/defs.h" // for taus
|
||||||
|
#include "PHY/sse_intrin.h"
|
||||||
|
|
||||||
|
#include "assertions.h"
|
||||||
|
#include "T.h"
|
||||||
|
#include "UTIL/LOG/log.h"
|
||||||
|
|
||||||
|
//#define DEBUG_DCI_ENCODING 1
|
||||||
|
//#define DEBUG_DCI_DECODING 1
|
||||||
|
//#define DEBUG_PHY
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t num_dci;
|
||||||
|
mDCI_ALLOC_t mdci_alloc[32];
|
||||||
|
} LTE_eNB_MPDCCH;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/// Length of DCI in bits
|
||||||
|
uint8_t dci_length;
|
||||||
|
/// Aggregation level
|
||||||
|
uint8_t L;
|
||||||
|
/// Position of first CCE of the dci
|
||||||
|
int firstCCE;
|
||||||
|
/// flag to indicate that this is a RA response
|
||||||
|
boolean_t ra_flag;
|
||||||
|
/// rnti
|
||||||
|
rnti_t rnti;
|
||||||
|
/// Format
|
||||||
|
DCI_format_t format;
|
||||||
|
/// harq process index
|
||||||
|
uint8_t harq_pid;
|
||||||
|
/// Narrowband index
|
||||||
|
uint8_t narrowband;
|
||||||
|
/// number of PRB pairs for MPDCCH
|
||||||
|
uint8_t number_of_prb_pairs;
|
||||||
|
/// mpdcch resource assignement (0=localized,1=distributed)
|
||||||
|
uint8_t resource_block_assignment;
|
||||||
|
/// transmission type
|
||||||
|
uint8_t transmission_type;
|
||||||
|
/// mpdcch start symbol
|
||||||
|
uint8_t start_symbol;
|
||||||
|
/// CE mode (1=ModeA,2=ModeB)
|
||||||
|
uint8_t ce_mode;
|
||||||
|
/// 0-503 n_EPDCCHid_i
|
||||||
|
uint16_t dmrs_scrambling_init;
|
||||||
|
/// Absolute subframe of the initial transmission (0-10239)
|
||||||
|
uint16_t initial_transmission_sf_io;
|
||||||
|
/// DCI pdu
|
||||||
|
uint8_t dci_pdu[8];
|
||||||
|
} mDCI_ALLOC_t;
|
||||||
|
|
||||||
|
void generate_edci_top(PHY_VARS_eNB *eNB, int frame, int subframe) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void generate_mdci_top(PHY_VARS_eNB *eNB, int frame, int subframe) {
|
||||||
|
|
||||||
|
LTE_eNB_MPDCCH *mpdcch= &eNB->mpdcch_vars[subframe&2];
|
||||||
|
mDCI_ALLOC_t *mdci;
|
||||||
|
uint8_t e[DCI_BITS_MAX];
|
||||||
|
|
||||||
|
for (i=0;i<mpdcch->num_dci;i++) {
|
||||||
|
mdci = &mdpcch->mdci_alloc[i];
|
||||||
|
|
||||||
|
// Assume 4 EREG/ECCE case (normal prefix)
|
||||||
|
AssertFatal(eNB->frame_parms.frame_type==FDD,"TDD is not yet supported for MPDCCH\n");
|
||||||
|
|
||||||
|
// 9 REs/EREG => 36 REs/ECCE => 72 bits/ECCE
|
||||||
|
generate_dci0(mdci->dci_pdu,
|
||||||
|
e+(72*mdci->firstCCE),
|
||||||
|
mdci_length,
|
||||||
|
mdci->L,
|
||||||
|
mdci->rnti);
|
||||||
|
|
||||||
|
// compute MPDCCH format based on parameters from NFAPI
|
||||||
|
AssertFatal(mdci->reps>0,"mdci->reps==0\n");
|
||||||
|
if (reps==0) { // table 6.8A.1-1
|
||||||
|
AssertFatal(eNB->frame_parms->Ncp == NORMAL,"Extended Prefix not yet supported for MPDCCH\n");
|
||||||
|
N_ECCE_EREG = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -285,6 +285,7 @@ void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a)
|
|||||||
|
|
||||||
int G;
|
int G;
|
||||||
int subframe = proc->subframe_tx;
|
int subframe = proc->subframe_tx;
|
||||||
|
int frame = proc->frame_tx;
|
||||||
|
|
||||||
if (eNB->abstraction_flag != 0) {
|
if (eNB->abstraction_flag != 0) {
|
||||||
if (eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]!=0)
|
if (eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]!=0)
|
||||||
@@ -324,7 +325,7 @@ void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a)
|
|||||||
&eNB->dlsch_interleaving_stats)==0,
|
&eNB->dlsch_interleaving_stats)==0,
|
||||||
"problem in dlsch_encoding");
|
"problem in dlsch_encoding");
|
||||||
|
|
||||||
dlsch_scrambling(&eNB->frame_parms,1,eNB->dlsch_MCH,0,G,0,subframe<<1);
|
dlsch_scrambling(&eNB->frame_parms,1,eNB->dlsch_MCH,0,G,0,frame,subframe<<1);
|
||||||
|
|
||||||
|
|
||||||
mch_modulation(eNB->common_vars.txdataF,
|
mch_modulation(eNB->common_vars.txdataF,
|
||||||
|
|||||||
@@ -1117,6 +1117,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
uint8_t restricted_set;
|
uint8_t restricted_set;
|
||||||
uint8_t n_ra_prb;
|
uint8_t n_ra_prb;
|
||||||
|
|
||||||
|
int frame;
|
||||||
int subframe;
|
int subframe;
|
||||||
int16_t *prachF=NULL;
|
int16_t *prachF=NULL;
|
||||||
int16_t **rxsigF=NULL;
|
int16_t **rxsigF=NULL;
|
||||||
@@ -1152,9 +1153,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
int prach_ifft_cnt=0;
|
int prach_ifft_cnt=0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PRACH_DEBUG
|
//#ifdef PRACH_DEBUG
|
||||||
int en,en0=0;
|
int en,en0=0;
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
if (ru) {
|
if (ru) {
|
||||||
fp = &ru->frame_parms;
|
fp = &ru->frame_parms;
|
||||||
@@ -1204,17 +1205,27 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
if (br_flag == 1) {
|
if (br_flag == 1) {
|
||||||
prach_ifftp = eNB->prach_vars_br.prach_ifft[ce_level];
|
prach_ifftp = eNB->prach_vars_br.prach_ifft[ce_level];
|
||||||
|
frame = eNB->proc.frame_prach_br;
|
||||||
subframe = eNB->proc.subframe_prach_br;
|
subframe = eNB->proc.subframe_prach_br;
|
||||||
prachF = eNB->prach_vars_br.prachF;
|
prachF = eNB->prach_vars_br.prachF;
|
||||||
rxsigF = eNB->prach_vars_br.rxsigF;
|
rxsigF = eNB->prach_vars_br.rxsigF;
|
||||||
|
if ((frame&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
|
||||||
|
br_flag,ce_level,frame,subframe,
|
||||||
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
|
||||||
|
prach_ConfigIndex,rootSequenceIndex,
|
||||||
|
eNB->prach_vars_br.repetition_number[ce_level],
|
||||||
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
prach_ifftp = eNB->prach_vars.prach_ifft[0];
|
prach_ifftp = eNB->prach_vars.prach_ifft[0];
|
||||||
|
frame = eNB->proc.frame_prach;
|
||||||
subframe = eNB->proc.subframe_prach;
|
subframe = eNB->proc.subframe_prach;
|
||||||
prachF = eNB->prach_vars.prachF;
|
prachF = eNB->prach_vars.prachF;
|
||||||
rxsigF = eNB->prach_vars.rxsigF;
|
rxsigF = eNB->prach_vars.rxsigF;
|
||||||
|
if ((frame&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n",
|
||||||
|
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1222,16 +1233,17 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
if (br_flag == 1) {
|
if (br_flag == 1) {
|
||||||
subframe = ru->proc.subframe_prach_br;
|
subframe = ru->proc.subframe_prach_br;
|
||||||
rxsigF = ru->prach_rxsigF_br[ce_level];
|
rxsigF = ru->prach_rxsigF_br[ce_level];
|
||||||
LOG_D(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
if ((frame&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
||||||
subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
|
br_flag,ce_level,frame,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
subframe = ru->proc.subframe_prach;
|
subframe = ru->proc.subframe_prach;
|
||||||
rxsigF = ru->prach_rxsigF;
|
rxsigF = ru->prach_rxsigF;
|
||||||
LOG_D(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
if ((frame&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
||||||
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
|
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1241,9 +1253,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
for (aa=0; aa<nb_rx; aa++) {
|
for (aa=0; aa<nb_rx; aa++) {
|
||||||
if (ru->if_south == LOCAL_RF) { // set the time-domain signal if we have to use it in this node
|
if (ru->if_south == LOCAL_RF) { // set the time-domain signal if we have to use it in this node
|
||||||
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
|
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
|
||||||
#ifdef PRACH_DEBUG
|
//#ifdef PRACH_DEBUG
|
||||||
LOG_D(PHY,"RU %d, subframe %d, : prach %p (energy %d)\n",ru->idx,subframe,prach[aa],dB_fixed(en0=signal_energy(prach[aa],fp->samples_per_tti)));
|
if ((frame&1023) < 20) LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d, : prach %p (energy %d)\n",ru->idx,br_flag,ce_level,frame,subframe,prach[aa],dB_fixed(en0=signal_energy(prach[aa],fp->samples_per_tti)));
|
||||||
#endif
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1467,11 +1479,11 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
} else if (eNB!=NULL) {
|
} else if (eNB!=NULL) {
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
//#if 0
|
||||||
en = dB_fixed(signal_energy(&rxsigF[0][0],840));
|
en = dB_fixed(signal_energy(&rxsigF[0][0],840));
|
||||||
/*if (en>60)*/
|
/*if (en>60)*/
|
||||||
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
|
if ((frame&1023) < 20) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1506,6 +1518,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
*max_preamble_energy=0;
|
*max_preamble_energy=0;
|
||||||
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
||||||
|
|
||||||
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",frame,subframe,preamble_index,br_flag);
|
||||||
|
|
||||||
if (restricted_set == 0) {
|
if (restricted_set == 0) {
|
||||||
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
||||||
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
||||||
@@ -1588,9 +1603,10 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
||||||
#ifdef PRACH_DEBUG
|
//#ifdef PRACH_DEBUG
|
||||||
LOG_I(PHY,"preamble index %d: offset %d, preamble shift %d\n",preamble_index,preamble_offset,preamble_shift);
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
|
||||||
#endif
|
frame,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
|
||||||
|
//#endif
|
||||||
log2_ifft_size = 10;
|
log2_ifft_size = 10;
|
||||||
fft_size = 6144;
|
fft_size = 6144;
|
||||||
|
|
||||||
@@ -1678,6 +1694,8 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
|
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",frame,subframe,br_flag,en);
|
||||||
|
|
||||||
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
||||||
|
|
||||||
|
|
||||||
@@ -1689,8 +1707,10 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
*max_preamble_energy = levdB;
|
*max_preamble_energy = levdB;
|
||||||
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
|
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
|
||||||
*max_preamble = preamble_index;
|
*max_preamble = preamble_index;
|
||||||
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d, en %d)\n",frame,subframe,*max_preamble_energy,*max_preamble_delay,*max_preamble,br_flag,en);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}// preamble_index
|
}// preamble_index
|
||||||
|
|
||||||
|
|||||||
@@ -1973,6 +1973,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
int hard_pid,
|
int hard_pid,
|
||||||
int G,
|
int G,
|
||||||
uint8_t q,
|
uint8_t q,
|
||||||
|
uint16_t frame,
|
||||||
uint8_t Ns);
|
uint8_t Ns);
|
||||||
|
|
||||||
void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
|
||||||
|
|||||||
@@ -802,11 +802,13 @@ typedef struct {
|
|||||||
uint8_t harq_pid;
|
uint8_t harq_pid;
|
||||||
/// Narrowband index
|
/// Narrowband index
|
||||||
uint8_t narrowband;
|
uint8_t narrowband;
|
||||||
|
/// number of repetitions
|
||||||
|
uint8_t reps;
|
||||||
/// number of PRB pairs for MPDCCH
|
/// number of PRB pairs for MPDCCH
|
||||||
uint8_t number_of_prb_pairs;
|
uint8_t number_of_prb_pairs;
|
||||||
/// mpdcch resource assignement (0=localized,1=distributed)
|
/// mpdcch resource assignement (combinatorial index r)
|
||||||
uint8_t resource_block_assignment;
|
uint8_t resource_block_assignment;
|
||||||
/// transmission type
|
/// transmission type (0=localized,1=distributed)
|
||||||
uint8_t transmission_type;
|
uint8_t transmission_type;
|
||||||
/// mpdcch start symbol
|
/// mpdcch start symbol
|
||||||
uint8_t start_symbol;
|
uint8_t start_symbol;
|
||||||
|
|||||||
@@ -705,8 +705,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
LTE_eNB_DLSCH_t *dlsch,
|
LTE_eNB_DLSCH_t *dlsch,
|
||||||
LTE_eNB_DLSCH_t *dlsch1,
|
LTE_eNB_DLSCH_t *dlsch1,
|
||||||
LTE_eNB_UE_stats *ue_stats,
|
LTE_eNB_UE_stats *ue_stats,
|
||||||
int ra_flag,
|
int ra_flag) {
|
||||||
int num_pdcch_symbols) {
|
|
||||||
|
|
||||||
int frame=proc->frame_tx;
|
int frame=proc->frame_tx;
|
||||||
int subframe=proc->subframe_tx;
|
int subframe=proc->subframe_tx;
|
||||||
@@ -716,16 +715,16 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (frame < 20) {
|
if (frame < 20) {
|
||||||
LOG_I(PHY,
|
LOG_D(PHY,
|
||||||
"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", num_pdcch_symbols %d, G %d, nb_rb %"PRIu16", rb0 %x, rb1 %x, TBS %"PRIu16", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n",
|
"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", pdsch_start %d, G %d, nb_rb %"PRIu16", rb0 %x, rb1 %x, TBS %"PRIu16", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n",
|
||||||
eNB->Mod_id, dlsch->rnti,harq_pid,
|
eNB->Mod_id, dlsch->rnti,harq_pid,
|
||||||
frame, subframe, input_buffer_length, num_pdcch_symbols,
|
frame, subframe, input_buffer_length, dlsch_harq->pdsch_start,
|
||||||
get_G(fp,
|
get_G(fp,
|
||||||
dlsch_harq->nb_rb,
|
dlsch_harq->nb_rb,
|
||||||
dlsch_harq->rb_alloc,
|
dlsch_harq->rb_alloc,
|
||||||
dlsch_harq->Qm,
|
dlsch_harq->Qm,
|
||||||
dlsch_harq->Nl,
|
dlsch_harq->Nl,
|
||||||
num_pdcch_symbols,
|
dlsch_harq->pdsch_start,
|
||||||
frame,
|
frame,
|
||||||
subframe,
|
subframe,
|
||||||
dlsch_harq->mimo_mode==TM7?7:0),
|
dlsch_harq->mimo_mode==TM7?7:0),
|
||||||
@@ -736,8 +735,6 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
||||||
dlsch_harq->rvidx,
|
dlsch_harq->rvidx,
|
||||||
dlsch_harq->round);
|
dlsch_harq->round);
|
||||||
for (i=0;i<dlsch_harq->TBS>>3;i++) printf("%x.",dlsch_harq->pdu[i]);
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
||||||
MSC_LOG_TX_MESSAGE(
|
MSC_LOG_TX_MESSAGE(
|
||||||
@@ -751,7 +748,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
dlsch_harq->rb_alloc,
|
dlsch_harq->rb_alloc,
|
||||||
dlsch_harq->Qm,
|
dlsch_harq->Qm,
|
||||||
dlsch_harq->Nl,
|
dlsch_harq->Nl,
|
||||||
num_pdcch_symbols,
|
dlsch_harq->pdsch_start,
|
||||||
frame,
|
frame,
|
||||||
subframe,
|
subframe,
|
||||||
dlsch_harq->mimo_mode==TM7?7:0),
|
dlsch_harq->mimo_mode==TM7?7:0),
|
||||||
@@ -857,7 +854,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
start_meas(&eNB->dlsch_encoding_stats);
|
start_meas(&eNB->dlsch_encoding_stats);
|
||||||
eNB->te(eNB,
|
eNB->te(eNB,
|
||||||
dlsch_harq->pdu,
|
dlsch_harq->pdu,
|
||||||
num_pdcch_symbols,
|
dlsch_harq->pdsch_start,
|
||||||
dlsch,
|
dlsch,
|
||||||
frame,subframe,
|
frame,subframe,
|
||||||
&eNB->dlsch_rate_matching_stats,
|
&eNB->dlsch_rate_matching_stats,
|
||||||
@@ -875,10 +872,11 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
dlsch_harq->rb_alloc,
|
dlsch_harq->rb_alloc,
|
||||||
dlsch_harq->Qm,
|
dlsch_harq->Qm,
|
||||||
dlsch_harq->Nl,
|
dlsch_harq->Nl,
|
||||||
num_pdcch_symbols,
|
dlsch_harq->pdsch_start,
|
||||||
frame,subframe,
|
frame,subframe,
|
||||||
0),
|
0),
|
||||||
0,
|
0,
|
||||||
|
frame,
|
||||||
subframe<<1);
|
subframe<<1);
|
||||||
stop_meas(&eNB->dlsch_scrambling_stats);
|
stop_meas(&eNB->dlsch_scrambling_stats);
|
||||||
|
|
||||||
@@ -889,7 +887,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
eNB->common_vars.txdataF,
|
eNB->common_vars.txdataF,
|
||||||
AMP,
|
AMP,
|
||||||
subframe,
|
subframe,
|
||||||
num_pdcch_symbols,
|
dlsch_harq->pdsch_start,
|
||||||
dlsch,
|
dlsch,
|
||||||
dlsch1);
|
dlsch1);
|
||||||
|
|
||||||
@@ -991,6 +989,9 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
|||||||
uint8_t *sdu) {
|
uint8_t *sdu) {
|
||||||
|
|
||||||
nfapi_dl_config_dlsch_pdu_rel8_t *rel8 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8;
|
nfapi_dl_config_dlsch_pdu_rel8_t *rel8 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8;
|
||||||
|
#ifndef Rel8
|
||||||
|
nfapi_dl_config_dlsch_pdu_rel10_t *rel10 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10;
|
||||||
|
#endif
|
||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
nfapi_dl_config_dlsch_pdu_rel13_t *rel13 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13;
|
nfapi_dl_config_dlsch_pdu_rel13_t *rel13 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13;
|
||||||
#endif
|
#endif
|
||||||
@@ -1017,6 +1018,12 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
|||||||
dlsch1_harq = dlsch1->harq_processes[harq_pid];
|
dlsch1_harq = dlsch1->harq_processes[harq_pid];
|
||||||
AssertFatal(dlsch0_harq!=NULL,"dlsch_harq is null\n");
|
AssertFatal(dlsch0_harq!=NULL,"dlsch_harq is null\n");
|
||||||
|
|
||||||
|
|
||||||
|
dlsch0_harq->pdsch_start = eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LOG_D(PHY,"NFAPI: frame %d, subframe %d: programming dlsch, rnti %x, UE_id %d, harq_pid %d\n",
|
LOG_D(PHY,"NFAPI: frame %d, subframe %d: programming dlsch, rnti %x, UE_id %d, harq_pid %d\n",
|
||||||
proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid);
|
proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid);
|
||||||
if (codeword_index == 0) dlsch0_harq->pdu = sdu;
|
if (codeword_index == 0) dlsch0_harq->pdu = sdu;
|
||||||
@@ -1025,10 +1032,12 @@ handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
|
|||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
dlsch0->sib1_br_flag=0;
|
dlsch0->sib1_br_flag=0;
|
||||||
if ((rel13->pdsch_payload_type <2) && (rel13->ue_type>0)) { // this is a BR/CE UE and SIB1-BR/SI-BR
|
if ((rel13->pdsch_payload_type <2) && (rel13->ue_type>0)) { // this is a BR/CE UE and SIB1-BR/SI-BR
|
||||||
dlsch0->rnti = 0xFFFF;
|
dlsch0->rnti = 0xFFFF;
|
||||||
dlsch0->Kmimo = 1;
|
dlsch0->Kmimo = 1;
|
||||||
dlsch0->Mdlharq = 4;
|
dlsch0->Mdlharq = 4;
|
||||||
dlsch0->Nsoft = 25344;
|
dlsch0->Nsoft = 25344;
|
||||||
|
dlsch0->i0 = rel13->initial_transmission_sf_io;
|
||||||
|
dlsch0_harq->pdsch_start = rel10->pdsch_start;
|
||||||
|
|
||||||
if (rel13->pdsch_payload_type == 0) dlsch0->sib1_br_flag=1;
|
if (rel13->pdsch_payload_type == 0) dlsch0->sib1_br_flag=1;
|
||||||
|
|
||||||
@@ -1470,13 +1479,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
|||||||
dlsch0,
|
dlsch0,
|
||||||
dlsch1,
|
dlsch1,
|
||||||
&eNB->UE_stats[(uint32_t)UE_id],
|
&eNB->UE_stats[(uint32_t)UE_id],
|
||||||
0,
|
0);
|
||||||
#ifdef Rel14
|
|
||||||
dlsch0->sib1_br_flag==0 ? num_pdcch_symbols : 3
|
|
||||||
#else
|
|
||||||
num_pdcch_symbols
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2013,6 +2016,8 @@ void prach_procedures(PHY_VARS_eNB *eNB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((frame&1023) < 20) LOG_I(PHY,"Frame %d, subframe %d: Running rx_prach (br_flag %d)\n",
|
||||||
|
frame,subframe,br_flag);
|
||||||
rx_prach(eNB,
|
rx_prach(eNB,
|
||||||
eNB->RU_list[0],
|
eNB->RU_list[0],
|
||||||
&max_preamble[0],
|
&max_preamble[0],
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ typedef struct RrcConfigurationReq_s {
|
|||||||
long prach_HoppingConfig_r13 [MAX_NUM_CCs][4];
|
long prach_HoppingConfig_r13 [MAX_NUM_CCs][4];
|
||||||
int prach_parameters_list_size [MAX_NUM_CCs];
|
int prach_parameters_list_size [MAX_NUM_CCs];
|
||||||
long max_available_narrow_band [MAX_NUM_CCs][4][2];
|
long max_available_narrow_band [MAX_NUM_CCs][4][2];
|
||||||
int max_available_narrow_band_size [MAX_NUM_CCs];
|
int max_available_narrow_band_size [MAX_NUM_CCs][4];
|
||||||
// end kogo
|
// end kogo
|
||||||
|
|
||||||
|
|
||||||
@@ -259,6 +259,32 @@ typedef struct RrcConfigurationReq_s {
|
|||||||
int pucch_info_value_size [MAX_NUM_CCs];
|
int pucch_info_value_size [MAX_NUM_CCs];
|
||||||
// end kogo
|
// end kogo
|
||||||
|
|
||||||
|
// +kogo
|
||||||
|
bool pcch_config_v1310 [MAX_NUM_CCs];
|
||||||
|
long paging_narrowbands_r13 [MAX_NUM_CCs];
|
||||||
|
long mpdcch_numrepetition_paging_r13 [MAX_NUM_CCs];
|
||||||
|
long *nb_v1310 [MAX_NUM_CCs];
|
||||||
|
|
||||||
|
long *pucch_NumRepetitionCE_Msg4_Level0_r13 [MAX_NUM_CCs];
|
||||||
|
long *pucch_NumRepetitionCE_Msg4_Level1_r13 [MAX_NUM_CCs];
|
||||||
|
long *pucch_NumRepetitionCE_Msg4_Level2_r13 [MAX_NUM_CCs];
|
||||||
|
long *pucch_NumRepetitionCE_Msg4_Level3_r13 [MAX_NUM_CCs];
|
||||||
|
|
||||||
|
|
||||||
|
bool sib2_freq_hoppingParameters_r13_exists [MAX_NUM_CCs];
|
||||||
|
long *sib2_mpdcch_pdsch_hoppingNB_r13 [MAX_NUM_CCs];
|
||||||
|
long *sib2_interval_DLHoppingConfigCommonModeA_r13 [MAX_NUM_CCs];
|
||||||
|
long sib2_interval_DLHoppingConfigCommonModeA_r13_val [MAX_NUM_CCs];
|
||||||
|
long *sib2_interval_DLHoppingConfigCommonModeB_r13 [MAX_NUM_CCs];
|
||||||
|
long sib2_interval_DLHoppingConfigCommonModeB_r13_val [MAX_NUM_CCs];
|
||||||
|
long *sib2_interval_ULHoppingConfigCommonModeA_r13 [MAX_NUM_CCs];
|
||||||
|
long sib2_interval_ULHoppingConfigCommonModeA_r13_val [MAX_NUM_CCs];
|
||||||
|
long *sib2_interval_ULHoppingConfigCommonModeB_r13 [MAX_NUM_CCs];
|
||||||
|
long sib2_interval_ULHoppingConfigCommonModeB_r13_val [MAX_NUM_CCs];
|
||||||
|
long *sib2_mpdcch_pdsch_hoppingOffset_r13 [MAX_NUM_CCs];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
} RrcConfigurationReq;
|
} RrcConfigurationReq;
|
||||||
|
|
||||||
|
|||||||
+269
-21
@@ -160,6 +160,31 @@ EMAIL : Lionel.Gauthier@eurecom.fr, navid.nikaein@eurecom.fr
|
|||||||
#define ENB_CONFIG_STRING_MAX_AVAILABLE_NARROWBAND "maxavailablenarrowband"
|
#define ENB_CONFIG_STRING_MAX_AVAILABLE_NARROWBAND "maxavailablenarrowband"
|
||||||
#define ENB_CONFIG_STRING_PUCCH_INFO_VALUE "pucch_info_value"
|
#define ENB_CONFIG_STRING_PUCCH_INFO_VALUE "pucch_info_value"
|
||||||
|
|
||||||
|
#define ENB_CONFIG_STRING_PCCH_CONFIG_V1310 "pcch_config_v1310"
|
||||||
|
#define ENB_CONFIG_STRING_PAGING_NARROWBANDS_R13 "paging_narrowbands_r13"
|
||||||
|
#define ENB_CONFIG_STRING_MPDCCH_NUMREPETITION_PAGING_R13 "mpdcch_numrepetition_paging_r13"
|
||||||
|
#define ENB_CONFIG_STRING_NB_V1310 "nb_v1310"
|
||||||
|
|
||||||
|
|
||||||
|
#define ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL0 "pucch_NumRepetitionCE_Msg4_Level0_r13"
|
||||||
|
#define ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL1 "pucch_NumRepetitionCE_Msg4_Level1_r13"
|
||||||
|
#define ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL2 "pucch_NumRepetitionCE_Msg4_Level2_r13"
|
||||||
|
#define ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL3 "pucch_NumRepetitionCE_Msg4_Level3_r13"
|
||||||
|
|
||||||
|
#define ENB_CONFIG_STRING_FREQ_HOPPING_PARAMETERS_R13 "sib2_freq_hoppingParameters_r13"
|
||||||
|
#define ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_NB_R13 "sib2_mpdcch_pdsch_hoppingNB_r13"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13 "sib2_interval_DLHoppingConfigCommonModeA_r13"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13_VAL "sib2_interval_DLHoppingConfigCommonModeA_r13_val"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13 "sib2_interval_DLHoppingConfigCommonModeB_r13"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13_VAL "sib2_interval_DLHoppingConfigCommonModeB_r13_val"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_A_R13 "sib2_interval_ULHoppingConfigCommonModeA_r13"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_A_R13_VAL "sib2_interval_ULHoppingConfigCommonModeA_r13_val"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_B_R13 "sib2_interval_ULHoppingConfigCommonModeB_r13"
|
||||||
|
#define ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_B_R13_VAL "sib2_interval_ULHoppingConfigCommonModeB_r13_val"
|
||||||
|
#define ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_OFFSET_R13 "sib2_mpdcch_pdsch_hoppingOffset_r13"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define ENB_CONFIG_STRING_PDSCH_RS_EPRE "pdsch_referenceSignalPower"
|
#define ENB_CONFIG_STRING_PDSCH_RS_EPRE "pdsch_referenceSignalPower"
|
||||||
#define ENB_CONFIG_STRING_PDSCH_PB "pdsch_p_b"
|
#define ENB_CONFIG_STRING_PDSCH_PB "pdsch_p_b"
|
||||||
@@ -1007,6 +1032,10 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
config_setting_t *n1_pucch_AN_info_r13_list = NULL;
|
config_setting_t *n1_pucch_AN_info_r13_list = NULL;
|
||||||
config_setting_t *n1_pucch_AN_info_r13 = NULL;
|
config_setting_t *n1_pucch_AN_info_r13 = NULL;
|
||||||
|
|
||||||
|
config_setting_t *setting_pcch_config_v1310 = NULL;
|
||||||
|
config_setting_t *setting_freq_hoppingParameters_r13 = NULL;
|
||||||
|
|
||||||
|
|
||||||
#if defined(Rel14)
|
#if defined(Rel14)
|
||||||
config_setting_t *setting_br13 = NULL;
|
config_setting_t *setting_br13 = NULL;
|
||||||
#endif // REL14
|
#endif // REL14
|
||||||
@@ -1134,6 +1163,31 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
libconfig_int maxavailablenarrowband = 0;
|
libconfig_int maxavailablenarrowband = 0;
|
||||||
libconfig_int pucch_info_value = 0;
|
libconfig_int pucch_info_value = 0;
|
||||||
|
|
||||||
|
libconfig_int paging_narrowbands_r13 = 0;
|
||||||
|
libconfig_int mpdcch_numrepetition_paging_r13 = 0;
|
||||||
|
libconfig_int nb_v1310 = 0;
|
||||||
|
|
||||||
|
|
||||||
|
libconfig_int pucch_NumRepetitionCE_Msg4_Level0_r13 = 0;
|
||||||
|
libconfig_int pucch_NumRepetitionCE_Msg4_Level1_r13 = 0;
|
||||||
|
libconfig_int pucch_NumRepetitionCE_Msg4_Level2_r13 = 0;
|
||||||
|
libconfig_int pucch_NumRepetitionCE_Msg4_Level3_r13 = 0;
|
||||||
|
|
||||||
|
libconfig_int sib2_mpdcch_pdsch_hoppingNB_r13 = 0;
|
||||||
|
libconfig_int sib2_interval_DLHoppingConfigCommonModeA_r13 = 0;
|
||||||
|
libconfig_int sib2_interval_DLHoppingConfigCommonModeA_r13_val = 0;
|
||||||
|
libconfig_int sib2_interval_DLHoppingConfigCommonModeB_r13 = 0;
|
||||||
|
libconfig_int sib2_interval_DLHoppingConfigCommonModeB_r13_val = 0;
|
||||||
|
libconfig_int sib2_interval_ULHoppingConfigCommonModeA_r13 = 0;
|
||||||
|
libconfig_int sib2_interval_ULHoppingConfigCommonModeA_r13_val = 0;
|
||||||
|
libconfig_int sib2_interval_ULHoppingConfigCommonModeB_r13 = 0;
|
||||||
|
libconfig_int sib2_interval_ULHoppingConfigCommonModeB_r13_val = 0;
|
||||||
|
libconfig_int sib2_mpdcch_pdsch_hoppingOffset_r13 = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
libconfig_int srb1_timer_poll_retransmit = 0;
|
libconfig_int srb1_timer_poll_retransmit = 0;
|
||||||
libconfig_int srb1_timer_reordering = 0;
|
libconfig_int srb1_timer_reordering = 0;
|
||||||
libconfig_int srb1_timer_status_prohibit = 0;
|
libconfig_int srb1_timer_status_prohibit = 0;
|
||||||
@@ -2407,7 +2461,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms1000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms1000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3110:
|
case 3000:
|
||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms3000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms3000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2427,7 +2481,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms20000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms20000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 31100:
|
case 30000:
|
||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms30000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms30000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2559,7 +2613,51 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (setting_br13 != NULL) {
|
if (setting_br13 != NULL) {
|
||||||
|
int cnt = 0;
|
||||||
|
if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL0, &pucch_NumRepetitionCE_Msg4_Level0_r13))
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = pucch_NumRepetitionCE_Msg4_Level0_r13;
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = NULL;;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL1, &pucch_NumRepetitionCE_Msg4_Level1_r13))
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = pucch_NumRepetitionCE_Msg4_Level1_r13;
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = NULL;;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL2, &pucch_NumRepetitionCE_Msg4_Level2_r13))
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = pucch_NumRepetitionCE_Msg4_Level2_r13;
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL3, &pucch_NumRepetitionCE_Msg4_Level3_r13))
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = pucch_NumRepetitionCE_Msg4_Level3_r13;
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = NULL;;
|
||||||
|
}
|
||||||
|
|
||||||
scheduling_info_br_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_SCHEDULING_INFO_LIST);
|
scheduling_info_br_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_SCHEDULING_INFO_LIST);
|
||||||
int num_scheduling_info = config_setting_length(scheduling_info_br_list);
|
int num_scheduling_info = config_setting_length(scheduling_info_br_list);
|
||||||
RRC_CONFIGURATION_REQ (msg_p).scheduling_info_br_size[j] = num_scheduling_info;
|
RRC_CONFIGURATION_REQ (msg_p).scheduling_info_br_size[j] = num_scheduling_info;
|
||||||
@@ -2579,18 +2677,27 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
system_info_value_tag_SI_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_SYSTEM_INFO_VALUE_TAG_LIST);
|
system_info_value_tag_SI_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_SYSTEM_INFO_VALUE_TAG_LIST);
|
||||||
int num_system_info = config_setting_length(system_info_value_tag_SI_list);
|
int num_system_info;
|
||||||
|
if (system_info_value_tag_SI_list != NULL)
|
||||||
|
{
|
||||||
|
num_system_info = config_setting_length(system_info_value_tag_SI_list);
|
||||||
|
for (sys_info_idx = 0; sys_info_idx < num_system_info; ++sys_info_idx)
|
||||||
|
{
|
||||||
|
system_info_value_tag_SI = config_setting_get_elem(system_info_value_tag_SI_list, sys_info_idx);
|
||||||
|
if ( !(config_setting_lookup_int(system_info_value_tag_SI, ENB_CONFIG_STRING_SYSTEM_INFO_VALUE_TAG_SI_R13, &systemInfoValueTagSi_r13)) )
|
||||||
|
{
|
||||||
|
AssertFatal (0, "Failed to parse eNB configuration file %s, system info value tag %d!\n", RC.config_file_name, nb_cc++);
|
||||||
|
}
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).systemInfoValueTagSi_r13[j][sys_info_idx] = systemInfoValueTagSi_r13;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_system_info = 0;
|
||||||
|
}
|
||||||
RRC_CONFIGURATION_REQ (msg_p).system_info_value_tag_SI_size[j] = num_system_info;
|
RRC_CONFIGURATION_REQ (msg_p).system_info_value_tag_SI_size[j] = num_system_info;
|
||||||
|
|
||||||
for (sys_info_idx = 0; sys_info_idx < num_system_info; ++sys_info_idx)
|
|
||||||
{
|
|
||||||
system_info_value_tag_SI = config_setting_get_elem(system_info_value_tag_SI_list, sys_info_idx);
|
|
||||||
if ( !(config_setting_lookup_int(system_info_value_tag_SI, ENB_CONFIG_STRING_SYSTEM_INFO_VALUE_TAG_SI_R13, &systemInfoValueTagSi_r13)) )
|
|
||||||
{
|
|
||||||
AssertFatal (0, "Failed to parse eNB configuration file %s, system info value tag %d!\n", RC.config_file_name, nb_cc++);
|
|
||||||
}
|
|
||||||
RRC_CONFIGURATION_REQ (msg_p).systemInfoValueTagSi_r13[j][sys_info_idx] = systemInfoValueTagSi_r13;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
rach_ce_level_info_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_RACH_CE_LEVEL_INFO_LIST);
|
rach_ce_level_info_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_RACH_CE_LEVEL_INFO_LIST);
|
||||||
@@ -2634,6 +2741,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RC.config_file_name, nb_cc++);
|
RC.config_file_name, nb_cc++);
|
||||||
}
|
}
|
||||||
RRC_CONFIGURATION_REQ (msg_p).rsrp_range[j][rsrp_range_idx] = rsrp_range_br;
|
RRC_CONFIGURATION_REQ (msg_p).rsrp_range[j][rsrp_range_idx] = rsrp_range_br;
|
||||||
|
printf("[DEBUGGING][KOGO] : rsrp range br = %d\n", rsrp_range_br);
|
||||||
}
|
}
|
||||||
|
|
||||||
prach_parameters_ce_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_PRACH_PARAMETERS_CE_R13);
|
prach_parameters_ce_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_PRACH_PARAMETERS_CE_R13);
|
||||||
@@ -2655,6 +2763,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RC.config_file_name, nb_cc++);
|
RC.config_file_name, nb_cc++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("[DEBUGGING][KOGO] : prach hopping config = %d\n", prach_HoppingConfig_r13);
|
||||||
|
|
||||||
RRC_CONFIGURATION_REQ (msg_p).prach_config_index[j][prach_parameters_index] = prach_config_index_br;
|
RRC_CONFIGURATION_REQ (msg_p).prach_config_index[j][prach_parameters_index] = prach_config_index_br;
|
||||||
RRC_CONFIGURATION_REQ (msg_p).prach_freq_offset[j][prach_parameters_index] = prach_freq_offset_br;
|
RRC_CONFIGURATION_REQ (msg_p).prach_freq_offset[j][prach_parameters_index] = prach_freq_offset_br;
|
||||||
RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = prach_StartingSubframe_r13;
|
RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = prach_StartingSubframe_r13;
|
||||||
@@ -2666,7 +2776,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
if (config_setting_lookup_int(prach_parameters_ce_r13, ENB_CONFIG_STRING_PRACH_STARTING_SUBFRAME_R13, &prach_StartingSubframe_r13))
|
if (config_setting_lookup_int(prach_parameters_ce_r13, ENB_CONFIG_STRING_PRACH_STARTING_SUBFRAME_R13, &prach_StartingSubframe_r13))
|
||||||
{
|
{
|
||||||
RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = calloc(1, sizeof(long));
|
RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = calloc(1, sizeof(long));
|
||||||
RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = prach_StartingSubframe_r13;
|
*RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = prach_StartingSubframe_r13;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2676,23 +2786,31 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
if (config_setting_lookup_int(prach_parameters_ce_r13, ENB_CONFIG_STRING_MAX_NUM_PREAMBLE_ATTEMPT_CE_R13, &maxNumPreambleAttemptCE_r13))
|
if (config_setting_lookup_int(prach_parameters_ce_r13, ENB_CONFIG_STRING_MAX_NUM_PREAMBLE_ATTEMPT_CE_R13, &maxNumPreambleAttemptCE_r13))
|
||||||
{
|
{
|
||||||
RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = calloc(1, sizeof(long));
|
RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = calloc(1, sizeof(long));
|
||||||
RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = maxNumPreambleAttemptCE_r13;
|
*RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = maxNumPreambleAttemptCE_r13;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = NULL;
|
RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
max_available_narrow_band_list = config_setting_get_member(prach_parameters_ce_r13, ENB_CONFIG_STRING_MAX_AVAILABLE_NARROW_BAND);
|
||||||
|
int num_available_narrow_bands = config_setting_length(max_available_narrow_band_list);
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).max_available_narrow_band_size[j][prach_parameters_index] = num_available_narrow_bands;
|
||||||
|
int narrow_band_index;
|
||||||
|
for (narrow_band_index = 0; narrow_band_index < num_available_narrow_bands; narrow_band_index++)
|
||||||
|
{
|
||||||
|
max_available_narrow_band = config_setting_get_elem(max_available_narrow_band_list, narrow_band_index);
|
||||||
|
RRC_CONFIGURATION_REQ (msg_p).max_available_narrow_band[j][prach_parameters_index][narrow_band_index] = config_setting_get_int(max_available_narrow_band);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO
|
|
||||||
// max_available_narrow_band = config_setting_get_member(prach_parameters_ce_r13, ENB_CONFIG_STRING_MAX_AVAILABLE_NARROW_BAND);
|
|
||||||
|
|
||||||
|
|
||||||
n1_pucch_AN_info_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_N1_PUCCH_AN_INFO_LIST);
|
n1_pucch_AN_info_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_N1_PUCCH_AN_INFO_LIST);
|
||||||
|
|
||||||
int num_pucch_an_info = config_setting_length(n1_pucch_AN_info_r13_list);
|
int num_pucch_an_info = config_setting_length(n1_pucch_AN_info_r13_list);
|
||||||
|
AssertFatal(cnt == num_pucch_an_info, "Num Repetition Count should be equal to pucch info count !!!");
|
||||||
RRC_CONFIGURATION_REQ (msg_p).pucch_info_value_size[j] = num_pucch_an_info;
|
RRC_CONFIGURATION_REQ (msg_p).pucch_info_value_size[j] = num_pucch_an_info;
|
||||||
int pucch_info_idx;
|
int pucch_info_idx;
|
||||||
for (pucch_info_idx = 0; pucch_info_idx < num_pucch_an_info; ++pucch_info_idx)
|
for (pucch_info_idx = 0; pucch_info_idx < num_pucch_an_info; ++pucch_info_idx)
|
||||||
@@ -2708,6 +2826,104 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RRC_CONFIGURATION_REQ (msg_p).pucch_info_value[j][pucch_info_idx] = pucch_info_value;
|
RRC_CONFIGURATION_REQ (msg_p).pucch_info_value[j][pucch_info_idx] = pucch_info_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setting_freq_hoppingParameters_r13 = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_FREQ_HOPPING_PARAMETERS_R13);
|
||||||
|
if (setting_freq_hoppingParameters_r13 != NULL)
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_freq_hoppingParameters_r13_exists[j] = TRUE;
|
||||||
|
if (config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_NB_R13, &sib2_mpdcch_pdsch_hoppingNB_r13))
|
||||||
|
{
|
||||||
|
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j] = sib2_mpdcch_pdsch_hoppingNB_r13;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13, &sib2_interval_DLHoppingConfigCommonModeA_r13))
|
||||||
|
{
|
||||||
|
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j] = sib2_interval_DLHoppingConfigCommonModeA_r13;
|
||||||
|
config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13_VAL, &sib2_interval_DLHoppingConfigCommonModeA_r13_val);
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = sib2_interval_DLHoppingConfigCommonModeA_r13_val;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13, &sib2_interval_DLHoppingConfigCommonModeB_r13))
|
||||||
|
{
|
||||||
|
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j] = sib2_interval_DLHoppingConfigCommonModeB_r13;
|
||||||
|
config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13_VAL, &sib2_interval_DLHoppingConfigCommonModeB_r13_val);
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = sib2_interval_DLHoppingConfigCommonModeB_r13_val;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_A_R13, &sib2_interval_ULHoppingConfigCommonModeA_r13))
|
||||||
|
{
|
||||||
|
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = sib2_interval_ULHoppingConfigCommonModeA_r13;
|
||||||
|
config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_A_R13_VAL, &sib2_interval_ULHoppingConfigCommonModeA_r13_val);
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = sib2_interval_ULHoppingConfigCommonModeA_r13_val;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_B_R13, &sib2_interval_ULHoppingConfigCommonModeB_r13))
|
||||||
|
{
|
||||||
|
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13[j] = sib2_interval_ULHoppingConfigCommonModeB_r13;
|
||||||
|
config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_B_R13_VAL, &sib2_interval_ULHoppingConfigCommonModeB_r13_val);
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = sib2_interval_ULHoppingConfigCommonModeB_r13_val;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_OFFSET_R13, &sib2_mpdcch_pdsch_hoppingOffset_r13))
|
||||||
|
{
|
||||||
|
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingOffset_r13[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingOffset_r13[j] = sib2_mpdcch_pdsch_hoppingOffset_r13;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingOffset_r13[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).sib2_freq_hoppingParameters_r13_exists[j] = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Rel8 RadioResourceConfigCommon Parameters
|
// Rel8 RadioResourceConfigCommon Parameters
|
||||||
if (!(config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_FRAME_TYPE, &frame_type)
|
if (!(config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_FRAME_TYPE, &frame_type)
|
||||||
|
|
||||||
@@ -3545,7 +3761,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms1000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms1000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3110:
|
case 3000:
|
||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms3000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms3000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -3565,7 +3781,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms20000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms20000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 31100:
|
case 30000:
|
||||||
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms30000;
|
RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311= UE_TimersAndConstants__t311_ms30000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -3716,6 +3932,38 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
char* prach_ConfigCommon_v1310 = NULL;
|
char* prach_ConfigCommon_v1310 = NULL;
|
||||||
char* mpdcch_startSF_CSS_RA_r13;
|
char* mpdcch_startSF_CSS_RA_r13;
|
||||||
|
|
||||||
|
setting_pcch_config_v1310 = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_PCCH_CONFIG_V1310);
|
||||||
|
if (setting_pcch_config_v1310 != NULL)
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).pcch_config_v1310[j] = TRUE;
|
||||||
|
if (!config_setting_lookup_int(setting_pcch_config_v1310, ENB_CONFIG_STRING_PAGING_NARROWBANDS_R13, &paging_narrowbands_r13)
|
||||||
|
|| !config_setting_lookup_int(setting_pcch_config_v1310, ENB_CONFIG_STRING_MPDCCH_NUMREPETITION_PAGING_R13, &mpdcch_numrepetition_paging_r13)
|
||||||
|
)
|
||||||
|
AssertFatal(0,
|
||||||
|
"Failed to parse eNB configuration file %s, enb %d pcch_config_v1310!\n",
|
||||||
|
RC.config_file_name, i);
|
||||||
|
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).paging_narrowbands_r13[j] = paging_narrowbands_r13;
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = mpdcch_numrepetition_paging_r13;
|
||||||
|
|
||||||
|
if (config_setting_lookup_int(setting_pcch_config_v1310, ENB_CONFIG_STRING_NB_V1310, &nb_v1310))
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = CALLOC(1, sizeof(long));
|
||||||
|
*RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = nb_v1310;
|
||||||
|
|
||||||
|
printf("[DEBUGGING][KOGO] : nb_v1310 = %d\n", nb_v1310);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RRC_CONFIGURATION_REQ(msg_p).pcch_config_v1310[j] = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_schedulingInfoSIB1, &schedulingInfoSIB1_BR_r13))
|
if (!config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_schedulingInfoSIB1, &schedulingInfoSIB1_BR_r13))
|
||||||
AssertFatal(0,
|
AssertFatal(0,
|
||||||
@@ -3815,7 +4063,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
RRC_CONFIGURATION_REQ(msg_p).si_HoppingConfigCommon_r13[j] = si_HoppingConfigCommon_r13;
|
RRC_CONFIGURATION_REQ(msg_p).si_HoppingConfigCommon_r13[j] = si_HoppingConfigCommon_r13;
|
||||||
RRC_CONFIGURATION_REQ(msg_p).startSymbolBR_r13[j] = startSymbolBR_r13;
|
RRC_CONFIGURATION_REQ(msg_p).startSymbolBR_r13[j] = startSymbolBR_r13;
|
||||||
|
|
||||||
if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_Q_QUALMINRSRQ_CE, &si_ValidityTime_r13))
|
if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_SI_VALIDITYTIME, &si_ValidityTime_r13))
|
||||||
{
|
{
|
||||||
RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j] = calloc(1, sizeof(long));
|
RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j] = calloc(1, sizeof(long));
|
||||||
*RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j] = si_ValidityTime_r13;
|
*RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j] = si_ValidityTime_r13;
|
||||||
|
|||||||
@@ -339,15 +339,16 @@ void config_sib2(int Mod_idP,
|
|||||||
cfg->emtc_config.prach_ce_level_1_enable.value=0;
|
cfg->emtc_config.prach_ce_level_1_enable.value=0;
|
||||||
cfg->emtc_config.prach_ce_level_2_enable.value=0;
|
cfg->emtc_config.prach_ce_level_2_enable.value=0;
|
||||||
cfg->emtc_config.prach_ce_level_3_enable.value=0;
|
cfg->emtc_config.prach_ce_level_3_enable.value=0;
|
||||||
|
|
||||||
switch (prach_ParametersListCE_r13->list.count) {
|
switch (prach_ParametersListCE_r13->list.count) {
|
||||||
case 4:
|
case 4:
|
||||||
p=prach_ParametersListCE_r13->list.array[3];
|
p=prach_ParametersListCE_r13->list.array[3];
|
||||||
cfg->emtc_config.prach_ce_level_3_enable.value = 1;
|
cfg->emtc_config.prach_ce_level_3_enable.value = 1;
|
||||||
cfg->emtc_config.prach_ce_level_3_configuration_index.value = p->prach_ConfigIndex_r13;
|
cfg->emtc_config.prach_ce_level_3_configuration_index.value = p->prach_ConfigIndex_r13;
|
||||||
cfg->emtc_config.prach_ce_level_3_frequency_offset.value = p->prach_FreqOffset_r13;
|
cfg->emtc_config.prach_ce_level_3_frequency_offset.value = p->prach_FreqOffset_r13;
|
||||||
cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
|
cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
|
||||||
if (p->prach_StartingSubframe_r13)
|
if (p->prach_StartingSubframe_r13)
|
||||||
cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13;
|
cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
|
||||||
cfg->emtc_config.prach_ce_level_3_hopping_enable.value = p->prach_HoppingConfig_r13;
|
cfg->emtc_config.prach_ce_level_3_hopping_enable.value = p->prach_HoppingConfig_r13;
|
||||||
cfg->emtc_config.prach_ce_level_3_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
cfg->emtc_config.prach_ce_level_3_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
||||||
case 3:
|
case 3:
|
||||||
@@ -355,9 +356,9 @@ void config_sib2(int Mod_idP,
|
|||||||
cfg->emtc_config.prach_ce_level_2_enable.value = 1;
|
cfg->emtc_config.prach_ce_level_2_enable.value = 1;
|
||||||
cfg->emtc_config.prach_ce_level_2_configuration_index.value = p->prach_ConfigIndex_r13;
|
cfg->emtc_config.prach_ce_level_2_configuration_index.value = p->prach_ConfigIndex_r13;
|
||||||
cfg->emtc_config.prach_ce_level_2_frequency_offset.value = p->prach_FreqOffset_r13;
|
cfg->emtc_config.prach_ce_level_2_frequency_offset.value = p->prach_FreqOffset_r13;
|
||||||
cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
|
cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
|
||||||
if (p->prach_StartingSubframe_r13)
|
if (p->prach_StartingSubframe_r13)
|
||||||
cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13;
|
cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
|
||||||
cfg->emtc_config.prach_ce_level_2_hopping_enable.value = p->prach_HoppingConfig_r13;
|
cfg->emtc_config.prach_ce_level_2_hopping_enable.value = p->prach_HoppingConfig_r13;
|
||||||
cfg->emtc_config.prach_ce_level_2_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
cfg->emtc_config.prach_ce_level_2_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
||||||
case 2:
|
case 2:
|
||||||
@@ -365,9 +366,9 @@ void config_sib2(int Mod_idP,
|
|||||||
cfg->emtc_config.prach_ce_level_1_enable.value = 1;
|
cfg->emtc_config.prach_ce_level_1_enable.value = 1;
|
||||||
cfg->emtc_config.prach_ce_level_1_configuration_index.value = p->prach_ConfigIndex_r13;
|
cfg->emtc_config.prach_ce_level_1_configuration_index.value = p->prach_ConfigIndex_r13;
|
||||||
cfg->emtc_config.prach_ce_level_1_frequency_offset.value = p->prach_FreqOffset_r13;
|
cfg->emtc_config.prach_ce_level_1_frequency_offset.value = p->prach_FreqOffset_r13;
|
||||||
cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
|
cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
|
||||||
if (p->prach_StartingSubframe_r13)
|
if (p->prach_StartingSubframe_r13)
|
||||||
cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13;
|
cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
|
||||||
cfg->emtc_config.prach_ce_level_1_hopping_enable.value = p->prach_HoppingConfig_r13;
|
cfg->emtc_config.prach_ce_level_1_hopping_enable.value = p->prach_HoppingConfig_r13;
|
||||||
cfg->emtc_config.prach_ce_level_1_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
cfg->emtc_config.prach_ce_level_1_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
||||||
case 1:
|
case 1:
|
||||||
@@ -375,13 +376,16 @@ void config_sib2(int Mod_idP,
|
|||||||
cfg->emtc_config.prach_ce_level_0_enable.value = 1;
|
cfg->emtc_config.prach_ce_level_0_enable.value = 1;
|
||||||
cfg->emtc_config.prach_ce_level_0_configuration_index.value = p->prach_ConfigIndex_r13;
|
cfg->emtc_config.prach_ce_level_0_configuration_index.value = p->prach_ConfigIndex_r13;
|
||||||
cfg->emtc_config.prach_ce_level_0_frequency_offset.value = p->prach_FreqOffset_r13;
|
cfg->emtc_config.prach_ce_level_0_frequency_offset.value = p->prach_FreqOffset_r13;
|
||||||
cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
|
cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value = 1<<p->numRepetitionPerPreambleAttempt_r13;
|
||||||
|
AssertFatal(p->prach_StartingSubframe_r13!=NULL,"prach_StartingSubframe_r13 is null\n");
|
||||||
if (p->prach_StartingSubframe_r13)
|
if (p->prach_StartingSubframe_r13)
|
||||||
cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13;
|
cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value = 2<<*p->prach_StartingSubframe_r13;
|
||||||
cfg->emtc_config.prach_ce_level_0_hopping_enable.value = p->prach_HoppingConfig_r13;
|
cfg->emtc_config.prach_ce_level_0_hopping_enable.value = p->prach_HoppingConfig_r13;
|
||||||
cfg->emtc_config.prach_ce_level_0_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
cfg->emtc_config.prach_ce_level_0_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AssertFatal(cfg->emtc_config.prach_ce_level_0_enable.value>0,"CE_level0 is not enabled\n");
|
||||||
|
|
||||||
struct FreqHoppingParameters_r13 *ext4_freqHoppingParameters = radioResourceConfigCommonP->ext4->freqHoppingParameters_r13;
|
struct FreqHoppingParameters_r13 *ext4_freqHoppingParameters = radioResourceConfigCommonP->ext4->freqHoppingParameters_r13;
|
||||||
if ((ext4_freqHoppingParameters) &&
|
if ((ext4_freqHoppingParameters) &&
|
||||||
(ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13)){
|
(ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13)){
|
||||||
|
|||||||
@@ -310,7 +310,10 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
|
|||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
||||||
|
|
||||||
|
// Rel10 fields
|
||||||
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
|
||||||
|
// Rel13 fields
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP;
|
||||||
@@ -658,6 +661,8 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
|
|||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
||||||
|
|
||||||
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
|
||||||
|
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ schedule_SIB1_BR(
|
|||||||
|
|
||||||
AssertFatal(bcch_sdu_length <= TBS, "length returned by RRC %d is not compatible with the TBS %d from MIB\n",bcch_sdu_length,TBS);
|
AssertFatal(bcch_sdu_length <= TBS, "length returned by RRC %d is not compatible with the TBS %d from MIB\n",bcch_sdu_length,TBS);
|
||||||
|
|
||||||
if ((frameP&1023) < 200) LOG_I(MAC,"[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d) rvidx %d\n",module_idP,frameP,subframeP,CC_id,bcch_sdu_length,n_NB,i,m,N_S_NB,rvidx);
|
if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d) rvidx %d\n",module_idP,frameP,subframeP,CC_id,bcch_sdu_length,n_NB,i,m,N_S_NB,rvidx);
|
||||||
|
|
||||||
// allocate all 6 PRBs in narrowband for SIB1_BR
|
// allocate all 6 PRBs in narrowband for SIB1_BR
|
||||||
|
|
||||||
@@ -235,6 +235,8 @@ schedule_SIB1_BR(
|
|||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||||
|
// Rel10 fields
|
||||||
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
|
||||||
// Rel13 fields
|
// Rel13 fields
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0; // SIB1-BR
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0; // SIB1-BR
|
||||||
@@ -311,7 +313,7 @@ schedule_SI_BR(
|
|||||||
nfapi_dl_config_request_body_t *dl_req;
|
nfapi_dl_config_request_body_t *dl_req;
|
||||||
int i;
|
int i;
|
||||||
int rvidx;
|
int rvidx;
|
||||||
|
int absSF = (frameP*10)+subframeP;
|
||||||
|
|
||||||
|
|
||||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
@@ -362,7 +364,7 @@ schedule_SI_BR(
|
|||||||
|
|
||||||
// check if the SI is to be scheduled now
|
// check if the SI is to be scheduled now
|
||||||
int period_in_sf = 80<<si_Periodicity; // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms
|
int period_in_sf = 80<<si_Periodicity; // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms
|
||||||
int sf_mod_period = ((frameP*10)+subframeP)%period_in_sf;
|
int sf_mod_period = absSF%period_in_sf;
|
||||||
int k = sf_mod_period&3;
|
int k = sf_mod_period&3;
|
||||||
// Note: definition of k and rvidx from 36.321 section 5.3.1
|
// Note: definition of k and rvidx from 36.321 section 5.3.1
|
||||||
rvidx = (((3*k)>>1) + (k&1))&3;
|
rvidx = (((3*k)>>1) + (k&1))&3;
|
||||||
@@ -391,14 +393,14 @@ schedule_SI_BR(
|
|||||||
// check that SIB1 didn't take this narrowband
|
// check that SIB1 didn't take this narrowband
|
||||||
if (vrb_map[first_rb] > 0) continue;
|
if (vrb_map[first_rb] > 0) continue;
|
||||||
|
|
||||||
first_rb = narrowband_to_first_rb(cc,si_Narrowband_r13);
|
first_rb = narrowband_to_first_rb(cc,si_Narrowband_r13-1);
|
||||||
vrb_map[first_rb] = 1;
|
vrb_map[first_rb] = 1;
|
||||||
vrb_map[first_rb+1] = 1;
|
vrb_map[first_rb+1] = 1;
|
||||||
vrb_map[first_rb+2] = 1;
|
vrb_map[first_rb+2] = 1;
|
||||||
vrb_map[first_rb+4] = 1;
|
vrb_map[first_rb+4] = 1;
|
||||||
vrb_map[first_rb+5] = 1;
|
vrb_map[first_rb+5] = 1;
|
||||||
|
|
||||||
if ((frameP%1000) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n",
|
if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n",
|
||||||
module_idP,frameP,subframeP,CC_id,si_Narrowband_r13-1,rvidx,
|
module_idP,frameP,subframeP,CC_id,si_Narrowband_r13-1,rvidx,
|
||||||
sf_mod_period,si_WindowLength_BR_r13,si_RepetitionPattern_r13,
|
sf_mod_period,si_WindowLength_BR_r13,si_RepetitionPattern_r13,
|
||||||
bcch_sdu_length);
|
bcch_sdu_length);
|
||||||
@@ -432,10 +434,12 @@ schedule_SI_BR(
|
|||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||||
|
// Rel10 fields (for PDSCH starting symbol)
|
||||||
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
|
||||||
// Rel13 fields
|
// Rel13 fields
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1; // SI-BR
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1; // SI-BR
|
||||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SF
|
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = absSF - sf_mod_period;
|
||||||
|
|
||||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
||||||
dl_req->number_pdu++;
|
dl_req->number_pdu++;
|
||||||
@@ -757,7 +761,7 @@ schedule_SI(
|
|||||||
|
|
||||||
#ifdef Rel14
|
#ifdef Rel14
|
||||||
schedule_SIB1_BR(module_idP,frameP,subframeP);
|
schedule_SIB1_BR(module_idP,frameP,subframeP);
|
||||||
// schedule_SI_BR(module_idP,frameP,subframeP);
|
schedule_SI_BR(module_idP,frameP,subframeP);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stop_meas(&eNB->schedule_si);
|
stop_meas(&eNB->schedule_si);
|
||||||
|
|||||||
@@ -608,10 +608,15 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->present
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->present
|
||||||
= SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13_PR_subframePattern10_r13;
|
= SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13_PR_subframePattern40_r13;
|
||||||
|
|
||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.buf = calloc(5, sizeof(uint8_t));
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.buf = calloc(5, sizeof(uint8_t));
|
||||||
memmove(sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.buf, &configuration->fdd_DownlinkOrTddSubframeBitmapBR_val_r13[CC_id], 5 * sizeof(uint8_t));
|
// memmove(sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.buf, &configuration->fdd_DownlinkOrTddSubframeBitmapBR_val_r13[CC_id], 5 * sizeof(uint8_t));
|
||||||
|
int bm_index;
|
||||||
|
for (bm_index = 0; bm_index < 5; bm_index++)
|
||||||
|
{
|
||||||
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.buf[bm_index] = 0xFF;
|
||||||
|
}
|
||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.size = 5;
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.size = 5;
|
||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.bits_unused = 0;
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->fdd_DownlinkOrTddSubframeBitmapBR_r13->choice.subframePattern40_r13.bits_unused = 0;
|
||||||
}
|
}
|
||||||
@@ -647,27 +652,37 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
|
|||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13 = calloc(1, sizeof(long));
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13 = calloc(1, sizeof(long));
|
||||||
memset(sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13, 0, sizeof(long));
|
memset(sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13, 0, sizeof(long));
|
||||||
*sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13 = *configuration->si_ValidityTime_r13[CC_id];
|
*sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13 = *configuration->si_ValidityTime_r13[CC_id];
|
||||||
|
printf("[DEBUGGING][KOGO]: si_validity time = %d\n", *sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13 = NULL;
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->si_ValidityTime_r13 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13 = calloc(1, sizeof(SystemInfoValueTagList_r13_t));
|
|
||||||
SystemInfoValueTagSI_r13_t systemInfoValueTagSi_r13;
|
|
||||||
|
|
||||||
|
SystemInfoValueTagSI_r13_t *systemInfoValueTagSi_r13;
|
||||||
int num_system_info_value_tag = configuration->system_info_value_tag_SI_size[CC_id];
|
int num_system_info_value_tag = configuration->system_info_value_tag_SI_size[CC_id];
|
||||||
for (index = 0; index < num_system_info_value_tag; ++index)
|
if (num_system_info_value_tag > 0)
|
||||||
{
|
{
|
||||||
if (configuration->systemInfoValueTagSi_r13[CC_id][index])
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13 = calloc(1, sizeof(SystemInfoValueTagList_r13_t));
|
||||||
|
for (index = 0; index < num_system_info_value_tag; ++index)
|
||||||
{
|
{
|
||||||
systemInfoValueTagSi_r13 = configuration->systemInfoValueTagSi_r13[CC_id][index];
|
systemInfoValueTagSi_r13 = CALLOC(1, sizeof(SystemInfoValueTagSI_r13_t));
|
||||||
|
if (configuration->systemInfoValueTagSi_r13[CC_id][index])
|
||||||
|
{
|
||||||
|
*systemInfoValueTagSi_r13 = configuration->systemInfoValueTagSi_r13[CC_id][index];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*systemInfoValueTagSi_r13 = 0;
|
||||||
|
}
|
||||||
|
ASN_SEQUENCE_ADD(&sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13->list, systemInfoValueTagSi_r13);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
}
|
||||||
systemInfoValueTagSi_r13 = 0;
|
else
|
||||||
}
|
{
|
||||||
ASN_SEQUENCE_ADD(&sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13->list, &systemInfoValueTagSi_r13);
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -806,8 +821,9 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
|
|||||||
|
|
||||||
|
|
||||||
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13 = calloc(1, sizeof(SystemInfoValueTagList_r13_t));
|
sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13 = calloc(1, sizeof(SystemInfoValueTagList_r13_t));
|
||||||
SystemInfoValueTagSI_r13_t systemInfoValueTagSi_r13 = 0;
|
SystemInfoValueTagSI_r13_t *systemInfoValueTagSi_r13 = CALLOC(1, sizeof(SystemInfoValueTagSI_r13_t));
|
||||||
ASN_SEQUENCE_ADD(&sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13->list, &systemInfoValueTagSi_r13);
|
*systemInfoValueTagSi_r13 = 0;
|
||||||
|
ASN_SEQUENCE_ADD(&sib1_1310->bandwidthReducedAccessRelatedInfo_r13->systemInfoValueTagList_r13->list, systemInfoValueTagSi_r13);
|
||||||
|
|
||||||
sib1_1310->nonCriticalExtension = calloc(1, sizeof(SystemInformationBlockType1_v1320_IEs_t));
|
sib1_1310->nonCriticalExtension = calloc(1, sizeof(SystemInformationBlockType1_v1320_IEs_t));
|
||||||
memset(sib1_1310->nonCriticalExtension, 0, sizeof(SystemInformationBlockType1_v1320_IEs_t));
|
memset(sib1_1310->nonCriticalExtension, 0, sizeof(SystemInformationBlockType1_v1320_IEs_t));
|
||||||
@@ -1015,10 +1031,10 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1 = calloc(1, sizeof(struct RACH_ConfigCommon__ext1));
|
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1 = calloc(1, sizeof(struct RACH_ConfigCommon__ext1));
|
||||||
memset((*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1, 0, sizeof(struct RACH_ConfigCommon__ext1));
|
memset((*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1, 0, sizeof(struct RACH_ConfigCommon__ext1));
|
||||||
|
|
||||||
if (rrconfig->rach_maxHARQ_Msg3Tx)
|
if (rrconfig->preambleTransMax_CE_r13)
|
||||||
{
|
{
|
||||||
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->preambleTransMax_CE_r13 = calloc(1, sizeof(PreambleTransMax_t));
|
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->preambleTransMax_CE_r13 = calloc(1, sizeof(PreambleTransMax_t));
|
||||||
*(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->preambleTransMax_CE_r13 = rrconfig->rach_maxHARQ_Msg3Tx; // to be re-initialized when we find the enum
|
*(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->preambleTransMax_CE_r13 = *rrconfig->preambleTransMax_CE_r13; // to be re-initialized when we find the enum
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1028,13 +1044,12 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->rach_CE_LevelInfoList_r13 = calloc(1, sizeof(RACH_CE_LevelInfoList_r13_t));
|
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->rach_CE_LevelInfoList_r13 = calloc(1, sizeof(RACH_CE_LevelInfoList_r13_t));
|
||||||
memset((*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->rach_CE_LevelInfoList_r13, 0, sizeof(RACH_CE_LevelInfoList_r13_t));
|
memset((*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ext1->rach_CE_LevelInfoList_r13, 0, sizeof(RACH_CE_LevelInfoList_r13_t));
|
||||||
|
|
||||||
RACH_CE_LevelInfo_r13_t *rach_ce_levelinfo_r13 = calloc(1, sizeof(RACH_CE_LevelInfo_r13_t));
|
RACH_CE_LevelInfo_r13_t *rach_ce_levelinfo_r13;
|
||||||
memset(rach_ce_levelinfo_r13, 0, sizeof(RACH_CE_LevelInfo_r13_t));
|
|
||||||
|
|
||||||
int num_rach_ce_level_info = configuration->rach_CE_LevelInfoList_r13_size[CC_id];
|
int num_rach_ce_level_info = configuration->rach_CE_LevelInfoList_r13_size[CC_id];
|
||||||
int index;
|
int index;
|
||||||
for (index = 0; index < num_rach_ce_level_info; ++index)
|
for (index = 0; index < num_rach_ce_level_info; ++index)
|
||||||
{
|
{
|
||||||
|
rach_ce_levelinfo_r13 = calloc(1, sizeof(RACH_CE_LevelInfo_r13_t));
|
||||||
if (configuration->rach_CE_LevelInfoList_r13_size[CC_id])
|
if (configuration->rach_CE_LevelInfoList_r13_size[CC_id])
|
||||||
{
|
{
|
||||||
rach_ce_levelinfo_r13->preambleMappingInfo_r13.firstPreamble_r13 = configuration->firstPreamble_r13[CC_id][index];
|
rach_ce_levelinfo_r13->preambleMappingInfo_r13.firstPreamble_r13 = configuration->firstPreamble_r13[CC_id][index];
|
||||||
@@ -1167,34 +1182,196 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
// LTE-M - +Kogo
|
// LTE-M - +Kogo
|
||||||
(*sib2)->radioResourceConfigCommon.ext4 = calloc(1, sizeof(struct RadioResourceConfigCommonSIB__ext4));
|
(*sib2)->radioResourceConfigCommon.ext4 = calloc(1, sizeof(struct RadioResourceConfigCommonSIB__ext4));
|
||||||
memset((*sib2)->radioResourceConfigCommon.ext4, 0, sizeof(struct RadioResourceConfigCommonSIB__ext4));
|
memset((*sib2)->radioResourceConfigCommon.ext4, 0, sizeof(struct RadioResourceConfigCommonSIB__ext4));
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->bcch_Config_v1310 = calloc(1, sizeof(BCCH_Config_v1310_t));
|
(*sib2)->radioResourceConfigCommon.ext4->bcch_Config_v1310 = NULL; //calloc(1, sizeof(BCCH_Config_v1310_t));
|
||||||
memset((*sib2)->radioResourceConfigCommon.ext4->bcch_Config_v1310, 0, sizeof(BCCH_Config_v1310_t));
|
//memset((*sib2)->radioResourceConfigCommon.ext4->bcch_Config_v1310, 0, sizeof(BCCH_Config_v1310_t));
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->bcch_Config_v1310->modificationPeriodCoeff_v1310 = BCCH_Config_v1310__modificationPeriodCoeff_v1310_n64;
|
//(*sib2)->radioResourceConfigCommon.ext4->bcch_Config_v1310->modificationPeriodCoeff_v1310 = BCCH_Config_v1310__modificationPeriodCoeff_v1310_n64;
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310 = NULL;
|
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13 = NULL;
|
if (configuration->pcch_config_v1310)
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pdsch_ConfigCommon_v1310 = NULL;
|
{
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pusch_ConfigCommon_v1310 = NULL;
|
(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310 = CALLOC(1, sizeof(PCCH_Config_v1310_t));
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310->paging_narrowBands_r13 = configuration->paging_narrowbands_r13[CC_id];
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310->mpdcch_NumRepetition_Paging_r13 = configuration->mpdcch_numrepetition_paging_r13[CC_id];
|
||||||
|
if (configuration->nb_v1310[CC_id])
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310->nB_v1310 = CALLOC(1, sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310->nB_v1310 = *configuration->nb_v1310[CC_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310->nB_v1310 = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pcch_Config_v1310 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (configuration->sib2_freq_hoppingParameters_r13_exists[CC_id])
|
||||||
|
{
|
||||||
|
puts("[DEBUGGING][KOGO][SIB23]: Structure exists");
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13 = CALLOC(1, sizeof(FreqHoppingParameters_r13_t));
|
||||||
|
if (configuration->sib2_mpdcch_pdsch_hoppingNB_r13[CC_id])
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->mpdcch_pdsch_HoppingNB_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->mpdcch_pdsch_HoppingNB_r13 = *configuration->sib2_mpdcch_pdsch_hoppingNB_r13[CC_id];
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->mpdcch_pdsch_HoppingNB_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->sib2_interval_DLHoppingConfigCommonModeA_r13[CC_id])
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeA_r13
|
||||||
|
= CALLOC(1, sizeof(struct FreqHoppingParameters_r13__interval_DLHoppingConfigCommonModeA_r13));
|
||||||
|
if (*configuration->sib2_interval_DLHoppingConfigCommonModeA_r13[CC_id] == 0)
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeA_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_DLHoppingConfigCommonModeA_r13_PR_interval_FDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeA_r13->choice.interval_FDD_r13
|
||||||
|
= configuration->sib2_interval_DLHoppingConfigCommonModeA_r13_val[CC_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeA_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_DLHoppingConfigCommonModeA_r13_PR_interval_TDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeA_r13->choice.interval_TDD_r13
|
||||||
|
= configuration->sib2_interval_DLHoppingConfigCommonModeA_r13_val[CC_id];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeA_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (configuration->sib2_interval_DLHoppingConfigCommonModeB_r13[CC_id])
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeB_r13
|
||||||
|
= CALLOC(1, sizeof(struct FreqHoppingParameters_r13__interval_DLHoppingConfigCommonModeB_r13));
|
||||||
|
if (*configuration->sib2_interval_DLHoppingConfigCommonModeB_r13[CC_id] == 0)
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeB_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_DLHoppingConfigCommonModeB_r13_PR_interval_FDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeB_r13->choice.interval_FDD_r13
|
||||||
|
= configuration->sib2_interval_DLHoppingConfigCommonModeB_r13_val[CC_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeB_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_DLHoppingConfigCommonModeB_r13_PR_interval_TDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeB_r13->choice.interval_TDD_r13
|
||||||
|
= configuration->sib2_interval_DLHoppingConfigCommonModeB_r13_val[CC_id];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_DLHoppingConfigCommonModeB_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->sib2_interval_ULHoppingConfigCommonModeA_r13[CC_id])
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeA_r13
|
||||||
|
= CALLOC(1, sizeof(struct FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13));
|
||||||
|
if (*configuration->sib2_interval_ULHoppingConfigCommonModeA_r13[CC_id] == 0)
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeA_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_FDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeA_r13->choice.interval_FDD_r13
|
||||||
|
= configuration->sib2_interval_ULHoppingConfigCommonModeA_r13_val[CC_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeA_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_TDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeA_r13->choice.interval_TDD_r13
|
||||||
|
= configuration->sib2_interval_ULHoppingConfigCommonModeA_r13_val[CC_id];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeA_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->sib2_interval_ULHoppingConfigCommonModeB_r13[CC_id])
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeB_r13
|
||||||
|
= CALLOC(1, sizeof(struct FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13));
|
||||||
|
if (*configuration->sib2_interval_ULHoppingConfigCommonModeB_r13[CC_id] == 0)
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeB_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_FDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeB_r13->choice.interval_FDD_r13
|
||||||
|
= configuration->sib2_interval_ULHoppingConfigCommonModeB_r13_val[CC_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeB_r13->present
|
||||||
|
= FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_TDD_r13;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeB_r13->choice.interval_TDD_r13
|
||||||
|
= configuration->sib2_interval_ULHoppingConfigCommonModeB_r13_val[CC_id];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->interval_ULHoppingConfigCommonModeB_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->sib2_mpdcch_pdsch_hoppingOffset_r13[CC_id])
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->mpdcch_pdsch_HoppingOffset_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->mpdcch_pdsch_HoppingOffset_r13 = *configuration->sib2_mpdcch_pdsch_hoppingOffset_r13[CC_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13->mpdcch_pdsch_HoppingOffset_r13 = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->freqHoppingParameters_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pdsch_ConfigCommon_v1310 = calloc(1,sizeof(PDSCH_ConfigCommon_v1310_t));
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pdsch_ConfigCommon_v1310->pdsch_maxNumRepetitionCEmodeA_r13 = calloc(1,sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->pdsch_ConfigCommon_v1310->pdsch_maxNumRepetitionCEmodeA_r13 = 0;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pdsch_ConfigCommon_v1310->pdsch_maxNumRepetitionCEmodeB_r13 = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pusch_ConfigCommon_v1310 = calloc(1,sizeof(PUSCH_ConfigCommon_v1310_t));
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pusch_ConfigCommon_v1310->pusch_maxNumRepetitionCEmodeA_r13 = calloc(1,sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->pusch_ConfigCommon_v1310->pusch_maxNumRepetitionCEmodeA_r13 = 0;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pusch_ConfigCommon_v1310->pusch_maxNumRepetitionCEmodeB_r13 = NULL;
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pusch_ConfigCommon_v1310->pusch_HoppingOffset_v1310 = NULL;
|
||||||
|
|
||||||
if (rrconfig->prach_ConfigCommon_v1310)
|
if (rrconfig->prach_ConfigCommon_v1310)
|
||||||
{
|
{
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310 = calloc(1, sizeof(PRACH_ConfigSIB_v1310_t));
|
(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310 = calloc(1, sizeof(PRACH_ConfigSIB_v1310_t));
|
||||||
memset((*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310, 0, sizeof(PRACH_ConfigSIB_v1310_t));
|
memset((*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310, 0, sizeof(PRACH_ConfigSIB_v1310_t));
|
||||||
|
|
||||||
RSRP_Range_t rsrp_range;
|
RSRP_Range_t *rsrp_range;
|
||||||
int num_rsrp_range = configuration->rsrp_range_list_size[CC_id];
|
int num_rsrp_range = configuration->rsrp_range_list_size[CC_id];
|
||||||
int rsrp_index;
|
int rsrp_index;
|
||||||
for (rsrp_index = 0; rsrp_index < num_rsrp_range; ++rsrp_index)
|
for (rsrp_index = 0; rsrp_index < num_rsrp_range; ++rsrp_index)
|
||||||
{
|
{
|
||||||
|
rsrp_range = CALLOC(1, sizeof(RSRP_Range_t));
|
||||||
if (configuration->rsrp_range_list_size[CC_id])
|
if (configuration->rsrp_range_list_size[CC_id])
|
||||||
{
|
{
|
||||||
rsrp_range = configuration->rsrp_range[CC_id][rsrp_index];
|
*rsrp_range = configuration->rsrp_range[CC_id][rsrp_index];
|
||||||
|
printf("[DEBUGGING][KOGO][SIB23] : rsrp range = %d\n", *rsrp_range);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rsrp_range = 60;
|
*rsrp_range = 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASN_SEQUENCE_ADD(&(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310->rsrp_ThresholdsPrachInfoList_r13.list, &rsrp_range);
|
ASN_SEQUENCE_ADD(&(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310->rsrp_ThresholdsPrachInfoList_r13.list, rsrp_range);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1227,92 +1404,140 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310->prach_HoppingOffset_r13 = NULL;
|
(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310->prach_HoppingOffset_r13 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
PRACH_ParametersCE_r13_t *prach_parametersce_r13 = calloc(1, sizeof(PRACH_ParametersCE_r13_t));
|
PRACH_ParametersCE_r13_t *prach_parametersce_r13;
|
||||||
memset(prach_parametersce_r13, 0, sizeof(PRACH_ParametersCE_r13_t));
|
|
||||||
|
|
||||||
int num_prach_parameters_ce = configuration->prach_parameters_list_size[CC_id];
|
int num_prach_parameters_ce = configuration->prach_parameters_list_size[CC_id];
|
||||||
int prach_parameters_index;
|
int prach_parameters_index;
|
||||||
|
AssertFatal(num_prach_parameters_ce > 0, "PRACH CE parameter list is empty\n");
|
||||||
|
|
||||||
for (prach_parameters_index = 0; prach_parameters_index < num_prach_parameters_ce; ++prach_parameters_index)
|
for (prach_parameters_index = 0; prach_parameters_index < num_prach_parameters_ce; ++prach_parameters_index)
|
||||||
{
|
{
|
||||||
if (configuration->prach_parameters_list_size[CC_id])
|
prach_parametersce_r13 = CALLOC(1, sizeof(PRACH_ParametersCE_r13_t));
|
||||||
|
|
||||||
|
prach_parametersce_r13->prach_ConfigIndex_r13 = configuration->prach_config_index[CC_id][prach_parameters_index];
|
||||||
|
prach_parametersce_r13->prach_FreqOffset_r13 = configuration->prach_freq_offset[CC_id][prach_parameters_index];
|
||||||
|
|
||||||
|
AssertFatal(configuration->prach_StartingSubframe_r13[CC_id][prach_parameters_index]!=NULL,
|
||||||
|
"configuration->prach_StartingSubframe_r13[%d][%d] is null",
|
||||||
|
(int)CC_id,(int)prach_parameters_index);
|
||||||
|
if (configuration->prach_StartingSubframe_r13[CC_id][prach_parameters_index])
|
||||||
|
{
|
||||||
|
prach_parametersce_r13->prach_StartingSubframe_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*prach_parametersce_r13->prach_StartingSubframe_r13 = *configuration->prach_StartingSubframe_r13[CC_id][prach_parameters_index];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prach_parametersce_r13->prach_StartingSubframe_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->maxNumPreambleAttemptCE_r13[CC_id][prach_parameters_index])
|
||||||
|
{
|
||||||
|
prach_parametersce_r13->maxNumPreambleAttemptCE_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*prach_parametersce_r13->maxNumPreambleAttemptCE_r13 = *configuration->maxNumPreambleAttemptCE_r13[CC_id][prach_parameters_index];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prach_parametersce_r13->maxNumPreambleAttemptCE_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
prach_parametersce_r13->numRepetitionPerPreambleAttempt_r13 = configuration->numRepetitionPerPreambleAttempt_r13[CC_id][prach_parameters_index];
|
||||||
|
prach_parametersce_r13->mpdcch_NumRepetition_RA_r13 = configuration->mpdcch_NumRepetition_RA_r13[CC_id][prach_parameters_index];
|
||||||
|
prach_parametersce_r13->prach_HoppingConfig_r13 = configuration->prach_HoppingConfig_r13[CC_id][prach_parameters_index];
|
||||||
|
printf("[DEBUGGING][KOGO][SIB23] : prach hopping config = %d\n", prach_parametersce_r13->prach_HoppingConfig_r13);
|
||||||
|
|
||||||
|
|
||||||
|
long *maxavailablenarrowband;
|
||||||
|
int num_narrow_bands = configuration->max_available_narrow_band_size[CC_id][prach_parameters_index];
|
||||||
|
int narrow_band_index;
|
||||||
|
for (narrow_band_index = 0; narrow_band_index < num_narrow_bands; narrow_band_index++)
|
||||||
{
|
{
|
||||||
prach_parametersce_r13->prach_ConfigIndex_r13 = configuration->prach_config_index[CC_id][prach_parameters_index];
|
maxavailablenarrowband = CALLOC(1, sizeof(long));
|
||||||
prach_parametersce_r13->prach_FreqOffset_r13 = configuration->prach_freq_offset[CC_id][prach_parameters_index];
|
*maxavailablenarrowband = configuration->max_available_narrow_band[CC_id][prach_parameters_index][narrow_band_index];
|
||||||
|
ASN_SEQUENCE_ADD(&prach_parametersce_r13->mpdcch_NarrowbandsToMonitor_r13.list, maxavailablenarrowband);
|
||||||
if (configuration->prach_StartingSubframe_r13[CC_id][prach_parameters_index])
|
|
||||||
{
|
|
||||||
*prach_parametersce_r13->prach_StartingSubframe_r13 = *configuration->prach_StartingSubframe_r13[CC_id][prach_parameters_index];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
prach_parametersce_r13->prach_StartingSubframe_r13 = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (configuration->maxNumPreambleAttemptCE_r13[CC_id][prach_parameters_index])
|
|
||||||
{
|
|
||||||
*prach_parametersce_r13->maxNumPreambleAttemptCE_r13 = *configuration->maxNumPreambleAttemptCE_r13[CC_id][prach_parameters_index];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
prach_parametersce_r13->maxNumPreambleAttemptCE_r13 = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
prach_parametersce_r13->numRepetitionPerPreambleAttempt_r13 = configuration->numRepetitionPerPreambleAttempt_r13[CC_id][prach_parameters_index];
|
|
||||||
prach_parametersce_r13->mpdcch_NumRepetition_RA_r13 = configuration->mpdcch_NumRepetition_RA_r13[CC_id][prach_parameters_index];
|
|
||||||
prach_parametersce_r13->prach_HoppingConfig_r13 = configuration->prach_HoppingConfig_r13[CC_id][prach_parameters_index];
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
prach_parametersce_r13->mpdcch_NumRepetition_RA_r13 = PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r1;
|
||||||
prach_parametersce_r13->prach_ConfigIndex_r13 = 3;
|
prach_parametersce_r13->prach_HoppingConfig_r13 = PRACH_ParametersCE_r13__prach_HoppingConfig_r13_off;
|
||||||
prach_parametersce_r13->prach_FreqOffset_r13 = 1;
|
ASN_SEQUENCE_ADD(&(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310->prach_ParametersListCE_r13.list, prach_parametersce_r13);
|
||||||
prach_parametersce_r13->prach_StartingSubframe_r13 = NULL;
|
|
||||||
*prach_parametersce_r13->maxNumPreambleAttemptCE_r13 = calloc(1, sizeof(long));
|
|
||||||
*prach_parametersce_r13->maxNumPreambleAttemptCE_r13 = PRACH_ParametersCE_r13__maxNumPreambleAttemptCE_r13_n3;
|
|
||||||
prach_parametersce_r13->numRepetitionPerPreambleAttempt_r13 = PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n1;
|
|
||||||
prach_parametersce_r13->mpdcch_NumRepetition_RA_r13 = PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r1;
|
|
||||||
prach_parametersce_r13->prach_HoppingConfig_r13 = PRACH_ParametersCE_r13__prach_HoppingConfig_r13_off;
|
|
||||||
}
|
|
||||||
|
|
||||||
long maxavailablenarrowband = 2;
|
|
||||||
ASN_SEQUENCE_ADD(&prach_parametersce_r13->mpdcch_NarrowbandsToMonitor_r13.list, &maxavailablenarrowband);
|
|
||||||
|
|
||||||
prach_parametersce_r13->mpdcch_NumRepetition_RA_r13 = PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r1;
|
|
||||||
prach_parametersce_r13->prach_HoppingConfig_r13 = PRACH_ParametersCE_r13__prach_HoppingConfig_r13_off;
|
|
||||||
ASN_SEQUENCE_ADD(&(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310->prach_ParametersListCE_r13.list, prach_parametersce_r13);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310 = NULL;
|
(*sib2)->radioResourceConfigCommon.ext4->prach_ConfigCommon_v1310 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310 = calloc(1, sizeof(PUCCH_ConfigCommon_v1310_t));
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310 = calloc(1, sizeof(PUCCH_ConfigCommon_v1310_t));
|
||||||
memset((*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310, 0, sizeof(PUCCH_ConfigCommon_v1310_t));
|
memset((*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310, 0, sizeof(PUCCH_ConfigCommon_v1310_t));
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->n1PUCCH_AN_InfoList_r13 = calloc(1, sizeof(N1PUCCH_AN_InfoList_r13_t));
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->n1PUCCH_AN_InfoList_r13 = calloc(1, sizeof(N1PUCCH_AN_InfoList_r13_t));
|
||||||
|
|
||||||
int num_pucch_info_list = configuration->pucch_info_value_size[CC_id];
|
int num_pucch_info_list = configuration->pucch_info_value_size[CC_id];
|
||||||
int pucch_index;
|
int pucch_index;
|
||||||
long pucch_info_value;
|
long *pucch_info_value;
|
||||||
for (pucch_index = 0; pucch_index < num_pucch_info_list; ++pucch_index)
|
for (pucch_index = 0; pucch_index < num_pucch_info_list; ++pucch_index)
|
||||||
{
|
{
|
||||||
|
pucch_info_value = CALLOC(1, sizeof(long));
|
||||||
if (configuration->pucch_info_value_size[CC_id])
|
if (configuration->pucch_info_value_size[CC_id])
|
||||||
{
|
{
|
||||||
pucch_info_value = configuration->pucch_info_value[CC_id][pucch_index];
|
*pucch_info_value = configuration->pucch_info_value[CC_id][pucch_index];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pucch_info_value = 0;
|
*pucch_info_value = 0;
|
||||||
}
|
}
|
||||||
ASN_SEQUENCE_ADD(&(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->n1PUCCH_AN_InfoList_r13->list, &pucch_info_value);
|
ASN_SEQUENCE_ADD(&(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->n1PUCCH_AN_InfoList_r13->list, pucch_info_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->pucch_NumRepetitionCE_Msg4_Level0_r13[CC_id])
|
||||||
|
{
|
||||||
|
puts("LEVEL 0");
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level0_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level0_r13 = *configuration->pucch_NumRepetitionCE_Msg4_Level0_r13[CC_id];
|
||||||
|
printf("[DEBUGGING][KOGO][SIB23]: pucch_NumRepetitionCE_Msg4_Level0_r13 = %d\n", *(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level0_r13);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level0_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (configuration->pucch_NumRepetitionCE_Msg4_Level1_r13[CC_id])
|
||||||
|
{
|
||||||
|
puts("LEVEL 1");
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level1_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level1_r13 = *configuration->pucch_NumRepetitionCE_Msg4_Level1_r13[CC_id];
|
||||||
|
printf("[DEBUGGING][KOGO][SIB23]: pucch_NumRepetitionCE_Msg4_Level1_r13 = %d\n", *(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level1_r13);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level1_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->pucch_NumRepetitionCE_Msg4_Level2_r13[CC_id])
|
||||||
|
{
|
||||||
|
puts("LEVEL 2");
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level2_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level2_r13 = *configuration->pucch_NumRepetitionCE_Msg4_Level2_r13[CC_id];
|
||||||
|
printf("[DEBUGGING][KOGO][SIB23]: pucch_NumRepetitionCE_Msg4_Level2_r13 = %d\n", *(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level2_r13);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level2_r13 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configuration->pucch_NumRepetitionCE_Msg4_Level3_r13[CC_id])
|
||||||
|
{
|
||||||
|
puts("LEVEL 3");
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level3_r13 = CALLOC(1, sizeof(long));
|
||||||
|
*(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level3_r13 = *configuration->pucch_NumRepetitionCE_Msg4_Level3_r13[CC_id];
|
||||||
|
printf("[DEBUGGING][KOGO][SIB23]: pucch_NumRepetitionCE_Msg4_Level3_r13 = %d\n", *(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level3_r13);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level3_r13 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// +kogo FIXME
|
|
||||||
// ASN_SEQUENCE_ADD(&(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->n1PUCCH_AN_InfoList_r13->list, &pucch_info_value2);
|
|
||||||
|
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level0_r13 = NULL;
|
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level1_r13 = NULL;
|
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level2_r13 = NULL;
|
|
||||||
(*sib2)->radioResourceConfigCommon.ext4->pucch_ConfigCommon_v1310->pucch_NumRepetitionCE_Msg4_Level3_r13 = NULL;
|
|
||||||
//-----------------------------------------------------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -1514,7 +1739,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
|
|
||||||
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[0]=0x38<<2;
|
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[0]=0x38<<2;
|
||||||
|
|
||||||
ASN_SEQUENCE_ADD(&MBSFNSubframeConfigList->list,sib2_mbsfn_SubframeConfig1);
|
ASN_SEQUENCE_ADD(&MBSFNSubframeConfigList->list, sib2_mbsfn_SubframeConfig1);
|
||||||
|
|
||||||
if (MBMS_flag == 4 ) {
|
if (MBMS_flag == 4 ) {
|
||||||
LOG_I(RRC,"Adding MBSFN subframe Configuration 2 to SIB2\n");
|
LOG_I(RRC,"Adding MBSFN subframe Configuration 2 to SIB2\n");
|
||||||
@@ -1532,7 +1757,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
sib2_mbsfn_SubframeConfig2->subframeAllocation.choice.oneFrame.buf[0]=0x07<<2;
|
sib2_mbsfn_SubframeConfig2->subframeAllocation.choice.oneFrame.buf[0]=0x07<<2;
|
||||||
|
|
||||||
|
|
||||||
ASN_SEQUENCE_ADD(&MBSFNSubframeConfigList->list,sib2_mbsfn_SubframeConfig2);
|
ASN_SEQUENCE_ADD(&MBSFNSubframeConfigList->list, sib2_mbsfn_SubframeConfig2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1556,16 +1781,16 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
|
|
||||||
(*sib3)->cellReselectionInfoCommon.speedStateReselectionPars=NULL;
|
(*sib3)->cellReselectionInfoCommon.speedStateReselectionPars=NULL;
|
||||||
|
|
||||||
(*sib3)->cellReselectionServingFreqInfo.s_NonIntraSearch=NULL;
|
(*sib3)->cellReselectionServingFreqInfo.s_NonIntraSearch = NULL;
|
||||||
(*sib3)->cellReselectionServingFreqInfo.threshServingLow=31;
|
(*sib3)->cellReselectionServingFreqInfo.threshServingLow = 0;
|
||||||
(*sib3)->cellReselectionServingFreqInfo.cellReselectionPriority=7;
|
(*sib3)->cellReselectionServingFreqInfo.s_NonIntraSearch = 0;
|
||||||
|
(*sib3)->cellReselectionServingFreqInfo.cellReselectionPriority = 7;
|
||||||
|
|
||||||
(*sib3)->intraFreqCellReselectionInfo.q_RxLevMin = -70;
|
(*sib3)->intraFreqCellReselectionInfo.q_RxLevMin = -70;
|
||||||
(*sib3)->intraFreqCellReselectionInfo.p_Max = NULL;
|
(*sib3)->intraFreqCellReselectionInfo.p_Max = NULL;
|
||||||
(*sib3)->intraFreqCellReselectionInfo.s_IntraSearch = CALLOC(1,sizeof(*(*sib3)->intraFreqCellReselectionInfo.s_IntraSearch));
|
(*sib3)->intraFreqCellReselectionInfo.s_IntraSearch = CALLOC(1,sizeof(*(*sib3)->intraFreqCellReselectionInfo.s_IntraSearch));
|
||||||
*(*sib3)->intraFreqCellReselectionInfo.s_IntraSearch = 31;
|
*(*sib3)->intraFreqCellReselectionInfo.s_IntraSearch = 31;
|
||||||
(*sib3)->intraFreqCellReselectionInfo.allowedMeasBandwidth=CALLOC(1,sizeof(*(*sib3)->intraFreqCellReselectionInfo.allowedMeasBandwidth));
|
(*sib3)->intraFreqCellReselectionInfo.allowedMeasBandwidth=CALLOC(1,sizeof(*(*sib3)->intraFreqCellReselectionInfo.allowedMeasBandwidth));
|
||||||
|
|
||||||
*(*sib3)->intraFreqCellReselectionInfo.allowedMeasBandwidth = AllowedMeasBandwidth_mbw6;
|
*(*sib3)->intraFreqCellReselectionInfo.allowedMeasBandwidth = AllowedMeasBandwidth_mbw6;
|
||||||
|
|
||||||
(*sib3)->intraFreqCellReselectionInfo.presenceAntennaPort1 = 0;
|
(*sib3)->intraFreqCellReselectionInfo.presenceAntennaPort1 = 0;
|
||||||
@@ -1573,9 +1798,21 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.size = 1;
|
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.size = 1;
|
||||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.buf[0] = 1;
|
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.buf[0] = 1;
|
||||||
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.bits_unused = 6;
|
(*sib3)->intraFreqCellReselectionInfo.neighCellConfig.bits_unused = 6;
|
||||||
(*sib3)->intraFreqCellReselectionInfo.t_ReselectionEUTRA = 1;
|
(*sib3)->intraFreqCellReselectionInfo.t_ReselectionEUTRA = 2;
|
||||||
(*sib3)->intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF = (struct SpeedStateScaleFactors *)NULL;
|
(*sib3)->intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF = (struct SpeedStateScaleFactors *)NULL;
|
||||||
|
|
||||||
|
(*sib3)->ext1 = CALLOC(1, sizeof(struct SystemInformationBlockType3__ext1));
|
||||||
|
(*sib3)->ext1->s_IntraSearch_v920 = CALLOC(1, sizeof(struct SystemInformationBlockType3__ext1__s_IntraSearch_v920));
|
||||||
|
(*sib3)->ext1->s_IntraSearch_v920->s_IntraSearchP_r9 = 31; // FIXME
|
||||||
|
(*sib3)->ext1->s_IntraSearch_v920->s_IntraSearchQ_r9 = 4;
|
||||||
|
|
||||||
|
(*sib3)->ext4 = CALLOC(1, sizeof(struct SystemInformationBlockType3__ext4));
|
||||||
|
(*sib3)->ext4->cellSelectionInfoCE_r13 = CALLOC(1, sizeof(CellSelectionInfoCE_r13_t));
|
||||||
|
(*sib3)->ext4->cellSelectionInfoCE_r13->q_RxLevMinCE_r13 = -70;
|
||||||
|
(*sib3)->ext4->cellSelectionInfoCE_r13->q_QualMinRSRQ_CE_r13 = NULL;
|
||||||
|
(*sib3)->ext4->t_ReselectionEUTRA_CE_r13 = CALLOC(1, sizeof(T_ReselectionEUTRA_CE_r13_t));
|
||||||
|
*(*sib3)->ext4->t_ReselectionEUTRA_CE_r13 = 2;
|
||||||
|
|
||||||
// SIB13
|
// SIB13
|
||||||
// fill in all elements of SIB13 if present
|
// fill in all elements of SIB13 if present
|
||||||
#if defined(Rel10) || defined(Rel14)
|
#if defined(Rel10) || defined(Rel14)
|
||||||
@@ -1657,7 +1894,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
#if defined(Rel10) || defined(Rel14)
|
#if defined(Rel10) || defined(Rel14)
|
||||||
|
|
||||||
if (MBMS_flag > 0) {
|
if (MBMS_flag > 0) {
|
||||||
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list,sib13_part);
|
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list, sib13_part);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -333,6 +333,24 @@ init_SI(
|
|||||||
|
|
||||||
sib1_v13ext = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension;
|
sib1_v13ext = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension;
|
||||||
|
|
||||||
|
// Basic Asserts for CE_level0 PRACH configuration
|
||||||
|
|
||||||
|
RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR = &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2_BR->radioResourceConfigCommon;
|
||||||
|
struct PRACH_ConfigSIB_v1310 *ext4_prach=radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310;
|
||||||
|
|
||||||
|
PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13;
|
||||||
|
AssertFatal(prach_ParametersListCE_r13->list.count>0,"prach_ParametersListCE_r13 is empty\n");
|
||||||
|
PRACH_ParametersCE_r13_t *p = prach_ParametersListCE_r13->list.array[0];
|
||||||
|
AssertFatal(p->prach_StartingSubframe_r13 != NULL, "prach_StartingSubframe_r13 celevel0 is null\n");
|
||||||
|
AssertFatal((1<<p->numRepetitionPerPreambleAttempt_r13)<=(2<<*p->prach_StartingSubframe_r13),
|
||||||
|
"prachce0->numReptitionPerPreambleAttempt_r13 %d > prach_StartingSubframe_r13 %d\n",
|
||||||
|
1<<p->numRepetitionPerPreambleAttempt_r13,
|
||||||
|
2<<*p->prach_StartingSubframe_r13);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ eNBs =
|
|||||||
prach_config_index = 0;
|
prach_config_index = 0;
|
||||||
prach_high_speed = "DISABLE";
|
prach_high_speed = "DISABLE";
|
||||||
prach_zero_correlation = 1;
|
prach_zero_correlation = 1;
|
||||||
prach_freq_offset = 2;
|
prach_freq_offset = 1;
|
||||||
pucch_delta_shift = 1;
|
pucch_delta_shift = 1;
|
||||||
pucch_nRB_CQI = 1;
|
pucch_nRB_CQI = 1;
|
||||||
pucch_nCS_AN = 0;
|
pucch_nCS_AN = 0;
|
||||||
@@ -109,36 +109,37 @@ eNBs =
|
|||||||
# BR Parameters
|
# BR Parameters
|
||||||
br_parameters :
|
br_parameters :
|
||||||
{
|
{
|
||||||
|
|
||||||
|
fdd_DownlinkOrTddSubframeBitmapBR_r13 = "subframePattern40-r13";
|
||||||
|
fdd_DownlinkOrTddSubframeBitmapBR_val_r13 = 0xFFFFFFFFFF;
|
||||||
|
|
||||||
#SIB1
|
#SIB1
|
||||||
schedulingInfoSIB1_BR_r13 = 4;
|
schedulingInfoSIB1_BR_r13 = 4;
|
||||||
hyperSFN_r13 = 0;
|
#hyperSFN_r13 = 0;
|
||||||
#eDRX_Allowed_r13 = 0;
|
#eDRX_Allowed_r13 = 0;
|
||||||
cellSelectionInfoCE_r13 = "ENABLE";
|
cellSelectionInfoCE_r13 = "ENABLE";
|
||||||
q_RxLevMinCE_r13 = -50;
|
q_RxLevMinCE_r13 = -70;
|
||||||
#q_QualMinRSRQ_CE_r13 = ;
|
#q_QualMinRSRQ_CE_r13 = ;
|
||||||
bandwidthReducedAccessRelatedInfo_r13 = "ENABLE"
|
bandwidthReducedAccessRelatedInfo_r13 = "ENABLE"
|
||||||
scheduling_info_br =
|
scheduling_info_br =
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
si_Narrowband_r13 = 5;
|
si_Narrowband_r13 = 5;
|
||||||
si_TBS_r13 = 4;
|
si_TBS_r13 = 5;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
si_WindowLength_BR_r13 = 0;
|
si_WindowLength_BR_r13 = 0;
|
||||||
si_RepetitionPattern_r13 = 0;
|
si_RepetitionPattern_r13 = 0;
|
||||||
fdd_DownlinkOrTddSubframeBitmapBR_r13 = "subframePattern10-r13"
|
startSymbolBR_r13 = 3;
|
||||||
fdd_DownlinkOrTddSubframeBitmapBR_val_r13 = 0;
|
|
||||||
fdd_UplinkSubframeBitmapBR_r13 = 0;
|
|
||||||
startSymbolBR_r13 = 1;
|
|
||||||
si_HoppingConfigCommon_r13 = 1; # Note: 1==OFF !
|
si_HoppingConfigCommon_r13 = 1; # Note: 1==OFF !
|
||||||
si_ValidityTime_r13 = 0;
|
si_ValidityTime_r13 = 0;
|
||||||
system_info_value_tag_SI =
|
#system_info_value_tag_SI =
|
||||||
(
|
#(
|
||||||
{
|
# {
|
||||||
systemInfoValueTagSi_r13 = 0;
|
# systemInfoValueTagSi_r13 = 0;
|
||||||
}
|
# }
|
||||||
);
|
#);
|
||||||
freqHoppingParametersDL_r13 = "ENABLE"
|
freqHoppingParametersDL_r13 = "DISABLE"
|
||||||
mpdcch_pdsch_HoppingNB_r13 = 0;
|
mpdcch_pdsch_HoppingNB_r13 = 0;
|
||||||
interval_DLHoppingConfigCommonModeA_r13 = "interval-FDD-r13"
|
interval_DLHoppingConfigCommonModeA_r13 = "interval-FDD-r13"
|
||||||
interval_DLHoppingConfigCommonModeA_r13_val = 0;
|
interval_DLHoppingConfigCommonModeA_r13_val = 0;
|
||||||
@@ -149,17 +150,17 @@ eNBs =
|
|||||||
|
|
||||||
# SIB23
|
# SIB23
|
||||||
frame_type = "FDD";
|
frame_type = "FDD";
|
||||||
preambleTransMax_CE_r13 = 10;
|
preambleTransMax_CE_r13 = 6;
|
||||||
|
|
||||||
# max 4
|
# max 4
|
||||||
rach_CE_LevelInfoList_r13 =
|
rach_CE_LevelInfoList_r13 =
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
firstPreamble_r13 = 0;
|
firstPreamble_r13 = 60;
|
||||||
lastPreamble_r13 = 63;
|
lastPreamble_r13 = 63;
|
||||||
ra_ResponseWindowSize_r13 = 0;
|
ra_ResponseWindowSize_r13 = 0;
|
||||||
mac_ContentionResolutionTimer_r13 = 0;
|
mac_ContentionResolutionTimer_r13 = 0;
|
||||||
rar_HoppingConfig_r13 = 0;
|
rar_HoppingConfig_r13 = 1;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -169,7 +170,7 @@ eNBs =
|
|||||||
rsrp_range_list =
|
rsrp_range_list =
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
rsrp_range_br = 60;
|
rsrp_range_br = 0;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -180,41 +181,63 @@ eNBs =
|
|||||||
prach_config_index_br = 3;
|
prach_config_index_br = 3;
|
||||||
prach_freq_offset_br = 1;
|
prach_freq_offset_br = 1;
|
||||||
prach_StartingSubframe_r13 = 0;
|
prach_StartingSubframe_r13 = 0;
|
||||||
maxNumPreambleAttemptCE_r13 = 0;
|
maxNumPreambleAttemptCE_r13 = 6;
|
||||||
numRepetitionPerPreambleAttempt_r13 = 0;
|
numRepetitionPerPreambleAttempt_r13 = 0;
|
||||||
mpdcch_NumRepetition_RA_r13 = 0;
|
mpdcch_NumRepetition_RA_r13 = 0;
|
||||||
prach_HoppingConfig_r13 = 0;
|
prach_HoppingConfig_r13 = 1;
|
||||||
max_available_narrow_band =
|
max_available_narrow_band = [2];
|
||||||
(
|
}
|
||||||
{
|
|
||||||
maxavailablenarrowband = 2;
|
|
||||||
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
n1PUCCH_AN_InfoList_r13 =
|
n1PUCCH_AN_InfoList_r13 =
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
pucch_info_value = 12;
|
pucch_info_value = 0;
|
||||||
},
|
|
||||||
{
|
|
||||||
pucch_info_value = 13;
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
pcch_config_v1310 :
|
||||||
|
{
|
||||||
|
paging_narrowbands_r13 = 1;
|
||||||
|
mpdcch_numrepetition_paging_r13 = 0;
|
||||||
|
#nb_v1310 = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pucch_NumRepetitionCE_Msg4_Level0_r13 = 0;
|
||||||
|
#pucch_NumRepetitionCE_Msg4_Level1_r13 = 1;
|
||||||
|
#pucch_NumRepetitionCE_Msg4_Level2_r13 = 2;
|
||||||
|
#pucch_NumRepetitionCE_Msg4_Level3_r13 = 3;
|
||||||
|
|
||||||
|
sib2_freq_hoppingParameters_r13 :
|
||||||
|
{
|
||||||
|
# sib2_mpdcch_pdsch_hoppingNB_r13 = 0;
|
||||||
|
# sib2_interval_DLHoppingConfigCommonModeA_r13 = 0; # choice -> (0, FDD) (1, TDD)
|
||||||
|
# sib2_interval_DLHoppingConfigCommonModeA_r13_val = 0;
|
||||||
|
# sib2_interval_DLHoppingConfigCommonModeB_r13 = 0; # choice -> (0, FDD) (1, TDD)
|
||||||
|
# sib2_interval_DLHoppingConfigCommonModeB_r13_val = 0;
|
||||||
|
|
||||||
|
sib2_interval_ULHoppingConfigCommonModeA_r13 = 0; # choice -> (0, FDD) (1, TDD)
|
||||||
|
sib2_interval_ULHoppingConfigCommonModeA_r13_val = 2;
|
||||||
|
# sib2_interval_ULHoppingConfigCommonModeB_r13 = 0; # choice -> (0, FDD) (1, TDD)
|
||||||
|
# sib2_interval_ULHoppingConfigCommonModeB_r13_val = 0;
|
||||||
|
|
||||||
|
# sib2_mpdcch_pdsch_hoppingOffset_r13 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mpdcch_startSF_CSS_RA_r13 = "fdd-r13"
|
mpdcch_startSF_CSS_RA_r13 = "fdd-r13"
|
||||||
mpdcch_startSF_CSS_RA_r13_val = 5;
|
mpdcch_startSF_CSS_RA_r13_val = 0;
|
||||||
#prach_HoppingOffset_r13 = ;
|
prach_HoppingOffset_r13 = 0;
|
||||||
|
|
||||||
prach_root = 1;
|
prach_root = 89;
|
||||||
prach_config_index = 0;
|
prach_config_index = 3;
|
||||||
prach_high_speed = "DISABLE";
|
prach_high_speed = "DISABLE";
|
||||||
prach_zero_correlation = 1;
|
prach_zero_correlation = 1;
|
||||||
prach_freq_offset = 3;
|
prach_freq_offset = 1;
|
||||||
pucch_delta_shift = 1;
|
pucch_delta_shift = 1;
|
||||||
pucch_nRB_CQI = 1;
|
pucch_nRB_CQI = 0;
|
||||||
pucch_nCS_AN = 0;
|
pucch_nCS_AN = 0;
|
||||||
pucch_n1_AN = 32;
|
pucch_n1_AN = 32;
|
||||||
pdsch_referenceSignalPower = -27;
|
pdsch_referenceSignalPower = -27;
|
||||||
@@ -226,7 +249,7 @@ eNBs =
|
|||||||
pusch_groupHoppingEnabled = "ENABLE";
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
pusch_groupAssignment = 0;
|
pusch_groupAssignment = 0;
|
||||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
pusch_nDMRS1 = 1;
|
pusch_nDMRS1 = 0;
|
||||||
phich_duration = "NORMAL";
|
phich_duration = "NORMAL";
|
||||||
phich_resource = "ONESIXTH";
|
phich_resource = "ONESIXTH";
|
||||||
srs_enable = "DISABLE";
|
srs_enable = "DISABLE";
|
||||||
@@ -239,7 +262,7 @@ eNBs =
|
|||||||
pucch_deltaF_Format2 = "deltaF0";
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
pucch_deltaF_Format2a = "deltaF0";
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
pucch_deltaF_Format2b = "deltaF0";
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
rach_numberOfRA_Preambles = 64;
|
rach_numberOfRA_Preambles = 60;
|
||||||
rach_preamblesGroupAConfig = "DISABLE";
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
rach_powerRampingStep = 4;
|
rach_powerRampingStep = 4;
|
||||||
rach_preambleInitialReceivedTargetPower = -108;
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
@@ -251,11 +274,11 @@ eNBs =
|
|||||||
pcch_nB = "oneT";
|
pcch_nB = "oneT";
|
||||||
bcch_modificationPeriodCoeff = 2;
|
bcch_modificationPeriodCoeff = 2;
|
||||||
ue_TimersAndConstants_t300 = 1000;
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
ue_TimersAndConstants_t301 = 1000;
|
ue_TimersAndConstants_t301 = 400;
|
||||||
ue_TimersAndConstants_t310 = 1000;
|
ue_TimersAndConstants_t310 = 50;
|
||||||
ue_TimersAndConstants_t311 = 10000;
|
ue_TimersAndConstants_t311 = 30000;
|
||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 1;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 10;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user