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
Michael Black
OpenXG-RAN
Commits
c0568a99
Commit
c0568a99
authored
Mar 22, 2022
by
Laurent THOMAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix bugs, delete dead code
parent
2c86b745
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
51 additions
and
204 deletions
+51
-204
executables/nr-ue.c
executables/nr-ue.c
+12
-15
openair1/PHY/defs_RU.h
openair1/PHY/defs_RU.h
+0
-1
openair1/PHY/defs_UE.h
openair1/PHY/defs_UE.h
+0
-14
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+0
-3
openair1/SCHED_UE/phy_procedures_lte_ue.c
openair1/SCHED_UE/phy_procedures_lte_ue.c
+0
-106
openair2/RRC/LTE/rrc_UE.c
openair2/RRC/LTE/rrc_UE.c
+2
-1
targets/ARCH/rfsimulator/simulator.c
targets/ARCH/rfsimulator/simulator.c
+19
-53
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+18
-1
targets/RT/USER/lte-softmodem.h
targets/RT/USER/lte-softmodem.h
+0
-1
targets/RT/USER/lte-uesoftmodem.c
targets/RT/USER/lte-uesoftmodem.c
+0
-9
No files found.
executables/nr-ue.c
View file @
c0568a99
...
...
@@ -654,17 +654,15 @@ static void UE_synch(void *arg) {
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_freq
[
0
],
openair0_cfg
[
UE
->
rf_map
.
card
].
tx_freq
[
0
]);
if
(
UE
->
mode
!=
loop_through_memory
)
{
UE
->
rfdevice
.
trx_set_freq_func
(
&
UE
->
rfdevice
,
&
openair0_cfg
[
0
],
0
);
//UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]);
//UE->rfdevice.trx_stop_func(&UE->rfdevice);
// sleep(1);
/*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
LOG_E(HW,"Could not start the device\n");
oai_exit=1;
}*/
}
UE
->
rfdevice
.
trx_set_freq_func
(
&
UE
->
rfdevice
,
&
openair0_cfg
[
0
],
0
);
//UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]);
//UE->rfdevice.trx_stop_func(&UE->rfdevice);
// sleep(1);
/*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
LOG_E(HW,"Could not start the device\n");
oai_exit=1;
}*/
if
(
UE
->
UE_scan_carrier
==
1
)
{
UE
->
UE_scan_carrier
=
0
;
}
else
{
...
...
@@ -683,8 +681,7 @@ static void UE_synch(void *arg) {
LOG_I
(
PHY
,
"Initial sync failed: trying carrier off %d Hz
\n
"
,
freq_offset
);
if
(
UE
->
mode
!=
loop_through_memory
)
UE
->
rfdevice
.
trx_set_freq_func
(
&
UE
->
rfdevice
,
&
openair0_cfg
[
0
],
0
);
UE
->
rfdevice
.
trx_set_freq_func
(
&
UE
->
rfdevice
,
&
openair0_cfg
[
0
],
0
);
}
break
;
...
...
@@ -729,7 +726,7 @@ void processSlotTX(void *arg) {
stop_meas
(
&
UE
->
ue_ul_indication_stats
);
}
if
(
(
UE
->
mode
!=
loop_through_memory
)
&&
(
rxtxD
->
ue_sched_mode
!=
NOT_PUSCH
)
)
{
if
(
rxtxD
->
ue_sched_mode
!=
NOT_PUSCH
)
{
phy_procedures_nrUE_TX
(
UE
,
proc
,
0
);
}
}
...
...
@@ -873,7 +870,7 @@ void syncInFrame(PHY_VARS_NR_UE *UE, openair0_timestamp *timestamp) {
*
timestamp
+=
UE
->
frame_parms
.
get_samples_per_slot
(
1
,
&
UE
->
frame_parms
);
for
(
int
size
=
UE
->
rx_offset
;
size
>
0
;
size
-=
UE
->
frame_parms
.
samples_per_subframe
)
{
int
unitTransfer
=
size
>
UE
->
frame_parms
.
samples_per_subframe
?
UE
->
frame_parms
.
samples_per_subframe
:
size
;
// we write before read beca
su
e gNB waits for UE to write and both executions halt
// we write before read beca
us
e gNB waits for UE to write and both executions halt
// this happens here as the read size is samples_per_subframe which is very much larger than samp_per_slot
if
(
IS_SOFTMODEM_RFSIM
)
dummyWrite
(
UE
,
*
timestamp
,
unitTransfer
);
AssertFatal
(
unitTransfer
==
...
...
openair1/PHY/defs_RU.h
View file @
c0568a99
...
...
@@ -54,7 +54,6 @@ typedef enum {
no_L2_connect
=
5
,
calib_prach_tx
=
6
,
rx_dump_frame
=
7
,
loop_through_memory
=
8
}
runmode_t
;
/*! \brief Extension Type */
...
...
openair1/PHY/defs_UE.h
View file @
c0568a99
...
...
@@ -168,19 +168,6 @@ typedef struct {
struct
sched_param
sched_param_ue
;
/// pthread descriptor main UE thread
pthread_t
pthread_ue
;
/// \brief Instance count for synch thread.
/// \internal This variable is protected by \ref mutex_synch.
int
instance_cnt_synch
;
/// pthread attributes for synch processing thread
pthread_attr_t
attr_synch
;
/// scheduling parameters for synch thread
struct
sched_param
sched_param_synch
;
/// pthread descriptor synch thread
pthread_t
pthread_synch
;
/// condition variable for UE synch thread;
pthread_cond_t
cond_synch
;
/// mutex for UE synch thread
pthread_mutex_t
mutex_synch
;
/// instance count for eNBs
int
instance_cnt_eNBs
;
/// set of scheduling variables RXn-TXnp4 threads
...
...
@@ -833,7 +820,6 @@ typedef struct {
pthread_mutex_t
timer_mutex
;
pthread_cond_t
timer_cond
;
int
instance_cnt_timer
;
/// RF and Interface devices per CC
openair0_device
rfdevice
;
...
...
openair1/PHY/defs_gNB.h
View file @
c0568a99
...
...
@@ -589,9 +589,6 @@ typedef struct gNB_L1_proc_t_s {
int
instance_cnt_te
;
/// \internal This variable is protected by \ref mutex_prach.
int
instance_cnt_prach
;
// instance count for over-the-air gNB synchronization
int
instance_cnt_synch
;
/// \internal This variable is protected by \ref mutex_asynch_rxtx.
int
instance_cnt_asynch_rxtx
;
/// pthread structure for eNB single processing thread
...
...
openair1/SCHED_UE/phy_procedures_lte_ue.c
View file @
c0568a99
...
...
@@ -4870,109 +4870,3 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
LOG_D
(
PHY
,
" ****** end RX-Chain for AbsSubframe %d.%d ******
\n
"
,
frame_rx
%
1024
,
subframe_rx
);
return
(
0
);
}
void
phy_procedures_UE_lte
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
,
uint8_t
do_pdcch_flag
,
runmode_t
mode
)
{
MessageDef
*
msg_p
;
int
result
;
int
frame_rx
=
proc
->
frame_rx
;
int
frame_tx
=
proc
->
frame_tx
;
int
subframe_rx
=
proc
->
subframe_rx
;
int
subframe_tx
=
proc
->
subframe_tx
;
UE_L2_STATE_t
ret
;
int
slot
;
if
(
ue
->
mac_enabled
==
0
)
{
ue
->
UE_mode
[
eNB_id
]
=
PUSCH
;
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE
,
1
);
if
(
LOG_DEBUGFLAG
(
UE_TIMING
))
{
start_meas
(
&
ue
->
phy_proc
[
ue
->
current_thread_id
[
subframe_rx
]]);
}
do
{
// Checks if a message has been sent to PHY sub-task
itti_poll_msg
(
TASK_PHY_UE
,
&
msg_p
);
if
(
msg_p
!=
NULL
)
{
switch
(
ITTI_MSG_ID
(
msg_p
))
{
case
PHY_FIND_CELL_REQ
:
LOG_I
(
PHY
,
"[UE ] Received %s
\n
"
,
ITTI_MSG_NAME
(
msg_p
));
/* TODO process the message */
break
;
default:
LOG_E
(
PHY
,
"[UE %ld] Received unexpected message %s
\n
"
,
ITTI_MSG_DESTINATION_INSTANCE
(
msg_p
),
ITTI_MSG_NAME
(
msg_p
));
break
;
}
result
=
itti_free
(
ITTI_MSG_ORIGIN_ID
(
msg_p
),
msg_p
);
AssertFatal
(
result
==
EXIT_SUCCESS
,
"Failed to free memory (%d)!
\n
"
,
result
);
}
}
while
(
msg_p
!=
NULL
);
for
(
slot
=
0
;
slot
<
2
;
slot
++
)
{
if
((
subframe_select
(
&
ue
->
frame_parms
,
subframe_tx
)
==
SF_UL
)
||
(
ue
->
frame_parms
.
frame_type
==
FDD
))
{
phy_procedures_UE_TX
(
ue
,
proc
,
eNB_id
,
abstraction_flag
,
mode
);
}
if
((
subframe_select
(
&
ue
->
frame_parms
,
subframe_rx
)
==
SF_DL
)
||
(
ue
->
frame_parms
.
frame_type
==
FDD
))
{
phy_procedures_UE_RX
(
ue
,
proc
,
eNB_id
,
abstraction_flag
,
do_pdcch_flag
,
mode
);
}
if
((
subframe_select
(
&
ue
->
frame_parms
,
subframe_tx
)
==
SF_S
)
&&
(
slot
==
1
))
{
phy_procedures_UE_S_TX
(
ue
,
eNB_id
,
abstraction_flag
);
}
if
((
subframe_select
(
&
ue
->
frame_parms
,
subframe_rx
)
==
SF_S
)
&&
(
slot
==
0
))
{
phy_procedures_UE_RX
(
ue
,
proc
,
eNB_id
,
abstraction_flag
,
do_pdcch_flag
,
mode
);
}
if
(
ue
->
mac_enabled
==
1
)
{
if
(
slot
==
0
)
{
//LOG_I(PHY,"[UE %d] Frame %d, subframe %d, star ue_scheduler\n", ue->Mod_id,frame_rx,subframe_tx);
ret
=
ue_scheduler
(
ue
->
Mod_id
,
frame_rx
,
subframe_rx
,
frame_tx
,
subframe_tx
,
subframe_select
(
&
ue
->
frame_parms
,
subframe_tx
),
eNB_id
,
0
/*FIXME CC_id*/
);
if
(
ret
==
CONNECTION_LOST
)
{
LOG_E
(
PHY
,
"[UE %d] Frame %d, subframe %d RRC Connection lost, returning to PRACH
\n
"
,
ue
->
Mod_id
,
frame_rx
,
subframe_tx
);
ue
->
UE_mode
[
eNB_id
]
=
PRACH
;
// mac_xface->macphy_exit("Connection lost");
}
else
if
(
ret
==
PHY_RESYNCH
)
{
LOG_E
(
PHY
,
"[UE %d] Frame %d, subframe %d RRC Connection lost, trying to resynch
\n
"
,
ue
->
Mod_id
,
frame_rx
,
subframe_tx
);
ue
->
UE_mode
[
eNB_id
]
=
RESYNCH
;
// mac_xface->macphy_exit("Connection lost");
}
else
if
(
ret
==
PHY_HO_PRACH
)
{
LOG_I
(
PHY
,
"[UE %d] Frame %d, subframe %d, return to PRACH and perform a contention-free access
\n
"
,
ue
->
Mod_id
,
frame_rx
,
subframe_tx
);
ue
->
UE_mode
[
eNB_id
]
=
PRACH
;
}
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE
,
0
);
if
(
LOG_DEBUGFLAG
(
UE_TIMING
))
{
stop_meas
(
&
ue
->
phy_proc
[
ue
->
current_thread_id
[
subframe_rx
]]);
}
}
// slot
}
openair2/RRC/LTE/rrc_UE.c
View file @
c0568a99
...
...
@@ -3175,7 +3175,8 @@ int decode_SIB1( const protocol_ctxt_t *const ctxt_pP, const uint8_t eNB_index,
const
size_t
num_plmn_data
=
sizeof
(
plmn_data
)
/
sizeof
(
plmn_data
[
0
]);
for
(
size_t
plmn_ind
=
0
;;
++
plmn_ind
)
{
if
(
plmn_ind
==
num_plmn_data
)
{
LOG_E
(
RRC
,
"Did not find name from internal table for %u %u
\n
"
,
mcc
,
mnc
);
LOG_W
(
RRC
,
"Did not find operator name from internal table for MCC %0*d, MNC %0*d
\n
"
,
mccdigits
,
mcc
,
mncdigits
,
mnc
);
break
;
}
if
((
plmn_data
[
plmn_ind
].
mcc
==
mcc
)
&&
(
plmn_data
[
plmn_ind
].
mnc
==
mnc
))
{
...
...
targets/ARCH/rfsimulator/simulator.c
View file @
c0568a99
...
...
@@ -117,7 +117,7 @@ typedef struct buffer_s {
typedef
struct
{
int
listen_sock
,
epollfd
;
openair0_timestamp
next
Time
stamp
;
openair0_timestamp
next
RxT
stamp
;
openair0_timestamp
lastWroteTS
;
uint64_t
typeStamp
;
char
*
ip
;
...
...
@@ -196,7 +196,7 @@ static void removeCirBuf(rfsimulator_state_t *bridge, int sock) {
free
(
bridge
->
buf
[
sock
].
circularBuf
);
// Fixme: no free_channel_desc_scm(bridge->buf[sock].channel_model) implemented
// a lot of mem leaks
free
(
bridge
->
buf
[
sock
].
channel_model
);
//
free(bridge->buf[sock].channel_model);
memset
(
&
bridge
->
buf
[
sock
],
0
,
sizeof
(
buffer_t
));
bridge
->
buf
[
sock
].
conn_sock
=-
1
;
}
...
...
@@ -429,8 +429,6 @@ static int rfsimulator_write_internal(rfsimulator_state_t *t, openair0_timestamp
if
(
!
alreadyLocked
)
pthread_mutex_lock
(
&
Sockmutex
);
LOG_D
(
HW
,
"sending %d samples at time: %ld
\n
"
,
nsamps
,
timestamp
);
for
(
int
i
=
0
;
i
<
FD_SETSIZE
;
i
++
)
{
buffer_t
*
b
=&
t
->
buf
[
i
];
...
...
@@ -549,14 +547,14 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
(
t
->
typeStamp
==
ENB_MAGICDL
&&
b
->
th
.
magic
==
UE_MAGICDL
),
"Socket Error in protocol"
);
b
->
headerMode
=
false
;
if
(
t
->
next
Time
stamp
==
0
)
{
// First block in UE, resync with the eNB current TS
t
->
next
Time
stamp
=
b
->
th
.
timestamp
>
nsamps_for_initial
?
if
(
t
->
next
RxT
stamp
==
0
)
{
// First block in UE, resync with the eNB current TS
t
->
next
RxT
stamp
=
b
->
th
.
timestamp
>
nsamps_for_initial
?
b
->
th
.
timestamp
-
nsamps_for_initial
:
0
;
b
->
lastReceivedTS
=
b
->
th
.
timestamp
>
nsamps_for_initial
?
b
->
th
.
timestamp
:
nsamps_for_initial
;
LOG_W
(
HW
,
"UE got first timestamp: starting at %lu
\n
"
,
t
->
next
Time
stamp
);
LOG_W
(
HW
,
"UE got first timestamp: starting at %lu
\n
"
,
t
->
next
RxT
stamp
);
b
->
trashingPacket
=
true
;
}
else
if
(
b
->
lastReceivedTS
<
b
->
th
.
timestamp
)
{
int
nbAnt
=
b
->
th
.
nbAnt
;
...
...
@@ -623,7 +621,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest
}
rfsimulator_state_t
*
t
=
device
->
priv
;
LOG_D
(
HW
,
"Enter rfsimulator_read, expect %d samples, will release at TS: %ld
\n
"
,
nsamps
,
t
->
next
Time
stamp
+
nsamps
);
LOG_D
(
HW
,
"Enter rfsimulator_read, expect %d samples, will release at TS: %ld
\n
"
,
nsamps
,
t
->
next
RxT
stamp
+
nsamps
);
// deliver data from received data
// check if a UE is connected
int
first_sock
;
...
...
@@ -634,54 +632,22 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest
if
(
first_sock
==
FD_SETSIZE
)
{
// no connected device (we are eNB, no UE is connected)
if
(
t
->
next
Time
stamp
==
0
)
if
(
t
->
next
RxT
stamp
==
0
)
LOG_W
(
HW
,
"No connected device, generating void samples...
\n
"
);
if
(
!
flushInput
(
t
,
10
,
nsamps
))
{
for
(
int
x
=
0
;
x
<
nbAnt
;
x
++
)
memset
(
samplesVoid
[
x
],
0
,
sampleToByte
(
nsamps
,
1
));
t
->
next
Time
stamp
+=
nsamps
;
t
->
next
RxT
stamp
+=
nsamps
;
if
(
((
t
->
next
Time
stamp
/
nsamps
)
%
100
)
==
0
)
LOG_D
(
HW
,
"No UE, Generated void samples for Rx: %ld
\n
"
,
t
->
next
Time
stamp
);
if
(
((
t
->
next
RxT
stamp
/
nsamps
)
%
100
)
==
0
)
LOG_D
(
HW
,
"No UE, Generated void samples for Rx: %ld
\n
"
,
t
->
next
RxT
stamp
);
*
ptimestamp
=
t
->
next
Time
stamp
-
nsamps
;
*
ptimestamp
=
t
->
next
RxT
stamp
-
nsamps
;
return
nsamps
;
}
}
else
{
pthread_mutex_lock
(
&
Sockmutex
);
if
(
t
->
nextTimestamp
>
0
&&
t
->
lastWroteTS
<
t
->
nextTimestamp
)
{
pthread_mutex_unlock
(
&
Sockmutex
);
usleep
(
10000
);
pthread_mutex_lock
(
&
Sockmutex
);
if
(
t
->
lastWroteTS
<
t
->
nextTimestamp
)
{
// Assuming Tx is not done fully in another thread
// We can never write is the past from the received time
// So, the node perform receive but will never write these symbols
// let's tell this to the opposite node
// We send timestamp for nb samples required
// assuming this should have been done earlier if a Tx would exist
pthread_mutex_unlock
(
&
Sockmutex
);
struct
complex16
v
=
{
0
};
void
*
dummyS
[
t
->
tx_num_channels
];
for
(
int
i
=
0
;
i
<
t
->
tx_num_channels
;
i
++
)
dummyS
[
i
]
=
(
void
*
)
&
v
;
LOG_I
(
HW
,
"No samples Tx occured, so we send 1 sample to notify it: Tx:%lu, Rx:%lu
\n
"
,
t
->
lastWroteTS
,
t
->
nextTimestamp
);
rfsimulator_write_internal
(
t
,
t
->
nextTimestamp
,
dummyS
,
1
,
t
->
tx_num_channels
,
1
,
true
);
}
else
{
pthread_mutex_unlock
(
&
Sockmutex
);
LOG_W
(
HW
,
"trx_write came from another thread
\n
"
);
}
}
else
pthread_mutex_unlock
(
&
Sockmutex
);
bool
have_to_wait
;
...
...
@@ -692,7 +658,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest
buffer_t
*
b
=&
t
->
buf
[
sock
];
if
(
b
->
circularBuf
)
if
(
t
->
next
Time
stamp
+
nsamps
>
b
->
lastReceivedTS
)
{
if
(
t
->
next
RxT
stamp
+
nsamps
>
b
->
lastReceivedTS
)
{
have_to_wait
=
true
;
break
;
}
...
...
@@ -701,7 +667,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest
if
(
have_to_wait
)
/*printf("Waiting on socket, current last ts: %ld, expected at least : %ld\n",
ptr->lastReceivedTS,
t->next
Time
stamp+nsamps);
t->next
RxT
stamp+nsamps);
*/
flushInput
(
t
,
3
,
nsamps
);
}
while
(
have_to_wait
);
...
...
@@ -732,7 +698,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest
a
,
ptr
->
channel_model
,
nsamps
,
t
->
next
Time
stamp
,
t
->
next
RxT
stamp
,
CirSize
);
else
{
// no channel modeling
...
...
@@ -747,8 +713,8 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest
//LOG_I(HW, "nbAnt_tx %d\n",nbAnt_tx);
for
(
int
i
=
0
;
i
<
nsamps
;
i
++
)
{
//loop over nsamps
for
(
int
a_tx
=
0
;
a_tx
<
nbAnt_tx
;
a_tx
++
)
{
//sum up signals from nbAnt_tx antennas
out
[
i
].
r
+=
(
short
)(
ptr
->
circularBuf
[((
t
->
next
Time
stamp
+
i
)
*
nbAnt_tx
+
a_tx
)
%
CirSize
].
r
*
H_awgn_mimo
[
a
][
a_tx
]);
out
[
i
].
i
+=
(
short
)(
ptr
->
circularBuf
[((
t
->
next
Time
stamp
+
i
)
*
nbAnt_tx
+
a_tx
)
%
CirSize
].
i
*
H_awgn_mimo
[
a
][
a_tx
]);
out
[
i
].
r
+=
(
short
)(
ptr
->
circularBuf
[((
t
->
next
RxT
stamp
+
i
)
*
nbAnt_tx
+
a_tx
)
%
CirSize
].
r
*
H_awgn_mimo
[
a
][
a_tx
]);
out
[
i
].
i
+=
(
short
)(
ptr
->
circularBuf
[((
t
->
next
RxT
stamp
+
i
)
*
nbAnt_tx
+
a_tx
)
%
CirSize
].
i
*
H_awgn_mimo
[
a
][
a_tx
]);
}
// end for a_tx
}
// end for i (number of samps)
}
// end of no channel modeling
...
...
@@ -756,11 +722,11 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest
}
}
*
ptimestamp
=
t
->
next
Time
stamp
;
// return the time of the first sample
t
->
next
Time
stamp
+=
nsamps
;
*
ptimestamp
=
t
->
next
RxT
stamp
;
// return the time of the first sample
t
->
next
RxT
stamp
+=
nsamps
;
LOG_D
(
HW
,
"Rx to upper layer: %d from %ld to %ld, energy in first antenna %d
\n
"
,
nsamps
,
*
ptimestamp
,
t
->
next
Time
stamp
,
*
ptimestamp
,
t
->
next
RxT
stamp
,
signal_energy
(
samplesVoid
[
0
],
nsamps
));
return
nsamps
;
}
...
...
targets/RT/USER/lte-ru.c
View file @
c0568a99
...
...
@@ -733,7 +733,7 @@ void tx_rf(RU_t *ru,
int
sf_extension
=
0
;
if
((
SF_type
==
SF_DL
)
||
(
SF_type
==
SF_S
))
{
(
SF_type
==
SF_S
)
)
{
int
siglen
=
fp
->
samples_per_tti
,
flags
=
1
;
if
(
SF_type
==
SF_S
)
{
...
...
@@ -831,6 +831,23 @@ void tx_rf(RU_t *ru,
late_control
=
STATE_BURST_TERMINATE
;
LOG_E
(
PHY
,
"TX : Timeout (sent %d/%d) state =%d
\n
"
,
txs
,
siglen
,
late_control
);
}
}
else
if
(
IS_SOFTMODEM_RFSIM
)
{
// in case of rfsim, we always enable tx because we need to feed rx of the opposite side
// we write 1 single I/Q sample to trigger Rx (rfsim will fill gaps with 0 I/Q)
void
*
dummy_tx
[
ru
->
frame_parms
->
nb_antennas_tx
];
for
(
int
i
=
0
;
i
<
ru
->
frame_parms
->
nb_antennas_tx
;
i
++
)
dummy_tx
[
i
]
=
malloc16_clear
(
4
);
AssertFatal
(
1
==
ru
->
rfdevice
.
trx_write_func
(
&
ru
->
rfdevice
,
timestamp
+
ru
->
ts_offset
-
ru
->
openair0_cfg
.
tx_sample_advance
-
sf_extension
,
dummy_tx
,
1
,
ru
->
frame_parms
->
nb_antennas_tx
,
4
),
""
);
for
(
int
i
=
0
;
i
<
ru
->
frame_parms
->
nb_antennas_tx
;
i
++
)
free
(
dummy_tx
[
i
]);
}
}
...
...
targets/RT/USER/lte-softmodem.h
View file @
c0568a99
...
...
@@ -49,7 +49,6 @@
{"debug-ue-prach", CONFIG_HLP_DBGUEPR, PARAMFLAG_BOOL, uptr:NULL, defuintval:1, TYPE_INT, 0}, \
{"no-L2-connect", CONFIG_HLP_NOL2CN, PARAMFLAG_BOOL, uptr:NULL, defuintval:1, TYPE_INT, 0}, \
{"calib-prach-tx", CONFIG_HLP_CALPRACH, PARAMFLAG_BOOL, uptr:NULL, defuintval:1, TYPE_INT, 0}, \
{"loop-memory", CONFIG_HLP_UELOOP, 0, strptr:&loopfile, defstrval:"iqs.in", TYPE_STRING,0}, \
{"ue-dump-frame", CONFIG_HLP_DUMPFRAME, PARAMFLAG_BOOL, iptr:&dumpframe, defintval:0, TYPE_INT, 0}, \
}
#define CMDLINE_CALIBUERX_IDX 0
...
...
targets/RT/USER/lte-uesoftmodem.c
View file @
c0568a99
...
...
@@ -276,7 +276,6 @@ uint16_t node_number;
static
void
get_options
(
void
)
{
int
CC_id
=
0
;
int
tddflag
=
0
;
char
*
loopfile
=
NULL
;
int
dumpframe
=
0
;
int
timingadv
=
0
;
uint8_t
nfapi_mode
=
NFAPI_MONOLITHIC
;
...
...
@@ -293,14 +292,6 @@ static void get_options(void) {
config_process_cmdline
(
cmdline_ueparams
,
sizeof
(
cmdline_ueparams
)
/
sizeof
(
paramdef_t
),
NULL
);
nfapi_setmode
(
nfapi_mode
);
if
(
loopfile
!=
NULL
)
{
printf
(
"Input file for hardware emulation: %s"
,
loopfile
);
mode
=
loop_through_memory
;
input_fd
=
fopen
(
loopfile
,
"r"
);
AssertFatal
(
input_fd
!=
NULL
,
"Please provide a valid input file
\n
"
);
}
get_softmodem_params
()
->
hw_timing_advance
=
timingadv
;
if
(
(
cmdline_uemodeparams
[
CMDLINE_CALIBUERX_IDX
].
paramflags
&
PARAMFLAG_PARAMSET
)
!=
0
)
mode
=
rx_calib_ue
;
...
...
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