Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
promise
OpenXG-RAN
Commits
d51d5dee
Commit
d51d5dee
authored
Jun 08, 2016
by
S. Sandeep Kumar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix some structures and add more details to if4 functions
parent
d5d1dd0e
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
129 additions
and
135 deletions
+129
-135
openair1/PHY/LTE_TRANSPORT/if4_tools.c
openair1/PHY/LTE_TRANSPORT/if4_tools.c
+94
-115
openair1/PHY/LTE_TRANSPORT/if4_tools.h
openair1/PHY/LTE_TRANSPORT/if4_tools.h
+35
-20
No files found.
openair1/PHY/LTE_TRANSPORT/if4_tools.c
View file @
d51d5dee
...
...
@@ -45,39 +45,62 @@
#include "PHY/LTE_TRANSPORT/if4_tools.h"
#endif
// Define how data blocks are stored and transferred
void
send_IF4
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
)
{
int
frame
=
proc
->
frame_tx
;
int
subframe
=
proc
->
subframe_tx
;
LTE_DL_FRAME_PARMS
*
fp
=
&
eNB
->
frame_parms
;
//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;
uint16_t
i
;
//LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
float_t
data_block_length
=
1200
*
(
fp
->
ofdm_symbol_size
/
2048
);
uint16_t
*
data_block
=
(
uint16_t
*
)
malloc
(
data_block_length
*
sizeof
(
uint16_t
));
//uint32_t i,j;
//float *data_block = malloc(length*sizeof(long));
// Caller: RCC - DL *** handle RRU case - UL and PRACH ***
if
(
eNB
->
node_function
==
NGFI_RCC_IF4
)
{
IF4_dl_packet_t
*
dl_packet
=
(
IF4_dl_packet_t
*
)
malloc
(
sizeof_IF4_dl_packet_t
);
gen_IF4_dl_packet
(
dl_packet
,
proc
);
// Generate IF4 packet (for now DL) with frame status information
//dl_packet = gen_IF4_dl_packet( /* ADD INFO and data_block pointer */ );
dl_packet
->
data_block
=
data_block
;
//
for(i=0; i<fp->symbols_per_tti; i++) {
for
(
i
=
0
;
i
<
fp
->
symbols_per_tti
;
i
++
)
{
//
Do compression of the two parts and generate data blocks
//
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
// Update information in generated packet
dl_packet
->
frame_status
.
sym_num
=
i
;
// Write the packet(s) to the fronthaul
}
}
else
{
IF4_ul_packet_t
*
ul_packet
=
(
IF4_ul_packet_t
*
)
malloc
(
sizeof_IF4_ul_packet_t
);
gen_IF4_ul_packet
(
ul_packet
,
proc
);
ul_packet
->
data_block
=
data_block
;
for
(
i
=
0
;
i
<
fp
->
symbols_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]);
// Update information in generated packet
ul_packet
->
frame_status
.
sym_num
=
i
;
// Write the packet(s) to the fronthaul
//}
}
}
//
}
}
void
recv_IF4
(
/* ADD INFO and data_block pointer */
)
{
void
recv_IF4
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
)
{
// Read packet(s) from the fronthaul
...
...
@@ -85,113 +108,69 @@ void recv_IF4( /* ADD INFO and data_block pointer */ ) {
// Generate and return the OFDM symbols (txdataF)
}
struct
IF4_dl_packet
gen_IF4_dl_packet
(
/* ADD INFO and data_block pointer */
)
{
struct
IF4_dl_packet
dl_packet
;
// Caller: RRU - DL *** handle RCC case - UL and PRACH ***
// Set destination and source address
}
void
gen_IF4_dl_packet
(
IF4_dl_packet_t
*
dl_packet
,
eNB_rxtx_proc_t
*
proc
)
{
// Set Type and Sub-Type
dl_packet
.
type
=
0x080A
;
dl_packet
.
sub_type
=
0x0020
;
dl_packet
->
type
=
0x080A
;
dl_packet
->
sub_type
=
0x0020
;
// Leave reserved as it is
//dl_packet.rsvd =
;
dl_packet
->
rsvd
=
0
;
// Set frame status
dl_packet
.
frame_status
.
ant_num
=
0
;
dl_packet
.
frame_status
.
ant_start
=
0
;
dl_packet
.
frame_status
.
rf_num
=
0
;
dl_packet
.
frame_status
.
sf_num
=
0
;
dl_packet
.
frame_status
.
sym_num
=
0
;
//dl_packet.frame_status.rsvd = ;
// Set data blocks if sent
//if (data_block != NULL) {
//
//} else {
//
//}
dl_packet
->
frame_status
.
ant_num
=
0
;
dl_packet
->
frame_status
.
ant_start
=
0
;
dl_packet
->
frame_status
.
rf_num
=
proc
->
frame_tx
;
dl_packet
->
frame_status
.
sf_num
=
proc
->
subframe_tx
;
dl_packet
->
frame_status
.
sym_num
=
0
;
dl_packet
->
frame_status
.
rsvd
=
0
;
// Set frame check sequence
dl_packet
.
fcs
=
0
;
return
dl_packet
;
dl_packet
->
fcs
=
0
;
}
struct
IF4_ul_packet
gen_IF4_ul_packet
(
/* ADD INFO and data_block pointer */
)
{
struct
IF4_ul_packet
ul_packet
;
// Set destination and source address
void
gen_IF4_ul_packet
(
IF4_ul_packet_t
*
ul_packet
,
eNB_rxtx_proc_t
*
proc
)
{
// Set Type and Sub-Type
ul_packet
.
type
=
0x080A
;
ul_packet
.
sub_type
=
0x0019
;
ul_packet
->
type
=
0x080A
;
ul_packet
->
sub_type
=
0x0019
;
// Leave reserved as it is
//ul_packet.rsvd =
;
ul_packet
->
rsvd
=
0
;
// Set frame status
ul_packet
.
frame_status
.
ant_num
=
0
;
ul_packet
.
frame_status
.
ant_start
=
0
;
ul_packet
.
frame_status
.
rf_num
=
0
;
ul_packet
.
frame_status
.
sf_num
=
0
;
ul_packet
.
frame_status
.
sym_num
=
0
;
//ul_packet.frame_status.rsvd = ;
// Set antenna specific gain
ul_packet
.
gain0
.
exponent
=
0
;
//ul_packet.gain0.rsvd = ;
// Set data blocks if sent
//if (data_block != NULL) {
//
//} else {
//
//}
ul_packet
->
frame_status
.
ant_num
=
0
;
ul_packet
->
frame_status
.
ant_start
=
0
;
ul_packet
->
frame_status
.
rf_num
=
proc
->
frame_rx
;
ul_packet
->
frame_status
.
sf_num
=
proc
->
subframe_rx
;
ul_packet
->
frame_status
.
sym_num
=
0
;
ul_packet
->
frame_status
.
rsvd
=
0
;
// Set frame check sequence
ul_packet
.
fcs
=
0
;
// Set antenna specific gain *** set other antenna gain ***
ul_packet
->
gain0
.
exponent
=
0
;
ul_packet
->
gain0
.
rsvd
=
0
;
return
ul_packet
;
// Set frame check sequence
ul_packet
->
fcs
=
0
;
}
struct
IF4_prach_packet
gen_IF4_prach_packet
(
/* ADD INFO and data_block pointer */
)
{
struct
IF4_prach_packet
prach_packet
;
// Set destination and source address
void
gen_IF4_prach_packet
(
IF4_prach_packet_t
*
prach_packet
,
eNB_rxtx_proc_t
*
proc
)
{
// Set Type and Sub-Type
prach_packet
.
type
=
0x080A
;
prach_packet
.
sub_type
=
0x0021
;
prach_packet
->
type
=
0x080A
;
prach_packet
->
sub_type
=
0x0021
;
// Leave reserved as it is
//prach_packet.rsvd =
;
prach_packet
->
rsvd
=
0
;
// Set LTE Prach configuration
//prach_packet.prach_conf.rsvd = ;
prach_packet
.
prach_conf
.
ant
=
0
;
prach_packet
.
prach_conf
.
rf_num
=
0
;
prach_packet
.
prach_conf
.
sf_num
=
0
;
prach_packet
.
prach_conf
.
exponent
=
0
;
// Set data blocks if sent
//if (data_block != NULL) {
//
//} else {
//
//}
prach_packet
->
prach_conf
.
rsvd
=
0
;
prach_packet
->
prach_conf
.
ant
=
0
;
prach_packet
->
prach_conf
.
rf_num
=
proc
->
frame_rx
;
prach_packet
->
prach_conf
.
sf_num
=
proc
->
subframe_rx
;
prach_packet
->
prach_conf
.
exponent
=
0
;
// Set frame check sequence
prach_packet
.
fcs
=
0
;
return
prach_packet
;
}
int
main
(){
uint32_t
i
=
0
;
return
0
;
prach_packet
->
fcs
=
0
;
}
openair1/PHY/LTE_TRANSPORT/if4_tools.h
View file @
d51d5dee
...
...
@@ -54,6 +54,9 @@ struct IF4_frame_status {
uint32_t
rsvd
:
2
;
};
typedef
struct
IF4_frame_status
IF4_frame_status_t
;
#define sizeof_IF4_frame_status_t 4
/// IF4 Antenna Gain (16 bits)
struct
IF4_gain
{
/// Reserved
...
...
@@ -62,6 +65,9 @@ struct IF4_gain {
uint16_t
exponent
:
6
;
};
typedef
struct
IF4_gain
IF4_gain_t
;
#define sizeof_IF_gain_t 2
/// IF4 LTE PRACH Configuration (32 bits)
struct
IF4_lte_prach_conf
{
/// Reserved
...
...
@@ -76,6 +82,9 @@ struct IF4_lte_prach_conf {
uint32_t
exponent
:
6
;
};
typedef
struct
IF4_lte_prach_conf
IF4_lte_prach_conf_t
;
#define sizeof_IF4_lte_prach_conf_t 4
struct
IF4_dl_packet
{
/// Destination Address
...
...
@@ -88,13 +97,15 @@ struct IF4_dl_packet {
/// Reserved
uint32_t
rsvd
;
/// Frame Status
struct
IF4_frame_status
frame_status
;
IF4_frame_status_t
frame_status
;
/// Data Blocks
uint16_t
*
data_block
;
/// Frame Check Sequence
uint32_t
fcs
;
};
typedef
struct
IF4_dl_packet
IF4_dl_packet_t
;
#define sizeof_IF4_dl_packet_t 18
struct
IF4_ul_packet
{
/// Destination Address
...
...
@@ -108,29 +119,32 @@ struct IF4_ul_packet {
/// Reserved
uint32_t
rsvd
;
/// Frame Status
struct
IF4_frame_status
frame_status
;
IF4_frame_status_t
frame_status
;
/// Gain 0
struct
IF4_gain
gain0
;
IF4_gain_t
gain0
;
/// Gain 1
struct
IF4_gain
gain1
;
IF4_gain_t
gain1
;
/// Gain 2
struct
IF4_gain
gain2
;
IF4_gain_t
gain2
;
/// Gain 3
struct
IF4_gain
gain3
;
IF4_gain_t
gain3
;
/// Gain 4
struct
IF4_gain
gain4
;
IF4_gain_t
gain4
;
/// Gain 5
struct
IF4_gain
gain5
;
IF4_gain_t
gain5
;
/// Gain 6
struct
IF4_gain
gain6
;
IF4_gain_t
gain6
;
/// Gain 7
struct
IF4_gain
gain7
;
IF4_gain_t
gain7
;
/// Data Blocks
uint16_t
*
data_block
;
/// Frame Check Sequence
uint32_t
fcs
;
};
typedef
struct
IF4_ul_packet
IF4_ul_packet_t
;
#define sizeof_IF4_ul_packet_t 34
struct
IF4_prach_packet
{
/// Destination Address
...
...
@@ -143,21 +157,22 @@ struct IF4_prach_packet {
/// Reserved
uint32_t
rsvd
;
/// LTE Prach Configuration
struct
IF4_lte_prach_conf
prach_conf
;
IF4_lte_prach_conf_t
prach_conf
;
/// Prach Data Block (one antenna)
uint16_t
*
data_block
;
/// Frame Check Sequence
uint32_t
fcs
;
};
// Needs to be checked
typedef
struct
IF4_prach_packet
IF4_prach_packet_t
;
#define sizeof_IF4_prach_packet_t 18
struct
IF4_dl_packet
gen_IF4_dl_packet
(
);
void
gen_IF4_dl_packet
(
IF4_dl_packet_t
*
,
eNB_rxtx_proc_t
*
);
struct
IF4_ul_packet
gen_IF4_ul_packet
(
);
void
gen_IF4_ul_packet
(
IF4_ul_packet_t
*
,
eNB_rxtx_proc_t
*
);
struct
IF4_prach_packet
gen_IF4_prach_packet
(
);
void
gen_IF4_prach_packet
(
IF4_prach_packet_t
*
,
eNB_rxtx_proc_t
*
);
void
send_IF4
(
/* ADD INFO */
);
void
send_IF4
(
PHY_VARS_eNB
*
,
eNB_rxtx_proc_t
*
);
void
recv_IF4
(
/* ADD INFO */
);
void
recv_IF4
(
PHY_VARS_eNB
*
,
eNB_rxtx_proc_t
*
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment