From 2eae268e069f62f722dc68302e90cbeb5c39d765 Mon Sep 17 00:00:00 2001 From: Aaron Mueller Date: Tue, 27 Dec 2011 18:47:35 +0100 Subject: [PATCH 1/3] The sourcecode only compiles with gcc 4.4, reason unknown --- editor/Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/editor/Makefile b/editor/Makefile index 993fc85..7b797c2 100644 --- a/editor/Makefile +++ b/editor/Makefile @@ -1,13 +1,12 @@ -CC=gcc +CC=gcc-4.4 CFLAGS=-Wall -LINKER_FLAGS=-lglut -export-dynamic +LINKER_FLAGS=-lglut -lGL -lGLU -export-dynamic GTKLIBS=`pkg-config --cflags --libs gtk+-2.0 gtkglext-1.0 libglade-2.0 gmodule-export-2.0` SRCDIR=src all: $(CC) $(CFLAGS) $(GTKLIBS) -c $(SRCDIR)/display.c $(CC) $(CFLAGS) $(GTKLIBS) -c $(SRCDIR)/input.c - $(CC) $(CFLAGS) $(GTKLIBS) -c $(SRCDIR)/usb.c $(CC) $(CFLAGS) $(GTKLIBS) -c $(SRCDIR)/main.c $(CC) $(CFLAGS) $(LINKER_FLAGS) $(GTKLIBS) -o ledcube-edit main.o display.o input.o From 68a5c1a85106bc1cd9123d58f06bd1ec77c7a782 Mon Sep 17 00:00:00 2001 From: Aaron Mueller Date: Tue, 27 Dec 2011 18:48:15 +0100 Subject: [PATCH 2/3] Refactor the datatypes to the GTK ones (for compability) --- editor/src/config.h | 22 ++++++++++------------ editor/src/display.c | 8 ++++---- editor/src/display.h | 2 +- editor/src/event_callbacks.c | 2 +- editor/src/input.c | 14 +++++++------- editor/src/input.h | 6 +++--- editor/src/main.c | 24 +++++++++++------------- 7 files changed, 37 insertions(+), 41 deletions(-) diff --git a/editor/src/config.h b/editor/src/config.h index 54a79f0..44f40b3 100644 --- a/editor/src/config.h +++ b/editor/src/config.h @@ -8,8 +8,6 @@ #define MOVE_SPEED 7 #define ZOOM_LEVEL 25 -#define PI 3.1415926535897932 - // Poor Man's enums #define TOP_ORIENTATION 0x01 #define SIDE_ORIENTATION 0x02 @@ -18,16 +16,16 @@ #define PICKING_MODE 0x02 // Materials -extern float ledOnMaterial[]; -extern float ledOffMaterial[]; -extern float wireMaterial[]; -extern float innerWireMaterial[]; -extern float backgroundColor[]; +extern gfloat ledOnMaterial[]; +extern gfloat ledOffMaterial[]; +extern gfloat wireMaterial[]; +extern gfloat innerWireMaterial[]; +extern gfloat backgroundColor[]; // Movement -extern float lookX, lookZ; -extern float eyePos, eyeAngle; -extern int ledOrientation; +extern gfloat lookX, lookZ; +extern gfloat eyePos, eyeAngle; +extern gint ledOrientation; // Objects extern GLUquadricObj *quadric; @@ -36,10 +34,10 @@ extern GdkGLWindow *glWindow; extern GdkGLContext *glContext; // Dimensions, positions -extern float light0Pos[]; +extern gfloat light0Pos[]; // LED data -extern int currentFrame[27]; +extern gint currentFrame[27]; #endif diff --git a/editor/src/display.c b/editor/src/display.c index a086ac4..3e6b56b 100644 --- a/editor/src/display.c +++ b/editor/src/display.c @@ -8,9 +8,9 @@ #include "display.h" -void drawLEDs(int mode) { - int x, y, z; - int ledIndex = 0; +void drawLEDs(gint mode) { + gint x, y, z; + gint ledIndex = 0; if (ledOrientation == TOP_ORIENTATION) { glRotatef(90, 2, 0, 0); @@ -44,7 +44,7 @@ void drawLEDs(int mode) { } void drawWires() { - int x, y; + gint x, y; for (y=-10; y<=10; y+=10) for (x=-10; x<=10; x+=10) { glMaterialfv(GL_FRONT, GL_AMBIENT, ((x == 0 || y == 0) ? innerWireMaterial : wireMaterial)); diff --git a/editor/src/display.h b/editor/src/display.h index d6236fb..4af3c5d 100644 --- a/editor/src/display.h +++ b/editor/src/display.h @@ -1,7 +1,7 @@ #ifndef _DISPLAY_H #define _DISPLAY_H -void drawLEDs(int mode); +void drawLEDs(gint mode); void drawWires(); void display(gboolean onlyForPicking); diff --git a/editor/src/event_callbacks.c b/editor/src/event_callbacks.c index 2f389a7..cfe49cc 100644 --- a/editor/src/event_callbacks.c +++ b/editor/src/event_callbacks.c @@ -59,7 +59,7 @@ void on_drawing_area_button_press_event(GtkWidget *widget, gpointer data) { if (!gdk_gl_drawable_gl_begin(glDrawable, glContext)) return; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - + display(TRUE); mouse(x, y); diff --git a/editor/src/input.c b/editor/src/input.c index 7a0286c..2b58f91 100644 --- a/editor/src/input.c +++ b/editor/src/input.c @@ -9,27 +9,27 @@ #include "display.h" -void moveCameraPosition(float direction) { +void moveCameraPosition(gfloat direction) { eyePos += direction; if (eyePos > 360.0) eyePos = 0.0; - lookX = sin(eyePos * PI/180.0)*70.0; - lookZ = cos(eyePos * PI/180.0)*70.0; + lookX = sin(eyePos * M_PI/180.0)*70.0; + lookZ = cos(eyePos * M_PI/180.0)*70.0; } -void moveCameraAngle(float angle) { +void moveCameraAngle(gfloat angle) { eyeAngle += angle; if (eyeAngle > 120) eyeAngle = 120; if (eyeAngle < 0) eyeAngle = 0; } -void mouse(int x, int y) { - int position, viewport[4]; +void mouse(gint x, gint y) { + gint position, viewport[4]; GLubyte pixel[3]; glGetIntegerv(GL_VIEWPORT, viewport); glReadPixels(x, viewport[3]-y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, (void*)pixel); - position = ((int)pixel[2]/8)-1; // Selected LED + position = ((gint)pixel[2]/8)-1; // Selected LED printf("%d\n", position); currentFrame[position] = currentFrame[position] == 0 ? 1 : 0; diff --git a/editor/src/input.h b/editor/src/input.h index d010515..b1af947 100644 --- a/editor/src/input.h +++ b/editor/src/input.h @@ -1,10 +1,10 @@ #ifndef _INPUT_H #define _INPUT_H -void moveCameraPosition(float direction); -void moveCameraAngle(float angle); +void moveCameraPosition(gfloat direction); +void moveCameraAngle(gfloat angle); -void mouse(int x, int y); +void mouse(gint x, gint y); #endif diff --git a/editor/src/main.c b/editor/src/main.c index dd9ab68..c610d5f 100644 --- a/editor/src/main.c +++ b/editor/src/main.c @@ -12,22 +12,20 @@ #include "input.h" #include "event_callbacks.c" -// TODO: Refactor to GLib-Datatypes (page 747) - // Materials -float ledOnMaterial[] = {0.0, 0.0, 1.0, 0.4}; -float ledOffMaterial[] = {0.1, 0.1, 0.1, 0.0}; -float wireMaterial[] = {0.7, 0.7, 0.7, 1.0}; -float innerWireMaterial[] = {0.3, 0.3, 0.3, 0.3}; +gfloat ledOnMaterial[] = {0.0, 0.0, 1.0, 0.4}; +gfloat ledOffMaterial[] = {0.1, 0.1, 0.1, 0.0}; +gfloat wireMaterial[] = {0.7, 0.7, 0.7, 1.0}; +gfloat innerWireMaterial[] = {0.3, 0.3, 0.3, 0.3}; // Colors -float backgroundColor[] = {0.3, 0.3, 0.3, 0.4}; +gfloat backgroundColor[] = {0.3, 0.3, 0.3, 0.4}; // Positions -float light0Pos[] = {70, 70, 70, 0.0}; -float lookX = 0.0, lookZ = 0.0; -float eyePos = 0.0, eyeAngle = 45.0; -int ledOrientation = TOP_ORIENTATION; +gfloat light0Pos[] = {70, 70, 70, 0.0}; +gfloat lookX = 0.0, lookZ = 0.0; +gfloat eyePos = 0.0, eyeAngle = 45.0; +gint ledOrientation = TOP_ORIENTATION; // Objects GLUquadricObj *quadric; @@ -36,10 +34,10 @@ GdkGLContext *glContext; GtkWidget *window, *drawingArea; // LED data -int currentFrame[27] = {0}; +gint currentFrame[27] = {0}; -int main(int argc, char *argv[]) { +gint main(gint argc, gchar *argv[]) { GladeXML *xml; gtk_init(&argc, &argv); From c2572da0677736924ddc7e4f0977462ce1f9c54a Mon Sep 17 00:00:00 2001 From: Aaron Mueller Date: Wed, 28 Dec 2011 09:43:29 +0100 Subject: [PATCH 3/3] Start implementing the connection between LEDCube lib and editor --- editor/Makefile | 23 ++++++++++--------- editor/{src => }/config.h | 6 +++++ editor/{src => }/display.c | 0 editor/{src => }/display.h | 0 editor/{src => }/event_callbacks.c | 35 +++++++++++++++++++++++++++++ editor/{src => }/input.c | 3 +++ editor/{src => }/input.h | 0 editor/{src => }/main.c | 36 ++++++++++++++++++++++++++++-- editor/{src => }/main_gui.glade | 0 9 files changed, 91 insertions(+), 12 deletions(-) rename editor/{src => }/config.h (86%) rename editor/{src => }/display.c (100%) rename editor/{src => }/display.h (100%) rename editor/{src => }/event_callbacks.c (71%) rename editor/{src => }/input.c (90%) rename editor/{src => }/input.h (100%) rename editor/{src => }/main.c (70%) rename editor/{src => }/main_gui.glade (100%) diff --git a/editor/Makefile b/editor/Makefile index 7b797c2..543f7df 100644 --- a/editor/Makefile +++ b/editor/Makefile @@ -1,15 +1,19 @@ -CC=gcc-4.4 -CFLAGS=-Wall -LINKER_FLAGS=-lglut -lGL -lGLU -export-dynamic -GTKLIBS=`pkg-config --cflags --libs gtk+-2.0 gtkglext-1.0 libglade-2.0 gmodule-export-2.0` -SRCDIR=src +CC = gcc-4.4 +CFLAGS = -Wall +LINKER_FLAGS = -lglut -lGL -lGLU -export-dynamic +CFLAGS += `pkg-config --cflags --libs gtk+-2.0 gtkglext-1.0 libglade-2.0 gmodule-export-2.0` + +CFLAGS += `libusb-config --cflags` +LINKER_FLAGS += `libusb-config --libs` all: - $(CC) $(CFLAGS) $(GTKLIBS) -c $(SRCDIR)/display.c - $(CC) $(CFLAGS) $(GTKLIBS) -c $(SRCDIR)/input.c - $(CC) $(CFLAGS) $(GTKLIBS) -c $(SRCDIR)/main.c + $(CC) $(CFLAGS) -c display.c + $(CC) $(CFLAGS) -c input.c + $(CC) $(CFLAGS) -c main.c + $(CC) $(CFLAGS) -c ../client/ledcube.c + $(CC) $(CFLAGS) -c ../client/opendevice.c - $(CC) $(CFLAGS) $(LINKER_FLAGS) $(GTKLIBS) -o ledcube-edit main.o display.o input.o + $(CC) $(CFLAGS) $(LINKER_FLAGS) -o ledcube-edit main.o display.o input.o ledcube.o opendevice.o chmod +x ledcube-edit #strip ledcube-edit @@ -17,4 +21,3 @@ clean: rm -f *.o rm -f gui rm -f ledcube-edit - diff --git a/editor/src/config.h b/editor/config.h similarity index 86% rename from editor/src/config.h rename to editor/config.h index 44f40b3..fc7128e 100644 --- a/editor/src/config.h +++ b/editor/config.h @@ -8,6 +8,12 @@ #define MOVE_SPEED 7 #define ZOOM_LEVEL 25 +// LEDCube constants +#define NOT_CONNECTED_ERROR -1 +#define DEVICE_NOT_FOUND_ERROR -2 + +#define SUCCESSFULLY_CONNECTED 1 + // Poor Man's enums #define TOP_ORIENTATION 0x01 #define SIDE_ORIENTATION 0x02 diff --git a/editor/src/display.c b/editor/display.c similarity index 100% rename from editor/src/display.c rename to editor/display.c diff --git a/editor/src/display.h b/editor/display.h similarity index 100% rename from editor/src/display.h rename to editor/display.h diff --git a/editor/src/event_callbacks.c b/editor/event_callbacks.c similarity index 71% rename from editor/src/event_callbacks.c rename to editor/event_callbacks.c index cfe49cc..4123dab 100644 --- a/editor/src/event_callbacks.c +++ b/editor/event_callbacks.c @@ -3,10 +3,45 @@ #include #include +#include + +#include "../firmware/globals.h" + #include "config.h" #include "input.h" #include "display.h" +extern int lc_setFrame(unsigned long); +extern int lc_setMode(int); +extern int lc_saveFrame(unsigned long, int, int); +extern int lc_init(void); +extern int lc_close(void); + + +// "Live" Mode. If a user clicks a LED, the frame needs to re-send to +// the LEDCube. +void on_change_led() { + int success = lc_init(); + if (success == SUCCESSFULLY_CONNECTED) { + // Reorder the frame array to a 32bit int? + unsigned long frame = 0; + gint i = 0; + for (i=0; i<27; ++i) { + frame |= (currentFrame[i] << i); + } + + // Send it to the cube + lc_setFrame(frame); + } +} + +// TODO: Make it work on the GUI (button etc.) +void on_change_mode(int newMode) { + lc_setMode(newMode); +} + + + void on_main_window_delete_event(GtkObject *object, gpointer userData) { gtk_main_quit(); } diff --git a/editor/src/input.c b/editor/input.c similarity index 90% rename from editor/src/input.c rename to editor/input.c index 2b58f91..e47c228 100644 --- a/editor/src/input.c +++ b/editor/input.c @@ -8,6 +8,9 @@ #include "input.h" #include "display.h" +#include "../firmware/globals.h" /* custom request numbers */ + +extern void lc_init(void); void moveCameraPosition(gfloat direction) { eyePos += direction; diff --git a/editor/src/input.h b/editor/input.h similarity index 100% rename from editor/src/input.h rename to editor/input.h diff --git a/editor/src/main.c b/editor/main.c similarity index 70% rename from editor/src/main.c rename to editor/main.c index c610d5f..6ac8ce4 100644 --- a/editor/src/main.c +++ b/editor/main.c @@ -37,8 +37,18 @@ GtkWidget *window, *drawingArea; gint currentFrame[27] = {0}; +void* connectToLEDCube(void) { + int ret = NULL; + while (ret == NULL || ret != SUCCESSFULLY_CONNECTED) { + ret = lc_init(); + g_print("connecting ..."); + sleep(3); + } +} + gint main(gint argc, gchar *argv[]) { GladeXML *xml; + GThread *connectThread; gtk_init(&argc, &argv); gdk_gl_init(&argc, &argv); @@ -61,10 +71,10 @@ gint main(gint argc, gchar *argv[]) { // Configure the OpenGL widget glConfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (glConfig == NULL) { - g_warning("EEE Double buffer not available, trying single buffer."); + g_warning("Double buffer not available, trying single buffer."); glConfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH); if (glConfig == NULL) { - g_error("EEE Sorry, can't configure the OpenGL window. Giving up."); + g_error("Sorry, can't configure the OpenGL window. Giving up."); exit(1); } } @@ -78,9 +88,31 @@ gint main(gint argc, gchar *argv[]) { glade_xml_signal_autoconnect(xml); + if (g_thread_supported()) { + g_print("1"); + g_thread_init(NULL); + g_print("2"); + gdk_threads_init(); + g_print("3"); + } else { + g_error("Threads not supported, we die."); + exit(1); + } + + GError *error; + + g_thread_init(NULL); + if (connectThread = g_thread_create((GThreadFunc)connectToLEDCube, NULL, TRUE, &error) == NULL) { + g_error("Can't create the thread, we stop here."); + exit(1); + } + //g_thread_join(connectThread); + + g_print("asdf"); gtk_widget_show(window); gtk_main(); + lc_close(); return 0; } diff --git a/editor/src/main_gui.glade b/editor/main_gui.glade similarity index 100% rename from editor/src/main_gui.glade rename to editor/main_gui.glade