From 4996f9855d8d41a5a1ef4a7646919ed31287e2de Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Thu, 2 Jun 2016 19:13:20 +0200 Subject: [PATCH 1/6] first draft of the send_if function --- openair1/PHY/TOOLS/if4tools.c | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 openair1/PHY/TOOLS/if4tools.c diff --git a/openair1/PHY/TOOLS/if4tools.c b/openair1/PHY/TOOLS/if4tools.c new file mode 100644 index 0000000000..70e598e2a1 --- /dev/null +++ b/openair1/PHY/TOOLS/if4tools.c @@ -0,0 +1,47 @@ +/* +typedef struct data_block_type { + +} data_block; +*/ + +/* +void allocate_data_block(long *data_block ,int length){ + data_block = malloc(length*sizeof(long)); +} +*/ + +void send_IF4(PHY_VARS_eNB eNB, int subframe){ + eNB_proc_t *proc = &eNB->proc; + //int frame=proc->frame_tx; + //int subframe=proc->subframe_tx; + + LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; + int i,j; + + float *data_block = malloc(length*sizeof(long)); + + + // find number of consecutive non zero in values in symbol + // NrOfNonZeroValues + + // how many values does the atan function output? + + for(i = 0; i <= fp->symbols_per_tti; i++){ + for(j = 0; j < NrOfNonZeroValues; j=j+2){ + + symbol = eNB->common_vars.txdataF[0][0 /*antenna number*/][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)] + + data_block[j] = Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j -1])<<16 + Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j]); + data_block[j+NrOfNonZeroValues] = Atan(subframe[i][j+1])<<16 + Atan(subframe[i][j+2]); + // use memset? + } + + } + +/* +memset(&eNB->common_vars.txdataF[0][aa][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)], + 0,fp->ofdm_symbol_size*(fp->symbols_per_tti)*sizeof(int32_t)); + } + */ + +} From d420f75f3db8aea868aa411564d106b84c88532e Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 3 Jun 2016 14:01:34 +0200 Subject: [PATCH 2/6] nothing special --- openair1/SCHED/phy_procedures_lte_eNb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index cfcec35460..cc4dc07283 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2570,6 +2570,9 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl //recv_IF4(eNB,subframe<<1); //recv_IF4(eNB,1+(subframe<<1)); + // Tobi aka mr monaco: ETH + + } else { // should not get here AssertFatal(1==0, "Unknown eNB->node_function %d",eNB->node_function); From a396fdc5b09892f9e53be6050bc7976e2fefc188 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 3 Jun 2016 14:04:01 +0200 Subject: [PATCH 3/6] moving if4tools.c --- openair1/PHY/{TOOLS => LTE_TRANSPORT}/if4tools.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename openair1/PHY/{TOOLS => LTE_TRANSPORT}/if4tools.c (100%) diff --git a/openair1/PHY/TOOLS/if4tools.c b/openair1/PHY/LTE_TRANSPORT/if4tools.c similarity index 100% rename from openair1/PHY/TOOLS/if4tools.c rename to openair1/PHY/LTE_TRANSPORT/if4tools.c From 448b26f62562a931eba6aa06a37a40324948560e Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Fri, 3 Jun 2016 15:39:36 +0200 Subject: [PATCH 4/6] added draft of IF4 packet frame structure --- openair1/PHY/LTE_TRANSPORT/if4_tools.h | 135 +++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 openair1/PHY/LTE_TRANSPORT/if4_tools.h diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.h b/openair1/PHY/LTE_TRANSPORT/if4_tools.h new file mode 100644 index 0000000000..977e5f36c5 --- /dev/null +++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.h @@ -0,0 +1,135 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file PHY/LTE_TRANSPORT/if4_tools.h +* \brief +* \author S. Sandeep Kumar, Raymond Knopp +* \date 2016 +* \version 0.1 +* \company Eurecom +* \email: ee13b1025@iith.ac.in, knopp@eurecom.fr +* \note +* \warning +*/ + +#include + +/// IF4 Frame Status (32 bits) +struct IF4_frame_status { + /// Antenna Numbers + uint32_t ant_num:3; + /// Antenna Start + uint32_t ant_start:3; + /// Radio Frame Number + uint32_t rf_num:16; + /// Sub-frame Number + uint32_t sf_num:4; + /// Symbol Number + uint32_t sym_num:4; + /// Reserved + uint32_t rsvd:2; +}; + +/// IF4 PRACH Configuration (32 bits) +struct IF4_lte_prach_conf { + /// Reserved + uint32_t rsvd:3; + /// Antenna Indication + uint32_t ant:3; + /// Radio Frame Number + uint32_t rf_num:16; + /// Sub-frame Number + uint32_t sf_num:4; + /// FFT Exponent Output + uint32_t exponent:6; +}; + +/// IF4 Antenna Gain +struct IF4_gain { + /// Reserved + uint32_t rsvd:10; + /// FFT Exponent Output + uint32_t exponent:6; +}; + +struct IF4_dl_packet { + /// Destination Address + + /// Source Address + + /// Type + + /// Sub-Type + + /// Reserved + + /// Frame Status + + /// Data Blocks + + /// Frame Check Sequence + +}; + +struct IF4_ul_packet { + /// Destination Address + + /// Source Address + + /// Type + + /// Sub-Type + + /// Reserved + + /// Frame Status + + /// Gain 0 + /// Gain 1 + /// Gain 2 + /// Gain 3 + /// Gain 4 + /// Gain 5 + /// Gain 6 + /// Gain 7 + + /// Data Blocks + + /// Frame Check Sequence + uint32_t fcs; +}; + +struct IF4_prach_packet { + + +}; + +void send_IF4(PHY_VARS_eNB *eNB, int subframe); + +void recv_IF4(PHY_VARS_eNB *eNB, int subframe); From 7b3fe853584067d5bcae80752271a17466f83675 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Fri, 3 Jun 2016 16:23:22 +0200 Subject: [PATCH 5/6] fixed file name, updated the IF4 frame structure, added dummy functions for frame generation --- openair1/PHY/LTE_TRANSPORT/if4_tools.c | 114 +++++++++++++++++++++++++ openair1/PHY/LTE_TRANSPORT/if4_tools.h | 65 +++++++++----- openair1/PHY/LTE_TRANSPORT/if4tools.c | 47 ---------- 3 files changed, 160 insertions(+), 66 deletions(-) create mode 100644 openair1/PHY/LTE_TRANSPORT/if4_tools.c delete mode 100644 openair1/PHY/LTE_TRANSPORT/if4tools.c diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c new file mode 100644 index 0000000000..a3e6d75ac8 --- /dev/null +++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c @@ -0,0 +1,114 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file PHY/LTE_TRANSPORT/if4_tools.c +* \brief +* \author Mauricio Gunther, Raymond Knopp, S. Sandeep Kumar +* \date 2016 +* \version 0.1 +* \company Eurecom +* \email: knopp@eurecom.fr, ee13b1025@iith.ac.in +* \note +* \warning +*/ + +#include "PHY/LTE_TRANSPORT/if4_tools.h" + +/* +typedef struct data_block_type { + +} data_block; +*/ + +/* +void allocate_data_block(long *data_block ,int length){ + data_block = malloc(length*sizeof(long)); +} +*/ + +void send_IF4(PHY_VARS_eNB *eNB, int subframe){ + eNB_proc_t *proc = &eNB->proc; + //int frame=proc->frame_tx; + //int subframe=proc->subframe_tx; + + LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; + int i,j; + + float *data_block = malloc(length*sizeof(long)); + + + // find number of consecutive non zero in values in symbol + // NrOfNonZeroValues + + // how many values does the atan function output? + + for(i = 0; i <= fp->symbols_per_tti; i++){ + for(j = 0; j < NrOfNonZeroValues; j=j+2){ + + symbol = eNB->common_vars.txdataF[0][0 /*antenna number*/][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)] + + data_block[j] = Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j -1])<<16 + Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j]); + data_block[j+NrOfNonZeroValues] = Atan(subframe[i][j+1])<<16 + Atan(subframe[i][j+2]); + // use memset? + } + + } + +/* +memset(&eNB->common_vars.txdataF[0][aa][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)], + 0,fp->ofdm_symbol_size*(fp->symbols_per_tti)*sizeof(int32_t)); + } + */ + +} + +void recv_IF4( ) { + +} + +IF4_dl_packet gen_IF4_dl_packet( ) { + + IF4_dl_packet dl_packet; + + return dl_packet; +} + +IF4_ul_packet gen_IF4_ul_packet( ) { + + IF4_ul_packet ul_packet; + + return ul_packet; +} + +IF4_prach_packet gen_IF4_prach_packet( ) { + + IF4_prach_packet prach_packet; + + return prach_packet; +} diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.h b/openair1/PHY/LTE_TRANSPORT/if4_tools.h index 977e5f36c5..363dbf444d 100644 --- a/openair1/PHY/LTE_TRANSPORT/if4_tools.h +++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.h @@ -56,7 +56,15 @@ struct IF4_frame_status { uint32_t rsvd:2; }; -/// IF4 PRACH Configuration (32 bits) +/// IF4 Antenna Gain +struct IF4_gain { + /// Reserved + uint32_t rsvd:10; + /// FFT Exponent Output + uint32_t exponent:6; +}; + +/// IF4 LTE PRACH Configuration (32 bits) struct IF4_lte_prach_conf { /// Reserved uint32_t rsvd:3; @@ -69,14 +77,6 @@ struct IF4_lte_prach_conf { /// FFT Exponent Output uint32_t exponent:6; }; - -/// IF4 Antenna Gain -struct IF4_gain { - /// Reserved - uint32_t rsvd:10; - /// FFT Exponent Output - uint32_t exponent:6; -}; struct IF4_dl_packet { /// Destination Address @@ -84,17 +84,17 @@ struct IF4_dl_packet { /// Source Address /// Type - + uint16_t type; /// Sub-Type - + uint16_t sub_type; /// Reserved - + uint32_t rsvd; /// Frame Status - + IF4_frame_status frame_status; /// Data Blocks /// Frame Check Sequence - + uint32_t fcs; }; struct IF4_ul_packet { @@ -103,22 +103,29 @@ struct IF4_ul_packet { /// Source Address /// Type - + uint16_t type; /// Sub-Type - + uint16_t sub_type; /// Reserved - + uint32_t rsvd; /// Frame Status - + IF4_frame_status frame_status; /// Gain 0 + IF4_gain gain0; /// Gain 1 + IF4_gain gain1; /// Gain 2 + IF4_gain gain2; /// Gain 3 + IF4_gain gain3; /// Gain 4 + IF4_gain gain4; /// Gain 5 + IF4_gain gain5; /// Gain 6 + IF4_gain gain6; /// Gain 7 - + IF4_gain gain7; /// Data Blocks /// Frame Check Sequence @@ -126,10 +133,30 @@ struct IF4_ul_packet { }; struct IF4_prach_packet { + /// Destination Address + /// Source Address + /// Type + uint16_t type; + /// Sub-Type + uint16_t sub_type; + /// Reserved + uint32_t rsvd; + /// LTE Prach Configuration + IF4_lte_prach_conf prach_conf; + /// Prach Data Block (one antenna) + + /// Frame Check Sequence + uint32_t fcs; }; +IF4_dl_packet gen_IF4_dl_packet(); + +IF4_ul_packet gen_IF4_ul_packet(); + +IF4_prach_packet gen_IF4_prach_packet(); + void send_IF4(PHY_VARS_eNB *eNB, int subframe); void recv_IF4(PHY_VARS_eNB *eNB, int subframe); diff --git a/openair1/PHY/LTE_TRANSPORT/if4tools.c b/openair1/PHY/LTE_TRANSPORT/if4tools.c deleted file mode 100644 index 70e598e2a1..0000000000 --- a/openair1/PHY/LTE_TRANSPORT/if4tools.c +++ /dev/null @@ -1,47 +0,0 @@ -/* -typedef struct data_block_type { - -} data_block; -*/ - -/* -void allocate_data_block(long *data_block ,int length){ - data_block = malloc(length*sizeof(long)); -} -*/ - -void send_IF4(PHY_VARS_eNB eNB, int subframe){ - eNB_proc_t *proc = &eNB->proc; - //int frame=proc->frame_tx; - //int subframe=proc->subframe_tx; - - LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; - int i,j; - - float *data_block = malloc(length*sizeof(long)); - - - // find number of consecutive non zero in values in symbol - // NrOfNonZeroValues - - // how many values does the atan function output? - - for(i = 0; i <= fp->symbols_per_tti; i++){ - for(j = 0; j < NrOfNonZeroValues; j=j+2){ - - symbol = eNB->common_vars.txdataF[0][0 /*antenna number*/][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)] - - data_block[j] = Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j -1])<<16 + Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j]); - data_block[j+NrOfNonZeroValues] = Atan(subframe[i][j+1])<<16 + Atan(subframe[i][j+2]); - // use memset? - } - - } - -/* -memset(&eNB->common_vars.txdataF[0][aa][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)], - 0,fp->ofdm_symbol_size*(fp->symbols_per_tti)*sizeof(int32_t)); - } - */ - -} From ad1114c7f75b677b99a51e88e902df5352e7bc38 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Fri, 3 Jun 2016 17:54:32 +0200 Subject: [PATCH 6/6] added more structural changes --- openair1/PHY/LTE_TRANSPORT/if4_tools.c | 156 ++++++++++++++++++------- openair1/PHY/LTE_TRANSPORT/if4_tools.h | 4 +- 2 files changed, 117 insertions(+), 43 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c index a3e6d75ac8..669b7a6739 100644 --- a/openair1/PHY/LTE_TRANSPORT/if4_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c @@ -29,28 +29,19 @@ /*! \file PHY/LTE_TRANSPORT/if4_tools.c * \brief -* \author Mauricio Gunther, Raymond Knopp, S. Sandeep Kumar +* \author Mauricio Gunther, S. Sandeep Kumar, Raymond Knopp * \date 2016 * \version 0.1 * \company Eurecom -* \email: knopp@eurecom.fr, ee13b1025@iith.ac.in +* \email: knopp@eurecom.fr * \note * \warning */ #include "PHY/LTE_TRANSPORT/if4_tools.h" -/* -typedef struct data_block_type { - -} data_block; -*/ +// Define how data blocks are stored and transferred -/* -void allocate_data_block(long *data_block ,int length){ - data_block = malloc(length*sizeof(long)); -} -*/ void send_IF4(PHY_VARS_eNB *eNB, int subframe){ eNB_proc_t *proc = &eNB->proc; @@ -58,57 +49,138 @@ void send_IF4(PHY_VARS_eNB *eNB, int subframe){ //int subframe=proc->subframe_tx; LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; - int i,j; + uint32_t i,j; float *data_block = malloc(length*sizeof(long)); + // Generate IF4 packet (for now DL) with frame status information + dl_packet = gen_IF4_dl_packet( /* ADD INFO and data_block pointer */ ); - // find number of consecutive non zero in values in symbol - // NrOfNonZeroValues - - // how many values does the atan function output? - - for(i = 0; i <= fp->symbols_per_tti; i++){ - for(j = 0; j < NrOfNonZeroValues; j=j+2){ - - symbol = eNB->common_vars.txdataF[0][0 /*antenna number*/][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)] - - data_block[j] = Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j -1])<<16 + Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j]); - data_block[j+NrOfNonZeroValues] = Atan(subframe[i][j+1])<<16 + Atan(subframe[i][j+2]); - // use memset? - } - - } - -/* -memset(&eNB->common_vars.txdataF[0][aa][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)], - 0,fp->ofdm_symbol_size*(fp->symbols_per_tti)*sizeof(int32_t)); - } - */ + for(i=0; isymbols_per_tti; i++) { + // Do compression of the two parts and generate data blocks + + symbol = eNB->common_vars.txdataF[0][0 /*antenna number*/][subframe*fp->ofdm_symbol_size*(fp->symbols_per_tti)] + data_block[j] = Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j -1])<<16 + Atan(symbol[fp->ofmd_symbol_size - NrOfNonZeroValues + j]); + data_block[j+NrOfNonZeroValues] = Atan(subframe[i][j+1])<<16 + Atan(subframe[i][j+2]); + + // Set data blocks and update subframe no./other information to generated packet + + + // Write the packet(s) to the fronthaul + + } + } -void recv_IF4( ) { +void recv_IF4( /* ADD INFO and data_block pointer */ ) { + + // Read packet(s) from the fronthaul + + // Apply reverse processing - decompression + + // Generate and return the OFDM symbols (txdataF) } -IF4_dl_packet gen_IF4_dl_packet( ) { - +IF4_dl_packet gen_IF4_dl_packet( /* ADD INFO and data_block pointer */ ) { IF4_dl_packet dl_packet; + // Set destination and source address + + // Set Type and Sub-Type + dl_packet.type = ; //08_0A ? + dl_packet.sub_type = 0x0020; + + // Leave reserved as it is + //dl_packet.rsvd = ; + + // Set frame status + dl_packet.frame_status.ant_num = ; + dl_packet.frame_status.ant_start = ; + dl_packet.frame_status.rf_num = ; + dl_packet.frame_status.sf_num = ; + dl_packet.frame_status.sym_num = ; + //dl_packet.frame_status.rsvd = ; + + // Set data blocks if sent + if (data_block != NULL) { + + } else { + + } + + // Set frame check sequence + dl_packet.fcs = ; + return dl_packet; } -IF4_ul_packet gen_IF4_ul_packet( ) { - +IF4_ul_packet gen_IF4_ul_packet( /* ADD INFO and data_block pointer */ ) { IF4_ul_packet ul_packet; + + // Set destination and source address + + // Set Type and Sub-Type + ul_packet.type = ; //08_0A ? + ul_packet.sub_type = 0x0019; + + // Leave reserved as it is + //ul_packet.rsvd = ; + + // Set frame status + ul_packet.frame_status.ant_num = ; + ul_packet.frame_status.ant_start = ; + ul_packet.frame_status.rf_num = ; + ul_packet.frame_status.sf_num = ; + ul_packet.frame_status.sym_num = ; + //ul_packet.frame_status.rsvd = ; + + // Set antenna specific gain + ul_packet.gain0.exponent = ; + //ul_packet.gain0.rsvd = ; + + // Set data blocks if sent + if (data_block != NULL) { + + } else { + + } + + // Set frame check sequence + ul_packet.fcs = ; return ul_packet; } -IF4_prach_packet gen_IF4_prach_packet( ) { - +IF4_prach_packet gen_IF4_prach_packet( /* ADD INFO and data_block pointer */ ) { IF4_prach_packet prach_packet; + + // Set destination and source address + + // Set Type and Sub-Type + prach_packet.type = ; //08_0A ? + prach_packet.sub_type = 0x0021; + + // Leave reserved as it is + //prach_packet.rsvd = ; + + // Set LTE Prach configuration + //prach_packet.prach_conf.rsvd = ; + prach_packet.prach_conf.ant = ; + prach_packet.prach_conf.rf_num = ; + prach_packet.prach_conf.sf_num = ; + prach_packet.prach_conf.exponent = ; + + // Set data blocks if sent + if (data_block != NULL) { + + } else { + + } + + // Set frame check sequence + prach_packet.fcs = ; return prach_packet; } diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.h b/openair1/PHY/LTE_TRANSPORT/if4_tools.h index 363dbf444d..3b25e82c6a 100644 --- a/openair1/PHY/LTE_TRANSPORT/if4_tools.h +++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.h @@ -56,7 +56,7 @@ struct IF4_frame_status { uint32_t rsvd:2; }; -/// IF4 Antenna Gain +/// IF4 Antenna Gain (16 bits) struct IF4_gain { /// Reserved uint32_t rsvd:10; @@ -151,6 +151,8 @@ struct IF4_prach_packet { uint32_t fcs; }; +// Needs to be checked + IF4_dl_packet gen_IF4_dl_packet(); IF4_ul_packet gen_IF4_ul_packet();