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
wangjie
OpenXG-RAN
Commits
1f97f2b0
Commit
1f97f2b0
authored
Feb 06, 2019
by
magounak
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
received DMRS at RAU side from 2 RRUs
parent
9f3d5f40
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
144 additions
and
41 deletions
+144
-41
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+8
-0
common/utils/T/tracer/extract.c
common/utils/T/tracer/extract.c
+1
-1
openair1/PHY/LTE_TRANSPORT/if4_tools.c
openair1/PHY/LTE_TRANSPORT/if4_tools.c
+13
-11
openair1/PHY/MODULATION/ul_7_5_kHz.c
openair1/PHY/MODULATION/ul_7_5_kHz.c
+20
-6
openair1/SCHED/ru_procedures.c
openair1/SCHED/ru_procedures.c
+30
-6
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+72
-17
No files found.
common/utils/T/T_messages.txt
View file @
1f97f2b0
...
...
@@ -45,6 +45,14 @@ ID = ENB_PHY_INPUT_SIGNAL
DESC = eNodeB received signal in the time domain for a duration of 1ms
GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata
ID = RAU_INPUT_DMRS
DESC = RAU received DMRS from the RRUs
GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
FORMAT = int,tag : int,frame : int,subframe : buffer,rxdataF
ID = CALIBRATION_CHANNEL_ESTIMATES
DESC = RAU received DMRS estimates from the RRUs
GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
FORMAT = int,tag : int,frame : int,subframe : buffer,calib_ch
ID = ENB_PHY_OUTPUT_SIGNAL
DESC = eNodeB sent signal in the time domain for a duration of 1ms
GROUP = ALL:PHY:HEAVY:ENB
...
...
common/utils/T/tracer/extract.c
View file @
1f97f2b0
...
...
@@ -114,7 +114,7 @@ int main(int n, char **v)
if
(
fwrite
(
e
.
e
[
buffer_arg
].
b
,
e
.
e
[
buffer_arg
].
bsize
,
1
,
out
)
!=
1
)
{
perror
(
output_file
);
exit
(
1
);
}
found
=
1
;
break
;
//
break;
}
if
(
found
==
0
)
printf
(
"ERROR: event not found
\n
"
);
...
...
openair1/PHY/LTE_TRANSPORT/if4_tools.c
View file @
1f97f2b0
...
...
@@ -119,13 +119,13 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) {
blockoffsetF
+=
fp
->
ofdm_symbol_size
;
}
}
else
if
(
packet_type
==
IF4p5_PULCALIB
)
{
LOG_D
(
PHY
,
"send PULCALIB_IF4p5: RU %d frame %d, subframe %d
\n
"
,
ru
->
idx
,
frame
,
subframe
);
LOG_D
(
PHY
,
"send PULCALIB_IF4p5: RU %d frame %d, subframe %d
\n
"
,
ru
->
idx
,
frame
,
subframe
);
AssertFatal
(
subframe_select
(
fp
,
subframe
)
==
SF_S
,
"calling PULCALIB in non-S subframe
\n
"
);
db_fulllength
=
12
*
fp
->
N_RB_UL
;
db_halflength
=
(
db_fulllength
)
>>
1
;
slotoffsetF
+=
(
fp
->
ofdm_symbol_size
*
3
)
;
blockoffsetF
+=
(
fp
->
ofdm_symbol_size
*
3
)
;
slotoffsetF
=
0
;
blockoffsetF
=
(
fp
->
ofdm_symbol_size
)
-
db_halflength
;
if
(
eth
->
flags
==
ETH_RAW_IF4p5_MODE
)
{
...
...
@@ -137,16 +137,17 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) {
}
gen_IF4p5_ul_header
(
packet_header
,
packet_type
,
frame
,
subframe
);
AssertFatal
(
txdataF
[
0
]
!=
NULL
,
"txdataF_BF[0] is null
\n
"
);
for
(
symbol_id
=
3
;
symbol_id
<
11
;
symbol_id
+=
10
)
{
AssertFatal
(
rxdataF
[
0
]
!=
NULL
,
"rxdataF[0] is null
\n
"
);
for
(
symbol_id
=
0
;
symbol_id
<
11
;
symbol_id
++
)
{
if
(
symbol_id
==
3
||
symbol_id
==
10
)
{
for
(
int
antenna_id
=
0
;
antenna_id
<
ru
->
nb_tx
;
antenna_id
++
)
{
for
(
element_id
=
0
;
element_id
<
db_halflength
;
element_id
++
)
{
i
=
(
uint16_t
*
)
&
t
xdataF
[
antenna_id
][
blockoffsetF
+
element_id
];
i
=
(
uint16_t
*
)
&
r
xdataF
[
antenna_id
][
blockoffsetF
+
element_id
];
data_block
[
element_id
]
=
((
uint16_t
)
lin2alaw_if4p5
[
*
i
])
|
(
lin2alaw_if4p5
[
*
(
i
+
1
)]
<<
8
);
i
=
(
uint16_t
*
)
&
t
xdataF
[
antenna_id
][
slotoffsetF
+
element_id
];
i
=
(
uint16_t
*
)
&
r
xdataF
[
antenna_id
][
slotoffsetF
+
element_id
];
data_block
[
element_id
+
db_halflength
]
=
((
uint16_t
)
lin2alaw_if4p5
[
*
i
])
|
(
lin2alaw_if4p5
[
*
(
i
+
1
)]
<<
8
);
}
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_COMPR_IF
,
0
);
packet_header
->
frame_status
&=
~
(
0x7
);
...
...
@@ -164,9 +165,10 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) {
perror
(
"ETHERNET write for IF4p5_PULCALIB
\n
"
);
}
if
(
ru
->
idx
<=
1
)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_IF0
+
ru
->
idx
,
0
);
slotoffsetF
+=
fp
->
ofdm_symbol_size
*
7
;
blockoffsetF
+=
fp
->
ofdm_symbol_size
*
7
;
}
}
slotoffsetF
+=
fp
->
ofdm_symbol_size
;
blockoffsetF
+=
fp
->
ofdm_symbol_size
;
}
}
else
if
((
packet_type
==
IF4p5_PULFFT
)
||
(
packet_type
==
IF4p5_PULTICK
)){
db_fulllength
=
12
*
fp
->
N_RB_UL
;
...
...
openair1/PHY/MODULATION/ul_7_5_kHz.c
View file @
1f97f2b0
...
...
@@ -99,7 +99,7 @@ void remove_7_5_kHz(RU_t *ru,uint8_t slot)
#endif
// apply 7.5 kHz
// if (((slot>>1)&1) == 0)
{
// apply the sinusoid from the table directly
// if (((slot>>1)&1) == 0) // apply the sinusoid from the table directly
for
(
i
=
0
;
i
<
(
len
>>
2
);
i
++
)
{
#if defined(__x86_64__) || defined(__i386__)
...
...
@@ -158,16 +158,30 @@ void remove_7_5_kHz(RU_t *ru,uint8_t slot)
frame_parms
->
nb_prefix_samples0
],
(
frame_parms
->
ofdm_symbol_size
+
frame_parms
->
nb_prefix_samples
)
*
sizeof
(
int32_t
));
}
// undo 7.5 kHz offset for symbol 10 in case RU is master (for OTA synchronization)
if
(
ru
->
is_slave
==
0
&&
slot
==
3
){
memcpy
((
void
*
)
&
rxdata_7_5kHz
[
aa
][(
10
*
frame_parms
->
ofdm_symbol_size
)
+
(
10
*
frame_parms
->
nb_prefix_samples
)
+
memcpy
((
void
*
)
&
rxdata_7_5kHz
[
aa
][(
3
*
frame_parms
->
ofdm_symbol_size
)
+
(
2
*
frame_parms
->
nb_prefix_samples
)
+
frame_parms
->
nb_prefix_samples0
],
(
void
*
)
&
rxdata
[
aa
][
slot_offset
+
ru
->
N_TA_offset
+
(
10
*
frame_parms
->
ofdm_symbol_size
)
+
(
9
*
frame_parms
->
nb_prefix_samples
)
+
(
3
*
frame_parms
->
ofdm_symbol_size
)
+
(
2
*
frame_parms
->
nb_prefix_samples
)
+
frame_parms
->
nb_prefix_samples0
],
(
frame_parms
->
ofdm_symbol_size
+
frame_parms
->
nb_prefix_samples
)
*
sizeof
(
int32_t
));
}
/* if (ru->is_slave == 0 && slot == 3){
memcpy((void*)&rxdata_7_5kHz[aa][(10*frame_parms->ofdm_symbol_size)+
(8*frame_parms->nb_prefix_samples)+
2*frame_parms->nb_prefix_samples0],
(void*)&rxdata[aa][slot_offset+ru->N_TA_offset+
(3*frame_parms->ofdm_symbol_size)+
(2*frame_parms->nb_prefix_samples)+
frame_parms->nb_prefix_samples0],
(frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples)*sizeof(int32_t));
}
}*/
}
}
openair1/SCHED/ru_procedures.c
View file @
1f97f2b0
...
...
@@ -229,7 +229,8 @@ void feptx_ofdm_2thread(RU_t *ru) {
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 );
if
(
subframe_select
(
fp
,
subframe
)
==
SF_DL
)
{
// The 2nd check is to force the slave RRUs to send DMRS at symbol 10-subframe 1-slot 1
if
(
subframe_select
(
fp
,
subframe
)
==
SF_DL
||
((
subframe_select
(
fp
,
subframe
)
==
SF_DL
||
subframe
==
1
)
&&
ru
->
is_slave
==
1
))
{
// If this is not an S-subframe
if
(
pthread_mutex_timedlock
(
&
proc
->
mutex_feptx
,
&
wait
)
!=
0
)
{
printf
(
"[RU] ERROR pthread_mutex_lock for feptx thread (IC %d)
\n
"
,
proc
->
instance_cnt_feptx
);
...
...
@@ -713,8 +714,9 @@ void ru_fep_full_2thread(RU_t *ru) {
printf
(
"delay in fep wait on condition in frame_rx: %d subframe_rx: %d
\n
"
,
proc
->
frame_rx
,
proc
->
subframe_rx
);
}
if
(
proc
->
subframe_rx
==
1
&&
ru
->
is_slave
==
0
)
{
//LOG_I(PHY,"******************** Master receives DMRS from slave\n");
/* if (proc->subframe_rx==1 && ru->is_slave==0) {
// LOG_I(PHY,"******************** Master receives DMRS from slave\n");
ru->wait_check++;
ulsch_extract_rbs_single(ru->common.rxdataF,
calibration->rxdataF_ext,
0,
...
...
@@ -722,7 +724,29 @@ void ru_fep_full_2thread(RU_t *ru) {
3%(fp->symbols_per_tti/2),// l = symbol within slot
10/(fp->symbols_per_tti/2),// Ns = slot number
fp);
}
lte_ul_channel_estimation_RRU(fp,
calibration->drs_ch_estimates,
calibration->drs_ch_estimates_time,
calibration->rxdataF_ext,
fp->N_RB_DL,
proc->frame_rx,
proc->subframe_rx,
0,
0,
0,
10,
0,
0);
if (ru->wait_check==1000) {
LOG_M("rxdata.m","rxdata",&ru->common.rxdata[0][0], fp->samples_per_tti*2,1,1); // save 2 first subframes
LOG_M("rxdataF.m","rxdataF",&ru->common.rxdataF[0][0],2*fp->ofdm_symbol_size*fp->symbols_per_tti,1,1);
LOG_M("rxdataF_ext.m","rxdataFext",&calibration->rxdataF_ext[0][10*12*fp->N_RB_DL], 12*(fp->N_RB_DL),1,1);
//LOG_M("channel_est.m","ch_est",&calibration->drs_ch_estimates[0][10*12*fp->N_RB_DL], 12*(fp->N_RB_DL),1,1);
LOG_I(PHY,"******************** Master receives DMRS from slave at frame %d\n",proc->frame_rx);
}
}*/
if
(
proc
->
subframe_rx
==
1
&&
ru
->
is_slave
==
1
/* && ru->state == RU_CHECK_SYNC*/
)
{
...
...
@@ -785,8 +809,8 @@ void ru_fep_full_2thread(RU_t *ru) {
// check for synchronization error
if
(
check_sync_pos
>=
8
||
check_sync_pos
<=-
8
)
{
LOG_E
(
PHY
,
"~~~~~~~~~~~~~~ check_sync_pos %d, frame %d ---> LOST SYNC-EXIT
\n
"
,
check_sync_pos
,
proc
->
frame_rx
);
LOG_M
(
"rxdata.m"
,
"rxdata"
,
&
ru
->
common
.
rxdata
[
0
][
0
],
fp
->
samples_per_tti
*
2
,
1
,
1
);
exit
(
-
1
);
//
LOG_M("rxdata.m","rxdata",&ru->common.rxdata[0][0], fp->samples_per_tti*2,1,1);
exit
(
-
1
);
}
}
...
...
targets/RT/USER/lte-ru.c
View file @
1f97f2b0
...
...
@@ -208,7 +208,8 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
LTE_DL_FRAME_PARMS
*
fp
=
&
ru
->
frame_parms
;
RU_proc_t
*
proc
=
&
ru
->
proc
;
int
f
,
sf
;
RU_CALIBRATION
*
calibration
=
&
ru
->
calibration
;
int
f
,
sf
,
Ns
,
l
;
uint16_t
packet_type
;
uint32_t
symbol_number
=
0
;
...
...
@@ -225,11 +226,11 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
}
if
(
proc
->
symbol_mask
[
*
subframe
]
==
symbol_mask_full
)
proc
->
symbol_mask
[
*
subframe
]
=
0
;
LOG_D
(
PHY
,
"fh_if4p5_south_in: RU %d, frame %d, subframe %d, ru %d
\n
"
,
ru
->
idx
,
*
frame
,
*
subframe
,
ru
->
idx
);
AssertFatal
(
proc
->
symbol_mask
[
*
subframe
]
==
0
,
"rx_fh_if4p5: proc->symbol_mask[%d] = %x
\n
"
,
*
subframe
,
proc
->
symbol_mask
[
*
subframe
]);
//printf(
"fh_if4p5_south_in: RU %d, frame %d, subframe %d, ru %d\n",ru->idx,*frame,*subframe,ru->idx);
//
AssertFatal(proc->symbol_mask[*subframe]==0,"rx_fh_if4p5: proc->symbol_mask[%d] = %x\n",*subframe,proc->symbol_mask[*subframe]);
do
{
recv_IF4p5
(
ru
,
&
f
,
&
sf
,
&
packet_type
,
&
symbol_number
);
LOG_D
(
PHY
,
"~~~~*** RU %d, frame %d, subframe %d, ru %d, packet_type %x, symbol %d
\n
"
,
ru
->
idx
,
*
frame
,
*
subframe
,
ru
->
idx
,
packet_type
,
symbol_number
);
//printf(
"~~~~*** RU %d, frame %d, subframe %d, ru %d, packet_type %x, symbol %d\n",ru->idx,*frame,*subframe,ru->idx,packet_type,symbol_number);
if
(
oai_exit
==
1
||
ru
->
cmd
==
STOP_RU
)
break
;
if
(
packet_type
==
IF4p5_PULFFT
)
proc
->
symbol_mask
[
sf
]
=
proc
->
symbol_mask
[
sf
]
|
(
1
<<
symbol_number
);
else
if
(
packet_type
==
IF4p5_PULCALIB
)
{
...
...
@@ -246,6 +247,51 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
LOG_D
(
PHY
,
"rx_fh_if4p5: subframe %d symbol mask %x
\n
"
,
*
subframe
,
proc
->
symbol_mask
[
*
subframe
]);
}
while
(
proc
->
symbol_mask
[
*
subframe
]
!=
symbol_mask_full
);
if
(
ru
->
wait_cnt
==
0
)
{
T
(
T_RAU_INPUT_DMRS
,
T_INT
(
ru
->
idx
),
T_INT
(
proc
->
frame_rx
),
T_INT
(
proc
->
subframe_rx
),
T_BUFFER
(
&
ru
->
common
.
rxdataF
[
0
][
0
],
fp
->
symbols_per_tti
*
fp
->
ofdm_symbol_size
*
sizeof
(
int32_t
)));
}
// Estimate calibration channel estimates:
if
(
proc
->
subframe_rx
==
0
)
{
Ns
=
(
ru
->
is_slave
==
0
?
1
:
0
);
l
=
(
ru
->
is_slave
==
0
?
10
:
3
);
ru
->
frame_parms
.
nb_antennas_rx
=
ru
->
nb_rx
;
ulsch_extract_rbs_single
(
ru
->
common
.
rxdataF
,
calibration
->
rxdataF_ext
,
0
,
fp
->
N_RB_DL
,
3
%
(
fp
->
symbols_per_tti
/
2
),
// l = symbol within slot
Ns
,
fp
);
// OR should I call just: lte_ul_channel_estimation();
/*lte_ul_channel_estimation((PHY_VARS_eNB *)NULL,
proc,
ru->idx,
3%(fp->symbols_per_tti/2),
Ns);
*/
lte_ul_channel_estimation_RRU
(
fp
,
calibration
->
drs_ch_estimates
,
calibration
->
drs_ch_estimates_time
,
calibration
->
rxdataF_ext
,
fp
->
N_RB_DL
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
0
,
0
,
0
,
l
,
0
,
0
);
T
(
T_CALIBRATION_CHANNEL_ESTIMATES
,
T_INT
(
ru
->
idx
),
T_INT
(
proc
->
frame_rx
),
T_INT
(
proc
->
subframe_rx
),
T_BUFFER
(
&
calibration
->
drs_ch_estimates
[
0
][
l
*
12
*
fp
->
N_RB_UL
],
12
*
fp
->
N_RB_UL
*
sizeof
(
int32_t
)));
}
//calculate timestamp_rx, timestamp_tx based on frame and subframe
proc
->
subframe_rx
=
sf
;
proc
->
frame_rx
=
f
;
...
...
@@ -484,7 +530,6 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_NORTH_ASYNCH_IN
,
subframe_tx
);
}
if
(
ru
->
is_slave
==
1
&&
ru
->
state
==
RU_RUN
&&
frame_tx
%
ru
->
p
==
ru
->
tag
-
1
)
ru
->
generate_dmrs_sync
=
1
;
if
(
ru
->
feptx_ofdm
)
ru
->
feptx_ofdm
(
ru
);
if
(
ru
->
fh_south_out
)
ru
->
fh_south_out
(
ru
);
...
...
@@ -717,7 +762,7 @@ void tx_rf(RU_t *ru) {
RU_proc_t
*
proc
=
&
ru
->
proc
;
LTE_DL_FRAME_PARMS
*
fp
=
&
ru
->
frame_parms
;
void
*
txp
[
ru
->
nb_tx
],
*
txp1
[
ru
->
nb_tx
];
unsigned
int
txs
;
unsigned
int
txs
,
txs1
;
int
i
;
T
(
T_ENB_PHY_OUTPUT_SIGNAL
,
T_INT
(
0
),
T_INT
(
0
),
T_INT
(
proc
->
frame_tx
),
T_INT
(
proc
->
subframe_tx
),
...
...
@@ -774,7 +819,7 @@ void tx_rf(RU_t *ru) {
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
{
txp
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][(
proc
->
subframe_tx
*
fp
->
samples_per_tti
)
-
sf_extension
];
txp1
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][(
proc
->
subframe_tx
*
fp
->
samples_per_tti
)
+
(
sigoff2
)
-
sf_extension
];
txp1
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][(
proc
->
subframe_tx
*
fp
->
samples_per_tti
)
+
(
sigoff2
)
-
sf_extension
];
// pointer to 1st sample of 10th symbol
}
/* add fail safe for late command */
if
(
late_control
!=
STATE_BURST_NORMAL
){
//stop burst
...
...
@@ -821,16 +866,19 @@ void tx_rf(RU_t *ru) {
siglen
+
sf_extension
,
ru
->
nb_tx
,
flags
);
//LOG_I(PHY,"************** RU_id %d,RU_tag %d,timestamp %d,offset %d,extension %d,olo %d\n",ru->idx,ru->tag,proc->timestamp_tx,ru->ts_offset,sf_extension,
// proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension);
LOG_D
(
PHY
,
"txs %d, siglen %d, sf_extension %d
\n
"
,
txs
,
siglen
,
sf_extension
);
if
(
ru
->
is_slave
==
1
&&
ru
->
state
==
RU_RUN
&&
proc
->
frame_tx
%
ru
->
p
==
ru
->
tag
-
1
&&
proc
->
subframe_tx
==
1
)
{
//LOG_I(PHY,"******** subframe %d Slave sends DMRS\n",proc->subframe_tx);
txs
=
ru
->
rfdevice
.
trx_write_func
(
&
ru
->
rfdevice
,
txs1
=
ru
->
rfdevice
.
trx_write_func
(
&
ru
->
rfdevice
,
proc
->
timestamp_tx
+
(
ru
->
ts_offset
+
sigoff2
)
-
ru
->
openair0_cfg
.
tx_sample_advance
-
sf_extension
,
txp1
,
siglen2
+
sf_extension
,
ru
->
nb_tx
,
flags
);
//int se1 = dB_fixed(signal_energy(txp1[0],siglen2+sf_extension));
//LOG_D(PHY,"******** frame %d subframe %d Slave sends DMRS of energy10 %d, energy3 %d\n",proc->frame_tx,proc->subframe_tx,se1,dB_fixed(signal_energy(txp[0],siglen+sf_extension)));
//LOG_D(PHY,"txs1 %d, siglen2 %d, sf_extension %d\n",txs1,siglen2,sf_extension);
}
ru
->
south_out_cnt
++
;
...
...
@@ -841,12 +889,19 @@ void tx_rf(RU_t *ru) {
(
long
long
unsigned
int
)
proc
->
timestamp_tx
,
proc
->
frame_tx
,
proc
->
frame_tx_unwrap
,
proc
->
subframe_tx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
// AssertFatal(txs == siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen);
if
(
(
txs
!=
siglen
+
sf_extension
)
&&
(
late_control
==
STATE_BURST_NORMAL
)
){
/* add fail safe for late command */
// AssertFatal(txs == siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen);
if
(
ru
->
is_slave
==
1
&&
ru
->
state
==
RU_RUN
&&
proc
->
frame_tx
%
ru
->
p
==
ru
->
tag
-
1
&&
proc
->
subframe_tx
==
1
)
{
if
(
(
txs1
!=
siglen2
+
sf_extension
)
&&
(
late_control
==
STATE_BURST_NORMAL
)
){
/* add fail safe for late command */
late_control
=
STATE_BURST_TERMINATE
;
LOG_E
(
PHY
,
"TX : Timeout (sent %d/%d) state =%d
\n
"
,
txs1
,
siglen2
,
late_control
);
}
}
if
(
(
txs
!=
siglen
+
sf_extension
)
&&
(
late_control
==
STATE_BURST_NORMAL
)
){
/* add fail safe for late command */
late_control
=
STATE_BURST_TERMINATE
;
LOG_E
(
PHY
,
"TX : Timeout (sent %d/%d) state =%d
\n
"
,
txs
,
siglen
,
late_control
);
}
}
}
...
...
@@ -2757,9 +2812,9 @@ void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t ti
// NOTE: multiple CC_id are not handled here yet!
ru
->
openair0_cfg
.
clock_source
=
clock_source
;
ru
->
openair0_cfg
.
time_source
=
time_source
;
ru
->
generate_dmrs_sync
=
(
ru
->
is_slave
==
0
)
?
1
:
0
;
if
(
ru
->
generate_dmrs_sync
==
1
)
{
generate_ul_ref_sigs
();
ru
->
generate_dmrs_sync
=
1
;
generate_ul_ref_sigs
();
if
(
ru
->
is_slave
==
0
)
{
ru
->
dmrssync
=
(
int16_t
*
)
malloc16_clear
(
ru
->
frame_parms
.
ofdm_symbol_size
*
2
*
sizeof
(
int16_t
));
}
eNB0
=
ru
->
eNB_list
[
0
];
...
...
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