Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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 UE
Commits
a8abb0d2
Commit
a8abb0d2
authored
Apr 25, 2021
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into integration_2021_wk13_b
parents
67ae9bfd
536796ba
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
757 additions
and
54 deletions
+757
-54
ci-scripts/Jenkinsfile-git-dashboard
ci-scripts/Jenkinsfile-git-dashboard
+45
-0
ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
...cripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
+305
-0
ci-scripts/ran.py
ci-scripts/ran.py
+25
-13
ci-scripts/ran_dashboard.py
ci-scripts/ran_dashboard.py
+275
-0
ci-scripts/xml_files/gnb_phytest_usrp_run.xml
ci-scripts/xml_files/gnb_phytest_usrp_run.xml
+53
-0
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+4
-2
common/utils/T/Makefile
common/utils/T/Makefile
+1
-1
executables/nr-gnb.c
executables/nr-gnb.c
+23
-15
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+2
-2
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+2
-2
openair1/PHY/TOOLS/time_meas.c
openair1/PHY/TOOLS/time_meas.c
+3
-2
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+1
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+5
-0
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+2
-2
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+0
-2
openair2/GNB_APP/gnb_paramdef.h
openair2/GNB_APP/gnb_paramdef.h
+5
-5
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+1
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+2
-6
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+2
-1
No files found.
ci-scripts/Jenkinsfile-git-dashboard
0 → 100644
View file @
a8abb0d2
#
!
/bin/
groovy
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
// Location of the python executor node shall be in the same subnet as the others servers
def
pythonExecutor
=
params
.
pythonExecutor
pipeline
{
agent
{
label
pythonExecutor
}
stages
{
stage
(
"gDashboard"
)
{
steps
{
script
{
//retrieve MR data from gitlab and export to gSheet
sh
returnStdout:
true
,
script:
'python3 ci-scripts/ran_dashboard.py'
}
}
}
}
}
ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
0 → 100644
View file @
a8abb0d2
This diff is collapsed.
Click to expand it.
ci-scripts/ran.py
View file @
a8abb0d2
...
...
@@ -694,8 +694,8 @@ class RANManagement():
NSA_RAPROC_PUSCH_check
=
0
#dlsch and ulsch statistics (dictionary)
dlsch_ulsch_stats
=
{}
#
count "L1 thread not ready" msg
L1_thread_not_ready_cnt
=
0
#
real time statistics (dictionary)
real_time_stats
=
{}
#count "problem receiving samples" msg
pb_receiving_samples_cnt
=
0
...
...
@@ -857,16 +857,21 @@ class RANManagement():
#keys below are the markers we are loooking for, loop over this keys list
#everytime these markers are found in the log file, the previous ones are overwritten in the dict
#eventually we record and print only the last occurence
keys
=
{
'
dlsch_rounds'
,
'dlsch_total_bytes'
,
'ulsch_rounds'
,
'ulsch_total_bytes_scheduled
'
}
keys
=
{
'
UE ID'
,
'dlsch_rounds'
,
'dlsch_total_bytes'
,
'ulsch_rounds'
,
'ulsch_total_bytes_scheduled'
,
'scheduling timing stats
'
}
for
k
in
keys
:
result
=
re
.
search
(
k
,
line
)
if
result
is
not
None
:
#remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char
dlsch_ulsch_stats
[
k
]
=
re
.
sub
(
r'^.*\]\s+'
,
r''
,
line
.
rstrip
())
#count "L1 thread not ready" msg
result
=
re
.
search
(
'\[PHY\]\s+L1_thread isn
\'
t ready'
,
str
(
line
))
if
result
is
not
None
:
L1_thread_not_ready_cnt
+=
1
#real time statistics
#same method as above
keys
=
{
'feprx'
,
'feptx_prec'
,
'feptx_ofdm'
,
'feptx_total'
,
'L1 Tx processing'
,
'DLSCH encoding'
,
'L1 Rx processing'
,
'PUSCH inner-receiver'
,
'PUSCH decoding'
}
for
k
in
keys
:
result
=
re
.
search
(
k
,
line
)
if
result
is
not
None
:
#remove 1- all useless char before relevant info 2- trailing char
tmp
=
re
.
match
(
rf'^.*?(\b
{
k
}
\b.*)'
,
line
.
rstrip
())
#from python 3.6 we can use literal string interpolation for the variable k, using rf' in the regex
real_time_stats
[
k
]
=
tmp
.
group
(
1
)
#count "problem receiving samples" msg
result
=
re
.
search
(
'\[PHY\]\s+problem receiving samples'
,
str
(
line
))
if
result
is
not
None
:
...
...
@@ -897,15 +902,10 @@ class RANManagement():
statMsg
=
'[RAPROC] PUSCH with TC_RNTI message check for '
+
nodeB_prefix
+
'NB : PASS '
htmlMsg
=
statMsg
+
'
\n
'
else
:
statMsg
=
'[RAPROC] PUSCH with TC_RNTI message check for '
+
nodeB_prefix
+
'NB : FAIL '
statMsg
=
'[RAPROC] PUSCH with TC_RNTI message check for '
+
nodeB_prefix
+
'NB : FAIL
or not relevant
'
htmlMsg
=
statMsg
+
'
\n
'
logging
.
debug
(
statMsg
)
htmleNBFailureMsg
+=
htmlMsg
#L1 thread not ready log
statMsg
=
'[PHY] L1 thread is not ready msg count = '
+
str
(
L1_thread_not_ready_cnt
)
htmlMsg
=
statMsg
+
'
\n
'
logging
.
debug
(
statMsg
)
htmleNBFailureMsg
+=
htmlMsg
#problem receiving samples log
statMsg
=
'[PHY] problem receiving samples msg count = '
+
str
(
pb_receiving_samples_cnt
)
htmlMsg
=
statMsg
+
'
\n
'
...
...
@@ -920,6 +920,18 @@ class RANManagement():
logging
.
debug
(
dlsch_ulsch_stats
[
key
])
htmleNBFailureMsg
+=
statMsg
#real time statistics statistics
if
len
(
real_time_stats
)
!=
0
:
#check if dictionary is not empty
statMsg
=
''
for
key
in
real_time_stats
:
#for each dictionary key
statMsg
+=
real_time_stats
[
key
]
+
'
\n
'
logging
.
debug
(
real_time_stats
[
key
])
htmleNBFailureMsg
+=
statMsg
else
:
statMsg
=
'No real time stats found in the log file
\n
'
logging
.
debug
(
'No real time stats found in the log file'
)
htmleNBFailureMsg
+=
statMsg
if
uciStatMsgCount
>
0
:
statMsg
=
nodeB_prefix
+
'NB showed '
+
str
(
uciStatMsgCount
)
+
' "uci->stat" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
...
...
ci-scripts/ran_dashboard.py
0 → 100644
View file @
a8abb0d2
This diff is collapsed.
Click to expand it.
ci-scripts/xml_files/gnb_phytest_usrp_run.xml
0 → 100644
View file @
a8abb0d2
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
gNB-PHY-Test
</htmlTabRef>
<htmlTabName>
Run-gNB-PHY-Test
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
2
</repeatCount>
<TestCaseRequestedList>
090101 000001 090109
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"090101"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB USRP
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test -q -U 787200 -T 106 -t 28 -D 130175 -m 28 -M 106
</Initialize_eNB_args>
<air_interface>
NR
</air_interface>
</testCase>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
180
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"090109"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate gNB
</desc>
<air_interface>
NR
</air_interface>
</testCase>
</testCaseList>
cmake_targets/CMakeLists.txt
View file @
a8abb0d2
...
...
@@ -2828,8 +2828,6 @@ endif (${T_TRACER})
#This rule and the following deal with it.
add_custom_command
(
OUTPUT
${
OPENAIR_DIR
}
/common/utils/T/T_IDs.h
COMMAND make clean
COMMAND make -j2
COMMAND make check_vcd
WORKING_DIRECTORY
${
OPENAIR_DIR
}
/common/utils/T
DEPENDS
${
OPENAIR_DIR
}
/common/utils/T/T_messages.txt
...
...
@@ -2837,6 +2835,10 @@ add_custom_command (
${
OPENAIR_DIR
}
/common/utils/LOG/vcd_signal_dumper.h
)
execute_process
(
COMMAND make check_vcd
WORKING_DIRECTORY
${
OPENAIR_DIR
}
/common/utils/T
)
#This rule is specifically needed to generate T files
#before anything else in a project that uses the T.
#See below, there are some 'add_dependencies' showing that.
...
...
common/utils/T/Makefile
View file @
a8abb0d2
...
...
@@ -18,7 +18,7 @@ T_messages.txt.h: T_messages.txt
T_IDs.h
:
$(GENIDS) T_messages.txt
./
$(GENIDS)
T_messages.txt T_IDs.h
check_vcd
:
check_vcd
:
T_IDs.h T_messages.txt.h
gcc
-Wall
-I
.
-I
..
-I
../itti
-I
../../../openair2/COMMON
-Itracer
-o
_check_vcd check_vcd.c tracer/database.c tracer/utils.c
-lm
-pthread
./_check_vcd
||
(
rm
-f
./_check_vcd ./T_IDs.h ./T_messages.txt.h
&&
false
)
rm
-f
./_check_vcd
...
...
executables/nr-gnb.c
View file @
a8abb0d2
...
...
@@ -228,16 +228,6 @@ void rx_func(void *param) {
rnti_to_remove_count
=
0
;
if
(
pthread_mutex_unlock
(
&
rnti_to_remove_mutex
))
exit
(
1
);
// Call the scheduler
pthread_mutex_lock
(
&
gNB
->
UL_INFO_mutex
);
gNB
->
UL_INFO
.
frame
=
frame_rx
;
gNB
->
UL_INFO
.
slot
=
slot_rx
;
gNB
->
UL_INFO
.
module_id
=
gNB
->
Mod_id
;
gNB
->
UL_INFO
.
CC_id
=
gNB
->
CC_id
;
gNB
->
if_inst
->
NR_UL_indication
(
&
gNB
->
UL_INFO
);
pthread_mutex_unlock
(
&
gNB
->
UL_INFO_mutex
);
// RX processing
int
tx_slot_type
=
nr_slot_select
(
cfg
,
frame_tx
,
slot_tx
);
int
rx_slot_type
=
nr_slot_select
(
cfg
,
frame_rx
,
slot_rx
);
...
...
@@ -264,6 +254,18 @@ void rx_func(void *param) {
stop_meas
(
&
softmodem_stats_rxtx_sf
);
LOG_D
(
PHY
,
"%s() Exit proc[rx:%d%d tx:%d%d]
\n
"
,
__FUNCTION__
,
frame_rx
,
slot_rx
,
frame_tx
,
slot_tx
);
// Call the scheduler
start_meas
(
&
gNB
->
ul_indication_stats
);
pthread_mutex_lock
(
&
gNB
->
UL_INFO_mutex
);
gNB
->
UL_INFO
.
frame
=
frame_rx
;
gNB
->
UL_INFO
.
slot
=
slot_rx
;
gNB
->
UL_INFO
.
module_id
=
gNB
->
Mod_id
;
gNB
->
UL_INFO
.
CC_id
=
gNB
->
CC_id
;
gNB
->
if_inst
->
NR_UL_indication
(
&
gNB
->
UL_INFO
);
pthread_mutex_unlock
(
&
gNB
->
UL_INFO_mutex
);
stop_meas
(
&
gNB
->
ul_indication_stats
);
notifiedFIFO_elt_t
*
res
;
if
(
tx_slot_type
==
NR_DOWNLINK_SLOT
||
tx_slot_type
==
NR_MIXED_SLOT
)
{
...
...
@@ -323,18 +325,24 @@ static void *process_stats_thread(void *param) {
PHY_VARS_gNB
*
gNB
=
(
PHY_VARS_gNB
*
)
param
;
reset_meas
(
&
gNB
->
phy_proc_tx
);
reset_meas
(
&
gNB
->
dlsch_encoding_stats
);
reset_meas
(
&
gNB
->
dlsch_scrambling_stats
);
reset_meas
(
&
gNB
->
dlsch_modulation_stats
);
reset_meas
(
&
gNB
->
phy_proc_rx
);
reset_meas
(
&
gNB
->
ul_indication_stats
);
reset_meas
(
&
gNB
->
rx_pusch_stats
);
reset_meas
(
&
gNB
->
ulsch_decoding_stats
);
wait_sync
(
"process_stats_thread"
);
while
(
!
oai_exit
)
{
sleep
(
1
);
print_meas
(
&
gNB
->
dlsch_encoding_stats
,
"pdsch_encoding"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_scrambling_stats
,
"pdsch_scrambling"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_modulation_stats
,
"pdsch_modulation"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
phy_proc_tx
,
"L1 Tx processing"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_encoding_stats
,
"DLSCH encoding"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
phy_proc_rx
,
"L1 Rx processing"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
ul_indication_stats
,
"UL Indication"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
rx_pusch_stats
,
"PUSCH inner-receiver"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
ulsch_decoding_stats
,
"PUSCH decoding"
,
NULL
,
NULL
);
}
return
(
NULL
);
}
...
...
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
View file @
a8abb0d2
...
...
@@ -691,7 +691,7 @@ typedef struct
typedef
struct
{
uint16_t
pm_idx
;
//Index to precoding matrix (PM) pre-stored at cell configuration. Note: If precoding is not used this parameter should be set to 0. Value: 0->65535.
nfapi_nr_dig_bf_interface_t
dig_bf_interface_list
[
255
];
//max dig_bf_interfaces
nfapi_nr_dig_bf_interface_t
dig_bf_interface_list
[
1
];
//max dig_bf_interfaces
}
nfapi_nr_tx_precoding_and_beamforming_number_of_prgs_t
;
...
...
@@ -702,7 +702,7 @@ typedef struct
uint16_t
prg_size
;
//Size in RBs of a precoding resource block group (PRG) – to which same precoding and digital beamforming gets applied. Value: 1->275
//watchout: dig_bf_interfaces here, in table 3-53 it's dig_bf_interface
uint8_t
dig_bf_interfaces
;
//Number of STD ant ports (parallel streams) feeding into the digBF Value: 0->255
nfapi_nr_tx_precoding_and_beamforming_number_of_prgs_t
prgs_list
[
275
];
//max prg_size
nfapi_nr_tx_precoding_and_beamforming_number_of_prgs_t
prgs_list
[
1
];
//max prg_size
}
nfapi_nr_tx_precoding_and_beamforming_t
;
...
...
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
View file @
a8abb0d2
...
...
@@ -86,7 +86,7 @@ static void copyPrimary( struct complex16 *out, struct complex16 *in, int ofdmSi
}
int
lte_sync_time_init
(
LTE_DL_FRAME_PARMS
*
frame_parms
)
{
// LTE_UE_COMMON *common_vars
struct
complex16
syncF_tmp
[
2048
]
__attribute__
((
aligned
(
32
)))
=
{
0
};
struct
complex16
syncF_tmp
[
2048
]
__attribute__
((
aligned
(
32
)))
=
{
{
0
}
};
int
sz
=
frame_parms
->
ofdm_symbol_size
*
sizeof
(
*
primary_synch0_time
);
AssertFatal
(
NULL
!=
(
primary_synch0_time
=
(
struct
complex16
*
)
malloc16
(
sz
)),
""
);
bzero
(
primary_synch0_time
,
sz
);
...
...
@@ -153,7 +153,7 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
// perform a time domain correlation using the oversampled sync sequence
unsigned
int
n
,
ar
,
s
,
peak_pos
,
peak_val
,
sync_source
;
int
result
,
result2
;
struct
complexd
sync_out
[
3
]
=
{
0
},
sync_out2
[
3
]
=
{
0
};
struct
complexd
sync_out
[
3
]
=
{
{
0
}},
sync_out2
[
3
]
=
{{
0
}
};
int
length
=
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
frame_parms
->
samples_per_tti
>>
1
;
peak_val
=
0
;
peak_pos
=
0
;
...
...
openair1/PHY/TOOLS/time_meas.c
View file @
a8abb0d2
...
...
@@ -103,10 +103,11 @@ void print_meas(time_stats_t *ts,
if
(
ts
->
trials
>
0
)
{
//printf("%20s: total: %10.3f ms, average: %10.3f us (%10d trials)\n", name, ts->diff/cpu_freq_GHz/1000000.0, ts->diff/ts->trials/cpu_freq_GHz/1000.0, ts->trials);
if
((
total_exec_time
==
NULL
)
||
(
sf_exec_time
==
NULL
))
{
fprintf
(
stderr
,
"%25s: %15.3f us; %15d;
\n
"
,
fprintf
(
stderr
,
"%25s: %15.3f us; %15d;
%15.3f us;
\n
"
,
name
,
(
ts
->
diff
/
ts
->
trials
/
cpu_freq_GHz
/
1000
.
0
),
ts
->
trials
);
ts
->
trials
,
ts
->
max
/
cpu_freq_GHz
/
1000
.
0
);
}
else
{
fprintf
(
stderr
,
"%25s: %15.3f ms (%5.2f%%); %15.3f us (%5.2f%%); %15d;
\n
"
,
name
,
...
...
openair1/PHY/defs_gNB.h
View file @
a8abb0d2
...
...
@@ -824,6 +824,7 @@ typedef struct PHY_VARS_gNB_s {
time_stats_t
dlsch_segmentation_stats
;
time_stats_t
rx_pusch_stats
;
time_stats_t
ul_indication_stats
;
time_stats_t
ulsch_decoding_stats
;
time_stats_t
ulsch_rate_unmatching_stats
;
time_stats_t
ulsch_ldpc_decoding_stats
;
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
a8abb0d2
...
...
@@ -194,6 +194,8 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH
,
0
);
}
if
(
do_meas
==
1
)
stop_meas
(
&
gNB
->
phy_proc_tx
);
if
((
frame
&
127
)
==
0
)
dump_pdsch_stats
(
gNB
);
//apply the OFDM symbol rotation here
...
...
@@ -539,6 +541,8 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
int
power_rxF
=
signal_energy_nodc
(
&
gNB
->
common_vars
.
rxdataF
[
0
][
offset
],
12
*
18
);
LOG_D
(
PHY
,
"frame %d, slot %d: UL signal energy %d
\n
"
,
frame_rx
,
slot_rx
,
power_rxF
);
start_meas
(
&
gNB
->
phy_proc_rx
);
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_PUCCH_MAX
;
i
++
){
NR_gNB_PUCCH_t
*
pucch
=
gNB
->
pucch
[
i
];
if
(
pucch
)
{
...
...
@@ -662,6 +666,7 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
}
}
}
stop_meas
(
&
gNB
->
phy_proc_rx
);
// figure out a better way to choose slot_rx, 19 is ok for a particular TDD configuration with 30kHz SCS
if
((
frame_rx
&
127
)
==
0
&&
slot_rx
==
19
)
{
dump_pusch_stats
(
gNB
);
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
a8abb0d2
...
...
@@ -301,7 +301,7 @@ int main(int argc, char **argv)
//float psnr;
float
eff_tp_check
=
0
.
7
;
uint8_t
snrRun
;
uint32_t
TBS
;
uint32_t
TBS
=
0
;
int
**
txdata
;
double
**
s_re
,
**
s_im
,
**
r_re
,
**
r_im
;
//double iqim = 0.0;
...
...
@@ -1021,7 +1021,7 @@ int main(int argc, char **argv)
if
(
run_initial_sync
)
nr_common_signal_procedures
(
gNB
,
frame
,
slot
,
gNB
->
ssb
[
0
].
ssb_pdu
);
else
phy_procedures_gNB_TX
(
gNB
,
frame
,
slot
,
0
);
phy_procedures_gNB_TX
(
gNB
,
frame
,
slot
,
1
);
int
txdataF_offset
=
(
slot
%
2
)
*
frame_parms
->
samples_per_slot_wCP
;
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
a8abb0d2
...
...
@@ -1170,7 +1170,6 @@ int main(int argc, char **argv)
gNB
->
UL_INFO
.
rx_ind
.
number_of_pdus
=
0
;
gNB
->
UL_INFO
.
crc_ind
.
number_crcs
=
0
;
start_meas
(
&
gNB
->
phy_proc_rx
);
phy_procedures_gNB_common_RX
(
gNB
,
frame
,
slot
);
phy_procedures_gNB_uespec_RX
(
gNB
,
frame
,
slot
);
...
...
@@ -1202,7 +1201,6 @@ int main(int argc, char **argv)
LOG_M
(
"rxsigF0_llr.m"
,
"rxsF0_llr"
,
&
gNB
->
pusch_vars
[
0
]
->
llr
[
0
],(
nb_symb_sch
-
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
*
mod_order
,
1
,
0
);
}
start_meas
(
&
gNB
->
phy_proc_rx
);
////////////////////////////////////////////////////////////
if
(
gNB
->
ulsch
[
0
][
0
]
->
last_iteration_cnt
>=
...
...
openair2/GNB_APP/gnb_paramdef.h
View file @
a8abb0d2
...
...
@@ -324,12 +324,12 @@ typedef enum {
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
#define GNBNETPARAMS_DESC { \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
"lo"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
"127.0.0.1"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
"lo"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
"127.0.0.1"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_NG_AMF, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_NGU, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_GNB_PORT_FOR_NGU, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C, NULL, 0, strptr:NULL, defstrval:
"127.0.0.1"
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C, NULL, 0, strptr:NULL, defstrval:
NULL
, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_ENB_PORT_FOR_X2C, NULL, 0, uptr:NULL, defintval:0L, TYPE_UINT, 0} \
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
a8abb0d2
...
...
@@ -103,6 +103,7 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
LOG_I
(
MAC
,
"UE %d: LCID %d: %d bytes RX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
}
}
print_meas
(
&
gNB
->
eNB_scheduler
,
"DL & UL scheduling timing stats"
,
NULL
,
NULL
);
}
void
clear_nr_nfapi_information
(
gNB_MAC_INST
*
gNB
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
a8abb0d2
...
...
@@ -388,7 +388,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
uint32_t
target_ul_mcs
=
9
;
uint32_t
target_ul_bw
=
50
;
uint64_t
ulsch_slot_bitmap
=
(
1
<<
8
)
|
(
1
<<
18
)
;
uint64_t
ulsch_slot_bitmap
=
(
1
<<
8
);
bool
nr_ul_preprocessor_phytest
(
module_id_t
module_id
,
frame_t
frame
,
sub_frame_t
slot
)
{
gNB_MAC_INST
*
nr_mac
=
RC
.
nrmac
[
module_id
];
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
a8abb0d2
...
...
@@ -1020,9 +1020,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
for
(
int
harq_bit
=
0
;
harq_bit
<
uci_01
->
harq
->
num_harq
;
harq_bit
++
)
{
const
uint8_t
harq_value
=
uci_01
->
harq
->
harq_list
[
harq_bit
].
harq_value
;
const
uint8_t
harq_confidence
=
uci_01
->
harq
->
harq_confidence_level
;
const
int
feedback_frame
=
slot
==
0
?
(
frame
-
1
+
1024
)
%
1024
:
frame
;
const
int
feedback_slot
=
(
slot
-
1
+
num_slots
)
%
num_slots
;
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
feedback_frame
,
feedback_slot
,
UE_id
);
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
frame
,
slot
,
UE_id
);
if
(
!
harq
)
break
;
DevAssert
(
harq
->
is_waiting
);
...
...
@@ -1059,9 +1057,7 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
// iterate over received harq bits
for
(
int
harq_bit
=
0
;
harq_bit
<
uci_234
->
harq
.
harq_bit_len
;
harq_bit
++
)
{
const
int
acknack
=
((
uci_234
->
harq
.
harq_payload
[
harq_bit
>>
3
])
>>
harq_bit
)
&
0x01
;
const
int
feedback_frame
=
slot
==
0
?
(
frame
-
1
+
1024
)
%
1024
:
frame
;
const
int
feedback_slot
=
(
slot
-
1
+
num_slots
)
%
num_slots
;
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
feedback_frame
,
feedback_slot
,
UE_id
);
NR_UE_harq_t
*
harq
=
find_harq
(
mod_id
,
frame
,
slot
,
UE_id
);
if
(
!
harq
)
break
;
DevAssert
(
harq
->
is_waiting
);
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
a8abb0d2
...
...
@@ -597,7 +597,8 @@ int trx_usrp_write_init(openair0_device *device){
write_thread
->
end
=
0
;
write_thread
->
count_write
=
0
;
printf
(
"end of tx write thread
\n
"
);
pthread_mutex_init
(
&
write_thread
->
mutex_write
,
NULL
);
pthread_cond_init
(
&
write_thread
->
cond_write
,
NULL
);
pthread_create
(
&
write_thread
->
pthread_write
,
NULL
,
trx_usrp_write_thread
,(
void
*
)
device
);
return
(
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