Merge remote-tracking branch 'origin/develop' into feature-68-enb-agent
This commit is contained in:
@@ -29,15 +29,15 @@ typedef struct {
|
||||
#define T_SHM_FILENAME "/T_shm_segment"
|
||||
|
||||
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
||||
#define VCD_NUM_FUNCTIONS 146
|
||||
#define VCD_NUM_FUNCTIONS 142
|
||||
|
||||
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
|
||||
#define VCD_NUM_VARIABLES 99
|
||||
#define VCD_NUM_VARIABLES 107
|
||||
|
||||
/* first VCD function (to be kept up to date! see in T_messages.txt) */
|
||||
#define VCD_FIRST_FUNCTION ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)
|
||||
|
||||
/* first VCD variable (to be kept up to date! see in T_messages.txt) */
|
||||
#define VCD_FIRST_VARIABLE ((uintptr_t)T_VCD_VARIABLE_FRAME_NUMBER_TX_ENB)
|
||||
#define VCD_FIRST_VARIABLE ((uintptr_t)T_VCD_VARIABLE_FRAME_NUMBER_TX0_ENB)
|
||||
|
||||
#endif /* _T_defs_H_ */
|
||||
|
||||
+110
-94
@@ -806,12 +806,36 @@ ID = buf_test
|
||||
|
||||
#variables
|
||||
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_TX_ENB
|
||||
DESC = VCD variable FRAME_NUMBER_TX_ENB
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_TX0_ENB
|
||||
DESC = VCD variable FRAME_NUMBER_TX0_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_RX_ENB
|
||||
DESC = VCD variable FRAME_NUMBER_RX_ENB
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_TX1_ENB
|
||||
DESC = VCD variable FRAME_NUMBER_TX1_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_RX0_ENB
|
||||
DESC = VCD variable FRAME_NUMBER_RX0_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_RX1_ENB
|
||||
DESC = VCD variable FRAME_NUMBER_RX1_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_ENB
|
||||
DESC = VCD variable SUBFRAME_NUMBER_TX0_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_ENB
|
||||
DESC = VCD variable SUBFRAME_NUMBER_TX1_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_ENB
|
||||
DESC = VCD variable SUBFRAME_NUMBER_RX0_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB
|
||||
DESC = VCD variable SUBFRAME_NUMBER_RX1_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_RUNTIME_TX_ENB
|
||||
@@ -822,28 +846,36 @@ ID = VCD_VARIABLE_RUNTIME_RX_ENB
|
||||
DESC = VCD variable RUNTIME_RX_ENB
|
||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_TX_UE
|
||||
DESC = VCD variable FRAME_NUMBER_TX_UE
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_TX0_UE
|
||||
DESC = VCD variable FRAME_NUMBER_TX0_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_RX_UE
|
||||
DESC = VCD variable FRAME_NUMBER_RX_UE
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_TX1_UE
|
||||
DESC = VCD variable FRAME_NUMBER_TX1_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SLOT_NUMBER_TX_UE
|
||||
DESC = VCD variable SLOT_NUMBER_TX_UE
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_RX0_UE
|
||||
DESC = VCD variable FRAME_NUMBER_RX0_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SLOT_NUMBER_RX_UE
|
||||
DESC = VCD variable SLOT_NUMBER_RX_UE
|
||||
ID = VCD_VARIABLE_FRAME_NUMBER_RX1_UE
|
||||
DESC = VCD variable FRAME_NUMBER_RX1_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX_UE
|
||||
DESC = VCD variable SUBFRAME_NUMBER_TX_UE
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_UE
|
||||
DESC = VCD variable SUBFRAME_NUMBER_TX0_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX_UE
|
||||
DESC = VCD variable SUBFRAME_NUMBER_RX_UE
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_UE
|
||||
DESC = VCD variable SUBFRAME_NUMBER_TX1_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_UE
|
||||
DESC = VCD variable SUBFRAME_NUMBER_RX0_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE
|
||||
DESC = VCD variable SUBFRAME_NUMBER_RX1_UE
|
||||
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||
FORMAT = ulong,value
|
||||
ID = VCD_VARIABLE_MISSED_SLOTS_ENB
|
||||
@@ -1217,92 +1249,32 @@ ID = VCD_FUNCTION_TRX_WRITE
|
||||
DESC = VCD function TRX_WRITE
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX0
|
||||
DESC = VCD function eNB_PROC_TX0
|
||||
ID = VCD_FUNCTION_TRX_READ_IF
|
||||
DESC = VCD function TRX_READ_IF
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX0
|
||||
DESC = VCD function eNB_PROC_RX0
|
||||
ID = VCD_FUNCTION_TRX_WRITE_IF
|
||||
DESC = VCD function TRX_WRITE_IF
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX1
|
||||
DESC = VCD function eNB_PROC_TX1
|
||||
ID = VCD_FUNCTION_eNB_PROC_RXTX0
|
||||
DESC = VCD function eNB_PROC_RXTX0
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX1
|
||||
DESC = VCD function eNB_PROC_RX1
|
||||
ID = VCD_FUNCTION_eNB_PROC_RXTX1
|
||||
DESC = VCD function eNB_PROC_RXTX1
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX2
|
||||
DESC = VCD function eNB_PROC_TX2
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX2
|
||||
DESC = VCD function eNB_PROC_RX2
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX3
|
||||
DESC = VCD function eNB_PROC_TX3
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX3
|
||||
DESC = VCD function eNB_PROC_RX3
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX4
|
||||
DESC = VCD function eNB_PROC_TX4
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX4
|
||||
DESC = VCD function eNB_PROC_RX4
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX5
|
||||
DESC = VCD function eNB_PROC_TX5
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX5
|
||||
DESC = VCD function eNB_PROC_RX5
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX6
|
||||
DESC = VCD function eNB_PROC_TX6
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX6
|
||||
DESC = VCD function eNB_PROC_RX6
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX7
|
||||
DESC = VCD function eNB_PROC_TX7
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX7
|
||||
DESC = VCD function eNB_PROC_RX7
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX8
|
||||
DESC = VCD function eNB_PROC_TX8
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX8
|
||||
DESC = VCD function eNB_PROC_RX8
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_TX9
|
||||
DESC = VCD function eNB_PROC_TX9
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_PROC_RX9
|
||||
DESC = VCD function eNB_PROC_RX9
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_UE_THREAD_TX
|
||||
DESC = VCD function UE_THREAD_TX
|
||||
ID = VCD_FUNCTION_UE_THREAD_SYNCH
|
||||
DESC = VCD function UE_THREAD_SYNCH
|
||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_UE_THREAD_RX
|
||||
DESC = VCD function UE_THREAD_RX
|
||||
ID = VCD_FUNCTION_UE_THREAD_RXTX0
|
||||
DESC = VCD function UE_THREAD_RXTX0
|
||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_UE_THREAD_RXTX1
|
||||
DESC = VCD function UE_THREAD_RXTX1
|
||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_eNB_TX
|
||||
@@ -1377,8 +1349,28 @@ ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_TX
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_RX
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_TX1
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_COMMON
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_RX_COMMON
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_COMMON1
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_RX_COMMON1
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC1
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_SLOT_FEP
|
||||
DESC = VCD function PHY_PROCEDURES_ENB_SLOT_FEP
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX
|
||||
@@ -1573,6 +1565,10 @@ ID = VCD_FUNCTION_ENB_DLSCH_ENCODING
|
||||
DESC = VCD function ENB_DLSCH_ENCODING
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_ENB_DLSCH_ENCODING_W
|
||||
DESC = VCD function ENB_DLSCH_ENCODING_W
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_ENB_DLSCH_SCRAMBLING
|
||||
DESC = VCD function ENB_DLSCH_SCRAMBLING
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
@@ -1645,6 +1641,10 @@ ID = VCD_FUNCTION_UE_DECODE_SI
|
||||
DESC = VCD function UE_DECODE_SI
|
||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_UE_DECODE_PCCH
|
||||
DESC = VCD function UE_DECODE_PCCH
|
||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_UE_DECODE_CCCH
|
||||
DESC = VCD function UE_DECODE_CCCH
|
||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||
@@ -1789,3 +1789,19 @@ ID = VCD_FUNCTION_TEST
|
||||
DESC = VCD function TEST
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_SEND_IF4
|
||||
DESC = VCD function SEND_IF4
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_RECV_IF4
|
||||
DESC = VCD function RECV_IF4
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_SEND_IF5
|
||||
DESC = VCD function SEND_IF5
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
ID = VCD_FUNCTION_RECV_IF5
|
||||
DESC = VCD function RECV_IF5
|
||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||
FORMAT = int,value
|
||||
|
||||
@@ -3,16 +3,23 @@ CFLAGS=-Wall -g -pthread -DT_TRACER -I. -I..
|
||||
|
||||
LIBS=-lX11 -lm -lpng -lXft
|
||||
|
||||
all: dump_nack_signal
|
||||
all: dump_nack_signal time_meas timeplot
|
||||
|
||||
dump_nack_signal: ../utils.o ../database.o ../config.o ../event.o \
|
||||
dump_nack_signal.o
|
||||
$(CC) $(CFLAGS) -o dump_nack_signal $^ $(LIBS)
|
||||
|
||||
time_meas: ../utils.o ../database.o ../config.o ../event.o \
|
||||
time_meas.o
|
||||
$(CC) $(CFLAGS) -o time_meas $^ $(LIBS)
|
||||
|
||||
timplot: timeplot.o
|
||||
$(CC) $(CFLAGS) -o timeplot $^ $(LIBS)
|
||||
|
||||
.PHONY: all
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -f *.o core dump_nack_signal
|
||||
rm -f *.o core dump_nack_signal time_meas timeplot
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "utils.h"
|
||||
#include "event.h"
|
||||
#include "database.h"
|
||||
#include "config.h"
|
||||
#include "../T_defs.h"
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
printf(
|
||||
"options:\n"
|
||||
" -d <database file> this option is mandatory\n"
|
||||
" -ip <host> connect to given IP address (default %s)\n"
|
||||
" -p <port> connect to given port (default %d)\n",
|
||||
DEFAULT_REMOTE_IP,
|
||||
DEFAULT_REMOTE_PORT
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
struct timespec time_sub(struct timespec a, struct timespec b)
|
||||
{
|
||||
struct timespec ret;
|
||||
if (a.tv_nsec < b.tv_nsec) {
|
||||
ret.tv_nsec = (int64_t)a.tv_nsec - (int64_t)b.tv_nsec + 1000000000;
|
||||
ret.tv_sec = a.tv_sec - b.tv_sec - 1;
|
||||
} else {
|
||||
ret.tv_nsec = a.tv_nsec - b.tv_nsec;
|
||||
ret.tv_sec = a.tv_sec - b.tv_sec;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main(int n, char **v)
|
||||
{
|
||||
char *database_filename = NULL;
|
||||
void *database;
|
||||
char *ip = DEFAULT_REMOTE_IP;
|
||||
int port = DEFAULT_REMOTE_PORT;
|
||||
int i;
|
||||
char t;
|
||||
int number_of_events;
|
||||
int socket;
|
||||
int *is_on;
|
||||
int ev_fun;
|
||||
int start_valid = 0;
|
||||
struct timespec start_time, stop_time, delta_time;
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
||||
if (!strcmp(v[i], "-d"))
|
||||
{ if (i > n-2) usage(); database_filename = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
|
||||
if (!strcmp(v[i], "-p"))
|
||||
{ if (i > n-2) usage(); port = atoi(v[++i]); continue; }
|
||||
usage();
|
||||
}
|
||||
|
||||
if (database_filename == NULL) {
|
||||
printf("ERROR: provide a database file (-d)\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
database = parse_database(database_filename);
|
||||
|
||||
load_config_file(database_filename);
|
||||
|
||||
number_of_events = number_of_ids(database);
|
||||
is_on = calloc(number_of_events, sizeof(int));
|
||||
if (is_on == NULL) abort();
|
||||
|
||||
on_off(database, "VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER", is_on, 1);
|
||||
|
||||
ev_fun = event_id_from_name(database,
|
||||
"VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER");
|
||||
|
||||
socket = connect_to(ip, port);
|
||||
|
||||
t = 1;
|
||||
if (socket_send(socket, &t, 1) == -1 ||
|
||||
socket_send(socket, &number_of_events, sizeof(int)) == -1 ||
|
||||
socket_send(socket, is_on, number_of_events * sizeof(int)) == -1)
|
||||
abort();
|
||||
|
||||
while (1) {
|
||||
char v[T_BUFFER_MAX];
|
||||
event e;
|
||||
int on_off;
|
||||
e = get_event(socket, v, database);
|
||||
if (e.type == -1) break;
|
||||
if (e.type != ev_fun)
|
||||
{ printf("unhandled event %d\n", e.type); continue; }
|
||||
on_off = e.e[0].i;
|
||||
printf("yo %d\n", on_off);
|
||||
if (on_off == 1) {
|
||||
start_time = e.sending_time;
|
||||
start_valid = 1;
|
||||
continue;
|
||||
}
|
||||
if (on_off != 0) { printf("fatal!\n"); abort(); }
|
||||
if (!start_valid) continue;
|
||||
stop_time = e.sending_time;
|
||||
delta_time = time_sub(stop_time, start_time);
|
||||
fprintf(stderr, "%ld\n",
|
||||
delta_time.tv_sec * 1000000000UL + delta_time.tv_nsec);
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
void RESET(void)
|
||||
{ printf("\x1b""c"); fflush(stdout); }
|
||||
|
||||
void GOTO(int x, int y)
|
||||
{ char s[64];sprintf(s,"\x1b[%d;%dH",y,x);printf("%s",s);fflush(stdout); }
|
||||
|
||||
void HIDE_CURSOR(void)
|
||||
{ printf("\x1b[?25l"); fflush(stdout); }
|
||||
|
||||
void sig(int x)
|
||||
{
|
||||
RESET();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* 0: [0-2[
|
||||
* ...
|
||||
* 48: [96-98[
|
||||
* 49: [98-infinity]
|
||||
*/
|
||||
int bins[50];
|
||||
|
||||
#define N 1000
|
||||
int data[N];
|
||||
|
||||
void plot(void)
|
||||
{
|
||||
int i;
|
||||
int max = 0;
|
||||
int vmin = data[0];
|
||||
int vmax = 0;
|
||||
long vavg;
|
||||
memset(bins, 0, sizeof(bins));
|
||||
int binsize_ns = 500;
|
||||
|
||||
vavg = 0;
|
||||
|
||||
for (i = 0; i < N; i++) {
|
||||
if (data[i] < vmin) vmin = data[i];
|
||||
if (data[i] > vmax) vmax = data[i];
|
||||
vavg += data[i];
|
||||
int ms2 = data[i]/binsize_ns;
|
||||
if (ms2 > 49) ms2 = 49;
|
||||
bins[ms2]++;
|
||||
if (bins[ms2] > max) max = bins[ms2];
|
||||
}
|
||||
|
||||
vavg /= N;
|
||||
|
||||
GOTO(1,1);
|
||||
for (i = 0; i < 50; i++) {
|
||||
double binend = (i+1) * binsize_ns / 1000.;
|
||||
int k;
|
||||
int width = bins[i] * 70 / max;
|
||||
/* force at least width of 1 if some point is there */
|
||||
if (bins[i] && width == 0) width = 1;
|
||||
printf("%#5.1f ", binend);
|
||||
for (k = 0; k < width; k++) putchar('#');
|
||||
for (; k < 70; k++) putchar(' ');
|
||||
putchar('\n');
|
||||
}
|
||||
printf("min %d ns max %d ns avg %ld ns\n", vmin, vmax, vavg);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int i;
|
||||
int pos = 0;
|
||||
signal(SIGINT, sig);
|
||||
RESET();
|
||||
HIDE_CURSOR();
|
||||
while (!feof(stdin)) {
|
||||
for (i=0; i<100; i++) { scanf("%d", &data[pos]); pos++; pos%=N; }
|
||||
plot();
|
||||
}
|
||||
RESET();
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user