Commit 8df96ab5 authored by Matthieu Kanj's avatar Matthieu Kanj

removing warnings (124 remaining)

parent 2a4a37c0
...@@ -120,7 +120,7 @@ static inline void* malloc16_clear( size_t size ) ...@@ -120,7 +120,7 @@ static inline void* malloc16_clear( size_t size )
// #define UNUSED(x) (void)x; // #define UNUSED(x) (void)x;
#include "impl_defs_top_NB_IoT.h" #include "PHY/impl_defs_top_NB_IoT.h"
//#include "impl_defs_top.h" //#include "impl_defs_top.h"
//#include "impl_defs_lte.h" //#include "impl_defs_lte.h"
#include "PHY/impl_defs_lte_NB_IoT.h" #include "PHY/impl_defs_lte_NB_IoT.h"
...@@ -131,7 +131,8 @@ static inline void* malloc16_clear( size_t size ) ...@@ -131,7 +131,8 @@ static inline void* malloc16_clear( size_t size )
//#include "PHY/TOOLS/defs.h" //#include "PHY/TOOLS/defs.h"
//#include "platform_types.h" //#include "platform_types.h"
///#include "openair1/PHY/LTE_TRANSPORT/defs_nb_iot.h" ///#include "openair1/PHY/LTE_TRANSPORT/defs_nb_iot.h"
#ifdef OPENAIR_LTE
////////////////////////////////////////////////////////////////////#ifdef OPENAIR_LTE (check if this is required)
//#include "PHY/LTE_TRANSPORT/defs.h" //#include "PHY/LTE_TRANSPORT/defs.h"
#include "PHY/LTE_TRANSPORT/defs_NB_IoT.h" #include "PHY/LTE_TRANSPORT/defs_NB_IoT.h"
...@@ -179,6 +180,7 @@ typedef struct UE_SCAN_INFO_NB_IoT_s { ...@@ -179,6 +180,7 @@ typedef struct UE_SCAN_INFO_NB_IoT_s {
int32_t amp[3][10]; int32_t amp[3][10];
/// 10 frequency offsets (kHz) corresponding to best amplitudes, with respect do minimum DL frequency in the band /// 10 frequency offsets (kHz) corresponding to best amplitudes, with respect do minimum DL frequency in the band
int32_t freq_offset_Hz[3][10]; int32_t freq_offset_Hz[3][10];
} UE_SCAN_INFO_NB_IoT_t; } UE_SCAN_INFO_NB_IoT_t;
/// Top-level PHY Data Structure for RN /// Top-level PHY Data Structure for RN
...@@ -194,12 +196,12 @@ typedef struct { ...@@ -194,12 +196,12 @@ typedef struct {
NB_IoT_UE_DLSCH_t *dlsch_rn_MCH[10]; NB_IoT_UE_DLSCH_t *dlsch_rn_MCH[10];
} PHY_VARS_RN_NB_IoT; } PHY_VARS_RN_NB_IoT;
/*
#ifdef OCP_FRAMEWORK #ifdef OCP_FRAMEWORK
#include <enums.h> #include <enums.h>
#else #else
//typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5,calib_prach_tx=6,rx_dump_frame=7,loop_through_memory=8} runmode_t; //typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5,calib_prach_tx=6,rx_dump_frame=7,loop_through_memory=8} runmode_t;
*/
// enum transmission_access_mode { // enum transmission_access_mode {
// NO_ACCESS=0, // NO_ACCESS=0,
// POSTPONED_ACCESS, // POSTPONED_ACCESS,
...@@ -218,25 +220,31 @@ typedef struct { ...@@ -218,25 +220,31 @@ typedef struct {
// } eNB_func_NB_IoT_t; // } eNB_func_NB_IoT_t;
typedef enum { typedef enum {
synch_to_ext_device_NB_IoT=0, // synch to RF or Ethernet device synch_to_ext_device_NB_IoT=0, // synch to RF or Ethernet device
synch_to_other_NB_IoT // synch to another source (timer, other CC_id) synch_to_other_NB_IoT // synch to another source (timer, other CC_id)
} eNB_timing_NB_IoT_t; } eNB_timing_NB_IoT_t;
#endif ////////////////////////////////////////////////////////////////////#endif
typedef struct { typedef struct {
struct PHY_VARS_eNB_NB_IoT_s *eNB; struct PHY_VARS_eNB_NB_IoT_s *eNB;
NB_IoT_eNB_NDLSCH_t *dlsch; NB_IoT_eNB_NDLSCH_t *dlsch;
int G; int G;
} te_params_NB_IoT; } te_params_NB_IoT;
typedef struct { typedef struct {
struct PHY_VARS_eNB_NB_IoT_s *eNB; struct PHY_VARS_eNB_NB_IoT_s *eNB;
int UE_id; int UE_id;
int harq_pid; int harq_pid;
int llr8_flag; int llr8_flag;
int ret; int ret;
} td_params_NB_IoT; } td_params_NB_IoT;
...@@ -267,13 +275,13 @@ typedef struct { ...@@ -267,13 +275,13 @@ typedef struct {
pthread_mutex_t mutex_rxtx; pthread_mutex_t mutex_rxtx;
/// scheduling parameters for RXn-TXnp4 thread /// scheduling parameters for RXn-TXnp4 thread
struct sched_param sched_param_rxtx; struct sched_param sched_param_rxtx;
/// NB-IoT for IF_Module /// NB-IoT for IF_Module
pthread_t pthread_l2; pthread_t pthread_l2;
pthread_cond_t cond_l2; pthread_cond_t cond_l2;
pthread_mutex_t mutex_l2; pthread_mutex_t mutex_l2;
int instance_cnt_l2; int instance_cnt_l2;
pthread_attr_t attr_l2; pthread_attr_t attr_l2;
} eNB_rxtx_proc_NB_IoT_t; } eNB_rxtx_proc_NB_IoT_t;
/* /*
typedef struct { typedef struct {
...@@ -455,9 +463,13 @@ typedef struct { ...@@ -455,9 +463,13 @@ typedef struct {
pthread_mutex_t mutex_rxtx; pthread_mutex_t mutex_rxtx;
/// scheduling parameters for RXn-TXnp4 thread /// scheduling parameters for RXn-TXnp4 thread
struct sched_param sched_param_rxtx; struct sched_param sched_param_rxtx;
///
int sub_frame_start; int sub_frame_start;
///
int sub_frame_step; int sub_frame_step;
///
unsigned long long gotIQs; unsigned long long gotIQs;
} UE_rxtx_proc_NB_IoT_t; } UE_rxtx_proc_NB_IoT_t;
/// Context data structure for eNB subframe processing /// Context data structure for eNB subframe processing
...@@ -487,6 +499,7 @@ typedef struct { ...@@ -487,6 +499,7 @@ typedef struct {
pthread_mutex_t mutex_synch; pthread_mutex_t mutex_synch;
/// set of scheduling variables RXn-TXnp4 threads /// set of scheduling variables RXn-TXnp4 threads
UE_rxtx_proc_NB_IoT_t proc_rxtx[2]; UE_rxtx_proc_NB_IoT_t proc_rxtx[2];
} UE_proc_NB_IoT_t; } UE_proc_NB_IoT_t;
...@@ -536,40 +549,34 @@ typedef struct PHY_VARS_eNB_NB_IoT_s { ...@@ -536,40 +549,34 @@ typedef struct PHY_VARS_eNB_NB_IoT_s {
//LTE_eNB_DLSCH_t *dlsch_MCH; //LTE_eNB_DLSCH_t *dlsch_MCH;
NB_IoT_eNB_UE_stats UE_stats[NUMBER_OF_UE_MAX_NB_IoT]; NB_IoT_eNB_UE_stats UE_stats[NUMBER_OF_UE_MAX_NB_IoT];
//LTE_eNB_UE_stats *UE_stats_ptr[NUMBER_OF_UE_MAX_NB_IoT]; //LTE_eNB_UE_stats *UE_stats_ptr[NUMBER_OF_UE_MAX_NB_IoT];
/// cell-specific reference symbols /// cell-specific reference symbols
uint32_t lte_gold_table_NB_IoT[20][2][14]; uint32_t lte_gold_table_NB_IoT[20][2][14];
/// UE-specific reference symbols (p=5), TM 7 /// UE-specific reference symbols (p=5), TM 7
uint32_t lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX_NB_IoT][20][38]; uint32_t lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX_NB_IoT][20][38];
/// UE-specific reference symbols (p=7...14), TM 8/9/10 /// UE-specific reference symbols (p=7...14), TM 8/9/10
uint32_t lte_gold_uespec_table[2][20][2][21]; uint32_t lte_gold_uespec_table[2][20][2][21];
/// mbsfn reference symbols /// mbsfn reference symbols
uint32_t lte_gold_mbsfn_table[10][3][42]; uint32_t lte_gold_mbsfn_table[10][3][42];
///
uint32_t X_u[64][839]; uint32_t X_u[64][839];
///
uint8_t pbch_pdu[4]; //PBCH_PDU_SIZE uint8_t pbch_pdu[4]; //PBCH_PDU_SIZE
///
char eNB_generate_rar; char eNB_generate_rar;
/// Indicator set to 0 after first SR /// Indicator set to 0 after first SR
uint8_t first_sr[NUMBER_OF_UE_MAX_NB_IoT]; uint8_t first_sr[NUMBER_OF_UE_MAX_NB_IoT];
uint32_t max_peak_val; uint32_t max_peak_val;
///
int max_eNB_id, max_sync_pos; int max_eNB_id, max_sync_pos;
///
int N_TA_offset; ///timing offset used in TDD int N_TA_offset; ///timing offset used in TDD
/// \brief sinr for all subcarriers of the current link (used only for abstraction). /// \brief sinr for all subcarriers of the current link (used only for abstraction).
/// first index: ? [0..N_RB_DL*12[ /// first index: ? [0..N_RB_DL*12[
double *sinr_dB; double *sinr_dB;
/// N0 (used for abstraction) /// N0 (used for abstraction)
double N0; double N0;
///
unsigned char first_run_timing_advance[NUMBER_OF_UE_MAX_NB_IoT]; unsigned char first_run_timing_advance[NUMBER_OF_UE_MAX_NB_IoT];
unsigned char first_run_I0_measurements; unsigned char first_run_I0_measurements;
...@@ -583,62 +590,49 @@ typedef struct PHY_VARS_eNB_NB_IoT_s { ...@@ -583,62 +590,49 @@ typedef struct PHY_VARS_eNB_NB_IoT_s {
/// hold the precoder for NULL beam to the primary user /// hold the precoder for NULL beam to the primary user
int **dl_precoder_SeNB[3]; int **dl_precoder_SeNB[3];
///
char log2_maxp; /// holds the maximum channel/precoder coefficient char log2_maxp; /// holds the maximum channel/precoder coefficient
/// if ==0 enables phy only test mode /// if ==0 enables phy only test mode
int mac_enabled; int mac_enabled;
/// For emulation only (used by UE abstraction to retrieve DCI) /// For emulation only (used by UE abstraction to retrieve DCI)
uint8_t num_common_dci[2]; // num_dci in even/odd subframes uint8_t num_common_dci[2]; // num_dci in even/odd subframes
///
uint8_t num_ue_spec_dci[2]; // num_dci in even/odd subframes uint8_t num_ue_spec_dci[2]; // num_dci in even/odd subframes
///
DCI_ALLOC_NB_IoT_t dci_alloc[2][NUM_DCI_MAX_NB_IoT]; // dci_alloc from even/odd subframes DCI_ALLOC_NB_IoT_t dci_alloc[2][NUM_DCI_MAX_NB_IoT]; // dci_alloc from even/odd subframes
/////////////
// PDSCH Varaibles // PDSCH Varaibles
PDSCH_CONFIG_DEDICATED_NB_IoT pdsch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT]; PDSCH_CONFIG_DEDICATED_NB_IoT pdsch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
// PUSCH Varaibles // PUSCH Varaibles
PUSCH_CONFIG_DEDICATED_NB_IoT pusch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT]; PUSCH_CONFIG_DEDICATED_NB_IoT pusch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
// PUCCH variables // PUCCH variables
PUCCH_CONFIG_DEDICATED_NB_IoT pucch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT]; PUCCH_CONFIG_DEDICATED_NB_IoT pucch_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
// UL-POWER-Control // UL-POWER-Control
UL_POWER_CONTROL_DEDICATED_NB_IoT ul_power_control_dedicated[NUMBER_OF_UE_MAX_NB_IoT]; UL_POWER_CONTROL_DEDICATED_NB_IoT ul_power_control_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
// TPC // TPC
TPC_PDCCH_CONFIG_NB_IoT tpc_pdcch_config_pucch[NUMBER_OF_UE_MAX_NB_IoT]; TPC_PDCCH_CONFIG_NB_IoT tpc_pdcch_config_pucch[NUMBER_OF_UE_MAX_NB_IoT];
///
TPC_PDCCH_CONFIG_NB_IoT tpc_pdcch_config_pusch[NUMBER_OF_UE_MAX_NB_IoT]; TPC_PDCCH_CONFIG_NB_IoT tpc_pdcch_config_pusch[NUMBER_OF_UE_MAX_NB_IoT];
// CQI reporting // CQI reporting
CQI_REPORT_CONFIG_NB_IoT cqi_report_config[NUMBER_OF_UE_MAX_NB_IoT]; CQI_REPORT_CONFIG_NB_IoT cqi_report_config[NUMBER_OF_UE_MAX_NB_IoT];
// SRS Variables // SRS Variables
SOUNDINGRS_UL_CONFIG_DEDICATED_NB_IoT soundingrs_ul_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT]; SOUNDINGRS_UL_CONFIG_DEDICATED_NB_IoT soundingrs_ul_config_dedicated[NUMBER_OF_UE_MAX_NB_IoT];
///
uint8_t ncs_cell[20][7]; uint8_t ncs_cell[20][7];
// Scheduling Request Config // Scheduling Request Config
SCHEDULING_REQUEST_CONFIG_NB_IoT scheduling_request_config[NUMBER_OF_UE_MAX_NB_IoT]; SCHEDULING_REQUEST_CONFIG_NB_IoT scheduling_request_config[NUMBER_OF_UE_MAX_NB_IoT];
// Transmission mode per UE // Transmission mode per UE
uint8_t transmission_mode[NUMBER_OF_UE_MAX_NB_IoT]; uint8_t transmission_mode[NUMBER_OF_UE_MAX_NB_IoT];
/// cba_last successful reception for each group, used for collision detection /// cba_last successful reception for each group, used for collision detection
uint8_t cba_last_reception[4]; uint8_t cba_last_reception[4];
// Pointers for active physicalConfigDedicated to be applied in current subframe // Pointers for active physicalConfigDedicated to be applied in current subframe
struct PhysicalConfigDedicated *physicalConfigDedicated[NUMBER_OF_UE_MAX_NB_IoT]; struct PhysicalConfigDedicated *physicalConfigDedicated[NUMBER_OF_UE_MAX_NB_IoT];
//Pointers for actve physicalConfigDedicated for NB-IoT to be applied in current subframe //Pointers for actve physicalConfigDedicated for NB-IoT to be applied in current subframe
struct PhysicalConfigDedicated_NB_r13 *phy_config_dedicated_NB[NUMBER_OF_UE_MAX_NB_IoT]; struct PhysicalConfigDedicated_NB_r13 *phy_config_dedicated_NB[NUMBER_OF_UE_MAX_NB_IoT];
///
uint32_t rb_mask_ul[4]; uint32_t rb_mask_ul[4];
/// Information regarding TM5 /// Information regarding TM5
MU_MIMO_mode_NB_IoT mu_mimo_mode[NUMBER_OF_UE_MAX_NB_IoT]; MU_MIMO_mode_NB_IoT mu_mimo_mode[NUMBER_OF_UE_MAX_NB_IoT];
/// target_ue_dl_mcs : only for debug purposes /// target_ue_dl_mcs : only for debug purposes
uint32_t target_ue_dl_mcs; uint32_t target_ue_dl_mcs;
/// target_ue_ul_mcs : only for debug purposes /// target_ue_ul_mcs : only for debug purposes
...@@ -647,26 +641,23 @@ typedef struct PHY_VARS_eNB_NB_IoT_s { ...@@ -647,26 +641,23 @@ typedef struct PHY_VARS_eNB_NB_IoT_s {
uint32_t ue_dl_rb_alloc; uint32_t ue_dl_rb_alloc;
/// target ul PRBs : only for debug /// target ul PRBs : only for debug
uint32_t ue_ul_nb_rb; uint32_t ue_ul_nb_rb;
///check for Total Transmissions ///check for Total Transmissions
uint32_t check_for_total_transmissions; uint32_t check_for_total_transmissions;
///check for MU-MIMO Transmissions ///check for MU-MIMO Transmissions
uint32_t check_for_MUMIMO_transmissions; uint32_t check_for_MUMIMO_transmissions;
///check for SU-MIMO Transmissions ///check for SU-MIMO Transmissions
uint32_t check_for_SUMIMO_transmissions; uint32_t check_for_SUMIMO_transmissions;
///check for FULL MU-MIMO Transmissions ///check for FULL MU-MIMO Transmissions
uint32_t FULL_MUMIMO_transmissions; uint32_t FULL_MUMIMO_transmissions;
/// Counter for total bitrate, bits and throughput in downlink /// Counter for total bitrate, bits and throughput in downlink
uint32_t total_dlsch_bitrate; uint32_t total_dlsch_bitrate;
///
uint32_t total_transmitted_bits; uint32_t total_transmitted_bits;
///
uint32_t total_system_throughput; uint32_t total_system_throughput;
///
int hw_timing_advance; int hw_timing_advance;
///
time_stats_t_NB_IoT phy_proc; time_stats_t_NB_IoT phy_proc;
time_stats_t_NB_IoT phy_proc_tx; time_stats_t_NB_IoT phy_proc_tx;
time_stats_t_NB_IoT phy_proc_rx; time_stats_t_NB_IoT phy_proc_rx;
...@@ -699,10 +690,10 @@ typedef struct PHY_VARS_eNB_NB_IoT_s { ...@@ -699,10 +690,10 @@ typedef struct PHY_VARS_eNB_NB_IoT_s {
time_stats_t_NB_IoT ulsch_tc_intl1_stats; time_stats_t_NB_IoT ulsch_tc_intl1_stats;
time_stats_t_NB_IoT ulsch_tc_intl2_stats; time_stats_t_NB_IoT ulsch_tc_intl2_stats;
#ifdef LOCALIZATION #ifdef LOCALIZATION
/// time state for localization /// time state for localization
time_stats_t_NB_IoT localization_stats; time_stats_t_NB_IoT localization_stats;
#endif #endif
int32_t pucch1_stats_cnt[NUMBER_OF_UE_MAX_NB_IoT][10]; int32_t pucch1_stats_cnt[NUMBER_OF_UE_MAX_NB_IoT][10];
int32_t pucch1_stats[NUMBER_OF_UE_MAX_NB_IoT][10*1024]; int32_t pucch1_stats[NUMBER_OF_UE_MAX_NB_IoT][10*1024];
...@@ -843,34 +834,29 @@ typedef struct { ...@@ -843,34 +834,29 @@ typedef struct {
uint32_t IMSImod1024; uint32_t IMSImod1024;
uint32_t PF; uint32_t PF;
uint32_t PO; uint32_t PO;
// For abstraction-purposes only // For abstraction-purposes only
uint8_t sr[10]; uint8_t sr[10];
uint8_t pucch_sel[10]; uint8_t pucch_sel[10];
uint8_t pucch_payload[22]; uint8_t pucch_payload[22];
//UE_MODE_t UE_mode[NUMBER_OF_CONNECTED_eNB_MAX]; //UE_MODE_t UE_mode[NUMBER_OF_CONNECTED_eNB_MAX];
/// cell-specific reference symbols //cell-specific reference symbols
uint32_t lte_gold_table[7][20][2][14]; uint32_t lte_gold_table[7][20][2][14];
//UE-specific reference symbols (p=5), TM 7
/// UE-specific reference symbols (p=5), TM 7
uint32_t lte_gold_uespec_port5_table[20][38]; uint32_t lte_gold_uespec_port5_table[20][38];
//ue-specific reference symbols
/// ue-specific reference symbols
uint32_t lte_gold_uespec_table[2][20][2][21]; uint32_t lte_gold_uespec_table[2][20][2][21];
//mbsfn reference symbols
/// mbsfn reference symbols
uint32_t lte_gold_mbsfn_table[10][3][42]; uint32_t lte_gold_mbsfn_table[10][3][42];
///
uint32_t X_u[64][839]; uint32_t X_u[64][839];
///
uint32_t high_speed_flag; uint32_t high_speed_flag;
uint32_t perfect_ce; uint32_t perfect_ce;
int16_t ch_est_alpha; int16_t ch_est_alpha;
int generate_ul_signal[NUMBER_OF_CONNECTED_eNB_MAX]; int generate_ul_signal[NUMBER_OF_CONNECTED_eNB_MAX];
///
UE_SCAN_INFO_NB_IoT_t scan_info[NB_BANDS_MAX_NB_IoT]; UE_SCAN_INFO_NB_IoT_t scan_info[NB_BANDS_MAX_NB_IoT];
///
char ulsch_no_allocation_counter[NUMBER_OF_CONNECTED_eNB_MAX]; char ulsch_no_allocation_counter[NUMBER_OF_CONNECTED_eNB_MAX];
/* /*
...@@ -935,21 +921,16 @@ typedef struct { ...@@ -935,21 +921,16 @@ typedef struct {
*/ */
/// if ==0 enables phy only test mode /// if ==0 enables phy only test mode
int mac_enabled; int mac_enabled;
/// Flag to initialize averaging of PHY measurements /// Flag to initialize averaging of PHY measurements
int init_averaging; int init_averaging;
/// \brief sinr for all subcarriers of the current link (used only for abstraction). /// \brief sinr for all subcarriers of the current link (used only for abstraction).
/// - first index: ? [0..12*N_RB_DL[ /// - first index: ? [0..12*N_RB_DL[
double *sinr_dB; double *sinr_dB;
/// \brief sinr for all subcarriers of first symbol for the CQI Calculation. /// \brief sinr for all subcarriers of first symbol for the CQI Calculation.
/// - first index: ? [0..12*N_RB_DL[ /// - first index: ? [0..12*N_RB_DL[
double *sinr_CQI_dB; double *sinr_CQI_dB;
/// sinr_effective used for CQI calulcation /// sinr_effective used for CQI calulcation
double sinr_eff; double sinr_eff;
/// N0 (used for abstraction) /// N0 (used for abstraction)
double N0; double N0;
/* /*
...@@ -1123,5 +1104,5 @@ static inline int release_thread(pthread_mutex_t *mutex,int *instance_cnt,char * ...@@ -1123,5 +1104,5 @@ static inline int release_thread(pthread_mutex_t *mutex,int *instance_cnt,char *
//#include "PHY/LTE_ESTIMATION/defs.h" //#include "PHY/LTE_ESTIMATION/defs.h"
//#include "SIMULATION/ETH_TRANSPORT/defs.h" //#include "SIMULATION/ETH_TRANSPORT/defs.h"
#endif //#endif
#endif // __PHY_DEFS__H__ #endif // __PHY_DEFS__H__
...@@ -176,9 +176,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) ...@@ -176,9 +176,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
PHY_VARS_eNB_NB_IoT *eNB = PHY_vars_eNB_NB_IoT_g[0][Sched_INFO->CC_id]; PHY_VARS_eNB_NB_IoT *eNB = PHY_vars_eNB_NB_IoT_g[0][Sched_INFO->CC_id];
eNB_rxtx_proc_NB_IoT_t *proc = &eNB->proc.proc_rxtx[0]; eNB_rxtx_proc_NB_IoT_t *proc = &eNB->proc.proc_rxtx[0];
NB_IoT_eNB_NPBCH_t *npbch; NB_IoT_eNB_NPBCH_t *npbch;
///
int i; int i;
//module_id_t Mod_id = Sched_INFO->module_id; //module_id_t Mod_id = Sched_INFO->module_id;
//uint8_t CC_id = Sched_INFO->CC_id; //uint8_t CC_id = Sched_INFO->CC_id;
nfapi_dl_config_request_t *DL_req = Sched_INFO->DL_req; nfapi_dl_config_request_t *DL_req = Sched_INFO->DL_req;
...@@ -186,8 +185,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) ...@@ -186,8 +185,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
nfapi_hi_dci0_request_t *HI_DCI0_req = Sched_INFO->HI_DCI0_req; nfapi_hi_dci0_request_t *HI_DCI0_req = Sched_INFO->HI_DCI0_req;
nfapi_tx_request_t *TX_req = Sched_INFO->TX_req; nfapi_tx_request_t *TX_req = Sched_INFO->TX_req;
uint32_t hypersfn = Sched_INFO->hypersfn; //uint32_t hypersfn = Sched_INFO->hypersfn;
frame_t frame = Sched_INFO->frame; //frame_t frame = Sched_INFO->frame; // unused for instance
sub_frame_t subframe = Sched_INFO->subframe; sub_frame_t subframe = Sched_INFO->subframe;
// implicite declaration of AssertFatal // implicite declaration of AssertFatal
...@@ -198,13 +197,11 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) ...@@ -198,13 +197,11 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
uint8_t number_ul_pdu = UL_req->ul_config_request_body.number_of_pdus; uint8_t number_ul_pdu = UL_req->ul_config_request_body.number_of_pdus;
uint8_t number_ul_dci = HI_DCI0_req->hi_dci0_request_body.number_of_dci; uint8_t number_ul_dci = HI_DCI0_req->hi_dci0_request_body.number_of_dci;
//uint8_t number_pdsch_rnti = DL_req->number_pdsch_rnti; // for the moment not used //uint8_t number_pdsch_rnti = DL_req->number_pdsch_rnti; // for the moment not used
// at most 2 pdus (DCI) in the case of NPDCCH // at most 2 pdus (DCI) in the case of NPDCCH
nfapi_dl_config_request_pdu_t *dl_config_pdu; nfapi_dl_config_request_pdu_t *dl_config_pdu;
nfapi_ul_config_request_pdu_t *ul_config_pdu; nfapi_ul_config_request_pdu_t *ul_config_pdu;
nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu;
//clear previous possible allocation (maybe someone else should be added) //clear previous possible allocation (maybe someone else should be added)
for(int i = 0; i < NUMBER_OF_UE_MAX_NB_IoT; i++) for(int i = 0; i < NUMBER_OF_UE_MAX_NB_IoT; i++)
{ {
...@@ -215,7 +212,6 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) ...@@ -215,7 +212,6 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
eNB->ndlsch[i]->subframe_tx[subframe] = 0; eNB->ndlsch[i]->subframe_tx[subframe] = 0;
} }
/*clear the DCI allocation maps for new subframe*/ /*clear the DCI allocation maps for new subframe*/
if(eNB->nulsch[i]) if(eNB->nulsch[i])
{ {
...@@ -227,7 +223,6 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) ...@@ -227,7 +223,6 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
} }
for (i=0;i<number_dl_pdu;i++) //in principle this should be at most 2 (in case of DCI) for (i=0;i<number_dl_pdu;i++) //in principle this should be at most 2 (in case of DCI)
{ {
dl_config_pdu = &DL_req->dl_config_request_body.dl_config_pdu_list[i]; dl_config_pdu = &DL_req->dl_config_request_body.dl_config_pdu_list[i];
...@@ -316,7 +311,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) ...@@ -316,7 +311,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
//XXX problem: although we may have nothing to transmit this function should be always triggered in order to allow the PHY layer to complete the repetitions //XXX problem: although we may have nothing to transmit this function should be always triggered in order to allow the PHY layer to complete the repetitions
//of previous Transport Blocks //of previous Transport Blocks
phy_procedures_eNB_TX_NB_IoT(eNB,proc,NULL); //phy_procedures_eNB_TX_NB_IoT(eNB,proc,NULL);
phy_procedures_eNB_TX_NB_IoT(eNB,proc,0); // check if 0 or NULL ?!
} }
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include "SCHED/extern_NB_IoT.h" #include "SCHED/extern_NB_IoT.h"
//#include "PHY/LTE_TRANSPORT/if4_tools.h" //#include "PHY/LTE_TRANSPORT/if4_tools.h"
//#include "PHY/LTE_TRANSPORT/if5_tools.h" //#include "PHY/LTE_TRANSPORT/if5_tools.h"
//#include "RRC/LITE/proto_nb_iot.h" #include "RRC/LITE/proto_NB_IoT.h"
#include "SIMULATION/TOOLS/defs.h" // purpose: included for taus() function #include "SIMULATION/TOOLS/defs.h" // purpose: included for taus() function
//#ifdef EMOS //#ifdef EMOS
//#include "SCHED/phy_procedures_emos.h" //#include "SCHED/phy_procedures_emos.h"
...@@ -109,13 +109,13 @@ extern int rx_sig_fifo; ...@@ -109,13 +109,13 @@ extern int rx_sig_fifo;
*/ */
void common_signal_procedures_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_NB_IoT_t *proc) void common_signal_procedures_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_NB_IoT_t *proc)
{ {
NB_IoT_DL_FRAME_PARMS *fp=&eNB->frame_parms_NB_IoT; NB_IoT_DL_FRAME_PARMS *fp = &eNB->frame_parms_NB_IoT;
int **txdataF = eNB->common_vars.txdataF[0]; int **txdataF = eNB->common_vars.txdataF[0];
int subframe = proc->subframe_tx; int subframe = proc->subframe_tx;
int frame = proc->frame_tx; int frame = proc->frame_tx;
uint16_t Ntti = 10;//ntti = 10 uint16_t Ntti = 10; //ntti = 10
int RB_IoT_ID;// XXX should be initialized (RB reserved for NB-IoT, PRB index) int RB_IoT_ID; // XXX should be initialized (RB reserved for NB-IoT, PRB index)
int With_NSSS;// With_NSSS = 1; if the frame include a sub-Frame with NSSS signal int With_NSSS; // With_NSSS = 1; if the frame include a sub-Frame with NSSS signal
/*NSSS only happened in the even frame*/ /*NSSS only happened in the even frame*/
if(frame%2==0) if(frame%2==0)
...@@ -184,7 +184,6 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -184,7 +184,6 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
UL_INFO->frame = frame; UL_INFO->frame = frame;
UL_INFO->subframe = subframe; UL_INFO->subframe = subframe;
T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe)); T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe));
T(T_ENB_PHY_INPUT_SIGNAL, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0), T(T_ENB_PHY_INPUT_SIGNAL, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0),
...@@ -202,7 +201,7 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -202,7 +201,7 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
// Check for active processes in current subframe // Check for active processes in current subframe
// NB-IoT subframe2harq_pid is in dci_tools, always set the frame type to FDD, this would become simpler. // NB-IoT subframe2harq_pid is in dci_tools, always set the frame type to FDD, this would become simpler.
harq_pid = subframe2harq_pid(fp,frame,subframe); harq_pid = subframe2harq_pid_NB_IoT(fp,frame,subframe);
// delete the cba // delete the cba
// delete the srs // delete the srs
...@@ -266,13 +265,15 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -266,13 +265,15 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
eNB->pusch_stats_rb[i][(frame*10)+subframe] = eNB->nulsch[i]->harq_process->nb_rb; eNB->pusch_stats_rb[i][(frame*10)+subframe] = eNB->nulsch[i]->harq_process->nb_rb;
eNB->pusch_stats_round[i][(frame*10)+subframe] = eNB->nulsch[i]->harq_process->round; eNB->pusch_stats_round[i][(frame*10)+subframe] = eNB->nulsch[i]->harq_process->round;
eNB->pusch_stats_mcs[i][(frame*10)+subframe] = eNB->nulsch[i]->harq_process->mcs; eNB->pusch_stats_mcs[i][(frame*10)+subframe] = eNB->nulsch[i]->harq_process->mcs;
/*
need for rx_ulsch function for NB_IoT
rx_ulsch(eNB,proc, rx_ulsch(eNB,proc,
eNB->UE_stats[i].sector, // this is the effective sector id eNB->UE_stats[i].sector, // this is the effective sector id
i, i,
eNB->nulsch, eNB->nulsch,
0); 0);
*/
ret = ulsch_decoding_NB_IoT(eNB,proc, ret = ulsch_decoding_NB_IoT(eNB,proc,
i, i,
0, // control_only_flag 0, // control_only_flag
...@@ -283,19 +284,25 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -283,19 +284,25 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
eNB->nulsch[(uint32_t)i]->harq_process->delta_TF = get_hundred_times_delta_IF_eNB_NB_IoT(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered eNB->nulsch[(uint32_t)i]->harq_process->delta_TF = get_hundred_times_delta_IF_eNB_NB_IoT(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered
eNB->UE_stats[i].nulsch_decoding_attempts[harq_pid][eNB->nulsch[i]->harq_process->round]++; eNB->UE_stats[i].nulsch_decoding_attempts[harq_pid][eNB->nulsch[i]->harq_process->round]++;
eNB->nulsch[i]->harq_process->subframe_scheduling_flag=0; eNB->nulsch[i]->harq_process->subframe_scheduling_flag=0;
if (eNB->nulsch[i]->harq_process->cqi_crc_status == 1) if (eNB->nulsch[i]->harq_process->cqi_crc_status == 1) {
{
extract_CQI(eNB->nulsch[i]->harq_process->o, extract_CQI(eNB->nulsch[i]->harq_process->o,
eNB->nulsch[i]->harq_process->uci_format, eNB->nulsch[i]->harq_process->uci_format,
&eNB->UE_stats[i], &eNB->UE_stats[i],
fp->N_RB_DL, fp->N_RB_DL,
&rnti, &access_mode); &rnti, &access_mode);
eNB->UE_stats[i].rank = eNB->nulsch[i]->harq_process->o_RI[0]; eNB->UE_stats[i].rank = eNB->nulsch[i]->harq_process->o_RI[0];
} }
if (ret == (1+MAX_TURBO_ITERATIONS)) if (ret == (1+MAX_TURBO_ITERATIONS)) {
{
T(T_ENB_PHY_ULSCH_UE_NACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(i), T_INT(eNB->nulsch[i]->rnti), T(T_ENB_PHY_ULSCH_UE_NACK,
T_INT(eNB->Mod_id),
T_INT(frame),
T_INT(subframe),
T_INT(i),
T_INT(eNB->nulsch[i]->rnti),
T_INT(harq_pid)); T_INT(harq_pid));
eNB->UE_stats[i].ulsch_round_errors[harq_pid][eNB->nulsch[i]->harq_process->round]++; eNB->UE_stats[i].ulsch_round_errors[harq_pid][eNB->nulsch[i]->harq_process->round]++;
...@@ -337,10 +344,10 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -337,10 +344,10 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
if (eNB->mac_enabled == 1) if (eNB->mac_enabled == 1)
{ {
//instead rx_sdu to report The Uplink data not received successfully to MAC //instead rx_sdu to report The Uplink data not received successfully to MAC
(UL_INFO->crc_ind.crc_pdu_list+i)->crc_indication_rel8.crc_flag= 1; (UL_INFO->crc_ind.crc_pdu_list+i)->crc_indication_rel8.crc_flag = 1;
UL_INFO->crc_ind.number_of_crcs++; UL_INFO->crc_ind.number_of_crcs++;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.rnti= eNB->nulsch[i]->rnti; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.rnti = eNB->nulsch[i]->rnti;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->data= NULL; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->data = NULL;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_indication_rel8.length = 0; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_indication_rel8.length = 0;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.harq_pid = harq_pid; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.harq_pid = harq_pid;
UL_INFO->RX_NPUSCH.number_of_pdus++; UL_INFO->RX_NPUSCH.number_of_pdus++;
...@@ -358,10 +365,7 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -358,10 +365,7 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
for (j=0; j<fp->nb_antennas_rx; j++) for (j=0; j<fp->nb_antennas_rx; j++)
//this is the RSSI per RB //this is the RSSI per RB
eNB->UE_stats[i].UL_rssi[j] = eNB->UE_stats[i].UL_rssi[j] =
dB_fixed(eNB->pusch_vars[i]->ulsch_power[j]* dB_fixed(eNB->pusch_vars[i]->ulsch_power[j] * (eNB->nulsch[i]->harq_process->nb_rb*12) / fp->ofdm_symbol_size) - eNB->rx_total_gain_dB -
(eNB->nulsch[i]->harq_process->nb_rb*12)/
fp->ofdm_symbol_size) -
eNB->rx_total_gain_dB -
hundred_times_log10_NPRB_NB_IoT[eNB->nulsch[i]->harq_process->nb_rb-1]/100 - hundred_times_log10_NPRB_NB_IoT[eNB->nulsch[i]->harq_process->nb_rb-1]/100 -
get_hundred_times_delta_IF_eNB_NB_IoT(eNB,i,harq_pid, 0)/100; get_hundred_times_delta_IF_eNB_NB_IoT(eNB,i,harq_pid, 0)/100;
//for NB-IoT PHICH not work //for NB-IoT PHICH not work
...@@ -379,9 +383,9 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -379,9 +383,9 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
if (eNB->mac_enabled) if (eNB->mac_enabled)
{ {
// store successful MSG3 in UL_Info instead rx_sdu // store successful MSG3 in UL_Info instead rx_sdu
(UL_INFO->crc_ind.crc_pdu_list+i)->crc_indication_rel8.crc_flag= 0; (UL_INFO->crc_ind.crc_pdu_list+i)->crc_indication_rel8.crc_flag = 0;
UL_INFO->crc_ind.number_of_crcs++; UL_INFO->crc_ind.number_of_crcs++;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.rnti= eNB->nulsch[i]->rnti; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.rnti = eNB->nulsch[i]->rnti;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->data = eNB->nulsch[i]->harq_process->b; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->data = eNB->nulsch[i]->harq_process->b;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_indication_rel8.length = eNB->nulsch[i]->harq_process->TBS>>3; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_indication_rel8.length = eNB->nulsch[i]->harq_process->TBS>>3;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.harq_pid = harq_pid; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.harq_pid = harq_pid;
...@@ -412,36 +416,36 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_ ...@@ -412,36 +416,36 @@ void phy_procedures_eNB_uespec_RX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_
{ //harq_processes { //harq_processes
for (j=0; j<eNB->ndlsch[i]->Mlimit; j++) for (j=0; j<eNB->ndlsch[i]->Mlimit; j++)
{ {
eNB->UE_stats[i].dlsch_NAK[k][j]=0; eNB->UE_stats[i].dlsch_NAK[k][j] = 0;
eNB->UE_stats[i].dlsch_ACK[k][j]=0; eNB->UE_stats[i].dlsch_ACK[k][j] = 0;
eNB->UE_stats[i].dlsch_trials[k][j]=0; eNB->UE_stats[i].dlsch_trials[k][j] = 0;
} }
eNB->UE_stats[i].dlsch_l2_errors[k]=0; eNB->UE_stats[i].dlsch_l2_errors[k] = 0;
eNB->UE_stats[i].ulsch_errors[k]=0; eNB->UE_stats[i].ulsch_errors[k] = 0;
eNB->UE_stats[i].ulsch_consecutive_errors=0; eNB->UE_stats[i].ulsch_consecutive_errors = 0;
for (j=0; j<eNB->nulsch[i]->Mlimit; j++) for (j=0; j<eNB->nulsch[i]->Mlimit; j++)
{ {
eNB->UE_stats[i].nulsch_decoding_attempts[k][j]=0; eNB->UE_stats[i].nulsch_decoding_attempts[k][j] = 0;
eNB->UE_stats[i].ulsch_decoding_attempts_last[k][j]=0; eNB->UE_stats[i].ulsch_decoding_attempts_last[k][j] = 0;
eNB->UE_stats[i].ulsch_round_errors[k][j]=0; eNB->UE_stats[i].ulsch_round_errors[k][j] = 0;
eNB->UE_stats[i].ulsch_round_fer[k][j]=0; eNB->UE_stats[i].ulsch_round_fer[k][j] = 0;
} }
} }
eNB->UE_stats[i].dlsch_sliding_cnt=0; eNB->UE_stats[i].dlsch_sliding_cnt = 0;
eNB->UE_stats[i].dlsch_NAK_round0=0; eNB->UE_stats[i].dlsch_NAK_round0 = 0;
eNB->UE_stats[i].dlsch_mcs_offset=0; eNB->UE_stats[i].dlsch_mcs_offset = 0;
} // Msg3_flag==1 } // Msg3_flag==1
else else
{ // Msg3_flag == 0 { // Msg3_flag == 0
if (eNB->mac_enabled==1) if (eNB->mac_enabled == 1)
{ {
// store successful Uplink data in UL_Info instead rx_sdu // store successful Uplink data in UL_Info instead rx_sdu
(UL_INFO->crc_ind.crc_pdu_list+i)->crc_indication_rel8.crc_flag= 0; (UL_INFO->crc_ind.crc_pdu_list+i)->crc_indication_rel8.crc_flag = 0;
UL_INFO->crc_ind.number_of_crcs++; UL_INFO->crc_ind.number_of_crcs++;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.rnti= eNB->nulsch[i]->rnti; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.rnti = eNB->nulsch[i]->rnti;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->data = eNB->nulsch[i]->harq_process->b; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->data = eNB->nulsch[i]->harq_process->b;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_indication_rel8.length = eNB->nulsch[i]->harq_process->TBS>>3; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_indication_rel8.length = eNB->nulsch[i]->harq_process->TBS>>3;
(UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.harq_pid = harq_pid; (UL_INFO->RX_NPUSCH.rx_pdu_list+i)->rx_ue_information.harq_pid = harq_pid;
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
//#include "defs_nb_iot.h" //#include "defs_nb_iot.h"
#include "PHY/defs_NB_IoT.h" #include "PHY/defs_NB_IoT.h"
#include "PHY/TOOLS/dB_routines.h"
//#include "PHY/LTE_TRANSPORT/proto_nb_iot.h" //#include "PHY/LTE_TRANSPORT/proto_nb_iot.h"
//#include "PHY/extern_NB_IoT.h" //#include "PHY/extern_NB_IoT.h"
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
//#include "defs_NB_IoT.h" //#include "defs_NB_IoT.h"
//#include "extern.h" //#include "extern.h"
//#include "RRC/LITE/extern_NB_IoT.h" //#include "RRC/LITE/extern_NB_IoT.h"
//#include "common/utils/collection/tree.h"
#include "LAYER2/MAC/extern_NB_IoT.h" #include "LAYER2/MAC/extern_NB_IoT.h"
//#include "COMMON/openair_defs.h" //#include "COMMON/openair_defs.h"
//#include "COMMON/platform_types.h" //#include "COMMON/platform_types.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment