fix for mbms mac scheduling

master
yagoda 7 years ago
parent fac8bb7b7a
commit f286e12ceb

@ -602,7 +602,7 @@ void mac::build_mch_sched(uint32_t tbs)
total_bytes_to_tx += mch.mtch_sched[i].lcid_buffer_size; total_bytes_to_tx += mch.mtch_sched[i].lcid_buffer_size;
mch.mtch_sched[i].stop = 0; mch.mtch_sched[i].stop = 0;
} }
int last_mtch_stop = 0; int last_mtch_stop = 0;
if(total_bytes_to_tx >= total_space_avail_bytes){ if(total_bytes_to_tx >= total_space_avail_bytes){
@ -626,12 +626,14 @@ int mac::get_mch_sched(bool is_mcch, dl_sched_t *dl_sched_res)
{ {
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
srslte_ra_mcs_t mcs_data;
mcs.idx = this->sib13.mbsfn_area_info_list_r9[0].signalling_mcs_r9; mcs.idx = this->sib13.mbsfn_area_info_list_r9[0].signalling_mcs_r9;
mcs_data.idx = this->mcch.pmch_infolist_r9[0].pmch_config_r9.datamcs_r9;
srslte_dl_fill_ra_mcs(&mcs, this->cell_config.cell.nof_prb); srslte_dl_fill_ra_mcs(&mcs, this->cell_config.cell.nof_prb);
srslte_dl_fill_ra_mcs(&mcs_data, this->cell_config.cell.nof_prb);
if(is_mcch){ if(is_mcch){
build_mch_sched(mcs.tbs); build_mch_sched(mcs_data.tbs);
mch.mcch_payload = mcch_payload_buffer; mch.mcch_payload = mcch_payload_buffer;
mch.current_sf_allocation_num = 1; mch.current_sf_allocation_num = 1;
@ -643,7 +645,7 @@ int mac::get_mch_sched(bool is_mcch, dl_sched_t *dl_sched_res)
mch.pdu[mch.num_mtch_sched].lcid = 0; mch.pdu[mch.num_mtch_sched].lcid = 0;
mch.pdu[mch.num_mtch_sched].nbytes = current_mcch_length; mch.pdu[mch.num_mtch_sched].nbytes = current_mcch_length;
dl_sched_res->sched_grants[0].rnti = SRSLTE_MRNTI; dl_sched_res->sched_grants[0].rnti = SRSLTE_MRNTI;
dl_sched_res->sched_grants[0].data[0] = ue_db[SRSLTE_MRNTI]->generate_mch_pdu(mch, mch.num_mtch_sched + 1, mcs.tbs); dl_sched_res->sched_grants[0].data[0] = ue_db[SRSLTE_MRNTI]->generate_mch_pdu(mch, mch.num_mtch_sched + 1, mcs.tbs/8);
} else { } else {
@ -659,14 +661,14 @@ int mac::get_mch_sched(bool is_mcch, dl_sched_t *dl_sched_res)
} }
} }
if(mch.current_sf_allocation_num <= mtch_stop) { if(mch.current_sf_allocation_num <= mtch_stop) {
int requested_bytes = (mcs.tbs/8 > mch.mtch_sched[mtch_index].lcid_buffer_size)?mch.mtch_sched[mtch_index].lcid_buffer_size:mcs.tbs/8; int requested_bytes = (mcs_data.tbs/8 > mch.mtch_sched[mtch_index].lcid_buffer_size)?mch.mtch_sched[mtch_index].lcid_buffer_size:mcs_data.tbs/8;
int bytes_received = ue_db[SRSLTE_MRNTI]->read_pdu(current_lcid, mtch_payload_buffer, requested_bytes); int bytes_received = ue_db[SRSLTE_MRNTI]->read_pdu(current_lcid, mtch_payload_buffer, requested_bytes);
mch.pdu[0].lcid = current_lcid; mch.pdu[0].lcid = current_lcid;
mch.pdu[0].nbytes = bytes_received; mch.pdu[0].nbytes = bytes_received;
mch.mtch_sched[0].mtch_payload = mtch_payload_buffer; mch.mtch_sched[0].mtch_payload = mtch_payload_buffer;
dl_sched_res->sched_grants[0].rnti = SRSLTE_MRNTI; dl_sched_res->sched_grants[0].rnti = SRSLTE_MRNTI;
if(bytes_received){ if(bytes_received){
dl_sched_res->sched_grants[0].data[0] = ue_db[SRSLTE_MRNTI]->generate_mch_pdu(mch, 1, mcs.tbs); dl_sched_res->sched_grants[0].data[0] = ue_db[SRSLTE_MRNTI]->generate_mch_pdu(mch, 1, mcs_data.tbs/8);
} }
} else { } else {
//TRANSMIT NOTHING //TRANSMIT NOTHING

Loading…
Cancel
Save