Commit db90088c authored by Sakthivel Velumani's avatar Sakthivel Velumani

Fixed bug in ul harq handler

parent 420aaf37
...@@ -786,7 +786,7 @@ uint8_t select_ul_harq_pid(NR_UE_sched_ctrl_t *sched_ctrl) { ...@@ -786,7 +786,7 @@ uint8_t select_ul_harq_pid(NR_UE_sched_ctrl_t *sched_ctrl) {
cur_harq = sched_ctrl->ul_harq_processes[hrq_id]; cur_harq = sched_ctrl->ul_harq_processes[hrq_id];
if (cur_harq.state==ACTIVE_NOT_SCHED) { if (cur_harq.state==ACTIVE_NOT_SCHED) {
#ifdef UL_HARQ_PRINT #ifdef UL_HARQ_PRINT
printf("[SCHED] Found active ulharq id %d, scheduling it for retransmission\n",harq_id); printf("[SCHED] Found active ulharq id %d, scheduling it for retransmission\n",hrq_id);
#endif #endif
return hrq_id; return hrq_id;
} }
...@@ -797,7 +797,7 @@ uint8_t select_ul_harq_pid(NR_UE_sched_ctrl_t *sched_ctrl) { ...@@ -797,7 +797,7 @@ uint8_t select_ul_harq_pid(NR_UE_sched_ctrl_t *sched_ctrl) {
cur_harq = sched_ctrl->ul_harq_processes[hrq_id]; cur_harq = sched_ctrl->ul_harq_processes[hrq_id];
if (cur_harq.state==INACTIVE) { if (cur_harq.state==INACTIVE) {
#ifdef UL_HARQ_PRINT #ifdef UL_HARQ_PRINT
printf("[SCHED] Found inactive ulharq id %d, scheduling it\n",harq_id); printf("[SCHED] Found inactive ulharq id %d, scheduling it\n",hrq_id);
#endif #endif
return hrq_id; return hrq_id;
} }
......
...@@ -136,27 +136,27 @@ void handle_nr_ul_harq(uint16_t slot, NR_UE_sched_ctrl_t *sched_ctrl, uint8_t cr ...@@ -136,27 +136,27 @@ void handle_nr_ul_harq(uint16_t slot, NR_UE_sched_ctrl_t *sched_ctrl, uint8_t cr
int max_harq_rounds = 4; // TODO define macro int max_harq_rounds = 4; // TODO define macro
for (uint8_t hrq_id = 0; hrq_id < NR_MAX_NB_HARQ_PROCESSES; hrq_id++) { for (uint8_t hrq_id = 0; hrq_id < NR_MAX_NB_HARQ_PROCESSES; hrq_id++) {
NR_UE_ul_harq_t cur_harq = sched_ctrl->ul_harq_processes[hrq_id]; NR_UE_ul_harq_t *cur_harq = &sched_ctrl->ul_harq_processes[hrq_id];
if ((cur_harq.last_tx_slot == slot-1) && cur_harq.state==ACTIVE_SCHED) { if ((cur_harq->last_tx_slot == slot-1) && cur_harq->state==ACTIVE_SCHED) {
if (!crc_status) { if (!crc_status) {
cur_harq.ndi ^= 1; cur_harq->ndi ^= 1;
cur_harq.round = 0; cur_harq->round = 0;
cur_harq.state = INACTIVE; // passed -> make inactive. can be used by scheduder for next grant cur_harq->state = INACTIVE; // passed -> make inactive. can be used by scheduder for next grant
#ifdef UL_HARQ_PRINT #ifdef UL_HARQ_PRINT
printf("[HARQ HANDLER] Ulharq id %d crc passed, freeing it for scheduler\n",hrq_id); printf("[HARQ HANDLER] Ulharq id %d crc passed, freeing it for scheduler\n",hrq_id);
#endif #endif
} else { } else {
cur_harq.round++; cur_harq->round++;
cur_harq.state = ACTIVE_NOT_SCHED; cur_harq->state = ACTIVE_NOT_SCHED;
#ifdef UL_HARQ_PRINT #ifdef UL_HARQ_PRINT
printf("[HARQ HANDLER] Ulharq id %d crc failed, requesting retransmission\n",hrq_id); printf("[HARQ HANDLER] Ulharq id %d crc failed, requesting retransmission\n",hrq_id);
#endif #endif
} }
if (!(cur_harq.round<max_harq_rounds)) { if (!(cur_harq->round<max_harq_rounds)) {
cur_harq.ndi ^= 1; cur_harq->ndi ^= 1;
cur_harq.state = INACTIVE; // failed after 4 rounds -> make inactive cur_harq->state = INACTIVE; // failed after 4 rounds -> make inactive
cur_harq.round = 0; cur_harq->round = 0;
#ifdef UL_HARQ_PRINT #ifdef UL_HARQ_PRINT
printf("[HARQ HANDLER] Ulharq id %d crc failed in all round, freeing it for scheduler\n",hrq_id); printf("[HARQ HANDLER] Ulharq id %d crc failed in all round, freeing it for scheduler\n",hrq_id);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment