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).
This commit is contained in:
+80
-175
@@ -23,9 +23,6 @@ typedef struct {
|
|||||||
view *pdcpview;
|
view *pdcpview;
|
||||||
view *rrcview;
|
view *rrcview;
|
||||||
view *legacy;
|
view *legacy;
|
||||||
widget *current_ue_label;
|
|
||||||
widget *prev_ue_button;
|
|
||||||
widget *next_ue_button;
|
|
||||||
widget *pdsch_iq_ue_xy_plot;
|
widget *pdsch_iq_ue_xy_plot;
|
||||||
widget *dl_estimate_ue_xy_plot;
|
widget *dl_estimate_ue_xy_plot;
|
||||||
widget *pdcch_energy_ue_xy_plot;
|
widget *pdcch_energy_ue_xy_plot;
|
||||||
@@ -121,15 +118,14 @@ static void *gui_thread(void *_g)
|
|||||||
return NULL;
|
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
|
return
|
||||||
filter_and(
|
filter_and(
|
||||||
filter_eq(filter_evarg(database, event, "harq_pid"), filter_int(i)),
|
filter_eq(filter_evarg(database, event, "harq_pid"), filter_int(i)),
|
||||||
filter_and(
|
filter_eq(filter_evarg(database, event, "eNB_ID"), filter_int(0)));
|
||||||
filter_eq(filter_evarg(database, event, "UE_id"), filter_int(ue)),
|
|
||||||
filter_eq(filter_evarg(database, event, "eNB_ID"), filter_int(0))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_current_ue(gui *g, ue_data *e, int ue)
|
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;
|
int i;
|
||||||
char s[256];
|
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);
|
sprintf(s, "PDSCH IQ [UE %d]", ue);
|
||||||
xy_plot_set_title(g, e->e->pdsch_iq_ue_xy_plot, s);
|
xy_plot_set_title(g, e->e->pdsch_iq_ue_xy_plot, s);
|
||||||
sprintf(s, "DL estimated channel [UE %d]", ue);
|
sprintf(s, "DL estimated channel [UE %d]", ue);
|
||||||
@@ -162,96 +156,23 @@ static void set_current_ue(gui *g, ue_data *e, int ue)
|
|||||||
sprintf(s, "PHY Measurements [UE %d]", ue);
|
sprintf(s, "PHY Measurements [UE %d]", ue);
|
||||||
xy_plot_set_title(g, e->e->phy_meas_xy_plot, s);
|
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++) {
|
for (i = 0; i < 8; i++) {
|
||||||
logger_set_filter(e->e->dl_dci_logger[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],
|
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],
|
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],
|
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],
|
/*logger_set_filter(e->ul_dci_retransmission_logger[i],
|
||||||
ticktime_filter(e->database,
|
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],
|
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],
|
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,
|
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;
|
widget *text;
|
||||||
view *textview;
|
view *textview;
|
||||||
int i;
|
int i;
|
||||||
widget *w, *w2;
|
widget *w;
|
||||||
view *v;
|
view *v;
|
||||||
logger *l;
|
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);
|
widget_add_child(g, top_container, line, -1);
|
||||||
logo = new_image(g, openair_logo_png, openair_logo_png_len);
|
logo = new_image(g, openair_logo_png, openair_logo_png_len);
|
||||||
|
|
||||||
/* logo + prev/next UE buttons */
|
/* logo */
|
||||||
col = new_container(g, VERTICAL);
|
widget_add_child(g, line, logo, -1);
|
||||||
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);
|
|
||||||
|
|
||||||
input_signal_plot = new_xy_plot(g, 256, 55, "input signal", 20);
|
input_signal_plot = new_xy_plot(g, 256, 55, "input signal", 20);
|
||||||
widget_add_child(g, line, input_signal_plot, -1);
|
widget_add_child(g, line, input_signal_plot, -1);
|
||||||
@@ -357,6 +262,72 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
|
|||||||
logger_add_view(l, v);
|
logger_add_view(l, v);
|
||||||
e->phy_meas_logger = l;
|
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 */
|
/* UE x PDSCH energy */
|
||||||
w = new_xy_plot(g, 128, 55, "", 50);
|
w = new_xy_plot(g, 128, 55, "", 50);
|
||||||
e->pdsch_energy_ue_xy_plot = w;
|
e->pdsch_energy_ue_xy_plot = w;
|
||||||
@@ -430,66 +401,6 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
|
|||||||
logger_add_view(l, v);
|
logger_add_view(l, v);
|
||||||
e->pdcch_iq_ue_logger = l;*/
|
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 */
|
/* downlink/uplink UE DCIs */
|
||||||
widget_add_child(g, top_container,
|
widget_add_child(g, top_container,
|
||||||
@@ -707,8 +618,6 @@ static void ue_main_gui(ue_gui *e, gui *g, event_handler *h, void *database,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
set_current_ue(g, ed, 0);
|
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,
|
void view_add_log(view *v, char *log, event_handler *h, void *database,
|
||||||
@@ -829,8 +738,6 @@ int main(int n, char **v)
|
|||||||
on_off(database, "LEGACY_GROUP_ERROR", is_on, 1);
|
on_off(database, "LEGACY_GROUP_ERROR", is_on, 1);
|
||||||
on_off(database, "LEGACY_GROUP_WARNING", 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_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_ACK", h, database, is_on);
|
||||||
view_add_log(eg.phyview, "UE_PHY_DLSCH_UE_NACK",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_ACK", h, database, is_on);
|
||||||
view_add_log(eg.phyview, "UE_PHY_ULSCH_UE_NACK", 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 */
|
/* 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_SDU_WITH_DATA", is_on, 0);
|
||||||
//on_off(database, "ENB_MAC_UE_UL_PDU_WITH_DATA", is_on, 0);
|
//on_off(database, "ENB_MAC_UE_UL_PDU_WITH_DATA", is_on, 0);
|
||||||
|
|||||||
@@ -2171,8 +2171,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
|
|||||||
uint8_t beamforming_mode,
|
uint8_t beamforming_mode,
|
||||||
uint16_t tc_rnti)
|
uint16_t tc_rnti)
|
||||||
{
|
{
|
||||||
|
|
||||||
uint8_t harq_pid=0;
|
|
||||||
uint8_t frame_type=frame_parms->frame_type;
|
uint8_t frame_type=frame_parms->frame_type;
|
||||||
uint8_t tpmi=0;
|
uint8_t tpmi=0;
|
||||||
LTE_UE_DLSCH_t *dlsch0=NULL,*dlsch1=NULL;
|
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:
|
case format1E_2A_M10PRB:
|
||||||
if (!dlsch[0]) return -1;
|
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) {
|
if (dci_info_extarcted.harq_pid>=8) {
|
||||||
LOG_E(PHY,"Format 1E_2A_M10PRB: harq_pid=%d >= 8\n", harq_pid);
|
LOG_E(PHY,"Format 1E_2A_M10PRB: harq_pid=%d >= 8\n", dci_info_extarcted.harq_pid);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
dlsch[0]->current_harq_pid = harq_pid;
|
dlsch[0]->current_harq_pid = dci_info_extarcted.harq_pid;
|
||||||
dlsch[0]->harq_ack[subframe].harq_id = 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;
|
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 = 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
|
// Needs to be checked
|
||||||
dlsch0_harq->codeword=0;
|
dlsch0_harq->codeword=0;
|
||||||
conv_rballoc(((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->rah,
|
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
|
// is NAK or an ACK was not received
|
||||||
|
|
||||||
dlsch0->harq_ack[subframe].ack = 1;
|
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->harq_ack[subframe].send_harq_status = 1;
|
||||||
dlsch0->active = 0;
|
dlsch0->active = 0;
|
||||||
return(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(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(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->mcs),
|
||||||
T_INT(dlsch0_harq->TBS));
|
T_INT(dlsch0_harq->TBS));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
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 ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
|
||||||
if(ue->ulsch[eNB_id]->o_ACK[0]) {
|
if(ue->ulsch[eNB_id]->o_ACK[0]) {
|
||||||
LOG_I(PHY,"PUSCH ACK\n");
|
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 {
|
} else {
|
||||||
LOG_I(PHY,"PUSCH NACK\n");
|
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",
|
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]) {
|
||||||
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(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));
|
||||||
T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
|
} else {
|
||||||
} 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(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));
|
||||||
T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_pucch1x(ue->common_vars.txdataF,
|
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,
|
CBA_RNTI,
|
||||||
eNB_id,
|
eNB_id,
|
||||||
0)==0)) {
|
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)) {
|
if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
|
||||||
LOG_USEDINLOG_VAR(int8_t,harq_pid) = subframe2harq_pid(&ue->frame_parms,
|
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_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx),
|
||||||
pdcch_alloc2ul_subframe(&ue->frame_parms,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);
|
LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1763,6 +1763,7 @@ void *UE_thread(void *arg) {
|
|||||||
UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0;
|
UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0;
|
||||||
proc->instance_cnt_rxtx++;
|
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);
|
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_cond_signal(&proc->cond_rxtx) ==0,"");
|
||||||
AssertFatal(pthread_mutex_unlock(&proc->mutex_rxtx) ==0,"");
|
AssertFatal(pthread_mutex_unlock(&proc->mutex_rxtx) ==0,"");
|
||||||
initRefTimes(t1);
|
initRefTimes(t1);
|
||||||
|
|||||||
Reference in New Issue
Block a user