From afa442bbefa862ba65d87947648a7eab39fc1a61 Mon Sep 17 00:00:00 2001 From: matzakos <panagiotis.matzakos@eurecom.fr> Date: Thu, 19 Oct 2017 17:20:59 +0200 Subject: [PATCH] Added fill functions for rach and ulsch_cqi indications. --- openair2/PHY_INTERFACE/phy_stub_UE.c | 92 +++++++++++++++++++++++++++- openair2/PHY_INTERFACE/phy_stub_UE.h | 6 ++ 2 files changed, 96 insertions(+), 2 deletions(-) diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c index 4f554b55f74..8a5e05c50d9 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.c +++ b/openair2/PHY_INTERFACE/phy_stub_UE.c @@ -10,6 +10,7 @@ +//extern uint8_t nfapi_pnf; @@ -78,8 +79,8 @@ void handle_nfapi_UE_Rx(uint8_t Mod_id, Sched_Rsp_t *Sched_INFO, int eNB_id){ // elements. // C-RNTI parameter not actually used. Provided only to comply with existing function definition. - // Not sure about parameters to fill the preamble index. Originally it comes from PHY. - const rnti_t c_rnti; + // Not sure about parameters to fill the preamble index. + const rnti_t c_rnti = UE_mac_inst[Mod_id].crnti; ue_process_rar(Mod_id, CC_id, frame, dl_config_pdu_tmp->dlsch_pdu.dlsch_pdu_rel8.rnti, //RA-RNTI Tx_req->tx_request_body.tx_pdu_list[dl_config_pdu_tmp->dlsch_pdu.dlsch_pdu_rel8.pdu_index].segments[0].segment_data, @@ -229,6 +230,93 @@ void fill_crc_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_ pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex); } +void fill_rach_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint8_t ra_PreambleIndex, uint16_t ra_RNTI) { + + pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex); + + UL_INFO->rach_ind.number_of_preambles = 1; + //eNB->UL_INFO.rach_ind.preamble_list = &eNB->preamble_list[0]; + UL_INFO->rach_ind.tl.tag = NFAPI_RACH_INDICATION_BODY_TAG; + + UL_INFO->rach_ind.preamble_list[0].preamble_rel8.tl.tag = NFAPI_PREAMBLE_REL8_TAG; + UL_INFO->rach_ind.preamble_list[0].preamble_rel8.timing_advance = 0; //Panos: Not sure about that + + //Panos: The two following should get extracted from the call to get_prach_resources(). + UL_INFO->rach_ind.preamble_list[0].preamble_rel8.preamble = ra_PreambleIndex; + UL_INFO->rach_ind.preamble_list[0].preamble_rel8.rnti = ra_RNTI; + + + UL_INFO->rach_ind.preamble_list[0].preamble_rel13.rach_resource_type = 0; + UL_INFO->rach_ind.preamble_list[0].instance_length = 0; + + + // If NFAPI PNF then we need to send the message to the VNF + //if (nfapi_pnf == 1) + //{ + nfapi_rach_indication_t rach_ind; + rach_ind.header.message_id = NFAPI_RACH_INDICATION; + rach_ind.sfn_sf = frame<<4 | subframe; + rach_ind.rach_indication_body = UL_INFO->rach_ind; + + LOG_E(PHY,"\n\n\n\nDJP - this needs to be sent to VNF **********************************************\n\n\n\n"); + LOG_E(PHY,"UE Filling NFAPI indication for RACH : TA %d, Preamble %d, rnti %x, rach_resource_type %d\n", + UL_INFO->rach_ind.preamble_list[0].preamble_rel8.timing_advance, + UL_INFO->rach_ind.preamble_list[0].preamble_rel8.preamble, + UL_INFO->rach_ind.preamble_list[0].preamble_rel8.rnti, + UL_INFO->rach_ind.preamble_list[0].preamble_rel13.rach_resource_type); + + //Panos: This function is currently defined only in the nfapi-RU-RAU-split so we should call it when we merge + // with that branch. + //oai_nfapi_rach_ind(&rach_ind); + + + //} + pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex); + +} + +void fill_ulsch_cqi_indication(int Mod_id, uint16_t frame,uint8_t subframe, UL_IND_t *UL_INFO) { + pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex); + nfapi_cqi_indication_pdu_t *pdu = &UL_INFO->cqi_ind.cqi_pdu_list[UL_INFO->cqi_ind.number_of_cqis]; + nfapi_cqi_indication_raw_pdu_t *raw_pdu = &UL_INFO->cqi_ind.cqi_raw_pdu_list[UL_INFO->cqi_ind.number_of_cqis]; + + pdu->rx_ue_information.rnti = UE_mac_inst[Mod_id].crnti;; + //if (ulsch_harq->cqi_crc_status != 1) + //Panos: Since we assume that CRC flag is always 0 (ACK) I guess that data_offset should always be 0. + pdu->cqi_indication_rel9.data_offset = 0; + //else pdu->cqi_indication_rel9.data_offset = 1; // fill in after all cqi_indications have been generated when non-zero + + // by default set O to rank 1 value + //pdu->cqi_indication_rel9.length = (ulsch_harq->Or1>>3) + ((ulsch_harq->Or1&7) > 0 ? 1 : 0); + // Panos: Not useful field for our case + pdu->cqi_indication_rel9.length = 0; + pdu->cqi_indication_rel9.ri[0] = 0; + + // if we have RI bits, set them and if rank2 overwrite O + /*if (ulsch_harq->O_RI>0) { + pdu->cqi_indication_rel9.ri[0] = ulsch_harq->o_RI[0]; + if (ulsch_harq->o_RI[0] == 2) pdu->cqi_indication_rel9.length = (ulsch_harq->Or2>>3) + ((ulsch_harq->Or2&7) > 0 ? 1 : 0); + pdu->cqi_indication_rel9.timing_advance = 0; + }*/ + + pdu->cqi_indication_rel9.timing_advance = 0; + pdu->cqi_indication_rel9.number_of_cc_reported = 1; + pdu->ul_cqi_information.channel = 1; // PUSCH + + //Panos: Not sure how to substitute this. This should be the actual CQI value? So can + // we hardcode it to a specific value? + //memcpy((void*)raw_pdu->pdu,ulsch_harq->o,pdu->cqi_indication_rel9.length); + raw_pdu->pdu[0] = 7; + + + + UL_INFO->cqi_ind.number_of_cqis++; + pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex); + +} + + + diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.h b/openair2/PHY_INTERFACE/phy_stub_UE.h index a8a6772fe6e..58ce7346f76 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.h +++ b/openair2/PHY_INTERFACE/phy_stub_UE.h @@ -47,4 +47,10 @@ void fill_sr_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_I void fill_crc_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint8_t crc_flag); +void fill_rach_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint8_t ra_PreambleIndex, uint16_t ra_RNTI); + + +void fill_ulsch_cqi_indication(int Mod_id, uint16_t frame,uint8_t subframe, UL_IND_t *UL_INFO); + + #endif /* PHY_STUB_UE_H_ */ -- GitLab