:::warning # <center><i class="fa fa-edit"></i>read mac</center> ::: [TOC] Here we see the main function of read_mac_sm ```c void read_mac_sm(mac_ind_msg_t* data) { assert(data != NULL); data->tstamp = time_now_us(); // assert(0!=0 && "Read MAC called"); const NR_UE_info_t* UE_info = &RC.nrmac[mod_id]->UE_info; const size_t num_ues = UE_info->num_UEs; data->len_ue_stats = num_ues; if(data->len_ue_stats > 0){ data->ue_stats = calloc(data->len_ue_stats, sizeof(mac_ue_stats_impl_t)); assert( data->ue_stats != NULL && "Memory exhausted" ); } const NR_list_t* ue_list = &UE_info->list; size_t i = 0; for (int ue_id = ue_list->head; ue_id >= 0; ue_id = ue_list->next[ue_id]) { const NR_UE_sched_ctrl_t* sched_ctrl = &UE_info->UE_sched_ctrl[ue_id]; const NR_mac_stats_t* uestats = &UE_info->mac_stats[ue_id]; mac_ue_stats_impl_t* rd = &data->ue_stats[i]; rd->dl_aggr_tbs = uestats->dlsch_total_bytes; rd->ul_aggr_tbs = uestats->ulsch_total_bytes_rx; rd->rnti = UE_info->rnti[ue_id]; rd->dl_aggr_prb = uestats->dlsch_total_rbs; rd->ul_aggr_prb = uestats->ulsch_total_rbs; rd->dl_aggr_retx_prb = uestats->dlsch_total_rbs_retx ; rd->dl_aggr_bytes_sdus = uestats->lc_bytes_tx[3] ; rd->ul_aggr_bytes_sdus = uestats->lc_bytes_rx[3]; rd->dl_aggr_sdus = uestats->dlsch_num_mac_sdu; rd->ul_aggr_sdus = uestats->ulsch_num_mac_sdu; rd->pusch_snr = (float) sched_ctrl->pusch_snrx10 / 10; //: float = -64; rd->pucch_snr = (float) sched_ctrl->pucch_snrx10 / 10 ; //: float = -64; // no CQI measurements implemented in OAI 5G yet rd->wb_cqi = 0; rd->dl_mcs1 = sched_ctrl->sched_pdsch.mcs; rd->ul_mcs1 = sched_ctrl->sched_pusch.mcs ; rd->dl_mcs2 = 0; rd->ul_mcs2 = 0; rd->phr = sched_ctrl->ph; ++i; } } ``` - [***mac_ind_msg_t***](https://hackmd.io/ua7CZJVkStyQ49Tv4l4CQw) - MAC indication message - [***time_now_us***](https://hackmd.io/g68PY1naRlG0TTqOEsh_dQ) - giving us a realtime in secods, and microseconds - [***NR_UE_info_t***](https://hackmd.io/sJ-ASeK6Q9KcG3pQgrYtzg) - UE list used by gNB to order UEs/CC for scheduling - [***NR_list_t***](https://hackmd.io/2624JYfuRhSmZgkESFRQJg) - NR_list_t is a "list" (of users, HARQ processes, slices). Especially useful in the scheduler and to keep "classes" of users. - [***NR_UE_sched_ctrl_t***](https://hackmd.io/IQ6mEo5mRLSbWcOxw-INaQ) - sheduling control information set through an API - [***NR_mac_stats_t***](https://hackmd.io/IwNA-XOsTrmzzsIzrcbf8w) - sheduling control info - [***mac_ue_stats_impl_t***](https://hackmd.io/_8_0eYBOTJmER3B83OLNDw) - implement MAC UE stats
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up