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
10a190ce
Commit
10a190ce
authored
Nov 04, 2020
by
rmagueta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First baseline implementation of SIB1
parent
70e63b6b
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
62 additions
and
394 deletions
+62
-394
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+11
-37
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+0
-1
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+26
-325
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+2
-1
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+23
-30
No files found.
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
10a190ce
...
...
@@ -1357,9 +1357,9 @@ void *UE_thread_slot1_dl_processing(void *arg) {
CPU_ZERO
(
&
cpuset
);
if
(
(
proc
->
sub_frame_start
+
1
)
%
RX_NB_TH
==
0
&&
threads
.
slot1_proc_one
!=
-
1
)
CPU_SET
(
threads
.
slot1_proc_one
,
&
cpuset
);
if
(
RX_NB_TH
>
1
&&
(
proc
->
sub_frame_start
+
1
)
%
RX_NB_TH
==
1
&&
threads
.
slot1_proc_two
!=
-
1
)
if
(
(
proc
->
sub_frame_start
+
1
)
%
RX_NB_TH
==
1
&&
threads
.
slot1_proc_two
!=
-
1
)
CPU_SET
(
threads
.
slot1_proc_two
,
&
cpuset
);
if
(
RX_NB_TH
>
2
&&
(
proc
->
sub_frame_start
+
1
)
%
RX_NB_TH
==
2
&&
threads
.
slot1_proc_three
!=
-
1
)
if
(
(
proc
->
sub_frame_start
+
1
)
%
RX_NB_TH
==
2
&&
threads
.
slot1_proc_three
!=
-
1
)
CPU_SET
(
threads
.
slot1_proc_three
,
&
cpuset
);
init_thread
(
900000
,
1000000
,
FIFO_PRIORITY
-
1
,
&
cpuset
,
...
...
@@ -1654,8 +1654,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
uint8_t
dci_cnt
=
0
;
NR_DL_FRAME_PARMS
*
fp
=
&
ue
->
frame_parms
;
//NR_UE_MAC_INST_t *mac = get_mac_inst(0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_FUNCTION_IN
);
LOG_D
(
PHY
,
" ****** start RX-Chain for Frame.Slot %d.%d ******
\n
"
,
frame_rx
%
1024
,
nr_tti_rx
);
...
...
@@ -1694,12 +1692,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
#endif
}
//if (mac->csirc->reportQuantity.choice.ssb_Index_RSRP){
nr_ue_rsrp_measurements
(
ue
,
nr_tti_rx
,
0
);
//}
nr_ue_pbch_procedures
(
gNB_id
,
ue
,
proc
,
0
);
if
(
ue
->
no_timing_correction
==
0
)
{
...
...
@@ -1846,6 +1838,15 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
// deactivate dlsch once dlsch proc is done
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
;
if
(
ue
->
dlsch_SI
[
gNB_id
]
->
harq_processes
[
harq_pid
]
->
harq_ack
.
ack
==
1
)
{
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
);
}
else
{
LOG_D
(
PHY
,
"SIB1 CRC NOT OK"
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI
,
VCD_FUNCTION_OUT
);
}
...
...
@@ -1963,33 +1964,6 @@ start_meas(&ue->generic_stat);
}
#endif
// do procedures for SI-RNTI
if
((
ue
->
dlsch_SI
[
gNB_id
])
&&
(
ue
->
dlsch_SI
[
gNB_id
]
->
active
==
1
))
{
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
;
if
(
ue
->
dlsch_SI
[
gNB_id
]
->
harq_processes
[
harq_pid
]
->
harq_ack
.
ack
==
1
)
{
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
);
}
else
{
LOG_D
(
PHY
,
"SIB1 CRC NOT OK"
);
}
}
// do procedures for P-RNTI
if
((
ue
->
dlsch_p
[
gNB_id
])
&&
(
ue
->
dlsch_p
[
gNB_id
]
->
active
==
1
))
{
nr_ue_pdsch_procedures
(
ue
,
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
10a190ce
...
...
@@ -117,7 +117,6 @@ const float table_38213_13_12_c3[16] = { 1, 0.5f, 1, 0.5f, 1, 0.5f, 0.5f, 0.5f
const
int32_t
table_38213_10_1_1_c2
[
5
]
=
{
0
,
0
,
4
,
2
,
1
};
const
char
*
prachfmt
[]
=
{
"A1"
,
"A2"
,
"A3"
,
"B1"
,
"B2"
,
"B3"
,
"B4"
,
"C0"
,
"C2"
};
const
char
*
prachfmt03
[]
=
{
"0"
,
"1"
,
"2"
,
"3"
};
const
char
*
prachfmt
[]
=
{
"0"
,
"1"
,
"2"
,
"3"
,
"A1"
,
"A2"
,
"A3"
,
"B1"
,
"B4"
,
"C0"
,
"C2"
,
"A1/B1"
,
"A2/B2"
,
"A3/B3"
};
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
10a190ce
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
View file @
10a190ce
...
...
@@ -205,7 +205,8 @@ void schedule_control_sib1(module_id_t module_id,
gNB_mac
->
sched_ctrlCommon
->
coreset
,
gNB_mac
->
sched_ctrlCommon
->
aggregation_level
,
0
,
0
);
0
,
nr_of_candidates
);
const
uint16_t
bwpSize
=
NRRIV2BW
(
gNB_mac
->
sched_ctrlCommon
->
active_bwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
int
rbStart
=
NRRIV2PRBOFFSET
(
gNB_mac
->
sched_ctrlCommon
->
active_bwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
10a190ce
...
...
@@ -39,6 +39,7 @@
#include <asn_application.h>
#include <asn_internal.h>
/* for _ASN_DEFAULT_STACK_MAX */
#include <per_encoder.h>
#include <PHY/defs_nr_common.h>
#include "asn1_msg.h"
#include "RRC/NR/nr_rrc_extern.h"
...
...
@@ -267,10 +268,6 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
gNB_RrcConfigurationReq
*
configuration
)
{
asn_enc_rval_t
enc_rval
;
NR_BCCH_DL_SCH_Message_t
*
sib1_message
;
struct
NR_SIB1
*
sib1
;
int
i
;
struct
NR_PLMN_IdentityInfo
nr_plmn_info
;
// TODO : Add support for more than one PLMN
//int num_plmn = configuration->num_plmn;
...
...
@@ -278,31 +275,29 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
struct
NR_PLMN_Identity
nr_plmn
[
num_plmn
];
NR_MCC_MNC_Digit_t
nr_mcc_digit
[
num_plmn
][
3
];
NR_MCC_MNC_Digit_t
nr_mnc_digit
[
num_plmn
][
3
];
memset
(
nr_plmn
,
0
,
sizeof
(
nr_plmn
));
memset
(
nr_mcc_digit
,
0
,
sizeof
(
nr_mcc_digit
));
memset
(
nr_mnc_digit
,
0
,
sizeof
(
nr_mnc_digit
));
// struct NR_UAC_BarringInfoSet nr_uac_BarringInfoSet;
sib1_message
=
CALLOC
(
1
,
sizeof
(
NR_BCCH_DL_SCH_Message_t
));
memset
(
sib1_message
,
0
,
sizeof
(
NR_BCCH_DL_SCH_Message_t
));
NR_BCCH_DL_SCH_Message_t
*
sib1_message
=
CALLOC
(
1
,
sizeof
(
NR_BCCH_DL_SCH_Message_t
));
carrier
->
siblock1
=
sib1_message
;
sib1_message
->
message
.
present
=
NR_BCCH_DL_SCH_MessageType_PR_c1
;
sib1_message
->
message
.
choice
.
c1
=
CALLOC
(
1
,
sizeof
(
struct
NR_BCCH_DL_SCH_MessageType__c1
));
memset
(
sib1_message
->
message
.
choice
.
c1
,
0
,
sizeof
(
struct
NR_BCCH_DL_SCH_MessageType__c1
));
sib1_message
->
message
.
choice
.
c1
->
present
=
NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
;
sib1_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
=
CALLOC
(
1
,
sizeof
(
struct
NR_SIB1
));
sib1
=
sib1_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
;
memset
(
sib1
,
0
,
sizeof
(
struct
NR_SIB1
))
;
struct
NR_SIB1
*
sib1
=
sib1_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
;
sib1
->
cellSelectionInfo
=
CALLOC
(
1
,
sizeof
(
struct
NR_SIB1__cellSelectionInfo
));
memset
(
sib1
->
cellSelectionInfo
,
0
,
sizeof
(
struct
NR_SIB1__cellSelectionInfo
));
sib1
->
cellSelectionInfo
->
q_RxLevMin
=
-
50
;
memset
(
&
nr_plmn_info
.
plmn_IdentityList
,
0
,
sizeof
(
struct
NR_PLMN_IdentityInfo__plmn_IdentityList
));
asn_set_empty
(
&
nr_plmn_info
.
plmn_IdentityList
.
list
);
memset
(
&
nr_plmn_info
,
0
,
sizeof
(
struct
NR_PLMN_IdentityInfo
));
memset
(
nr_plmn
,
0
,
num_plmn
*
sizeof
(
struct
NR_PLMN_Identity
));
for
(
i
=
0
;
i
<
num_plmn
;
++
i
)
{
struct
NR_PLMN_IdentityInfo
*
nr_plmn_info
=
CALLOC
(
1
,
sizeof
(
struct
NR_PLMN_IdentityInfo
));
asn_set_empty
(
&
nr_plmn_info
->
plmn_IdentityList
.
list
);
for
(
int
i
=
0
;
i
<
num_plmn
;
++
i
)
{
nr_mcc_digit
[
i
][
0
]
=
(
configuration
->
mcc
[
i
]
/
100
)
%
10
;
nr_mcc_digit
[
i
][
1
]
=
(
configuration
->
mcc
[
i
]
/
10
)
%
10
;
nr_mcc_digit
[
i
][
2
]
=
(
configuration
->
mcc
[
i
])
%
10
;
nr_plmn
[
i
].
mcc
=
CALLOC
(
1
,
sizeof
(
struct
NR_MCC
));
memset
(
nr_plmn
[
i
].
mcc
,
0
,
sizeof
(
struct
NR_MCC
));
asn_set_empty
(
&
nr_plmn
[
i
].
mcc
->
list
);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mcc
->
list
,
&
nr_mcc_digit
[
i
][
0
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mcc
->
list
,
&
nr_mcc_digit
[
i
][
1
]);
...
...
@@ -310,26 +305,23 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
nr_mnc_digit
[
i
][
0
]
=
(
configuration
->
mnc
[
i
]
/
100
)
%
10
;
nr_mnc_digit
[
i
][
1
]
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
nr_mnc_digit
[
i
][
2
]
=
(
configuration
->
mnc
[
i
])
%
10
;
memset
(
&
nr_plmn
[
i
].
mnc
,
0
,
sizeof
(
NR_MNC_t
));
nr_plmn
[
i
].
mnc
.
list
.
size
=
0
;
nr_plmn
[
i
].
mnc
.
list
.
count
=
0
;
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
0
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
1
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
2
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn_info
.
plmn_IdentityList
.
list
,
&
nr_plmn
[
i
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn_info
->
plmn_IdentityList
.
list
,
&
nr_plmn
[
i
]);
}
//end plmn loop
nr_plmn_info
.
cellIdentity
.
buf
=
MALLOC
(
8
);
memset
(
nr_plmn_info
.
cellIdentity
.
buf
,
0
,
8
);
nr_plmn_info
.
cellIdentity
.
buf
[
0
]
=
(
configuration
->
cell_identity
>>
20
)
&
0xff
;
nr_plmn_info
.
cellIdentity
.
buf
[
1
]
=
(
configuration
->
cell_identity
>>
12
)
&
0xff
;
nr_plmn_info
.
cellIdentity
.
buf
[
2
]
=
(
configuration
->
cell_identity
>>
4
)
&
0xff
;
nr_plmn_info
.
cellIdentity
.
buf
[
3
]
=
(
configuration
->
cell_identity
<<
4
)
&
0xff
;
nr_plmn_info
.
cellIdentity
.
size
=
4
;
nr_plmn_info
.
cellIdentity
.
bits_unused
=
4
;
nr_plmn_info
.
cellReservedForOperatorUse
=
0
;
memset
(
&
sib1
->
cellAccessRelatedInfo
,
0
,
sizeof
(
NR_CellAccessRelatedInfo_t
));
ASN_SEQUENCE_ADD
(
&
sib1
->
cellAccessRelatedInfo
.
plmn_IdentityList
.
list
,
&
nr_plmn_info
);
nr_plmn_info
->
cellIdentity
.
buf
=
CALLOC
(
1
,
8
);
nr_plmn_info
->
cellIdentity
.
buf
[
0
]
=
(
configuration
->
cell_identity
>>
20
)
&
0xff
;
nr_plmn_info
->
cellIdentity
.
buf
[
1
]
=
(
configuration
->
cell_identity
>>
12
)
&
0xff
;
nr_plmn_info
->
cellIdentity
.
buf
[
2
]
=
(
configuration
->
cell_identity
>>
4
)
&
0xff
;
nr_plmn_info
->
cellIdentity
.
buf
[
3
]
=
(
configuration
->
cell_identity
<<
4
)
&
0xff
;
nr_plmn_info
->
cellIdentity
.
size
=
4
;
nr_plmn_info
->
cellIdentity
.
bits_unused
=
4
;
nr_plmn_info
->
cellReservedForOperatorUse
=
0
;
ASN_SEQUENCE_ADD
(
&
sib1
->
cellAccessRelatedInfo
.
plmn_IdentityList
.
list
,
nr_plmn_info
);
#if 0
sib1->uac_BarringInfo = CALLOC(1, sizeof(struct NR_SIB1__uac_BarringInfo));
memset(sib1->uac_BarringInfo, 0, sizeof(struct NR_SIB1__uac_BarringInfo));
...
...
@@ -345,11 +337,12 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
xer_fprint
(
stdout
,
&
asn_DEF_NR_SIB1
,
(
const
void
*
)
sib1_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
);
//encode SIB1 to data
if
(
carrier
->
SIB1
==
NULL
)
carrier
->
SIB1
=
(
uint8_t
*
)
malloc16
(
MAX_NR_SIB_LENGTH
/
8
);
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
NULL
,
(
void
*
)
sib1_message
,
carrier
->
SIB1
,
100
);
MAX_NR_SIB_LENGTH
/
8
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
...
...
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