fix most of doxygen warnings and errors

This commit is contained in:
Laurent THOMAS
2023-10-26 16:47:19 +02:00
parent 4a52b17386
commit bba9aac079
139 changed files with 2408 additions and 3054 deletions
-1
View File
@@ -496,7 +496,6 @@ function main() {
################### ###################
if [ "$BUILD_DOXYGEN" = "1" ] ; then if [ "$BUILD_DOXYGEN" = "1" ] ; then
echo_info "Built Doxygen based documentation. The documentation file is located here: $OPENAIR_DIR/$BUILD_DIR/build/html/index.html" echo_info "Built Doxygen based documentation. The documentation file is located here: $OPENAIR_DIR/$BUILD_DIR/build/html/index.html"
echo_info "if you can't open this as file:///... in your browser, see apparmor over complex configuration, or move the doc tree in a place that suits this 'security' apparmor"
fi fi
if [ "$UE" = 1 ] ; then if [ "$UE" = 1 ] ; then
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file common/config/cmdline/config_libconfig.c /*! \file config_cmdline.c
* \brief configuration module, command line parsing implementation * \brief configuration module, command line parsing implementation
* \author Francois TABURET * \author Francois TABURET
* \date 2017 * \date 2017
+6 -27
View File
@@ -64,23 +64,13 @@
extern "C" { extern "C" {
#endif #endif
/** @defgroup _LOG LOG Generator
* @{*/
/* @}*/
/** @defgroup _macro Macro Definition
* @ingroup _LOG
* @brief these macros are used in the code of LOG
* @{*/
/* @}*/
/** @defgroup _max_length Maximum Length of LOG /** @defgroup _max_length Maximum Length of LOG
* @ingroup _macro * @ingroup _macro
* @brief the macros that describe the maximum length of LOG * @brief the macros that describe the maximum length of LOG
* @{*/ * @{*/
#define MAX_LOG_TOTAL 16384 /*!< \brief the maximum length of a log */ #define MAX_LOG_TOTAL 16384 /*!< \brief the maximum length of a log */
/* @}*/ /** @}*/
/** @defgroup _log_level Message levels defined by LOG /** @defgroup _log_level Message levels defined by LOG
* @ingroup _macro * @ingroup _macro
@@ -95,8 +85,7 @@ extern "C" {
# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers, likely impact real-time behavior*/ # define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers, likely impact real-time behavior*/
#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/ #define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
/* @}*/ /** @}*/
/** @defgroup _log_format Defined log format /** @defgroup _log_format Defined log format
* @ingroup _macro * @ingroup _macro
@@ -112,15 +101,6 @@ extern "C" {
#define LOG_BLUE "\033[34m" /*!< \brief VT100 sequence for blue foreground */ #define LOG_BLUE "\033[34m" /*!< \brief VT100 sequence for blue foreground */
#define LOG_CYBL "\033[40;36m" /*!< \brief VT100 sequence for cyan foreground on black background */ #define LOG_CYBL "\033[40;36m" /*!< \brief VT100 sequence for cyan foreground on black background */
#define LOG_RESET "\033[0m" /*!< \brief VT100 sequence for reset (black) foreground */ #define LOG_RESET "\033[0m" /*!< \brief VT100 sequence for reset (black) foreground */
/* @}*/
/** @defgroup _syslog_conf Macros for write in syslog.conf
* @ingroup _macro
* @brief Macros used to write lines (local/remote) in syslog.conf
* @{*/
#define FLAG_NOCOLOR 0x0001 /*!< \brief use colors in log messages, depending on level */ #define FLAG_NOCOLOR 0x0001 /*!< \brief use colors in log messages, depending on level */
#define FLAG_THREAD 0x0008 /*!< \brief display thread name in log messages */ #define FLAG_THREAD 0x0008 /*!< \brief display thread name in log messages */
#define FLAG_LEVEL 0x0010 /*!< \brief display log level in log messages */ #define FLAG_LEVEL 0x0010 /*!< \brief display log level in log messages */
@@ -130,6 +110,7 @@ extern "C" {
#define FLAG_THREAD_ID 0x0200 #define FLAG_THREAD_ID 0x0200
#define FLAG_REAL_TIME 0x0400 #define FLAG_REAL_TIME 0x0400
#define FLAG_INITIALIZED 0x8000 #define FLAG_INITIALIZED 0x8000
/** @}*/
#define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O) #define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O)
#define CLEAR_LOG_OPTION(O) g_log->flag = (g_log->flag & (~O)) #define CLEAR_LOG_OPTION(O) g_log->flag = (g_log->flag & (~O))
@@ -333,7 +314,7 @@ typedef struct {
int enable_flag; int enable_flag;
} log_mem_cnt_t; } log_mem_cnt_t;
/* @}*/ /** @}*/
/*!\fn int32_t write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, char format); /*!\fn int32_t write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, char format);
\brief Write output file from signal data \brief Write output file from signal data
@@ -460,8 +441,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0) #define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
#define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */ #define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */
# define LOG_MM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 1);} while(0) # define LOG_MM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 1);} while(0)
/* @}*/ /** @}*/
/** @defgroup _useful_functions useful functions in LOG /** @defgroup _useful_functions useful functions in LOG
* @ingroup _macro * @ingroup _macro
@@ -472,8 +452,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
#define LOG_EXIT(c) do { LOG_END(c); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */ #define LOG_EXIT(c) do { LOG_END(c); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
#define LOG_RETURN(c,r) do {LOG_T(c,"Leaving %s (rc = %08lx)\n", __FUNCTION__ , (unsigned long)(r) );return(r);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */ #define LOG_RETURN(c,r) do {LOG_T(c,"Leaving %s (rc = %08lx)\n", __FUNCTION__ , (unsigned long)(r) );return(r);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
/** @}*/
/* @}*/
#ifdef __cplusplus #ifdef __cplusplus
} }
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file common/utils/prach_utils.h /*! \file prach_utils.h
* \brief computation of some PRACH variables used in both MAC and PHY * \brief computation of some PRACH variables used in both MAC and PHY
* \author R. Knopp * \author R. Knopp
* \date 2020 * \date 2020
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note * \note
* \warning * \warning
*/ */
uint8_t get_prach_fmt(int prach_ConfigIndex,int frame_type); uint8_t get_prach_fmt(int prach_ConfigIndex,int frame_type);
uint8_t get_prach_prb_offset(int frame_type, uint8_t get_prach_prb_offset(int frame_type,
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file common/utils/telnetsrv/telnetsrv_nrue_measurements.c /*! \file telnetsrv_5Gue_measurements.c
* \brief: implementation of telnet commands related to nrUE measurments * \brief: implementation of telnet commands related to nrUE measurments
* \author Francois TABURET * \author Francois TABURET
* \date 2021 * \date 2021
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file common/utils/telnetsrv/telnetsrv_phycmd.c /*! \file telnetsrv_enb_phycmd.c
* \brief: implementation of telnet commands related to softmodem linux process * \brief: implementation of telnet commands related to softmodem linux process
* \author Francois TABURET * \author Francois TABURET
* \date 2017 * \date 2017
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file common/utils/telnetsrv_proccmd.h /*! \file telnetsrv_loader.h
* \brief: Include file defining telnet commands related to softmodem linux process * \brief: Include file defining telnet commands related to softmodem linux process
* \author Francois TABURET * \author Francois TABURET
* \date 2018 * \date 2018
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file common/utils/telnetsrv_proccmd.h /*! \file telnetsrv_phycmd.h
* \brief: Include file defining telnet commands related to softmodem linux process * \brief: Include file defining telnet commands related to softmodem linux process
* \author Francois TABURET * \author Francois TABURET
* \date 2017 * \date 2017
+1451 -1625
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file lte-enb.c /*! \file nr-gnb.c
* \brief Top-level threads for gNodeB * \brief Top-level threads for gNodeB
* \author R. Knopp, F. Kaltenberger, Navid Nikaein * \author R. Knopp, F. Kaltenberger, Navid Nikaein
* \date 2012 * \date 2012
+4 -4
View File
@@ -20,13 +20,13 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file time_profiling.h /*! \file rt_profiling.h
* \brief Definitions for proflling real-time scheduling * \brief Definitions for proflling real-time scheduling
* \author * \author
* \date 2022 * \date 2022
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: * \email:
* \note * \note
* \warning * \warning
*/ */
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file lte-softmodem-common.c /*! \file softmodem-common.c
* \brief common code for 5G and LTE softmodem main xNB and UEs source (nr-softmodem.c, lte-softmodem.c...) * \brief common code for 5G and LTE softmodem main xNB and UEs source (nr-softmodem.c, lte-softmodem.c...)
* \author Nokia BellLabs France, francois Taburet * \author Nokia BellLabs France, francois Taburet
* \date 2020 * \date 2020
+3 -3
View File
@@ -19,13 +19,13 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file lte-softmodem-common.h /*! \file softmodem-common.h
* \brief Top-level threads for eNodeB * \brief Top-level threads for eNodeB
* \author * \author
* \date 2012 * \date 2012
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: * \email:
* \note * \note
* \warning * \warning
*/ */
-2
View File
@@ -246,5 +246,3 @@ main() {
printf("\n"); printf("\n");
} }
#endif #endif
/** @}*/
-2
View File
@@ -325,5 +325,3 @@ main() {
printf("\n"); printf("\n");
} }
#endif #endif
/** @}*/
+1 -1
View File
@@ -504,5 +504,5 @@ int nr_rate_matching_ldpc_rx(uint32_t Tbslbrm,
decoder_if_t phy_threegpplte_turbo_decoder; decoder_if_t phy_threegpplte_turbo_decoder;
decoder_if_t phy_threegpplte_turbo_decoder8; decoder_if_t phy_threegpplte_turbo_decoder8;
decoder_if_t phy_threegpplte_turbo_decoder16; decoder_if_t phy_threegpplte_turbo_decoder16;
/** @} */
#endif #endif
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair1/PHY/CODING /*! \file coding_load.c
* \brief: load library implementing coding/decoding algorithms * \brief: load library implementing coding/decoding algorithms
* \author Francois TABURET * \author Francois TABURET
* \date 2017 * \date 2017
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*!\file ldpc_encoder2.c /*! \file ldpc_encoder_optim.c
* \brief Defines the optimized LDPC encoder * \brief Defines the optimized LDPC encoder
* \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom) * \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom)
* \email openair_tech@eurecom.fr * \email openair_tech@eurecom.fr
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*!\file ldpc_encoder2.c /*! \file ldpc_encoder_optim8seg.c
* \brief Defines the optimized LDPC encoder * \brief Defines the optimized LDPC encoder
* \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom) * \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom)
* \email openair_tech@eurecom.fr * \email openair_tech@eurecom.fr
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*!\file ldpc_encoder2.c /*! \file ldpc_encoder_optim8segmulti.c
* \brief Defines the optimized LDPC encoder * \brief Defines the optimized LDPC encoder
* \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom) * \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom)
* \email openair_tech@eurecom.fr * \email openair_tech@eurecom.fr
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair1/PHY/CODING/coding_nr_load.c /*! \file nrLDPC_load.c
* \brief: load library implementing coding/decoding algorithms * \brief: load library implementing coding/decoding algorithms
* \author Francois TABURET * \author Francois TABURET
* \date 2020 * \date 2020
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*!\file PHY/CODING/nrPolar_tools/nr_polar_procedures.h /*! \file nr_polar_procedures.c
* \brief * \brief
* \author Turker Yilmaz * \author Turker Yilmaz
* \date 2018 * \date 2018
+2 -2
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*!\file PHY/CODING/nr_polar_init.h /*! \file nr_polar_init.c
* \brief * \brief
* \author Turker Yilmaz, Raymond Knopp * \author Turker Yilmaz, Raymond Knopp
* \date 2018 * \date 2018
@@ -28,7 +28,7 @@
* \email turker.yilmaz@eurecom.fr, raymond.knopp@eurecom.fr * \email turker.yilmaz@eurecom.fr, raymond.knopp@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include "PHY/NR_TRANSPORT/nr_dci.h" #include "PHY/NR_TRANSPORT/nr_dci.h"
+14 -6
View File
@@ -42,7 +42,7 @@
*/ */
/*! /*!
\fn int l1_top_init_eNB(void) \fn l1_north_init_eNB
\brief Initialize north interface for L1 \brief Initialize north interface for L1
@returns 0 on success @returns 0 on success
*/ */
@@ -74,9 +74,9 @@ int init_lte_ue_signal(PHY_VARS_UE *phy_vars_ue,
/*! /*!
\brief Allocate and initialize the PHY variables releated to the transport channel buffers (UL/DL) \brief Allocate and initialize the PHY variables releated to the transport channel buffers (UL/DL)
@param ue Pointer to UE L1 context @param ue Pointer to UE L1 context
@param abstraction flag Indicates that abstraction is used in L1 @param abstraction_flag Indicates that abstraction is used in L1
*/ */
void init_lte_ue_transport(PHY_VARS_UE *ue,int absraction_flag); void init_lte_ue_transport(PHY_VARS_UE *ue, int abstraction_flag);
/*! /*!
\brief Allocate and initialize the PHY variables relevant to the LTE implementation (eNB). \brief Allocate and initialize the PHY variables relevant to the LTE implementation (eNB).
@@ -99,14 +99,20 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNb,
*/ */
void phy_free_lte_eNB(PHY_VARS_eNB *phy_vars_eNb); void phy_free_lte_eNB(PHY_VARS_eNB *phy_vars_eNb);
/** \brief Configure LTE_DL_FRAME_PARMS with components derived after initial synchronization (MIB decoding + primary/secondary synch). /** \brief Configure LTE_DL_FRAME_PARMS with components derived after initial synchronization (MIB decoding + primary/secondary
\details The basically allows configuration of \f$N_{\mathrm{RB}}^{\mathrm{DL}}\f$, the cell id \f$N_{\mathrm{ID}}^{\mathrm{cell}}\f$, the normal/extended prefix mode, the frame type (FDD/TDD), \f$N_{\mathrm{cp}}\f$, the number of TX antennas at eNB (\f$p\f$) and the number of PHICH groups, \f$N_{\mathrm{group}}^{\mathrm{PHICH}}\f$ synch). \details The basically allows configuration of \f$N_{\mathrm{RB}}^{\mathrm{DL}}\f$, the cell id
@param lte_frame_parms pointer to LTE parameter structure \f$N_{\mathrm{ID}}^{\mathrm{cell}}\f$, the normal/extended prefix mode, the frame type (FDD/TDD), \f$N_{\mathrm{cp}}\f$, the number
of TX antennas at eNB (\f$p\f$) and the number of PHICH groups, \f$N_{\mathrm{group}}^{\mathrm{PHICH}}\f$
@param Mod_id
@param CC_id
@param eutra_band
@param N_RB_DL Number of DL resource blocks @param N_RB_DL Number of DL resource blocks
@param Nid_cell Cell ID @param Nid_cell Cell ID
@param Ncp Normal/Extended Prefix flag @param Ncp Normal/Extended Prefix flag
@param p_eNB Number of eNB TX antennas @param p_eNB Number of eNB TX antennas
@param phich_config Pointer to PHICH_CONFIG_COMMON @param phich_config Pointer to PHICH_CONFIG_COMMON
@param dl_CarrierFreq
@param ul_CarrierFreq
*/ */
void phy_config_mib_eNB(int Mod_id, void phy_config_mib_eNB(int Mod_id,
int CC_id, int CC_id,
@@ -296,6 +302,7 @@ void phy_config_sib13_eNB(module_id_t Mod_id,
@param index index of the node @param index index of the node
@param cba_rnti rnti for the cba transmission @param cba_rnti rnti for the cba transmission
@param num_active_cba_groups num active cba group @param num_active_cba_groups num active cba group
@param cba_group_id
*/ */
void phy_config_cba_rnti (module_id_t Mod_id,int CC_id,eNB_flag_t eNB_flag, uint8_t index, rnti_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups); void phy_config_cba_rnti (module_id_t Mod_id,int CC_id,eNB_flag_t eNB_flag, uint8_t index, rnti_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups);
@@ -390,5 +397,6 @@ void phy_config_update_sib13_request(PHY_Config_t *phy_config);
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf); int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms); void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
void fill_subframe_mask(PHY_VARS_eNB *eNB); void fill_subframe_mask(PHY_VARS_eNB *eNB);
/** @}*/
#endif #endif
+2 -7
View File
@@ -32,13 +32,6 @@
/*!\brief Timing drift hysterisis in samples*/ /*!\brief Timing drift hysterisis in samples*/
#define SYNCH_HYST 2 #define SYNCH_HYST 2
/*!
\brief This function is used for time-frequency scanning prior to complete cell search. It scans
over the entire LTE band for maximum correlation and keeps the 10 best scores and the correspoding frequency offset (5 kHz granularity) for each of the 3 PSS sequences.
\param ue Pointer to UE variables
\param band index of lte band
\param DL_freq Central RF Frequency in Hz
*/
/*! /*!
\brief This function allocates memory needed for the synchronization. \brief This function allocates memory needed for the synchronization.
\param frame_parms LTE DL frame parameter structure \param frame_parms LTE DL frame parameter structure
@@ -151,6 +144,7 @@ This function computes the time domain channel response, finds the peak and adju
\param frame_parms LTE DL frame parameter structure \param frame_parms LTE DL frame parameter structure
\param phy_vars_ue Pointer to UE PHY data structure \param phy_vars_ue Pointer to UE PHY data structure
\param eNb_id \param eNb_id
\param subframe
\param clear If clear==1 moving average filter is reset \param clear If clear==1 moving average filter is reset
\param coef Coefficient of the moving average filter (Q1.15) \param coef Coefficient of the moving average filter (Q1.15)
*/ */
@@ -181,6 +175,7 @@ void lte_ue_measurements_emul(PHY_VARS_UE *phy_vars_ue,
/*! \brief Function to return the path-loss based on the UE cell-specific reference signal strength and transmission power of eNB /*! \brief Function to return the path-loss based on the UE cell-specific reference signal strength and transmission power of eNB
@param Mod_id Module ID for UE @param Mod_id Module ID for UE
@param CC_id
@param eNB_index Index of eNB on which to act @param eNB_index Index of eNB on which to act
@returns Path loss in dB @returns Path loss in dB
*/ */
+2 -5
View File
@@ -118,10 +118,8 @@ void lte_sync_time_free(void) {
#define SHIFT 17 #define SHIFT 17
int lte_sync_time(int **rxdata, LTE_DL_FRAME_PARMS *frame_parms, int *eNB_id)
int lte_sync_time(int **rxdata, ///rx data in time domain {
LTE_DL_FRAME_PARMS *frame_parms,
int *eNB_id) {
// perform a time domain correlation using the oversampled sync sequence // perform a time domain correlation using the oversampled sync sequence
unsigned int n, ar, s, peak_pos, peak_val, sync_source; unsigned int n, ar, s, peak_pos, peak_val, sync_source;
struct complexd sync_out[3]= {{0}}, sync_out2[3]= {{0}}; struct complexd sync_out[3]= {{0}}, sync_out2[3]= {{0}};
@@ -168,7 +166,6 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
return(peak_pos); return(peak_pos);
} }
int ru_sync_time_init(RU_t *ru) { // LTE_UE_COMMON *common_vars int ru_sync_time_init(RU_t *ru) { // LTE_UE_COMMON *common_vars
/* /*
int16_t dmrs[2048]; int16_t dmrs[2048];
+11 -10
View File
@@ -1,16 +1,16 @@
/******************************************************************************* /*******************************************************************************
*******************************************************************************/ *******************************************************************************/
/*! \file PHY/LTE_REFSIG/defs_NB_IoT.c /*! \file defs_NB_IoT.h
* \function called by lte_dl_cell_spec_NB_IoT.c , TS 36-211, V13.4.0 2017-02 * \function called by lte_dl_cell_spec_NB_IoT.c , TS 36-211, V13.4.0 2017-02
* \author M. KANJ * \author M. KANJ
* \date 2017 * \date 2017
* \version 0.0 * \version 0.0
* \company bcom * \company bcom
* \email: matthieu.kanj@b-com.com * \email: matthieu.kanj@b-com.com
* \note * \note
* \warning * \warning
*/ */
/* Definitions for NB_IoT Reference signals */ /* Definitions for NB_IoT Reference signals */
@@ -58,3 +58,4 @@ void generate_ul_ref_sigs_rx_NB_IoT(void);
void free_ul_ref_sigs_NB_IoT(void); void free_ul_ref_sigs_NB_IoT(void);
#endif #endif
/** @}*/
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_REFSIG/lte_dl_ue_spec.c /*! \file lte_dl_uespec.c
* \brief Top-level routines for generating UE-specific Reference signals from 36-211, V11.3.0 2013-06 * \brief Top-level routines for generating UE-specific Reference signals from 36-211, V11.3.0 2013-06
* \author R. Knopp X. Jiang * \author R. Knopp X. Jiang
* \date 2015 * \date 2015
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: knopp@eurecom.fr xiwen.jiang@eurecom.fr * \email: knopp@eurecom.fr xiwen.jiang@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
+1
View File
@@ -186,3 +186,4 @@ int lte_generate_srs(int32_t **txdataF,
#endif #endif
/** @}*/
@@ -76,12 +76,4 @@ uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index);
int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t subframe); int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t subframe);
void compute_prach_seq(uint16_t rootSequenceIndex,
uint8_t prach_ConfigIndex,
uint8_t zeroCorrelationZoneConfig,
uint8_t highSpeedFlag,
frame_type_t frame_type,
uint32_t X_u[64][839]);
#endif #endif
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/proto.h /*! \file proto_NB_IoT.h
* \brief Function prototypes for PHY physical/transport channel processing and generation V8.6 2009-03 * \brief Function prototypes for PHY physical/transport channel processing and generation V8.6 2009-03
* \author R. Knopp, F. Kaltenberger * \author R. Knopp, F. Kaltenberger
* \date 2011 * \date 2011
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/transport_commont.h /*! \file transport_common.h
* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) common to both eNB/UE * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) common to both eNB/UE
* \author R. Knopp * \author R. Knopp
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note * \note
* \warning * \warning
*/ */
#ifndef __TRANSPORT_COMMON__H__ #ifndef __TRANSPORT_COMMON__H__
#define __TRANSPORT_COMMON__H__ #define __TRANSPORT_COMMON__H__
#include "PHY/defs_common.h" #include "PHY/defs_common.h"
@@ -55,7 +55,7 @@ uint8_t get_I_TBS(uint8_t I_MCS);
unsigned char get_I_TBS_UL(unsigned char I_MCS); unsigned char get_I_TBS_UL(unsigned char I_MCS);
/** \brief Compute Q (modulation order) based on downlink I_MCS. Implements table 7.1.7.1-1 from 36.213. /** \brief Compute Q (modulation order) based on downlink I_MCS. Implements table 7.1.7.1-1 from 36.213.
@param I_MCS @param mcs
@param nb_rb @param nb_rb
@return Transport block size */ @return Transport block size */
uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb); uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
@@ -63,7 +63,7 @@ uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
uint16_t find_nb_rb_DL(uint8_t mcs, uint32_t bytes, uint16_t nb_rb_max, uint16_t rb_gran); uint16_t find_nb_rb_DL(uint8_t mcs, uint32_t bytes, uint16_t nb_rb_max, uint16_t rb_gran);
/** \brief Compute Q (modulation order) based on uplink I_MCS. Implements table 7.1.7.1-1 from 36.213. /** \brief Compute Q (modulation order) based on uplink I_MCS. Implements table 7.1.7.1-1 from 36.213.
@param I_MCS @param mcs
@param nb_rb @param nb_rb
@return Transport block size */ @return Transport block size */
uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb); uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb);
@@ -212,45 +212,16 @@ int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame, uint8_t sub
/*! /*!
\brief Helper for MAC, returns number of available PRACH in TDD for a particular configuration index \brief Helper for MAC, returns number of available PRACH in TDD for a particular configuration index
@param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
@returns 0-5 depending on number of available prach @returns 0-5 depending on number of available prach
*/ */
uint8_t get_num_prach_tdd(module_id_t Mod_id); uint8_t get_num_prach_tdd(module_id_t Mod_id);
/*!
\brief Return the PRACH format as a function of the Configuration Index and Frame type.
@param prach_ConfigIndex PRACH Configuration Index
@param frame_type 0-FDD, 1-TDD
@returns 0-1 accordingly
*/
/*
uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type);
*/
/*! /*!
\brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index \brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index
@param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
@returns 0-5 depending on number of available prach @returns 0-5 depending on number of available prach
*/ */
uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index); uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index);
/*!
\brief Comp ute DFT of PRACH ZC sequences. Used for generation of prach in UE and reception of PRACH in eNB.
@param rootSequenceIndex PRACH root sequence
#param prach_ConfigIndex PRACH Configuration Index
@param zeroCorrelationZoneConfig PRACH ncs_config
@param highSpeedFlat PRACH High-Speed Flag
@param frame_type TDD/FDD flag
@param Xu DFT output
*/
void compute_prach_seq(uint16_t rootSequenceIndex,
uint8_t prach_ConfigIndex,
uint8_t zeroCorrelationZoneConfig,
uint8_t highSpeedFlag,
frame_type_t frame_type,
uint32_t X_u[64][839]);
void init_prach_tables(int N_ZC); void init_prach_tables(int N_ZC);
/*! /*!
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/defs.h /*! \file transport_eNB.h
* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
* \author R. Knopp * \author R. Knopp
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note * \note
* \warning * \warning
*/ */
#ifndef __TRANSPORT_ENB__H__ #ifndef __TRANSPORT_ENB__H__
#define __TRANSPORT_ENB__H__ #define __TRANSPORT_ENB__H__
#include "transport_common.h" #include "transport_common.h"
+5 -16
View File
@@ -306,39 +306,29 @@ int mch_modulation_khz_1dot25(int32_t **txdataF,
LTE_DL_FRAME_PARMS *frame_parms, LTE_DL_FRAME_PARMS *frame_parms,
LTE_eNB_DLSCH_t *dlsch); LTE_eNB_DLSCH_t *dlsch);
/** \brief Top-level generation function for eNB TX of MBSFN /** \brief Top-level generation function for eNB TX of MBSFN
@param phy_vars_eNB Pointer to eNB variables @param phy_vars_eNB Pointer to eNB variables
@param proc
@param a Pointer to transport block @param a Pointer to transport block
@param abstraction_flag
*/ */
void generate_mch_khz_1dot25(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,uint8_t *a); void generate_mch_khz_1dot25(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,uint8_t *a);
/** \brief Top-level generation function for eNB TX of MBSFN /** \brief Top-level generation function for eNB TX of MBSFN
@param phy_vars_eNB Pointer to eNB variables @param phy_vars_eNB Pointer to eNB variables
@param proc
@param a Pointer to transport block @param a Pointer to transport block
@param abstraction_flag
*/ */
void generate_mch(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,uint8_t *a); void generate_mch(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,uint8_t *a);
/** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals) /** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals)
@param phy_vars_eNB Pointer to eNB variables @param phy_vars_eNB Pointer to eNB variables
@param proc Pointer to RXn-TXnp4 proc information
@param mcs MCS for MBSFN @param mcs MCS for MBSFN
@param ndi new data indicator @param ndi new data indicator
@param rdvix @param rvidx
*/ */
void fill_eNB_dlsch_MCH(PHY_VARS_eNB *phy_vars_eNB,int mcs,int ndi,int rvidx); void fill_eNB_dlsch_MCH(PHY_VARS_eNB *phy_vars_eNB,int mcs,int ndi,int rvidx);
/** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals)
@param phy_vars_ue Pointer to UE variables
@param mcs MCS for MBSFN
@param eNB_id index of eNB in ue variables
*/
/** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals) /** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals)
for N subframes. for N subframes.
@param phy_vars_eNB Pointer to eNB variables @param phy_vars_eNB Pointer to eNB variables
@@ -426,7 +416,7 @@ void dci_encoding(uint8_t *a,
uint16_t rnti); uint16_t rnti);
/*! \brief Top-level DCI entry point. This routine codes an set of DCI PDUs and performs PDCCH modulation, interleaving and mapping. /*! \brief Top-level DCI entry point. This routine codes an set of DCI PDUs and performs PDCCH modulation, interleaving and mapping.
\param num_dci Number of pdcch symbols \param num_pdcch_symbols
\param num_dci Number of DCI pdus to encode \param num_dci Number of DCI pdus to encode
\param dci_alloc Allocation vectors for each DCI pdu \param dci_alloc Allocation vectors for each DCI pdu
\param n_rnti n_RNTI (see ) \param n_rnti n_RNTI (see )
@@ -525,7 +515,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
@param phy_vars_eNB Pointer to eNB top-level descriptor @param phy_vars_eNB Pointer to eNB top-level descriptor
@param proc Pointer to RXTX proc variables @param proc Pointer to RXTX proc variables
@param UE_id ID of UE transmitting this PUSCH @param UE_id ID of UE transmitting this PUSCH
@param subframe Index of subframe for PUSCH
@param control_only_flag Receive PUSCH with control information only @param control_only_flag Receive PUSCH with control information only
@param Nbundled Nbundled parameter for ACK/NAK scrambling from 36-212/36-213 @param Nbundled Nbundled parameter for ACK/NAK scrambling from 36-212/36-213
@param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used @param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used
@@ -584,7 +573,6 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
int br_flag int br_flag
); );
/*! /*!
\brief Process PRACH waveform \brief Process PRACH waveform
@param phy_vars_eNB Pointer to eNB top-level descriptor. If NULL, then this is an RRU @param phy_vars_eNB Pointer to eNB top-level descriptor. If NULL, then this is an RRU
@@ -592,6 +580,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
@param max_preamble most likely preamble @param max_preamble most likely preamble
@param max_preamble_energy Estimated Energy of most likely preamble @param max_preamble_energy Estimated Energy of most likely preamble
@param max_preamble_delay Estimated Delay of most likely preamble @param max_preamble_delay Estimated Delay of most likely preamble
@param avg_preamble_energy
@param Nf System frame number @param Nf System frame number
@param tdd_mapindex Index of PRACH resource in Table 5.7.1-4 (TDD) @param tdd_mapindex Index of PRACH resource in Table 5.7.1-4 (TDD)
@param br_flag indicator to act on eMTC PRACH @param br_flag indicator to act on eMTC PRACH
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/drs_modulation.c /*! \file drs_modulation.c
* \brief Top-level routines for generating the Demodulation Reference Signals from 36-211, V8.6 2009-03 * \brief Top-level routines for generating the Demodulation Reference Signals from 36-211, V8.6 2009-03
* \author R. Knopp, F. Kaltenberger, A. Bhamri * \author R. Knopp, F. Kaltenberger, A. Bhamri
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
#include "PHY/defs_UE.h" #include "PHY/defs_UE.h"
#include "PHY/phy_extern_ue.h" #include "PHY/phy_extern_ue.h"
#include "PHY/sse_intrin.h" #include "PHY/sse_intrin.h"
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/srs_modulation.c /*! \file srs_modulation.c
* \brief Top-level routines for generating sounding reference signal (SRS) V8.6 2009-03 * \brief Top-level routines for generating sounding reference signal (SRS) V8.6 2009-03
* \author R. Knopp, F. Kaltenberger * \author R. Knopp, F. Kaltenberger
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: knopp@eurecom.fr, florian.kaltenberger@eurecom.fr * \email: knopp@eurecom.fr, florian.kaltenberger@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
#include "PHY/defs_UE.h" #include "PHY/defs_UE.h"
#include "PHY/phy_extern.h" #include "PHY/phy_extern.h"
#include "common/utils/LOG/log.h" #include "common/utils/LOG/log.h"
@@ -101,18 +101,6 @@ void qpsk_qpsk(int16_t *stream0_in,
int16_t *rho01, int16_t *rho01,
int32_t length); int32_t length);
/** \brief This function perform LLR computation for dual-stream (QPSK/QPSK) transmission.
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
@param llr128p pointer to pointer to symbol in dlsch_llr*/
void qpsk_llr(int16_t *stream0_in, void qpsk_llr(int16_t *stream0_in,
int16_t *stream0_out, int16_t *stream0_out,
int length); int length);
@@ -158,6 +146,7 @@ void qpsk_qam16(int16_t *stream0_in,
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dl_ch_mag_i
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@@ -194,6 +183,7 @@ void qpsk_qam64(int16_t *stream0_in,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param dl_ch_mag_i
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@@ -231,13 +221,13 @@ void qam16_qpsk(short *stream0_in,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param ch_mag Input from scaled channel magnitude square of h0'*g0 @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/ @param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_16qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, int dlsch_16qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp, int **rxdataF_comp,
@@ -271,14 +261,14 @@ void qam16_qam16(short *stream0_in,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param ch_mag Input from scaled channel magnitude square of h0'*g0 @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param ch_mag_i Input from scaled channel magnitude square of h0'*g1 @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/ @param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_16qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, int dlsch_16qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp, int **rxdataF_comp,
@@ -313,14 +303,14 @@ void qam16_qam64(short *stream0_in,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param ch_mag Input from scaled channel magnitude square of h0'*g0 @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param ch_mag_i Input from scaled channel magnitude square of h0'*g1 @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/ @param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_16qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, int dlsch_16qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp, int **rxdataF_comp,
@@ -353,13 +343,13 @@ void qam64_qpsk(short *stream0_in,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param ch_mag Input from scaled channel magnitude square of h0'*g0 @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/ @param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_64qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, int dlsch_64qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp, int **rxdataF_comp,
@@ -409,14 +399,14 @@ void qam64_qam16_avx2(short *stream0_in,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param ch_mag Input from scaled channel magnitude square of h0'*g0 @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param ch_mag_i Input from scaled channel magnitude square of h0'*g1 @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/ @param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_64qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, int dlsch_64qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp, int **rxdataF_comp,
@@ -467,15 +457,16 @@ void qam64_qam64_avx2(int32_t *stream0_in,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference @param rxdataF_comp_i Compensated channel output for interference
@param ch_mag Input from scaled channel magnitude square of h0'*g0 @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param ch_mag_i Input from scaled channel magnitude square of h0'*g1 @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/ @param llr_offset
*/
int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp, int **rxdataF_comp,
int **rxdataF_comp_i, int **rxdataF_comp_i,
@@ -490,7 +481,6 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
//short **llr16p, //short **llr16p,
uint32_t llr_offset); uint32_t llr_offset);
/** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms. /** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms.
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@@ -499,7 +489,6 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
@param first_symbol_flag @param first_symbol_flag
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
@param llr128p pointer to pointer to symbol in dlsch_llr
@param beamforming_mode beamforming mode @param beamforming_mode beamforming mode
*/ */
int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
@@ -514,16 +503,6 @@ int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
/** /**
\brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms \brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param dlsch_llr llr output
@param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation and weighted for mid-point in 16QAM constellation
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adjust Adjustment factor in RE for PBCH/PSS/SSS allocations
@param llr128p pointer to pointer to symbol in dlsch_llr
@param beamforming_mode beamforming mode
*/ */
int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms, int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
@@ -551,14 +530,16 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
\brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms \brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param sic_buffer
@param rho_i
@param num_pdcch_symbols
@param dlsch_llr llr output @param dlsch_llr llr output
@param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first mid-point of 64-QAM constellation @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first
@param dl_ch_magb Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by second mid-point of 64-QAM constellation mid-point of 64-QAM constellation
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adjust PBCH/PSS/SSS RE adjustment (in REs) @param subframe
@param beamforming_mode beamforming mode @param mod_order_0
@param rb_alloc
*/ */
void dlsch_16qam_llr_SIC (LTE_DL_FRAME_PARMS *frame_parms, void dlsch_16qam_llr_SIC (LTE_DL_FRAME_PARMS *frame_parms,
int32_t **rxdataF_comp, int32_t **rxdataF_comp,
@@ -1021,9 +1002,10 @@ void dlsch_scale_channel(int32_t **dl_ch_estimates_ext,
@param dlsch_llr Pointer to LLR values computed by dlsch_demodulation @param dlsch_llr Pointer to LLR values computed by dlsch_demodulation
@param lte_frame_parms Pointer to frame descriptor @param lte_frame_parms Pointer to frame descriptor
@param dlsch Pointer to DLSCH descriptor @param dlsch Pointer to DLSCH descriptor
@param harq_process
@param frame Frame number @param frame Frame number
@param subframe Subframe number @param subframe Subframe number
@param num_pdcch_symbols Number of PDCCH symbols @param harq_pid
@param is_crnti indicates if PDSCH belongs to a CRNTI (necessary for parallelizing decoding threads) @param is_crnti indicates if PDSCH belongs to a CRNTI (necessary for parallelizing decoding threads)
@param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used @param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used
@returns 0 on success, 1 on unsuccessful decoding @returns 0 on success, 1 on unsuccessful decoding
@@ -1045,7 +1027,8 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
PDSCH_t dlsch_id, PDSCH_t dlsch_id,
uint8_t eNB_id); uint8_t eNB_id);
/** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel estimation. It performs /** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel
estimation. It performs
- RB extraction (signal and channel estimates) - RB extraction (signal and channel estimates)
- channel compensation (matched filtering) - channel compensation (matched filtering)
- RE extraction (pilot, PBCH, synch. signals) - RE extraction (pilot, PBCH, synch. signals)
@@ -1056,11 +1039,17 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
@param type Type of PDSCH (SI_PDSCH,RA_PDSCH,PDSCH,PMCH) @param type Type of PDSCH (SI_PDSCH,RA_PDSCH,PDSCH,PMCH)
@param eNB_id eNb index (Nid1) 0,1,2 @param eNB_id eNb index (Nid1) 0,1,2
@param eNB_id_i Interfering eNB index (Nid1) 0,1,2, or 3 in case of MU-MIMO IC receiver @param eNB_id_i Interfering eNB index (Nid1) 0,1,2, or 3 in case of MU-MIMO IC receiver
@param frame
@param subframe Subframe number @param subframe Subframe number
@param symbol Symbol on which to act (within sub-frame) @param symbol Symbol on which to act (within sub-frame)
@param first_symbol_flag set to 1 on first DLSCH symbol @param first_symbol_flag set to 1 on first DLSCH symbol
@param rx_type. rx_type=RX_IC_single_stream will enable interference cancellation of a second stream when decoding the first stream. In case of TM1, 2, 5, and this can cancel interference from a neighbouring cell given by eNB_id_i. In case of TM5, eNB_id_i should be set to n_connected_eNB to perform multi-user interference cancellation. In case of TM3, eNB_id_i should be set to eNB_id to perform co-channel interference cancellation; this option should be used together with an interference cancellation step [...]. In case of TM3, if rx_type=RX_IC_dual_stream, both streams will be decoded by applying the IC single stream receiver twice. @param rx_type rx_type=RX_IC_single_stream will enable interference cancellation of a second stream when decoding the first
stream. In case of TM1, 2, 5, and this can cancel interference from a neighbouring cell given by eNB_id_i. In case of TM5, eNB_id_i
should be set to n_connected_eNB to perform multi-user interference cancellation. In case of TM3, eNB_id_i should be set to eNB_id
to perform co-channel interference cancellation; this option should be used together with an interference cancellation step [...].
In case of TM3, if rx_type=RX_IC_dual_stream, both streams will be decoded by applying the IC single stream receiver twice.
@param i_mod Modulation order of the interfering stream @param i_mod Modulation order of the interfering stream
@param harq_pid
*/ */
int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue, int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
PDSCH_t type, PDSCH_t type,
@@ -1085,6 +1074,7 @@ int32_t rx_pdcch(PHY_VARS_UE *ue,
@param phy_vars_ue Pointer to UE variables @param phy_vars_ue Pointer to UE variables
@param[out] pss_ext contain the PSS signals after the extraction @param[out] pss_ext contain the PSS signals after the extraction
@param[out] sss_ext contain the SSS signals after the extraction @param[out] sss_ext contain the SSS signals after the extraction
@param subframe
@returns 0 on success @returns 0 on success
*/ */
int pss_sss_extract(PHY_VARS_UE *phy_vars_ue, int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
@@ -1095,6 +1085,7 @@ int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
/*! \brief Extract only PSS resource elements /*! \brief Extract only PSS resource elements
@param phy_vars_ue Pointer to UE variables @param phy_vars_ue Pointer to UE variables
@param[out] pss_ext contain the PSS signals after the extraction @param[out] pss_ext contain the PSS signals after the extraction
@param subframe
@returns 0 on success @returns 0 on success
*/ */
int pss_only_extract(PHY_VARS_UE *phy_vars_ue, int pss_only_extract(PHY_VARS_UE *phy_vars_ue,
@@ -1104,6 +1095,7 @@ int pss_only_extract(PHY_VARS_UE *phy_vars_ue,
/*! \brief Extract only SSS resource elements /*! \brief Extract only SSS resource elements
@param phy_vars_ue Pointer to UE variables @param phy_vars_ue Pointer to UE variables
@param[out] sss_ext contain the SSS signals after the extraction @param[out] sss_ext contain the SSS signals after the extraction
@param subframe
@returns 0 on success @returns 0 on success
*/ */
int sss_only_extract(PHY_VARS_UE *phy_vars_ue, int sss_only_extract(PHY_VARS_UE *phy_vars_ue,
@@ -1179,7 +1171,7 @@ void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx)
/*! \brief Top-level generation route for Sidelink Shared Channel /*! \brief Top-level generation route for Sidelink Shared Channel
\param ue pointer to UE descriptor \param ue pointer to UE descriptor
\param slsch pointer to SLSCH configuration and payload \param slss pointer to SLSCH configuration and payload
\param frame_tx Frame number \param frame_tx Frame number
\param subframe_tx subframe number \param subframe_tx subframe number
*/ */
@@ -1261,13 +1253,13 @@ uint8_t get_I_TBS(uint8_t I_MCS);
unsigned char get_I_TBS_UL(unsigned char I_MCS); unsigned char get_I_TBS_UL(unsigned char I_MCS);
/** \brief Compute Q (modulation order) based on downlink I_MCS. Implements table 7.1.7.1-1 from 36.213. /** \brief Compute Q (modulation order) based on downlink I_MCS. Implements table 7.1.7.1-1 from 36.213.
@param I_MCS @param mcs
@param nb_rb @param nb_rb
@return Transport block size */ @return Transport block size */
uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb); uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
/** \brief Compute Q (modulation order) based on uplink I_MCS. Implements table 7.1.7.1-1 from 36.213. /** \brief Compute Q (modulation order) based on uplink I_MCS. Implements table 7.1.7.1-1 from 36.213.
@param I_MCS @param mcs
@param nb_rb @param nb_rb
@return Transport block size */ @return Transport block size */
uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb); uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb);
@@ -1321,10 +1313,13 @@ uint8_t I_TBS2I_MCS(uint8_t I_TBS);
uint8_t SE2I_TBS(float SE, uint8_t SE2I_TBS(float SE,
uint8_t N_PRB, uint8_t N_PRB,
uint8_t symbPerRB); uint8_t symbPerRB);
/** \brief This function generates the sounding reference symbol (SRS) for the uplink according to 36.211 v8.6.0. If IFFT_FPGA is defined, the SRS is quantized to a QPSK sequence. /** \brief This function generates the sounding reference symbol (SRS) for the uplink according to 36.211 v8.6.0. If IFFT_FPGA is
defined, the SRS is quantized to a QPSK sequence.
@param frame_parms LTE DL Frame Parameters @param frame_parms LTE DL Frame Parameters
@param soundingrs_ul_config_dedicated Dynamic configuration from RRC during Connection Establishment @param soundingrs_ul_config_dedicated Dynamic configuration from RRC during Connection Establishment
@param txdataF pointer to the frequency domain TX signal @param txdataF pointer to the frequency domain TX signal
@param amp
@param subframe
@returns 0 on success*/ @returns 0 on success*/
int generate_srs(LTE_DL_FRAME_PARMS *frame_parms, int generate_srs(LTE_DL_FRAME_PARMS *frame_parms,
SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated, SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated,
@@ -1361,13 +1356,6 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
unsigned int nb_rb, unsigned int nb_rb,
uint8_t ant); uint8_t ant);
/*!
\brief This function initializes the Group Hopping, Sequence Hopping and nPRS sequences for PUCCH/PUSCH according to 36.211 v8.6.0. It should be called after configuration of UE (reception of SIB2/3) and initial configuration of eNB (or after reconfiguration of cell-specific parameters).
@param frame_parms Pointer to a LTE_DL_FRAME_PARMS structure (eNB or UE)*/
void init_ul_hopping(LTE_DL_FRAME_PARMS *frame_parms);
/*! /*!
\brief This function implements the initialization of paging parameters for UE (See Section 7, 36.304).It must be called after setting IMSImod1024 during UE startup and after receiving SIB2 \brief This function implements the initialization of paging parameters for UE (See Section 7, 36.304).It must be called after setting IMSImod1024 during UE startup and after receiving SIB2
@param ue Pointer to UE context @param ue Pointer to UE context
@@ -1464,16 +1452,17 @@ void generate_RIV_tables(void);
N_RB_DL, PHICH_CONFIG and Nid_cell) and the UE can begin decoding PDCCH and DLSCH SI to retrieve the rest. Once these N_RB_DL, PHICH_CONFIG and Nid_cell) and the UE can begin decoding PDCCH and DLSCH SI to retrieve the rest. Once these
parameters are know, the routine calls some basic initialization routines (cell-specific reference signals, etc.) parameters are know, the routine calls some basic initialization routines (cell-specific reference signals, etc.)
@param phy_vars_ue Pointer to UE variables @param phy_vars_ue Pointer to UE variables
@param mode
*/ */
int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode); int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode);
/*! /*!
\brief Encoding of PUSCH/ACK/RI/ACK from 36-212. \brief Encoding of PUSCH/ACK/RI/ACK from 36-212.
@param a Pointer to ulsch SDU @param a Pointer to ulsch SDU
@param frame_parms Pointer to Frame parameters @param phy_vars_ue
@param ulsch Pointer to ulsch descriptor
@param harq_pid HARQ process ID @param harq_pid HARQ process ID
@param eNB_id
@param subframe_rx
@param tmode Transmission mode (1-7) @param tmode Transmission mode (1-7)
@param control_only_flag Generate PUSCH with control information only @param control_only_flag Generate PUSCH with control information only
@param Nbundled Parameter for ACK/NAK bundling (36.213 Section 7.3) @param Nbundled Parameter for ACK/NAK bundling (36.213 Section 7.3)
@@ -1630,44 +1619,40 @@ int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame, uint8_t sub
@param phy_vars_ue Pointer to ue top-level descriptor @param phy_vars_ue Pointer to ue top-level descriptor
@param eNB_id Index of destination eNB @param eNB_id Index of destination eNB
@param subframe subframe index to operate on @param subframe subframe index to operate on
@param index of preamble (0-63)
@param Nf System frame number @param Nf System frame number
@returns 0 on success @returns 0 on success
*/ */
int32_t generate_prach(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint16_t Nf); int32_t generate_prach(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint16_t Nf);
/*! /*!
\brief Helper for MAC, returns number of available PRACH in TDD for a particular configuration index \brief Helper for MAC, returns number of available PRACH in TDD for a particular configuration index
@param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
@returns 0-5 depending on number of available prach @returns 0-5 depending on number of available prach
*/ */
uint8_t get_num_prach_tdd(module_id_t Mod_id); uint8_t get_num_prach_tdd(module_id_t Mod_id);
/*! /*!
\brief Return the PRACH format as a function of the Configuration Index and Frame type. \brief Return the PRACH format as a function of the Configuration Index and Frame type
@param prach_ConfigIndex PRACH Configuration Index @param prach_ConfigIndex Configuration Index
@param frame_type 0-FDD, 1-TDD @param frame_type 0-FDD 1-TDD
@returns 0-1 accordingly @returns 0-1 accordingly
*/ */
uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type); uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type);
/*! /*!
\brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index \brief Helper for MAC returns frequency index of PRACH resource in TDD for a particular configuration index
@param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
@returns 0-5 depending on number of available prach @returns 0-5 depending on number of available prach
*/ */
uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index); uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index);
/*! /*!
\brief Comp ute DFT of PRACH ZC sequences. Used for generation of prach in UE and reception of PRACH in eNB. \brief Comp ute DFT of PRACH ZC sequences. Used for generation of prach in UE and reception of PRACH in eNB
@param rootSequenceIndex PRACH root sequence @param rootSequenceIndex PRACH root sequence
#param prach_ConfigIndex PRACH Configuration Index @param prach_ConfigIndex PRACH Configuration Index
@param zeroCorrelationZoneConfig PRACH ncs_config @param zeroCorrelationZoneConfig PRACH ncs_config
@param highSpeedFlat PRACH High-Speed Flag @param highSpeedFlag PRACH High-Speed Flag
@param frame_type TDD/FDD flag @param frame_type TDD-FDD flag
@param Xu DFT output @param X_u DFT output
*/ */
void compute_prach_seq(uint16_t rootSequenceIndex, void compute_prach_seq(uint16_t rootSequenceIndex,
uint8_t prach_ConfigIndex, uint8_t prach_ConfigIndex,
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/defs.h /*! \file transport_ue.h
* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
* \author R. Knopp * \author R. Knopp
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note * \note
* \warning * \warning
*/ */
#ifndef __TRANSPORT_UE__H__ #ifndef __TRANSPORT_UE__H__
#define __TRANSPORT_UE__H__ #define __TRANSPORT_UE__H__
#include "PHY/defs_UE.h" #include "PHY/defs_UE.h"
+9 -10
View File
@@ -28,16 +28,15 @@
*/ */
/** /**
\fn void PHY_ofdm_mod(int *input,int *output,int fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype) \fn void PHY_ofdm_mod(int *input,int *output,int fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t
This function performs OFDM modulation with cyclic extension or zero-padding. etype) This function performs OFDM modulation with cyclic extension or zero-padding
@param input The sequence input samples in the frequency-domain This is a concatenation of the input symbols in SIMD redundant
@param input The sequence input samples in the frequency-domain. This is a concatenation of the input symbols in SIMD redundant format format
@param output The time-domain output signal @param output The time-domain output signal
@param fftsize size of OFDM symbol size (\f$N_d\f$) @param fftsize size of OFDM symbol size (\f$N_d\f$)
@param nb_symbols The number of OFDM symbols in the block @param nb_symbols The number of OFDM symbols in the block
@param nb_prefix_samples The number of prefix/suffix/zero samples @param nb_prefix_samples The number of prefix/suffix/zero samples
@param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS) @param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
*/ */
void PHY_ofdm_mod(int *input, void PHY_ofdm_mod(int *input,
int *output, int *output,
+6 -7
View File
@@ -44,7 +44,6 @@ void remove_7_5_kHz(RU_t *ru,uint8_t subframe);
after beamforming after beamforming
@param beam_weights Beamforming weights applied on each @param beam_weights Beamforming weights applied on each
antenna element and each carrier antenna element and each carrier
@param slot Slot number
@param symbol Symbol index on which to act @param symbol Symbol index on which to act
@param aa physical antenna index @param aa physical antenna index
@param p logical antenna index @param p logical antenna index
@@ -58,18 +57,18 @@ int beam_precoding(int32_t **txdataF,
int aa, int aa,
int p, int p,
int l1_id); int l1_id);
/** \brief This function performs beamforming precoding for common /** \brief This function performs beamforming precoding for common
* data for only one eNB, fdragon * data for only one eNB, fdragon
@param txdataF Table of pointers for frequency-domain TX signals @param txdataF Table of pointers for frequency-domain TX signals
@param txdataF_BF Table of pointers for frequency-domain TX signals @param txdataF_BF Table of pointers for frequency-domain TX signals
@param frame_parms Frame descriptor structure
after beamforming
@param beam_weights Beamforming weights applied on each @param beam_weights Beamforming weights applied on each
antenna element and each carrier antenna element and each carrier
@param slot Slot number @param subframe sf number
@param symbol Symbol index on which to act @param nb_antenna_ports physical antennas
@param aa physical antenna index*/ @param nb_tx
@param frame_parms
*/
int beam_precoding_one_eNB(int32_t **txdataF, int beam_precoding_one_eNB(int32_t **txdataF,
int32_t **txdataF_BF, int32_t **txdataF_BF,
int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15], int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15],
@@ -28,16 +28,17 @@
* @{ * @{
*/ */
/*! /*!
\brief This function performs channel estimation including frequency interpolation \brief This function performs channel estimation including frequency interpolation
\param gNB Pointer to gNB PHY variables \param gNB Pointer to gNB PHY variables
\param Ns slot number (0..19) \param Ns slot number (0..19)
\param p \param p
\param symbol symbol within slot \param symbol symbol within slot
\param bwp_start_subcarrier, first allocated subcarrier \param ul_id
\param nb_rb_pusch, number of allocated RBs for this UE \param bwp_start_subcarrier first allocated subcarrier
\param pusch_pdu
\param max_ch maximum value of estimated channel \param max_ch maximum value of estimated channel
\param nvar
*/ */
int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
@@ -95,3 +96,4 @@ void nr_freq_equalization(NR_DL_FRAME_PARMS *frame_parms,
void nr_init_fde(void); void nr_init_fde(void);
#endif #endif
/** @}*/
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_REFSIG/nr_dl_dmrs.c /*! \file nr_dmrs_rx.c
* \brief Top-level routines for generating DMRS from 38-211 * \brief Top-level routines for generating DMRS from 38-211
* \author * \author
* \date 2018 * \date 2018
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_TRANSPORT/dlsch_decoding.c /*! \file nr_dlsch.c
* \brief Top-level routines for transmission of the PDSCH 38211 v 15.2.0 * \brief Top-level routines for transmission of the PDSCH 38211 v 15.2.0
* \author Guy De Souza * \author Guy De Souza
* \date 2018 * \date 2018
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: desouza@eurecom.fr * \email: desouza@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
#include "nr_dlsch.h" #include "nr_dlsch.h"
#include "nr_dci.h" #include "nr_dci.h"
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/defs.h /*! \file nr_dlsch.h
* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
* \author R. Knopp * \author R. Knopp
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note * \note
* \warning * \warning
*/ */
#ifndef __NR_DLSCH__H #ifndef __NR_DLSCH__H
#define __NR_DLSCH__H #define __NR_DLSCH__H
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_TRANSPORT/nr_transport_proto.h.c /*! \file nr_transport_proto.h
* \brief Function prototypes for PHY physical/transport channel processing and generation * \brief Function prototypes for PHY physical/transport channel processing and generation
* \author Ahmed Hussein * \author Ahmed Hussein
* \date 2019 * \date 2019
* \version 0.1 * \version 0.1
* \company Fraunhofer IIS * \company Fraunhofer IIS
* \email: ahmed.hussein@iis.fraunhofer.de * \email: ahmed.hussein@iis.fraunhofer.de
* \note * \note
* \warning * \warning
*/ */
#ifndef __NR_TRANSPORT__H__ #ifndef __NR_TRANSPORT__H__
#define __NR_TRANSPORT__H__ #define __NR_TRANSPORT__H__
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_TRANSPORT/nr_dci_tools_common.c /*! \file nr_uci_tools_common.c
* \brief * \brief
* \author * \author
* \date 2020 * \date 2020
@@ -46,10 +46,6 @@ void peak_estimator(int32_t *buffer, int32_t buf_len, int32_t *peak_idx, int32_t
/*! /*!
\brief This function performs channel estimation including frequency and temporal interpolation \brief This function performs channel estimation including frequency and temporal interpolation
\param ue Pointer to UE PHY variables
\param gNB_id Index of target gNB
\param Ns slot number (0..19)
\param symbol symbol within slot
*/ */
void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
UE_nr_rxtx_proc_t *proc, UE_nr_rxtx_proc_t *proc,
@@ -141,5 +137,5 @@ void nr_pdsch_ptrs_processing(PHY_VARS_NR_UE *ue,
NR_UE_DLSCH_t dlsch[2]); NR_UE_DLSCH_t dlsch[2]);
float_t get_nr_RSRP(module_id_t Mod_id,uint8_t CC_id,uint8_t gNB_index); float_t get_nr_RSRP(module_id_t Mod_id,uint8_t CC_id,uint8_t gNB_index);
/** @}*/
#endif #endif
+3 -7
View File
@@ -19,13 +19,9 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/dci_nr.c /*! \file dci_nr.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. * \brief Implements PDCCH physical channel TX/RX procedures (36.211) and DCI encoding/decoding (36.212/36.213). Current LTE
* \author R. Knopp, A. Mico Pereperez * compliance V8.6 2009-03. \author R. Knopp, A. Mico Pereperez \date 2018 \version 0.1 \company Eurecom \email: knopp@eurecom.fr
* \date 2018
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/dlsch_demodulation.c /*! \file nr_dlsch_demodulation.c
* \brief Top-level routines for demodulating the PDSCH physical channel from 38-211, V15.2 2018-06 * \brief Top-level routines for demodulating the PDSCH physical channel from 38-211, V15.2 2018-06
* \author H.Wang * \author H.Wang
* \date 2018 * \date 2018
@@ -126,21 +126,9 @@ static int nr_dlsch_llr(uint32_t rx_size_symbol,
uint8_t nr_slot_rx, uint8_t nr_slot_rx,
NR_UE_DLSCH_t dlsch[2], NR_UE_DLSCH_t dlsch[2],
uint32_t llr_offset[NR_SYMBOLS_PER_SLOT]); uint32_t llr_offset[NR_SYMBOLS_PER_SLOT]);
/** \fn dlsch_extract_rbs(int32_t **rxdataF, /** \fn nr_dlsch_extract_rbs
int32_t **dl_ch_estimates, \brief This function extracts the received resource blocks, both channel estimates and data symbols, for the current
int32_t **rxdataF_ext, allocation and for multiple layer antenna gNB transmission.
int32_t **dl_ch_estimates_ext,
unsigned char symbol
uint8_t pilots,
uint8_t config_type,
unsigned short start_rb,
unsigned short nb_rb_pdsch,
uint8_t n_dmrs_cdm_groups,
uint8_t Nl,
NR_DL_FRAME_PARMS *frame_parms,
uint16_t dlDmrsSymbPos)
\brief This function extracts the received resource blocks, both channel estimates and data symbols,
for the current allocation and for multiple layer antenna gNB transmission.
@param rxdataF Raw FFT output of received signal @param rxdataF Raw FFT output of received signal
@param dl_ch_estimates Channel estimates of current slot @param dl_ch_estimates Channel estimates of current slot
@param rxdataF_ext FFT output for RBs in this allocation @param rxdataF_ext FFT output for RBs in this allocation
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/LTE_TRANSPORT/initial_sync.c /*! \file nr_initial_sync.c
* \brief Routines for initial UE synchronization procedure (PSS,SSS,PBCH and frame format detection) * \brief Routines for initial UE synchronization procedure (PSS,SSS,PBCH and frame format detection)
* \author R. Knopp, F. Kaltenberger * \author R. Knopp, F. Kaltenberger
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: knopp@eurecom.fr,kaltenberger@eurecom.fr * \email: knopp@eurecom.fr,kaltenberger@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
#include "PHY/types.h" #include "PHY/types.h"
#include "PHY/defs_nr_UE.h" #include "PHY/defs_nr_UE.h"
#include "PHY/MODULATION/modulation_UE.h" #include "PHY/MODULATION/modulation_UE.h"
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_UE_TRANSPORT/transport_proto_ue.h /*! \file nr_transport_proto_ue.h
* \brief Function prototypes for PHY physical/transport channel processing and generation V8.6 2009-03 * \brief Function prototypes for PHY physical/transport channel processing and generation V8.6 2009-03
* \author R. Knopp, F. Kaltenberger * \author R. Knopp, F. Kaltenberger
* \date 2011 * \date 2011
@@ -71,6 +71,7 @@ void nr_qpsk_qpsk(int16_t *stream0_in,
@param rho_i Correlation between channel of signal and inteference @param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param len
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
@@ -87,16 +88,14 @@ int32_t nr_dlsch_qpsk_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
uint16_t pbch_pss_sss_adj, uint16_t pbch_pss_sss_adj,
int16_t **llr128p); int16_t **llr128p);
/** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms. /** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param dlsch_llr llr output @param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param len
@param first_symbol_flag @param first_symbol_flag
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
@param llr128p pointer to pointer to symbol in dlsch_llr
@param beamforming_mode beamforming mode
*/ */
int32_t nr_dlsch_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms, int32_t nr_dlsch_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
int32_t *rxdataF_comp, int32_t *rxdataF_comp,
@@ -111,13 +110,12 @@ int32_t nr_dlsch_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param dlsch_llr llr output @param dlsch_llr llr output
@param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation and weighted for mid-point in 16QAM constellation @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation and weighted for
mid-point in 16QAM constellation
@param len
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param first_symbol_flag @param first_symbol_flag
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adjust Adjustment factor in RE for PBCH/PSS/SSS allocations
@param llr128p pointer to pointer to symbol in dlsch_llr
@param beamforming_mode beamforming mode
*/ */
void nr_dlsch_16qam_llr(NR_DL_FRAME_PARMS *frame_parms, void nr_dlsch_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
@@ -133,13 +131,14 @@ void nr_dlsch_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
@param frame_parms Frame descriptor structure @param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output @param rxdataF_comp Compensated channel output
@param dlsch_llr llr output @param dlsch_llr llr output
@param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first mid-point of 64-QAM constellation @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first
@param dl_ch_magb Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by second mid-point of 64-QAM constellation mid-point of 64-QAM constellation
@param dl_ch_magb Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by second
mid-point of 64-QAM constellation
@param symbol OFDM symbol index in sub-frame @param symbol OFDM symbol index in sub-frame
@param len
@param first_symbol_flag @param first_symbol_flag
@param nb_rb number of RBs for this allocation @param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adjust PBCH/PSS/SSS RE adjustment (in REs)
@param beamforming_mode beamforming mode
*/ */
void nr_dlsch_64qam_llr(NR_DL_FRAME_PARMS *frame_parms, void nr_dlsch_64qam_llr(NR_DL_FRAME_PARMS *frame_parms,
@@ -184,14 +183,18 @@ void nr_conjch0_mult_ch1(int *ch0,
one segment or correct decoding of all segments. Only the segment CRCs are check for the moment, the one segment or correct decoding of all segments. Only the segment CRCs are check for the moment, the
overall CRC is ignored. Finally transport block reassembly is performed. overall CRC is ignored. Finally transport block reassembly is performed.
@param phy_vars_ue Pointer to ue variables @param phy_vars_ue Pointer to ue variables
@param proc
@param eNB_id
@param dlsch_llr Pointer to LLR values computed by dlsch_demodulation @param dlsch_llr Pointer to LLR values computed by dlsch_demodulation
@param lte_frame_parms Pointer to frame descriptor @param frame_parms Pointer to frame descriptor
@param dlsch Pointer to DLSCH descriptor @param dlsch Pointer to DLSCH descriptor
@param harq_process
@param frame Frame number @param frame Frame number
@param nb_symb_sch
@param nr_slot_rx Slot number @param nr_slot_rx Slot number
@param num_pdcch_symbols Number of PDCCH symbols @param harq_pid
@param is_crnti indicates if PDSCH belongs to a CRNTI (necessary for parallelizing decoding threads) @param b_size
@param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used @param b
@returns 0 on success, 1 on unsuccessful decoding @returns 0 on success, 1 on unsuccessful decoding
*/ */
@@ -217,12 +220,12 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
unsigned int G); unsigned int G);
/*! \brief Perform PUSCH scrambling. TS 38.211 V15.4.0 subclause 6.3.1.1 /*! \brief Perform PUSCH scrambling. TS 38.211 V15.4.0 subclause 6.3.1.1
@param[in] in, Pointer to input bits @param[in] in Pointer to input bits
@param[in] size, of input bits @param[in] size of input bits
@param[in] Nid, cell id @param[in] Nid cell id
@param[in] n_RNTI, CRNTI @param[in] n_RNTI CRNTI
@param[in] uci_on_pusch whether UCI placeholder bits need to be scrambled (true -> no optimized scrambling) @param[in] uci_on_pusch whether UCI placeholder bits need to be scrambled (true -> no optimized scrambling)
@param[out] out, the scrambled bits @param[out] out the scrambled bits
*/ */
void nr_pusch_codeword_scrambling(uint8_t *in, void nr_pusch_codeword_scrambling(uint8_t *in,
uint32_t size, uint32_t size,
@@ -312,8 +315,10 @@ int dump_ue_stats(PHY_VARS_NR_UE *phy_vars_ue, UE_nr_rxtx_proc_t *proc, char* bu
end, the basic frame parameters are known (Frame configuration - TDD/FDD and cyclic prefix length, end, the basic frame parameters are known (Frame configuration - TDD/FDD and cyclic prefix length,
N_RB_DL, PHICH_CONFIG and Nid_cell) and the UE can begin decoding PDCCH and DLSCH SI to retrieve the rest. Once these N_RB_DL, PHICH_CONFIG and Nid_cell) and the UE can begin decoding PDCCH and DLSCH SI to retrieve the rest. Once these
parameters are know, the routine calls some basic initialization routines (cell-specific reference signals, etc.) parameters are know, the routine calls some basic initialization routines (cell-specific reference signals, etc.)
@param proc
@param phy_vars_ue Pointer to UE variables @param phy_vars_ue Pointer to UE variables
@param mode current running mode @param n_frames
@param sa current running mode
*/ */
int nr_initial_sync(UE_nr_rxtx_proc_t *proc, int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
PHY_VARS_NR_UE *phy_vars_ue, PHY_VARS_NR_UE *phy_vars_ue,
@@ -321,8 +326,9 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
int sa); int sa);
/*! /*!
\brief This function gets the carrier frequencies either from FP or command-line-set global variables, depending on the availability of the latter \brief This function gets the carrier frequencies either from FP or command-line-set global variables, depending on the
@param fp Pointer to frame params availability of the latter
@param ue
@param dl_Carrier Pointer to DL carrier to be set @param dl_Carrier Pointer to DL carrier to be set
@param ul_Carrier Pointer to UL carrier to be set @param ul_Carrier Pointer to UL carrier to be set
*/ */
@@ -341,11 +347,7 @@ void nr_get_carrier_frequencies_sl(PHY_VARS_NR_UE *ue,
/*! /*!
\brief This function sets the OAI RF card rx/tx params \brief This function sets the OAI RF card rx/tx params
@param openair0_cfg Pointer OAI config for a specific card @param openair0_cfg Pointer OAI config for a specific card
@param tx_gain_off Tx gain offset
@param rx_gain_off Rx gain offset @param rx_gain_off Rx gain offset
@param ul_Carrier UL carrier to be set
@param dl_Carrier DL carrier to be set
@param freq_offset Freq offset to be set
*/ */
void nr_rf_card_config_gain(openair0_config_t *openair0_cfg, void nr_rf_card_config_gain(openair0_config_t *openair0_cfg,
double rx_gain_off); double rx_gain_off);
@@ -371,8 +373,8 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
fapi_nr_dci_indication_t *dci_ind, fapi_nr_dci_indication_t *dci_ind,
fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15); fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15);
/** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel
/** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel estimation. It performs estimation. It performs
- RB extraction (signal and channel estimates) - RB extraction (signal and channel estimates)
- channel compensation (matched filtering) - channel compensation (matched filtering)
- RE extraction (pilot, PBCH, synch. signals) - RE extraction (pilot, PBCH, synch. signals)
@@ -380,13 +382,23 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
- LLR computation - LLR computation
This function supports TM1, 2, 3, 5, and 6. This function supports TM1, 2, 3, 5, and 6.
@param ue Pointer to PHY variables @param ue Pointer to PHY variables
@param type Type of PDSCH (SI_PDSCH,RA_PDSCH,PDSCH,PMCH) @param proc
@param eNB_id eNb index (Nid1) 0,1,2 @prama dlsch
@param eNB_id_i Interfering eNB index (Nid1) 0,1,2, or 3 in case of MU-MIMO IC receiver
@param frame Frame number
@param nr_slot_rx Slot number
@param symbol Symbol on which to act (within sub-frame) @param symbol Symbol on which to act (within sub-frame)
@param first_symbol_flag set to 1 on first DLSCH symbol @param first_symbol_flag set to 1 on first DLSCH symbol
@param harq_pid
@param pdsch_est_size
@param dl_ch_estimates
@param llr
@param dl_valid_re
@param rxdataF
@param llr_offset
@param log2_maxhrx_size_symbol
@param rx_size_symbol
@param nbRx
@param rxdataF_comp
@param ptrs_phase_per_slot
@param ptrs_re_per_slot
*/ */
int nr_rx_pdsch(PHY_VARS_NR_UE *ue, int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
UE_nr_rxtx_proc_t *proc, UE_nr_rxtx_proc_t *proc,
+10 -13
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_TRANSPORT/defs.h /*! \file nr_transport_ue.h
* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
* \author R. Knopp * \author R. Knopp
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note * \note
* \warning * \warning
*/ */
#ifndef __NR_TRANSPORT_UE__H__ #ifndef __NR_TRANSPORT_UE__H__
#define __NR_TRANSPORT_UE__H__ #define __NR_TRANSPORT_UE__H__
#include <limits.h> #include <limits.h>
@@ -164,7 +164,4 @@ typedef struct {
// PTRS symbol index, to be updated every PTRS symbol within a slot. // PTRS symbol index, to be updated every PTRS symbol within a slot.
uint8_t ptrs_symbol_index; uint8_t ptrs_symbol_index;
} NR_UE_DLSCH_t; } NR_UE_DLSCH_t;
/**@}*/
#endif #endif
@@ -19,14 +19,14 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_UE_TRANSPORT/nr_ue_rf_config.c /*! \file nr_ue_rf_helpers.c
* \brief Functional helpers to configure the RF boards at UE side * \brief Functional helpers to configure the RF boards at UE side
* \author Guido Casati * \author Guido Casati
* \date 2020 * \date 2020
* \version 0.1 * \version 0.1
* \company Fraunhofer IIS * \company Fraunhofer IIS
* \email: guido.casati@iis.fraunhofer.de * \email: guido.casati@iis.fraunhofer.de
*/ */
#include "PHY/defs_nr_UE.h" #include "PHY/defs_nr_UE.h"
#include "PHY/phy_extern_nr_ue.h" #include "PHY/phy_extern_nr_ue.h"
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/NR_UE_TRANSPORT/nr_ulsch.c /*! \file nr_ulsch_ue.c
* \brief Top-level routines for transmission of the PUSCH TS 38.211 v 15.4.0 * \brief Top-level routines for transmission of the PUSCH TS 38.211 v 15.4.0
* \author Khalid Ahmed * \author Khalid Ahmed
* \date 2019 * \date 2019
* \version 0.1 * \version 0.1
* \company Fraunhofer IIS * \company Fraunhofer IIS
* \email: khalid.ahmed@iis.fraunhofer.de * \email: khalid.ahmed@iis.fraunhofer.de
* \note * \note
* \warning * \warning
*/ */
#include <stdint.h> #include <stdint.h>
#include "PHY/NR_REFSIG/dmrs_nr.h" #include "PHY/NR_REFSIG/dmrs_nr.h"
#include "PHY/NR_REFSIG/ptrs_nr.h" #include "PHY/NR_REFSIG/ptrs_nr.h"
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/TOOLS/ALAW/alaw_lut.h /*! \file alaw_lut.h
* \brief * \brief
* \author S. Sandeep Kumar, Raymond Knopp * \author S. Sandeep Kumar, Raymond Knopp
* \date 2016 * \date 2016
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: ee13b1025@iith.ac.in, knopp@eurecom.fr * \email: ee13b1025@iith.ac.in, knopp@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
// Linear to ALaw // Linear to ALaw
// 16 bit signed integer (typecasted as uint16_t) to 8 bit unsigned integer // 16 bit signed integer (typecasted as uint16_t) to 8 bit unsigned integer
+5 -5
View File
@@ -25,13 +25,13 @@
// returns the complex dot product of x and y // returns the complex dot product of x and y
/*! \brief Complex number dot_product /*! \brief Complex number dot_product
@param x input vector
@param y input vector
@param N size of vectors
@param output_shift normalization of int multiplications
*/ */
c32_t dot_product(const c16_t *x,//! input vector c32_t dot_product(const c16_t *x, const c16_t *y, const uint32_t N, const int output_shift)
const c16_t *y,//! input vector
const uint32_t N,//! size of the vectors
const int output_shift //! normalization afer int16 multiplication
)
{ {
const int16_t reflip[32] __attribute__((aligned(32))) = {1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1}; const int16_t reflip[32] __attribute__((aligned(32))) = {1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1};
const int8_t imshuffle[64] __attribute__((aligned(32))) = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13, 18, 19, 16, 17, 22, 23, 20, 21, 26, 27, 24, 25, 30, 31, 28, 29}; const int8_t imshuffle[64] __attribute__((aligned(32))) = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13, 18, 19, 16, 17, 22, 23, 20, 21, 26, 27, 24, 25, 30, 31, 28, 29};
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair1/PHY/CODING/coding_nr_load.c /*! \file dfts_load.c
* \brief: load library implementing coding/decoding algorithms * \brief: load library implementing coding/decoding algorithms
* \author Francois TABURET * \author Francois TABURET
* \date 2020 * \date 2020
-25
View File
@@ -378,26 +378,6 @@ void init_fft(uint16_t size,
uint8_t logsize, uint8_t logsize,
uint16_t *rev); uint16_t *rev);
/*!\fn void fft(int16_t *x,int16_t *y,int16_t *twiddle,uint16_t *rev,uint8_t log2size,uint8_t scale,uint8_t input_fmt)
This function performs optimized fixed-point radix-2 FFT/IFFT.
@param x Input
@param y Output in format: [Re0,Im0,Re0,Im0, Re1,Im1,Re1,Im1, ....., Re(N-1),Im(N-1),Re(N-1),Im(N-1)]
@param twiddle Twiddle factors
@param rev bit-reversed permutation
@param log2size Base-2 logarithm of FFT size
@param scale Total number of shifts (should be log2size/2 for normalized FFT)
@param input_fmt (0 - input is in complex Q1.15 format, 1 - input is in complex redundant Q1.15 format)
*/
/*void fft(int16_t *x,
int16_t *y,
int16_t *twiddle,
uint16_t *rev,
uint8_t log2size,
uint8_t scale,
uint8_t input_fmt
);
*/
#define FOREACH_DFTSZ(SZ_DEF) \ #define FOREACH_DFTSZ(SZ_DEF) \
SZ_DEF(12) \ SZ_DEF(12) \
SZ_DEF(24) \ SZ_DEF(24) \
@@ -711,11 +691,6 @@ int32_t sub_cpx_vector16(int16_t *x,
*/ */
int32_t signal_energy(int32_t *,uint32_t); int32_t signal_energy(int32_t *,uint32_t);
/*!\fn int32_t signal_energy_fixed_p9(int *input, uint32_t length);
\brief Computes the signal energy per subcarrier
\ the input signal has a fixed point representation of AMP_SHIFT bits
\ the ouput energy has a fixed point representation of AMP_SHIFT bits
*/
int32_t signal_energy_amp_shift(int32_t *input, uint32_t length); int32_t signal_energy_amp_shift(int32_t *input, uint32_t length);
#ifdef LOCALIZATION #ifdef LOCALIZATION
-1
View File
@@ -249,7 +249,6 @@ typedef struct RU_proc_t_s {
int instance_cnt_feptx; int instance_cnt_feptx;
/// \internal This variable is protected by \ref mutex_ru_thread /// \internal This variable is protected by \ref mutex_ru_thread
int instance_cnt_ru; int instance_cnt_ru;
/// This varible is protected by \ref mutex_emulatedRF
int instance_cnt_emulateRF; int instance_cnt_emulateRF;
/// pthread structure for RU FH processing thread /// pthread structure for RU FH processing thread
pthread_t pthread_FH; pthread_t pthread_FH;
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/defs.h /*! \file defs_UE.h
\brief Top-level defines and structure definitions \brief Top-level defines and structure definitions
\author R. Knopp, F. Kaltenberger \author R. Knopp, F. Kaltenberger
\date 2011 \date 2011
+107 -72
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY/defs.h /*! \file defs_common.h
\brief Top-level defines and structure definitions \brief Top-level defines and structure definitions
\author R. Knopp, F. Kaltenberger \author R. Knopp, F. Kaltenberger
\date 2011 \date 2011
@@ -129,22 +129,24 @@ typedef struct {
/// PRACH-ConfigInfo from 36.331 RRC spec /// PRACH-ConfigInfo from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: prach-ConfigurationIndex, see TS 36.211 (5.7.1). \vr{[0..63]} /// Parameter: prach-ConfigurationIndex, see TS 36.211 (5.7.1). {[0..63]}
uint8_t prach_ConfigIndex; uint8_t prach_ConfigIndex;
/// Parameter: High-speed-flag, see TS 36.211 (5.7.2). \vr{[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set. /// Parameter: High-speed-flag, see TS 36.211 (5.7.2). {[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set.
uint8_t highSpeedFlag; uint8_t highSpeedFlag;
/// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). \vr{[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to table 5.7.2-3 for preamble format 4. /// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). {[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to
/// table 5.7.2-3 for preamble format 4.
uint8_t zeroCorrelationZoneConfig; uint8_t zeroCorrelationZoneConfig;
/// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). \vr{[0..94]}\n For TDD the value range is dependent on the value of \ref prach_ConfigIndex. /// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). {[0..94]}\n For TDD the value range is dependent on the value of \ref
/// prach_ConfigIndex.
uint8_t prach_FreqOffset; uint8_t prach_FreqOffset;
} PRACH_CONFIG_INFO; } PRACH_CONFIG_INFO;
/// PRACH-ConfigSIB or PRACH-Config from 36.331 RRC spec /// PRACH-ConfigSIB or PRACH-Config from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). \vr{[0..837]} /// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). {[0..837]}
uint16_t rootSequenceIndex; uint16_t rootSequenceIndex;
/// prach_Config_enabled=1 means enabled. \vr{[0..1]} /// prach_Config_enabled=1 means enabled. {[0..1]}
uint8_t prach_Config_enabled; uint8_t prach_Config_enabled;
/// PRACH Configuration Information /// PRACH Configuration Information
PRACH_CONFIG_INFO prach_ConfigInfo; PRACH_CONFIG_INFO prach_ConfigInfo;
@@ -152,11 +154,13 @@ typedef struct {
/// PRACH-eMTC-Config from 36.331 RRC spec /// PRACH-eMTC-Config from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: High-speed-flag, see TS 36.211 (5.7.2). \vr{[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set. /// Parameter: High-speed-flag, see TS 36.211 (5.7.2). {[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set.
uint8_t highSpeedFlag; uint8_t highSpeedFlag;
/// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). \vr{[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to table 5.7.2-3 for preamble format 4. /// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). {[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to
/// table 5.7.2-3 for preamble format 4.
uint8_t zeroCorrelationZoneConfig; uint8_t zeroCorrelationZoneConfig;
/// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). \vr{[0..94]}\n For TDD the value range is dependent on the value of \ref prach_ConfigIndex. /// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). {[0..94]}\n For TDD the value range is dependent on the value of \ref
/// prach_ConfigIndex.
/// PRACH starting subframe periodicity, expressed in number of subframes available for preamble transmission (PRACH opportunities), see TS 36.211. Value 2 corresponds to 2 subframes, 4 corresponds to 4 subframes and so on. EUTRAN configures the PRACH starting subframe periodicity larger than or equal to the Number of PRACH repetitions per attempt for each CE level (numRepetitionPerPreambleAttempt). /// PRACH starting subframe periodicity, expressed in number of subframes available for preamble transmission (PRACH opportunities), see TS 36.211. Value 2 corresponds to 2 subframes, 4 corresponds to 4 subframes and so on. EUTRAN configures the PRACH starting subframe periodicity larger than or equal to the Number of PRACH repetitions per attempt for each CE level (numRepetitionPerPreambleAttempt).
uint8_t prach_starting_subframe_periodicity[4]; uint8_t prach_starting_subframe_periodicity[4];
@@ -176,9 +180,9 @@ typedef struct {
/// PRACH-ConfigSIB or PRACH-Config from 36.331 RRC spec /// PRACH-ConfigSIB or PRACH-Config from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). \vr{[0..837]} /// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). {[0..837]}
uint16_t rootSequenceIndex; uint16_t rootSequenceIndex;
/// prach_Config_enabled=1 means enabled. \vr{[0..1]} /// prach_Config_enabled=1 means enabled. {[0..1]}
uint8_t prach_Config_enabled; uint8_t prach_Config_enabled;
/// PRACH Configuration Information /// PRACH Configuration Information
PRACH_eMTC_CONFIG_INFO prach_ConfigInfo; PRACH_eMTC_CONFIG_INFO prach_ConfigInfo;
@@ -200,11 +204,11 @@ typedef enum {
/// PUCCH-ConfigDedicated from 36.331 RRC spec /// PUCCH-ConfigDedicated from 36.331 RRC spec
typedef struct { typedef struct {
/// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). \vr{[0..1]} /// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). {[0..1]}
uint8_t ackNackRepetition; uint8_t ackNackRepetition;
/// Parameter: \f$N_\text{ANRep}\f$, see TS 36.213 (10.1). /// Parameter: \f$N_\text{ANRep}\f$, see TS 36.213 (10.1).
ACKNAKREP_t repetitionFactor; ACKNAKREP_t repetitionFactor;
/// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). \vr{[0..2047]} /// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t n1PUCCH_AN_Rep; uint16_t n1PUCCH_AN_Rep;
/// Feedback mode, see TS 36.213 (7.3). \details Applied to both PUCCH and PUSCH feedback. For TDD, should always be set to bundling. /// Feedback mode, see TS 36.213 (7.3). \details Applied to both PUCCH and PUSCH feedback. For TDD, should always be set to bundling.
ANFBmode_t tdd_AckNackFeedbackMode; ANFBmode_t tdd_AckNackFeedbackMode;
@@ -212,13 +216,14 @@ typedef struct {
/// PUCCH-ConfigCommon from 36.331 RRC spec /// PUCCH-ConfigCommon from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: \f$\Delta^\text{PUCCH}_\text{shift}\f$, see TS 36.211 (5.4.1). \vr{[1..3]} \note the specification sais it is an enumerated value. /// Parameter: \f$\Delta^\text{PUCCH}_\text{shift}\f$, see TS 36.211 (5.4.1). {[1..3]} \note the specification sais it is an
/// enumerated value.
uint8_t deltaPUCCH_Shift; uint8_t deltaPUCCH_Shift;
/// Parameter: \f$N^{(2)}_\text{RB}\f$, see TS 36.211 (5.4). \vr{[0..98]} /// Parameter: \f$N^{(2)}_\text{RB}\f$, see TS 36.211 (5.4). {[0..98]}
uint8_t nRB_CQI; uint8_t nRB_CQI;
/// Parameter: \f$N^{(1)}_\text{CS}\f$, see TS 36.211 (5.4). \vr{[0..7]} /// Parameter: \f$N^{(1)}_\text{CS}\f$, see TS 36.211 (5.4). {[0..7]}
uint8_t nCS_AN; uint8_t nCS_AN;
/// Parameter: \f$N^{(1)}_\text{PUCCH}\f$ see TS 36.213 (10.1). \vr{[0..2047]} /// Parameter: \f$N^{(1)}_\text{PUCCH}\f$ see TS 36.213 (10.1). {[0..2047]}
uint16_t n1PUCCH_AN; uint16_t n1PUCCH_AN;
/// group hopping sequence for DRS \note not part of offical UL-PUCCH_CONFIG_COMMON ASN1 specification. /// group hopping sequence for DRS \note not part of offical UL-PUCCH_CONFIG_COMMON ASN1 specification.
@@ -229,13 +234,13 @@ typedef struct {
/// UL-ReferenceSignalsPUSCH from 36.331 RRC spec /// UL-ReferenceSignalsPUSCH from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). \vr{[0..1]} /// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). {[0..1]}
uint8_t groupHoppingEnabled; uint8_t groupHoppingEnabled;
/// Parameter: \f$\Delta SS\f$, see TS 36.211 (5.5.1.3). \vr{[0..29]} /// Parameter: \f$\Delta SS\f$, see TS 36.211 (5.5.1.3). {[0..29]}
uint8_t groupAssignmentPUSCH; uint8_t groupAssignmentPUSCH;
/// Parameter: Sequence-hopping-enabled, see TS 36.211 (5.5.1.4). \vr{[0..1]} /// Parameter: Sequence-hopping-enabled, see TS 36.211 (5.5.1.4). {[0..1]}
uint8_t sequenceHoppingEnabled; uint8_t sequenceHoppingEnabled;
/// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). \vr{[0..7]} /// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). {[0..7]}
uint8_t cyclicShift; uint8_t cyclicShift;
/// nPRS for cyclic shift of DRS \note not part of offical UL-ReferenceSignalsPUSCH ASN1 specification. /// nPRS for cyclic shift of DRS \note not part of offical UL-ReferenceSignalsPUSCH ASN1 specification.
uint8_t nPRS[20]; uint8_t nPRS[20];
@@ -253,13 +258,13 @@ typedef enum {
/// PUSCH-ConfigCommon from 36.331 RRC spec. /// PUSCH-ConfigCommon from 36.331 RRC spec.
typedef struct { typedef struct {
/// Parameter: \f$N_{sb}\f$, see TS 36.211 (5.3.4). \vr{[1..4]} /// Parameter: \f$N_{sb}\f$, see TS 36.211 (5.3.4). {[1..4]}
uint8_t n_SB; uint8_t n_SB;
/// Parameter: Hopping-mode, see TS 36.211 (5.3.4). /// Parameter: Hopping-mode, see TS 36.211 (5.3.4).
PUSCH_HOPPING_t hoppingMode; PUSCH_HOPPING_t hoppingMode;
/// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). \vr{[0..98]} /// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). {[0..98]}
uint8_t pusch_HoppingOffset; uint8_t pusch_HoppingOffset;
/// See TS 36.213 (8.6.1). \vr{[0..1]} 1 indicates 64QAM is allowed, 0 not allowed. /// See TS 36.213 (8.6.1). {[0..1]} 1 indicates 64QAM is allowed, 0 not allowed.
uint8_t enable64QAM; uint8_t enable64QAM;
/// Ref signals configuration /// Ref signals configuration
UL_REFERENCE_SIGNALS_PUSCH_t ul_ReferenceSignalsPUSCH; UL_REFERENCE_SIGNALS_PUSCH_t ul_ReferenceSignalsPUSCH;
@@ -267,11 +272,11 @@ typedef struct {
/// UE specific PUSCH configuration. /// UE specific PUSCH configuration.
typedef struct { typedef struct {
/// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). \vr{[0..15]} /// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). {[0..15]}
uint16_t betaOffset_ACK_Index; uint16_t betaOffset_ACK_Index;
/// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). \vr{[0..15]} /// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). {[0..15]}
uint16_t betaOffset_RI_Index; uint16_t betaOffset_RI_Index;
/// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). \vr{[0..15]} /// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). {[0..15]}
uint16_t betaOffset_CQI_Index; uint16_t betaOffset_CQI_Index;
} PUSCH_CONFIG_DEDICATED; } PUSCH_CONFIG_DEDICATED;
@@ -285,9 +290,10 @@ typedef struct {
/// PDSCH-ConfigCommon from 36.331 RRC spec /// PDSCH-ConfigCommon from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: Reference-signal power, see TS 36.213 (5.2). \vr{[-60..50]}\n Provides the downlink reference-signal EPRE. The actual value in dBm. /// Parameter: Reference-signal power, see TS 36.213 (5.2). {[-60..50]}\n Provides the downlink reference-signal EPRE. The actual
/// value in dBm.
int8_t referenceSignalPower; int8_t referenceSignalPower;
/// Parameter: \f$P_B\f$, see TS 36.213 (Table 5.2-1). \vr{[0..3]} /// Parameter: \f$P_B\f$, see TS 36.213 (Table 5.2-1). {[0..3]}
uint8_t p_b; uint8_t p_b;
} PDSCH_CONFIG_COMMON; } PDSCH_CONFIG_COMMON;
@@ -311,13 +317,15 @@ typedef struct {
/// SoundingRS-UL-ConfigCommon Information Element from 36.331 RRC spec /// SoundingRS-UL-ConfigCommon Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// enabled flag=1 means SRS is enabled. \vr{[0..1]} /// enabled flag=1 means SRS is enabled. {[0..1]}
uint8_t enabled_flag; uint8_t enabled_flag;
/// Parameter: SRS Bandwidth Configuration, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). \vr{[0..7]}\n Actual configuration depends on UL bandwidth. \note the specification sais it is an enumerated value. /// Parameter: SRS Bandwidth Configuration, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). {[0..7]}\n Actual
/// configuration depends on UL bandwidth. \note the specification sais it is an enumerated value.
uint8_t srs_BandwidthConfig; uint8_t srs_BandwidthConfig;
/// Parameter: SRS SubframeConfiguration, see TS 36.211 (table 5.5.3.3-1 for FDD, table 5.5.3.3-2 for TDD). \vr{[0..15]} \note the specification sais it is an enumerated value. /// Parameter: SRS SubframeConfiguration, see TS 36.211 (table 5.5.3.3-1 for FDD, table 5.5.3.3-2 for TDD). {[0..15]} \note the
/// specification sais it is an enumerated value.
uint8_t srs_SubframeConfig; uint8_t srs_SubframeConfig;
/// Parameter: Simultaneous-AN-and-SRS, see TS 36.213 (8.2). \vr{[0..1]} /// Parameter: Simultaneous-AN-and-SRS, see TS 36.213 (8.2). {[0..1]}
uint8_t ackNackSRS_SimultaneousTransmission; uint8_t ackNackSRS_SimultaneousTransmission;
/// Parameter: srsMaxUpPts, see TS 36.211 (5.5.3.2). \details If this field is present, reconfiguration of \f$m^\text{max}_\text{SRS,0}\f$ applies for UpPts, otherwise reconfiguration does not apply. /// Parameter: srsMaxUpPts, see TS 36.211 (5.5.3.2). \details If this field is present, reconfiguration of \f$m^\text{max}_\text{SRS,0}\f$ applies for UpPts, otherwise reconfiguration does not apply.
uint8_t srs_MaxUpPts; uint8_t srs_MaxUpPts;
@@ -390,19 +398,22 @@ typedef struct {
uint8_t subframe; uint8_t subframe;
/// rnti /// rnti
uint16_t rnti; uint16_t rnti;
/// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). \vr{[0..3]} \note the specification sais it is an enumerated value. /// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). {[0..3]} \note the
/// specification sais it is an enumerated value.
uint8_t srs_Bandwidth; uint8_t srs_Bandwidth;
/// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) \vr{[0..3]} \note the specification sais it is an enumerated value. /// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) {[0..3]} \note the specification
/// sais it is an enumerated value.
uint8_t srs_HoppingBandwidth; uint8_t srs_HoppingBandwidth;
/// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). \vr{[0..23]} /// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). {[0..23]}
uint8_t freqDomainPosition; uint8_t freqDomainPosition;
/// Parameter: Duration, see TS 36.213 (8.2). \vr{[0..1]} 0 corresponds to "single" and 1 to "indefinite". /// Parameter: Duration, see TS 36.213 (8.2). {[0..1]} 0 corresponds to "single" and 1 to "indefinite".
uint8_t duration; uint8_t duration;
/// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). \vr{[0..1]} /// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). {[0..1]}
uint8_t transmissionComb; uint8_t transmissionComb;
/// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). \vr{[0..1023]} /// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). {[0..1023]}
uint16_t srs_ConfigIndex; uint16_t srs_ConfigIndex;
/// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). \vr{[0..7]} \note the specification sais it is an enumerated value. /// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). {[0..7]} \note the specification sais it is an enumerated
/// value.
uint8_t cyclicShift; uint8_t cyclicShift;
// Parameter: internal implementation: UE SRS configured // Parameter: internal implementation: UE SRS configured
uint8_t srsConfigDedicatedSetup; uint8_t srsConfigDedicatedSetup;
@@ -414,15 +425,20 @@ typedef struct {
/// UplinkPowerControlDedicated Information Element from 36.331 RRC spec /// UplinkPowerControlDedicated Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. \vr{[-8..7]}\n This field is applicable for non-persistent scheduling, only. /// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. {[-8..7]}\n This field is applicable for
/// non-persistent scheduling, only.
int8_t p0_UE_PUSCH; int8_t p0_UE_PUSCH;
/// Parameter: Ks, see TS 36.213 (5.1.1.1). \vr{[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1 corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the enumeration values do not correspond to the given values in the specification (en1 should be 1.25). /// Parameter: Ks, see TS 36.213 (5.1.1.1). {[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1
/// corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the
/// enumeration values do not correspond to the given values in the specification (en1 should be 1.25).
uint8_t deltaMCS_Enabled; uint8_t deltaMCS_Enabled;
/// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). \vr{[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to "disabled". /// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). {[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to
/// "disabled".
uint8_t accumulationEnabled; uint8_t accumulationEnabled;
/// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. \vr{[-8..7]} /// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. {[-8..7]}
int8_t p0_UE_PUCCH; int8_t p0_UE_PUCCH;
/// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). \vr{[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value. /// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). {[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual
/// parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value.
int8_t pSRS_Offset; int8_t pSRS_Offset;
/// Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 (5.1.1.1).\details The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. \note the specification sais it is an enumerated value. /// Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 (5.1.1.1).\details The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. \note the specification sais it is an enumerated value.
uint8_t filterCoefficient; uint8_t filterCoefficient;
@@ -452,39 +468,46 @@ typedef enum {
/// UplinkPowerControlCommon Information Element from 36.331 RRC spec \note this structure does not currently make use of \ref deltaFList_PUCCH_t. /// UplinkPowerControlCommon Information Element from 36.331 RRC spec \note this structure does not currently make use of \ref deltaFList_PUCCH_t.
typedef struct { typedef struct {
/// Parameter: \f$P_\text{0\_NOMINAL\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dBm. \vr{[-126..24]}\n This field is applicable for non-persistent scheduling, only. /// Parameter: \f$P_\text{0\_NOMINAL\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dBm. {[-126..24]}\n This field is applicable for
/// non-persistent scheduling, only.
int8_t p0_NominalPUSCH; int8_t p0_NominalPUSCH;
/// Parameter: \f$\alpha\f$, see TS 36.213 (5.1.1.1) \warning the enumeration values do not correspond to the given values in the specification (al04 should be 0.4, ...)! /// Parameter: \f$\alpha\f$, see TS 36.213 (5.1.1.1) \warning the enumeration values do not correspond to the given values in the specification (al04 should be 0.4, ...)!
PUSCH_alpha_t alpha; PUSCH_alpha_t alpha;
/// Parameter: \f$P_\text{0\_NOMINAL\_PUCCH}\f$ See TS 36.213 (5.1.2.1), unit dBm. \vr{[-127..-96]} /// Parameter: \f$P_\text{0\_NOMINAL\_PUCCH}\f$ See TS 36.213 (5.1.2.1), unit dBm. {[-127..-96]}
int8_t p0_NominalPUCCH; int8_t p0_NominalPUCCH;
/// Parameter: \f$\Delta_\text{PREAMBLE\_Msg3}\f$ see TS 36.213 (5.1.1.1). \vr{[-1..6]}\n Actual value = IE value * 2 [dB]. /// Parameter: \f$\Delta_\text{PREAMBLE\_Msg3}\f$ see TS 36.213 (5.1.1.1). {[-1..6]}\n Actual value = IE value * 2 [dB].
int8_t deltaPreambleMsg3; int8_t deltaPreambleMsg3;
/// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value. /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1, see TS 36.213 (5.1.2). {[0..2]} \warning check value range,
/// why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format1; long deltaF_PUCCH_Format1;
/// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1a, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value. /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1a, see TS 36.213 (5.1.2). {[0..2]} \warning check value
/// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format1a; long deltaF_PUCCH_Format1a;
/// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1b, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value. /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1b, see TS 36.213 (5.1.2). {[0..2]} \warning check value
/// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format1b; long deltaF_PUCCH_Format1b;
/// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2, see TS 36.213 (5.1.2). \vr{[0..3]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value. /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2, see TS 36.213 (5.1.2). {[0..3]} \warning check value range,
/// why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format2; long deltaF_PUCCH_Format2;
/// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2a, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value. /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2a, see TS 36.213 (5.1.2). {[0..2]} \warning check value
/// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format2a; long deltaF_PUCCH_Format2a;
/// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2b, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value. /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2b, see TS 36.213 (5.1.2). {[0..2]} \warning check value
/// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format2b; long deltaF_PUCCH_Format2b;
} UL_POWER_CONTROL_CONFIG_COMMON; } UL_POWER_CONTROL_CONFIG_COMMON;
/// Union for \ref TPC_PDCCH_CONFIG::tpc_Index. /// Union for \ref TPC_PDCCH_CONFIG::tpc_Index.
typedef union { typedef union {
/// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). \vr{[1..15]} /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). {[1..15]}
uint8_t indexOfFormat3; uint8_t indexOfFormat3;
/// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). \vr{[1..31]} /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). {[1..31]}
uint8_t indexOfFormat3A; uint8_t indexOfFormat3A;
} TPC_INDEX_t; } TPC_INDEX_t;
/// TPC-PDCCH-Config Information Element from 36.331 RRC spec /// TPC-PDCCH-Config Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// RNTI for power control using DCI format 3/3A, see TS 36.212. \vr{[0..65535]} /// RNTI for power control using DCI format 3/3A, see TS 36.212. {[0..65535]}
uint16_t rnti; uint16_t rnti;
/// Index of N or M, see TS 36.212 (5.3.3.1.6 and 5.3.3.1.7), where N or M is dependent on the used DCI format (i.e. format 3 or 3a). /// Index of N or M, see TS 36.212 (5.3.3.1.6 and 5.3.3.1.7), where N or M is dependent on the used DCI format (i.e. format 3 or 3a).
TPC_INDEX_t tpc_Index; TPC_INDEX_t tpc_Index;
@@ -501,9 +524,9 @@ typedef enum {
/// SchedulingRequestConfig Information Element from 36.331 RRC spec /// SchedulingRequestConfig Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). \vr{[0..2047]} /// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t sr_PUCCH_ResourceIndex; uint16_t sr_PUCCH_ResourceIndex;
/// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). \vr{[0..155]} /// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). {[0..155]}
uint8_t sr_ConfigIndex; uint8_t sr_ConfigIndex;
/// Parameter for SR transmission in TS 36.321 (5.4.4). \details The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on. /// Parameter for SR transmission in TS 36.321 (5.4.4). \details The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on.
DSR_TRANSMAX_t dsr_TransMax; DSR_TRANSMAX_t dsr_TransMax;
@@ -511,15 +534,17 @@ typedef struct {
/// CQI-ReportPeriodic /// CQI-ReportPeriodic
typedef struct { typedef struct {
/// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). \vr{[0..1185]}, -1 indicates inactivity /// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). {[0..1185]}, -1 indicates inactivity
int16_t cqi_PUCCH_ResourceIndex; int16_t cqi_PUCCH_ResourceIndex;
/// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A and 7.2.2-1C). \vr{[0..1023]} /// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A
/// and 7.2.2-1C). {[0..1023]}
int16_t cqi_PMI_ConfigIndex; int16_t cqi_PMI_ConfigIndex;
/// Parameter: K, see 36.213 (4.2.2). \vr{[1..4]} /// Parameter: K, see 36.213 (4.2.2). {[1..4]}
uint8_t K; uint8_t K;
/// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). \vr{[0..1023]}, -1 indicates inactivity /// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). {[0..1023]}, -1 indicates inactivity
int16_t ri_ConfigIndex; int16_t ri_ConfigIndex;
/// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). \vr{[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and CQI is allowed. /// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). {[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and
/// CQI is allowed.
uint8_t simultaneousAckNackAndCQI; uint8_t simultaneousAckNackAndCQI;
/// parameter computed from Tables 7.2.2-1A and 7.2.2-1C /// parameter computed from Tables 7.2.2-1A and 7.2.2-1C
uint16_t Npd; uint16_t Npd;
@@ -540,7 +565,7 @@ typedef enum {
typedef struct { typedef struct {
/// Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1]. /// Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1].
CQI_REPORTMODEAPERIODIC cqi_ReportModeAperiodic; CQI_REPORTMODEAPERIODIC cqi_ReportModeAperiodic;
/// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). \vr{[-1..6]}\n Actual value = IE value * 2 [dB]. /// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). {[-1..6]}\n Actual value = IE value * 2 [dB].
int8_t nomPDSCH_RS_EPRE_Offset; int8_t nomPDSCH_RS_EPRE_Offset;
CQI_REPORTPERIODIC CQI_ReportPeriodic; CQI_REPORTPERIODIC CQI_ReportPeriodic;
} CQI_REPORT_CONFIG; } CQI_REPORT_CONFIG;
@@ -549,15 +574,25 @@ typedef struct {
typedef struct { typedef struct {
/// MBSFN subframe occurance. \details Radio-frames that contain MBSFN subframes occur when equation SFN mod radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. When fourFrames is used for subframeAllocation, the equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when fourFrames is used. \note the specification sais it is an enumerated value {n1, n2, n4, n8, n16, n32}. /// MBSFN subframe occurance. \details Radio-frames that contain MBSFN subframes occur when equation SFN mod radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. When fourFrames is used for subframeAllocation, the equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when fourFrames is used. \note the specification sais it is an enumerated value {n1, n2, n4, n8, n16, n32}.
int radioframeAllocationPeriod; int radioframeAllocationPeriod;
/// MBSFN subframe occurance. \vr{[0..7]}\n Radio-frames that contain MBSFN subframes occur when equation SFN mod radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. When fourFrames is used for subframeAllocation, the equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when fourFrames is used. /// MBSFN subframe occurance. {[0..7]}\n Radio-frames that contain MBSFN subframes occur when equation SFN mod
/// radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. When fourFrames is used for subframeAllocation, the
/// equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when
/// fourFrames is used.
int radioframeAllocationOffset; int radioframeAllocationOffset;
/// oneFrame or fourFrames. \vr{[0..1]} /// oneFrame or fourFrames. {[0..1]}
int fourFrames_flag; int fourFrames_flag;
/// Subframe configuration. \vr{[0..63]} (\ref fourFrames_flag == 0) or \vr{[0..16777215]} (\ref fourFrames_flag == 1) /// Subframe configuration. {[0..63]} (\ref fourFrames_flag == 0) or {[0..16777215]} (\ref fourFrames_flag == 1)
/// \par fourFrames_flag == 0 /// \par fourFrames_flag == 0
/// "1" denotes that the corresponding subframe is allocated for MBSFN. The following mapping applies:\n FDD: The first/leftmost bit defines the MBSFN allocation for subframe #1, the second bit for #2, third bit for #3 , fourth bit for #6, fifth bit for #7, sixth bit for #8.\n TDD: The first/leftmost bit defines the allocation for subframe #3, the second bit for #4, third bit for #7, fourth bit for #8, fifth bit for #9. Uplink subframes are not allocated. The last bit is not used. /// "1" denotes that the corresponding subframe is allocated for MBSFN. The following mapping applies:\n FDD: The first/leftmost
/// \par fourFrames_flag == 1 /// bit defines the MBSFN allocation for subframe #1, the second bit for #2, third bit for #3 , fourth bit for #6, fifth bit for
/// A bit-map indicating MBSFN subframe allocation in four consecutive radio frames, "1" denotes that the corresponding subframe is allocated for MBSFN. The bitmap is interpreted as follows:\n FDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #1, #2, #3 , #6, #7, and #8 in the sequence of the four radio-frames.\n TDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #3, #4, #7, #8, and #9 in the sequence of the four radio-frames. The last four bits are not used. Uplink subframes are not allocated. /// #7, sixth bit for #8.\n TDD: The first/leftmost bit defines the allocation for subframe #3, the second bit for #4, third bit
/// for #7, fourth bit for #8, fifth bit for #9. Uplink subframes are not allocated. The last bit is not used. \par
/// fourFrames_flag == 1 A bit-map indicating MBSFN subframe allocation in four consecutive radio frames, "1" denotes that the
/// corresponding subframe is allocated for MBSFN. The bitmap is interpreted as follows:\n FDD: Starting from the first radioframe
/// and from the first/leftmost bit in the bitmap, the allocation applies to subframes #1, #2, #3 , #6, #7, and #8 in the sequence
/// of the four radio-frames.\n TDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the
/// allocation applies to subframes #3, #4, #7, #8, and #9 in the sequence of the four radio-frames. The last four bits are not
/// used. Uplink subframes are not allocated.
int mbsfn_SubframeConfig; int mbsfn_SubframeConfig;
} MBSFN_config_t; } MBSFN_config_t;
+49 -39
View File
@@ -44,15 +44,15 @@ typedef enum {SF_DL_NB_IoT, SF_UL_NB_IoT, SF_S_NB_IoT} NB_IoT_subframe_t;
///////////////////////// /////////////////////////
/// Union for \ref TPC_PDCCH_CONFIG::tpc_Index. /// Union for \ref TPC_PDCCH_CONFIG::tpc_Index.
typedef union { typedef union {
/// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). \vr{[1..15]} /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). {[1..15]}
uint8_t indexOfFormat3; uint8_t indexOfFormat3;
/// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). \vr{[1..31]} /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). {[1..31]}
uint8_t indexOfFormat3A; uint8_t indexOfFormat3A;
} TPC_INDEX_NB_IoT_t; } TPC_INDEX_NB_IoT_t;
/// TPC-PDCCH-Config Information Element from 36.331 RRC spec /// TPC-PDCCH-Config Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// RNTI for power control using DCI format 3/3A, see TS 36.212. \vr{[0..65535]} /// RNTI for power control using DCI format 3/3A, see TS 36.212. {[0..65535]}
uint16_t rnti; uint16_t rnti;
/// Index of N or M, see TS 36.212 (5.3.3.1.6 and 5.3.3.1.7), where N or M is dependent on the used DCI format (i.e. format 3 or 3a). /// Index of N or M, see TS 36.212 (5.3.3.1.6 and 5.3.3.1.7), where N or M is dependent on the used DCI format (i.e. format 3 or 3a).
TPC_INDEX_NB_IoT_t tpc_Index; TPC_INDEX_NB_IoT_t tpc_Index;
@@ -72,22 +72,22 @@ typedef enum {
/// PUCCH-ConfigDedicated from 36.331 RRC spec /// PUCCH-ConfigDedicated from 36.331 RRC spec
typedef struct { typedef struct {
/// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). \vr{[0..1]} /// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). {[0..1]}
uint8_t ackNackRepetition; uint8_t ackNackRepetition;
/// Parameter: \f$N_\text{ANRep}\f$, see TS 36.213 (10.1). /// Parameter: \f$N_\text{ANRep}\f$, see TS 36.213 (10.1).
ACKNAKREP_NB_IoT_t repetitionFactor; ACKNAKREP_NB_IoT_t repetitionFactor;
/// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). \vr{[0..2047]} /// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t n1PUCCH_AN_Rep; uint16_t n1PUCCH_AN_Rep;
/// Feedback mode, see TS 36.213 (7.3). \details Applied to both PUCCH and PUSCH feedback. For TDD, should always be set to bundling. /// Feedback mode, see TS 36.213 (7.3). \details Applied to both PUCCH and PUSCH feedback. For TDD, should always be set to bundling.
ANFBmode_NB_IoT_t tdd_AckNackFeedbackMode; ANFBmode_NB_IoT_t tdd_AckNackFeedbackMode;
} PUCCH_CONFIG_DEDICATED_NB_IoT; } PUCCH_CONFIG_DEDICATED_NB_IoT;
// UE specific PUSCH configuration. // UE specific PUSCH configuration.
typedef struct { typedef struct {
/// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). \vr{[0..15]} /// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). {[0..15]}
uint16_t betaOffset_ACK_Index; uint16_t betaOffset_ACK_Index;
/// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). \vr{[0..15]} /// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). {[0..15]}
uint16_t betaOffset_RI_Index; uint16_t betaOffset_RI_Index;
/// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). \vr{[0..15]} /// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). {[0..15]}
uint16_t betaOffset_CQI_Index; uint16_t betaOffset_CQI_Index;
} PUSCH_CONFIG_DEDICATED_NB_IoT; } PUSCH_CONFIG_DEDICATED_NB_IoT;
/// Enumeration for Parameter \f$P_A\f$ \ref PDSCH_CONFIG_DEDICATED::p_a. /// Enumeration for Parameter \f$P_A\f$ \ref PDSCH_CONFIG_DEDICATED::p_a.
@@ -110,39 +110,46 @@ typedef struct {
/// UplinkPowerControlDedicated Information Element from 36.331 RRC spec /// UplinkPowerControlDedicated Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. \vr{[-8..7]}\n This field is applicable for non-persistent scheduling, only. /// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. {[-8..7]}\n This field is applicable for
/// non-persistent scheduling, only.
int8_t p0_UE_PUSCH; int8_t p0_UE_PUSCH;
/// Parameter: Ks, see TS 36.213 (5.1.1.1). \vr{[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1 corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the enumeration values do not correspond to the given values in the specification (en1 should be 1.25). /// Parameter: Ks, see TS 36.213 (5.1.1.1). {[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1
/// corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the
/// enumeration values do not correspond to the given values in the specification (en1 should be 1.25).
uint8_t deltaMCS_Enabled; uint8_t deltaMCS_Enabled;
/// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). \vr{[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to "disabled". /// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). {[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to
/// "disabled".
uint8_t accumulationEnabled; uint8_t accumulationEnabled;
/// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. \vr{[-8..7]} /// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. {[-8..7]}
int8_t p0_UE_PUCCH; int8_t p0_UE_PUCCH;
/// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). \vr{[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value. /// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). {[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual
/// parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value.
int8_t pSRS_Offset; int8_t pSRS_Offset;
/// Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 (5.1.1.1).\details The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. \note the specification sais it is an enumerated value. /// Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 (5.1.1.1).\details The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. \note the specification sais it is an enumerated value.
uint8_t filterCoefficient; uint8_t filterCoefficient;
} UL_POWER_CONTROL_DEDICATED_NB_IoT; } UL_POWER_CONTROL_DEDICATED_NB_IoT;
/// Union for \ref TPC_PDCCH_CONFIG::tpc_Index. /// Union for \ref TPC_PDCCH_CONFIG::tpc_Index.
//typedef union { // typedef union {
/// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). \vr{[1..15]} /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). {[1..15]}
// uint8_t indexOfFormat3; // uint8_t indexOfFormat3;
/// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). \vr{[1..31]} /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). {[1..31]}
// uint8_t indexOfFormat3A; // uint8_t indexOfFormat3A;
//} TPC_INDEX_NB_IoT_t; //} TPC_INDEX_NB_IoT_t;
/// CQI-ReportPeriodic /// CQI-ReportPeriodic
typedef struct { typedef struct {
/// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). \vr{[0..1185]}, -1 indicates inactivity /// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). {[0..1185]}, -1 indicates inactivity
int16_t cqi_PUCCH_ResourceIndex; int16_t cqi_PUCCH_ResourceIndex;
/// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A and 7.2.2-1C). \vr{[0..1023]} /// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A
/// and 7.2.2-1C). {[0..1023]}
int16_t cqi_PMI_ConfigIndex; int16_t cqi_PMI_ConfigIndex;
/// Parameter: K, see 36.213 (4.2.2). \vr{[1..4]} /// Parameter: K, see 36.213 (4.2.2). {[1..4]}
uint8_t K; uint8_t K;
/// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). \vr{[0..1023]}, -1 indicates inactivity /// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). {[0..1023]}, -1 indicates inactivity
int16_t ri_ConfigIndex; int16_t ri_ConfigIndex;
/// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). \vr{[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and CQI is allowed. /// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). {[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and
/// CQI is allowed.
uint8_t simultaneousAckNackAndCQI; uint8_t simultaneousAckNackAndCQI;
/// parameter computed from Tables 7.2.2-1A and 7.2.2-1C /// parameter computed from Tables 7.2.2-1A and 7.2.2-1C
uint16_t Npd; uint16_t Npd;
@@ -163,26 +170,29 @@ typedef enum {
typedef struct { typedef struct {
/// Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1]. /// Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1].
CQI_REPORTMODEAPERIODIC_NB_IoT cqi_ReportModeAperiodic; CQI_REPORTMODEAPERIODIC_NB_IoT cqi_ReportModeAperiodic;
/// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). \vr{[-1..6]}\n Actual value = IE value * 2 [dB]. /// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). {[-1..6]}\n Actual value = IE value * 2 [dB].
int8_t nomPDSCH_RS_EPRE_Offset; int8_t nomPDSCH_RS_EPRE_Offset;
CQI_REPORTPERIODIC_NB_IoT CQI_ReportPeriodic; CQI_REPORTPERIODIC_NB_IoT CQI_ReportPeriodic;
} CQI_REPORT_CONFIG_NB_IoT; } CQI_REPORT_CONFIG_NB_IoT;
/// SoundingRS-UL-ConfigDedicated Information Element from 36.331 RRC spec /// SoundingRS-UL-ConfigDedicated Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). \vr{[0..3]} \note the specification sais it is an enumerated value. /// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). {[0..3]} \note the
/// specification sais it is an enumerated value.
uint8_t srs_Bandwidth; uint8_t srs_Bandwidth;
/// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) \vr{[0..3]} \note the specification sais it is an enumerated value. /// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) {[0..3]} \note the specification
/// sais it is an enumerated value.
uint8_t srs_HoppingBandwidth; uint8_t srs_HoppingBandwidth;
/// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). \vr{[0..23]} /// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). {[0..23]}
uint8_t freqDomainPosition; uint8_t freqDomainPosition;
/// Parameter: Duration, see TS 36.213 (8.2). \vr{[0..1]} 0 corresponds to "single" and 1 to "indefinite". /// Parameter: Duration, see TS 36.213 (8.2). {[0..1]} 0 corresponds to "single" and 1 to "indefinite".
uint8_t duration; uint8_t duration;
/// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). \vr{[0..1]} /// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). {[0..1]}
uint8_t transmissionComb; uint8_t transmissionComb;
/// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). \vr{[0..1023]} /// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). {[0..1023]}
uint16_t srs_ConfigIndex; uint16_t srs_ConfigIndex;
/// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). \vr{[0..7]} \note the specification sais it is an enumerated value. /// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). {[0..7]} \note the specification sais it is an enumerated
/// value.
uint8_t cyclicShift; uint8_t cyclicShift;
// Parameter: internal implementation: UE SRS configured // Parameter: internal implementation: UE SRS configured
uint8_t srsConfigDedicatedSetup; uint8_t srsConfigDedicatedSetup;
@@ -204,9 +214,9 @@ typedef enum {
/// SchedulingRequestConfig Information Element from 36.331 RRC spec /// SchedulingRequestConfig Information Element from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). \vr{[0..2047]} /// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t sr_PUCCH_ResourceIndex; uint16_t sr_PUCCH_ResourceIndex;
/// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). \vr{[0..155]} /// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). {[0..155]}
uint8_t sr_ConfigIndex; uint8_t sr_ConfigIndex;
/// Parameter for SR transmission in TS 36.321 (5.4.4). \details The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on. /// Parameter for SR transmission in TS 36.321 (5.4.4). \details The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on.
DSR_TRANSMAX_NB_IoT_t dsr_TransMax; DSR_TRANSMAX_NB_IoT_t dsr_TransMax;
@@ -404,7 +414,7 @@ typedef struct {
typedef struct { typedef struct {
/// nprach_CP_Length_r13, for the CP length(unit us) only 66.7 and 266.7 is implemented /// nprach_CP_Length_r13, for the CP length(unit us) only 66.7 and 266.7 is implemented
uint16_t nprach_CP_Length; uint16_t nprach_CP_Length;
/// The criterion for UEs to select a NPRACH resource. Up to 2 RSRP threshold values can be signalled. \vr{[1..2]} /// The criterion for UEs to select a NPRACH resource. Up to 2 RSRP threshold values can be signalled. {[1..2]}
rsrp_ThresholdsNPrachInfoList *rsrp_ThresholdsPrachInfoList; rsrp_ThresholdsNPrachInfoList *rsrp_ThresholdsPrachInfoList;
/// NPRACH Parameters List /// NPRACH Parameters List
NPRACH_List_NB_IoT_t nprach_ParametersList; NPRACH_List_NB_IoT_t nprach_ParametersList;
@@ -413,7 +423,7 @@ typedef struct {
/// NPDSCH-ConfigCommon from 36.331 RRC spec /// NPDSCH-ConfigCommon from 36.331 RRC spec
typedef struct { typedef struct {
///see TS 36.213 (16.2). \vr{[-60..50]}\n Provides the downlink reference-signal EPRE. The actual value in dBm. /// see TS 36.213 (16.2). {[-60..50]}\n Provides the downlink reference-signal EPRE. The actual value in dBm.
uint16_t nrs_Power; uint16_t nrs_Power;
} NPDSCH_CONFIG_COMMON; } NPDSCH_CONFIG_COMMON;
@@ -433,11 +443,11 @@ typedef struct{
/// UL-ReferenceSignalsNPUSCH from 36.331 RRC spec /// UL-ReferenceSignalsNPUSCH from 36.331 RRC spec
typedef struct { typedef struct {
/// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). \vr{[0..1]} /// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). {[0..1]}
uint8_t groupHoppingEnabled; uint8_t groupHoppingEnabled;
/// , see TS 36.211 (5.5.1.3). \vr{[0..29]} /// , see TS 36.211 (5.5.1.3). {[0..29]}
uint8_t groupAssignmentNPUSCH; uint8_t groupAssignmentNPUSCH;
/// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). \vr{[0..7]} /// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). {[0..7]}
uint8_t cyclicShift; uint8_t cyclicShift;
/// nPRS for cyclic shift of DRS \note not part of offical UL-ReferenceSignalsPUSCH ASN1 specification. /// nPRS for cyclic shift of DRS \note not part of offical UL-ReferenceSignalsPUSCH ASN1 specification.
uint8_t nPRS[20]; uint8_t nPRS[20];
@@ -454,7 +464,7 @@ typedef struct {
uint8_t ack_NACK_NumRepetitions_Msg4[3]; uint8_t ack_NACK_NumRepetitions_Msg4[3];
/// SRS SubframeConfiguration. See TS 36.211 [21, table 5.5.3.3-1]. Value sc0 corresponds to value 0, sc1 to value 1 and so on. /// SRS SubframeConfiguration. See TS 36.211 [21, table 5.5.3.3-1]. Value sc0 corresponds to value 0, sc1 to value 1 and so on.
uint8_t srs_SubframeConfig; uint8_t srs_SubframeConfig;
/// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). \vr{[0..98]} /// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). {[0..98]}
DMRS_CONFIG_t dmrs_Config; DMRS_CONFIG_t dmrs_Config;
/// Ref signals configuration /// Ref signals configuration
UL_REFERENCE_SIGNALS_NPUSCH_t ul_ReferenceSignalsNPUSCH; UL_REFERENCE_SIGNALS_NPUSCH_t ul_ReferenceSignalsNPUSCH;
+4 -3
View File
@@ -37,6 +37,7 @@
* @{ * @{
* @defgroup _PHY_RF_INTERFACE_ PHY - RF Interface * @defgroup _PHY_RF_INTERFACE_ PHY - RF Interface
* @{
* @ingroup _PHY_RF_INTERFACE_ * @ingroup _PHY_RF_INTERFACE_
* @{ * @{
* @defgroup _GENERIC_PHY_RF_INTERFACE_ Generic PHY - RF Interface * @defgroup _GENERIC_PHY_RF_INTERFACE_ Generic PHY - RF Interface
@@ -44,13 +45,13 @@
* @defgroup _BLADERF_PHY_RF_INTERFACE_ PHY - BLADERF RF Interface * @defgroup _BLADERF_PHY_RF_INTERFACE_ PHY - BLADERF RF Interface
* @defgroup _LMSSDR_PHY_RF_INTERFACE_ PHY - LMSSDR RF Interface * @defgroup _LMSSDR_PHY_RF_INTERFACE_ PHY - LMSSDR RF Interface
* @} * @}
* * @}
* @ingroup _ref_implementation_ * @ingroup _ref_implementation_
* @{ * @{
* This module is responsible for defining the generic interface between PHY and RF Target * This module is responsible for defining the generic interface between PHY and RF Target
* @} * @}
* @defgroup _openair1_ openair1 Reference Implementation * @defgroup _openair1_ openair1 Reference Implementation
* @ingroup _ref_implementation_ * @ingroup _ref_implementation_
* @{ * @{
+2 -349
View File
@@ -33,352 +33,10 @@
#ifndef __PHY_IMPLEMENTATION_DEFS_NB_IOT_H__ #ifndef __PHY_IMPLEMENTATION_DEFS_NB_IOT_H__
#define __PHY_IMPLEMENTATION_DEFS_NB_IOT_H__ #define __PHY_IMPLEMENTATION_DEFS_NB_IOT_H__
#include "common/openairinterface5g_limits.h" #include "common/openairinterface5g_limits.h"
/** @defgroup _ref_implementation_ OpenAirInterface LTE Implementation
* @{
* @defgroup _PHY_RF_INTERFACE_ PHY - RF Interface
* @ingroup _PHY_RF_INTERFACE_
* @{
* @defgroup _GENERIC_PHY_RF_INTERFACE_ Generic PHY - RF Interface
* @defgroup _USRP_PHY_RF_INTERFACE_ PHY - USRP RF Interface
* @defgroup _BLADERF_PHY_RF_INTERFACE_ PHY - BLADERF RF Interface
* @defgroup _LMSSDR_PHY_RF_INTERFACE_ PHY - LMSSDR RF Interface
* @}
*
* @ingroup _ref_implementation_
* @{
* This module is responsible for defining the generic interface between PHY and RF Target
* @}
* @defgroup _openair1_ openair1 Reference Implementation
* @ingroup _ref_implementation_
* @{
* @defgroup _physical_layer_ref_implementation_ Physical Layer Reference Implementation
* @ingroup _openair1_
* @{
* @defgroup _PHY_STRUCTURES_ Basic Structures and Memory Initialization
* @ingroup _physical_layer_ref_implementation_
* @{
* This module is responsible for defining and initializing the PHY variables during static configuration of OpenAirInterface.
* @}
* @defgroup _PHY_DSP_TOOLS_ DSP Tools
* @ingroup _physical_layer_ref_implementation_
* @{
* This module is responsible for basic signal processing related to inner-MODEM processing.
* @}
* @defgroup _PHY_MODULATION_ Modulation and Demodulation
* @ingroup _physical_layer_ref_implementation_
* @{
* This module is responsible for procedures related to OFDMA modulation and demodulation.
* @}
* @defgroup _PHY_PARAMETER_ESTIMATION_BLOCKS_ Parameter Estimation
* @ingroup _physical_layer_ref_implementation_
* @{
* This module is responsible for procedures related to OFDMA frequency-domain channel estimation for LTE Downlink Channels.
* @}
* @defgroup _PHY_CODING_BLOCKS_ Channel Coding/Decoding Functions
* @ingroup _physical_layer_ref_implementation_
* @{
* This module is responsible for procedures related to channel coding/decoding, rate-matching, segementation and interleaving.
* @}
* @defgroup _PHY_TRANSPORT_ Transport/Physical Channel Processing
* @ingroup _physical_layer_ref_implementation_
* @{
* This module is responsible for defining and processing the PHY procedures (TX/RX) related to transport and physical channels.
* @}
* @defgroup _PHY_PROCEDURES_ Physical Layer Procedures
* @ingroup _physical_layer_ref_implementation_
* @{
* This module is responsible for defining and processing the PHY procedures (TX/RX) related to transport and physical channels.
* @}
* @}
* @}
* @}
*/
//#include "types.h"
/*
#define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size)
#define NUMBER_OF_SYMBOLS_PER_FRAME (frame_parms->symbols_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
#define NUMBER_OF_USEFUL_CARRIERS (12*frame_parms->N_RB_DL)
#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
#define NUMBER_OF_USEFUL_CARRIERS_BYTES (NUMBER_OF_USEFUL_CARRIERS>>2)
#define HALF_NUMBER_OF_USEFUL_CARRIERS (NUMBER_OF_USEFUL_CARRIERS>>1)
#define HALF_NUMBER_OF_USEFUL_CARRIERS_BYTES (HALF_NUMBER_OF_USEFUL_CARRIERS>>2)
#define FIRST_CARRIER_OFFSET (HALF_NUMBER_OF_USEFUL_CARRIERS+NUMBER_OF_ZERO_CARRIERS)
#define NUMBER_OF_OFDM_SYMBOLS_PER_SLOT (NUMBER_OF_SYMBOLS_PER_FRAME/LTE_SLOTS_PER_FRAME)
#ifdef EMOS
#define EMOS_SCH_INDEX 1
#endif //EMOS
#define EXTENSION_TYPE (PHY_config->PHY_framing.Extension_type)
#define NUMBER_OF_OFDM_CARRIERS_BYTES NUMBER_OF_OFDM_CARRIERS*4
//#define NUMBER_OF_USEFUL_CARRIERS_BYTES NUMBER_OF_USEFUL_CARRIERS*4
#define HALF_NUMBER_OF_USER_CARRIERS_BYTES NUMBER_OF_USEFUL_CARRIERS/2
#define CYCLIC_PREFIX_LENGTH (frame_parms->nb_prefix_samples)
#define CYCLIC_PREFIX_LENGTH_SAMPLES (CYCLIC_PREFIX_LENGTH*2)
#define CYCLIC_PREFIX_LENGTH_BYTES (CYCLIC_PREFIX_LENGTH*4)
#define CYCLIC_PREFIX_LENGTH0 (frame_parms->nb_prefix_samples0)
#define CYCLIC_PREFIX_LENGTH_SAMPLES0 (CYCLIC_PREFIX_LENGTH0*2)
#define CYCLIC_PREFIX_LENGTH_BYTES0 (CYCLIC_PREFIX_LENGTH0*4)
#define OFDM_SYMBOL_SIZE_SAMPLES ((NUMBER_OF_OFDM_CARRIERS + CYCLIC_PREFIX_LENGTH)*2) // 16-bit units (i.e. real samples)
#define OFDM_SYMBOL_SIZE_SAMPLES0 ((NUMBER_OF_OFDM_CARRIERS + CYCLIC_PREFIX_LENGTH0)*2) // 16-bit units (i.e. real samples)
#define OFDM_SYMBOL_SIZE_SAMPLES_MAX 4096 // 16-bit units (i.e. real samples)
#define OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES (OFDM_SYMBOL_SIZE_SAMPLES/2) // 32-bit units (i.e. complex samples)
#define OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0 (OFDM_SYMBOL_SIZE_SAMPLES0/2) // 32-bit units (i.e. complex samples)
#define OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX ((NUMBER_OF_OFDM_CARRIERS)*2)
#define OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX (OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX/2)
#define OFDM_SYMBOL_SIZE_BYTES (OFDM_SYMBOL_SIZE_SAMPLES*2)
#define OFDM_SYMBOL_SIZE_BYTES0 (OFDM_SYMBOL_SIZE_SAMPLES0*2)
#define OFDM_SYMBOL_SIZE_BYTES_NO_PREFIX (OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX*2)
#define SLOT_LENGTH_BYTES (frame_parms->samples_per_tti<<1) // 4 bytes * samples_per_tti/2
#define SLOT_LENGTH_BYTES_NO_PREFIX (OFDM_SYMBOL_SIZE_BYTES_NO_PREFIX * NUMBER_OF_OFDM_SYMBOLS_PER_SLOT)
#define FRAME_LENGTH_COMPLEX_SAMPLES (frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
#define FRAME_LENGTH_SAMPLES (FRAME_LENGTH_COMPLEX_SAMPLES*2)
#define FRAME_LENGTH_SAMPLES_NO_PREFIX (NUMBER_OF_SYMBOLS_PER_FRAME*OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX)
#define FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX (FRAME_LENGTH_SAMPLES_NO_PREFIX/2)
#define NUMBER_OF_CARRIERS_PER_GROUP (NUMBER_OF_USEFUL_CARRIERS/NUMBER_OF_FREQUENCY_GROUPS)
#define RX_PRECISION (16)
#define LOG2_RX_PRECISION (4)
#define RX_OUTPUT_SHIFT (4)
#define SAMPLE_SIZE_BYTES 2 // 2 bytes/real sample
#define FRAME_LENGTH_BYTES (FRAME_LENGTH_SAMPLES * SAMPLE_SIZE_BYTES) // frame size in bytes
#define FRAME_LENGTH_BYTES_NO_PREFIX (FRAME_LENGTH_SAMPLES_NO_PREFIX * SAMPLE_SIZE_BYTES) // frame size in bytes
#define FFT_SCALE_FACTOR 8 // Internal Scaling for FFT
#define DMA_BLKS_PER_SLOT (SLOT_LENGTH_BYTES/2048) // Number of DMA blocks per slot
#define SLOT_TIME_NS (SLOT_LENGTH_SAMPLES*(1e3)/7.68) // slot time in ns
#define NB_ANTENNA_PORTS_ENB 6 // total number of eNB antenna ports
#define TARGET_RX_POWER 50 // Target digital power for the AGC
#define TARGET_RX_POWER_MAX 65 // Maximum digital power, such that signal does not saturate (value found by simulation)
#define TARGET_RX_POWER_MIN 35 // Minimum digital power, anything below will be discarded (value found by simulation)
//the min and max gains have to match the calibrated gain table
//#define MAX_RF_GAIN 160
//#define MIN_RF_GAIN 96
#define MAX_RF_GAIN 200
#define MIN_RF_GAIN 80
#define PHY_SYNCH_OFFSET ((OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES)-1) // OFFSET of BEACON SYNCH
#define PHY_SYNCH_MIN_POWER 1000
#define PHY_SYNCH_THRESHOLD 100
*/
#define ONE_OVER_SQRT2_Q15_NB_IoT 23170 #define ONE_OVER_SQRT2_Q15_NB_IoT 23170
/*
#define ONE_OVER_2_Q15 16384
// QAM amplitude definitions
/// First Amplitude for QAM16 (\f$ 2^{15} \times 2/\sqrt{10}\f$)
#define QAM16_n1 20724
/// Second Amplitude for QAM16 (\f$ 2^{15} \times 1/\sqrt{10}\f$)
#define QAM16_n2 10362
///First Amplitude for QAM64 (\f$ 2^{15} \times 4/\sqrt{42}\f$)
#define QAM64_n1 20225
///Second Amplitude for QAM64 (\f$ 2^{15} \times 2/\sqrt{42}\f$)
#define QAM64_n2 10112
///Third Amplitude for QAM64 (\f$ 2^{15} \times 1/\sqrt{42}\f$)
#define QAM64_n3 5056
/// First Amplitude for QAM16 for TM5 (\f$ 2^{15} \times 2/sqrt(20)\f$)
#define QAM16_TM5_n1 14654
/// Second Amplitude for QAM16 for TM5 Receiver (\f$ 2^{15} \times 1/\sqrt{20}\f$)
#define QAM16_TM5_n2 7327
///First Amplitude for QAM64 (\f$ 2^{15} \times 4/\sqrt{84}\f$)
#define QAM64_TM5_n1 14301
///Second Amplitude for QAM64 (\f$ 2^{15} \times 2/\sqrt{84}\f$)
#define QAM64_TM5_n2 7150
///Third Amplitude for QAM64 for TM5 Receiver (\f$ 2^{15} \times 1/\sqrt{84}\f$)
#define QAM64_TM5_n3 3575
#ifdef BIT8_RXMUX
#define PERROR_SHIFT 0
#else
#define PERROR_SHIFT 10
#endif
#define BIT8_TX_SHIFT 2
#define BIT8_TX_SHIFT_DB 12
//#define CHBCH_RSSI_MIN -75
#ifdef BIT8_TX
#define AMP 128
#else
#define AMP 512//1024 //4096
#endif
#define AMP_OVER_SQRT2 ((AMP*ONE_OVER_SQRT2_Q15)>>15)
#define AMP_OVER_2 (AMP>>1)
/// Threshold for PUCCH Format 1 detection
#define PUCCH1_THRES 0
/// Threshold for PUCCH Format 1a/1b detection
#define PUCCH1a_THRES 4
/// Data structure for transmission.
typedef struct {
/// RAW TX sample buffer
char *TX_DMA_BUFFER[2];
} TX_VARS ;
/// Data structure for reception.
typedef struct {
/// RAW TX sample buffer
char *TX_DMA_BUFFER[2];
/// RAW RX sample buffer
int *RX_DMA_BUFFER[2];
} TX_RX_VARS;
//! \brief Extension Type /
typedef enum {
CYCLIC_PREFIX,
CYCLIC_SUFFIX,
ZEROS,
NONE
} Extension_t;
/// Measurement Variables
*/
#define NUMBER_OF_SUBBANDS_MAX_NB_IoT 13 #define NUMBER_OF_SUBBANDS_MAX_NB_IoT 13
/*
#define NUMBER_OF_HARQ_PID_MAX 8
#define MAX_FRAME_NUMBER 0x400
#include "common/openairinterface5g_limits.h"
#define NUMBER_OF_RN_MAX 3
typedef enum {no_relay=1,unicast_relay_type1,unicast_relay_type2, multicast_relay} relaying_type_t;
typedef struct {
//unsigned int rx_power[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; //! estimated received signal power (linear)
//unsigned short rx_power_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; //! estimated received signal power (dB)
//unsigned short rx_avg_power_dB[NUMBER_OF_CONNECTED_eNB_MAX]; //! estimated avg received signal power (dB)
// RRC measurements
uint32_t rssi;
int n_adj_cells;
unsigned int adj_cell_id[6];
uint32_t rsrq[7];
uint32_t rsrp[7];
float rsrp_filtered[7]; // after layer 3 filtering
float rsrq_filtered[7];
// common measurements
//! estimated noise power (linear)
unsigned int n0_power[NB_ANTENNAS_RX];
//! estimated noise power (dB)
unsigned short n0_power_dB[NB_ANTENNAS_RX];
//! total estimated noise power (linear)
unsigned int n0_power_tot;
//! total estimated noise power (dB)
unsigned short n0_power_tot_dB;
//! average estimated noise power (linear)
unsigned int n0_power_avg;
//! average estimated noise power (dB)
unsigned short n0_power_avg_dB;
//! total estimated noise power (dBm)
short n0_power_tot_dBm;
// UE measurements
//! estimated received spatial signal power (linear)
int rx_spatial_power[NUMBER_OF_CONNECTED_eNB_MAX][2][2];
//! estimated received spatial signal power (dB)
unsigned short rx_spatial_power_dB[NUMBER_OF_CONNECTED_eNB_MAX][2][2];
/// estimated received signal power (sum over all TX antennas)
//int wideband_cqi[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
int rx_power[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
/// estimated received signal power (sum over all TX antennas)
//int wideband_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
unsigned short rx_power_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
/// estimated received signal power (sum over all TX/RX antennas)
int rx_power_tot[NUMBER_OF_CONNECTED_eNB_MAX]; //NEW
/// estimated received signal power (sum over all TX/RX antennas)
unsigned short rx_power_tot_dB[NUMBER_OF_CONNECTED_eNB_MAX]; //NEW
//! estimated received signal power (sum of all TX/RX antennas, time average)
int rx_power_avg[NUMBER_OF_CONNECTED_eNB_MAX];
//! estimated received signal power (sum of all TX/RX antennas, time average, in dB)
unsigned short rx_power_avg_dB[NUMBER_OF_CONNECTED_eNB_MAX];
/// SINR (sum of all TX/RX antennas, in dB)
int wideband_cqi_tot[NUMBER_OF_CONNECTED_eNB_MAX];
/// SINR (sum of all TX/RX antennas, time average, in dB)
int wideband_cqi_avg[NUMBER_OF_CONNECTED_eNB_MAX];
//! estimated rssi (dBm)
short rx_rssi_dBm[NUMBER_OF_CONNECTED_eNB_MAX];
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
int rx_correlation[NUMBER_OF_CONNECTED_eNB_MAX][2];
//! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
int rx_correlation_dB[NUMBER_OF_CONNECTED_eNB_MAX][2];
/// Wideband CQI (sum of all RX antennas, in dB, for precoded transmission modes (3,4,5,6), up to 4 spatial streams)
int precoded_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX+1][4];
/// Subband CQI per RX antenna (= SINR)
int subband_cqi[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX];
/// Total Subband CQI (= SINR)
int subband_cqi_tot[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX];
/// Subband CQI in dB (= SINR dB)
int subband_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX];
/// Total Subband CQI
int subband_cqi_tot_dB[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX];
/// Wideband PMI for each RX antenna
int wideband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
/// Wideband PMI for each RX antenna
int wideband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
///Subband PMI for each RX antenna
int subband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX];
///Subband PMI for each RX antenna
int subband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX];
/// chosen RX antennas (1=Rx antenna 1, 2=Rx antenna 2, 3=both Rx antennas)
unsigned char selected_rx_antennas[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX];
/// Wideband Rank indication
unsigned char rank[NUMBER_OF_CONNECTED_eNB_MAX];
/// Number of RX Antennas
unsigned char nb_antennas_rx;
/// DLSCH error counter
// short dlsch_errors;
} PHY_MEASUREMENTS;
*/
typedef enum {no_relay_NB_IoT=1,unicast_relay_type1_NB_IoT,unicast_relay_type2_NB_IoT, multicast_relay_NB_IoT} relaying_type_t_NB_IoT; typedef enum {no_relay_NB_IoT=1,unicast_relay_type1_NB_IoT,unicast_relay_type2_NB_IoT, multicast_relay_NB_IoT} relaying_type_t_NB_IoT;
typedef struct { typedef struct {
//unsigned int rx_power[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; //! estimated received signal power (linear) //unsigned int rx_power[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; //! estimated received signal power (linear)
@@ -526,10 +184,5 @@ typedef struct {
int subband_cqi_tot_dB[NUMBER_OF_UE_MAX_NB_IoT][100]; int subband_cqi_tot_dB[NUMBER_OF_UE_MAX_NB_IoT][100];
} PHY_MEASUREMENTS_eNB_NB_IoT; } PHY_MEASUREMENTS_eNB_NB_IoT;
/*
#define MCS_COUNT 28 #endif //__PHY_IMPLEMENTATION_DEFS_H__
#define MCS_TABLE_LENGTH_MAX 64
*/
#endif //__PHY_IMPLEMENTATION_DEFS_H__
/**@}
*/
+10 -10
View File
@@ -19,16 +19,16 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file phy_procedures_lte_eNB.c /*! \file phy_procedures_lte_common.c
* \brief Implementation of common utilities for eNB/UE procedures from 36.213 LTE specifications * \brief Implementation of common utilities for eNB/UE procedures from 36.213 LTE specifications
* \author R. Knopp, F. Kaltenberger * \author R. Knopp, F. Kaltenberger
* \date 2011 * \date 2011
* \version 0.1 * \version 0.1
* \company Eurecom * \company Eurecom
* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
* \note * \note
* \warning * \warning
*/ */
#include "PHY/defs_eNB.h" #include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h" #include "PHY/defs_UE.h"
#include "SCHED/sched_common_extern.h" #include "SCHED/sched_common_extern.h"
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file phy_procedures_lte_eNB.c /*! \file phy_procedures_lte_eNb.c
* \brief Implementation of eNB procedures from 36.213 LTE specifications / FeMBMS 36.231 LTE procedures v14.2 * \brief Implementation of eNB procedures from 36.213 LTE specifications / FeMBMS 36.231 LTE procedures v14.2
* \author R. Knopp, F. Kaltenberger, N. Nikaein, X. Foukas, J. Morgade * \author R. Knopp, F. Kaltenberger, N. Nikaein, X. Foukas, J. Morgade
* \date 2011 * \date 2011
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file phy_procedures_lte_eNB.c /*! \file prach_procedures.c
* \brief Implementation of eNB procedures from 36.213 LTE specifications * \brief Implementation of eNB procedures from 36.213 LTE specifications
* \author R. Knopp, F. Kaltenberger, N. Nikaein, X. Foukas * \author R. Knopp, F. Kaltenberger, N. Nikaein, X. Foukas
* \date 2011 * \date 2011
+6 -19
View File
@@ -85,11 +85,9 @@ enum openair_HARQ_TYPE {
* @{ * @{
*/ */
/*! \brief Scheduling for eNB TX procedures in normal subframes. /*! \brief Scheduling for eNB TX procedures in normal subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act @param phy_vars_eNB Pointer to eNB variables on which to act
@param abstraction_flag Indicator of PHY abstraction @param proc
@param do_meas Do inline timing measurement @param do_meas Do inline timing measurement
*/ */
void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,int do_meas); void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,int do_meas);
@@ -100,15 +98,9 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,int d
*/ */
void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc); void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc);
/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act
@param proc Pointer to RXn-TXnp4 proc information
@param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
*/
/*! \brief Scheduling for eNB RX common procedures in normal subframes. /*! \brief Scheduling for eNB RX common procedures in normal subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act @param phy_vars_eNB Pointer to eNB variables on which to act
@param abstraction_flag Indicator of PHY abstraction @param proc is context
*/ */
void phy_procedures_eNB_common_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc); void phy_procedures_eNB_common_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc);
@@ -120,11 +112,12 @@ void phy_procedures_eNB_S_TX(PHY_VARS_eNB *phy_vars_eNB);
/*! \brief Scheduling for eNB RX procedures in TDD S-subframes. /*! \brief Scheduling for eNB RX procedures in TDD S-subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act @param phy_vars_eNB Pointer to eNB variables on which to act
@param proc
*/ */
void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc); void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc);
/*! \brief Scheduling for eNB PRACH RX procedures /*! \brief Scheduling for eNB PRACH RX procedures
@param phy_vars_eNB Pointer to eNB variables on which to act @param eNB Pointer to eNB variables on which to act
@param br_flag indicator for eMTC PRACH @param br_flag indicator for eMTC PRACH
*/ */
@@ -166,12 +159,6 @@ void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms,
*/ */
uint8_t get_Msg3_harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t current_subframe); uint8_t get_Msg3_harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t current_subframe);
/*! \brief Get ULSCH harq_pid from PHICH subframe
@param frame_parms Pointer to DL Frame Parameters
@param subframe subframe of PHICH
@returns harq_pid (0 ... 7)
*/
/*! \brief Function to indicate failure of contention resolution or RA procedure. It places the UE back in PRACH mode. /*! \brief Function to indicate failure of contention resolution or RA procedure. It places the UE back in PRACH mode.
@param Mod_id Instance index of UE @param Mod_id Instance index of UE
@param CC_id Component Carrier Index @param CC_id Component Carrier Index
@@ -181,6 +168,7 @@ void ra_failed(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
/*! \brief Indicates the SR TXOp in current subframe for eNB and particular UE index. Implements Table 10.1-5 from 36.213. /*! \brief Indicates the SR TXOp in current subframe for eNB and particular UE index. Implements Table 10.1-5 from 36.213.
@param phy_vars_eNB Pointer to eNB variables @param phy_vars_eNB Pointer to eNB variables
@param proc
@param UE_id ID of UE which may be issuing the SR @param UE_id ID of UE which may be issuing the SR
@returns 1 if TXOp is active. @returns 1 if TXOp is active.
*/ */
@@ -218,8 +206,7 @@ int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subf
void compute_srs_pos(frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); void compute_srs_pos(frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset);
void release_rnti_of_phy(module_id_t mod_id); void release_rnti_of_phy(module_id_t mod_id);
/*@}*/ /**@}*/
#endif #endif
+5 -16
View File
@@ -94,7 +94,7 @@ typedef struct {
/*! \brief Scheduling for UE TX procedures in normal subframes. /*! \brief Scheduling for UE TX procedures in normal subframes.
@param ue Pointer to UE variables on which to act @param ue Pointer to UE variables on which to act
@param proc Pointer to RXn-TXnp4 proc information @param proc Pointer to RXn-TXnp4 proc information
@param eNB_id Local id of eNB on which to act @param phy_data
*/ */
void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data); void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data);
@@ -113,18 +113,15 @@ int phy_procedures_slot_parallelization_nrUE_RX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_p
void processSlotTX(void *arg); void processSlotTX(void *arg);
/*! \brief UE PRACH procedures. /*! \brief UE PRACH procedures.
@param
@param
@param
*/ */
void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc); void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc);
int8_t nr_find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB); int8_t nr_find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
/*! \brief UL time alignment procedures for TA application /*! \brief UL time alignment procedures for TA application
@param PHY_VARS_NR_UE ue @param ue
@param int slot_tx @param slot_tx
@param int frame_tx @param frame_tx
*/ */
void ue_ta_procedures(PHY_VARS_NR_UE *ue, int slot_tx, int frame_tx); void ue_ta_procedures(PHY_VARS_NR_UE *ue, int slot_tx, int frame_tx);
@@ -138,10 +135,6 @@ int is_ssb_in_slot(fapi_nr_config_request_t *config, int frame, int slot, NR_DL_
bool is_csi_rs_in_symbol(fapi_nr_dl_config_csirs_pdu_rel15_t csirs_config_pdu, int symbol); bool is_csi_rs_in_symbol(fapi_nr_dl_config_csirs_pdu_rel15_t csirs_config_pdu, int symbol);
/*! \brief This function prepares the dl indication to pass to the MAC /*! \brief This function prepares the dl indication to pass to the MAC
@param
@param
@param
@param
*/ */
void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind,
fapi_nr_dci_indication_t *dci_ind, fapi_nr_dci_indication_t *dci_ind,
@@ -153,10 +146,6 @@ void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind,
/*@}*/ /*@}*/
/*! \brief This function prepares the dl rx indication /*! \brief This function prepares the dl rx indication
@param
@param
@param
@param
*/ */
void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind, void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
uint8_t pdu_type, uint8_t pdu_type,
@@ -192,4 +181,4 @@ int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t r
void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
#endif #endif
/** @}*/
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file phy_emulation.h /*! \file defs.h
* \brief specifies the data structure and variable for phy emulation * \brief specifies the data structure and variable for phy emulation
* \author Navid Nikaein, Raymomd Knopp and Hicham Anouar * \author Navid Nikaein, Raymomd Knopp and Hicham Anouar
* \date 2011 * \date 2011
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file multicast.h /*! \file multicast_link.c
* \brief * \brief
* \author Lionel Gauthier and Navid Nikaein * \author Lionel Gauthier and Navid Nikaein
* \date 2011 * \date 2011
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file multicast.h /*! \file multicast_link.h
* \brief * \brief
* \author Lionel Gauthier and Navid Nikaein * \author Lionel Gauthier and Navid Nikaein
* \date 2011 * \date 2011
+1 -1
View File
@@ -163,7 +163,7 @@ double nfix(void)
} }
} }
/*!\Procedure to create tables for normal distribution kn,wn and fn. */ /*!Procedure to create tables for normal distribution kn,wn and fn. */
void tableNor(unsigned long seed) void tableNor(unsigned long seed)
{ {
jsr = seed; jsr = seed;
+4 -4
View File
@@ -349,14 +349,14 @@ void set_channeldesc_owner(channel_desc_t *cdesc, channelmod_moduleid_t module_i
/** /**
\brief This function set a model name to a model descriptor, can be later used to identify a allocated channel model \brief This function set a model name to a model descriptor, can be later used to identify a allocated channel model
\param cdesc points to the model descriptor \param cdesc points to the model descriptor
\param module_name is the C string to use as model name for the channel pointed by cdesc \param modelname is the C string to use as model name for the channel pointed by cdesc
*/ */
void set_channeldesc_name(channel_desc_t *cdesc,char *modelname); void set_channeldesc_name(channel_desc_t *cdesc,char *modelname);
/** \fn void get_cexp_doppler(struct complexd *cexp_doppler, channel_desc_t *chan_desc, const uint32_t length) /** \fn void get_cexp_doppler(struct complexd *cexp_doppler, channel_desc_t *chan_desc, const uint32_t length)
\brief This routine generates the complex exponential to apply the Doppler shift \brief This routine generates the complex exponential to apply the Doppler shift
\param cexp_doppler Output with the complex exponential of Doppler shift \param cexp_doppler Output with the complex exponential of Doppler shift
\param desc Pointer to the channel descriptor \param chan_desc Pointer to the channel descriptor
\param length Size of complex exponential of Doppler shift \param length Size of complex exponential of Doppler shift
*/ */
void get_cexp_doppler(struct complexd *cexp_doppler, channel_desc_t *chan_desc, const uint32_t length); void get_cexp_doppler(struct complexd *cexp_doppler, channel_desc_t *chan_desc, const uint32_t length);
@@ -378,6 +378,7 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
\param ts sampling time \param ts sampling time
\param delay introduce delay in terms of number of samples \param delay introduce delay in terms of number of samples
\param pdu_bit_map bitmap indicating presence of optional PDUs \param pdu_bit_map bitmap indicating presence of optional PDUs
\param ptrs_bit_map
\param nb_antennas_rx number of receive antennas \param nb_antennas_rx number of receive antennas
*/ */
void add_noise(c16_t **rxdata, void add_noise(c16_t **rxdata,
@@ -467,9 +468,8 @@ void load_pbch_desc(FILE *pbch_file_fd);
*/ */
unsigned int taus(void); unsigned int taus(void);
/** /**
\fn void set_taus_seed(unsigned int seed_init) \fn set_taus_seed
\brief Sets the seed for the Tausworthe generator. \brief Sets the seed for the Tausworthe generator.
@param seed_init 0 means generate based on CPU time, otherwise provide the seed @param seed_init 0 means generate based on CPU time, otherwise provide the seed
*/ */
+2 -2
View File
@@ -19,8 +19,8 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair2/COMMON/prs_nr_paramdef.f /*! \file prs_nr_paramdef.h
* \brief definition of configuration parameters for PRS * \brief definition of configuration parameters for PRS
* \author * \author
* \date 2022 * \date 2022
* \version 0.1 * \version 0.1
+2 -2
View File
@@ -19,8 +19,8 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair2/ENB_APP/L1_paramdef.f /*! \file L1_paramdef.h
* \brief definition of configuration parameters for all eNodeB modules * \brief definition of configuration parameters for all eNodeB modules
* \author Francois TABURET * \author Francois TABURET
* \date 2017 * \date 2017
* \version 0.1 * \version 0.1
+2 -3
View File
@@ -19,8 +19,8 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair2/ENB_APP/MACRLC_paramdef.f /*! \file MACRLC_paramdef.h
* \brief definition of configuration parameters for all eNodeB modules * \brief definition of configuration parameters for all eNodeB modules
* \author Francois TABURET * \author Francois TABURET
* \date 2017 * \date 2017
* \version 0.1 * \version 0.1
@@ -30,7 +30,6 @@
* \warning * \warning
*/ */
#ifndef __ENB_APP_MACRLC_PARAMDEF__H__ #ifndef __ENB_APP_MACRLC_PARAMDEF__H__
#define __ENB_APP_MACRLC_PARAMDEF__H__ #define __ENB_APP_MACRLC_PARAMDEF__H__
+2 -2
View File
@@ -19,8 +19,8 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair2/GNB_APP/L1_nr_paramdef.f /*! \file L1_nr_paramdef.h
* \brief definition of configuration parameters for all eNodeB modules * \brief definition of configuration parameters for all eNodeB modules
* \author Francois TABURET, WEI-TAI CHEN * \author Francois TABURET, WEI-TAI CHEN
* \date 2018 * \date 2018
* \version 0.1 * \version 0.1
+2 -3
View File
@@ -19,8 +19,8 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair2/GNB_APP/MACRLC_nr_paramdef.f /*! \file MACRLC_nr_paramdef.h
* \brief definition of configuration parameters for all gNodeB modules * \brief definition of configuration parameters for all gNodeB modules
* \author Francois TABURET, WEI-TAI CHEN * \author Francois TABURET, WEI-TAI CHEN
* \date 2018 * \date 2018
* \version 0.1 * \version 0.1
@@ -30,7 +30,6 @@
* \warning * \warning
*/ */
#ifndef __GNB_APP_MACRLC_NR_PARAMDEF__H__ #ifndef __GNB_APP_MACRLC_NR_PARAMDEF__H__
#define __GNB_APP_MACRLC_NR_PARAMDEF__H__ #define __GNB_APP_MACRLC_NR_PARAMDEF__H__
+2 -2
View File
@@ -19,8 +19,8 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file openair2/GNB_APP/gnb_paramdef.f /*! \file gnb_paramdef.h
* \brief definition of configuration parameters for all gNodeB modules * \brief definition of configuration parameters for all gNodeB modules
* \author Francois TABURET, WEI-TAI CHEN * \author Francois TABURET, WEI-TAI CHEN
* \date 2018 * \date 2018
* \version 0.1 * \version 0.1
+1 -1
View File
@@ -24,7 +24,7 @@
* \author Navid Nikaein and Raymond Knopp * \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014 * \date 2010 - 2014
* \version 0.1 * \version 0.1
* \email: navid.nikaein@eurecom.fr * \email navid.nikaein@eurecom.fr
* @ingroup _mac * @ingroup _mac
*/ */
+2 -2
View File
@@ -1,9 +1,9 @@
/*! \file defs_NB_IoT.c /*! \file defs_NB_IoT.h
* \brief MAC layer structures * \brief MAC layer structures
* \author NTUST BMW Lab./ * \author NTUST BMW Lab./
* \date 2017 * \date 2017
* \email: * \email:
* \version 1.0 * \version 1.0
* *
*/ */
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file l1_helper.c /*! \file l1_helpers.c
* \brief phy helper function * \brief phy helper function
* \author Navid Nikaein, Raymond Knopp * \author Navid Nikaein, Raymond Knopp
* \date 2012 - 2014 * \date 2012 - 2014
+4 -5
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file LAYER2/MAC/defs.h /*! \file mac.h
* \brief MAC data structures, constant, and function prototype * \brief MAC data structures, constant, and function prototype
* \author Navid Nikaein and Raymond Knopp * \author Navid Nikaein and Raymond Knopp
* \date 2011 * \date 2011
@@ -32,7 +32,7 @@
* @{ * @{
*/ */
/*@}*/ /**@}*/
#ifndef __LAYER2_MAC_DEFS_H__ #ifndef __LAYER2_MAC_DEFS_H__
#define __LAYER2_MAC_DEFS_H__ #define __LAYER2_MAC_DEFS_H__
@@ -139,7 +139,7 @@
#define MIN_CQI_VALUE 0 #define MIN_CQI_VALUE 0
/*!\brief maximum value for channel quality indicator */ /*!\brief maximum value for channel quality indicator */
#define MAX_CQI_VALUE 15 #define MAX_CQI_VALUE 15
/*!\briefmaximum number of supported bandwidth (1.4, 5, 10, 20 MHz) */ /*!\brief maximum number of supported bandwidth (1.4, 5, 10, 20 MHz) */
#define MAX_SUPPORTED_BW 4 #define MAX_SUPPORTED_BW 4
/*!\brief CQI values range from 1 to 15 (4 bits) */ /*!\brief CQI values range from 1 to 15 (4 bits) */
#define CQI_VALUE_RANGE 16 #define CQI_VALUE_RANGE 16
@@ -467,7 +467,6 @@ typedef struct {
#define SHORT_BSR 29 #define SHORT_BSR 29
/*!\brief LCID of long BSR for ULSCH */ /*!\brief LCID of long BSR for ULSCH */
#define LONG_BSR 30 #define LONG_BSR 30
/*!\bitmaps for BSR Triggers */
#define BSR_TRIGGER_NONE (0) /* No BSR Trigger */ #define BSR_TRIGGER_NONE (0) /* No BSR Trigger */
#define BSR_TRIGGER_REGULAR (1) /* For Regular and ReTxBSR Expiry Triggers */ #define BSR_TRIGGER_REGULAR (1) /* For Regular and ReTxBSR Expiry Triggers */
#define BSR_TRIGGER_PERIODIC (2) /* For BSR Periodic Timer Expiry Trigger */ #define BSR_TRIGGER_PERIODIC (2) /* For BSR Periodic Timer Expiry Trigger */
@@ -1680,5 +1679,5 @@ typedef struct {
#include "mac_proto.h" #include "mac_proto.h"
/*@}*/ /**@}*/
#endif /*__LAYER2_MAC_DEFS_H__ */ #endif /*__LAYER2_MAC_DEFS_H__ */
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file extern.h /*! \file mac_extern.h
* \brief mac externs * \brief mac externs
* \author Navid Nikaein and Raymond Knopp * \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014 * \date 2010 - 2014
+160 -134
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file LAYER2/MAC/proto.h /*! \file mac_proto.h
* \brief MAC functions prototypes for eNB and UE * \brief MAC functions prototypes for eNB and UE
* \author Navid Nikaein and Raymond Knopp * \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014 * \date 2010 - 2014
@@ -35,9 +35,9 @@
/** \fn void schedule_fembms_mib(module_id_t module_idP,frame_t frameP,sub_frame_t subframe); /** \fn void schedule_fembms_mib(module_id_t module_idP,frame_t frameP,sub_frame_t subframe);
\brief MIB scheduling for PBCH. This function requests the MIB from RRC and provides it to L1. \brief MIB scheduling for PBCH. This function requests the MIB from RRC and provides it to L1.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param frame Frame index @param frameP Frame index
@param subframe Subframe number on which to act @param subframeP Subframe number on which to act
*/ */
@@ -50,8 +50,8 @@ void schedule_fembms_mib(module_id_t module_idP,
/** \fn void schedule_mib(module_id_t module_idP,frame_t frameP,sub_frame_t subframe); /** \fn void schedule_mib(module_id_t module_idP,frame_t frameP,sub_frame_t subframe);
\brief MIB scheduling for PBCH. This function requests the MIB from RRC and provides it to L1. \brief MIB scheduling for PBCH. This function requests the MIB from RRC and provides it to L1.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param frame Frame index @param frameP Frame index
@param subframe Subframe number on which to act @param subframe Subframe number on which to act
*/ */
@@ -59,81 +59,84 @@ void schedule_fembms_mib(module_id_t module_idP,
void schedule_mib(module_id_t module_idP, void schedule_mib(module_id_t module_idP,
frame_t frameP, sub_frame_t subframeP); frame_t frameP, sub_frame_t subframeP);
/** \fn void schedule_RA(module_id_t module_idP,frame_t frameP,sub_frame_t subframe); /** \fn void schedule_RA
\brief First stage of Random-Access Scheduling. Loops over the ras and checks if RAR, Msg3 or its retransmission are to be scheduled in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A) \brief First stage of Random-Access Scheduling. Loops over the ras and checks if RAR, Msg3 or its retransmission are to be scheduled
for the message. in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the
@param Mod_id Instance ID of eNB appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A) for the message.
@param frame Frame index @param module_idP Instance ID of eNB
@param frameP Frame index
@param subframe Subframe number on which to act @param subframe Subframe number on which to act
*/ */
void schedule_RA(module_id_t module_idP, frame_t frameP, void schedule_RA(module_id_t module_idP, frame_t frameP,
sub_frame_t subframe); sub_frame_t subframe);
/** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs). /** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a
@param Mod_id Instance ID of eNB function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
@param frame Frame index @param module_idP Instance ID of eNB
@param subframe Subframe number on which to act @param frameP Frame index
@param subframeP Subframe number on which to act
*/ */
void schedule_SI(module_id_t module_idP, frame_t frameP, void schedule_SI(module_id_t module_idP, frame_t frameP,
sub_frame_t subframeP); sub_frame_t subframeP);
/** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs). /** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a
@param Mod_id Instance ID of eNB function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
@param frame Frame index @param module_idP Instance ID of eNB
@param subframe Subframe number on which to act @param frameP Frame index
@param subframeP Subframe number on which to act
*/ */
void schedule_SI_MBMS(module_id_t module_idP, frame_t frameP, void schedule_SI_MBMS(module_id_t module_idP, frame_t frameP,
sub_frame_t subframeP); sub_frame_t subframeP);
/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs
/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0; from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0;
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param frame Frame index @param CC_id carrier
@param frameP Frame index
@param subframe Subframe number on which to act @param subframe Subframe number on which to act
*/ */
int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sub_frame_t subframe); sub_frame_t subframe);
/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0; /** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs
@param Mod_id Instance ID of eNB from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0;
@param frame Frame index @param module_idP Instance ID of eNB
@param CC_id carrier index
@param frameP Frame index
@param subframe Subframe number on which to act @param subframe Subframe number on which to act
*/ */
int schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_frame_t subframe); int schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_frame_t subframe);
/** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping /** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param CC_id carrier index
@param mbsfn_sync_area index of mbsfn sync area @param mbsfn_sync_area index of mbsfn sync area
@param[out] index of sf pattern
*/ */
int8_t get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id, int8_t get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id,
uint8_t mbsfn_sync_area); uint8_t mbsfn_sync_area);
/** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping /** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param mbsfn_sync_area index of mbsfn sync area @param mbsfn_sync_area index of mbsfn sync area
@param eNB_index index of eNB @param eNB_index index of eNB
@param[out] index of sf pattern
*/ */
int8_t ue_get_mbsfn_sf_alloction(module_id_t module_idP, int8_t ue_get_mbsfn_sf_alloction(module_id_t module_idP,
uint8_t mbsfn_sync_area, uint8_t mbsfn_sync_area,
unsigned char eNB_index); unsigned char eNB_index);
/** \brief top ULSCH Scheduling for TDD (config 1-6). /** \brief top ULSCH Scheduling for TDD (config 1-6).
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param frame Frame index @param frameP Frame index
@param subframe Subframe number on which to act @param subframe Subframe number on which to act
*/ */
void schedule_ulsch(module_id_t module_idP, frame_t frameP, void schedule_ulsch(module_id_t module_idP, frame_t frameP,
sub_frame_t subframe); sub_frame_t subframe);
/** \brief ULSCH Scheduling per RNTI /** \brief ULSCH Scheduling per RNTI
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param CC_id The component carrier to schedule @param CC_id The component carrier to schedule
@param frame Frame index @param frameP Frame index
@param subframe Subframe number on which to act @param subframe Subframe number on which to act
@param sched_subframe Subframe number where PUSCH is transmitted (for DAI lookup) @param sched_subframe Subframe number where PUSCH is transmitted (for DAI lookup)
*/ */
@@ -147,9 +150,12 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
unsigned char sched_subframeP, unsigned char sched_subframeP,
int *emtc_active); int *emtc_active);
/** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of available PRBS), builds the MAC header (timing advance sent by default) and copies /** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate
@param Mod_id Instance ID of eNB harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the
@param frame Frame index same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of
available PRBS), builds the MAC header (timing advance sent by default) and copies
@param module_idP Instance ID of eNB
@param frameP Frame index
@param subframe Subframe on which to act @param subframe Subframe on which to act
@param mbsfn_flag Indicates that MCH/MCCH is in this subframe @param mbsfn_flag Indicates that MCH/MCCH is in this subframe
@@ -167,21 +173,22 @@ void schedule_ue_spec_br(module_id_t module_idP,
void schedule_ue_spec_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,int *mbsfn_flag); void schedule_ue_spec_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,int *mbsfn_flag);
void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP); void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP);
/** \brief Function for UE/PHY to compute PUSCH transmit power in power-control procedure. /** \brief Function for UE/PHY to compute PUSCH transmit power in power-control procedure.
@param Mod_id Module id of UE @param module_idP Module id of UE
@param CC_id carrier component id of UE
@returns Po_NOMINAL_PUSCH (PREAMBLE_RECEIVED_TARGET_POWER+DELTA_PREAMBLE @returns Po_NOMINAL_PUSCH (PREAMBLE_RECEIVED_TARGET_POWER+DELTA_PREAMBLE
*/ */
int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP, uint8_t CC_id); int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP, uint8_t CC_id);
/** \brief Function to compute DELTA_PREAMBLE from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy) /** \brief Function to compute DELTA_PREAMBLE from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy)
@param Mod_id Module id of UE @param module_idP Module id of UE
@param CC_id carrier component id of UE
@returns DELTA_PREAMBLE @returns DELTA_PREAMBLE
*/ */
int8_t get_DELTA_PREAMBLE(module_id_t module_idP, int CC_id); int8_t get_DELTA_PREAMBLE(module_id_t module_idP, int CC_id);
/** \brief Function for compute deltaP_rampup from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy) /** \brief Function for compute deltaP_rampup from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy)
@param Mod_id Module id of UE @param module_idP Module id of UE
@param CC_id carrier component id of UE @param CC_id carrier component id of UE
@returns deltaP_rampup @returns deltaP_rampup
*/ */
@@ -202,7 +209,7 @@ int mac_top_init(int eMBMS_active, char *uecap_xer,
void mac_top_init_eNB(void); void mac_top_init_eNB(void);
void mac_init_cell_params(int Mod_idP, int CC_idP); void mac_init_cell_params(int module_idPP, int CC_idP);
char layer2_init_UE(module_id_t module_idP); char layer2_init_UE(module_id_t module_idP);
@@ -218,14 +225,13 @@ void clear_nfapi_information(eNB_MAC_INST *eNB, int CC_idP,
// eNB functions // eNB functions
/* \brief This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done /* \brief This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param slice_idxP Slice instance index for the slice in which scheduling happens @param slice_idxP Slice instance index for the slice in which scheduling happens
@param frame Index of frame @param frame Index of frame
@param subframe Index of current subframe @param subframe Index of current subframe
@param N_RBS Number of resource block groups @param N_RBS Number of resource block groups
*/ */
void dlsch_scheduler_pre_processor(module_id_t module_idP, void dlsch_scheduler_pre_processor(module_id_t module_idP,
int CC_id, int CC_id,
frame_t frameP, frame_t frameP,
@@ -233,14 +239,14 @@ void dlsch_scheduler_pre_processor(module_id_t module_idP,
/* \brief Function to trigger the eNB scheduling procedure. It is called by PHY at the beginning of each subframe, \f$n$\f /* \brief Function to trigger the eNB scheduling procedure. It is called by PHY at the beginning of each subframe, \f$n$\f
and generates all DLSCH allocations for subframe \f$n\f$ and ULSCH allocations for subframe \f$n+k$\f. and generates all DLSCH allocations for subframe \f$n\f$ and ULSCH allocations for subframe \f$n+k$\f.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param subframe Index of current subframe @param subframe Index of current subframe
@param calibration_flag Flag to indicate that eNB scheduler should schedule TDD auto-calibration PUSCH. @param calibration_flag Flag to indicate that eNB scheduler should schedule TDD auto-calibration PUSCH.
*/ */
void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP); //, int calibration_flag); void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP); //, int calibration_flag);
/* \brief Function to indicate a received preamble on PRACH. It initiates the RA procedure. /* \brief Function to indicate a received preamble on PRACH. It initiates the RA procedure.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param preamble_index index of the received RA request @param preamble_index index of the received RA request
@param timing_offset Offset in samples of the received PRACH w.r.t. eNB timing. This is used to @param timing_offset Offset in samples of the received PRACH w.r.t. eNB timing. This is used to
@param rnti RA rnti corresponding to this PRACH preamble @param rnti RA rnti corresponding to this PRACH preamble
@@ -252,8 +258,9 @@ void initiate_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
uint8_t rach_resource_type uint8_t rach_resource_type
); );
/* \brief Function in eNB to fill RAR pdu when requested by PHY. This provides a single RAR SDU for the moment and returns the t-CRNTI. /* \brief Function in eNB to fill RAR pdu when requested by PHY. This provides a single RAR SDU for the moment and returns the
@param Mod_id Instance ID of eNB t-CRNTI.
@param module_idP Instance ID of eNB
@param dlsch_buffer Pointer to DLSCH input buffer @param dlsch_buffer Pointer to DLSCH input buffer
@param N_RB_UL Number of UL resource blocks @param N_RB_UL Number of UL resource blocks
@returns t_CRNTI @returns t_CRNTI
@@ -274,9 +281,8 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
uint8_t *const dlsch_buffer, uint8_t *const dlsch_buffer,
const uint8_t ce_level); const uint8_t ce_level);
/* \brief Function to indicate a failed RA response. It removes all temporary variables related to the initial connection of a UE /* \brief Function to indicate a failed RA response. It removes all temporary variables related to the initial connection of a UE
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param preamble_index index of the received RA request. @param preamble_index index of the received RA request.
*/ */
void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
@@ -285,7 +291,7 @@ void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
/* \brief Function used by PHY to inform MAC that an uplink is scheduled /* \brief Function used by PHY to inform MAC that an uplink is scheduled
for Msg3 in given subframe. This is used so that the MAC for Msg3 in given subframe. This is used so that the MAC
scheduler marks as busy the RBs used by the Msg3. scheduler marks as busy the RBs used by the Msg3.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param CC_id CC ID of eNB @param CC_id CC ID of eNB
@param frame current frame @param frame current frame
@param subframe current subframe @param subframe current subframe
@@ -296,14 +302,10 @@ void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
void clear_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP); void clear_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP);
void set_msg3_subframe(module_id_t Mod_id, void set_msg3_subframe(module_id_t module_idP, int CC_id, int frame, int subframe, int rnti, int Msg3_frame, int Msg3_subframe);
int CC_id,
int frame,
int subframe,
int rnti, int Msg3_frame, int Msg3_subframe);
/* \brief Function to indicate a received SDU on ULSCH. /* \brief Function to indicate a received SDU on ULSCH.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param CC_id Component carrier index @param CC_id Component carrier index
@param rnti RNTI of UE transmitting the SDU @param rnti RNTI of UE transmitting the SDU
@param sdu Pointer to received SDU @param sdu Pointer to received SDU
@@ -320,9 +322,8 @@ void rx_sdu(const module_id_t enb_mod_idP,
const uint16_t sdu_lenP, const uint16_t sdu_lenP,
const uint16_t timing_advance, const uint8_t ul_cqi); const uint16_t timing_advance, const uint8_t ul_cqi);
/* \brief Function to indicate a scheduled schduling request (SR) was received by eNB. /* \brief Function to indicate a scheduled schduling request (SR) was received by eNB.
@param Mod_idP Instance ID of eNB @param module_idPP Instance ID of eNB
@param CC_idP CC_id of received SR @param CC_idP CC_id of received SR
@param frameP of received SR @param frameP of received SR
@param subframeP Index of subframe where SR was received @param subframeP Index of subframe where SR was received
@@ -333,17 +334,16 @@ void SR_indication(module_id_t module_idP, int CC_id, frame_t frameP,
sub_frame_t subframe, rnti_t rnti, uint8_t ul_cqi); sub_frame_t subframe, rnti_t rnti, uint8_t ul_cqi);
/* \brief Function to indicate a UL failure was detected by eNB PHY. /* \brief Function to indicate a UL failure was detected by eNB PHY.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param CC_id Component carrier @param CC_id Component carrier
@param frameP Frame index @param frameP Frame index
@param rnti RNTI of UE transmitting the SR @param rnti RNTI of UE transmitting the SR
@param subframe Index of subframe where SR was received @param subframe Index of subframe where SR was received
*/ */
void UL_failure_indication(module_id_t Mod_id, int CC_id, frame_t frameP, void UL_failure_indication(module_id_t module_idP, int CC_id, frame_t frameP, rnti_t rnti, sub_frame_t subframe);
rnti_t rnti, sub_frame_t subframe);
/* \brief Function to indicate an HARQ ACK/NAK. /* \brief Function to indicate an HARQ ACK/NAK.
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param CC_id Component carrier @param CC_id Component carrier
@param frameP Frame index @param frameP Frame index
@param subframeP subframe index @param subframeP subframe index
@@ -354,7 +354,7 @@ void harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
nfapi_harq_indication_pdu_t *harq_pdu); nfapi_harq_indication_pdu_t *harq_pdu);
/* \brief Function to indicate a received CQI pdu /* \brief Function to indicate a received CQI pdu
@param Mod_id Instance ID of eNB @param module_idP Instance ID of eNB
@param CC_id Component carrier @param CC_id Component carrier
@param frameP Frame index @param frameP Frame index
@param subframeP subframe index @param subframeP subframe index
@@ -369,19 +369,15 @@ void cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
uint8_t *get_dlsch_sdu(module_id_t module_idP, int CC_id, frame_t frameP, uint8_t *get_dlsch_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
rnti_t rnti, uint8_t TBindex); rnti_t rnti, uint8_t TBindex);
/* \brief Function to retrieve MCH transport block and MCS used for MCH in this MBSFN subframe. Returns null if no MCH is to be transmitted /* \brief Function to retrieve MCH transport block and MCS used for MCH in this MBSFN subframe. Returns null if no MCH is to be
@param Mod_id Instance ID of eNB transmitted
@param module_idP Instance ID of eNB
@param frame Index of frame @param frame Index of frame
@param subframe Index of current subframe @param subframe Index of current subframe
@param mcs Pointer to mcs used by PHY (to be filled by MAC) @param mcs Pointer to mcs used by PHY (to be filled by MAC)
@returns Pointer to MCH transport block and mcs for subframe @returns Pointer to MCH transport block and mcs for subframe
*/ */
MCH_PDU *get_mch_sdu(module_id_t Mod_id, int CC_id, frame_t frame, MCH_PDU *get_mch_sdu(module_id_t module_idP, int CC_id, frame_t frame, sub_frame_t subframe);
sub_frame_t subframe);
void ue_mac_reset(module_id_t module_idP, uint8_t eNB_index); void ue_mac_reset(module_id_t module_idP, uint8_t eNB_index);
void ue_init_mac(module_id_t module_idP); void ue_init_mac(module_id_t module_idP);
@@ -431,11 +427,11 @@ void set_ue_dai(sub_frame_t subframeP,
uint8_t CC_id, uint8_t tdd_config, UE_info_t *UE_info); uint8_t CC_id, uint8_t tdd_config, UE_info_t *UE_info);
uint8_t frame_subframe2_dl_harq_pid(LTE_TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP); uint8_t frame_subframe2_dl_harq_pid(LTE_TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP);
/** \brief First stage of PCH Scheduling. Gets a PCH SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs). /** \brief First stage of PCH Scheduling. Gets a PCH SDU from RRC if available and computes the MCS required to transport it as a
@param Mod_id Instance ID of eNB function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
@param frame Frame index @param module_idP Instance ID of eNB
@param subframe Subframe number on which to act @param frameP Frame index
@param paging_ue_index @param subframeP Subframe number on which to act
*/ */
void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP); void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP);
@@ -444,7 +440,8 @@ uint8_t find_num_active_UEs_in_cbagroup(module_id_t module_idP,
uint8_t UE_is_to_be_scheduled(module_id_t module_idP, int CC_id, uint8_t UE_is_to_be_scheduled(module_id_t module_idP, int CC_id,
uint8_t UE_id); uint8_t UE_id);
/** \brief Round-robin scheduler for ULSCH traffic. /** \brief Round-robin scheduler for ULSCH traffic.
@param Mod_id Instance ID for eNB @param module_idP Instance ID for eNB
@param UE_id
@param subframe Subframe number on which to act @param subframe Subframe number on which to act
@returns UE index that is to be scheduled if needed/room @returns UE index that is to be scheduled if needed/room
*/ */
@@ -463,13 +460,13 @@ uint32_t allocate_prbs(int UE_id, uint8_t nb_rb, int N_RB_DL,
/* \fn uint32_t req_new_ulsch(module_id_t module_idP) /* \fn uint32_t req_new_ulsch(module_id_t module_idP)
\brief check for a new transmission in any drb \brief check for a new transmission in any drb
@param Mod_id Instance id of UE in machine @param module_idP Instance id of UE in machine
@returns 1 for new transmission, 0 for none @returns 1 for new transmission, 0 for none
*/ */
uint32_t req_new_ulsch(module_id_t module_idP); uint32_t req_new_ulsch(module_id_t module_idP);
/* \brief Get SR payload (0,1) from UE MAC /* \brief Get SR payload (0,1) from UE MAC
@param Mod_id Instance id of UE in machine @param module_idP Instance id of UE in machine
@param CC_id Component Carrier index @param CC_id Component Carrier index
@param eNB_id Index of eNB that UE is attached to @param eNB_id Index of eNB that UE is attached to
@param rnti C_RNTI of UE @param rnti C_RNTI of UE
@@ -508,7 +505,7 @@ void ue_send_sl_sdu(module_id_t module_idP,
); );
/* \brief Called by PHY to transfer MCH transport block to ue MAC. /* \brief Called by PHY to transfer MCH transport block to ue MAC.
@param Mod_id Index of module instance @param module_idP Index of module instance
@param frame Frame index @param frame Frame index
@param sdu Pointer to transport block @param sdu Pointer to transport block
@param sdu_len Length of transport block @param sdu_len Length of transport block
@@ -520,24 +517,34 @@ void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
uint8_t sync_area); uint8_t sync_area);
/*\brief Function to check if UE PHY needs to decode MCH for MAC. /*\brief Function to check if UE PHY needs to decode MCH for MAC.
@param Mod_id Index of protocol instance @param module_idP Index of protocol instance
@param frame Index of frame @param frame Index of frame
@param subframe Index of subframe @param subframe Index of subframe
@param eNB_index index of eNB for this MCH @param eNB_index index of eNB for this MCH
@param[out] sync_area return the sync area @param[out] sync_area return the sync area
@param[out] mcch_active flag indicating whether this MCCH is active in this SF @param[out] mcch_active flag indicating whether this MCCH is active in this SF
*/ */
int ue_query_mch(module_id_t Mod_id, uint8_t CC_id, uint32_t frame, int ue_query_mch(module_id_t module_idP,
sub_frame_t subframe, uint8_t eNB_index, uint8_t CC_id,
uint8_t *sync_area, uint8_t *mcch_active); uint32_t frame,
sub_frame_t subframe,
uint8_t eNB_index,
uint8_t *sync_area,
uint8_t *mcch_active);
int ue_query_mch_fembms(module_id_t Mod_id, uint8_t CC_id, uint32_t frame, int ue_query_mch_fembms(module_id_t module_idP,
sub_frame_t subframe, uint8_t eNB_index, uint8_t CC_id,
uint8_t * sync_area, uint8_t * mcch_active); uint32_t frame,
sub_frame_t subframe,
uint8_t eNB_index,
uint8_t *sync_area,
uint8_t *mcch_active);
/* \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and
/* \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3 SDUs and generates header and forms the complete MAC SDU. DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and
@param Mod_id Instance id of UE in machine DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3
SDUs and generates header and forms the complete MAC SDU.
@param module_idP Instance id of UE in machine
@param eNB_id Index of eNB that UE is attached to @param eNB_id Index of eNB that UE is attached to
@param rnti C_RNTI of UE @param rnti C_RNTI of UE
@param subframe subframe number @param subframe subframe number
@@ -548,7 +555,7 @@ void ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
uint8_t *access_mode); uint8_t *access_mode);
/* \brief Called by PHY to get sdu for PSBCH/SSS/PSS transmission. /* \brief Called by PHY to get sdu for PSBCH/SSS/PSS transmission.
@param Mod_id Instance id of UE in machine @param module_idP Instance id of UE in machine
@param frame_tx TX frame index @param frame_tx TX frame index
@param subframe_tx TX subframe index @param subframe_tx TX subframe index
@returns pointer to SLSS_t descriptor @returns pointer to SLSS_t descriptor
@@ -556,7 +563,7 @@ void ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
SLSS_t *ue_get_slss(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe); SLSS_t *ue_get_slss(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe);
/* \brief Called by PHY to get sdu for PSDCH transmission. /* \brief Called by PHY to get sdu for PSDCH transmission.
@param Mod_id Instance id of UE in machine @param module_idP Instance id of UE in machine
@param frame_tx TX frame index @param frame_tx TX frame index
@param subframe_tx TX subframe index @param subframe_tx TX subframe index
@returns pointer to SLDCH_t descriptor @returns pointer to SLDCH_t descriptor
@@ -564,16 +571,19 @@ SLSS_t *ue_get_slss(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_
SLDCH_t *ue_get_sldch(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe); SLDCH_t *ue_get_sldch(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe);
/* \brief Called by PHY to get sdu for PSSCH transmission. /* \brief Called by PHY to get sdu for PSSCH transmission.
@param Mod_id Instance id of UE in machine @param module_idP Instance id of UE in machine
@param frame_tx TX frame index @param frame_tx TX frame index
@param subframe_tx TX subframe index @param subframe_tx TX subframe index
@returns pointer to SLSCH_t descriptor @returns pointer to SLSCH_t descriptor
*/ */
SLSCH_t *ue_get_slsch(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe); SLSCH_t *ue_get_slsch(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe);
/* \brief Function called by PHY to retrieve information to be transmitted using the RA procedure. If the UE is not in PUSCH mode for a particular eNB index, this is assumed to be an Msg3 and MAC attempts to retrieves the CCCH message from RRC. If the UE is in PUSCH mode for a particular eNB index and PUCCH format 0 (Scheduling Request) is not activated, the MAC may use this resource for random-access to transmit a BSR along with the C-RNTI control element (see 5.1.4 from 36.321) /* \brief Function called by PHY to retrieve information to be transmitted using the RA procedure. If the UE is not in PUSCH mode
@param Mod_id Index of UE instance for a particular eNB index, this is assumed to be an Msg3 and MAC attempts to retrieves the CCCH message from RRC. If the UE is in
@param Mod_id Component Carrier Index PUSCH mode for a particular eNB index and PUCCH format 0 (Scheduling Request) is not activated, the MAC may use this resource for
random-access to transmit a BSR along with the C-RNTI control element (see 5.1.4 from 36.321)
@param module_idP Index of UE instance
@param module_idP Component Carrier Index
@param New_Msg3 Flag to indicate this call is for a new Msg3 @param New_Msg3 Flag to indicate this call is for a new Msg3
@param subframe Index of subframe for PRACH transmission (0 ... 9) @param subframe Index of subframe for PRACH transmission (0 ... 9)
@returns A pointer to a PRACH_RESOURCES_t */ @returns A pointer to a PRACH_RESOURCES_t */
@@ -581,8 +591,9 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP, int CC_id,
frame_t frameP, uint8_t new_Msg3, frame_t frameP, uint8_t new_Msg3,
sub_frame_t subframe); sub_frame_t subframe);
/* \brief Function called by PHY to process the received RAR. It checks that the preamble matches what was sent by the eNB and provides the timing advance and t-CRNTI. /* \brief Function called by PHY to process the received RAR. It checks that the preamble matches what was sent by the eNB and
@param Mod_id Index of UE instance provides the timing advance and t-CRNTI.
@param module_idP Index of UE instance
@param CC_id Index to a component carrier @param CC_id Index to a component carrier
@param frame Frame index @param frame Frame index
@param ra_rnti RA_RNTI value @param ra_rnti RA_RNTI value
@@ -653,10 +664,10 @@ uint8_t *parse_ulsch_header(uint8_t *mac_header,
int to_prb(int); int to_prb(int);
int to_rbg(int); int to_rbg(int);
int mac_init(void); int mac_init(void);
int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti, int harq_pid, uint8_t rach_resource_type); int add_new_ue(module_id_t module_idP, int CC_id, rnti_t rnti, int harq_pid, uint8_t rach_resource_type);
int rrc_mac_remove_ue(module_id_t Mod_id, rnti_t rntiP); int rrc_mac_remove_ue(module_id_t module_idP, rnti_t rntiP);
void store_dlsch_buffer(module_id_t Mod_id, int CC_id, frame_t frameP, sub_frame_t subframeP); void store_dlsch_buffer(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t subframeP);
int prev(UE_list_t *listP, int nodeP); int prev(UE_list_t *listP, int nodeP);
void add_ue_list(UE_list_t *listP, int UE_id); void add_ue_list(UE_list_t *listP, int UE_id);
@@ -680,7 +691,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
frame_t sched_frameP, frame_t sched_frameP,
sub_frame_t sched_subframeP); sub_frame_t sched_subframeP);
int phy_stats_exist(module_id_t Mod_id, int rnti); int phy_stats_exist(module_id_t module_idP, int rnti);
/*! \fn UE_L2_state_t ue_scheduler(const module_id_t module_idP,const frame_t frameP, const sub_frame_t subframe, const lte_subframe_t direction,const uint8_t eNB_index) /*! \fn UE_L2_state_t ue_scheduler(const module_id_t module_idP,const frame_t frameP, const sub_frame_t subframe, const lte_subframe_t direction,const uint8_t eNB_index)
\brief UE scheduler where all the ue background tasks are done. This function performs the following: 1) Trigger PDCP every 5ms 2) Call RRC for link status return to PHY3) Perform SR/BSR procedures for scheduling feedback 4) Perform PHR procedures. \brief UE scheduler where all the ue background tasks are done. This function performs the following: 1) Trigger PDCP every 5ms 2) Call RRC for link status return to PHY3) Perform SR/BSR procedures for scheduling feedback 4) Perform PHR procedures.
@@ -701,37 +712,34 @@ UE_L2_STATE_t ue_scheduler(const module_id_t module_idP,
const lte_subframe_t direction, const lte_subframe_t direction,
const uint8_t eNB_index, const int CC_id); const uint8_t eNB_index, const int CC_id);
/*! \fn int cba_access(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, uint8_t eNB_index,uint16_t buflen); /*! \fn int cba_access
\brief determine whether to use cba resource to transmit or not \brief determine whether to use cba resource to transmit or not
\param[in] Mod_id instance of the UE \param[in] module_idP instance of the UE
\param[in] frame the frame number \param[in] frameP the frame number
\param[in] subframe the subframe number \param[in] subframe the subframe number
\param[in] eNB_index instance of eNB \param[in] eNB_index instance of eNB
\param[out] access(1) or postpone (0)
*/ */
int cba_access(module_id_t module_idP, frame_t frameP, int cba_access(module_id_t module_idP, frame_t frameP,
sub_frame_t subframe, uint8_t eNB_index, uint16_t buflen); sub_frame_t subframe, uint8_t eNB_index, uint16_t buflen);
/*! \fn BSR_SHORT * get_bsr_short(module_id_t module_idP, uint8_t bsr_len) /*! \fn BSR_SHORT * get_bsr_short(module_id_t module_idP, uint8_t bsr_len)
\brief get short bsr level \brief get short bsr level
\param[in] Mod_id instance of the UE \param[in] module_idP instance of the UE
\param[in] bsr_len indicator for no, short, or long bsr \param[in] bsr_len indicator for no, short, or long bsr
\param[out] bsr_s pointer to short bsr
*/ */
BSR_SHORT *get_bsr_short(module_id_t module_idP, uint8_t bsr_len); BSR_SHORT *get_bsr_short(module_id_t module_idP, uint8_t bsr_len);
/*! \fn BSR_LONG * get_bsr_long(module_id_t module_idP, uint8_t bsr_len) /*! \fn BSR_LONG * get_bsr_long(module_id_t module_idP, uint8_t bsr_len)
\brief get long bsr level \brief get long bsr level
\param[in] Mod_id instance of the UE \param[in] module_idP instance of the UE
\param[in] bsr_len indicator for no, short, or long bsr \param[in] bsr_len indicator for no, short, or long bsr
\param[out] bsr_l pointer to long bsr
*/ */
BSR_LONG *get_bsr_long(module_id_t module_idP, uint8_t bsr_len); BSR_LONG *get_bsr_long(module_id_t module_idP, uint8_t bsr_len);
/*! \fn bool update_bsr(module_id_t module_idP, frame_t frameP,sub_frame_t subframeP) /*! \fn bool update_bsr(module_id_t module_idP, frame_t frameP,sub_frame_t subframeP)
\brief get the rlc stats and update the bsr level for each lcid \brief get the rlc stats and update the bsr level for each lcid
\param[in] Mod_id instance of the UE \param[in] module_idP instance of the UE
\param[in] frame Frame index \param[in] frameP Frame index
*/ */
bool update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, eNB_index_t eNB_index); bool update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, eNB_index_t eNB_index);
@@ -745,22 +753,20 @@ bool update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, e
uint8_t locate_BsrIndexByBufferSize(const uint32_t *table, int size, uint8_t locate_BsrIndexByBufferSize(const uint32_t *table, int size,
int value); int value);
/*! \fn int get_sf_periodicBSRTimer(uint8_t periodicBSR_Timer) /*! \fn int get_sf_periodicBSRTimer(uint8_t periodicBSR_Timer)
\brief get the number of subframe from the periodic BSR timer configured by the higher layers \brief get the number of subframe from the periodic BSR timer configured by the higher layers
\param[in] periodicBSR_Timer timer for periodic BSR
\return the number of subframe \return the number of subframe
*/ */
int get_sf_periodicBSRTimer(uint8_t bucketSize); int get_sf_periodicBSRTimer(uint8_t bucketSize);
/*! \fn int get_ms_bucketsizeduration(uint8_t bucketSize) /*! \fn int get_ms_bucketsizeduration(uint8_t bucketSize)
\brief get the time in ms form the bucket size duration configured by the higher layer \brief get the time in ms form the bucket size duration configured by the higher layer
\param[in] bucketSize the bucket size duration \param[in] bucketsizeduration the bucket size duration
\return the time in ms \return the time in ms
*/ */
int get_ms_bucketsizeduration(uint8_t bucketsizeduration); int get_ms_bucketsizeduration(uint8_t bucketsizeduration);
/*! \fn int get_sf_retxBSRTimer(uint8_t retxBSR_Timer) /*! \fn get_sf_retxBSRTimer
\brief get the number of subframe form the bucket size duration configured by the higher layer \brief get the number of subframe form the bucket size duration configured by the higher layer
\param[in] retxBSR_Timer timer for regular BSR \param[in] retxBSR_Timer timer for regular BSR
\return the time in sf \return the time in sf
@@ -790,8 +796,9 @@ int get_db_dl_PathlossChange(uint8_t dl_PathlossChange);
/*! \fn uint8_t get_phr_mapping (module_id_t module_idP, int CC_id,uint8_t eNB_index) /*! \fn uint8_t get_phr_mapping (module_id_t module_idP, int CC_id,uint8_t eNB_index)
\brief get phr mapping as described in 36.313 \brief get phr mapping as described in 36.313
\param[in] Mod_id index of eNB \param[in] module_idP index of eNB
\param[in] CC_id Component Carrier Index \param[in] CC_id Component Carrier Index
\param[in] eNB_index
\return phr mapping \return phr mapping
*/ */
uint8_t get_phr_mapping(module_id_t module_idP, int CC_id, uint8_t get_phr_mapping(module_id_t module_idP, int CC_id,
@@ -799,22 +806,25 @@ uint8_t get_phr_mapping(module_id_t module_idP, int CC_id,
/*! \fn void update_phr (module_id_t module_idP) /*! \fn void update_phr (module_id_t module_idP)
\brief update/reset the phr timers \brief update/reset the phr timers
\param[in] Mod_id index of eNB \param[in] module_idP index of eNB
\param[in] CC_id Component carrier index \param[in] CC_id Component carrier index
\return void \return void
*/ */
void update_phr(module_id_t module_idP, int CC_id); void update_phr(module_id_t module_idP, int CC_id);
/*! \brief Function to indicate Msg3 transmission/retransmission which initiates/reset Contention Resolution Timer /*! \brief Function to indicate Msg3 transmission/retransmission which initiates/reset Contention Resolution Timer
\param[in] Mod_id Instance index of UE \param[in] module_idP Instance index of UE
\param[in] CC_id carrier component id of UE
\param[in] frameP
\param[in] eNB_id Index of eNB \param[in] eNB_id Index of eNB
*/ */
void Msg3_tx(module_id_t module_idP, uint8_t CC_id, frame_t frameP, void Msg3_tx(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
uint8_t eNB_id); uint8_t eNB_id);
/*! \brief Function to indicate the transmission of msg1/rach /*! \brief Function to indicate the transmission of msg1/rach
\param[in] Mod_id Instance index of UE \param[in] module_idP Instance index of UE
\param[in] CC_id carrier component id of UE
\param[in] frameP
\param[in] eNB_id Index of eNB \param[in] eNB_id Index of eNB
*/ */
@@ -873,15 +883,18 @@ int generate_dlsch_header(unsigned char *mac_header,
unsigned char short_padding, unsigned char short_padding,
unsigned short post_padding); unsigned short post_padding);
/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages. /** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI),
@param Mod_id Instance ID of eNB RRCConnectionSetup and RRCConnectionReconfiguration messages.
@param module_idP Instance ID of eNB
@param CC_id Component Carrier of the eNB @param CC_id Component Carrier of the eNB
@param mib Pointer to MIB @param mib Pointer to MIB
@param radioResourceConfigCommon Structure from SIB2 for common radio parameters (if NULL keep existing configuration) @param radioResourceConfigCommon Structure from SIB2 for common radio parameters (if NULL keep existing configuration)
@param physicalConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if NULL keep existing configuration) @param physicalConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if
NULL keep existing configuration)
@param measObj Structure from RRCConnectionReconfiguration for UE measurement procedures @param measObj Structure from RRCConnectionReconfiguration for UE measurement procedures
@param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep existing configuration) @param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep
existing configuration)
@param logicalChannelIdentity Logical channel identity index of corresponding logical channel config @param logicalChannelIdentity Logical channel identity index of corresponding logical channel config
@param logicalChannelConfig Pointer to logical channel configuration @param logicalChannelConfig Pointer to logical channel configuration
@param measGapConfig Measurement Gap configuration for MAC (if NULL keep existing configuration) @param measGapConfig Measurement Gap configuration for MAC (if NULL keep existing configuration)
@@ -943,14 +956,18 @@ typedef struct {
int rrc_mac_config_req_eNB(const module_id_t module_idP, const rrc_mac_config_req_eNB_t *); int rrc_mac_config_req_eNB(const module_id_t module_idP, const rrc_mac_config_req_eNB_t *);
/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages. /** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI),
@param Mod_id Instance ID of ue RRCConnectionSetup and RRCConnectionReconfiguration messages.
@param module_idP Instance ID of ue
@param CC_id Component Carrier of the ue @param CC_id Component Carrier of the ue
@param eNB_id Index of eNB @param eNB_index Index of eNB
@param radioResourceConfigCommon Structure from SIB2 for common radio parameters (if NULL keep existing configuration) @param radioResourceConfigCommon Structure from SIB2 for common radio parameters (if NULL keep existing configuration)
@param physcialConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if NULL keep existing configuration) @param physicalConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if
NULL keep existing configuration)
@param sCellToAddMod_r10
@param measObj Structure from RRCConnectionReconfiguration for UE measurement procedures @param measObj Structure from RRCConnectionReconfiguration for UE measurement procedures
@param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep existing configuration) @param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep
existing configuration)
@param logicalChannelIdentity Logical channel identity index of corresponding logical channel config @param logicalChannelIdentity Logical channel identity index of corresponding logical channel config
@param logicalChannelConfig Pointer to logical channel configuration @param logicalChannelConfig Pointer to logical channel configuration
@param measGapConfig Measurement Gap configuration for MAC (if NULL keep existing configuration) @param measGapConfig Measurement Gap configuration for MAC (if NULL keep existing configuration)
@@ -958,10 +975,19 @@ int rrc_mac_config_req_eNB(const module_id_t module_idP, const rrc_mac_config_re
@param mobilityControlInfo mobility control info received for Handover @param mobilityControlInfo mobility control info received for Handover
@param SIwindowsize SI Windowsize from SIB1 (if NULL keep existing configuration) @param SIwindowsize SI Windowsize from SIB1 (if NULL keep existing configuration)
@param SIperiod SI Period from SIB1 (if NULL keep existing configuration) @param SIperiod SI Period from SIB1 (if NULL keep existing configuration)
@param ul_CarrierFreq
@param ul_Bandwidth
@param additionalSpectrumEmission
@param MBMS_Flag indicates MBMS transmission @param MBMS_Flag indicates MBMS transmission
@param mbsfn_SubframeConfigList pointer to mbsfn subframe configuration list from SIB2 @param mbsfn_SubframeConfigList pointer to mbsfn subframe configuration list from SIB2
@param mbsfn_AreaInfoList pointer to MBSFN Area Info list from SIB13 @param mbsfn_AreaInfoList pointer to MBSFN Area Info list from SIB13
@param pmch_InfoList pointer to PMCH_InfoList from MBSFNAreaConfiguration Message (MCCH Message) @param pmch_InfoList pointer to PMCH_InfoList from MBSFNAreaConfiguration Message (MCCH Message)
@param config_action
@param sourceL2Id
@param destinationL2Id
@param FeMBMS_Flag
@param nonMBSFN_SubframeConfig
@param mbsfn_AreaInfoList_fembms
*/ */
int rrc_mac_config_req_ue(module_id_t module_idP, int rrc_mac_config_req_ue(module_id_t module_idP,
int CC_id, int CC_id,
@@ -1205,7 +1231,7 @@ void pre_scd_nb_rbs_required( module_id_t module_idP,
/* DRX Configuration */ /* DRX Configuration */
/* Configure local DRX timers and thresholds in UE context, following the drx_configuration input */ /* Configure local DRX timers and thresholds in UE context, following the drx_configuration input */
void eNB_Config_Local_DRX(instance_t Mod_id, rrc_mac_drx_config_req_t *rrc_mac_drx_config_req); void eNB_Config_Local_DRX(instance_t module_idP, rrc_mac_drx_config_req_t *rrc_mac_drx_config_req);
/* from here: prototypes to get rid of compilation warnings: doc to be written by function author */ /* from here: prototypes to get rid of compilation warnings: doc to be written by function author */
uint8_t ul_subframe2_k_phich(COMMON_channels_t *cc, sub_frame_t ul_subframe); uint8_t ul_subframe2_k_phich(COMMON_channels_t *cc, sub_frame_t ul_subframe);
+1 -2
View File
@@ -19,8 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file ue_procedures.c
/*! \file asn1_msg.c
* \brief primitives to build the asn1 messages / primitives to build FeMBMS asn1 messages * \brief primitives to build the asn1 messages / primitives to build FeMBMS asn1 messages
* \author Raymond Knopp, Navid Nikaein and Javier Morgade * \author Raymond Knopp, Navid Nikaein and Javier Morgade
* \date 2011 / 2019 * \date 2011 / 2019
+9 -9
View File
@@ -121,19 +121,20 @@ void fill_scheduled_response(nr_scheduled_response_t *scheduled_response,
void *phy_data); void *phy_data);
/*! \fn int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP); /*! \fn int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP);
\brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3 SDUs and generates header and forms the complete MAC SDU. \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and
\param[in] Mod_id Instance id of UE in machine DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and
\param[in] frameP subframe number DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3
\param[in] slotP slot number SDUs and generates header and forms the complete MAC SDU. \param[in] module_idP Instance id of UE in machine \param[in] frameP
subframe number \param[in] slotP slot number
*/ */
int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP); int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP);
/*! \fn bool update_bsr(module_id_t module_idP, frame_t frameP, slot_t slotP, uint8_t gNB_index) /*! \fn nr_update_bsr
\brief get the rlc stats and update the bsr level for each lcid \brief get the rlc stats and update the bsr level for each lcid
\param[in] Mod_id instance of the UE \param[in] module_idP instance of the UE
\param[in] frameP Frame index \param[in] frameP Frame index
\param[in] slot slotP number \param[in] slotP number
\param[in] uint8_t gNB_index \param[in] gNB_index
*/ */
bool nr_update_bsr(module_id_t module_idP, frame_t frameP, slot_t slotP, uint8_t gNB_index); bool nr_update_bsr(module_id_t module_idP, frame_t frameP, slot_t slotP, uint8_t gNB_index);
@@ -424,4 +425,3 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
uint16_t rnti, uint16_t rnti,
const nr_dci_format_t dci_format); const nr_dci_format_t dci_format);
#endif #endif
/** @}*/
@@ -27,7 +27,6 @@
* \version 1.0 * \version 1.0
* \company Eurecom * \company Eurecom
* @ingroup _mac * @ingroup _mac
*/ */
#include <softmodem-common.h> #include <softmodem-common.h>
+1
View File
@@ -857,3 +857,4 @@ typedef struct gNB_MAC_INST_s {
} gNB_MAC_INST; } gNB_MAC_INST;
#endif /*__LAYER2_NR_MAC_GNB_H__ */ #endif /*__LAYER2_NR_MAC_GNB_H__ */
/** @}*/
+1 -11
View File
@@ -336,16 +336,6 @@ void pdcp_add_UE(const protocol_ctxt_t *const ctxt_pP);
*/ */
bool pdcp_remove_UE(const protocol_ctxt_t *const ctxt_pP); bool pdcp_remove_UE(const protocol_ctxt_t *const ctxt_pP);
/*! \fn void rrc_pdcp_config_release( const protocol_ctxt_t* const, rb_id_t)
* \brief This functions is unused
* \param[in] ctxt_pP Running context.
* \param[in] rab_id Radio Bearer ID of relevant PDCP entity
* \return none
* \note None
* @ingroup _pdcp
*/
//void rrc_pdcp_config_release ( const protocol_ctxt_t* const ctxt_pP, rb_id_t);
/*! \fn void pdcp_mbms_run(const protocol_ctxt_t* const ctxt_pP) /*! \fn void pdcp_mbms_run(const protocol_ctxt_t* const ctxt_pP)
* \brief Runs PDCP entity to let it handle incoming/outgoing SDUs * \brief Runs PDCP entity to let it handle incoming/outgoing SDUs
* \param[in] ctxt_pP Running context. * \param[in] ctxt_pP Running context.
@@ -506,4 +496,4 @@ extern notifiedFIFO_t pdcp_sdu_list;
extern hash_table_t *pdcp_coll_p; extern hash_table_t *pdcp_coll_p;
#endif #endif
/*@}*/ /** @}*/
+40 -29
View File
@@ -145,13 +145,12 @@ rlc_op_status_t rrc_rlc_config_asn1_req (
const uint32_t, const uint32_t,
const uint32_t ); const uint32_t );
/*! \fn rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const ctxtP) /*! \fn rrc_rlc_remove_ue
* \brief Remove all RLC protocol instances from all radio bearers allocated to a UE. * \brief Remove all RLC protocol instances from all radio bearers allocated to a UE.
* \param[in] ctxtP Running context. * \param[in] ctxtP Running context.
* \return A status about the processing, OK or error code. * \return A status about the processing, OK or error code.
*/ */
rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t *const); rlc_op_status_t rrc_rlc_remove_ue(const protocol_ctxt_t *const ctxtP);
/*! \fn rlc_op_status_t rrc_rlc_config_req ( /*! \fn rlc_op_status_t rrc_rlc_config_req (
const protocol_ctxt_t* const ctxtP, const protocol_ctxt_t* const ctxtP,
@@ -166,23 +165,32 @@ rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t *const);
* \param[in] MBMS_flag Flag to indicate whether this is an MBMS service (1) or not (0) * \param[in] MBMS_flag Flag to indicate whether this is an MBMS service (1) or not (0)
* \param[in] actionP Action for this radio bearer (add, modify, remove). * \param[in] actionP Action for this radio bearer (add, modify, remove).
* \param[in] rb_idP Radio bearer identifier. * \param[in] rb_idP Radio bearer identifier.
* \param[in] rlc_infoP RLC configuration parameters issued from Radio Resource Manager.
* \return A status about the processing, OK or error code. * \return A status about the processing, OK or error code.
*/ */
rlc_op_status_t rrc_rlc_config_req(const protocol_ctxt_t *const, const srb_flag_t, const MBMS_flag_t, config_action_t, const rb_id_t); rlc_op_status_t rrc_rlc_config_req(const protocol_ctxt_t *const ctxtP,
const srb_flag_t srb_flagP,
const MBMS_flag_t MBMS_flag,
config_action_t actionP,
const rb_id_t rb_idP);
/*! \fn rlc_op_status_t rrc_rlc_data_req (const protocol_ctxt_t* const ctxtP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP, mui_t muiP, confirm_t confirmP, sdu_size_t sdu_sizeP, char* sduP) /*! \fn rrc_rlc_data_req
* \brief Function for RRC to send a SDU through a Signalling Radio Bearer. * \brief Function for RRC to send a SDU through a Signalling Radio Bearer.
* \param[in] ctxtP Running context. * \param[in] ctxtP Running context.
* \param[in] MBMS_flag Flag to indicate whether this is an MBMS service (1) or not (0) * \param[in] MBMS_flag Flag to indicate whether this is an MBMS service (1) or not (0)
* \param[in] rb_idP Radio bearer identifier. * \param[in] rb_idP Radio bearer identifier.
* \param[in] muiP Message Unit identifier. * \param[in] muiP Message Unit identifier.
* \param[in] confirmP Boolean, is confirmation requested. * \param[in] confirmP Boolean, is confirmation requested.
* \param[in] sdu_sizeP Size of SDU in bytes. * \param[in] sdu_sizeP Size of SDU in bytes.
* \param[in] sduP SDU. * \param[in] sduP SDU.
* \return A status about the processing, OK or error code. * \return A status about the processing, OK or error code.
*/ */
rlc_op_status_t rrc_rlc_data_req (const protocol_ctxt_t *const, const MBMS_flag_t, const rb_id_t, mui_t, confirm_t, sdu_size_t, char *); rlc_op_status_t rrc_rlc_data_req(const protocol_ctxt_t *const ctxtP,
const MBMS_flag_t MBMS_flag,
const rb_id_t rb_idP,
mui_t muiP,
confirm_t confirmP,
sdu_size_t sdu_sizeP,
char *sduP);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// PUBLIC INTERFACE WITH MAC // PUBLIC INTERFACE WITH MAC
@@ -236,17 +244,20 @@ mac_rlc_status_resp_t mac_rlc_status_ind (const module_id_t, const rnti_t, con
,const uint32_t destinationL2Id ,const uint32_t destinationL2Id
); );
/*! \fn rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module_idP, const rnti_t rntiP, const eNB_index_t eNB_index, const frame_t frameP, const sub_frame_t subframeP,const eNB_flag_t enb_flagP, const logical_chan_id_t channel_idP) /*! \fn mac_rlc_get_buffer_occupancy_ind
* \brief Interface with MAC layer, UE only: request and get the number of bytes scheduled for transmission by the RLC instance corresponding to the radio bearer identifier. * \brief Interface with MAC layer, UE only: request and get the number of bytes scheduled for transmission by the RLC instance
* \param[in] mod_idP Virtualized module identifier. * corresponding to the radio bearer identifier. \param[in] mod_idP Virtualized module identifier. \param[in] rntiP UE
* \param[in] rntiP UE identifier. * identifier. \param[in] frameP Frame index. \param[in] subframeP SubFrame index. \param[in] eNB_flagP Flag
* \param[in] frameP Frame index. * to indicate eNB operation (1 true, 0 false) \param[in] channel_idP Logical Channel identifier. \return The maximum
* \param[in] subframeP SubFrame index. * number of bytes that the RLC instance can send in the next transmission sequence.
* \param[in] eNB_flagP Flag to indicate eNB operation (1 true, 0 false) */
* \param[in] channel_idP Logical Channel identifier. rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t mod_idP,
* \return The maximum number of bytes that the RLC instance can send in the next transmission sequence. const rnti_t rntiP,
*/ const eNB_index_t enb,
rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const sub_frame_t, const eNB_flag_t, const logical_chan_id_t ); const frame_t frameP,
const sub_frame_t subframeP,
const eNB_flag_t eNB_flagP,
const logical_chan_id_t channel_idP);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// RLC methods // RLC methods
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file m2ap_handler.h /*! \file m2ap_MCE_handler.h
* \brief m2ap handler procedures for MCE * \brief m2ap handler procedures for MCE
* \author Javier Morgade <javier.morgade@ieee.org> * \author Javier Morgade <javier.morgade@ieee.org>
* \date 2019 * \date 2019
+1
View File
@@ -138,5 +138,6 @@ ssize_t m2ap_generate_unsuccessfull_outcome(
@returns void @returns void
**/ **/
void m2ap_handle_criticality(M2AP_Criticality_t criticality); void m2ap_handle_criticality(M2AP_Criticality_t criticality);
/** @}*/
#endif /* M2AP_COMMON_H_ */ #endif /* M2AP_COMMON_H_ */
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file m2ap_handler.h /*! \file m2ap_eNB_handler.h
* \brief m2ap handler procedures for eNB * \brief m2ap handler procedures for eNB
* \author Javier Morgade <javier.morgade@ieee.org> * \author Javier Morgade <javier.morgade@ieee.org>
* \date 2019 * \date 2019
+1 -1
View File
@@ -19,7 +19,7 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file m2ap_eNB_itti_messaging.c /*! \file m2ap_itti_messaging.c
* \brief m2ap tasks for eNB * \brief m2ap tasks for eNB
* \author Javier Morgade <javier.morgade@ieee.org> * \author Javier Morgade <javier.morgade@ieee.org>
* \date 2019 * \date 2019
-2
View File
@@ -65,6 +65,4 @@ int RCconfig_m2_mcch(m2ap_setup_resp_t * m2ap_setup_resp, uint32_t i);
int RCconfig_M2_SCHEDULING(MessageDef *msg_p, uint32_t i); int RCconfig_M2_SCHEDULING(MessageDef *msg_p, uint32_t i);
int RCconfig_m2_scheduling(m2ap_mbms_scheduling_information_t *m2ap_mbms_scheduling_information, uint32_t i); int RCconfig_m2_scheduling(m2ap_mbms_scheduling_information_t *m2ap_mbms_scheduling_information, uint32_t i);
#endif /* MCE_CONFIG_H_ */ #endif /* MCE_CONFIG_H_ */
/** @} */
+7 -12
View File
@@ -19,13 +19,13 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file PHY_INTERFACE/defs.h /*! \file phy_interface.h
* \brief mac phy interface primitives * \brief mac phy interface primitives
* \author Raymond Knopp and Navid Nikaein * \author Raymond Knopp and Navid Nikaein
* \date 2011 * \date 2011
* \version 0.5 * \version 0.5
* \mail navid.nikaein@eurecom.fr or openair_tech@eurecom.fr * \mail navid.nikaein@eurecom.fr or openair_tech@eurecom.fr
*/ */
#ifndef __PHY_INTERFACE_H__ #ifndef __PHY_INTERFACE_H__
# define __PHY_INTERFACE_H__ # define __PHY_INTERFACE_H__
@@ -47,9 +47,4 @@ do {
mac_xface->macphy_exit(temp); \ mac_xface->macphy_exit(temp); \
} while(0) } while(0)
#endif #endif
/** @} */
@@ -19,14 +19,14 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file l2_interface.c /*! \file openair_rrc_L2_interface.h
* \brief layer 2 interface * \brief layer 2 interface
* \author Navid Nikaein and Raymond Knopp * \author Navid Nikaein and Raymond Knopp
* \date 2011 * \date 2011
* \version 1.0 * \version 1.0
* \company Eurecom * \company Eurecom
* \email: navid.nikaein@eurecom.fr,raymond.knopp@eurecom.fr * \email: navid.nikaein@eurecom.fr,raymond.knopp@eurecom.fr
*/ */
#ifndef __OPENAIR_RRC_L2_INTERFACE_H__ #ifndef __OPENAIR_RRC_L2_INTERFACE_H__
#define __OPENAIR_RRC_L2_INTERFACE_H__ #define __OPENAIR_RRC_L2_INTERFACE_H__

Some files were not shown because too many files have changed in this diff Show More