Commit e1554c6f authored by hongzhi wang's avatar hongzhi wang

UE: Add P5 phy_config_request with MIB information.

MIB PDU decode complete.
parent 33bd476c
...@@ -223,7 +223,14 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode) ...@@ -223,7 +223,14 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
nr_gold_pbch(ue); nr_gold_pbch(ue);
ret = nr_pbch_detection(ue,mode); ret = nr_pbch_detection(ue,mode);
ret = -1; //to be deleted
LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n",
ue->Mod_id,
ue->proc.proc_rxtx[0].frame_rx,
ue->rx_offset,
ue->common_vars.freq_offset );
//ret = -1; //to be deleted
// write_output("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); // write_output("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
#ifdef DEBUG_INITIAL_SYNCH #ifdef DEBUG_INITIAL_SYNCH
......
...@@ -616,13 +616,13 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, ...@@ -616,13 +616,13 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue,
pbch_a = nr_ue_pbch_vars->pbch_a; pbch_a = nr_ue_pbch_vars->pbch_a;
pbch_a_prime = nr_ue_pbch_vars->pbch_a_prime; pbch_a_prime = nr_ue_pbch_vars->pbch_a_prime;
#ifdef DEBUG_PBCH //#ifdef DEBUG_PBCH
//pbch_e_rx = &nr_ue_pbch_vars->llr[0]; //pbch_e_rx = &nr_ue_pbch_vars->llr[0];
short *p = (short *)&(nr_ue_pbch_vars->rxdataF_comp[0][1*20*12]); short *p = (short *)&(nr_ue_pbch_vars->rxdataF_comp[0][1*20*12]);
for (int cnt = 0; cnt < 8 ; cnt++) for (int cnt = 0; cnt < 8 ; cnt++)
printf("pbch rx llr %d rxdata_comp %d addr %p\n",*(pbch_e_rx+cnt), p[cnt], &p[0]); printf("pbch rx llr %d rxdata_comp %d addr %p\n",*(pbch_e_rx+cnt), p[cnt], &p[0]);
#endif //#endif
for (i=0; i<NR_POLAR_PBCH_E/2; i++){ for (i=0; i<NR_POLAR_PBCH_E/2; i++){
idx_demod = (sign(pbch_e_rx[i<<1])&1) ^ ((sign(pbch_e_rx[(i<<1)+1])&1)<<1); idx_demod = (sign(pbch_e_rx[i<<1])&1) ^ ((sign(pbch_e_rx[(i<<1)+1])&1)<<1);
...@@ -648,6 +648,8 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, ...@@ -648,6 +648,8 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue,
//polar decoding de-rate matching //polar decoding de-rate matching
decoderState = polar_decoder(demod_pbch_e, pbch_a_b, &frame_parms->pbch_polar_params, decoderListSize, aPrioriArray, pathMetricAppr); decoderState = polar_decoder(demod_pbch_e, pbch_a_b, &frame_parms->pbch_polar_params, decoderListSize, aPrioriArray, pathMetricAppr);
if(decoderState == -1)
return(decoderState);
memset(&pbch_a_prime[0], 0, sizeof(uint8_t) * NR_POLAR_PBCH_PAYLOAD_BITS>>3); memset(&pbch_a_prime[0], 0, sizeof(uint8_t) * NR_POLAR_PBCH_PAYLOAD_BITS>>3);
for (i=0; i<NR_POLAR_PBCH_PAYLOAD_BITS; i++) for (i=0; i<NR_POLAR_PBCH_PAYLOAD_BITS; i++)
...@@ -675,9 +677,9 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, ...@@ -675,9 +677,9 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue,
for (int i=0; i<32; i++) { for (int i=0; i<32; i++) {
out |= ((in>>i)&1)<<(pbch_deinterleaving_pattern[i]); out |= ((in>>i)&1)<<(pbch_deinterleaving_pattern[i]);
//#ifdef DEBUG_PBCH #ifdef DEBUG_PBCH
printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) 0x%08x\n", i, in, out, pbch_deinterleaving_pattern[i], (in>>i)&1); printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) 0x%08x\n", i, in, out, pbch_deinterleaving_pattern[i], (in>>i)&1);
//#endif #endif
} }
for (int i=0; i<NR_POLAR_PBCH_PAYLOAD_BITS>>3; i++) for (int i=0; i<NR_POLAR_PBCH_PAYLOAD_BITS>>3; i++)
...@@ -693,12 +695,9 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, ...@@ -693,12 +695,9 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue,
printf("[PBCH] decoder_output[%d] = %x\n",i,decoded_output[i]); printf("[PBCH] decoder_output[%d] = %x\n",i,decoded_output[i]);
} }
//#endif //#endif
ue->dl_indication.rx_ind.rx_request_body.pdu_index = FAPI_NR_RX_PDU_BCCH_BCH_TYPE; ue->dl_indication.rx_ind.rx_request_body.pdu_index = FAPI_NR_RX_PDU_BCCH_BCH_TYPE;
ue->dl_indication.rx_ind.rx_request_body.pdu_length = 3; ue->dl_indication.rx_ind.rx_request_body.pdu_length = 3;
// ue->dl_indication.rx_ind.rx_request_body.pdu = &pbch_a[0];
ue->dl_indication.rx_ind.rx_request_body.pdu = &decoded_output[0]; ue->dl_indication.rx_ind.rx_request_body.pdu = &decoded_output[0];
ue->if_inst->dl_indication(&ue->dl_indication); ue->if_inst->dl_indication(&ue->dl_indication);
......
...@@ -34,6 +34,10 @@ ...@@ -34,6 +34,10 @@
#include "fapi_nr_ue_interface.h" #include "fapi_nr_ue_interface.h"
#include "fapi_nr_ue_l1.h" #include "fapi_nr_ue_l1.h"
//#include "PHY/phy_vars_nr_ue.h"
#include "PHY/defs_nr_UE.h"
extern PHY_VARS_NR_UE ***PHY_vars_UE_g;
int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
...@@ -70,6 +74,8 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){ ...@@ -70,6 +74,8 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){
printf("ssb index: %d\n", phy_config->config_req.pbch_config.ssb_index); printf("ssb index: %d\n", phy_config->config_req.pbch_config.ssb_index);
printf("half frame bit: %d\n", phy_config->config_req.pbch_config.half_frame_bit); printf("half frame bit: %d\n", phy_config->config_req.pbch_config.half_frame_bit);
printf("-------------------------------\n"); printf("-------------------------------\n");
PHY_vars_UE_g[0][0]->proc.proc_rxtx[0].frame_rx = phy_config->config_req.pbch_config.system_frame_number;
} }
if(phy_config->config_req.config_mask & FAPI_NR_CONFIG_REQUEST_MASK_DL_BWP_COMMON){ if(phy_config->config_req.config_mask & FAPI_NR_CONFIG_REQUEST_MASK_DL_BWP_COMMON){
...@@ -92,4 +98,4 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){ ...@@ -92,4 +98,4 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){
return 0; return 0;
} }
\ No newline at end of file
...@@ -53,52 +53,55 @@ int8_t nr_ue_decode_mib( ...@@ -53,52 +53,55 @@ int8_t nr_ue_decode_mib(
nr_mac_rrc_data_ind_ue( module_id, CC_id, gNB_index, nr_mac_rrc_data_ind_ue( module_id, CC_id, gNB_index,
NR_BCCH_BCH, (uint8_t *) pduP, pdu_len ); NR_BCCH_BCH, (uint8_t *) pduP, pdu_len );
uint32_t frame = mac->mib->systemFrameNumber.buf[0];
uint32_t frame_number_4lsb = (uint32_t)(extra_bits & 0xf); // extra bits[0:3]
uint32_t half_frame_bit = (uint32_t)(( extra_bits >> 4 ) & 0x1 ); // extra bits[4]
uint32_t ssb_subcarrier_offset_msb = (uint32_t)(( extra_bits >> 5 ) & 0x1 ); // extra bits[5]
uint32_t ssb_subcarrier_offset = mac->mib->ssb_SubcarrierOffset;
uint32_t ssb_index = 0; if(mac->mib != NULL){
uint32_t frame = (mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused);
uint32_t frame_number_4lsb = (uint32_t)(extra_bits & 0xf); // extra bits[0:3]
uint32_t half_frame_bit = (uint32_t)(( extra_bits >> 4 ) & 0x1 ); // extra bits[4]
uint32_t ssb_subcarrier_offset_msb = (uint32_t)(( extra_bits >> 5 ) & 0x1 ); // extra bits[5]
uint32_t ssb_subcarrier_offset = mac->mib->ssb_SubcarrierOffset;
frame = frame << 4; uint32_t ssb_index = 0;
frame = frame | frame_number_4lsb;
if(l_ssb_equal_64){ frame = frame << 4;
ssb_index = (( extra_bits >> 5 ) & 0x7 ); // extra bits[5:7] frame = frame | frame_number_4lsb;
}else{
if(ssb_subcarrier_offset_msb){
ssb_subcarrier_offset = ssb_subcarrier_offset | 0x10;
}
}
printf("system frame number(with LSB): %d\n", (int)frame); if(l_ssb_equal_64){
printf("subcarrier spacing: %d\n", (int)mac->mib->subCarrierSpacingCommon); ssb_index = (( extra_bits >> 5 ) & 0x7 ); // extra bits[5:7]
printf("ssb carrier offset(with MSB): %d\n", (int)ssb_subcarrier_offset); }else{
printf("dmrs type A position: %d\n", (int)mac->mib->dmrs_TypeA_Position); if(ssb_subcarrier_offset_msb){
printf("pdcch config sib1: %d\n", (int)mac->mib->pdcch_ConfigSIB1); ssb_subcarrier_offset = ssb_subcarrier_offset | 0x10;
printf("cell barred: %d\n", (int)mac->mib->cellBarred); }
printf("intra frequcney reselection: %d\n", (int)mac->mib->intraFreqReselection); }
printf("half frame bit(extra bits): %d\n", (int)half_frame_bit);
printf("ssb index(extra bits): %d\n", (int)ssb_index);
// fill in the elements in config request inside P5 message printf("system frame number(6 MSB bits): %d\n", mac->mib->systemFrameNumber.buf[0]);
mac->phy_config.config_req.pbch_config.system_frame_number = frame; // after calculation printf("system frame number(with LSB): %d\n", (int)frame);
mac->phy_config.config_req.pbch_config.subcarrier_spacing_common = mac->mib->subCarrierSpacingCommon; printf("subcarrier spacing: %d\n", (int)mac->mib->subCarrierSpacingCommon);
mac->phy_config.config_req.pbch_config.ssb_subcarrier_offset = ssb_subcarrier_offset; // after calculation printf("ssb carrier offset(with MSB): %d\n", (int)ssb_subcarrier_offset);
mac->phy_config.config_req.pbch_config.dmrs_type_a_position = mac->mib->dmrs_TypeA_Position; printf("dmrs type A position: %d\n", (int)mac->mib->dmrs_TypeA_Position);
mac->phy_config.config_req.pbch_config.pdcch_config_sib1 = mac->mib->pdcch_ConfigSIB1; printf("pdcch config sib1: %d\n", (int)mac->mib->pdcch_ConfigSIB1);
mac->phy_config.config_req.pbch_config.cell_barred = mac->mib->cellBarred; printf("cell barred: %d\n", (int)mac->mib->cellBarred);
mac->phy_config.config_req.pbch_config.intra_frequency_reselection = mac->mib->intraFreqReselection; printf("intra frequcney reselection: %d\n", (int)mac->mib->intraFreqReselection);
mac->phy_config.config_req.pbch_config.half_frame_bit = half_frame_bit; printf("half frame bit(extra bits): %d\n", (int)half_frame_bit);
mac->phy_config.config_req.pbch_config.ssb_index = ssb_index; printf("ssb index(extra bits): %d\n", (int)ssb_index);
mac->phy_config.config_req.config_mask |= FAPI_NR_CONFIG_REQUEST_MASK_PBCH;
if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL){ // fill in the elements in config request inside P5 message
mac->if_module->phy_config_request(&mac->phy_config); mac->phy_config.config_req.pbch_config.system_frame_number = frame; // after calculation
} mac->phy_config.config_req.pbch_config.subcarrier_spacing_common = mac->mib->subCarrierSpacingCommon;
mac->phy_config.config_req.pbch_config.ssb_subcarrier_offset = ssb_subcarrier_offset; // after calculation
mac->phy_config.config_req.pbch_config.dmrs_type_a_position = mac->mib->dmrs_TypeA_Position;
mac->phy_config.config_req.pbch_config.pdcch_config_sib1 = mac->mib->pdcch_ConfigSIB1;
mac->phy_config.config_req.pbch_config.cell_barred = mac->mib->cellBarred;
mac->phy_config.config_req.pbch_config.intra_frequency_reselection = mac->mib->intraFreqReselection;
mac->phy_config.config_req.pbch_config.half_frame_bit = half_frame_bit;
mac->phy_config.config_req.pbch_config.ssb_index = ssb_index;
mac->phy_config.config_req.config_mask |= FAPI_NR_CONFIG_REQUEST_MASK_PBCH;
if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL){
mac->if_module->phy_config_request(&mac->phy_config);
}
}
return 0; return 0;
} }
...@@ -43,13 +43,13 @@ static nr_ue_if_module_t *nr_ue_if_module_inst[MAX_IF_MODULES]; ...@@ -43,13 +43,13 @@ static nr_ue_if_module_t *nr_ue_if_module_inst[MAX_IF_MODULES];
int8_t handle_bcch_bch(uint32_t pdu_len, uint8_t *pduP){ int8_t handle_bcch_bch(uint32_t pdu_len, uint8_t *pduP){
// pdu_len = 4, 32bits // pdu_len = 4, 32bits
uint8_t extra_bits = pduP[3]; uint8_t extra_bits = pduP[0];
nr_ue_decode_mib( (module_id_t)0, nr_ue_decode_mib( (module_id_t)0,
0, 0,
0, 0,
extra_bits, extra_bits,
0, // Lssb = 64 is not support 0, // Lssb = 64 is not support
pduP, &pduP[1],
pdu_len ); pdu_len );
......
...@@ -311,25 +311,26 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message( ...@@ -311,25 +311,26 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
buffer_len buffer_len
); );
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { if(bcch_message->message.choice.mib->systemFrameNumber.buf != 0){
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
for (i=0; i<buffer_len; i++)
printf("%02x ",bufferP[i]); for (i=0; i<buffer_len; i++)
printf("%02x ",bufferP[i]);
printf("\n");
// free the memory printf("\n");
SEQUENCE_free( &asn_DEF_NR_BCCH_BCH_Message, (void *)bcch_message, 1 ); // free the memory
return -1; SEQUENCE_free( &asn_DEF_NR_BCCH_BCH_Message, (void *)bcch_message, 1 );
return -1;
}
// link to rrc instance
mib = bcch_message->message.choice.mib;
//memcpy( (void *)mib,
// (void *)&bcch_message->message.choice.mib,
// sizeof(NR_MIB_t) );
nr_rrc_mac_config_req_ue( 0, 0, 0, mib, NULL, NULL, NULL);
} }
// link to rrc instance
mib = bcch_message->message.choice.mib;
//memcpy( (void *)mib,
// (void *)&bcch_message->message.choice.mib,
// sizeof(NR_MIB_t) );
nr_rrc_mac_config_req_ue( 0, 0, 0, mib, NULL, NULL, NULL);
return 0; return 0;
} }
......
...@@ -224,6 +224,8 @@ void init_UE(int nb_inst) ...@@ -224,6 +224,8 @@ void init_UE(int nb_inst)
AssertFatal((UE->if_inst = nr_ue_if_module_init(inst)) != NULL,"Can't register interface module\n"); AssertFatal((UE->if_inst = nr_ue_if_module_init(inst)) != NULL,"Can't register interface module\n");
nr_l3_init_ue(); nr_l3_init_ue();
nr_l2_init_ue(); nr_l2_init_ue();
NR_UE_MAC_INST_t *UE_MAC_INST = get_mac_inst(0);
UE_MAC_INST->if_module = UE->if_inst;
UE->if_inst->scheduled_response = nr_ue_scheduled_response; UE->if_inst->scheduled_response = nr_ue_scheduled_response;
UE->if_inst->phy_config_request = nr_ue_phy_config_request; UE->if_inst->phy_config_request = nr_ue_phy_config_request;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment