Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
d1ce26a3
Commit
d1ce26a3
authored
Nov 29, 2016
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into develop
parents
3df3a5b1
13a7281c
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
240 additions
and
56 deletions
+240
-56
common/utils/T/tracer/enb.c
common/utils/T/tracer/enb.c
+166
-54
common/utils/T/tracer/filter/filter.c
common/utils/T/tracer/filter/filter.c
+30
-1
common/utils/T/tracer/filter/filter.h
common/utils/T/tracer/filter/filter.h
+2
-0
common/utils/T/tracer/gui/gui.h
common/utils/T/tracer/gui/gui.h
+2
-0
common/utils/T/tracer/gui/gui_defs.h
common/utils/T/tracer/gui/gui_defs.h
+1
-1
common/utils/T/tracer/gui/label.c
common/utils/T/tracer/gui/label.c
+18
-0
common/utils/T/tracer/gui/xy_plot.c
common/utils/T/tracer/gui/xy_plot.c
+19
-0
common/utils/T/tracer/logger/logger.c
common/utils/T/tracer/logger/logger.c
+2
-0
No files found.
common/utils/T/tracer/enb.c
View file @
d1ce26a3
...
@@ -24,6 +24,26 @@ typedef struct {
...
@@ -24,6 +24,26 @@ 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
*
pusch_iq_ue_xy_plot
;
widget
*
ul_estimate_ue_xy_plot
;
widget
*
pucch1_energy_ue_xy_plot
;
widget
*
pucch_iq_ue_xy_plot
;
widget
*
dl_ul_harq_ue_label
;
logger
*
pusch_iq_ue_logger
;
logger
*
ul_estimate_ue_logger
;
logger
*
pucch1_energy_ue_threshold_logger
;
logger
*
pucch1_energy_ue_energy_logger
;
logger
*
pucch_iq_ue_logger
;
logger
*
dl_dci_logger
[
8
];
logger
*
dl_ack_logger
[
8
];
logger
*
dl_nack_logger
[
8
];
logger
*
ul_dci_logger
[
8
];
logger
*
ul_dci_retransmission_logger
[
8
];
logger
*
ul_ack_logger
[
8
];
logger
*
ul_nack_logger
[
8
];
}
enb_gui
;
}
enb_gui
;
typedef
struct
{
typedef
struct
{
...
@@ -31,6 +51,9 @@ typedef struct {
...
@@ -31,6 +51,9 @@ typedef struct {
int
*
is_on
;
int
*
is_on
;
int
nevents
;
int
nevents
;
pthread_mutex_t
lock
;
pthread_mutex_t
lock
;
enb_gui
*
e
;
int
ue
;
/* what UE is displayed in the UE specific views */
void
*
database
;
}
enb_data
;
}
enb_data
;
void
is_on_changed
(
void
*
_d
)
void
is_on_changed
(
void
*
_d
)
...
@@ -86,18 +109,97 @@ static void *gui_thread(void *_g)
...
@@ -86,18 +109,97 @@ static void *gui_thread(void *_g)
return
NULL
;
return
NULL
;
}
}
static
filter
*
ticktime_filter
(
void
*
database
,
char
*
event
,
int
i
)
static
filter
*
ticktime_filter
(
void
*
database
,
char
*
event
,
int
i
,
int
ue
)
{
{
/* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0" */
/* filter is "harq_pid == i && UE_id == 0 && 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_and
(
filter_eq
(
filter_evarg
(
database
,
event
,
"UE_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
))));
filter_eq
(
filter_evarg
(
database
,
event
,
"eNB_ID"
),
filter_int
(
0
))));
}
}
static
void
enb_main_gui
(
enb_gui
*
e
,
gui
*
g
,
event_handler
*
h
,
void
*
database
)
static
void
set_current_ue
(
gui
*
g
,
enb_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
,
"PUSCH IQ [UE %d]"
,
ue
);
xy_plot_set_title
(
g
,
e
->
e
->
pusch_iq_ue_xy_plot
,
s
);
sprintf
(
s
,
"UL estimated channel [UE %d]"
,
ue
);
xy_plot_set_title
(
g
,
e
->
e
->
ul_estimate_ue_xy_plot
,
s
);
sprintf
(
s
,
"PUCCH1 energy (SR) [UE %d]"
,
ue
);
xy_plot_set_title
(
g
,
e
->
e
->
pucch1_energy_ue_xy_plot
,
s
);
sprintf
(
s
,
"PUCCH IQ [UE %d]"
,
ue
);
xy_plot_set_title
(
g
,
e
->
e
->
pucch_iq_ue_xy_plot
,
s
);
sprintf
(
s
,
"DL/UL HARQ (x8) [UE %d]"
,
ue
);
label_set_text
(
g
,
e
->
e
->
dl_ul_harq_ue_label
,
s
);
logger_set_filter
(
e
->
e
->
pusch_iq_ue_logger
,
filter_eq
(
filter_evarg
(
e
->
database
,
"ENB_PHY_PUSCH_IQ"
,
"UE_ID"
),
filter_int
(
ue
)));
logger_set_filter
(
e
->
e
->
ul_estimate_ue_logger
,
filter_eq
(
filter_evarg
(
e
->
database
,
"ENB_PHY_UL_CHANNEL_ESTIMATE"
,
"UE_ID"
),
filter_int
(
ue
)));
logger_set_filter
(
e
->
e
->
pucch1_energy_ue_threshold_logger
,
filter_eq
(
filter_evarg
(
e
->
database
,
"ENB_PHY_PUCCH_1_ENERGY"
,
"UE_ID"
),
filter_int
(
ue
)));
logger_set_filter
(
e
->
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
->
pucch_iq_ue_logger
,
filter_eq
(
filter_evarg
(
e
->
database
,
"ENB_PHY_PUCCH_1AB_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
,
"ENB_PHY_DLSCH_UE_DCI"
,
i
,
ue
));
logger_set_filter
(
e
->
e
->
dl_ack_logger
[
i
],
ticktime_filter
(
e
->
database
,
"ENB_PHY_DLSCH_UE_ACK"
,
i
,
ue
));
logger_set_filter
(
e
->
e
->
dl_nack_logger
[
i
],
ticktime_filter
(
e
->
database
,
"ENB_PHY_DLSCH_UE_NACK"
,
i
,
ue
));
logger_set_filter
(
e
->
e
->
ul_dci_logger
[
i
],
ticktime_filter
(
e
->
database
,
"ENB_PHY_ULSCH_UE_DCI"
,
i
,
ue
));
logger_set_filter
(
e
->
e
->
ul_dci_retransmission_logger
[
i
],
ticktime_filter
(
e
->
database
,
"ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION"
,
i
,
ue
));
logger_set_filter
(
e
->
e
->
ul_ack_logger
[
i
],
ticktime_filter
(
e
->
database
,
"ENB_PHY_ULSCH_UE_ACK"
,
i
,
ue
));
logger_set_filter
(
e
->
e
->
ul_nack_logger
[
i
],
ticktime_filter
(
e
->
database
,
"ENB_PHY_ULSCH_UE_NACK"
,
i
,
ue
));
}
}
static
void
click
(
void
*
private
,
gui
*
g
,
char
*
notification
,
widget
*
w
,
void
*
notification_data
)
{
int
*
d
=
notification_data
;
int
button
=
d
[
0
];
enb_data
*
ed
=
private
;
enb_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
enb_main_gui
(
enb_gui
*
e
,
gui
*
g
,
event_handler
*
h
,
void
*
database
,
enb_data
*
ed
)
{
{
widget
*
main_window
;
widget
*
main_window
;
widget
*
top_container
;
widget
*
top_container
;
...
@@ -113,7 +215,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -113,7 +215,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
widget
*
text
;
widget
*
text
;
view
*
textview
;
view
*
textview
;
int
i
;
int
i
;
widget
*
w
;
widget
*
w
,
*
w2
;
view
*
v
;
view
*
v
;
logger
*
l
;
logger
*
l
;
...
@@ -124,7 +226,26 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -124,7 +226,26 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
line
=
new_container
(
g
,
HORIZONTAL
);
line
=
new_container
(
g
,
HORIZONTAL
);
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
);
widget_add_child
(
g
,
line
,
logo
,
-
1
);
/* 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
);
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
);
xy_plot_set_range
(
g
,
input_signal_plot
,
0
,
7680
*
10
,
20
,
70
);
xy_plot_set_range
(
g
,
input_signal_plot
,
0
,
7680
*
10
,
20
,
70
);
...
@@ -138,21 +259,20 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -138,21 +259,20 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
g
,
input_signal_plot
,
new_color
(
g
,
"#0c0c72"
),
XY_LOOP_MODE
);
g
,
input_signal_plot
,
new_color
(
g
,
"#0c0c72"
),
XY_LOOP_MODE
);
logger_add_view
(
input_signal_log
,
input_signal_view
);
logger_add_view
(
input_signal_log
,
input_signal_view
);
/* UE 0 PUSCH IQ data */
/* UE x PUSCH IQ data */
w
=
new_xy_plot
(
g
,
55
,
55
,
"PUSCH IQ [UE 0]"
,
50
);
w
=
new_xy_plot
(
g
,
55
,
55
,
""
,
50
);
e
->
pusch_iq_ue_xy_plot
=
w
;
widget_add_child
(
g
,
line
,
w
,
-
1
);
widget_add_child
(
g
,
line
,
w
,
-
1
);
xy_plot_set_range
(
g
,
w
,
-
1000
,
1000
,
-
1000
,
1000
);
xy_plot_set_range
(
g
,
w
,
-
1000
,
1000
,
-
1000
,
1000
);
l
=
new_iqlog
(
h
,
database
,
"ENB_PHY_PUSCH_IQ"
,
"nb_rb"
,
l
=
new_iqlog
(
h
,
database
,
"ENB_PHY_PUSCH_IQ"
,
"nb_rb"
,
"N_RB_UL"
,
"symbols_per_tti"
,
"pusch_comp"
);
"N_RB_UL"
,
"symbols_per_tti"
,
"pusch_comp"
);
v
=
new_view_xy
(
100
*
12
*
14
,
10
,
g
,
w
,
new_color
(
g
,
"#000"
),
XY_FORCED_MODE
);
v
=
new_view_xy
(
100
*
12
*
14
,
10
,
g
,
w
,
new_color
(
g
,
"#000"
),
XY_FORCED_MODE
);
logger_add_view
(
l
,
v
);
logger_add_view
(
l
,
v
);
logger_set_filter
(
l
,
e
->
pusch_iq_ue_logger
=
l
;
filter_eq
(
filter_evarg
(
database
,
"ENB_PHY_PUSCH_IQ"
,
"UE_ID"
),
filter_int
(
0
)));
/* UE 0 estimated UL channel */
/* UE x estimated UL channel */
w
=
new_xy_plot
(
g
,
280
,
55
,
"UL estimated channel [UE 0]"
,
50
);
w
=
new_xy_plot
(
g
,
280
,
55
,
""
,
50
);
e
->
ul_estimate_ue_xy_plot
=
w
;
widget_add_child
(
g
,
line
,
w
,
-
1
);
widget_add_child
(
g
,
line
,
w
,
-
1
);
xy_plot_set_range
(
g
,
w
,
0
,
512
*
10
,
-
10
,
80
);
xy_plot_set_range
(
g
,
w
,
0
,
512
*
10
,
-
10
,
80
);
l
=
new_framelog
(
h
,
database
,
l
=
new_framelog
(
h
,
database
,
...
@@ -161,43 +281,33 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -161,43 +281,33 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
framelog_set_update_only_at_sf9
(
l
,
0
);
framelog_set_update_only_at_sf9
(
l
,
0
);
v
=
new_view_xy
(
512
*
10
,
10
,
g
,
w
,
new_color
(
g
,
"#0c0c72"
),
XY_LOOP_MODE
);
v
=
new_view_xy
(
512
*
10
,
10
,
g
,
w
,
new_color
(
g
,
"#0c0c72"
),
XY_LOOP_MODE
);
logger_add_view
(
l
,
v
);
logger_add_view
(
l
,
v
);
logger_set_filter
(
l
,
e
->
ul_estimate_ue_logger
=
l
;
filter_eq
(
filter_evarg
(
database
,
"ENB_PHY_UL_CHANNEL_ESTIMATE"
,
"UE_ID"
),
filter_int
(
0
)));
/* UE 0 PUCCH energy */
/* UE x PUCCH energy */
w
=
new_xy_plot
(
g
,
128
,
55
,
"PUCCH1 energy (SR) [UE 0]"
,
50
);
w
=
new_xy_plot
(
g
,
128
,
55
,
""
,
50
);
e
->
pucch1_energy_ue_xy_plot
=
w
;
widget_add_child
(
g
,
line
,
w
,
-
1
);
widget_add_child
(
g
,
line
,
w
,
-
1
);
xy_plot_set_range
(
g
,
w
,
0
,
1024
*
10
,
-
10
,
80
);
xy_plot_set_range
(
g
,
w
,
0
,
1024
*
10
,
-
10
,
80
);
l
=
new_ttilog
(
h
,
database
,
l
=
new_ttilog
(
h
,
database
,
"ENB_PHY_PUCCH_1_ENERGY"
,
"frame"
,
"subframe"
,
"threshold"
,
0
);
"ENB_PHY_PUCCH_1_ENERGY"
,
"frame"
,
"subframe"
,
"threshold"
,
0
);
v
=
new_view_tti
(
10
,
g
,
w
,
new_color
(
g
,
"#ff0000"
));
v
=
new_view_tti
(
10
,
g
,
w
,
new_color
(
g
,
"#ff0000"
));
logger_add_view
(
l
,
v
);
logger_add_view
(
l
,
v
);
logger_set_filter
(
l
,
e
->
pucch1_energy_ue_threshold_logger
=
l
;
filter_eq
(
filter_evarg
(
database
,
"ENB_PHY_PUCCH_1_ENERGY"
,
"UE_ID"
),
filter_int
(
0
)));
l
=
new_ttilog
(
h
,
database
,
l
=
new_ttilog
(
h
,
database
,
"ENB_PHY_PUCCH_1_ENERGY"
,
"frame"
,
"subframe"
,
"energy"
,
1
);
"ENB_PHY_PUCCH_1_ENERGY"
,
"frame"
,
"subframe"
,
"energy"
,
1
);
v
=
new_view_tti
(
10
,
g
,
w
,
new_color
(
g
,
"#0c0c72"
));
v
=
new_view_tti
(
10
,
g
,
w
,
new_color
(
g
,
"#0c0c72"
));
logger_add_view
(
l
,
v
);
logger_add_view
(
l
,
v
);
logger_set_filter
(
l
,
e
->
pucch1_energy_ue_energy_logger
=
l
;
filter_eq
(
filter_evarg
(
database
,
"ENB_PHY_PUCCH_1_ENERGY"
,
"UE_ID"
),
filter_int
(
0
)));
/* UE 0 PUCCH IQ data */
/* UE x PUCCH IQ data */
w
=
new_xy_plot
(
g
,
55
,
55
,
"PUCCH IQ [UE 0]"
,
50
);
w
=
new_xy_plot
(
g
,
55
,
55
,
""
,
50
);
e
->
pucch_iq_ue_xy_plot
=
w
;
widget_add_child
(
g
,
line
,
w
,
-
1
);
widget_add_child
(
g
,
line
,
w
,
-
1
);
xy_plot_set_range
(
g
,
w
,
-
100
,
100
,
-
100
,
1
00
);
xy_plot_set_range
(
g
,
w
,
-
2000
,
2000
,
-
2000
,
20
00
);
l
=
new_iqdotlog
(
h
,
database
,
"ENB_PHY_PUCCH_1AB_IQ"
,
"I"
,
"Q"
);
l
=
new_iqdotlog
(
h
,
database
,
"ENB_PHY_PUCCH_1AB_IQ"
,
"I"
,
"Q"
);
v
=
new_view_xy
(
500
,
10
,
g
,
w
,
new_color
(
g
,
"#000"
),
XY_LOOP_MODE
);
v
=
new_view_xy
(
500
,
10
,
g
,
w
,
new_color
(
g
,
"#000"
),
XY_LOOP_MODE
);
logger_add_view
(
l
,
v
);
logger_add_view
(
l
,
v
);
logger_set_filter
(
l
,
e
->
pucch_iq_ue_logger
=
l
;
filter_eq
(
filter_evarg
(
database
,
"ENB_PHY_PUCCH_1AB_IQ"
,
"UE_ID"
),
filter_int
(
0
)));
/* downlink/uplink UE DCIs */
/* downlink/uplink UE DCIs */
widget_add_child
(
g
,
top_container
,
widget_add_child
(
g
,
top_container
,
...
@@ -250,8 +360,8 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -250,8 +360,8 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
/* harq processes' ticktime view */
/* harq processes' ticktime view */
widget_add_child
(
g
,
top_container
,
e
->
dl_ul_harq_ue_label
=
new_label
(
g
,
""
);
new_label
(
g
,
"DL/UL HARQ (x8) [UE 0]"
)
,
-
1
);
widget_add_child
(
g
,
top_container
,
e
->
dl_ul_harq_ue_label
,
-
1
);
line
=
new_container
(
g
,
HORIZONTAL
);
line
=
new_container
(
g
,
HORIZONTAL
);
widget_add_child
(
g
,
top_container
,
line
,
-
1
);
widget_add_child
(
g
,
top_container
,
line
,
-
1
);
timeline_plot
=
new_timeline
(
g
,
512
,
2
*
8
+
2
,
3
);
timeline_plot
=
new_timeline
(
g
,
512
,
2
*
8
+
2
,
3
);
...
@@ -271,15 +381,14 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -271,15 +381,14 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
/* tick on UL view */
/* tick on UL view */
subview
=
new_subview_ticktime
(
timeview
,
9
,
new_color
(
g
,
"#bbb"
),
3600
*
1000
);
subview
=
new_subview_ticktime
(
timeview
,
9
,
new_color
(
g
,
"#bbb"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
/* DL
harq pids
*/
/* DL
DCI
*/
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
timelog
=
new_ticklog
(
h
,
database
,
"ENB_PHY_DLSCH_UE_DCI"
,
timelog
=
new_ticklog
(
h
,
database
,
"ENB_PHY_DLSCH_UE_DCI"
,
"frame"
,
"subframe"
);
"frame"
,
"subframe"
);
subview
=
new_subview_ticktime
(
timeview
,
i
+
1
,
subview
=
new_subview_ticktime
(
timeview
,
i
+
1
,
new_color
(
g
,
"#55f"
),
3600
*
1000
);
new_color
(
g
,
"#55f"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
logger_set_filter
(
timelog
,
e
->
dl_dci_logger
[
i
]
=
timelog
;
ticktime_filter
(
database
,
"ENB_PHY_DLSCH_UE_DCI"
,
i
));
}
}
/* DL ACK */
/* DL ACK */
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
...
@@ -288,8 +397,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -288,8 +397,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
subview
=
new_subview_ticktime
(
timeview
,
i
+
1
,
subview
=
new_subview_ticktime
(
timeview
,
i
+
1
,
new_color
(
g
,
"#282"
),
3600
*
1000
);
new_color
(
g
,
"#282"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
logger_set_filter
(
timelog
,
e
->
dl_ack_logger
[
i
]
=
timelog
;
ticktime_filter
(
database
,
"ENB_PHY_DLSCH_UE_ACK"
,
i
));
}
}
/* DL NACK */
/* DL NACK */
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
...
@@ -298,10 +406,9 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -298,10 +406,9 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
subview
=
new_subview_ticktime
(
timeview
,
i
+
1
,
subview
=
new_subview_ticktime
(
timeview
,
i
+
1
,
new_color
(
g
,
"#f22"
),
3600
*
1000
);
new_color
(
g
,
"#f22"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
logger_set_filter
(
timelog
,
e
->
dl_nack_logger
[
i
]
=
timelog
;
ticktime_filter
(
database
,
"ENB_PHY_DLSCH_UE_NACK"
,
i
));
}
}
/* UL
harq pids
*/
/* UL
DCI/retransmission without DCI
*/
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
/* first transmission */
/* first transmission */
timelog
=
new_ticklog
(
h
,
database
,
"ENB_PHY_ULSCH_UE_DCI"
,
timelog
=
new_ticklog
(
h
,
database
,
"ENB_PHY_ULSCH_UE_DCI"
,
...
@@ -309,17 +416,14 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -309,17 +416,14 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
new_color
(
g
,
"#55f"
),
3600
*
1000
);
new_color
(
g
,
"#55f"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
logger_set_filter
(
timelog
,
e
->
ul_dci_logger
[
i
]
=
timelog
;
ticktime_filter
(
database
,
"ENB_PHY_ULSCH_UE_DCI"
,
i
));
/* retransmission */
/* retransmission */
timelog
=
new_ticklog
(
h
,
database
,
timelog
=
new_ticklog
(
h
,
database
,
"ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION"
,
"frame"
,
"subframe"
);
"ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION"
,
"frame"
,
"subframe"
);
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
new_color
(
g
,
"#99f"
),
3600
*
1000
);
new_color
(
g
,
"#99f"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
logger_set_filter
(
timelog
,
e
->
ul_dci_retransmission_logger
[
i
]
=
timelog
;
ticktime_filter
(
database
,
"ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION"
,
i
));
}
}
/* UL ACK */
/* UL ACK */
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
...
@@ -328,8 +432,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -328,8 +432,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
new_color
(
g
,
"#282"
),
3600
*
1000
);
new_color
(
g
,
"#282"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
logger_set_filter
(
timelog
,
e
->
ul_ack_logger
[
i
]
=
timelog
;
ticktime_filter
(
database
,
"ENB_PHY_ULSCH_UE_ACK"
,
i
));
}
}
/* UL NACK */
/* UL NACK */
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
...
@@ -338,8 +441,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -338,8 +441,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
subview
=
new_subview_ticktime
(
timeview
,
i
+
9
+
1
,
new_color
(
g
,
"#f22"
),
3600
*
1000
);
new_color
(
g
,
"#f22"
),
3600
*
1000
);
logger_add_view
(
timelog
,
subview
);
logger_add_view
(
timelog
,
subview
);
logger_set_filter
(
timelog
,
e
->
ul_nack_logger
[
i
]
=
timelog
;
ticktime_filter
(
database
,
"ENB_PHY_ULSCH_UE_NACK"
,
i
));
}
}
/* phy/mac/rlc/pdcp/rrc textlog */
/* phy/mac/rlc/pdcp/rrc textlog */
...
@@ -416,6 +518,10 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
...
@@ -416,6 +518,10 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
widget_add_child
(
g
,
top_container
,
text
,
-
1
);
widget_add_child
(
g
,
top_container
,
text
,
-
1
);
container_set_child_growable
(
g
,
top_container
,
text
,
1
);
container_set_child_growable
(
g
,
top_container
,
text
,
1
);
e
->
legacy
=
new_view_textlist
(
10000
,
10
,
g
,
text
);
e
->
legacy
=
new_view_textlist
(
10000
,
10
,
g
,
text
);
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
,
...
@@ -495,7 +601,11 @@ int main(int n, char **v)
...
@@ -495,7 +601,11 @@ int main(int n, char **v)
g
=
gui_init
();
g
=
gui_init
();
new_thread
(
gui_thread
,
g
);
new_thread
(
gui_thread
,
g
);
enb_main_gui
(
&
eg
,
g
,
h
,
database
);
enb_data
.
ue
=
0
;
enb_data
.
e
=
&
eg
;
enb_data
.
database
=
database
;
enb_main_gui
(
&
eg
,
g
,
h
,
database
,
&
enb_data
);
for
(
i
=
0
;
i
<
number_of_events
;
i
++
)
{
for
(
i
=
0
;
i
<
number_of_events
;
i
++
)
{
logger
*
textlog
;
logger
*
textlog
;
...
@@ -639,7 +749,9 @@ restart:
...
@@ -639,7 +749,9 @@ restart:
event
e
;
event
e
;
e
=
get_event
(
enb_data
.
socket
,
v
,
database
);
e
=
get_event
(
enb_data
.
socket
,
v
,
database
);
if
(
e
.
type
==
-
1
)
goto
restart
;
if
(
e
.
type
==
-
1
)
goto
restart
;
if
(
pthread_mutex_lock
(
&
enb_data
.
lock
))
abort
();
handle_event
(
h
,
e
);
handle_event
(
h
,
e
);
if
(
pthread_mutex_unlock
(
&
enb_data
.
lock
))
abort
();
}
}
return
0
;
return
0
;
...
...
common/utils/T/tracer/filter/filter.c
View file @
d1ce26a3
...
@@ -13,6 +13,7 @@ struct filter {
...
@@ -13,6 +13,7 @@ struct filter {
}
v
;
}
v
;
int
(
*
eval
)(
struct
filter
*
this
,
event
e
);
int
(
*
eval
)(
struct
filter
*
this
,
event
e
);
void
(
*
free
)(
struct
filter
*
this
);
};
};
/****************************************************************************/
/****************************************************************************/
...
@@ -52,7 +53,23 @@ int eval_evarg(struct filter *f, event e)
...
@@ -52,7 +53,23 @@ int eval_evarg(struct filter *f, event e)
}
}
/****************************************************************************/
/****************************************************************************/
/* filter construction functions */
/* free memory functions */
/****************************************************************************/
void
free_op2
(
struct
filter
*
f
)
{
free_filter
(
f
->
v
.
op2
.
a
);
free_filter
(
f
->
v
.
op2
.
b
);
free
(
f
);
}
void
free_noop
(
struct
filter
*
f
)
{
free
(
f
);
}
/****************************************************************************/
/* filter construction/destruction functions */
/****************************************************************************/
/****************************************************************************/
filter
*
filter_and
(
filter
*
a
,
filter
*
b
)
filter
*
filter_and
(
filter
*
a
,
filter
*
b
)
...
@@ -60,6 +77,7 @@ filter *filter_and(filter *a, filter *b)
...
@@ -60,6 +77,7 @@ filter *filter_and(filter *a, filter *b)
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
if
(
ret
==
NULL
)
abort
();
if
(
ret
==
NULL
)
abort
();
ret
->
eval
=
eval_and
;
ret
->
eval
=
eval_and
;
ret
->
free
=
free_op2
;
ret
->
v
.
op2
.
a
=
a
;
ret
->
v
.
op2
.
a
=
a
;
ret
->
v
.
op2
.
b
=
b
;
ret
->
v
.
op2
.
b
=
b
;
return
ret
;
return
ret
;
...
@@ -70,6 +88,7 @@ filter *filter_eq(filter *a, filter *b)
...
@@ -70,6 +88,7 @@ filter *filter_eq(filter *a, filter *b)
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
if
(
ret
==
NULL
)
abort
();
if
(
ret
==
NULL
)
abort
();
ret
->
eval
=
eval_eq
;
ret
->
eval
=
eval_eq
;
ret
->
free
=
free_op2
;
ret
->
v
.
op2
.
a
=
a
;
ret
->
v
.
op2
.
a
=
a
;
ret
->
v
.
op2
.
b
=
b
;
ret
->
v
.
op2
.
b
=
b
;
return
ret
;
return
ret
;
...
@@ -80,6 +99,7 @@ filter *filter_int(int v)
...
@@ -80,6 +99,7 @@ filter *filter_int(int v)
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
if
(
ret
==
NULL
)
abort
();
if
(
ret
==
NULL
)
abort
();
ret
->
eval
=
eval_int
;
ret
->
eval
=
eval_int
;
ret
->
free
=
free_noop
;
ret
->
v
.
v
=
v
;
ret
->
v
.
v
=
v
;
return
ret
;
return
ret
;
}
}
...
@@ -97,6 +117,7 @@ filter *filter_evarg(void *database, char *event_name, char *varname)
...
@@ -97,6 +117,7 @@ filter *filter_evarg(void *database, char *event_name, char *varname)
f
=
get_format
(
database
,
event_id
);
f
=
get_format
(
database
,
event_id
);
ret
->
eval
=
eval_evarg
;
ret
->
eval
=
eval_evarg
;
ret
->
free
=
free_noop
;
ret
->
v
.
evarg
.
event_type
=
event_id
;
ret
->
v
.
evarg
.
event_type
=
event_id
;
ret
->
v
.
evarg
.
arg_index
=
-
1
;
ret
->
v
.
evarg
.
arg_index
=
-
1
;
...
@@ -114,6 +135,14 @@ filter *filter_evarg(void *database, char *event_name, char *varname)
...
@@ -114,6 +135,14 @@ filter *filter_evarg(void *database, char *event_name, char *varname)
return
ret
;
return
ret
;
}
}
void
free_filter
(
filter
*
_f
)
{
struct
filter
*
f
;
if
(
_f
==
NULL
)
return
;
f
=
_f
;
f
->
free
(
f
);
}
/****************************************************************************/
/****************************************************************************/
/* eval function */
/* eval function */
/****************************************************************************/
/****************************************************************************/
...
...
common/utils/T/tracer/filter/filter.h
View file @
d1ce26a3
...
@@ -12,4 +12,6 @@ filter *filter_evarg(void *database, char *event_name, char *varname);
...
@@ -12,4 +12,6 @@ filter *filter_evarg(void *database, char *event_name, char *varname);
int
filter_eval
(
filter
*
f
,
event
e
);
int
filter_eval
(
filter
*
f
,
event
e
);
void
free_filter
(
filter
*
f
);
#endif
/* _FILTER_H_ */
#endif
/* _FILTER_H_ */
common/utils/T/tracer/gui/gui.h
View file @
d1ce26a3
...
@@ -39,6 +39,7 @@ widget *new_space(gui *gui, int width, int height);
...
@@ -39,6 +39,7 @@ widget *new_space(gui *gui, int width, int height);
widget
*
new_image
(
gui
*
gui
,
unsigned
char
*
data
,
int
length
);
widget
*
new_image
(
gui
*
gui
,
unsigned
char
*
data
,
int
length
);
void
label_set_clickable
(
gui
*
gui
,
widget
*
label
,
int
clickable
);
void
label_set_clickable
(
gui
*
gui
,
widget
*
label
,
int
clickable
);
void
label_set_text
(
gui
*
gui
,
widget
*
label
,
char
*
text
);
void
container_set_child_growable
(
gui
*
_gui
,
widget
*
_this
,
void
container_set_child_growable
(
gui
*
_gui
,
widget
*
_this
,
widget
*
child
,
int
growable
);
widget
*
child
,
int
growable
);
...
@@ -49,6 +50,7 @@ void xy_plot_set_range(gui *gui, widget *this,
...
@@ -49,6 +50,7 @@ void xy_plot_set_range(gui *gui, widget *this,
void
xy_plot_set_points
(
gui
*
gui
,
widget
*
this
,
void
xy_plot_set_points
(
gui
*
gui
,
widget
*
this
,
int
plot
,
int
npoints
,
float
*
x
,
float
*
y
);
int
plot
,
int
npoints
,
float
*
x
,
float
*
y
);
void
xy_plot_get_dimensions
(
gui
*
gui
,
widget
*
this
,
int
*
width
,
int
*
height
);
void
xy_plot_get_dimensions
(
gui
*
gui
,
widget
*
this
,
int
*
width
,
int
*
height
);
void
xy_plot_set_title
(
gui
*
gui
,
widget
*
this
,
char
*
label
);
void
textlist_add
(
gui
*
gui
,
widget
*
this
,
const
char
*
text
,
int
position
,
void
textlist_add
(
gui
*
gui
,
widget
*
this
,
const
char
*
text
,
int
position
,
int
color
);
int
color
);
...
...
common/utils/T/tracer/gui/gui_defs.h
View file @
d1ce26a3
...
@@ -141,7 +141,7 @@ struct button_widget {
...
@@ -141,7 +141,7 @@ struct button_widget {
struct
label_widget
{
struct
label_widget
{
struct
widget
common
;
struct
widget
common
;
c
onst
c
har
*
t
;
char
*
t
;
int
color
;
int
color
;
int
width
;
/* as given by the graphic's backend */
int
width
;
/* as given by the graphic's backend */
int
height
;
/* as given by the graphic's backend */
int
height
;
/* as given by the graphic's backend */
...
...
common/utils/T/tracer/gui/label.c
View file @
d1ce26a3
...
@@ -81,3 +81,21 @@ void label_set_clickable(gui *_g, widget *_this, int clickable)
...
@@ -81,3 +81,21 @@ void label_set_clickable(gui *_g, widget *_this, int clickable)
gunlock
(
g
);
gunlock
(
g
);
}
}
void
label_set_text
(
gui
*
_g
,
widget
*
_this
,
char
*
text
)
{
struct
gui
*
g
=
_g
;
struct
label_widget
*
this
=
_this
;
glock
(
g
);
free
(
this
->
t
);
this
->
t
=
strdup
(
text
);
if
(
this
->
t
==
NULL
)
OOM
;
x_text_get_dimensions
(
g
->
x
,
DEFAULT_FONT
,
text
,
&
this
->
width
,
&
this
->
height
,
&
this
->
baseline
);
send_event
(
g
,
REPACK
,
this
->
common
.
id
);
gunlock
(
g
);
}
common/utils/T/tracer/gui/xy_plot.c
View file @
d1ce26a3
...
@@ -290,3 +290,22 @@ void xy_plot_get_dimensions(gui *_gui, widget *_this, int *width, int *height)
...
@@ -290,3 +290,22 @@ void xy_plot_get_dimensions(gui *_gui, widget *_this, int *width, int *height)
gunlock
(
g
);
gunlock
(
g
);
}
}
void
xy_plot_set_title
(
gui
*
_gui
,
widget
*
_this
,
char
*
label
)
{
struct
gui
*
g
=
_gui
;
struct
xy_plot_widget
*
this
=
_this
;
glock
(
g
);
free
(
this
->
label
);
this
->
label
=
strdup
(
label
);
if
(
this
->
label
==
NULL
)
OOM
;
/* TODO: be sure calling X there is valid wrt "global model" (we are
* not in the "gui thread") */
x_text_get_dimensions
(
g
->
x
,
DEFAULT_FONT
,
label
,
&
this
->
label_width
,
&
this
->
label_height
,
&
this
->
label_baseline
);
send_event
(
g
,
REPACK
,
this
->
common
.
id
);
gunlock
(
g
);
}
common/utils/T/tracer/logger/logger.c
View file @
d1ce26a3
#include "logger.h"
#include "logger.h"
#include "logger_defs.h"
#include "logger_defs.h"
#include "filter/filter.h"
#include <stdlib.h>
#include <stdlib.h>
void
logger_add_view
(
logger
*
_l
,
view
*
v
)
void
logger_add_view
(
logger
*
_l
,
view
*
v
)
...
@@ -13,5 +14,6 @@ void logger_add_view(logger *_l, view *v)
...
@@ -13,5 +14,6 @@ void logger_add_view(logger *_l, view *v)
void
logger_set_filter
(
logger
*
_l
,
void
*
filter
)
void
logger_set_filter
(
logger
*
_l
,
void
*
filter
)
{
{
struct
logger
*
l
=
_l
;
struct
logger
*
l
=
_l
;
free_filter
(
l
->
filter
);
l
->
filter
=
filter
;
l
->
filter
=
filter
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment