diff --git a/openair2/ENB_APP/MESSAGES/V2/stats_common.proto b/openair2/ENB_APP/MESSAGES/V2/stats_common.proto index 3aaa018184d13d6bf9f28f9fc77df1d34a9218ed..50d66a620c97a41dd0174403c95b8c8b884f94c2 100644 --- a/openair2/ENB_APP/MESSAGES/V2/stats_common.proto +++ b/openair2/ENB_APP/MESSAGES/V2/stats_common.proto @@ -154,15 +154,19 @@ message prp_ul_cqi { optional prp_ul_cqi_type type = 1; repeated uint32 sinr = 2; optional uint32 serv_cell_index = 3; - optional int32 p0_pucch_dbm = 4; } // Full UL CQI report for a specific UE message prp_ul_cqi_report { optional uint32 sfn_sn = 1; repeated prp_ul_cqi cqi_meas = 2; + repeated prp_pucch_dbm pucch_dbm = 3; } +message prp_pucch_dbm { + optional int32 p0_pucch_dbm = 1; + optional uint32 serv_cell_index = 2; +} // // Cell related statistics diff --git a/openair2/ENB_APP/enb_agent_common.c b/openair2/ENB_APP/enb_agent_common.c index f890ba829c1cf795ee3809a78a6ed4b77137461d..64b51238f1d102220a0072aea8d9960b34655d2b 100644 --- a/openair2/ENB_APP/enb_agent_common.c +++ b/openair2/ENB_APP/enb_agent_common.c @@ -647,6 +647,26 @@ int get_harq(const mid_t mod_id, const uint8_t CC_id, const mid_t ue_id, const i return 0; } +int get_p0_pucch_dbm(mid_t mod_id, mid_t ue_id, int CC_id) +{ + LTE_eNB_UE_stats *eNB_UE_stats = NULL; + uint32_t rnti = get_ue_crnti(mod_id,ue_id); + + eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id, CC_id, rnti); + if(eNB_UE_stats->Po_PUCCH_update == 1) + { + return eNB_UE_stats->Po_PUCCH_dBm; + } + else + return -1; +} + +int get_p0_nominal_pucch(mid_t mod_id, int CC_id) +{ + int32_t pucch_rx_received = mac_xface->get_target_pucch_rx_power(mod_id, CC_id); + return pucch_rx_received; +} + /* * ************************************ diff --git a/openair2/ENB_APP/enb_agent_common.h b/openair2/ENB_APP/enb_agent_common.h index e8fbf3afb81b2f74194207ae7780e82a67f3f968..1c4d478aab41146a78fe134a565e9dc5acb26e08 100644 --- a/openair2/ENB_APP/enb_agent_common.h +++ b/openair2/ENB_APP/enb_agent_common.h @@ -210,6 +210,10 @@ int get_tpc(mid_t mod_id, mid_t ue_id); int get_harq(const mid_t mod_id, const uint8_t CC_id, const mid_t ue_id, const int frame, const uint8_t subframe, int *id, int *status); +int get_p0_pucch_dbm(mid_t mod_id, mid_t ue_id, int CC_id); + +int get_p0_nominal_pucch(mid_t mod_id, int CC_id); + /* * ************************************ * Get Messages for UE Configuration Reply diff --git a/openair2/ENB_APP/enb_agent_mac.c b/openair2/ENB_APP/enb_agent_mac.c index 0957bd94f25dc6d80a428be45c9a5c9891a6e56d..29347b152b0fddb03b7e0a8a91b472922e984a17 100644 --- a/openair2/ENB_APP/enb_agent_mac.c +++ b/openair2/ENB_APP/enb_agent_mac.c @@ -657,8 +657,27 @@ int enb_agent_mac_stats_reply(mid_t mod_id, //TODO: Set the servCellIndex for this report ul_report[j]->serv_cell_index = 0; ul_report[j]->has_serv_cell_index = 1; + + /*if(get_p0_pucch_dbm(enb_id,i) != -1){ + ul_report[j]->p0_pucch_dbm = get_p0_pucch_dbm(enb_id,i); + ul_report[j]->has_p0_pucch_dbm = 1; + }*/ //Set the list of UL reports of this UE to the full UL report full_ul_report->cqi_meas = ul_report; + full_ul_report->n_pucch_dbm = MAX_NUM_CCs; + full_ul_report->pucch_dbm = malloc(sizeof(Protocol__PrpPucchDbm *) * full_ul_report->n_pucch_dbm); + + for (j = 0; j < MAX_NUM_CCs; j++) { + full_ul_report->pucch_dbm[j] = malloc(sizeof(Protocol__PrpPucchDbm)); + protocol__prp_pucch_dbm__init(full_ul_report->pucch_dbm[j]); + full_ul_report->pucch_dbm[j]->has_serv_cell_index = 1; + full_ul_report->pucch_dbm[j]->serv_cell_index = j; + if(get_p0_pucch_dbm(enb_id,i, j) != -1){ + full_ul_report->pucch_dbm[j]->p0_pucch_dbm = get_p0_pucch_dbm(enb_id,i,j); + full_ul_report->pucch_dbm[j]->has_p0_pucch_dbm = 1; + } + } + //Add full UL CQI report to the UE report ue_report[i]->ul_cqi_report = full_ul_report; } @@ -701,6 +720,9 @@ int enb_agent_mac_stats_reply(mid_t mod_id, // Thermal noise power in dbm ni_report->tnp = 0; ni_report->has_tnp = 1; + + ni_report->p0_nominal_pucch = get_p0_nominal_pucch(enb_id, 0); + ni_report->has_p0_nominal_pucch = 1; cell_report[i]->noise_inter_report = ni_report; } } @@ -822,6 +844,10 @@ int enb_agent_mac_destroy_stats_reply(Protocol__ProgranMessage *msg) { } free(ul_report->cqi_meas); } + for (j = 0; j < ul_report->n_pucch_dbm; j++) { + free(ul_report->pucch_dbm[j]); + } + free(ul_report->pucch_dbm); free(reply->ue_report[i]); } free(reply->ue_report);