From b91251d1e0183ad1a9a618ffc3c9e74ea50fac27 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 10 Jun 2021 12:44:34 -0700 Subject: [PATCH] Changed nsa_send_standalone_msg() and sending RX The send_standlone_msg will now be able to send any type of uplink message and we fill the RX indication in the stub_schedule_response and are trying to send to gNB. Need to update the NR nfapi. --- executables/nr-ue.c | 44 +++++++-------- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 40 ++++++------- openair1/SCHED_NR_UE/fapi_nr_ue_l1.h | 1 + openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 2 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 62 ++++++++++++++++----- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 3 +- 6 files changed, 92 insertions(+), 60 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index f5c606b828..51e82c187c 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -147,32 +147,32 @@ void init_nrUE_standalone_thread(int ue_idx) static void L1_nsa_prach_procedures(frame_t frame, int slot, fapi_nr_ul_config_prach_pdu *prach_pdu) { - nfapi_nr_rach_indication_t rach_ind; - memset(&rach_ind, 0, sizeof(rach_ind)); - rach_ind.sfn = frame; - rach_ind.slot = slot; - rach_ind.header.message_id = NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION; + NR_UL_IND_t UL_INFO; + nfapi_nr_rach_indication_t *rach_ind = &UL_INFO.rach_ind; + rach_ind->sfn = frame; + rach_ind->slot = slot; + rach_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION; uint8_t pdu_index = 0; - rach_ind.pdu_list = CALLOC(1, sizeof(*rach_ind.pdu_list)); - rach_ind.number_of_pdus = 1; - rach_ind.pdu_list[pdu_index].phy_cell_id = prach_pdu->phys_cell_id; - rach_ind.pdu_list[pdu_index].symbol_index = prach_pdu->prach_start_symbol; - rach_ind.pdu_list[pdu_index].slot_index = prach_pdu->prach_slot; - rach_ind.pdu_list[pdu_index].freq_index = prach_pdu->num_ra; //Melissa Fill these things from the prach pdu - rach_ind.pdu_list[pdu_index].avg_rssi = 128; - rach_ind.pdu_list[pdu_index].avg_snr = 0xff; // invalid for now + rach_ind->pdu_list = CALLOC(1, sizeof(*rach_ind->pdu_list)); + rach_ind->number_of_pdus = 1; + rach_ind->pdu_list[pdu_index].phy_cell_id = prach_pdu->phys_cell_id; + rach_ind->pdu_list[pdu_index].symbol_index = prach_pdu->prach_start_symbol; + rach_ind->pdu_list[pdu_index].slot_index = prach_pdu->prach_slot; + rach_ind->pdu_list[pdu_index].freq_index = prach_pdu->num_ra; //Melissa Fill these things from the prach pdu + rach_ind->pdu_list[pdu_index].avg_rssi = 128; + rach_ind->pdu_list[pdu_index].avg_snr = 0xff; // invalid for now - rach_ind.pdu_list[pdu_index].num_preamble = 1; - const int num_p = rach_ind.pdu_list[pdu_index].num_preamble; - rach_ind.pdu_list[pdu_index].preamble_list = calloc(num_p, sizeof(nfapi_nr_prach_indication_preamble_t)); - rach_ind.pdu_list[pdu_index].preamble_list[0].preamble_index = 63; //Melissa, need to get this out of rrc_reconfig_msg - rach_ind.pdu_list[pdu_index].preamble_list[0].timing_advance = 0; - rach_ind.pdu_list[pdu_index].preamble_list[0].preamble_pwr = 0xffffffff; + rach_ind->pdu_list[pdu_index].num_preamble = 1; + const int num_p = rach_ind->pdu_list[pdu_index].num_preamble; + rach_ind->pdu_list[pdu_index].preamble_list = calloc(num_p, sizeof(nfapi_nr_prach_indication_preamble_t)); + rach_ind->pdu_list[pdu_index].preamble_list[0].preamble_index = 63; //Melissa, need to get this out of rrc_reconfig_msg + rach_ind->pdu_list[pdu_index].preamble_list[0].timing_advance = 0; + rach_ind->pdu_list[pdu_index].preamble_list[0].preamble_pwr = 0xffffffff; - send_nsa_standalone_msg(&rach_ind); - free(rach_ind.pdu_list[pdu_index].preamble_list); - free(rach_ind.pdu_list); + send_nsa_standalone_msg(&UL_INFO, rach_ind->header.message_id); + free(rach_ind->pdu_list[pdu_index].preamble_list); + free(rach_ind->pdu_list); } static void *NRUE_phy_stub_standalone_pnf_task(void *arg) diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 2843c26fad..306a171dc6 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -55,46 +55,40 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response to get other information. Need rnti., Fill rx_ind that goes up on socket */ if(scheduled_response != NULL){ - module_id_t module_id = scheduled_response->module_id; - uint8_t cc_id = scheduled_response->CC_id; - int slot = scheduled_response->slot; - int thread_id = scheduled_response->thread_id; - if (scheduled_response->ul_config != NULL){ fapi_nr_ul_config_request_t *ul_config = scheduled_response->ul_config; for (int i = 0; i < ul_config->number_pdus; ++i) { - LOG_I(PHY, "Melissa In %s: processing %s PDU of %d total UL PDUs (ul_config %p) \n", + LOG_I(PHY, "In %s: processing %s PDU of %d total UL PDUs (ul_config %p) \n", __FUNCTION__, ul_pdu_type[ul_config->ul_config_list[i].pdu_type - 1], ul_config->number_pdus, ul_config); uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type; - uint8_t pucch_resource_id = 0; - uint8_t current_harq_pid = 0; - uint8_t format = 0; - uint8_t gNB_id = 0; - nfapi_nr_rx_data_indication_t rx_ind; switch (pdu_type) { case (FAPI_NR_UL_CONFIG_TYPE_PUSCH): { - + NR_UL_IND_t UL_INFO; + nfapi_nr_rx_data_indication_t *rx_ind = &UL_INFO.rx_ind; nfapi_nr_ue_pusch_pdu_t *pusch_config_pdu = &ul_config->ul_config_list[i].pusch_config_pdu; - if (scheduled_response->tx_request) { - rx_ind.header.message_id = NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION; - rx_ind.slot = scheduled_response->tx_request->slot; - rx_ind.sfn = scheduled_response->tx_request->sfn; - rx_ind.number_of_pdus = scheduled_response->tx_request->number_of_pdus; + if (scheduled_response->tx_request) + { + rx_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION; + rx_ind->slot = scheduled_response->tx_request->slot; + rx_ind->sfn = scheduled_response->tx_request->sfn; + rx_ind->number_of_pdus = scheduled_response->tx_request->number_of_pdus; fapi_nr_tx_request_body_t *tx_req_body = &scheduled_response->tx_request->tx_request_body[i]; - rx_ind.pdu_list = CALLOC(1, sizeof(*rx_ind.pdu_list)); - rx_ind.pdu_list[i].pdu = tx_req_body->pdu; - rx_ind.pdu_list[i].pdu_length = tx_req_body->pdu_length; - rx_ind.pdu_list[i].rnti = pusch_config_pdu->rnti; - rx_ind.pdu_list[i].handle = pusch_config_pdu->handle; + rx_ind->pdu_list = CALLOC(1, sizeof(*rx_ind->pdu_list)); + rx_ind->pdu_list[i].pdu = tx_req_body->pdu; + rx_ind->pdu_list[i].pdu_length = tx_req_body->pdu_length; + rx_ind->pdu_list[i].rnti = pusch_config_pdu->rnti; + rx_ind->pdu_list[i].handle = pusch_config_pdu->handle; scheduled_response->tx_request->number_of_pdus = 0; - LOG_I(PHY, "Melissa In %s: Filled rx_ind with tx_req \n", __FUNCTION__); + LOG_I(PHY, "Melissa In %s: Filled rx_indwith tx_req \n", __FUNCTION__); + send_nsa_standalone_msg(&UL_INFO, rx_ind->header.message_id); + free(rx_ind->pdu_list); } break; diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h index 10e9659776..6288d2ff35 100755 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h @@ -34,6 +34,7 @@ #define __FAPI_NR_UE_L1_H__ #include "NR_IF_Module.h" +#include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" /**\brief NR UE FAPI-like P7 messages, scheduled response from L2 indicating L1 \param scheduled_response including transmission config(dl_config, ul_config) and data transmission (tx_req)*/ diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index c0f12bb032..b4ab8956db 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -941,7 +941,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in tx_req.tx_request_body[0].pdu_index = j; tx_req.tx_request_body[0].pdu = ulsch_input_buffer; - if (ra->ra_state != RA_SUCCEEDED && !ra->cfra){ //Melissa change this accordingly + if (ra->ra_state != RA_SUCCEEDED && !ra->cfra || get_softmodem_params()->nsa && ra->cfra && ra->ra_state==RA_SUCCEEDED){ //Melissa change this accordingly nr_Msg3_transmitted(ul_info->module_id, ul_info->cc_id, ul_info->frame_tx, ul_info->gNB_index); } } diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index fbda88261f..d4203d0352 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -127,23 +127,59 @@ void nrue_init_standalone_socket(const char *addr, int tx_port, int rx_port) tx_port, rx_port, addr); } -void send_nsa_standalone_msg(nfapi_nr_rach_indication_t *rach_ind) +void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) { - char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - int encoded_size = nfapi_nr_p7_message_pack(rach_ind, buffer, sizeof(buffer), NULL); - if (encoded_size <= 0) + switch(msg_id) + { + case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION: { - LOG_E(NR_MAC, "nfapi_nr_p7_message_pack has failed. Encoded size = %d\n", encoded_size); - return; - } + char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; + LOG_I(NR_MAC, "Melissa, this is RACH header id :%d", UL_INFO->rach_ind.header.message_id); + int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->rach_ind, buffer, sizeof(buffer), NULL); + if (encoded_size <= 0) + { + LOG_E(NR_MAC, "nfapi_nr_p7_message_pack has failed. Encoded size = %d\n", encoded_size); + return; + } - LOG_I(NR_MAC, "NR_RACH_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, - rach_ind->sfn, rach_ind->slot, rach_ind->number_of_pdus); - if (send(ue_tx_sock_descriptor, buffer, encoded_size, 0) < 0) - { - LOG_E(NR_MAC, "Send Proxy NR_UE failed\n"); - return; + LOG_I(NR_MAC, "NR_RACH_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, + UL_INFO->rach_ind.sfn, UL_INFO->rach_ind.slot, UL_INFO->rach_ind.number_of_pdus); + if (send(ue_tx_sock_descriptor, buffer, encoded_size, 0) < 0) + { + LOG_E(NR_MAC, "Send Proxy NR_UE failed\n"); + return; + } + break; } + case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION: + { + char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; + LOG_I(NR_MAC, "Melissa, this is RX header id :%d", UL_INFO->rx_ind.header.message_id); + int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->rx_ind, buffer, sizeof(buffer), NULL); + if (encoded_size <= 0) + { + LOG_E(NR_MAC, "nfapi_nr_p7_message_pack has failed. Encoded size = %d\n", encoded_size); + return; + } + + LOG_I(NR_MAC, "NR_RX_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, + UL_INFO->rx_ind.sfn, UL_INFO->rx_ind.slot, UL_INFO->rx_ind.number_of_pdus); + if (send(ue_tx_sock_descriptor, buffer, encoded_size, 0) < 0) + { + LOG_E(NR_MAC, "Send Proxy NR_UE failed\n"); + return; + } + break; + } + case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION: + break; + case NFAPI_NR_PHY_MSG_TYPE_SRS_INDICATION: + break; + case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION: + break; + default: + break; + } } static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_nr_dl_tti_request_t *dl_tti_request) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 693bfb2483..8c7781ff6f 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -39,6 +39,7 @@ #include "fapi_nr_ue_interface.h" #include "openair2/PHY_INTERFACE/queue.h" #include "nfapi_nr_interface_scf.h" +#include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h" typedef struct NR_UL_TIME_ALIGNMENT NR_UL_TIME_ALIGNMENT_t; @@ -218,7 +219,7 @@ typedef struct nfapi_dl_tti_config_req_tx_data_req_t nfapi_nr_tx_data_request_t *tx_data_req_pdu_list; } nfapi_dl_tti_config_req_tx_data_req_t; -void send_nsa_standalone_msg(nfapi_nr_rach_indication_t *rach_ind); +void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id); /**\brief done free of memory allocation by module_id and release to pointer pool. \param module_id module id*/