diff --git a/sw/logalizer/Makefile b/sw/logalizer/Makefile index 1f6ce1504c..324522929e 100644 --- a/sw/logalizer/Makefile +++ b/sw/logalizer/Makefile @@ -29,5 +29,11 @@ all: play play : play.ml $(OCAMLC) $(INCLUDES) -custom -o $@ unix.cma str.cma xml-light.cma glibivy-ocaml.cma -I +lablgtk2 -I ../lib/ocaml lablgtk.cma lib-pprz.cma gtkInit.cmo $^ +CC = gcc +CFLAGS=-g -O2 -Wall `pkg-config gtk+-2.0 --cflags` +LDFLAGS=`pkg-config gtk+-2.0 --libs` -s -lgtkdatabox `pcre-config --libs` -lglibivy +ahrsview : ahrsview.c + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + clean: - rm -f *.opt *.out *~ core *.o *.bak .depend *.cm* play + rm -f *.opt *.out *~ core *.o *.bak .depend *.cm* play ahrsview diff --git a/sw/logalizer/ahrsview.c b/sw/logalizer/ahrsview.c new file mode 100644 index 0000000000..93ba89c4de --- /dev/null +++ b/sw/logalizer/ahrsview.c @@ -0,0 +1,111 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define NB_POINTS 2000 + +GtkWidget* databox; +static gfloat *X; +static gfloat *BX; +static gfloat *BY; +static gfloat *BZ; +static guint nb_data; + +GtkWidget* plot_frame_new(void) { + databox = gtk_databox_new (); + + X = g_new0 (gfloat, NB_POINTS); + BX = g_new0 (gfloat, NB_POINTS); + BY = g_new0 (gfloat, NB_POINTS); + BZ = g_new0 (gfloat, NB_POINTS); + + GdkColor color; + color.red = 0; + color.green = 0; + color.blue = 0; + GtkDataboxGraph* grid = gtk_databox_grid_new (7, 7, &color, 2); + gtk_databox_graph_add (GTK_DATABOX (databox), grid); + + color.red = 0; + color.green = 65535; + color.blue = 0; + GtkDataboxGraph *graph_bx = gtk_databox_lines_new (NB_POINTS, X, BX, &color, 1); + gtk_databox_graph_add (GTK_DATABOX (databox), graph_bx); + + color.red = 65535; + color.green = 0; + color.blue = 0; + GtkDataboxGraph *graph_by = gtk_databox_lines_new(NB_POINTS, X, BY, &color, 1); + gtk_databox_graph_add (GTK_DATABOX (databox), graph_by); + + color.red = 0; + color.green = 0; + color.blue = 65535; + GtkDataboxGraph *graph_bz = gtk_databox_lines_new(NB_POINTS, X, BZ, &color, 1); + gtk_databox_graph_add (GTK_DATABOX (databox), graph_bz); + + nb_data = 0; + + return databox; + +} + +void update_state_plot(float q0, float q1, float q2, float q3, float bx, float by, float bz) { + if (nb_data < NB_POINTS) { + X[nb_data] = nb_data; + BX[nb_data] = bx; + BY[nb_data] = by; + BZ[nb_data] = bz; + gtk_databox_auto_rescale (GTK_DATABOX (databox), 0.); + nb_data++; + } +} + + +void on_AHRS_STATE(IvyClientPtr app, void *user_data, int argc, char *argv[]){ + float q0 = atof(argv[0]); + float q1 = atof(argv[1]); + float q2 = atof(argv[2]); + float q3 = atof(argv[3]); + float bx = atof(argv[4]); + float by = atof(argv[5]); + float bz = atof(argv[6]); + update_state_plot(q0, q1, q2, q3, bx, by, bz); + + +} + +int main (int argc, char** argv) { + + gtk_init(&argc, &argv); + + GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (window, 1240, 600); + + GtkWidget *vbox1 = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (window), vbox1); + gtk_box_pack_start (GTK_BOX (vbox1), plot_frame_new(), TRUE, TRUE, 0); + + gtk_widget_show_all(window); + + + IvyInit ("IvyGtkButton", "IvyGtkButton READY", NULL, NULL, NULL, NULL); + IvyBindMsg(on_AHRS_STATE, NULL, "^77 AHRS (\\S*) (\\S*) (\\S*) (\\S*) (\\S*) (\\S*) (\\S*)"); + //IvyBindMsg(on_AHRS_STATE, NULL, "^77 AHRS (.*)"); + IvyStart("127.255.255.255"); + + gtk_main(); + return 0; +}