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
23f5277d
Commit
23f5277d
authored
Nov 03, 2020
by
rmagueta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Decoding and xer_fprint of SIB1 at UE
parent
d07e2ecc
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
85 additions
and
41 deletions
+85
-41
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
+1
-1
openair1/PHY/defs_nr_common.h
openair1/PHY/defs_nr_common.h
+2
-0
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+3
-0
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+26
-20
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+5
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+4
-17
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+2
-2
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+35
-0
openair2/RRC/NR_UE/rrc_defs.h
openair2/RRC/NR_UE/rrc_defs.h
+2
-0
openair2/RRC/NR_UE/rrc_proto.h
openair2/RRC/NR_UE/rrc_proto.h
+5
-0
No files found.
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
View file @
23f5277d
...
...
@@ -44,7 +44,7 @@
#define FAPI_NR_DL_CONFIG_TYPE_DCI 0x01
#define FAPI_NR_DL_CONFIG_TYPE_DLSCH 0x02
#define FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH 0x03
#define FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH 0x04
#define FAPI_NR_CCE_REG_MAPPING_TYPE_INTERLEAVED 0x01
#define FAPI_NR_CCE_REG_MAPPING_TYPE_NON_INTERLEAVED 0x02
...
...
openair1/PHY/defs_nr_common.h
View file @
23f5277d
...
...
@@ -105,6 +105,8 @@
#define MAX_NUM_NR_DLSCH_SEGMENTS 34
#define MAX_NR_DLSCH_PAYLOAD_BYTES (MAX_NUM_NR_DLSCH_SEGMENTS*1056)
#define MAX_NR_SIB_LENGTH 2976 // 3GPP TS 38.331 section 5.2.1 - The physical layer imposes a limit to the maximum size a SIB can take. The maximum SIB1 or SI message size is 2976 bits.
#define MAX_NUM_NR_ULSCH_SEGMENTS MAX_NUM_NR_DLSCH_SEGMENTS
#define MAX_NR_ULSCH_PAYLOAD_BYTES (MAX_NUM_NR_ULSCH_SEGMENTS*1056)
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
23f5277d
...
...
@@ -81,6 +81,9 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
else
if
(
dl_config
->
dl_config_list
[
i
].
pdu_type
==
FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH
){
dlsch0
=
PHY_vars_UE_g
[
module_id
][
cc_id
]
->
dlsch_ra
[
0
];
}
else
if
(
dl_config
->
dl_config_list
[
i
].
pdu_type
==
FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH
){
dlsch0
=
PHY_vars_UE_g
[
module_id
][
cc_id
]
->
dlsch_SI
[
0
];
}
fapi_nr_dl_config_dlsch_pdu_rel15_t
*
dlsch_config_pdu
=
&
dl_config
->
dl_config_list
[
i
].
dlsch_config_pdu
.
dlsch_config_rel15
;
uint8_t
current_harq_pid
=
dlsch_config_pdu
->
harq_process_nbr
;
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
23f5277d
...
...
@@ -770,8 +770,8 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
return
-
1
;
}
else
{
// This is to adjust the llr offset in the case of skipping over a dmrs symbol (i.e. in case of no PDSCH REs in DMRS)
if
(
pdsch
==
RA_PDSCH
)
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
]
->
llr_offset
[
m
]
=
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
]
->
llr_offset
[
m
-
1
];
else
if
(
pdsch
==
PDSCH
)
{
if
(
pdsch
==
RA_PDSCH
)
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
]
->
llr_offset
[
m
]
=
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
]
->
llr_offset
[
m
-
1
];
else
if
(
pdsch
==
PDSCH
||
pdsch
==
SI_PDSCH
)
{
if
(
nr_rx_pdsch
(
ue
,
pdsch
,
eNB_id
,
...
...
@@ -785,7 +785,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
dlsch0
->
current_harq_pid
)
<
0
)
return
-
1
;
}
else
AssertFatal
(
1
==
0
,
"not RA_PDSCH or PDSCH
\n
"
);
else
AssertFatal
(
1
==
0
,
"not RA_PDSCH
, SI_PDSCH
or PDSCH
\n
"
);
}
if
(
pdsch
==
PDSCH
)
LOG_D
(
PHY
,
"Done processing symbol %d : llr_offset %d
\n
"
,
m
,
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
]
->
llr_offset
[
m
]);
#if UE_TIMING_TRACE
...
...
@@ -1178,6 +1178,9 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
case
PDSCH
:
rx_ind
.
rx_indication_body
[
0
].
pdu_type
=
FAPI_NR_RX_PDU_TYPE_DLSCH
;
break
;
case
SI_PDSCH
:
rx_ind
.
rx_indication_body
[
0
].
pdu_type
=
FAPI_NR_RX_PDU_TYPE_SIB
;
break
;
default:
break
;
}
...
...
@@ -1747,6 +1750,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
NR_UE_DLSCH_t
*
dlsch
=
NULL
;
if
(
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
gNB_id
][
0
]
->
active
==
1
){
dlsch
=
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
gNB_id
][
0
];
}
else
if
(
ue
->
dlsch_SI
[
0
]
->
active
==
1
){
dlsch
=
ue
->
dlsch_SI
[
0
];
}
else
if
(
ue
->
dlsch_ra
[
0
]
->
active
==
1
){
dlsch
=
ue
->
dlsch_ra
[
0
];
}
...
...
@@ -1822,7 +1827,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI
,
VCD_FUNCTION_OUT
);
}
// do procedures for
SI
-RNTI
// do procedures for
P
-RNTI
if
((
ue
->
dlsch_p
[
gNB_id
])
&&
(
ue
->
dlsch_p
[
gNB_id
]
->
active
==
1
))
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P
,
VCD_FUNCTION_IN
);
nr_ue_pdsch_procedures
(
ue
,
...
...
@@ -1938,23 +1943,24 @@ start_meas(&ue->generic_stat);
// do procedures for SI-RNTI
if
((
ue
->
dlsch_SI
[
gNB_id
])
&&
(
ue
->
dlsch_SI
[
gNB_id
]
->
active
==
1
))
{
nr_ue_pdsch_procedures
(
ue
,
proc
,
gNB_id
,
SI_PDSCH
,
ue
->
dlsch_SI
[
gNB_id
],
NULL
);
/*ue_dlsch_procedures(ue,
proc,
gNB_id,
SI_PDSCH,
ue->dlsch_SI[gNB_id],
NULL,
&ue->dlsch_SI_errors[gNB_id],
mode,
abstraction_flag);
ue->dlsch_SI[gNB_id]->active = 0;*/
nr_ue_dlsch_procedures
(
ue
,
proc
,
gNB_id
,
SI_PDSCH
,
ue
->
dlsch_SI
[
gNB_id
],
NULL
,
&
ue
->
dlsch_SI_errors
[
gNB_id
],
mode
);
ue
->
dlsch_SI
[
gNB_id
]
->
active
=
0
;
// FIXME: It was assumed that SIB1 has only one segment
int
harq_pid
=
PHY_vars_UE_g
[
0
][
0
]
->
dlsch_SI
[
0
]
->
current_harq_pid
;
nr_rrc_ue_decode_NR_SIB1_Message
(
&
ue
->
dlsch_SI
[
gNB_id
]
->
harq_processes
[
harq_pid
]
->
c
[
0
][
0
],
ue
->
dlsch_SI
[
gNB_id
]
->
harq_processes
[
harq_pid
]
->
TBS
);
getchar
();
}
// do procedures for P-RNTI
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
23f5277d
...
...
@@ -2659,7 +2659,11 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, dc
if
(
mac
->
RA_window_cnt
>=
0
&&
rnti
==
mac
->
ra_rnti
){
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
=
FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH
;
}
else
{
}
else
if
(
rnti
==
SI_RNTI
)
{
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
=
FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH
;
}
else
{
dl_config
->
dl_config_list
[
dl_config
->
number_pdus
].
pdu_type
=
FAPI_NR_DL_CONFIG_TYPE_DLSCH
;
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
View file @
23f5277d
...
...
@@ -239,25 +239,12 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
int
StartSymbolIndex
,
int
NrOfSymbols
)
{
// static values
int
rnti
=
0xFFFF
;
int
dci_format
=
NR_DL_DCI_FORMAT_1_0
;
int
rnti_type
=
NR_RNTI_SI
;
gNB_MAC_INST
*
gNB_mac
=
RC
.
nrmac
[
Mod_idP
];
NR_COMMON_channels_t
*
cc
=
gNB_mac
->
common_channels
;
NR_ServingCellConfigCommon_t
*
scc
=
cc
->
ServingCellConfigCommon
;
NR_CellGroupConfig_t
*
secondaryCellGroup
=
gNB_mac
->
secondaryCellGroupCommon
;
NR_BWP_Downlink_t
*
bwp
=
gNB_mac
->
sched_ctrlCommon
->
active_bwp
;
// Uncommenting these lines, the DLSCH is decoded in the UE:
//
//rnti = 0x1234;
//dci_format = NR_DL_DCI_FORMAT_1_1;
//rnti_type = NR_RNTI_C;
//gNB_mac->type0_PDCCH_CSS_config.n_0 = 6;
//
nfapi_nr_dl_tti_request_pdu_t
*
dl_tti_pdcch_pdu
=
&
dl_req
->
dl_tti_pdu_list
[
dl_req
->
nPDUs
];
memset
((
void
*
)
dl_tti_pdcch_pdu
,
0
,
sizeof
(
nfapi_nr_dl_tti_request_pdu_t
));
dl_tti_pdcch_pdu
->
PDUType
=
NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE
;
...
...
@@ -272,7 +259,7 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
nfapi_nr_dl_tti_pdsch_pdu_rel15_t
*
pdsch_pdu_rel15
=
&
dl_tti_pdsch_pdu
->
pdsch_pdu
.
pdsch_pdu_rel15
;
pdsch_pdu_rel15
->
pduBitmap
=
0
;
pdsch_pdu_rel15
->
rnti
=
rnti
;
pdsch_pdu_rel15
->
rnti
=
SI_RNTI
;
pdsch_pdu_rel15
->
pduIndex
=
gNB_mac
->
pdu_index
[
0
]
++
;
pdsch_pdu_rel15
->
BWPSize
=
NRRIV2BW
(
bwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
...
...
@@ -342,7 +329,7 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
nr_configure_pdcch
(
gNB_mac
,
pdcch_pdu_rel15
,
rnti
,
SI_RNTI
,
gNB_mac
->
sched_ctrlCommon
->
search_space
,
gNB_mac
->
sched_ctrlCommon
->
coreset
,
scc
,
...
...
@@ -353,8 +340,8 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
int
dci_formats
[
2
];
int
rnti_types
[
2
];
dci_formats
[
0
]
=
dci_format
;
rnti_types
[
0
]
=
rnti_type
;
dci_formats
[
0
]
=
NR_DL_DCI_FORMAT_1_0
;
rnti_types
[
0
]
=
NR_RNTI_SI
;
fill_dci_pdu_rel15
(
scc
,
secondaryCellGroup
,
pdcch_pdu_rel15
,
dci_pdu_rel15
,
dci_formats
,
rnti_types
,
pdsch_pdu_rel15
->
BWPSize
,
gNB_mac
->
sched_ctrlCommon
->
active_bwp
->
bwp_Id
);
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
23f5277d
...
...
@@ -189,13 +189,13 @@ static void init_NR_SI(gNB_RRC_INST *rrc) {
// SIB 1
gNB_RrcConfigurationReq
*
configuration
;
configuration
=
CALLOC
(
1
,
sizeof
(
gNB_RrcConfigurationReq
));
configuration
->
cell_identity
=
3
;
configuration
->
cell_identity
=
0x0E00
;
// TODO: Get value from config file
configuration
->
ssb_SubcarrierOffset
=
rrc
->
carrier
.
ssb_SubcarrierOffset
;
configuration
->
pdsch_AntennaPorts
=
rrc
->
carrier
.
pdsch_AntennaPorts
;
configuration
->
pusch_TargetSNRx10
=
rrc
->
carrier
.
pusch_TargetSNRx10
;
configuration
->
pucch_TargetSNRx10
=
rrc
->
carrier
.
pucch_TargetSNRx10
;
configuration
->
scc
=
rrc
->
carrier
.
servingcellconfigcommon
;
if
(
rrc
->
carrier
.
SIB1
==
NULL
)
rrc
->
carrier
.
SIB1
=
(
uint8_t
*
)
malloc16
(
100
);
if
(
rrc
->
carrier
.
SIB1
==
NULL
)
rrc
->
carrier
.
SIB1
=
(
uint8_t
*
)
malloc16
(
MAX_NR_SIB_LENGTH
/
8
);
rrc
->
carrier
.
sizeof_SIB1
=
do_SIB1_NR
(
&
rrc
->
carrier
,
configuration
);
LOG_I
(
NR_RRC
,
"Done init_NR_SI
\n
"
);
...
...
openair2/RRC/NR_UE/rrc_UE.c
View file @
23f5277d
...
...
@@ -432,6 +432,41 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
return
0
;
}
/*brief decode SIB1 message*/
int8_t
nr_rrc_ue_decode_NR_SIB1_Message
(
uint8_t
*
const
bufferP
,
const
uint8_t
buffer_len
){
NR_BCCH_DL_SCH_Message_t
*
bcch_message
=
NULL
;
asn_dec_rval_t
dec_rval
=
uper_decode_complete
(
NULL
,
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
(
void
**
)
&
bcch_message
,
(
const
void
*
)
bufferP
,
buffer_len
);
if
((
dec_rval
.
code
!=
RC_OK
)
||
(
dec_rval
.
consumed
==
0
))
{
printf
(
"NR_BCCH_DL_SCH decode error
\n
"
);
for
(
int
i
=
0
;
i
<
buffer_len
;
i
++
){
printf
(
"%02x "
,
bufferP
[
i
]);
}
printf
(
"
\n
"
);
SEQUENCE_free
(
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
(
void
*
)
bcch_message
,
1
);
return
-
1
;
}
else
{
if
(
NR_UE_rrc_inst
->
sib1
!=
NULL
){
SEQUENCE_free
(
&
asn_DEF_NR_BCCH_BCH_Message
,
(
void
*
)
NR_UE_rrc_inst
->
sib1
,
1
);
}
NR_UE_rrc_inst
->
sib1
=
bcch_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
;
xer_fprint
(
stdout
,
&
asn_DEF_NR_SIB1
,
(
const
void
*
)
NR_UE_rrc_inst
->
sib1
);
}
return
0
;
}
// from NR SRB3
int8_t
nr_rrc_ue_decode_NR_DL_DCCH_Message
(
...
...
openair2/RRC/NR_UE/rrc_defs.h
View file @
23f5277d
...
...
@@ -51,6 +51,7 @@
#include "NR_asn_constant.h"
#include "NR_SchedulingRequestToAddMod.h"
#include "NR_MIB.h"
#include "NR_SIB1.h"
#include "NR_BCCH-BCH-Message.h"
#include "NR_DL-DCCH-Message.h"
...
...
@@ -70,6 +71,7 @@ typedef struct NR_UE_RRC_INST_s {
NR_RadioBearerConfig_t
*
radio_bearer_config
;
NR_MIB_t
*
mib
;
NR_SIB1_t
*
sib1
;
// lists
// CellGroupConfig.rlc-BearerToAddModList
...
...
openair2/RRC/NR_UE/rrc_proto.h
View file @
23f5277d
...
...
@@ -86,6 +86,11 @@ int8_t nr_rrc_ue_process_radio_bearer_config(NR_RadioBearerConfig_t *radio_beare
\param sdu_len length of buffer*/
int8_t
nr_rrc_ue_decode_NR_BCCH_BCH_Message
(
const
module_id_t
module_id
,
const
uint8_t
gNB_index
,
uint8_t
*
const
bufferP
,
const
uint8_t
buffer_len
);
/**\brief decode NR SIB1 message
\param sduP pointer to buffer of ASN message
\param sdu_len length of buffer*/
int8_t
nr_rrc_ue_decode_NR_SIB1_Message
(
uint8_t
*
const
bufferP
,
const
uint8_t
buffer_len
);
/**\brief Decode NR DCCH from gNB, sent from lower layer through SRB3
\param module_id module id
\param gNB_index gNB index
...
...
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