Files
openairinterface5g/openair2/LAYER2/MAC/config_NB_IoT.h
T

302 lines
7.9 KiB
C

/*! \file config_NB_IoT.h
* \brief configured structures used by scheduler
* \author NTUST BMW Lab./
* \date 2017
* \email:
* \version 1.0
*
*/
#ifndef __LAYER2_MAC_CONFIG_NB_IOT__H__
#define __LAYER2_MAC_CONFIG_NB_IOT__H__
//#include "NB_IoT_Message_definitions.h"
#define NUMBER_OF_SIBS_MAX_NB_IoT 6
///MIB
typedef enum operationModeInf{
iNB_IoTand_SamePCI_r13 = 1,
iNB_IoTand_DifferentPCI_r13 = 2,
guardband_r13 = 3,
standalone_r13 = 4
} operationModeInf_t;
///SIB1_SchedulingInfo_NB_IoT_r13
typedef enum si_Periodicity{
si_Periodicity_rf64=640,
si_Periodicity_rf128=1280,
si_Periodicity_rf256=2560,
si_Periodicity_rf512=5120,
si_Periodicity_rf1024=10240,
si_Periodicity_rf2048=20480,
si_Periodicity_rf4096=40960
} si_Periodicity_NB_IoT;
typedef enum si_RepetitionPattern{
si_RepetitionPattern_every2ndRF=0,
si_RepetitionPattern_every4thRF,
si_RepetitionPattern_every8thRF,
si_RepetitionPattern_every16thRF
} si_RepetitionPattern_NB_IoT;
typedef enum sib_MappingInfo{
sib2_v=0x1,
sib3_v=0x2,
sib4_v=0x4,
sib5_v=0x8,
sib14_v=0x10,
sib16_v=0x20
} sib_MappingInfo_NB_IoT;
typedef enum si_TB{
si_TB_56=2,
si_TB_120=2,
si_TB_208=8,
si_TB_256=8,
si_TB_328=8,
si_TB_440=8,
si_TB_552=8,
si_TB_680=8
} si_TB_NB_IoT;
///RACH_ConfigCommon configuration
typedef enum ra_ResponseWindowSize{
ra_ResponseWindowSize_pp2=2,
ra_ResponseWindowSize_pp3=3,
ra_ResponseWindowSize_pp4=4,
ra_ResponseWindowSize_pp5=5,
ra_ResponseWindowSize_pp6=6,
ra_ResponseWindowSize_pp7=7,
ra_ResponseWindowSize_pp8=8,
ra_ResponseWindowSize_pp10=10
} ra_ResponseWindowSize_NB_IoT;
typedef enum mac_ContentionResolutionTimer{
mac_ContentionResolutionTimer_pp1=1,
mac_ContentionResolutionTimer_pp2=2,
mac_ContentionResolutionTimer_pp3=3,
mac_ContentionResolutionTimer_pp4=4,
mac_ContentionResolutionTimer_pp8=8,
mac_ContentionResolutionTimer_pp16=16,
mac_ContentionResolutionTimer_pp32=32,
mac_ContentionResolutionTimer_pp64=64
} mac_ContentionResolutionTimer_NB_IoT;
///NPRACH_ConfigSIB configuration
typedef enum nprach_Periodicity{
nprach_Periodicity_ms40=40,
nprach_Periodicity_ms80=80,
nprach_Periodicity_ms160=160,
nprach_Periodicity_ms240=240,
nprach_Periodicity_ms320=320,
nprach_Periodicity_ms640=640,
nprach_Periodicity_ms1280=1280,
nprach_Periodicity_ms2560=2560
} nprach_Periodicity_NB_IoT;
typedef enum nprach_StartTime{
nprach_StartTime_ms8=8,
nprach_StartTime_ms16=16,
nprach_StartTime_ms32=32,
nprach_StartTime_ms64=64,
nprach_StartTime_ms128=128,
nprach_StartTime_ms256=256,
nprach_StartTime_ms512=512,
nprach_StartTime_ms1024=1024
} nprach_StartTime_NB_IoT;
typedef enum nprach_SubcarrierOffset{
nprach_SubcarrierOffset_n0=0,
nprach_SubcarrierOffset_n12=12,
nprach_SubcarrierOffset_n24=24,
nprach_SubcarrierOffset_n36=36,
nprach_SubcarrierOffset_n2=2,
nprach_SubcarrierOffset_n18=18,
nprach_SubcarrierOffset_n34=34
} nprach_SubcarrierOffset_NB_IoT;
typedef enum nprach_NumSubcarriers{
nprach_NumSubcarriers_n12=12,
nprach_NumSubcarriers_n24=24,
nprach_NumSubcarriers_n36=36,
nprach_NumSubcarriers_n48=48
} nprach_NumSubcarriers_NB_IoT;
typedef enum nprach_SubcarrierMSG3_RangeStart{
nprach_SubcarrierMSG3_RangeStart_zero=0,
nprach_SubcarrierMSG3_RangeStart_oneThird=1/3,
nprach_SubcarrierMSG3_RangeStart_twoThird=2/3,
nprach_SubcarrierMSG3_RangeStart_one=1
} nprach_SubcarrierMSG3_RangeStart_NB_IoT;
typedef enum maxNumPreambleAttemptCE{
maxNumPreambleAttemptCE_n3=3,
maxNumPreambleAttemptCE_n4=4,
maxNumPreambleAttemptCE_n5=5,
maxNumPreambleAttemptCE_n6=6,
maxNumPreambleAttemptCE_n7=7,
maxNumPreambleAttemptCE_n8=8,
maxNumPreambleAttemptCE_n10=10
} maxNumPreambleAttemptCE_NB_IoT;
typedef enum numRepetitionsPerPreambleAttempt{
numRepetitionsPerPreambleAttempt_n1=1,
numRepetitionsPerPreambleAttempt_n2=2,
numRepetitionsPerPreambleAttempt_n4=4,
numRepetitionsPerPreambleAttempt_n8=8,
numRepetitionsPerPreambleAttempt_n16=16,
numRepetitionsPerPreambleAttempt_n32=32,
numRepetitionsPerPreambleAttempt_n64=64,
numRepetitionsPerPreambleAttempt_n128=128
} numRepetitionsPerPreambleAttempt_NB_IoT;
typedef enum npdcch_NumRepetitions_RA{
npdcch_NumRepetitions_RA_r1=1,
npdcch_NumRepetitions_RA_r2=2,
npdcch_NumRepetitions_RA_r4=4,
npdcch_NumRepetitions_RA_r8=8,
npdcch_NumRepetitions_RA_r16=16,
npdcch_NumRepetitions_RA_r32=32,
npdcch_NumRepetitions_RA_r64=64,
npdcch_NumRepetitions_RA_r128=128,
npdcch_NumRepetitions_RA_r256=256,
npdcch_NumRepetitions_RA_r512=512,
npdcch_NumRepetitions_RA_r1024=1024,
npdcch_NumRepetitions_RA_r2048=2048
} npdcch_NumRepetitions_RA_NB_IoT;
typedef enum npdcch_StartSF_CSS_RA{
npdcch_StartSF_CSS_RA_v1dot5=3/2,
npdcch_StartSF_CSS_RA_v2=2,
npdcch_StartSF_CSS_RA_v4=4,
npdcch_StartSF_CSS_RA_v8=8,
npdcch_StartSF_CSS_RA_v16=16,
npdcch_StartSF_CSS_RA_v32=32,
npdcch_StartSF_CSS_RA_v48=48,
npdcch_StartSF_CSS_RA_v64=64
} npdcch_StartSF_CSS_RA_NB_IoT;
typedef enum npdcch_Offset_RA{
zero=0,
oneEighth=1/8,
oneFourth=1/4,
threeEighth=3/8
} npdcch_Offset_RA_NB_IoT;
typedef enum si_window_length_e{
ms160=160,
ms320=320,
ms480=480,
ms640=640,
ms960=960,
ms1280=1280,
ms1600=1600
} si_window_length_t;
typedef enum si_periodicity_e{
rf64=640,
rf128=1280,
rf256=2560,
rf512=5120,
rf1024=10240,
rf2048=20480,
rf4096=40960
} si_periodicity_t;
typedef enum si_repetition_pattern_e{
every2ndRF=20,
every4thRF=40,
every8thRF=80,
every16thRF=160
} si_repetition_pattern_t;
typedef enum si_tb_e{
b56=2,
b120=2,
b208=8,
b256=8,
b328=8,
b440=8,
b552=8,
b680=8
} si_tb_t;
typedef struct sibs_NB_IoT_sched_s{
si_periodicity_t si_periodicity;
si_repetition_pattern_t si_repetition_pattern;
sib_MappingInfo_NB_IoT sib_mapping_info; //bit vector
si_tb_t si_tb;
} sibs_NB_IoT_sched_t;
///-------------------------------------------------------MAC--------------------------------------------------------------------///
typedef struct sib1_NB_IoT_sched_s{
int repetitions; // 4, 8, 16
int starting_rf;
} sib1_NB_IoT_sched_t;
typedef struct {
uint32_t mac_ra_ResponseWindowSize_NB_IoT;
uint32_t mac_ContentionResolutionTimer_NB_IoT;
} mac_RACH_ConfigCommon_NB_IoT;
typedef struct {
uint32_t mac_nprach_Periodicity_NB_IoT;
uint32_t mac_nprach_StartTime_NB_IoT;
uint32_t mac_nprach_SubcarrierOffset_NB_IoT;
uint32_t mac_nprach_NumSubcarriers_NB_IoT;
uint32_t mac_nprach_SubcarrierMSG3_RangeStart_NB_IoT;
uint32_t mac_maxNumPreambleAttemptCE_NB_IoT;
uint32_t mac_numRepetitionsPerPreambleAttempt_NB_IoT;
// css
uint32_t mac_npdcch_NumRepetitions_RA_NB_IoT; // rmax
uint32_t mac_npdcch_StartSF_CSS_RA_NB_IoT; // G
uint32_t mac_npdcch_Offset_RA_NB_IoT; // alpha offset
} mac_NPRACH_ConfigSIB_NB_IoT;
typedef struct{
//npdcch-NumRepetitions-r13
uint32_t R_max;
//npdcch-StartSF-USS-r13
double G;
//npdcch-Offset-USS-r13
double a_offset;
} npdcch_ConfigDedicated_NB_IoT;
typedef struct rrc_config_NB_IoT_s{
///MIB
uint16_t schedulingInfoSIB1_NB_IoT;
///SIB1
uint32_t cellIdentity_NB_IoT;
sib1_NB_IoT_sched_t sib1_NB_IoT_sched_config;
///SIBS
sibs_NB_IoT_sched_t sibs_NB_IoT_sched[NUMBER_OF_SIBS_MAX_NB_IoT];
si_window_length_t si_window_length;
uint32_t si_radio_frame_offset;
///SIB2 mac_RACH_ConfigCommon_NB_IoT
mac_RACH_ConfigCommon_NB_IoT mac_RACH_ConfigCommon[3];
///SIB2 mac_NPRACH_ConfigSIB_NB_IoT
mac_NPRACH_ConfigSIB_NB_IoT mac_NPRACH_ConfigSIB[3];
///NPDCCH Dedicated config
npdcch_ConfigDedicated_NB_IoT npdcch_ConfigDedicated[3];
} rrc_config_NB_IoT_t;
#endif