Fix develop merge conflicts
This commit is contained in:
@@ -917,7 +917,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
|
|||||||
n_rnti = rel15->rnti;
|
n_rnti = rel15->rnti;
|
||||||
|
|
||||||
if (crc == n_rnti) {
|
if (crc == n_rnti) {
|
||||||
LOG_D(PHY, "(%i.%i) Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n",
|
LOG_I(PHY, "(%i.%i) Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n",
|
||||||
proc->frame_rx, proc->nr_slot_rx,n_rnti,rel15->dci_format_options[k],CCEind,dci_length,*(unsigned long long*)dci_estimation);
|
proc->frame_rx, proc->nr_slot_rx,n_rnti,rel15->dci_format_options[k],CCEind,dci_length,*(unsigned long long*)dci_estimation);
|
||||||
dci_ind->SFN = proc->frame_rx;
|
dci_ind->SFN = proc->frame_rx;
|
||||||
dci_ind->slot = proc->nr_slot_rx;
|
dci_ind->slot = proc->nr_slot_rx;
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (pdu_type){
|
switch (pdu_type){
|
||||||
|
case FAPI_NR_RX_PDU_TYPE_SIB:
|
||||||
case FAPI_NR_RX_PDU_TYPE_DLSCH:
|
case FAPI_NR_RX_PDU_TYPE_DLSCH:
|
||||||
case FAPI_NR_RX_PDU_TYPE_RAR:
|
case FAPI_NR_RX_PDU_TYPE_RAR:
|
||||||
harq_pid = dlsch0->current_harq_pid;
|
harq_pid = dlsch0->current_harq_pid;
|
||||||
@@ -1208,7 +1209,8 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
|
|||||||
nr_fill_rx_indication(&rx_ind, FAPI_NR_RX_PDU_TYPE_DLSCH, eNB_id, ue, dlsch0, number_pdus);
|
nr_fill_rx_indication(&rx_ind, FAPI_NR_RX_PDU_TYPE_DLSCH, eNB_id, ue, dlsch0, number_pdus);
|
||||||
break;
|
break;
|
||||||
case SI_PDSCH:
|
case SI_PDSCH:
|
||||||
rx_ind.rx_indication_body[0].pdu_type = FAPI_NR_RX_PDU_TYPE_SIB;
|
nr_fill_dl_indication(&dl_indication, NULL, &rx_ind, proc, ue, eNB_id);
|
||||||
|
nr_fill_rx_indication(&rx_ind, FAPI_NR_RX_PDU_TYPE_SIB, eNB_id, ue, dlsch0, number_pdus);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
const char *rnti_types[]={"RNTI_new", "RNTI_C", "RNTI_RA", "NR_RNTI_P", "NR_RNTI_CS", "NR_RNTI_TC"};
|
const char *rnti_types[]={"RNTI_new", "RNTI_C", "RNTI_RA", "NR_RNTI_P", "NR_RNTI_CS", "NR_RNTI_TC", "NR_RNTI_SP_CSI", "NR_RNTI_SI"};
|
||||||
const char *dci_formats[]={"1_0", "1_1", "2_0", "2_1", "2_2", "2_3", "0_0", "0_1"};
|
const char *dci_formats[]={"1_0", "1_1", "2_0", "2_1", "2_2", "2_3", "0_0", "0_1"};
|
||||||
|
|
||||||
// table_7_3_1_1_2_2_3_4_5 contains values for number of layers and precoding information for tables 7.3.1.1.2-2/3/4/5 from TS 38.212 subclause 7.3.1.1.2
|
// table_7_3_1_1_2_2_3_4_5 contains values for number of layers and precoding information for tables 7.3.1.1.2-2/3/4/5 from TS 38.212 subclause 7.3.1.1.2
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
/* RRC */
|
/* RRC */
|
||||||
#include "NR_RACH-ConfigCommon.h"
|
#include "NR_RACH-ConfigCommon.h"
|
||||||
|
#include "RRC/NR_UE/rrc_proto.h"
|
||||||
|
|
||||||
/* PHY */
|
/* PHY */
|
||||||
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
|
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
|
||||||
@@ -514,7 +515,7 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
|
|
||||||
uint8_t sdu_lcids[NB_RB_MAX] = {0};
|
uint8_t sdu_lcids[NB_RB_MAX] = {0};
|
||||||
uint16_t sdu_lengths[NB_RB_MAX] = {0};
|
uint16_t sdu_lengths[NB_RB_MAX] = {0};
|
||||||
int TBS_bytes = 848, header_length_total=0, num_sdus, offset, mac_ce_len;
|
int num_sdus, offset = 0, preambleTransMax;
|
||||||
|
|
||||||
// Delay init RA procedure to allow the convergence of the IIR filter on PRACH noise measurements at gNB side
|
// Delay init RA procedure to allow the convergence of the IIR filter on PRACH noise measurements at gNB side
|
||||||
if (!prach_resources->init_msg1) {
|
if (!prach_resources->init_msg1) {
|
||||||
@@ -532,35 +533,20 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
|
|
||||||
LOG_D(MAC, "RA not active. Checking for data to transmit from upper layers...\n");
|
LOG_D(MAC, "RA not active. Checking for data to transmit from upper layers...\n");
|
||||||
|
|
||||||
payload = (uint8_t*) &mac->CCCH_pdu.payload;
|
uint8_t TBS_max = 8 + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT);
|
||||||
mac_ce_len = 0;
|
payload = (uint8_t*) mac->CCCH_pdu.payload;
|
||||||
|
|
||||||
num_sdus = 1;
|
num_sdus = 1;
|
||||||
post_padding = 1;
|
post_padding = 1;
|
||||||
|
sdu_lcids[0] = lcid;
|
||||||
|
|
||||||
if (0){
|
// initialisation by RRC
|
||||||
// initialisation by RRC
|
// CCCH PDU
|
||||||
// CCCH PDU
|
size_sdu = (uint16_t) nr_mac_rrc_data_req_ue(mod_id, CC_id, gNB_id, frame, CCCH, mac_sdus);
|
||||||
// size_sdu = (uint16_t) mac_rrc_data_req_ue(mod_id,
|
|
||||||
// CC_id,
|
sdu_lengths[0] = size_sdu;
|
||||||
// frame,
|
|
||||||
// CCCH,
|
LOG_D(MAC,"[UE %d] Frame %d: Requested RRCConnectionRequest, got %d bytes\n", mod_id, frame, size_sdu);
|
||||||
// 1,
|
|
||||||
// mac_sdus,
|
|
||||||
// gNB_id,
|
|
||||||
// 0);
|
|
||||||
LOG_D(MAC,"[UE %d] Frame %d: Requested RRCConnectionRequest, got %d bytes\n", mod_id, frame, size_sdu);
|
|
||||||
} else {
|
|
||||||
// fill ulsch_buffer with random data
|
|
||||||
for (int i = 0; i < TBS_bytes; i++){
|
|
||||||
mac_sdus[i] = (unsigned char) (lrand48()&0xff);
|
|
||||||
}
|
|
||||||
//Sending SDUs with size 1
|
|
||||||
//Initialize elements of sdu_lcids and sdu_lengths
|
|
||||||
sdu_lcids[0] = lcid;
|
|
||||||
sdu_lengths[0] = TBS_bytes - 3 - post_padding - mac_ce_len;
|
|
||||||
header_length_total += 2 + (sdu_lengths[0] >= 128);
|
|
||||||
size_sdu += sdu_lengths[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (size_sdu > 0) {
|
if (size_sdu > 0) {
|
||||||
|
|
||||||
@@ -589,12 +575,27 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
|
|||||||
post_padding,
|
post_padding,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
AssertFatal(TBS_max > offset, "Frequency resources are not enough for Msg3!\n");
|
||||||
|
|
||||||
// Padding: fill remainder with 0
|
// Padding: fill remainder with 0
|
||||||
if (post_padding > 0){
|
if (post_padding > 0){
|
||||||
for (int j = 0; j < (TBS_bytes - offset); j++)
|
for (int j = 0; j < (TBS_max - offset); j++)
|
||||||
payload[offset + j] = 0; // mac_pdu[offset + j] = 0;
|
payload[offset + j] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_D(MAC,"size_sdu = %i\n", size_sdu);
|
||||||
|
LOG_D(MAC,"offset = %i\n", offset);
|
||||||
|
for(int k = 0; k < TBS_max; k++) {
|
||||||
|
LOG_D(MAC,"(%i): %i\n", k, prach_resources->Msg3[k]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Msg3 was initialized with TBS_max bytes because the mac->RA_Msg3_size will only be known after
|
||||||
|
// receiving Msg2 (which contains the Msg3 resource reserve).
|
||||||
|
// Msg3 will be transmitted with mac->RA_Msg3_size bytes, removing unnecessary 0s.
|
||||||
|
mac->ulsch_pdu.Pdu_size = TBS_max;
|
||||||
|
memcpy(mac->ulsch_pdu.payload, prach_resources->Msg3, TBS_max);
|
||||||
|
|
||||||
} else if (ra->RA_window_cnt != -1) { // RACH is active
|
} else if (ra->RA_window_cnt != -1) { // RACH is active
|
||||||
|
|
||||||
LOG_D(MAC, "In %s [%d.%d] RA is active: RA window count %d, RA backoff count %d\n", __FUNCTION__, frame, nr_slot_tx, ra->RA_window_cnt, ra->RA_backoff_cnt);
|
LOG_D(MAC, "In %s [%d.%d] RA is active: RA window count %d, RA backoff count %d\n", __FUNCTION__, frame, nr_slot_tx, ra->RA_window_cnt, ra->RA_backoff_cnt);
|
||||||
|
|||||||
@@ -584,7 +584,8 @@ void nr_get_Msg3alloc(module_id_t module_id,
|
|||||||
NR_RA_t *ra) {
|
NR_RA_t *ra) {
|
||||||
|
|
||||||
// msg3 is schedulend in mixed slot in the following TDD period
|
// msg3 is schedulend in mixed slot in the following TDD period
|
||||||
// for now we consider a TBS of 18 bytes
|
|
||||||
|
uint16_t msg3_nb_rb = 8 + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT); // sdu has 6 or 8 bytes
|
||||||
|
|
||||||
int mu = ubwp->bwp_Common->genericParameters.subcarrierSpacing;
|
int mu = ubwp->bwp_Common->genericParameters.subcarrierSpacing;
|
||||||
int StartSymbolIndex, NrOfSymbols, startSymbolAndLength, temp_slot;
|
int StartSymbolIndex, NrOfSymbols, startSymbolAndLength, temp_slot;
|
||||||
@@ -614,21 +615,22 @@ void nr_get_Msg3alloc(module_id_t module_id,
|
|||||||
uint16_t *vrb_map_UL =
|
uint16_t *vrb_map_UL =
|
||||||
&RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[ra->Msg3_slot * MAX_BWP_SIZE];
|
&RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[ra->Msg3_slot * MAX_BWP_SIZE];
|
||||||
const uint16_t bwpSize = NRRIV2BW(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
const uint16_t bwpSize = NRRIV2BW(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
/* search 18 free RBs */
|
|
||||||
|
/* search msg3_nb_rb free RBs */
|
||||||
int rbSize = 0;
|
int rbSize = 0;
|
||||||
int rbStart = 0;
|
int rbStart = 0;
|
||||||
while (rbSize < 18) {
|
while (rbSize < msg3_nb_rb) {
|
||||||
rbStart += rbSize; /* last iteration rbSize was not enough, skip it */
|
rbStart += rbSize; /* last iteration rbSize was not enough, skip it */
|
||||||
rbSize = 0;
|
rbSize = 0;
|
||||||
while (rbStart < bwpSize && vrb_map_UL[rbStart])
|
while (rbStart < bwpSize && vrb_map_UL[rbStart])
|
||||||
rbStart++;
|
rbStart++;
|
||||||
AssertFatal(rbStart < bwpSize - 18, "no space to allocate Msg 3 for RA!\n");
|
AssertFatal(rbStart < bwpSize - msg3_nb_rb, "no space to allocate Msg 3 for RA!\n");
|
||||||
while (rbStart + rbSize < bwpSize
|
while (rbStart + rbSize < bwpSize
|
||||||
&& !vrb_map_UL[rbStart + rbSize]
|
&& !vrb_map_UL[rbStart + rbSize]
|
||||||
&& rbSize < 18)
|
&& rbSize < msg3_nb_rb)
|
||||||
rbSize++;
|
rbSize++;
|
||||||
}
|
}
|
||||||
ra->msg3_nb_rb = 18;
|
ra->msg3_nb_rb = msg3_nb_rb;
|
||||||
ra->msg3_first_rb = rbStart;
|
ra->msg3_first_rb = rbStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+128
-13
@@ -413,6 +413,18 @@ NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* rrc_config_path){
|
|||||||
for(nr_ue=0;nr_ue<NB_NR_UE_INST;nr_ue++){
|
for(nr_ue=0;nr_ue<NB_NR_UE_INST;nr_ue++){
|
||||||
// fill UE-NR-Capability @ UE-CapabilityRAT-Container here.
|
// fill UE-NR-Capability @ UE-CapabilityRAT-Container here.
|
||||||
NR_UE_rrc_inst[nr_ue].selected_plmn_identity = 1;
|
NR_UE_rrc_inst[nr_ue].selected_plmn_identity = 1;
|
||||||
|
|
||||||
|
// TODO: Put the appropriate list of SIBs
|
||||||
|
NR_UE_rrc_inst[nr_ue].requested_SI_List.buf = CALLOC(1,4);
|
||||||
|
NR_UE_rrc_inst[nr_ue].requested_SI_List.buf[0] = SIB2 | SIB3 | SIB5; // SIB2 - SIB9
|
||||||
|
NR_UE_rrc_inst[nr_ue].requested_SI_List.buf[1] = 0; // SIB10 - SIB17
|
||||||
|
NR_UE_rrc_inst[nr_ue].requested_SI_List.buf[2] = 0; // SIB18 - SIB25
|
||||||
|
NR_UE_rrc_inst[nr_ue].requested_SI_List.buf[3] = 0; // SIB26 - SIB32
|
||||||
|
NR_UE_rrc_inst[nr_ue].requested_SI_List.size= 4;
|
||||||
|
NR_UE_rrc_inst[nr_ue].requested_SI_List.bits_unused= 0;
|
||||||
|
|
||||||
|
NR_UE_rrc_inst[nr_ue].ra_trigger = RA_NOT_RUNNING;
|
||||||
|
|
||||||
// init RRC lists
|
// init RRC lists
|
||||||
RRC_LIST_INIT(NR_UE_rrc_inst[nr_ue].RLC_Bearer_Config_list, NR_maxLC_ID);
|
RRC_LIST_INIT(NR_UE_rrc_inst[nr_ue].RLC_Bearer_Config_list, NR_maxLC_ID);
|
||||||
RRC_LIST_INIT(NR_UE_rrc_inst[nr_ue].SchedulingRequest_list, NR_maxNrofSR_ConfigPerCellGroup);
|
RRC_LIST_INIT(NR_UE_rrc_inst[nr_ue].SchedulingRequest_list, NR_maxNrofSR_ConfigPerCellGroup);
|
||||||
@@ -834,7 +846,7 @@ int nr_decode_SI( const protocol_ctxt_t *const ctxt_pP, const uint8_t gNB_index
|
|||||||
// After SI is received, prepare RRCConnectionRequest
|
// After SI is received, prepare RRCConnectionRequest
|
||||||
if (NR_UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option
|
if (NR_UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option
|
||||||
if (AMF_MODE_ENABLED) {
|
if (AMF_MODE_ENABLED) {
|
||||||
rrc_ue_generate_RRCSetupRequest( ctxt_pP, gNB_index );
|
nr_rrc_ue_generate_RRCSetupRequest( ctxt_pP->module_id, gNB_index );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NR_UE_rrc_inst[ctxt_pP->module_id].Info[gNB_index].State == NR_RRC_IDLE) {
|
if (NR_UE_rrc_inst[ctxt_pP->module_id].Info[gNB_index].State == NR_RRC_IDLE) {
|
||||||
@@ -1287,7 +1299,7 @@ int nr_decode_BCCH_DLSCH_Message(
|
|||||||
|
|
||||||
if (nr_rrc_get_sub_state(ctxt_pP->module_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE_NR) {
|
if (nr_rrc_get_sub_state(ctxt_pP->module_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE_NR) {
|
||||||
//if ( (NR_UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.data != NULL) || (!AMF_MODE_ENABLED)) {
|
//if ( (NR_UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.data != NULL) || (!AMF_MODE_ENABLED)) {
|
||||||
rrc_ue_generate_RRCSetupRequest(ctxt_pP, 0);
|
nr_rrc_ue_generate_RRCSetupRequest(ctxt_pP->module_id, 0);
|
||||||
nr_rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_CONNECTING );
|
nr_rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_CONNECTING );
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
@@ -1488,6 +1500,100 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int8_t check_requested_SI_List(module_id_t module_id, BIT_STRING_t requested_SI_List, NR_SIB1_t sib1) {
|
||||||
|
|
||||||
|
if(sib1.si_SchedulingInfo) {
|
||||||
|
|
||||||
|
bool SIB_to_request[32] = {};
|
||||||
|
|
||||||
|
LOG_D(RRC, "SIBs broadcasting: ");
|
||||||
|
for(int i = 0; i < sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.count; i++) {
|
||||||
|
printf("SIB%li ", sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.array[i]->type + 2);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
LOG_D(RRC, "SIBs needed by UE: ");
|
||||||
|
for(int j = 0; j < 8*requested_SI_List.size; j++) {
|
||||||
|
if( ((requested_SI_List.buf[j/8]>>(j%8))&1) == 1) {
|
||||||
|
|
||||||
|
printf("SIB%i ", j + 2);
|
||||||
|
|
||||||
|
SIB_to_request[j] = true;
|
||||||
|
for(int i = 0; i < sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.count; i++) {
|
||||||
|
if(sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.array[i]->type == j) {
|
||||||
|
SIB_to_request[j] = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
LOG_D(RRC, "SIBs to request by UE: ");
|
||||||
|
bool do_ra = false;
|
||||||
|
for(int j = 0; j < 8*requested_SI_List.size; j++) {
|
||||||
|
if(SIB_to_request[j]) {
|
||||||
|
printf("SIB%i ", j + 2);
|
||||||
|
do_ra = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
if(do_ra) {
|
||||||
|
|
||||||
|
NR_UE_rrc_inst[module_id].ra_trigger = REQUEST_FOR_OTHER_SI;
|
||||||
|
get_softmodem_params()->do_ra = 1;
|
||||||
|
|
||||||
|
if(sib1.si_SchedulingInfo->si_RequestConfig) {
|
||||||
|
LOG_D(RRC, "Trigger contention-free RA procedure (ra_trigger = %i)\n", NR_UE_rrc_inst[module_id].ra_trigger);
|
||||||
|
} else {
|
||||||
|
LOG_D(RRC, "Trigger contention-based RA procedure (ra_trigger = %i)\n", NR_UE_rrc_inst[module_id].ra_trigger);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int8_t nr_rrc_ue_generate_ra_msg(module_id_t module_id, uint8_t gNB_index) {
|
||||||
|
|
||||||
|
switch(NR_UE_rrc_inst[module_id].ra_trigger){
|
||||||
|
case INITIAL_ACCESS_FROM_RRC_IDLE:
|
||||||
|
nr_rrc_ue_generate_RRCSetupRequest(module_id,gNB_index);
|
||||||
|
break;
|
||||||
|
case RRC_CONNECTION_REESTABLISHMENT:
|
||||||
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
|
break;
|
||||||
|
case DURING_HANDOVER:
|
||||||
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
|
break;
|
||||||
|
case NON_SYNCHRONISED:
|
||||||
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
|
break;
|
||||||
|
case TRANSITION_FROM_RRC_INACTIVE:
|
||||||
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
|
break;
|
||||||
|
case TO_ESTABLISH_TA:
|
||||||
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
|
break;
|
||||||
|
case REQUEST_FOR_OTHER_SI:
|
||||||
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
|
break;
|
||||||
|
case BEAM_FAILURE_RECOVERY:
|
||||||
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AssertFatal(1==0, "Invalid ra_trigger value!\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*brief decode SIB1 message*/
|
/*brief decode SIB1 message*/
|
||||||
int8_t nr_rrc_ue_decode_NR_SIB1_Message(module_id_t module_id, uint8_t gNB_index, uint8_t *const bufferP, const uint8_t buffer_len) {
|
int8_t nr_rrc_ue_decode_NR_SIB1_Message(module_id_t module_id, uint8_t gNB_index, uint8_t *const bufferP, const uint8_t buffer_len) {
|
||||||
|
|
||||||
@@ -1514,6 +1620,15 @@ int8_t nr_rrc_ue_decode_NR_SIB1_Message(module_id_t module_id, uint8_t gNB_index
|
|||||||
LOG_I(RRC, "SIB1 decoded\n");
|
LOG_I(RRC, "SIB1 decoded\n");
|
||||||
if( g_log->log_component[RRC].level >= OAILOG_DEBUG )
|
if( g_log->log_component[RRC].level >= OAILOG_DEBUG )
|
||||||
xer_fprint(stdout, &asn_DEF_NR_SIB1, (const void*)sib1);
|
xer_fprint(stdout, &asn_DEF_NR_SIB1, (const void*)sib1);
|
||||||
|
|
||||||
|
// FIXME: fix condition for the RA trigger
|
||||||
|
check_requested_SI_List(module_id, NR_UE_rrc_inst[module_id].requested_SI_List, *sib1);
|
||||||
|
if( nr_rrc_get_state(module_id) == RRC_STATE_IDLE_NR ) {
|
||||||
|
NR_UE_rrc_inst[module_id].ra_trigger = INITIAL_ACCESS_FROM_RRC_IDLE;
|
||||||
|
get_softmodem_params()->do_ra = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
nr_rrc_ue_generate_ra_msg(module_id,gNB_index);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LOG_E(PHY, "sib1 is starting by 8 times 0\n");
|
LOG_E(PHY, "sib1 is starting by 8 times 0\n");
|
||||||
@@ -1783,10 +1898,10 @@ nr_rrc_ue_process_securityModeCommand(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void rrc_ue_generate_RRCSetupRequest( const protocol_ctxt_t *const ctxt_pP, const uint8_t gNB_index ) {
|
void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB_index ) {
|
||||||
uint8_t i=0,rv[6];
|
uint8_t i=0,rv[6];
|
||||||
|
|
||||||
if(NR_UE_rrc_inst[ctxt_pP->module_id].Srb0[gNB_index].Tx_buffer.payload_size ==0) {
|
if(NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size ==0) {
|
||||||
// Get RRCConnectionRequest, fill random for now
|
// Get RRCConnectionRequest, fill random for now
|
||||||
// Generate random byte stream for contention resolution
|
// Generate random byte stream for contention resolution
|
||||||
for (i=0; i<6; i++) {
|
for (i=0; i<6; i++) {
|
||||||
@@ -1800,16 +1915,16 @@ void rrc_ue_generate_RRCSetupRequest( const protocol_ctxt_t *const ctxt_pP, cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
LOG_T(NR_RRC,"\n");
|
LOG_T(NR_RRC,"\n");
|
||||||
NR_UE_rrc_inst[ctxt_pP->module_id].Srb0[gNB_index].Tx_buffer.payload_size =
|
NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size =
|
||||||
do_RRCSetupRequest(
|
do_RRCSetupRequest(
|
||||||
ctxt_pP->module_id,
|
module_id,
|
||||||
(uint8_t *)NR_UE_rrc_inst[ctxt_pP->module_id].Srb0[gNB_index].Tx_buffer.Payload,
|
(uint8_t *)NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.Payload,
|
||||||
rv);
|
rv);
|
||||||
LOG_I(NR_RRC,"[UE %d] : Frame %d, Logical Channel UL-CCCH (SRB0), Generating RRCSetupRequest (bytes %d, eNB %d)\n",
|
LOG_I(NR_RRC,"[UE %d] : Logical Channel UL-CCCH (SRB0), Generating RRCSetupRequest (bytes %d, gNB %d)\n",
|
||||||
ctxt_pP->module_id, ctxt_pP->frame, NR_UE_rrc_inst[ctxt_pP->module_id].Srb0[gNB_index].Tx_buffer.payload_size, gNB_index);
|
module_id, NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size, gNB_index);
|
||||||
|
|
||||||
for (i=0; i<NR_UE_rrc_inst[ctxt_pP->module_id].Srb0[gNB_index].Tx_buffer.payload_size; i++) {
|
for (i=0; i<NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size; i++) {
|
||||||
LOG_T(NR_RRC,"%x.",NR_UE_rrc_inst[ctxt_pP->module_id].Srb0[gNB_index].Tx_buffer.Payload[i]);
|
LOG_T(NR_RRC,"%x.",NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.Payload[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_T(NR_RRC,"\n");
|
LOG_T(NR_RRC,"\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user