diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index 545ff6e5effadec2395cbb9d030aeb32edebc4e4..f4fe8587cd8494f01bf3be90cd4f66e712d312ac 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -102,6 +102,7 @@ static struct { /* TODO: do it per CC */ static struct { struct { + int reception_subframe; /* the subframe where the ACK/NACK has been received */ int rnti; int ack; int length[MAX_LC_LIST+1]; @@ -143,8 +144,9 @@ printf("GOT UPLINK ack %d for rnti %x (f/sf %d/%d)\n", ack, rnti, frame, subfram LOG_E(MAC, "fapi_ul_ack_nack: full! (f/sf %d/%d)\n", frame, subframe); abort(); } - fapi_ul_ack_nack_data[subframe].ack[pos].rnti = rnti; - fapi_ul_ack_nack_data[subframe].ack[pos].ack = ack; + fapi_ul_ack_nack_data[subframe].ack[pos].reception_subframe = subframe; + fapi_ul_ack_nack_data[subframe].ack[pos].rnti = rnti; + fapi_ul_ack_nack_data[subframe].ack[pos].ack = ack; /* the values in length are set later in the function fapi_ul_lc_length */ memset(fapi_ul_ack_nack_data[subframe].ack[pos].length, 0, sizeof(int) * MAX_LC_LIST+1); @@ -842,20 +844,20 @@ printf("FAPI to MAC downlink DCI_pdu[%d]->num_pdcch_symbols %d f/sf %d/%d\n", cc ulreq.vendorSpecificList = NULL; /* fill ulInfoList */ - ulsf = (subframeP + 6) % 10; - ulsf = (subframeP + 6) % 10; + ulsf = (subframeP + 10 - 3) % 10; if (fapi_ul_ack_nack_data[ulsf].count) { ulreq.nr_ulInfoList = fapi_ul_ack_nack_data[ulsf].count; ulreq.ulInfoList = ulinfo; for (i = 0; i < ulreq.nr_ulInfoList; i++) { -printf("MAC to FAPI uplink acknack ue %x ulsf %d ack %d\n", fapi_ul_ack_nack_data[ulsf].ack[i].rnti, ulsf, fapi_ul_ack_nack_data[ulsf].ack[i].ack); - ulinfo[i].rnti = fapi_ul_ack_nack_data[ulsf].ack[i].rnti; - ulinfo[i].receptionStatus = fapi_ul_ack_nack_data[ulsf].ack[i].ack == 1 ? Ok : NotOk; - ulinfo[i].tpc = 0; /* TODO */ - ulinfo[i].servCellIndex = 0; /* TODO: get correct value */ +printf("MAC to FAPI uplink acknack ue %x f/sf %d/%d ulsf %d [reception_subframe %d] ack %d\n", fapi_ul_ack_nack_data[ulsf].ack[i].rnti, frameP, subframeP, ulsf, fapi_ul_ack_nack_data[ulsf].ack[i].reception_subframe, fapi_ul_ack_nack_data[ulsf].ack[i].ack); + ulinfo[i].puschTransmissionTimestamp = fapi_ul_ack_nack_data[ulsf].ack[i].reception_subframe; + ulinfo[i].rnti = fapi_ul_ack_nack_data[ulsf].ack[i].rnti; + ulinfo[i].receptionStatus = fapi_ul_ack_nack_data[ulsf].ack[i].ack == 1 ? Ok : NotOk; + ulinfo[i].tpc = 0; /* TODO */ + ulinfo[i].servCellIndex = 0; /* TODO: get correct value */ for (j = 0; j < MAX_LC_LIST+1; j++) { ulinfo[i].ulReception[j] = fapi_ul_ack_nack_data[ulsf].ack[i].length[j]; -printf("MAC to FAPI uplink ue %x lcid %d size acked %d\n", fapi_ul_ack_nack_data[ulsf].ack[i].rnti, j, fapi_ul_ack_nack_data[ulsf].ack[i].length[j]); +printf("MAC to FAPI uplink ue %x f/sf %d/%d lcid %d size acked %d\n", fapi_ul_ack_nack_data[ulsf].ack[i].rnti, frameP, subframeP, j, fapi_ul_ack_nack_data[ulsf].ack[i].length[j]); } } fapi_ul_ack_nack_data[ulsf].count = 0;