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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
fb054e65
Commit
fb054e65
authored
May 29, 2018
by
Masayuki HARADA
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'sp3_master' into scd_refactoring
# Conflicts: # openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
parents
ff604660
14740aec
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
115 additions
and
77 deletions
+115
-77
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+13
-11
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+49
-6
openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+0
-20
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+29
-28
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+1
-0
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+23
-12
No files found.
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
View file @
fb054e65
...
...
@@ -1035,6 +1035,11 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
#if defined(__x86_64__) || defined(__i386__)
__m128
avg128U
;
#elif defined(__arm__)
int32x4_t
avg128U
;
#endif
void
ulsch_channel_level
(
int32_t
**
drs_ch_estimates_ext
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
...
...
@@ -1045,24 +1050,21 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
int16_t
rb
;
uint8_t
aarx
;
#if defined(__x86_64__) || defined(__i386__)
__m128i
avg128U
;
__m128i
*
ul_ch128
;
#elif defined(__arm__)
int16x4_t
*
ul_ch128
;
int32x4_t
avg128U
;
#endif
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
//clear average level
#if defined(__x86_64__) || defined(__i386__)
avg128U
=
_mm_setzero_
si128
();
avg128U
=
_mm_setzero_
ps
();
ul_ch128
=
(
__m128i
*
)
drs_ch_estimates_ext
[
aarx
];
for
(
rb
=
0
;
rb
<
nb_rb
;
rb
++
)
{
avg128U
=
_mm_add_
epi32
(
avg128U
,
_mm_madd_epi16
(
ul_ch128
[
0
],
ul_ch128
[
0
]
));
avg128U
=
_mm_add_
epi32
(
avg128U
,
_mm_madd_epi16
(
ul_ch128
[
1
],
ul_ch128
[
1
]
));
avg128U
=
_mm_add_
epi32
(
avg128U
,
_mm_madd_epi16
(
ul_ch128
[
2
],
ul_ch128
[
2
]
));
avg128U
=
_mm_add_
ps
(
avg128U
,
_mm_cvtepi32_ps
(
_mm_madd_epi16
(
ul_ch128
[
0
],
ul_ch128
[
0
])
));
avg128U
=
_mm_add_
ps
(
avg128U
,
_mm_cvtepi32_ps
(
_mm_madd_epi16
(
ul_ch128
[
1
],
ul_ch128
[
1
])
));
avg128U
=
_mm_add_
ps
(
avg128U
,
_mm_cvtepi32_ps
(
_mm_madd_epi16
(
ul_ch128
[
2
],
ul_ch128
[
2
])
));
ul_ch128
+=
3
;
...
...
@@ -1089,10 +1091,10 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
#endif
DevAssert
(
nb_rb
);
avg
[
aarx
]
=
(
((
in
t
*
)
&
avg128U
)[
0
]
+
((
in
t
*
)
&
avg128U
)[
1
]
+
((
in
t
*
)
&
avg128U
)[
2
]
+
((
int
*
)
&
avg128U
)[
3
])
/
(
nb_rb
*
12
);
avg
[
aarx
]
=
(
int
)((((
floa
t
*
)
&
avg128U
)[
0
]
+
((
floa
t
*
)
&
avg128U
)[
1
]
+
((
floa
t
*
)
&
avg128U
)[
2
]
+
((
float
*
)
&
avg128U
)[
3
])
/
(
float
)(
nb_rb
*
12
)
);
}
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
fb054e65
...
...
@@ -885,7 +885,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
LOG_E
(
PHY
,
"Unknown number for N_RB_UL %d
\n
"
,
fp
->
N_RB_UL
);
break
;
}
SR_payload
=
0
;
switch
(
uci
->
type
)
{
case
SR
:
case
HARQ_SR
:
...
...
@@ -969,8 +969,34 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
}
else
{
// frame_type == TDD
#if 1
metric
[
0
]
=
rx_pucch
(
eNB
,
uci
->
pucch_fmt
,
i
,
uci
->
n_pucch_1
[
0
][
0
],
0
,
//n2_pucch
uci
->
srs_active
,
// shortened format
pucch_b0b1
[
0
],
frame
,
subframe
,
PUCCH1a_THRES
);
if
(
uci
->
type
==
HARQ_SR
&&
metric
[
0
]
>
metric_SR
)
SR_payload
=
0
;
else
if
(
SR_payload
==
1
)
fill_sr_indication
(
eNB
,
uci
->
rnti
,
frame
,
subframe
,
metric_SR
);
if
(
uci
->
type
==
HARQ_SR
&&
metric
[
0
]
<=
metric_SR
)
{
SR_payload
=
1
;
metric
[
0
]
=
rx_pucch
(
eNB
,
uci
->
pucch_fmt
,
i
,
uci
->
n_pucch_1_0_sr
[
0
],
0
,
//n2_pucch
uci
->
srs_active
,
// shortened format
pucch_b0b1
[
0
],
frame
,
subframe
,
PUCCH1a_THRES
);
}
#else
// if SR was detected, use the n1_pucch from SR
if
(
SR_payload
==
1
)
{
#ifdef DEBUG_PHY_PROC
...
...
@@ -1020,8 +1046,17 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"RNTI %x type %d SR_payload %d Frame %d Subframe %d pucch_b0b1[0][0] %d pucch_b0b1[0][1] %d pucch_b0b1[1][0] %d pucch_b0b1[1][1] %d
\n
"
,
uci
->
rnti
,
uci
->
type
,
SR_payload
,
frame
,
subframe
,
pucch_b0b1
[
0
][
0
],
pucch_b0b1
[
0
][
1
],
pucch_b0b1
[
1
][
0
],
pucch_b0b1
[
1
][
1
]);
#endif
#endif
if
(
uci
->
pucch_fmt
==
pucch_format1a
)
{
LOG_D
(
PHY
,
"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (TDD) payload %d (metric %d)
\n
"
,
eNB
->
Mod_id
,
uci
->
rnti
,
frame
,
subframe
,
pucch_b0b1
[
0
][
0
],
metric
[
0
]);
uci
->
stat
=
metric
[
0
];
fill_uci_harq_indication
(
eNB
,
uci
,
frame
,
subframe
,
pucch_b0b1
[
0
],
0
,
0xffff
);
}
else
if
(
uci
->
pucch_fmt
==
pucch_format1b
)
{
if
(
SR_payload
==
1
)
{
// this implements Table 7.3.1 from 36.213
if
(
pucch_b0b1
[
0
][
0
]
==
4
)
{
// there isn't a likely transmission
harq_ack
[
0
]
=
4
;
// DTX
...
...
@@ -1321,6 +1356,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
AssertFatal
(
1
==
0
,
"Unsupported UCI type %d
\n
"
,
uci
->
type
);
break
;
}
}
if
(
SR_payload
==
1
)
{
LOG_D
(
PHY
,
"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC
\n
"
,
eNB
->
Mod_id
,
...
...
@@ -2006,6 +2042,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
switch
(
harq_ack
[
0
])
{
case
0
:
case
4
:
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
0
;
break
;
case
1
:
// check if M=1,4,7
...
...
@@ -2014,7 +2051,9 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
1
;
release_harq
(
eNB
,
UE_id
,
0
,
frame
,
subframe
,
0xffff
);
release_harq
(
eNB
,
UE_id
,
1
,
frame
,
subframe
,
0xffff
);
}
}
else
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
0
;
}
break
;
case
2
:
// check if M=2,5,8
if
(
uci
->
num_pucch_resources
==
2
||
tdd_config5_sf2scheds
==
2
||
...
...
@@ -2022,7 +2061,9 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
1
;
release_harq
(
eNB
,
UE_id
,
0
,
frame
,
subframe
,
0xffff
);
release_harq
(
eNB
,
UE_id
,
1
,
frame
,
subframe
,
0xffff
);
}
}
else
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
0
;
}
break
;
case
3
:
// check if M=3,6,9
if
(
uci
->
num_pucch_resources
==
3
||
tdd_config5_sf2scheds
==
3
||
...
...
@@ -2030,7 +2071,9 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
1
;
release_harq
(
eNB
,
UE_id
,
0
,
frame
,
subframe
,
0xffff
);
release_harq
(
eNB
,
UE_id
,
1
,
frame
,
subframe
,
0xffff
);
}
}
else
{
pdu
->
harq_indication_tdd_rel13
.
harq_data
[
0
].
bundling
.
value_0
=
0
;
}
break
;
}
break
;
...
...
openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
View file @
fb054e65
...
...
@@ -2962,26 +2962,6 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
hi_dci0_pdu
->
dci_pdu
.
dci_pdu_rel8
.
harq_pid
=
harq_pid
;
hi_dci0_req
->
number_of_dci
++
;
// fill in NAK information
hi_dci0_pdu
=
&
hi_dci0_req
->
hi_dci0_pdu_list
[
hi_dci0_req
->
number_of_dci
+
hi_dci0_req
->
number_of_hi
];
memset
((
void
*
)
hi_dci0_pdu
,
0
,
sizeof
(
nfapi_hi_dci0_request_pdu_t
));
hi_dci0_pdu
->
pdu_type
=
NFAPI_HI_DCI0_HI_PDU_TYPE
;
hi_dci0_pdu
->
pdu_size
=
2
+
sizeof
(
nfapi_hi_dci0_hi_pdu
);
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
resource_block_start
=
ulsch_ue_select
[
CC_id
].
list
[
ulsch_ue_num
].
start_rb
;
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
cyclic_shift_2_for_drms
=
UE_template
->
cshift
[
harq_pid
];
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
hi_value
=
0
;
hi_dci0_req
->
number_of_hi
++
;
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
tl
.
tag
=
NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG
;
hi_dci0_req
->
sfnsf
=
sfnsf_add_subframe
(
sched_frame
,
sched_subframeP
,
0
);
//(frameP, subframeP, 4)
nfapi_hi_dci0_request_t
*
nfapi_hi_dci0_req
=
&
eNB
->
HI_DCI0_req
[
CC_id
][
subframeP
];
nfapi_hi_dci0_req
->
sfn_sf
=
frameP
<<
4
|
subframeP
;
// sfnsf_add_subframe(sched_frame, sched_subframeP, 0); // sunday!
nfapi_hi_dci0_req
->
header
.
message_id
=
NFAPI_HI_DCI0_REQUEST
;
LOG_D
(
MAC
,
"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, round %d)
\n
"
,
module_idP
,
harq_pid
,
rnti
,
CC_id
,
frameP
,
subframeP
,
UE_id
,
mcs_rv
,
ulsch_ue_select
[
CC_id
].
list
[
ulsch_ue_num
].
start_rb
,
ulsch_ue_select
[
CC_id
].
list
[
ulsch_ue_num
].
nb_rb
,
UE_template
->
TBS_UL
[
harq_pid
],
round
);
// Add UL_config PDUs
LOG_D
(
MAC
,
"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d
\n
"
,
harq_pid
,
frameP
,
subframeP
,
UE_id
,
rnti
,
sched_frame
,
sched_subframeP
);
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
fb054e65
...
...
@@ -165,6 +165,9 @@ rx_sdu(const module_id_t enb_mod_idP,
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
],
ul_cqi
);
if
(
ul_cqi
>
200
){
// too high energy pattern
UE_list
->
UE_sched_ctrl
[
UE_id
].
pusch_snr
[
CC_idP
]
=
ul_cqi
;
}
// AssertFatal(1==0,"ulsch in error\n");
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
==
3
)
{
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_scheduled
&=
(
~
(
1
<<
harq_pid
));
...
...
@@ -175,6 +178,32 @@ rx_sdu(const module_id_t enb_mod_idP,
cancel_ra_proc
(
enb_mod_idP
,
CC_idP
,
frameP
,
current_rnti
);
}
else
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
++
;
first_rb
=
UE_list
->
UE_template
[
CC_idP
][
UE_id
].
first_rb_ul
[
harq_pid
];
// Program NACK for PHICH
LOG_D
(
MAC
,
"Programming PHICH NACK for rnti %x harq_pid %d (first_rb %d)
\n
"
,
current_rnti
,
harq_pid
,
first_rb
);
nfapi_hi_dci0_request_t
*
hi_dci0_req
;
uint8_t
sf_ahead_dl
=
ul_subframe2_k_phich
(
&
mac
->
common_channels
[
CC_idP
]
,
subframeP
);
hi_dci0_req
=
&
mac
->
HI_DCI0_req
[
CC_idP
][(
subframeP
+
sf_ahead_dl
)
%
10
];
nfapi_hi_dci0_request_body_t
*
hi_dci0_req_body
=
&
hi_dci0_req
->
hi_dci0_request_body
;
nfapi_hi_dci0_request_pdu_t
*
hi_dci0_pdu
=
&
hi_dci0_req_body
->
hi_dci0_pdu_list
[
hi_dci0_req_body
->
number_of_dci
+
hi_dci0_req_body
->
number_of_hi
];
memset
((
void
*
)
hi_dci0_pdu
,
0
,
sizeof
(
nfapi_hi_dci0_request_pdu_t
));
hi_dci0_pdu
->
pdu_type
=
NFAPI_HI_DCI0_HI_PDU_TYPE
;
hi_dci0_pdu
->
pdu_size
=
2
+
sizeof
(
nfapi_hi_dci0_hi_pdu
);
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
tl
.
tag
=
NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG
;
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
resource_block_start
=
first_rb
;
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
cyclic_shift_2_for_drms
=
0
;
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
hi_value
=
0
;
hi_dci0_req_body
->
number_of_hi
++
;
hi_dci0_req_body
->
sfnsf
=
sfnsf_add_subframe
(
frameP
,
subframeP
,
0
);
hi_dci0_req_body
->
tl
.
tag
=
NFAPI_HI_DCI0_REQUEST_BODY_TAG
;
hi_dci0_req
->
sfn_sf
=
sfnsf_add_subframe
(
frameP
,
subframeP
,
sf_ahead_dl
);
hi_dci0_req
->
header
.
message_id
=
NFAPI_HI_DCI0_REQUEST
;
return
;
}
...
...
@@ -1529,34 +1558,6 @@ schedule_ulsch_rnti(module_id_t module_idP,
T_INT
(
UE_template
->
mcs_UL
[
harq_pid
]),
T_INT
(
first_rb
[
CC_id
]),
T_INT
(
rb_table
[
rb_table_index
]),
T_INT
(
round
));
// fill in NAK information
hi_dci0_pdu
=
&
hi_dci0_req_body
->
hi_dci0_pdu_list
[
hi_dci0_req_body
->
number_of_dci
+
hi_dci0_req_body
->
number_of_hi
];
memset
((
void
*
)
hi_dci0_pdu
,
0
,
sizeof
(
nfapi_hi_dci0_request_pdu_t
));
hi_dci0_pdu
->
pdu_type
=
NFAPI_HI_DCI0_HI_PDU_TYPE
;
hi_dci0_pdu
->
pdu_size
=
2
+
sizeof
(
nfapi_hi_dci0_hi_pdu
);
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
tl
.
tag
=
NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG
;
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
resource_block_start
=
UE_template
->
first_rb_ul
[
harq_pid
];
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
cyclic_shift_2_for_drms
=
UE_template
->
cshift
[
harq_pid
];
hi_dci0_pdu
->
hi_pdu
.
hi_pdu_rel8
.
hi_value
=
0
;
hi_dci0_req_body
->
number_of_hi
++
;
hi_dci0_req_body
->
sfnsf
=
sfnsf_add_subframe
(
sched_frame
,
sched_subframeP
,
0
);
hi_dci0_req
->
sfn_sf
=
frameP
<<
4
|
subframeP
;
hi_dci0_req
->
header
.
message_id
=
NFAPI_HI_DCI0_REQUEST
;
LOG_D
(
MAC
,
"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, round %d)
\n
"
,
module_idP
,
harq_pid
,
rnti
,
CC_id
,
frameP
,
subframeP
,
UE_id
,
UE_template
->
mcs_UL
[
harq_pid
],
UE_template
->
first_rb_ul
[
harq_pid
],
UE_template
->
nb_rb_ul
[
harq_pid
],
UE_template
->
TBS_UL
[
harq_pid
],
round
);
// Add UL_config PDUs
LOG_D
(
MAC
,
"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d
\n
"
,
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
fb054e65
...
...
@@ -376,6 +376,7 @@ static void trx_usrp_end(openair0_device *device) {
s
->
tx_md
.
end_of_burst
=
true
;
s
->
tx_stream
->
send
(
""
,
0
,
s
->
tx_md
);
s
->
tx_md
.
end_of_burst
=
false
;
sleep
(
1
);
#if defined(USRP_REC_PLAY)
}
#endif
...
...
targets/RT/USER/lte-softmodem.c
View file @
fb054e65
...
...
@@ -332,10 +332,14 @@ void exit_fun(const char* s)
if
(
UE_flag
==
0
)
{
for
(
ru_id
=
0
;
ru_id
<
RC
.
nb_RU
;
ru_id
++
)
{
if
(
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
)
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
rfdevice
);
if
(
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
)
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
ifdevice
);
if
(
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
)
{
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
rfdevice
);
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
=
NULL
;
}
if
(
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
)
{
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
ifdevice
);
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
=
NULL
;
}
}
}
...
...
@@ -346,8 +350,10 @@ void exit_fun(const char* s)
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
if
(
UE_flag
==
0
)
{
}
else
{
if
(
PHY_vars_UE_g
[
0
][
CC_id
]
->
rfdevice
.
trx_end_func
)
PHY_vars_UE_g
[
0
][
CC_id
]
->
rfdevice
.
trx_end_func
(
&
PHY_vars_UE_g
[
0
][
CC_id
]
->
rfdevice
);
if
(
PHY_vars_UE_g
[
0
][
CC_id
]
->
rfdevice
.
trx_end_func
)
{
PHY_vars_UE_g
[
0
][
CC_id
]
->
rfdevice
.
trx_end_func
(
&
PHY_vars_UE_g
[
0
][
CC_id
]
->
rfdevice
);
PHY_vars_UE_g
[
0
][
CC_id
]
->
rfdevice
.
trx_end_func
=
NULL
;
}
}
}
...
...
@@ -1471,16 +1477,21 @@ int main( int argc, char **argv )
// *** Handle per CC_id openair0
if
(
UE_flag
==
1
)
{
if
(
PHY_vars_UE_g
[
0
][
0
]
->
rfdevice
.
trx_end_func
)
if
(
PHY_vars_UE_g
[
0
][
0
]
->
rfdevice
.
trx_end_func
)
{
PHY_vars_UE_g
[
0
][
0
]
->
rfdevice
.
trx_end_func
(
&
PHY_vars_UE_g
[
0
][
0
]
->
rfdevice
);
PHY_vars_UE_g
[
0
][
0
]
->
rfdevice
.
trx_end_func
=
NULL
;
}
}
else
{
for
(
ru_id
=
0
;
ru_id
<
NB_RU
;
ru_id
++
)
{
if
(
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
)
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
rfdevice
);
if
(
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
)
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
ifdevice
);
if
(
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
)
{
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
rfdevice
);
RC
.
ru
[
ru_id
]
->
rfdevice
.
trx_end_func
=
NULL
;
}
if
(
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
)
{
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
(
&
RC
.
ru
[
ru_id
]
->
ifdevice
);
RC
.
ru
[
ru_id
]
->
ifdevice
.
trx_end_func
=
NULL
;
}
}
}
if
(
ouput_vcd
)
...
...
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