Skip to content
Snippets Groups Projects
Commit 0f0fa90d authored by Cédric Roux's avatar Cédric Roux
Browse files

xy view to exist in two flavours

XY_LOOP_MODE: replace old points with new ones, using the maximum size
              of the view
XY_FORCE_MODE: append_forced sets those and only those points
               and we crash if we pass too much points
parent 8e458d9c
No related branches found
No related tags found
No related merge requests found
......@@ -132,7 +132,7 @@ static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
*/
framelog_set_skip(input_signal_log, 10);
input_signal_view = new_view_xy(7680*10, 10,
g, input_signal_plot, new_color(g, "#0c0c72"));
g, input_signal_plot, new_color(g, "#0c0c72"), XY_LOOP_MODE);
logger_add_view(input_signal_log, input_signal_view);
/* downlink/uplink UE DCIs */
......
......@@ -11,10 +11,12 @@ typedef struct view {
void (*set)(struct view *this, char *name, ...);
} view;
enum xy_mode { XY_LOOP_MODE, XY_FORCED_MODE };
view *new_view_stdout(void);
view *new_view_textlist(int maxsize, float refresh_rate, gui *g, widget *w);
view *new_view_xy(int length, float refresh_rate, gui *g, widget *w,
int color);
int color, enum xy_mode mode);
view *new_view_tti(float refresh_rate, gui *g, widget *w,
int color);
view *new_view_time(int number_of_seconds, float refresh_rate,
......
......@@ -14,6 +14,7 @@ struct xy {
float refresh_rate;
pthread_mutex_t lock;
int length;
int max_length; /* used in XY_FORCED_MODE */
float *x;
float *y;
int insert_point;
......@@ -39,7 +40,7 @@ static void clear(view *this)
/* TODO */
}
static void append(view *_this, float *x, float *y, int length)
static void append_loop(view *_this, float *x, float *y, int length)
{
struct xy *this = (struct xy *)_this;
int i;
......@@ -61,6 +62,25 @@ static void append(view *_this, float *x, float *y, int length)
if (pthread_mutex_unlock(&this->lock)) abort();
}
static void append_forced(view *_this, float *x, float *y, int length)
{
struct xy *this = (struct xy *)_this;
if (length > this->max_length) {
printf("%s:%d:%s: bad length (%d), max allowed is %d\n",
__FILE__, __LINE__, __FUNCTION__, length, this->max_length);
abort();
}
if (pthread_mutex_lock(&this->lock)) abort();
memcpy(this->x, x, length * sizeof(float));
memcpy(this->y, y, length * sizeof(float));
this->length = length;
if (pthread_mutex_unlock(&this->lock)) abort();
}
static void set(view *_this, char *name, ...)
{
struct xy *this = (struct xy *)_this;
......@@ -89,24 +109,35 @@ static void set(view *_this, char *name, ...)
}
view *new_view_xy(int length, float refresh_rate, gui *g, widget *w,
int color)
int color, enum xy_mode mode)
{
struct xy *ret = calloc(1, sizeof(struct xy));
if (ret == NULL) abort();
ret->common.clear = clear;
ret->common.append = (void (*)(view *, ...))append;
ret->common.set = set;
switch (mode) {
case XY_LOOP_MODE:
ret->common.append = (void (*)(view *, ...))append_loop;
ret->common.set = set;
ret->length = length;
ret->insert_point = 0;
break;
case XY_FORCED_MODE:
ret->common.append = (void (*)(view *, ...))append_forced;
ret->common.set = NULL;
ret->length = 0;
ret->max_length = length;
break;
}
ret->refresh_rate = refresh_rate;
ret->g = g;
ret->w = w;
ret->plot = xy_plot_new_plot(g, w, color);
ret->length = length;
ret->x = calloc(length, sizeof(float)); if (ret->x == NULL) abort();
ret->y = calloc(length, sizeof(float)); if (ret->y == NULL) abort();
ret->insert_point = 0;
if (pthread_mutex_init(&ret->lock, NULL)) abort();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment