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++)
...@@ -694,11 +696,8 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, ...@@ -694,11 +696,8 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue,
} }
//#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){
......
...@@ -53,7 +53,9 @@ int8_t nr_ue_decode_mib( ...@@ -53,7 +53,9 @@ 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];
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 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 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_msb = (uint32_t)(( extra_bits >> 5 ) & 0x1 ); // extra bits[5]
...@@ -73,15 +75,16 @@ int8_t nr_ue_decode_mib( ...@@ -73,15 +75,16 @@ int8_t nr_ue_decode_mib(
} }
} }
printf("system frame number(with LSB): %d\n", (int)frame); printf("system frame number(6 MSB bits): %d\n", mac->mib->systemFrameNumber.buf[0]);
printf("subcarrier spacing: %d\n", (int)mac->mib->subCarrierSpacingCommon); printf("system frame number(with LSB): %d\n", (int)frame);
printf("ssb carrier offset(with MSB): %d\n", (int)ssb_subcarrier_offset); printf("subcarrier spacing: %d\n", (int)mac->mib->subCarrierSpacingCommon);
printf("dmrs type A position: %d\n", (int)mac->mib->dmrs_TypeA_Position); printf("ssb carrier offset(with MSB): %d\n", (int)ssb_subcarrier_offset);
printf("pdcch config sib1: %d\n", (int)mac->mib->pdcch_ConfigSIB1); printf("dmrs type A position: %d\n", (int)mac->mib->dmrs_TypeA_Position);
printf("cell barred: %d\n", (int)mac->mib->cellBarred); printf("pdcch config sib1: %d\n", (int)mac->mib->pdcch_ConfigSIB1);
printf("intra frequcney reselection: %d\n", (int)mac->mib->intraFreqReselection); printf("cell barred: %d\n", (int)mac->mib->cellBarred);
printf("half frame bit(extra bits): %d\n", (int)half_frame_bit); printf("intra frequcney reselection: %d\n", (int)mac->mib->intraFreqReselection);
printf("ssb index(extra bits): %d\n", (int)ssb_index); 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 // fill in the elements in config request inside P5 message
mac->phy_config.config_req.pbch_config.system_frame_number = frame; // after calculation mac->phy_config.config_req.pbch_config.system_frame_number = frame; // after calculation
...@@ -98,7 +101,7 @@ printf("ssb index(extra bits): %d\n", (int)ssb_index); ...@@ -98,7 +101,7 @@ printf("ssb index(extra bits): %d\n", (int)ssb_index);
if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL){ if(mac->if_module != NULL && mac->if_module->phy_config_request != NULL){
mac->if_module->phy_config_request(&mac->phy_config); 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,6 +311,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message( ...@@ -311,6 +311,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
buffer_len buffer_len
); );
if(bcch_message->message.choice.mib->systemFrameNumber.buf != 0){
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
for (i=0; i<buffer_len; i++) for (i=0; i<buffer_len; i++)
...@@ -329,7 +330,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message( ...@@ -329,7 +330,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
// sizeof(NR_MIB_t) ); // sizeof(NR_MIB_t) );
nr_rrc_mac_config_req_ue( 0, 0, 0, mib, NULL, NULL, NULL); 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