Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
openairinterface5G
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
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
sorin rosenberg
openairinterface5G
Commits
a2acf0a9
Commit
a2acf0a9
authored
Dec 05, 2016
by
Xenofon Foukas
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into feature-68-enb-agent
parents
7f1bef9b
9a0f32aa
Changes
29
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
1951 additions
and
227 deletions
+1951
-227
cmake_targets/autotests/README.txt
cmake_targets/autotests/README.txt
+9
-0
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
+14
-9
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+733
-95
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+2
-2
common/utils/T/tracer/enb.c
common/utils/T/tracer/enb.c
+206
-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/Makefile
common/utils/T/tracer/gui/Makefile
+2
-2
common/utils/T/tracer/gui/gui.h
common/utils/T/tracer/gui/gui.h
+10
-0
common/utils/T/tracer/gui/gui_defs.h
common/utils/T/tracer/gui/gui_defs.h
+14
-2
common/utils/T/tracer/gui/label.c
common/utils/T/tracer/gui/label.c
+18
-0
common/utils/T/tracer/gui/textarea.c
common/utils/T/tracer/gui/textarea.c
+83
-0
common/utils/T/tracer/gui/widget.c
common/utils/T/tracer/gui/widget.c
+2
-1
common/utils/T/tracer/gui/xy_plot.c
common/utils/T/tracer/gui/xy_plot.c
+228
-7
common/utils/T/tracer/logger/Makefile
common/utils/T/tracer/logger/Makefile
+1
-1
common/utils/T/tracer/logger/logger.c
common/utils/T/tracer/logger/logger.c
+2
-0
common/utils/T/tracer/logger/logger.h
common/utils/T/tracer/logger/logger.h
+8
-0
common/utils/T/tracer/logger/throughputlog.c
common/utils/T/tracer/logger/throughputlog.c
+194
-0
common/utils/T/tracer/logger/ticked_ttilog.c
common/utils/T/tracer/logger/ticked_ttilog.c
+196
-0
common/utils/T/tracer/utils.c
common/utils/T/tracer/utils.c
+11
-0
common/utils/T/tracer/utils.h
common/utils/T/tracer/utils.h
+1
-0
common/utils/T/tracer/view/Makefile
common/utils/T/tracer/view/Makefile
+1
-1
common/utils/T/tracer/view/scrolltti.c
common/utils/T/tracer/view/scrolltti.c
+100
-0
common/utils/T/tracer/view/view.h
common/utils/T/tracer/view/view.h
+2
-0
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+10
-4
targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
+2
-3
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+30
-21
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+28
-12
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+12
-12
No files found.
cmake_targets/autotests/README.txt
View file @
a2acf0a9
...
...
@@ -268,6 +268,15 @@ Obj.# Case# Test# Description
02 55 22 Band 7 FDD 10MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
02 55 23 Band 7 FDD 20MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
02 57 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ OAI UE
02 57 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
02 57 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
02 57 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
02 57 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
02 57 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
02 57 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
01 64 lte-softmodem-noS1 tests
02 Functional test case
...
...
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
View file @
a2acf0a9
...
...
@@ -552,7 +552,7 @@ def wait_testcaseclass_generic_threads(threadListGeneric, timeout = 1):
# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml)
# \param ExmimoRfStop command to stop EXMIMO Card
# \param nruns_lte-softmodem global parameter to override number of runs (nruns) within the test case
def
handle_testcaseclass_softmodem
(
testcase
,
oldprogramList
,
logdirOAI5GRepo
,
logdirOpenaircnRepo
,
MachineList
,
user
,
password
,
CleanUpAluLteBox
,
ExmimoRfStop
,
nruns_lte_softmodem
,
timeout_cmd
):
def
handle_testcaseclass_softmodem
(
testcase
,
oldprogramList
,
logdirOAI5GRepo
,
logdirOpenaircnRepo
,
MachineList
,
user
,
password
,
CleanUpAluLteBox
,
ExmimoRfStop
,
nruns_lte_softmodem
,
GitOAI5GRepoBranch
,
GitOpenaircnRepoBranch
,
timeout_cmd
):
#We ignore the password sent to this function for secuirity reasons for password present in log files
#It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt
# your_user_name ALL=(ALL:ALL) NOPASSWD: ALL
...
...
@@ -583,7 +583,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
RRH_main_exec
=
testcase
.
findtext
(
'RRH_main_exec'
,
default
=
''
)
RRH_main_exec_args
=
testcase
.
findtext
(
'RRH_main_exec_args'
,
default
=
''
)
RRH_terminate_missing_procs
=
testcase
.
findtext
(
'RRH_terminate_missing_procs'
,
default
=
'False'
)
RRH_branch
=
testcase
.
findtext
(
'RRH_branch'
,
default
=
GitOAI5GRepoBranch
)
eNBMachine
=
testcase
.
findtext
(
'eNB'
,
default
=
''
)
eNB_config_file
=
testcase
.
findtext
(
'eNB_config_file'
,
default
=
''
)
...
...
@@ -599,6 +599,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
eNB_search_expr_true
=
testcase
.
findtext
(
'eNB_search_expr_true'
,
''
)
if
re
.
compile
(
'\w+'
).
match
(
eNB_search_expr_true
)
!=
None
:
eNB_search_expr_true
=
eNB_search_expr_true
+
' duration='
+
str
(
timeout_cmd
-
90
)
+
's'
eNB_branch
=
testcase
.
findtext
(
'eNB_branch'
,
default
=
GitOAI5GRepoBranch
)
UEMachine
=
testcase
.
findtext
(
'UE'
,
default
=
''
)
UE_config_file
=
testcase
.
findtext
(
'UE_config_file'
,
default
=
''
)
...
...
@@ -615,6 +616,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
UE_stop_script
=
testcase
.
findtext
(
'UE_stop_script'
,
''
)
if
re
.
compile
(
'\w+'
).
match
(
UE_search_expr_true
)
!=
None
:
UE_search_expr_true
=
UE_search_expr_true
+
' duration='
+
str
(
timeout_cmd
-
90
)
+
's'
UE_branch
=
testcase
.
findtext
(
'UE_branch'
,
default
=
GitOAI5GRepoBranch
)
EPCMachine
=
testcase
.
findtext
(
'EPC'
,
default
=
''
)
EPC_config_file
=
testcase
.
findtext
(
'EPC_config_file'
,
default
=
''
)
...
...
@@ -633,6 +635,8 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
EPC_traffic_exec_args
=
testcase
.
findtext
(
'EPC_traffic_exec_args'
,
default
=
''
)
EPC_terminate_missing_procs
=
testcase
.
findtext
(
'EPC_terminate_missing_procs'
,
default
=
'False'
)
EPC_search_expr_true
=
testcase
.
findtext
(
'EPC_search_expr_true'
,
''
)
EPC_branch
=
testcase
.
findtext
(
'EPC_branch'
,
default
=
GitOpenaircnRepoBranch
)
if
re
.
compile
(
'\w+'
).
match
(
EPC_search_expr_true
)
!=
None
:
EPC_search_expr_true
=
EPC_search_expr_true
+
' duration='
+
str
(
timeout_cmd
-
90
)
+
's'
...
...
@@ -689,7 +693,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
logdir_local_testcase
=
logdir_local
+
'/cmake_targets/autotests/log/'
+
testcasename
+
'/run_'
+
str
(
run
)
#Make the log directory of test case
if
RRHMachine
!=
''
:
cmd
=
'rm -fr '
+
logdir_RRH
+
' ; mkdir -p '
+
logdir_RRH
cmd
=
'rm -fr '
+
logdir_RRH
+
' ; mkdir -p '
+
logdir_RRH
result
=
oai_RRH
.
send_recv
(
cmd
)
cmd
=
'rm -fr '
+
logdir_eNB
+
' ; mkdir -p '
+
logdir_eNB
result
=
oai_eNB
.
send_recv
(
cmd
)
...
...
@@ -709,7 +713,8 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
logfile_task_RRH_out
=
logdir_RRH
+
'/RRH_task_out'
+
'_'
+
str
(
run
)
+
'_.log'
logfile_task_RRH
=
logdir_local_testcase
+
'/RRH_task'
+
'_'
+
str
(
run
)
+
'_.log'
task_RRH_compile
=
' ( uname -a ; date
\n
'
task_RRH_compile
=
task_RRH_compile
+
'cd '
+
logdirOAI5GRepo
+
' ; source oaienv ; source cmake_targets/tools/build_helper
\n
'
task_RRH_compile
=
task_RRH_compile
+
'cd '
+
logdirOAI5GRepo
+
'; git reset --hard HEAD ; git checkout '
+
RRH_branch
+
' ; source oaienv
\n
'
task_RRH_compile
=
task_RRH_compile
+
' source cmake_targets/tools/build_helper
\n
'
task_RRH_compile
=
task_RRH_compile
+
'env |grep OPENAIR
\n
'
task_RRH_compile
=
task_RRH_compile
+
update_config_file
(
oai_RRH
,
RRH_config_file
,
logdirOAI5GRepo
,
'$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py'
)
+
'
\n
'
if
RRH_compile_prog
!=
""
:
...
...
@@ -749,7 +754,8 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
logfile_pcap_tmp_eNB
=
'/tmp/'
+
'/eNB_tshark'
+
'_'
+
str
(
run
)
+
'_.pcap'
task_eNB_compile
=
' ( uname -a ; date
\n
'
task_eNB_compile
=
task_eNB_compile
+
'cd '
+
logdirOAI5GRepo
+
' ; source oaienv ; source cmake_targets/tools/build_helper
\n
'
task_eNB_compile
=
task_eNB_compile
+
'cd '
+
logdirOAI5GRepo
+
'; git reset --hard HEAD ; git checkout '
+
eNB_branch
+
' ; source oaienv
\n
'
task_eNB_compile
=
task_eNB_compile
+
' source cmake_targets/tools/build_helper
\n
'
task_eNB_compile
=
task_eNB_compile
+
'env |grep OPENAIR
\n
'
task_eNB_compile
=
task_eNB_compile
+
update_config_file
(
oai_eNB
,
eNB_config_file
,
logdirOAI5GRepo
,
'$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py'
)
+
'
\n
'
if
eNB_compile_prog
!=
""
:
...
...
@@ -799,8 +805,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_UE_compile
=
' ( uname -a ; date
\n
'
task_UE_compile
=
task_UE_compile
+
'array_exec_pid=()'
+
'
\n
'
task_UE_compile
=
task_UE_compile
+
'cd '
+
logdirOAI5GRepo
+
'
\n
'
task_UE_compile
=
task_UE_compile
+
'source oaienv
\n
'
task_UE_compile
=
task_UE_compile
+
'cd '
+
logdirOAI5GRepo
+
'; git reset --hard HEAD ; git checkout '
+
UE_branch
+
' ; source oaienv
\n
'
task_UE_compile
=
task_UE_compile
+
'source cmake_targets/tools/build_helper
\n
'
task_UE_compile
=
task_UE_compile
+
'env |grep OPENAIR
\n
'
task_UE_compile
=
task_UE_compile
+
update_config_file
(
oai_UE
,
UE_config_file
,
logdirOAI5GRepo
,
'$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py'
)
+
'
\n
'
...
...
@@ -850,7 +855,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_EPC_compile
=
' ( uname -a ; date
\n
'
task_EPC_compile
=
task_EPC_compile
+
'array_exec_pid=()'
+
'
\n
'
task_EPC_compile
=
task_EPC_compile
+
'cd '
+
logdirOpenaircnRepo
+
'
; source oaienv
\n
'
task_EPC_compile
=
task_EPC_compile
+
'cd '
+
logdirOpenaircnRepo
+
'
; git reset --hard HEAD ; git checkout '
+
EPC_branch
+
' ; source oaienv
\n
'
task_EPC_compile
=
task_EPC_compile
+
update_config_file
(
oai_EPC
,
EPC_config_file
,
logdirOpenaircnRepo
,
logdirOpenaircnRepo
+
'/TEST/autotests/tools/search_repl.py'
)
+
'
\n
'
task_EPC_compile
=
task_EPC_compile
+
'source BUILD/TOOLS/build_helper
\n
'
if
EPC_compile_prog
!=
""
:
...
...
@@ -2203,7 +2208,7 @@ for testcase in testcaseList:
print
"eNBMachine : "
+
eNBMachine
+
"UEMachine : "
+
UEMachine
+
"EPCMachine : "
+
EPCMachine
+
"MachineList : "
+
','
.
join
(
MachineList
)
print
"testcasename = "
+
testcasename
+
" class = "
+
testcaseclass
#cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
handle_testcaseclass_softmodem
(
testcase
,
CleanUpOldProgs
,
logdirOAI5GRepo
,
logdirOpenaircnRepo
,
MachineList
,
user
,
pw
,
CleanUpAluLteBox
,
ExmimoRfStop
,
nruns_lte_softmodem
,
Timeout_cmd
)
handle_testcaseclass_softmodem
(
testcase
,
CleanUpOldProgs
,
logdirOAI5GRepo
,
logdirOpenaircnRepo
,
MachineList
,
user
,
pw
,
CleanUpAluLteBox
,
ExmimoRfStop
,
nruns_lte_softmodem
,
GitOAI5GRepoBranch
,
GitOpenaircnRepoBranch
,
Timeout_cmd
)
#The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term
print
"Creating xml file for overall results..."
...
...
cmake_targets/autotests/test_case_list.xml
View file @
a2acf0a9
This source diff could not be displayed because it is too large. You can
view the blob
instead.
common/utils/T/T_messages.txt
View file @
a2acf0a9
...
...
@@ -16,7 +16,7 @@ ID = ENB_PHY_DL_TICK
ID = ENB_PHY_DLSCH_UE_DCI
DESC = eNodeB downlink UE specific DCI as sent by the PHY layer
GROUP = ALL:PHY:GRAPHIC:ENB
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid
: int,mcs : int,TBS
ID = ENB_PHY_DLSCH_UE_ACK
DESC = eNodeB downlink UE ACK as seen by the PHY layer in process_HARQ_feedback
GROUP = ALL:PHY:GRAPHIC:ENB
...
...
@@ -28,7 +28,7 @@ ID = ENB_PHY_DLSCH_UE_NACK
ID = ENB_PHY_ULSCH_UE_DCI
DESC = eNodeB uplink UE specific DCI as sent by the PHY layer
GROUP = ALL:PHY:GRAPHIC:ENB
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
: int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS
ID = ENB_PHY_ULSCH_UE_NO_DCI_RETRANSMISSION
DESC = eNodeB uplink UE retransmission due to PHICH NACK (see generate_phich_top)
GROUP = ALL:PHY:GRAPHIC:ENB
...
...
common/utils/T/tracer/enb.c
View file @
a2acf0a9
This diff is collapsed.
Click to expand it.
common/utils/T/tracer/filter/filter.c
View file @
a2acf0a9
...
...
@@ -13,6 +13,7 @@ struct filter {
}
v
;
int
(
*
eval
)(
struct
filter
*
this
,
event
e
);
void
(
*
free
)(
struct
filter
*
this
);
};
/****************************************************************************/
...
...
@@ -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
)
...
...
@@ -60,6 +77,7 @@ filter *filter_and(filter *a, filter *b)
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
if
(
ret
==
NULL
)
abort
();
ret
->
eval
=
eval_and
;
ret
->
free
=
free_op2
;
ret
->
v
.
op2
.
a
=
a
;
ret
->
v
.
op2
.
b
=
b
;
return
ret
;
...
...
@@ -70,6 +88,7 @@ filter *filter_eq(filter *a, filter *b)
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
if
(
ret
==
NULL
)
abort
();
ret
->
eval
=
eval_eq
;
ret
->
free
=
free_op2
;
ret
->
v
.
op2
.
a
=
a
;
ret
->
v
.
op2
.
b
=
b
;
return
ret
;
...
...
@@ -80,6 +99,7 @@ filter *filter_int(int v)
struct
filter
*
ret
=
calloc
(
1
,
sizeof
(
struct
filter
));
if
(
ret
==
NULL
)
abort
();
ret
->
eval
=
eval_int
;
ret
->
free
=
free_noop
;
ret
->
v
.
v
=
v
;
return
ret
;
}
...
...
@@ -97,6 +117,7 @@ filter *filter_evarg(void *database, char *event_name, char *varname)
f
=
get_format
(
database
,
event_id
);
ret
->
eval
=
eval_evarg
;
ret
->
free
=
free_noop
;
ret
->
v
.
evarg
.
event_type
=
event_id
;
ret
->
v
.
evarg
.
arg_index
=
-
1
;
...
...
@@ -114,6 +135,14 @@ filter *filter_evarg(void *database, char *event_name, char *varname)
return
ret
;
}
void
free_filter
(
filter
*
_f
)
{
struct
filter
*
f
;
if
(
_f
==
NULL
)
return
;
f
=
_f
;
f
->
free
(
f
);
}
/****************************************************************************/
/* eval function */
/****************************************************************************/
...
...
common/utils/T/tracer/filter/filter.h
View file @
a2acf0a9
...
...
@@ -12,4 +12,6 @@ filter *filter_evarg(void *database, char *event_name, char *varname);
int
filter_eval
(
filter
*
f
,
event
e
);
void
free_filter
(
filter
*
f
);
#endif
/* _FILTER_H_ */
common/utils/T/tracer/gui/Makefile
View file @
a2acf0a9
...
...
@@ -2,8 +2,8 @@ CC=gcc
CFLAGS
=
-Wall
-g
-pthread
-I
/usr/include/X11/Xft
-I
/usr/include/freetype2
OBJS
=
init.o loop.o toplevel_window.o x.o container.o widget.o
\
gui.o label.o
event.o xy_plot.o textlist.o notify.o positioner
.o
\
timeline.o space.o image.o
gui.o label.o
textarea.o event.o xy_plot.o textlist.o notify
.o
\
positioner.o
timeline.o space.o image.o
gui.a
:
$(OBJS)
ar cr gui.a
$(OBJS)
...
...
common/utils/T/tracer/gui/gui.h
View file @
a2acf0a9
...
...
@@ -14,6 +14,10 @@ typedef void widget;
#define DEFAULT_FONT 0
/* tic type for XY plot */
#define XY_PLOT_DEFAULT_TICK 0
#define XY_PLOT_SCROLL_TICK 1
/* key modifiers */
#define KEY_SHIFT (1<<0)
#define KEY_CONTROL (1<<1)
...
...
@@ -30,6 +34,7 @@ widget *new_toplevel_window(gui *gui, int width, int height, char *title);
widget
*
new_container
(
gui
*
gui
,
int
vertical
);
widget
*
new_positioner
(
gui
*
gui
);
widget
*
new_label
(
gui
*
gui
,
const
char
*
text
);
widget
*
new_textarea
(
gui
*
gui
,
int
width
,
int
height
,
int
maxsize
);
widget
*
new_xy_plot
(
gui
*
gui
,
int
width
,
int
height
,
char
*
label
,
int
vruler_width
);
widget
*
new_textlist
(
gui
*
gui
,
int
width
,
int
nlines
,
int
background_color
);
...
...
@@ -39,6 +44,9 @@ widget *new_space(gui *gui, int width, int height);
widget
*
new_image
(
gui
*
gui
,
unsigned
char
*
data
,
int
length
);
void
label_set_clickable
(
gui
*
gui
,
widget
*
label
,
int
clickable
);
void
label_set_text
(
gui
*
gui
,
widget
*
label
,
char
*
text
);
void
textarea_set_text
(
gui
*
gui
,
widget
*
textarea
,
char
*
text
);
void
container_set_child_growable
(
gui
*
_gui
,
widget
*
_this
,
widget
*
child
,
int
growable
);
...
...
@@ -49,6 +57,8 @@ void xy_plot_set_range(gui *gui, widget *this,
void
xy_plot_set_points
(
gui
*
gui
,
widget
*
this
,
int
plot
,
int
npoints
,
float
*
x
,
float
*
y
);
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
xy_plot_set_tick_type
(
gui
*
gui
,
widget
*
this
,
int
type
);
void
textlist_add
(
gui
*
gui
,
widget
*
this
,
const
char
*
text
,
int
position
,
int
color
);
...
...
common/utils/T/tracer/gui/gui_defs.h
View file @
a2acf0a9
...
...
@@ -31,7 +31,7 @@ extern int volatile gui_logd;
enum
widget_type
{
TOPLEVEL_WINDOW
,
CONTAINER
,
POSITIONER
,
TEXT_LIST
,
XY_PLOT
,
BUTTON
,
LABEL
,
TIMELINE
,
SPACE
,
IMAGE
T
EXTAREA
,
T
IMELINE
,
SPACE
,
IMAGE
};
struct
widget_list
;
...
...
@@ -117,6 +117,7 @@ struct xy_plot_widget {
int
wanted_height
;
struct
xy_plot_plot
*
plots
;
int
nplots
;
int
tick_type
;
};
struct
timeline_subline
{
...
...
@@ -141,13 +142,24 @@ struct button_widget {
struct
label_widget
{
struct
widget
common
;
c
onst
c
har
*
t
;
char
*
t
;
int
color
;
int
width
;
/* as given by the graphic's backend */
int
height
;
/* as given by the graphic's backend */
int
baseline
;
/* as given by the graphic's backend */
};
struct
textarea_widget
{
struct
widget
common
;
char
*
t
;
int
tmaxsize
;
int
color
;
int
wanted_width
;
int
wanted_height
;
int
baseline
;
/* as given by the graphic's backend */
int
text_width
;
/* as given by the graphic's backend */
};
struct
space_widget
{
struct
widget
common
;
int
wanted_width
;
...
...
common/utils/T/tracer/gui/label.c
View file @
a2acf0a9
...
...
@@ -81,3 +81,21 @@ void label_set_clickable(gui *_g, widget *_this, int clickable)
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/textarea.c
0 → 100644
View file @
a2acf0a9
#include "gui.h"
#include "gui_defs.h"
#include "x.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static
void
paint
(
gui
*
_gui
,
widget
*
_w
)
{
struct
gui
*
g
=
_gui
;
struct
textarea_widget
*
t
=
_w
;
LOGD
(
"PAINT textarea '%s'
\n
"
,
t
->
t
);
x_fill_rectangle
(
g
->
x
,
g
->
xwin
,
BACKGROUND_COLOR
,
t
->
common
.
x
,
t
->
common
.
y
,
t
->
common
.
width
,
t
->
common
.
height
);
x_draw_clipped_string
(
g
->
x
,
g
->
xwin
,
DEFAULT_FONT
,
t
->
color
,
t
->
common
.
x
+
t
->
common
.
width
-
t
->
text_width
,
t
->
common
.
y
+
t
->
baseline
,
t
->
t
,
t
->
common
.
x
,
t
->
common
.
y
,
t
->
common
.
width
,
t
->
common
.
height
);
}
static
void
hints
(
gui
*
_gui
,
widget
*
_w
,
int
*
width
,
int
*
height
)
{
struct
textarea_widget
*
t
=
_w
;
LOGD
(
"HINTS textarea '%s'
\n
"
,
t
->
t
);
*
width
=
t
->
wanted_width
;
*
height
=
t
->
wanted_height
;
}
widget
*
new_textarea
(
gui
*
_gui
,
int
width
,
int
height
,
int
maxsize
)
{
struct
gui
*
g
=
_gui
;
struct
textarea_widget
*
w
;
int
_
;
glock
(
g
);
w
=
new_widget
(
g
,
TEXTAREA
,
sizeof
(
struct
textarea_widget
));
w
->
t
=
calloc
(
maxsize
,
1
);
if
(
w
->
t
==
NULL
)
OOM
;
w
->
tmaxsize
=
maxsize
;
w
->
wanted_width
=
width
;
w
->
wanted_height
=
height
;
w
->
color
=
FOREGROUND_COLOR
;
w
->
text_width
=
0
;
x_text_get_dimensions
(
g
->
x
,
DEFAULT_FONT
,
"jlM"
,
&
_
,
&
_
,
&
w
->
baseline
);
w
->
common
.
paint
=
paint
;
w
->
common
.
hints
=
hints
;
gunlock
(
g
);
return
w
;
}
/*************************************************************************/
/* public functions */
/*************************************************************************/
void
textarea_set_text
(
gui
*
_g
,
widget
*
_this
,
char
*
text
)
{
struct
gui
*
g
=
_g
;
struct
textarea_widget
*
this
=
_this
;
int
_
;
int
len
=
strlen
(
text
);
if
(
len
>=
this
->
tmaxsize
)
{
fprintf
(
stderr
,
"ERROR: string '%s' too big for textarea
\n
"
,
text
);
return
;
}
glock
(
g
);
strcpy
(
this
->
t
,
text
);
x_text_get_dimensions
(
g
->
x
,
DEFAULT_FONT
,
text
,
&
this
->
text_width
,
&
_
,
&
this
->
baseline
);
send_event
(
g
,
DIRTY
,
this
->
common
.
id
);
gunlock
(
g
);
}
common/utils/T/tracer/gui/widget.c
View file @
a2acf0a9
...
...
@@ -265,7 +265,7 @@ void widget_dirty(gui *_gui, widget *_this)
static
const
char
*
names
[]
=
{
"TOPLEVEL_WINDOW"
,
"CONTAINER"
,
"POSITIONER"
,
"TEXT_LIST"
,
"XY_PLOT"
,
"BUTTON"
,
"LABEL"
,
"TIMELINE"
,
"SPACE"
,
"IMAGE"
"XY_PLOT"
,
"BUTTON"
,
"LABEL"
,
"T
EXTAREA"
,
"T
IMELINE"
,
"SPACE"
,
"IMAGE"
};
const
char
*
widget_name
(
enum
widget_type
type
)
{
...
...
@@ -277,6 +277,7 @@ const char *widget_name(enum widget_type type)
case
XY_PLOT
:
case
BUTTON
:
case
LABEL
:
case
TEXTAREA
:
case
TIMELINE
:
case
SPACE
:
case
IMAGE
:
...
...
common/utils/T/tracer/gui/xy_plot.c
View file @
a2acf0a9
This diff is collapsed.
Click to expand it.
common/utils/T/tracer/logger/Makefile
View file @
a2acf0a9
...
...
@@ -2,7 +2,7 @@ CC=gcc
CFLAGS
=
-Wall
-g
-pthread
-I
..
OBJS
=
logger.o textlog.o framelog.o ttilog.o timelog.o ticklog.o iqlog.o
\
iqdotlog.o
iqdotlog.o
ticked_ttilog.o throughputlog.o
logger.a
:
$(OBJS)
ar cr logger.a
$(OBJS)
...
...
common/utils/T/tracer/logger/logger.c
View file @
a2acf0a9
#include "logger.h"
#include "logger_defs.h"
#include "filter/filter.h"
#include <stdlib.h>
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
)
{
struct
logger
*
l
=
_l
;
free_filter
(
l
->
filter
);
l
->
filter
=
filter
;
}
common/utils/T/tracer/logger/logger.h
View file @
a2acf0a9
...
...
@@ -10,6 +10,13 @@ logger *new_textlog(void *event_handler, void *database,
logger
*
new_ttilog
(
void
*
event_handler
,
void
*
database
,
char
*
event_name
,
char
*
frame_varname
,
char
*
subframe_varname
,
char
*
data_varname
,
int
convert_to_dB
);
logger
*
new_ticked_ttilog
(
void
*
event_handler
,
void
*
database
,
char
*
tick_event_name
,
char
*
frame_varname
,
char
*
subframe_varname
,
char
*
event_name
,
char
*
data_varname
,
int
convert_to_dB
,
float
empty_value
);
logger
*
new_throughputlog
(
void
*
event_handler
,
void
*
database
,
char
*
tick_event_name
,
char
*
frame_varname
,
char
*
subframe_varname
,
char
*
event_name
,
char
*
data_varname
);
logger
*
new_timelog
(
void
*
event_handler
,
void
*
database
,
char
*
event_name
);
logger
*
new_ticklog
(
void
*
event_handler
,
void
*
database
,
char
*
event_name
,
char
*
frame_name
,
char
*
subframe_name
);
...
...
@@ -28,5 +35,6 @@ void textlog_dump_buffer(logger *_this, int dump_buffer);
void
logger_add_view
(
logger
*
l
,
view
*
v
);
void
logger_set_filter
(
logger
*
l
,
void
*
filter
);
void
ticked_ttilog_set_tick_filter
(
logger
*
l
,
void
*
filter
);
#endif
/* _LOGGER_H_ */
common/utils/T/tracer/logger/throughputlog.c
0 → 100644
View file @
a2acf0a9
#include "logger.h"
#include "logger_defs.h"
#include "event.h"
#include "database.h"
#include "handler.h"
#include "filter/filter.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
struct
throughputlog
{
struct
logger
common
;
void
*
database
;
int
tick_frame_arg
;
int
tick_subframe_arg
;
int
data_frame_arg
;
int
data_subframe_arg
;
int
data_arg
;
int
last_tick_frame
;
int
last_tick_subframe
;
unsigned
long
bits
[
1000
];
unsigned
long
total
;
int
insert_point
;
char
*
tick_event_name
;
unsigned
long
tick_handler_id
;
/* tick filter - NULL is no filter set */
void
*
tick_filter
;
};
static
void
_event
(
void
*
p
,
event
e
)
{
struct
throughputlog
*
l
=
p
;
int
frame
;
int
subframe
;
unsigned
long
value
;
if
(
l
->
common
.
filter
!=
NULL
&&
filter_eval
(
l
->
common
.
filter
,
e
)
==
0
)
return
;
frame
=
e
.
e
[
l
->
data_frame_arg
].
i
;
subframe
=
e
.
e
[
l
->
data_subframe_arg
].
i
;
if
(
frame
!=
l
->
last_tick_frame
||
subframe
!=
l
->
last_tick_subframe
)
{
printf
(
"WARNING: %s:%d: data comes without previous tick!
\n
"
,
__FILE__
,
__LINE__
);
return
;
}
switch
(
e
.
e
[
l
->
data_arg
].
type
)
{
case
EVENT_INT
:
value
=
e
.
e
[
l
->
data_arg
].
i
;
break
;
case
EVENT_ULONG
:
value
=
e
.
e
[
l
->
data_arg
].
ul
;
break
;
default:
printf
(
"%s:%d: unsupported type
\n
"
,
__FILE__
,
__LINE__
);
abort
();
}
l
->
total
+=
value
;
l
->
bits
[
l
->
insert_point
]
+=
value
;
}
static
void
_tick_event
(
void
*
p
,
event
e
)
{
struct
throughputlog
*
l
=
p
;
int
i
;
int
frame
;
int
subframe
;
if
(
l
->
tick_filter
!=
NULL
&&
filter_eval
(
l
->
tick_filter
,
e
)
==
0
)
return
;
frame
=
e
.
e
[
l
->
tick_frame_arg
].
i
;
subframe
=
e
.
e
[
l
->
tick_subframe_arg
].
i
;
for
(
i
=
0
;
i
<
l
->
common
.
vsize
;
i
++
)
l
->
common
.
v
[
i
]
->
append
(
l
->
common
.
v
[
i
],
frame
,
subframe
,
(
double
)
l
->
total
);
l
->
insert_point
=
(
l
->
insert_point
+
1
)
%
1000
;
l
->
total
-=
l
->
bits
[
l
->
insert_point
];
l
->
bits
[
l
->
insert_point
]
=
0
;
l
->
last_tick_frame
=
frame
;
l
->
last_tick_subframe
=
subframe
;
}
logger
*
new_throughputlog
(
event_handler
*
h
,
void
*
database
,
char
*
tick_event_name
,
char
*
frame_varname
,
char
*
subframe_varname
,
char
*
event_name
,
char
*
data_varname
)
{
struct
throughputlog
*
ret
;
int
event_id
;
database_event_format
f
;
int
i
;
ret
=
calloc
(
1
,
sizeof
(
struct
throughputlog
));
if
(
ret
==
NULL
)
abort
();
ret
->
common
.
event_name
=
strdup
(
event_name
);
if
(
ret
->
common
.
event_name
==
NULL
)
abort
();
ret
->
database
=
database
;
ret
->
tick_event_name
=
strdup
(
tick_event_name
);
if
(
ret
->
tick_event_name
==
NULL
)
abort
();
/* tick event */
event_id
=
event_id_from_name
(
database
,
tick_event_name
);
ret
->
tick_handler_id
=
register_handler_function
(
h
,
event_id
,
_tick_event
,
ret
);
f
=
get_format
(
database
,
event_id
);
/* look for frame and subframe */
ret
->
tick_frame_arg
=
-
1
;
ret
->
tick_subframe_arg
=
-
1
;
for
(
i
=
0
;
i
<
f
.
count
;
i
++
)
{
if
(
!
strcmp
(
f
.
name
[
i
],
frame_varname
))
ret
->
tick_frame_arg
=
i
;
if
(
!
strcmp
(
f
.
name
[
i
],
subframe_varname
))
ret
->
tick_subframe_arg
=
i
;
}
if
(
ret
->
tick_frame_arg
==
-
1
)
{
printf
(
"%s:%d: frame argument '%s' not found in event '%s'
\n
"
,
__FILE__
,
__LINE__
,
frame_varname
,
event_name
);
abort
();
}
if
(
ret
->
tick_subframe_arg
==
-
1
)
{
printf
(
"%s:%d: subframe argument '%s' not found in event '%s'
\n
"
,
__FILE__
,
__LINE__
,
subframe_varname
,
event_name
);
abort
();
}
if
(
strcmp
(
f
.
type
[
ret
->
tick_frame_arg
],
"int"
)
!=
0
)
{
printf
(
"%s:%d: argument '%s' has wrong type (should be 'int')
\n
"
,
__FILE__
,
__LINE__
,
frame_varname
);
abort
();
}
if
(
strcmp
(
f
.
type
[
ret
->
tick_subframe_arg
],
"int"
)
!=
0
)
{
printf
(
"%s:%d: argument '%s' has wrong type (should be 'int')
\n
"
,
__FILE__
,
__LINE__
,
subframe_varname
);
abort
();
}
/* data event */
event_id
=
event_id_from_name
(
database
,
event_name
);