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
lizhongxiao
OpenXG-RAN
Commits
06ff737c
Commit
06ff737c
authored
May 08, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
testing of SynchRef UE TX
parent
ddb1e737
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
89 additions
and
48 deletions
+89
-48
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
+4
-4
openair1/PHY/LTE_TRANSPORT/slss.c
openair1/PHY/LTE_TRANSPORT/slss.c
+2
-1
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+4
-1
openair2/LAYER2/MAC/ue_procedures.c
openair2/LAYER2/MAC/ue_procedures.c
+12
-9
openair2/RRC/LITE/L2_interface_ue.c
openair2/RRC/LITE/L2_interface_ue.c
+17
-3
openair2/RRC/LITE/MESSAGES/asn1_msg.c
openair2/RRC/LITE/MESSAGES/asn1_msg.c
+3
-3
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+5
-5
targets/RT/USER/lte-softmodem.h
targets/RT/USER/lte-softmodem.h
+1
-1
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+40
-20
targets/RT/USER/lte-uesoftmodem.c
targets/RT/USER/lte-uesoftmodem.c
+1
-1
No files found.
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
View file @
06ff737c
...
@@ -97,8 +97,8 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
...
@@ -97,8 +97,8 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
break
;
break
;
case
PSSCH_12
:
case
PSSCH_12
:
u0
=
ue
->
gh
[
ue
->
slsch
->
group_destination_id
][
ljmod10
<<
1
];
u0
=
ue
->
gh
[
1
+
ue
->
slsch
->
group_destination_id
][
ljmod10
<<
1
];
u1
=
ue
->
gh
[
ue
->
slsch
->
group_destination_id
][
1
+
(
ljmod10
<<
1
)];
u1
=
ue
->
gh
[
1
+
ue
->
slsch
->
group_destination_id
][
1
+
(
ljmod10
<<
1
)];
v0
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
v0
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
v1
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
v1
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
cyclic_shift0
=
(
ue
->
slsch
->
group_destination_id
>>
1
)
&
7
;
cyclic_shift0
=
(
ue
->
slsch
->
group_destination_id
>>
1
)
&
7
;
...
@@ -120,8 +120,8 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
...
@@ -120,8 +120,8 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
linc
=
(
7
-
frame_parms
->
Ncp
);
linc
=
(
7
-
frame_parms
->
Ncp
);
break
;
break
;
case
PSBCH
:
case
PSBCH
:
u0
=
ue
->
gh
[
ue
->
slsch
->
group_destination_id
][
ljmod10
<<
1
];
u0
=
ue
->
gh
[
0
][
ljmod10
<<
1
];
u1
=
ue
->
gh
[
ue
->
slsch
->
group_destination_id
][
1
+
(
ljmod10
<<
1
)];
u1
=
ue
->
gh
[
0
][
1
+
(
ljmod10
<<
1
)];
v0
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
v0
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
v1
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
v1
=
0
;
//frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
cyclic_shift0
=
(
ue
->
frame_parms
.
Nid_SL
>>
1
)
&
7
;
cyclic_shift0
=
(
ue
->
frame_parms
.
Nid_SL
>>
1
)
&
7
;
...
...
openair1/PHY/LTE_TRANSPORT/slss.c
View file @
06ff737c
...
@@ -44,7 +44,8 @@ void check_and_generate_slss(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
...
@@ -44,7 +44,8 @@ void check_and_generate_slss(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
int
tx_amp
;
int
tx_amp
;
LOG_I
(
PHY
,
"check_and_generate_slss: frame_tx %d, subframe_tx %d : slss->SL_offsetIndicator %d, slss->slmib_length %d
\n
"
,
frame_tx
,
subframe_tx
,
slss
->
SL_OffsetIndicator
,
slss
->
slmib_length
);
if
((((
10
*
frame_tx
)
+
subframe_tx
)
%
40
)
!=
slss
->
SL_OffsetIndicator
)
return
;
if
((((
10
*
frame_tx
)
+
subframe_tx
)
%
40
)
!=
slss
->
SL_OffsetIndicator
)
return
;
if
(
slss
->
slmib_length
==
0
)
return
;
if
(
slss
->
slmib_length
==
0
)
return
;
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
06ff737c
...
@@ -2347,7 +2347,10 @@ void phy_procedures_UE_SL_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) {
...
@@ -2347,7 +2347,10 @@ void phy_procedures_UE_SL_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) {
SLDCH_t
*
sldch
;
SLDCH_t
*
sldch
;
SLSCH_t
*
slsch
;
SLSCH_t
*
slsch
;
LOG_D
(
PHY
,
"****** start Sidelink TX-Chain for AbsSubframe %d.%d ******
\n
"
,
frame_tx
,
subframe_tx
);
AssertFatal
(
frame_tx
>=
0
&&
frame_tx
<
1024
,
"frame_tx %d is not in 0...1023
\n
"
);
AssertFatal
(
subframe_tx
>=
0
&&
subframe_tx
<
10
,
"frame_tx %d is not in 0...1023
\n
"
);
LOG_I
(
PHY
,
"****** start Sidelink TX-Chain for AbsSubframe %d.%d ******
\n
"
,
frame_tx
,
subframe_tx
);
// check for SLBCH/SLSS
// check for SLBCH/SLSS
if
((
ue
->
slss
=
ue_get_slss
(
ue
->
Mod_id
,
ue
->
CC_id
,
frame_tx
,
subframe_tx
))
!=
NULL
)
check_and_generate_slss
(
ue
,
frame_tx
,
subframe_tx
);
if
((
ue
->
slss
=
ue_get_slss
(
ue
->
Mod_id
,
ue
->
CC_id
,
frame_tx
,
subframe_tx
))
!=
NULL
)
check_and_generate_slss
(
ue
,
frame_tx
,
subframe_tx
);
...
...
openair2/LAYER2/MAC/ue_procedures.c
View file @
06ff737c
...
@@ -3141,16 +3141,18 @@ int get_db_dl_PathlossChange(uint8_t dl_PathlossChange)
...
@@ -3141,16 +3141,18 @@ int get_db_dl_PathlossChange(uint8_t dl_PathlossChange)
SLSS_t
*
ue_get_slss
(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frame_tx
,
sub_frame_t
subframe_tx
)
{
SLSS_t
*
ue_get_slss
(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frame_tx
,
sub_frame_t
subframe_tx
)
{
UE_MAC_INST
*
ue
=
&
UE_mac_inst
[
Mod_id
];
UE_MAC_INST
*
ue
=
&
UE_mac_inst
[
Mod_id
];
SLSS_t
*
slss
=
&
UE_mac_inst
[
Mod_id
].
slss
;
SLSS_t
*
slss
=
&
UE_mac_inst
[
Mod_id
].
slss
;
// call RRC get check for SL-MIB
slss
->
slmib_length
=
mac_rrc_data_req_ue
(
Mod_id
,
CC_id
,
(
frame_tx
*
10
)
+
subframe_tx
,
MIBCH
,
1
,
slss
->
slmib
,
0
,
0
);
LOG_D
(
MAC
,
"frame_tx %d, subframe %d,slss->SL_OffsetIndicator %d
\n
"
,
frame_tx
,
subframe_tx
,
slss
->
SL_OffsetIndicator
);
if
((((
10
*
frame_tx
)
+
subframe_tx
)
%
40
)
!=
slss
->
SL_OffsetIndicator
)
slss
->
slmib_length
=
0
;
else
slss
->
slmib_length
=
mac_rrc_data_req_ue
(
Mod_id
,
CC_id
,
(
frame_tx
*
10
)
+
subframe_tx
,
MIBCH
,
1
,
slss
->
slmib
,
0
,
0
);
// call RRC get check for SL-MIB
return
(
slss
);
return
(
slss
);
}
}
...
@@ -3159,6 +3161,7 @@ SLDCH_t *ue_get_sldch(module_id_t Mod_id,int CC_id,frame_t frame_tx,sub_frame_t
...
@@ -3159,6 +3161,7 @@ SLDCH_t *ue_get_sldch(module_id_t Mod_id,int CC_id,frame_t frame_tx,sub_frame_t
UE_MAC_INST
*
ue
=
&
UE_mac_inst
[
Mod_id
];
UE_MAC_INST
*
ue
=
&
UE_mac_inst
[
Mod_id
];
SLDCH_t
*
sldch
=
&
UE_mac_inst
[
Mod_id
].
sldch
;
SLDCH_t
*
sldch
=
&
UE_mac_inst
[
Mod_id
].
sldch
;
sldch
->
payload_length
=
mac_rrc_data_req_ue
(
Mod_id
,
sldch
->
payload_length
=
mac_rrc_data_req_ue
(
Mod_id
,
CC_id
,
CC_id
,
frame_tx
,
frame_tx
,
...
...
openair2/RRC/LITE/L2_interface_ue.c
View file @
06ff737c
...
@@ -78,8 +78,8 @@ mac_rrc_data_req_ue(
...
@@ -78,8 +78,8 @@ mac_rrc_data_req_ue(
LOG_D
(
RRC
,
"[UE %d] Frame %d Filling CCCH SRB_ID %d
\n
"
,
Mod_idP
,
frameP
,
Srb_idP
);
LOG_D
(
RRC
,
"[UE %d] Frame %d Filling CCCH SRB_ID %d
\n
"
,
Mod_idP
,
frameP
,
Srb_idP
);
LOG_D
(
RRC
,
"[UE %d] Frame %d buffer_pP status %d,
\n
"
,
Mod_idP
,
frameP
,
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_indexP
].
Tx_buffer
.
payload_size
);
LOG_D
(
RRC
,
"[UE %d] Frame %d buffer_pP status %d,
\n
"
,
Mod_idP
,
frameP
,
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_indexP
].
Tx_buffer
.
payload_size
);
AssertFatal
(
Srb_idP
==
MIBCH
||
Srb_idP
==
CCCH
,
"SRB_id %d is not possible should be (MIBCH %d or CCCH
%d)
\n
"
,
AssertFatal
(
Srb_idP
==
MIBCH
||
Srb_idP
==
CCCH
||
Srb_idP
==
SL_DISCOVERY
,
"SRB_id %d is not possible should be (MIBCH %d or CCCH %d or SL_DISCOVERY
%d)
\n
"
,
Srb_idP
,
MIBCH
,
CCCH
);
Srb_idP
,
MIBCH
,
CCCH
,
SL_DISCOVERY
);
if
(
Srb_idP
==
CCCH
&&
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_indexP
].
Tx_buffer
.
payload_size
>
0
)
{
if
(
Srb_idP
==
CCCH
&&
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_indexP
].
Tx_buffer
.
payload_size
>
0
)
{
...
@@ -120,8 +120,22 @@ mac_rrc_data_req_ue(
...
@@ -120,8 +120,22 @@ mac_rrc_data_req_ue(
memcpy
((
void
*
)
buffer_pP
,(
void
*
)
UE_rrc_inst
[
Mod_idP
].
SL_MIB
,
Ret_size
);
memcpy
((
void
*
)
buffer_pP
,(
void
*
)
UE_rrc_inst
[
Mod_idP
].
SL_MIB
,
Ret_size
);
return
(
Ret_size
);
return
(
Ret_size
);
}
}
#ifdef Rel14
AssertFatal
(
1
==
0
,
"Should never be here!
\n
"
);
//TTN (for D2D)
else
if
(
Srb_idP
==
SL_DISCOVERY
&&
UE_rrc_inst
[
Mod_idP
].
SL_Discovery
[
eNB_indexP
].
Tx_buffer
.
payload_size
>
0
){
LOG_D
(
RRC
,
"[UE %d] Frame %d Filling SL DISCOVERY SRB_ID %d
\n
"
,
Mod_idP
,
frameP
,
Srb_idP
);
LOG_D
(
RRC
,
"[UE %d] Frame %d buffer_pP status %d,
\n
"
,
Mod_idP
,
frameP
,
UE_rrc_inst
[
Mod_idP
].
SL_Discovery
[
eNB_indexP
].
Tx_buffer
.
payload_size
);
memcpy
(
&
buffer_pP
[
0
],
&
UE_rrc_inst
[
Mod_idP
].
SL_Discovery
[
eNB_indexP
].
Tx_buffer
.
Payload
[
0
],
UE_rrc_inst
[
Mod_idP
].
SL_Discovery
[
eNB_indexP
].
Tx_buffer
.
payload_size
);
uint8_t
Ret_size
=
UE_rrc_inst
[
Mod_idP
].
SL_Discovery
[
eNB_indexP
].
Tx_buffer
.
payload_size
;
LOG_D
(
RRC
,
"[UE %d] Sending SL_Discovery, size %d bytes
\n
"
,
Mod_idP
,
Ret_size
);
UE_rrc_inst
[
Mod_idP
].
SL_Discovery
[
eNB_indexP
].
Tx_buffer
.
payload_size
=
0
;
return
(
Ret_size
);
}
#endif
return
(
0
);
return
(
0
);
}
}
...
...
openair2/RRC/LITE/MESSAGES/asn1_msg.c
View file @
06ff737c
...
@@ -324,8 +324,8 @@ uint8_t do_MIB_SL(const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,
...
@@ -324,8 +324,8 @@ uint8_t do_MIB_SL(const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,
//set FrameNumber, subFrameNumber
//set FrameNumber, subFrameNumber
sl_mib
->
message
.
directFrameNumber_r12
.
buf
=
&
frame
;
sl_mib
->
message
.
directFrameNumber_r12
.
buf
=
&
frame
;
sl_mib
->
message
.
directFrameNumber_r12
.
size
=
1
;
sl_mib
->
message
.
directFrameNumber_r12
.
size
=
2
;
sl_mib
->
message
.
directFrameNumber_r12
.
bits_unused
=
0
;
sl_mib
->
message
.
directFrameNumber_r12
.
bits_unused
=
6
;
sl_mib
->
message
.
directSubframeNumber_r12
=
subframe
;
sl_mib
->
message
.
directSubframeNumber_r12
=
subframe
;
...
@@ -335,7 +335,7 @@ uint8_t do_MIB_SL(const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,
...
@@ -335,7 +335,7 @@ uint8_t do_MIB_SL(const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_SBCCH_SL_BCH_Message
,
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_SBCCH_SL_BCH_Message
,
(
void
*
)
sl_mib
,
(
void
*
)
sl_mib
,
UE
->
SL_MIB
,
UE
->
SL_MIB
,
24
);
40
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
06ff737c
...
@@ -528,10 +528,10 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
...
@@ -528,10 +528,10 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
if
(
u_sf_mode
!=
2
)
{
// not replay mode
if
(
u_sf_mode
!=
2
)
{
// not replay mode
#endif
#endif
#if defined(__x86_64) || defined(__i386__)
#if defined(__x86_64) || defined(__i386__)
#ifdef __AVX2__
#ifdef __AVX2__
nsamps2
=
(
nsamps
+
7
)
>>
3
;
nsamps2
=
(
nsamps
+
7
)
>>
3
;
__m256i
buff_tmp
[
2
][
nsamps2
];
__m256i
buff_tmp
[
2
][
nsamps2
];
#else
#else
nsamps2
=
(
nsamps
+
3
)
>>
2
;
nsamps2
=
(
nsamps
+
3
)
>>
2
;
__m128i
buff_tmp
[
2
][
nsamps2
];
__m128i
buff_tmp
[
2
][
nsamps2
];
#endif
#endif
...
@@ -563,12 +563,12 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
...
@@ -563,12 +563,12 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
for
(
int
j
=
0
;
j
<
nsamps2
;
j
++
)
{
for
(
int
j
=
0
;
j
<
nsamps2
;
j
++
)
{
#if defined(__x86_64__) || defined(__i386__)
#if defined(__x86_64__) || defined(__i386__)
#ifdef __AVX2__
#ifdef __AVX2__
((
__m256i
*
)
buff
[
i
])[
j
]
=
_mm256_srai_epi16
(
buff_tmp
[
i
][
j
],
4
);
((
__m256i
*
)
buff
[
i
])[
j
]
=
_mm256_srai_epi16
(
buff_tmp
[
i
][
j
],
4
);
#else
#else
((
__m128i
*
)
buff
[
i
])[
j
]
=
_mm_srai_epi16
(
buff_tmp
[
i
][
j
],
4
);
((
__m128i
*
)
buff
[
i
])[
j
]
=
_mm_srai_epi16
(
buff_tmp
[
i
][
j
],
4
);
#endif
#endif
#elif defined(__arm__)
#elif defined(__arm__)
((
int16x8_t
*
)
buff
[
i
])[
j
]
=
vshrq_n_s16
(
buff_tmp
[
i
][
j
],
4
);
((
int16x8_t
*
)
buff
[
i
])[
j
]
=
vshrq_n_s16
(
buff_tmp
[
i
][
j
],
4
);
#endif
#endif
}
}
}
}
...
...
targets/RT/USER/lte-softmodem.h
View file @
06ff737c
...
@@ -265,7 +265,7 @@ extern void set_function_spec_param(RU_t *ru);
...
@@ -265,7 +265,7 @@ extern void set_function_spec_param(RU_t *ru);
extern
int
setup_ue_buffers
(
PHY_VARS_UE
**
phy_vars_ue
,
openair0_config_t
*
openair0_cfg
);
extern
int
setup_ue_buffers
(
PHY_VARS_UE
**
phy_vars_ue
,
openair0_config_t
*
openair0_cfg
);
extern
void
fill_ue_band_info
(
void
);
extern
void
fill_ue_band_info
(
void
);
extern
void
init_UE
(
int
,
int
,
int
,
int
,
int
,
int
);
extern
void
init_UE
(
int
,
int
,
int
,
int
,
int
,
int
,
int
);
extern
void
init_thread
(
int
sched_runtime
,
int
sched_deadline
,
int
sched_fifo
,
cpu_set_t
*
cpuset
,
char
*
name
);
extern
void
init_thread
(
int
sched_runtime
,
int
sched_deadline
,
int
sched_fifo
,
cpu_set_t
*
cpuset
,
char
*
name
);
extern
void
reset_opp_meas
(
void
);
extern
void
reset_opp_meas
(
void
);
...
...
targets/RT/USER/lte-ue.c
View file @
06ff737c
...
@@ -80,7 +80,7 @@ void *UE_thread(void *arg);
...
@@ -80,7 +80,7 @@ void *UE_thread(void *arg);
void
*
UE_threadSL
(
void
*
arg
);
void
*
UE_threadSL
(
void
*
arg
);
void
init_UE_stub
(
int
nb_inst
,
int
,
int
,
char
*
,
int
);
void
init_UE_stub
(
int
nb_inst
,
int
,
int
,
char
*
,
int
);
void
ue_stub_rx_handler
(
unsigned
int
,
char
*
);
void
ue_stub_rx_handler
(
unsigned
int
,
char
*
);
void
init_UE
(
int
nb_inst
,
int
,
int
,
int
,
int
,
int
);
void
init_UE
(
int
nb_inst
,
int
,
int
,
int
,
int
,
int
,
int
);
int32_t
**
rxdata
;
int32_t
**
rxdata
;
int32_t
**
txdata
;
int32_t
**
txdata
;
...
@@ -221,7 +221,7 @@ void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_
...
@@ -221,7 +221,7 @@ void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_
}
}
void
init_UE
(
int
nb_inst
,
int
eMBMS_active
,
int
uecap_xer_in
,
int
timing_correction
,
int
sidelink_active
,
int
SLonly
)
{
void
init_UE
(
int
nb_inst
,
int
eMBMS_active
,
int
uecap_xer_in
,
int
timing_correction
,
int
sidelink_active
,
int
SLonly
,
int
isSynchRef
)
{
PHY_VARS_UE
*
UE
;
PHY_VARS_UE
*
UE
;
int
inst
;
int
inst
;
...
@@ -241,6 +241,8 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti
...
@@ -241,6 +241,8 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti
PHY_vars_UE_g
[
inst
][
0
]
->
no_timing_correction
=
timing_correction
;
PHY_vars_UE_g
[
inst
][
0
]
->
no_timing_correction
=
timing_correction
;
PHY_vars_UE_g
[
inst
][
0
]
->
SLonly
=
SLonly
;
PHY_vars_UE_g
[
inst
][
0
]
->
SLonly
=
SLonly
;
PHY_vars_UE_g
[
inst
][
0
]
->
is_SynchRef
=
isSynchRef
;
if
(
SLonly
==
1
)
PHY_vars_UE_g
[
inst
][
0
]
->
sidelink_active
=
1
;
if
(
SLonly
==
1
)
PHY_vars_UE_g
[
inst
][
0
]
->
sidelink_active
=
1
;
else
PHY_vars_UE_g
[
inst
][
0
]
->
sidelink_active
=
sidelink_active
;
else
PHY_vars_UE_g
[
inst
][
0
]
->
sidelink_active
=
sidelink_active
;
LOG_I
(
PHY
,
"Intializing UE Threads for instance %d (%p,%p)...
\n
"
,
inst
,
PHY_vars_UE_g
[
inst
],
PHY_vars_UE_g
[
inst
][
0
]);
LOG_I
(
PHY
,
"Intializing UE Threads for instance %d (%p,%p)...
\n
"
,
inst
,
PHY_vars_UE_g
[
inst
],
PHY_vars_UE_g
[
inst
][
0
]);
...
@@ -689,9 +691,8 @@ static void *UE_thread_synchSL(void *arg)
...
@@ -689,9 +691,8 @@ static void *UE_thread_synchSL(void *arg)
pthread_cond_wait
(
&
sync_cond
,
&
sync_mutex
);
pthread_cond_wait
(
&
sync_cond
,
&
sync_mutex
);
pthread_mutex_unlock
(
&
sync_mutex
);
pthread_mutex_unlock
(
&
sync_mutex
);
printf
(
"Started device, unlocked sync_mutex (UE_sync_thread)
\n
"
);
AssertFatal
(
UE
->
rfdevice
.
trx_start_func
(
&
UE
->
rfdevice
)
==
0
,
"Could not start the device"
);
while
(
oai_exit
==
0
)
{
while
(
oai_exit
==
0
)
{
AssertFatal
(
0
==
pthread_mutex_lock
(
&
UE
->
proc
.
mutex_synchSL
),
""
);
AssertFatal
(
0
==
pthread_mutex_lock
(
&
UE
->
proc
.
mutex_synchSL
),
""
);
...
@@ -743,6 +744,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
...
@@ -743,6 +744,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
exit_fun
(
"nothing to add"
);
exit_fun
(
"nothing to add"
);
}
}
LOG_I
(
PHY
,
"before pthread_cond_wait : instance_cnt_rxtx %d
\n
"
,
proc
->
instance_cnt_rxtx
);
while
(
proc
->
instance_cnt_rxtx
<
0
)
{
while
(
proc
->
instance_cnt_rxtx
<
0
)
{
// most of the time, the thread is waiting here
// most of the time, the thread is waiting here
pthread_cond_wait
(
&
proc
->
cond_rxtx
,
&
proc
->
mutex_rxtx
);
pthread_cond_wait
(
&
proc
->
cond_rxtx
,
&
proc
->
mutex_rxtx
);
...
@@ -840,15 +842,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
...
@@ -840,15 +842,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
phy_procedures_UE_S_TX
(
UE
,
0
,
0
,
no_relay
);
phy_procedures_UE_S_TX
(
UE
,
0
,
0
,
no_relay
);
updateTimes
(
current
,
&
t3
,
10000
,
"Delay to process sub-frame (case 3)"
);
updateTimes
(
current
,
&
t3
,
10000
,
"Delay to process sub-frame (case 3)"
);
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
exit_fun
(
"noting to add"
);
}
proc
->
instance_cnt_rxtx
--
;
if
(
pthread_mutex_unlock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error unlocking mutex for UE RXTX
\n
"
);
exit_fun
(
"noting to add"
);
}
}
}
// This is for Sidelink
// This is for Sidelink
...
@@ -859,6 +853,16 @@ static void *UE_thread_rxn_txnp4(void *arg) {
...
@@ -859,6 +853,16 @@ static void *UE_thread_rxn_txnp4(void *arg) {
phy_procedures_UE_SL_TX
(
UE
,
proc
);
phy_procedures_UE_SL_TX
(
UE
,
proc
);
}
}
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
exit_fun
(
"noting to add"
);
}
proc
->
instance_cnt_rxtx
--
;
if
(
pthread_mutex_unlock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error unlocking mutex for UE RXTX
\n
"
);
exit_fun
(
"noting to add"
);
}
}
}
// thread finished
// thread finished
free
(
arg
);
free
(
arg
);
...
@@ -1015,7 +1019,7 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) {
...
@@ -1015,7 +1019,7 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) {
proc
->
subframe_rx
=
timer_subframe
;
proc
->
subframe_rx
=
timer_subframe
;
proc
->
frame_rx
=
timer_frame
;
proc
->
frame_rx
=
timer_frame
;
proc
->
subframe_tx
=
(
timer_subframe
+
4
)
%
10
;
proc
->
subframe_tx
=
(
timer_subframe
+
4
)
%
10
;
proc
->
frame_tx
=
proc
->
frame_rx
+
(
proc
->
subframe_rx
>
5
?
1
:
0
)
;
proc
->
frame_tx
=
(
proc
->
frame_rx
+
(
proc
->
subframe_rx
>
5
?
1
:
0
))
&
1023
;
//oai_subframe_ind(proc->frame_rx, proc->subframe_rx);
//oai_subframe_ind(proc->frame_rx, proc->subframe_rx);
...
@@ -1439,7 +1443,7 @@ void *UE_thread(void *arg) {
...
@@ -1439,7 +1443,7 @@ void *UE_thread(void *arg) {
}
}
proc
->
subframe_rx
=
sub_frame
;
proc
->
subframe_rx
=
sub_frame
;
proc
->
subframe_tx
=
(
sub_frame
+
4
)
%
10
;
proc
->
subframe_tx
=
(
sub_frame
+
4
)
%
10
;
proc
->
frame_tx
=
proc
->
frame_rx
+
(
proc
->
subframe_rx
>
5
?
1
:
0
)
;
proc
->
frame_tx
=
(
proc
->
frame_rx
+
(
proc
->
subframe_rx
>
5
?
1
:
0
))
&
1023
;
proc
->
timestamp_tx
=
timestamp
+
proc
->
timestamp_tx
=
timestamp
+
(
4
*
UE
->
frame_parms
.
samples_per_tti
)
-
(
4
*
UE
->
frame_parms
.
samples_per_tti
)
-
UE
->
frame_parms
.
ofdm_symbol_size
-
UE
->
frame_parms
.
nb_prefix_samples0
;
UE
->
frame_parms
.
ofdm_symbol_size
-
UE
->
frame_parms
.
nb_prefix_samples0
;
...
@@ -1641,12 +1645,23 @@ void *UE_threadSL(void *arg) {
...
@@ -1641,12 +1645,23 @@ void *UE_threadSL(void *arg) {
int
sub_frame
=-
1
;
int
sub_frame
=-
1
;
//int cumulated_shift=0;
//int cumulated_shift=0;
UE
->
proc
.
instance_cnt_synchSL
=-
1
;
while
(
sync_var
<
0
)
pthread_cond_wait
(
&
sync_cond
,
&
sync_mutex
);
pthread_mutex_unlock
(
&
sync_mutex
);
AssertFatal
(
UE
->
rfdevice
.
trx_start_func
(
&
UE
->
rfdevice
)
==
0
,
"Could not start the device"
);
while
(
!
oai_exit
)
{
while
(
!
oai_exit
)
{
AssertFatal
(
0
==
pthread_mutex_lock
(
&
UE
->
proc
.
mutex_synch
),
""
);
AssertFatal
(
0
==
pthread_mutex_lock
(
&
UE
->
proc
.
mutex_synch
),
""
);
int
instance_cnt_synch
=
UE
->
proc
.
instance_cnt_synchSL
;
int
instance_cnt_synch
=
UE
->
proc
.
instance_cnt_synchSL
;
int
is_synchronized
=
UE
->
is_synchronizedSL
;
int
is_synchronized
=
UE
->
is_synchronizedSL
;
AssertFatal
(
0
==
pthread_mutex_unlock
(
&
UE
->
proc
.
mutex_synch
),
""
);
AssertFatal
(
0
==
pthread_mutex_unlock
(
&
UE
->
proc
.
mutex_synch
),
""
);
LOG_I
(
PHY
,
"UHD Thread SL (is_synchronized %d, is_SynchRef %d
\n
"
,
is_synchronized
,
UE
->
is_SynchRef
);
if
(
is_synchronized
==
0
&&
UE
->
is_SynchRef
==
0
)
{
if
(
is_synchronized
==
0
&&
UE
->
is_SynchRef
==
0
)
{
if
(
instance_cnt_synch
<
0
)
{
// we can invoke the synch
if
(
instance_cnt_synch
<
0
)
{
// we can invoke the synch
// grab 10 ms of signal and wakeup synch thread
// grab 10 ms of signal and wakeup synch thread
...
@@ -1710,7 +1725,7 @@ void *UE_threadSL(void *arg) {
...
@@ -1710,7 +1725,7 @@ void *UE_threadSL(void *arg) {
// update thread index for received subframe
// update thread index for received subframe
UE
->
current_thread_id
[
sub_frame
]
=
thread_idx
;
UE
->
current_thread_id
[
sub_frame
]
=
thread_idx
;
LOG_
D
(
PHY
,
"Process
Subframe %d thread Idx %d
\n
"
,
sub_frame
,
UE
->
current_thread_id
[
sub_frame
]);
LOG_
I
(
PHY
,
"Process SL
Subframe %d thread Idx %d
\n
"
,
sub_frame
,
UE
->
current_thread_id
[
sub_frame
]);
thread_idx
++
;
thread_idx
++
;
if
(
thread_idx
>=
RX_NB_TH
)
if
(
thread_idx
>=
RX_NB_TH
)
...
@@ -1756,13 +1771,17 @@ void *UE_threadSL(void *arg) {
...
@@ -1756,13 +1771,17 @@ void *UE_threadSL(void *arg) {
readBlockSize
=
UE
->
frame_parms
.
samples_per_tti
-
UE
->
rx_offset_diff
;
readBlockSize
=
UE
->
frame_parms
.
samples_per_tti
-
UE
->
rx_offset_diff
;
writeBlockSize
=
UE
->
frame_parms
.
samples_per_tti
-
UE
->
rx_offset_diff
;
writeBlockSize
=
UE
->
frame_parms
.
samples_per_tti
-
UE
->
rx_offset_diff
;
}
}
LOG_D
(
PHY
,
"reading rxp[0] %p (%p)
\n
"
,
rxp
[
0
],
UE
->
common_vars
.
rxdata
[
0
]);
AssertFatal
(
readBlockSize
==
AssertFatal
(
readBlockSize
==
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
timestamp
,
&
timestamp
,
rxp
,
rxp
,
readBlockSize
,
readBlockSize
,
UE
->
frame_parms
.
nb_antennas_rx
),
""
);
UE
->
frame_parms
.
nb_antennas_rx
),
""
);
LOG_D
(
PHY
,
"writing txp[0] %p (%p)
\n
"
,
txp
[
0
],
UE
->
common_vars
.
txdata
[
0
]);
AssertFatal
(
writeBlockSize
==
AssertFatal
(
writeBlockSize
==
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
timestamp
+
timestamp
+
...
@@ -1792,11 +1811,11 @@ void *UE_threadSL(void *arg) {
...
@@ -1792,11 +1811,11 @@ void *UE_threadSL(void *arg) {
}
}
proc
->
subframe_rx
=
sub_frame
;
proc
->
subframe_rx
=
sub_frame
;
proc
->
subframe_tx
=
(
sub_frame
+
4
)
%
10
;
proc
->
subframe_tx
=
(
sub_frame
+
4
)
%
10
;
proc
->
frame_tx
=
proc
->
frame_rx
+
(
proc
->
subframe_rx
>
5
?
1
:
0
)
;
proc
->
frame_tx
=
(
proc
->
frame_rx
+
(
proc
->
subframe_rx
>
5
?
1
:
0
))
&
1023
;
proc
->
timestamp_tx
=
timestamp
+
(
4
*
UE
->
frame_parms
.
samples_per_tti
);
proc
->
timestamp_tx
=
timestamp
+
(
4
*
UE
->
frame_parms
.
samples_per_tti
);
proc
->
instance_cnt_rxtx
++
;
proc
->
instance_cnt_rxtx
++
;
LOG_
D
(
PHY
,
"[SCHED][UE %d] UE RX instance_cnt_rxtx %d subframe %d !!
\n
"
,
UE
->
Mod_id
,
proc
->
instance_cnt_rxtx
,
proc
->
subframe_rx
);
LOG_
I
(
PHY
,
"[SCHED][UE %d] UE RX instance_cnt_rxtx %d subframe %d !!
\n
"
,
UE
->
Mod_id
,
proc
->
instance_cnt_rxtx
,
proc
->
subframe_rx
);
if
(
proc
->
instance_cnt_rxtx
==
0
)
{
if
(
proc
->
instance_cnt_rxtx
==
0
)
{
if
(
pthread_cond_signal
(
&
proc
->
cond_rxtx
)
!=
0
)
{
if
(
pthread_cond_signal
(
&
proc
->
cond_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread
\n
"
,
UE
->
Mod_id
);
LOG_E
(
PHY
,
"[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread
\n
"
,
UE
->
Mod_id
);
...
@@ -1814,6 +1833,7 @@ void *UE_threadSL(void *arg) {
...
@@ -1814,6 +1833,7 @@ void *UE_threadSL(void *arg) {
initStaticTime
(
lastTime
);
initStaticTime
(
lastTime
);
updateTimes
(
lastTime
,
&
t1
,
20000
,
"Delay between two IQ acquisitions (case 1)"
);
updateTimes
(
lastTime
,
&
t1
,
20000
,
"Delay between two IQ acquisitions (case 1)"
);
pickStaticTime
(
lastTime
);
pickStaticTime
(
lastTime
);
}
// UE->is_synchronized==0
}
// UE->is_synchronized==0
}
// start_rx_stream==1
}
// start_rx_stream==1
}
// UE->is_synchronized==0 && UE->is_SynchRef==0
}
// UE->is_synchronized==0 && UE->is_SynchRef==0
...
...
targets/RT/USER/lte-uesoftmodem.c
View file @
06ff737c
...
@@ -1038,7 +1038,7 @@ int main( int argc, char **argv )
...
@@ -1038,7 +1038,7 @@ int main( int argc, char **argv )
// start the main threads
// start the main threads
int
eMBMS_active
=
0
;
int
eMBMS_active
=
0
;
init_UE
(
1
,
eMBMS_active
,
uecap_xer_in
,
0
,
sidelink_active
,
SLonly
);
init_UE
(
1
,
eMBMS_active
,
uecap_xer_in
,
0
,
sidelink_active
,
SLonly
,
synchRef
);
if
(
phy_test
==
0
)
{
if
(
phy_test
==
0
)
{
printf
(
"Filling UE band info
\n
"
);
printf
(
"Filling UE band info
\n
"
);
...
...
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