From 4905a5e8e81e5f756395b46f5681f01f69b0fb8e Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Wed, 3 Apr 2019 12:44:17 +0200
Subject: [PATCH] bugfixes for the ue T tracer

Not much major changes. In openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c,
in the function generate_ue_dlsch_params_from_dci,
'harq_pid' was removed and dci_info_extarcted.harq_pid is now used for
all cases.

The ue T tracer only deals with PHY signals (no MAC, RLC, PDCP, RRC).
---
 common/utils/T/tracer/ue.c                   | 277 ++++++-------------
 openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c |  18 +-
 openair1/SCHED_UE/phy_procedures_lte_ue.c    |  45 +--
 targets/RT/USER/lte-ue.c                     |   1 +
 4 files changed, 125 insertions(+), 216 deletions(-)

diff --git a/common/utils/T/tracer/ue.c b/common/utils/T/tracer/ue.c
index 7b03210cd2..bafa0384f2 100644
--- a/common/utils/T/tracer/ue.c
+++ b/common/utils/T/tracer/ue.c
@@ -23,9 +23,6 @@ typedef struct {
   view *pdcpview;
   view *rrcview;
   view *legacy;
-  widget *current_ue_label;
-  widget *prev_ue_button;
-  widget *next_ue_button;
   widget *pdsch_iq_ue_xy_plot;
   widget *dl_estimate_ue_xy_plot;
   widget *pdcch_energy_ue_xy_plot;
@@ -121,15 +118,14 @@ static void *gui_thread(void *_g)
   return NULL;
 }
 
-static filter *ticktime_filter(void *database, char *event, int i, int ue)
+static filter *ticktime_filter(void *database, char *event, int i)
 {
-  /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0" */
+  /* filter is "harq_pid == i and eNB_id == 0" */
   return
     filter_and(
       filter_eq(filter_evarg(database, event, "harq_pid"), filter_int(i)),
-      filter_and(
-        filter_eq(filter_evarg(database, event, "UE_id"), filter_int(ue)),
-        filter_eq(filter_evarg(database, event, "eNB_ID"), filter_int(0))));
+      filter_eq(filter_evarg(database, event, "eNB_ID"), filter_int(0)));
+
 }
 
 static void set_current_ue(gui *g, ue_data *e, int ue)
@@ -137,8 +133,6 @@ static void set_current_ue(gui *g, ue_data *e, int ue)
   int i;
   char s[256];
 
-  sprintf(s, "[UE %d]  ", ue);
-  label_set_text(g, e->e->current_ue_label, s);
   sprintf(s, "PDSCH IQ [UE %d]", ue);
   xy_plot_set_title(g, e->e->pdsch_iq_ue_xy_plot, s);
   sprintf(s, "DL estimated channel [UE %d]", ue);
@@ -161,97 +155,24 @@ static void set_current_ue(gui *g, ue_data *e, int ue)
   xy_plot_set_title(g, e->e->pucch_power_xy_plot, s);
   sprintf(s, "PHY Measurements [UE %d]", ue);
   xy_plot_set_title(g, e->e->phy_meas_xy_plot, s);
-  
-  logger_set_filter(e->e->pdsch_iq_ue_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PDSCH_IQ", "UE_ID"),
-        filter_int(ue)));
-  logger_set_filter(e->e->dl_estimate_ue_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_DL_CHANNEL_ESTIMATE", "UE_ID"),
-        filter_int(ue)));
-  logger_set_filter(e->e->pdcch_energy_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PDCCH_ENERGY", "UE_ID"),
-        filter_int(ue)));
-  logger_set_filter(e->e->pdsch_energy_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PDSCH_ENERGY", "UE_ID"),
-        filter_int(ue)));
-  logger_set_filter(e->e->phy_meas_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_MEAS", "UE_ID"),
-        filter_int(ue)));  
-  /*logger_set_filter(e->pucch1_energy_ue_energy_logger,
-      filter_eq(
-        filter_evarg(e->database, "ENB_PHY_PUCCH_1_ENERGY", "UE_ID"),
-        filter_int(ue)));*/
-  /*logger_set_filter(e->e->pdcch_iq_ue_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PDCCH_IQ", "UE_ID"),
-        filter_int(ue)));*/
+
   for (i = 0; i < 8; i++) {
     logger_set_filter(e->e->dl_dci_logger[i],
-        ticktime_filter(e->database, "UE_PHY_DLSCH_UE_DCI", i, ue));
+        ticktime_filter(e->database, "UE_PHY_DLSCH_UE_DCI", i));
     logger_set_filter(e->e->dl_ack_logger[i],
-        ticktime_filter(e->database, "UE_PHY_DLSCH_UE_ACK", i, ue));
+        ticktime_filter(e->database, "UE_PHY_DLSCH_UE_ACK", i));
     logger_set_filter(e->e->dl_nack_logger[i],
-        ticktime_filter(e->database, "UE_PHY_DLSCH_UE_NACK", i, ue));
+        ticktime_filter(e->database, "UE_PHY_DLSCH_UE_NACK", i));
     logger_set_filter(e->e->ul_dci_logger[i],
-        ticktime_filter(e->database, "UE_PHY_ULSCH_UE_DCI", i, ue));
+        ticktime_filter(e->database, "UE_PHY_ULSCH_UE_DCI", i));
     /*logger_set_filter(e->ul_dci_retransmission_logger[i],
         ticktime_filter(e->database,
-            "ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION", i, ue));*/
+            "ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION", i));*/
     logger_set_filter(e->e->ul_ack_logger[i],
-        ticktime_filter(e->database, "UE_PHY_ULSCH_UE_ACK", i, ue));
+        ticktime_filter(e->database, "UE_PHY_ULSCH_UE_ACK", i));
     logger_set_filter(e->e->ul_nack_logger[i],
-        ticktime_filter(e->database, "UE_PHY_ULSCH_UE_NACK", i, ue));
+        ticktime_filter(e->database, "UE_PHY_ULSCH_UE_NACK", i));
   }
-  logger_set_filter(e->e->dl_mcs_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_DLSCH_UE_DCI", "UE_id"),
-        filter_int(ue)));
-  logger_set_filter(e->e->ul_mcs_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_ULSCH_UE_DCI", "UE_id"),
-        filter_int(ue)));
-  logger_set_filter(e->e->pusch_power_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PUSCH_TX_POWER", "UE_id"),
-        filter_int(ue)));
-  logger_set_filter(e->e->pusch_ampl_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PUSCH_TX_POWER", "UE_id"),
-        filter_int(ue)));
-  logger_set_filter(e->e->pucch_power_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PUCCH_TX_POWER", "UE_id"),
-        filter_int(ue)));
-  logger_set_filter(e->e->pucch_ampl_logger,
-      filter_eq(
-        filter_evarg(e->database, "UE_PHY_PUCCH_TX_POWER", "UE_id"),
-        filter_int(ue)));
-}
-
-static void click(void *private, gui *g,
-    char *notification, widget *w, void *notification_data)
-{
-  int *d = notification_data;
-  int button = d[0];
-  ue_data *ed = private;
-  ue_gui *e = ed->e;
-  int ue = ed->ue;
-
-  if (button != 1) return;
-  if (w == e->prev_ue_button) { ue--; if (ue < 0) ue = 0; }
-  if (w == e->next_ue_button) ue++;
-
-  if (pthread_mutex_lock(&ed->lock)) abort();
-  if (ue != ed->ue) {
-    set_current_ue(g, ed, ue);
-    ed->ue = ue;
-  }
-  if (pthread_mutex_unlock(&ed->lock)) abort();
 }
 
 static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
@@ -271,7 +192,7 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
   widget *text;
   view *textview;
   int i;
-  widget *w, *w2;
+  widget *w;
   view *v;
   logger *l;
 
@@ -283,24 +204,8 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
   widget_add_child(g, top_container, line, -1);
   logo = new_image(g, openair_logo_png, openair_logo_png_len);
 
-  /* logo + prev/next UE buttons */
-  col = new_container(g, VERTICAL);
-  widget_add_child(g, col, logo, -1);
-  w = new_container(g, HORIZONTAL);
-  widget_add_child(g, col, w, -1);
-  w2 = new_label(g, "");
-  widget_add_child(g, w, w2, -1);
-  e->current_ue_label = w2;
-  /* TODO: use button widget, not label widget */
-  w2 = new_label(g, "  [prev UE]  ");
-  widget_add_child(g, w, w2, -1);
-  label_set_clickable(g, w2, 1);
-  e->prev_ue_button = w2;
-  w2 = new_label(g, "  [next UE]  ");
-  widget_add_child(g, w, w2, -1);
-  label_set_clickable(g, w2, 1);
-  e->next_ue_button = w2;
-  widget_add_child(g, line, col, -1);
+  /* logo */
+  widget_add_child(g, line, logo, -1);
 
   input_signal_plot = new_xy_plot(g, 256, 55, "input signal", 20);
   widget_add_child(g, line, input_signal_plot, -1);
@@ -356,7 +261,73 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
   v = new_view_tti(10, g, w, new_color(g, "#0c720c"));
   logger_add_view(l, v);
   e->phy_meas_logger = l;
-    
+
+  /* a bit of space */
+  line = new_container(g, HORIZONTAL);
+  widget_add_child(g, top_container, line, -1);
+  w = new_space(g, 1, 10);
+  widget_add_child(g, line, w, -1);
+
+  /* UE x DL mcs */
+  line = new_container(g, HORIZONTAL);
+  widget_add_child(g, top_container, line, -1);
+  w = new_xy_plot(g, 128, 55, "", 20);
+  xy_plot_set_range(g, w, 0, 1024*10, -2, 30);
+  e->dl_mcs_xy_plot = w;
+  widget_add_child(g, line, w, -1);
+  l = new_ticked_ttilog(h, database, "UE_PHY_DL_TICK", "frame", "subframe",
+      "UE_PHY_DLSCH_UE_DCI", "mcs", 0, -1);
+  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
+  logger_add_view(l, v);
+  e->dl_mcs_logger = l;
+
+  /* UE x UL mcs */
+  w = new_xy_plot(g, 128, 55, "", 20);
+  xy_plot_set_range(g, w, 0, 1024*10, -2, 30);
+  e->ul_mcs_xy_plot = w;
+  widget_add_child(g, line, w, -1);
+  l = new_ticked_ttilog(h, database, "UE_PHY_DL_TICK", "frame", "subframe",
+      "UE_PHY_ULSCH_UE_DCI", "mcs", 0, -1);
+  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
+  logger_add_view(l, v);
+  e->ul_mcs_logger = l;
+
+    /* UE x PUSCH TX Power */
+//  line = new_container(g, HORIZONTAL);
+//  widget_add_child(g, top_container, line, -1);
+  w = new_xy_plot(g, 128, 55, "", 20);
+  e->pusch_power_xy_plot = w;
+  widget_add_child(g, line, w, -1);
+  xy_plot_set_range(g, w, 0, 1024*10, -30, 50);
+  l = new_ttilog(h, database,
+      "UE_PHY_PUSCH_TX_POWER", "frame", "subframe", "p0_pusch", 0);
+  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
+  logger_add_view(l, v);
+  e->pusch_power_logger = l;
+  l = new_ttilog(h, database,
+      "UE_PHY_PUSCH_TX_POWER", "frame", "subframe", "ampl", 1);
+  v = new_view_tti(10, g, w, new_color(g, "#720c0c"));
+  logger_add_view(l, v);
+  e->pusch_ampl_logger = l;
+
+      /* UE x PUCCH TX Power */
+//  line = new_container(g, HORIZONTAL);
+//  widget_add_child(g, top_container, line, -1);
+  w = new_xy_plot(g, 128, 55, "", 20);
+  e->pucch_power_xy_plot = w;
+  widget_add_child(g, line, w, -1);
+  xy_plot_set_range(g, w, 0, 1024*10, -30, 50);
+  l = new_ttilog(h, database,
+      "UE_PHY_PUCCH_TX_POWER", "frame", "subframe", "p0_pucch", 0);
+  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
+  logger_add_view(l, v);
+  e->pucch_power_logger = l;
+  l = new_ttilog(h, database,
+      "UE_PHY_PUCCH_TX_POWER", "frame", "subframe", "ampl", 1);
+  v = new_view_tti(10, g, w, new_color(g, "#720c0c"));
+  logger_add_view(l, v);
+  e->pucch_ampl_logger = l;
+
   /* UE x PDSCH energy */
   w = new_xy_plot(g, 128, 55, "", 50);
   e->pdsch_energy_ue_xy_plot = w;
@@ -376,13 +347,13 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
       "UE_PHY_PDSCH_ENERGY", "frame", "subframe", "pdsch_ch_level10", 1);
   v = new_view_tti(10, g, w, new_color(g, "#0f0f0f"));
   logger_add_view(l, v);
-  e->pdsch_energy_logger = l;  
+  e->pdsch_energy_logger = l;
   l = new_ttilog(h, database,
       "UE_PHY_PDSCH_ENERGY", "frame", "subframe", "pdsch_ch_level11", 1);
   v = new_view_tti(10, g, w, new_color(g, "#0000ff"));
   logger_add_view(l, v);
   e->pdsch_energy_logger = l;
-  
+
   /* UE x PDCCH energy */
   w = new_xy_plot(g, 128, 55, "", 50);
   e->pdcch_energy_ue_xy_plot = w;
@@ -402,13 +373,13 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
       "UE_PHY_PDCCH_ENERGY", "frame", "subframe", "pdcch_ch_level10", 1);
   v = new_view_tti(10, g, w, new_color(g, "#0f0f0f"));
   logger_add_view(l, v);
-  e->pdcch_energy_logger = l;  
+  e->pdcch_energy_logger = l;
   l = new_ttilog(h, database,
       "UE_PHY_PDCCH_ENERGY", "frame", "subframe", "pdcch_ch_level11", 1);
   v = new_view_tti(10, g, w, new_color(g, "#0000ff"));
   logger_add_view(l, v);
   e->pdcch_energy_logger = l;
-    
+
     /* UE x PDCCH IQ data */
   w = new_xy_plot(g, 55, 55, "", 50);
   e->pdcch_iq_ue_xy_plot = w;
@@ -419,7 +390,7 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
   v = new_view_xy(100*12*14,10,g,w,new_color(g,"#000"),XY_FORCED_MODE);
   logger_add_view(l, v);
   e->pdcch_iq_ue_logger = l;
-  
+
   /* UE x PDCCH IQ data */
   /*w = new_xy_plot(g, 55, 55, "", 50);
   e->pdcch_iq_ue_xy_plot = w;
@@ -429,68 +400,8 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
   v = new_view_xy(500, 10, g, w, new_color(g,"#000"), XY_LOOP_MODE);
   logger_add_view(l, v);
   e->pdcch_iq_ue_logger = l;*/
-  
-  /* UE x DL mcs */
-  line = new_container(g, HORIZONTAL);
-  widget_add_child(g, top_container, line, -1);
-  w = new_xy_plot(g, 128, 55, "", 20);
-  xy_plot_set_range(g, w, 0, 1024*10, -2, 30);
-  e->dl_mcs_xy_plot = w;
-  widget_add_child(g, line, w, -1);
-  l = new_ticked_ttilog(h, database, "UE_PHY_DL_TICK", "frame", "subframe",
-      "UE_PHY_DLSCH_UE_DCI", "mcs", 0, -1);
-  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
-  logger_add_view(l, v);
-  e->dl_mcs_logger = l;
 
-  /* UE x UL mcs */
-  w = new_xy_plot(g, 128, 55, "", 20);
-  xy_plot_set_range(g, w, 0, 1024*10, -2, 30);
-  e->ul_mcs_xy_plot = w;
-  widget_add_child(g, line, w, -1);
-  l = new_ticked_ttilog(h, database, "UE_PHY_UL_TICK", "frame", "subframe",
-      "UE_PHY_ULSCH_UE_DCI", "mcs", 0, -1);
-  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
-  logger_add_view(l, v);
-  e->ul_mcs_logger = l;
 
-    /* UE x PUSCH TX Power */
-//  line = new_container(g, HORIZONTAL);
-//  widget_add_child(g, top_container, line, -1);
-  w = new_xy_plot(g, 128, 55, "", 20);
-  e->pusch_power_xy_plot = w;
-  widget_add_child(g, line, w, -1);
-  xy_plot_set_range(g, w, 0, 1024*10, -30, 50);
-  l = new_ttilog(h, database,
-      "UE_PHY_PUSCH_TX_POWER", "frame", "subframe", "p0_pusch", 0);
-  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
-  logger_add_view(l, v);
-  e->pusch_power_logger = l;
-  l = new_ttilog(h, database,
-      "UE_PHY_PUSCH_TX_POWER", "frame", "subframe", "ampl", 1);
-  v = new_view_tti(10, g, w, new_color(g, "#720c0c"));
-  logger_add_view(l, v);
-  e->pusch_ampl_logger = l;
-  
-      /* UE x PUCCH TX Power */
-//  line = new_container(g, HORIZONTAL);
-//  widget_add_child(g, top_container, line, -1);
-  w = new_xy_plot(g, 128, 55, "", 20);
-  e->pucch_power_xy_plot = w;
-  widget_add_child(g, line, w, -1);
-  xy_plot_set_range(g, w, 0, 1024*10, -30, 50);
-  l = new_ttilog(h, database,
-      "UE_PHY_PUCCH_TX_POWER", "frame", "subframe", "p0_pucch", 0);
-  v = new_view_tti(10, g, w, new_color(g, "#0c0c72"));
-  logger_add_view(l, v);
-  e->pucch_power_logger = l;
-  l = new_ttilog(h, database,
-      "UE_PHY_PUCCH_TX_POWER", "frame", "subframe", "ampl", 1);
-  v = new_view_tti(10, g, w, new_color(g, "#720c0c"));
-  logger_add_view(l, v);
-  e->pucch_ampl_logger = l;
-  
-  
   /* downlink/uplink UE DCIs */
   widget_add_child(g, top_container,
       new_label(g,"DL/UL TICK/DCI/ACK/NACK [all UEs]"), -1);
@@ -600,14 +511,14 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
     logger_add_view(timelog, subview);
     e->ul_dci_logger[i] = timelog;
     /* retransmission */
-    
+
     timelog = new_ticklog(h, database,
         "ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION", "frame", "subframe");
     subview = new_subview_ticktime(timeview, i+9+1,
         new_color(g,"#99f"), 3600*1000);
     logger_add_view(timelog, subview);
     e->ul_dci_retransmission_logger[i] = timelog;
-    
+
   }
 
   /* UL ACK */
@@ -707,8 +618,6 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
 #endif
 
   set_current_ue(g, ed, 0);
-  register_notifier(g, "click", e->prev_ue_button, click, ed);
-  register_notifier(g, "click", e->next_ue_button, click, ed);
 }
 
 void view_add_log(view *v, char *log, event_handler *h, void *database,
@@ -824,13 +733,11 @@ int main(int n, char **v)
   on_off(database, "UE_PHY_PUSCH_TX_POWER", is_on, 1);
   on_off(database, "UE_PHY_PUCCH_TX_POWER", is_on, 1);
   on_off(database, "UE_PHY_MEAS", is_on, 1);
-  
+
   on_off(database, "LEGACY_GROUP_INFO", is_on, 1);
   on_off(database, "LEGACY_GROUP_ERROR", is_on, 1);
   on_off(database, "LEGACY_GROUP_WARNING", is_on, 1);
-  
-  view_add_log(eg.phyview, "UE_PHY_UL_TICK", h, database, is_on);
-  view_add_log(eg.phyview, "UE_PHY_DL_TICK", h, database, is_on);
+
   view_add_log(eg.phyview, "UE_PHY_DLSCH_UE_DCI", h, database, is_on);
   view_add_log(eg.phyview, "UE_PHY_DLSCH_UE_ACK", h, database, is_on);
   view_add_log(eg.phyview, "UE_PHY_DLSCH_UE_NACK",h, database, is_on);
@@ -838,8 +745,6 @@ int main(int n, char **v)
   view_add_log(eg.phyview, "UE_PHY_ULSCH_UE_ACK", h, database, is_on);
   view_add_log(eg.phyview, "UE_PHY_ULSCH_UE_NACK", h, database, is_on);
 
-
-
   /* deactivate those two by default, they are a bit heavy */
   //on_off(database, "ENB_MAC_UE_UL_SDU_WITH_DATA", is_on, 0);
   //on_off(database, "ENB_MAC_UE_UL_PDU_WITH_DATA", is_on, 0);
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
index dbade04739..4f65edd6d5 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
@@ -2171,8 +2171,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
                                       uint8_t beamforming_mode,
                                       uint16_t tc_rnti)
 {
-
-    uint8_t harq_pid=0;
     uint8_t frame_type=frame_parms->frame_type;
     uint8_t tpmi=0;
     LTE_UE_DLSCH_t *dlsch0=NULL,*dlsch1=NULL;
@@ -2488,15 +2486,15 @@ int generate_ue_dlsch_params_from_dci(int frame,
     case format1E_2A_M10PRB:
       if (!dlsch[0]) return -1;
 
-      harq_pid  = ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->harq_pid;
+      dci_info_extarcted.harq_pid  = ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->harq_pid;
 
-      if (harq_pid>=8) {
-        LOG_E(PHY,"Format 1E_2A_M10PRB: harq_pid=%d >= 8\n", harq_pid);
+      if (dci_info_extarcted.harq_pid>=8) {
+        LOG_E(PHY,"Format 1E_2A_M10PRB: harq_pid=%d >= 8\n", dci_info_extarcted.harq_pid);
         return(-1);
       }
 
-      dlsch[0]->current_harq_pid = harq_pid;
-      dlsch[0]->harq_ack[subframe].harq_id = harq_pid;
+      dlsch[0]->current_harq_pid = dci_info_extarcted.harq_pid;
+      dlsch[0]->harq_ack[subframe].harq_id = dci_info_extarcted.harq_pid;
 
       /*
         tbswap = ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->tb_swap;
@@ -2511,7 +2509,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
       */
       dlsch0 = dlsch[0];
 
-      dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
+      dlsch0_harq = dlsch[0]->harq_processes[dci_info_extarcted.harq_pid];
       // Needs to be checked
       dlsch0_harq->codeword=0;
       conv_rballoc(((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->rah,
@@ -2627,7 +2625,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
         // is NAK or an ACK was not received
 
         dlsch0->harq_ack[subframe].ack              = 1;
-        dlsch0->harq_ack[subframe].harq_id          = harq_pid;
+        dlsch0->harq_ack[subframe].harq_id          = dci_info_extarcted.harq_pid;
         dlsch0->harq_ack[subframe].send_harq_status = 1;
         dlsch0->active = 0;
         return(0);
@@ -2683,7 +2681,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
     {
       T(T_UE_PHY_DLSCH_UE_DCI, T_INT(0), T_INT(frame%1024), T_INT(subframe),
         T_INT(dlsch[0]->rnti), T_INT(dci_format),
-        T_INT(harq_pid),
+        T_INT(dci_info_extarcted.harq_pid),
         T_INT(dlsch0_harq->mcs),
         T_INT(dlsch0_harq->TBS));
     }
diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c
index 807c79e6e0..b49ca1eda2 100644
--- a/openair1/SCHED_UE/phy_procedures_lte_ue.c
+++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c
@@ -1517,15 +1517,19 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
         ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = ack_status_cw0 + ack_status_cw1;
       }
 
+      if (ue->ulsch[eNB_id]->o_ACK[0]) {
+        T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+          T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+      } else {
+        T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+          T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+      }
+
       if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
         if(ue->ulsch[eNB_id]->o_ACK[0]) {
           LOG_I(PHY,"PUSCH ACK\n");
-          T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
-            T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
         } else {
           LOG_I(PHY,"PUSCH NACK\n");
-          T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
-            T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
         }
 
         LOG_I(PHY,"[UE  %d][PDSCH %x] AbsSubFrame %d.%d Generating ACK (%d,%d) for %d bits on PUSCH\n",
@@ -2035,14 +2039,12 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
         }
       }
 
-      if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
-        if(pucch_payload[0]) {
-          T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
-            T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
-        } else {
-          T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
-            T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
-        }
+      if (pucch_payload[0]) {
+        T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+          T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+      } else {
+        T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+          T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
       }
 
       generate_pucch1x(ue->common_vars.txdataF,
@@ -2739,18 +2741,21 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
                                              CBA_RNTI,
                                              eNB_id,
                                              0)==0)) {
+        int harq_pid = subframe2harq_pid(&ue->frame_parms,
+                                         pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx),
+                                         pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx));
+        T(T_UE_PHY_ULSCH_UE_DCI, T_INT(eNB_id), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx),
+          T_INT(dci_alloc_rx[i].rnti),
+          T_INT(harq_pid),
+          T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs),
+          T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->round),
+          T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb),
+          T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb),
+          T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS));
         if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
           LOG_USEDINLOG_VAR(int8_t,harq_pid) = subframe2harq_pid(&ue->frame_parms,
                                                pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx),
                                                pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx));
-          T(T_UE_PHY_ULSCH_UE_DCI, T_INT(eNB_id), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx),
-            T_INT(dci_alloc_rx[i].rnti),
-            T_INT(harq_pid),
-            T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs),
-            T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->round),
-            T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb),
-            T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb),
-            T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS));
           LOG_D(PHY,"[UE  %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
         }
       }
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index bb2319774c..20b42b59bf 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -1763,6 +1763,7 @@ void *UE_thread(void *arg) {
                                UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0;
           proc->instance_cnt_rxtx++;
           LOG_D( PHY, "[SCHED][UE %d] UE RX instance_cnt_rxtx %d subframe %d !!\n", UE->Mod_id, proc->instance_cnt_rxtx,proc->subframe_rx);
+          T(T_UE_MASTER_TICK, T_INT(0), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx));
           AssertFatal (pthread_cond_signal(&proc->cond_rxtx) ==0,"");
           AssertFatal(pthread_mutex_unlock(&proc->mutex_rxtx) ==0,"");
           initRefTimes(t1);
-- 
GitLab