From ad01f3b22f80ec9f0cc0bf4ddb18c6694c7dd80e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 9 Jun 2019 11:51:18 +0200 Subject: Framework for DMX scanout --- meson.build | 4 +++- src/nanolight.c | 13 +++++++++++++ src/scanout.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/scanout.h | 28 ++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/scanout.c create mode 100644 src/scanout.h diff --git a/meson.build b/meson.build index 96aea93..cac0b01 100644 --- a/meson.build +++ b/meson.build @@ -16,6 +16,7 @@ gtk_dep = dependency('gtk+-3.0', required : true) glib_dep = dependency('glib-2.0', required : true) gio_dep = dependency('gio-2.0', required : true) cairo_dep = dependency('cairo', required : true) +soup_dep = dependency('libsoup-2.4', required : true) pango_dep = dependency('pango', required : true) pangocairo_dep = dependency('pangocairo', required : true) cc = meson.get_compiler('c') @@ -25,6 +26,7 @@ mdep = cc.find_library('m', required : false) executable('nanolight', ['src/nanolight.c', 'src/command.c', + 'src/scanout.c', ], - dependencies : [gtk_dep, mdep], + dependencies : [gtk_dep, mdep, soup_dep], install : true) diff --git a/src/nanolight.c b/src/nanolight.c index adebcc4..5f76dd5 100644 --- a/src/nanolight.c +++ b/src/nanolight.c @@ -34,6 +34,7 @@ #include "nanolight.h" #include "command.h" +#include "scanout.h" static void show_help(const char *s) { @@ -312,6 +313,13 @@ static gint realise_sig(GtkWidget *da, struct nanolight *nl) } +static gboolean scanout_cb(gpointer data) +{ + scanout_all((struct nanolight *)data); + return G_SOURCE_CONTINUE; +} + + int main(int argc, char *argv[]) { struct nanolight nl; @@ -352,6 +360,7 @@ int main(int argc, char *argv[]) bindtextdomain("nanolight", LOCALEDIR); textdomain("nanolight"); + /* Set up data structures */ cls.name = "Dummy fixture"; cls.n_attrs = 3; cls.attrs = attrs; @@ -380,6 +389,10 @@ int main(int argc, char *argv[]) create_fixture(&nl, &cls, "mh3", 103); create_fixture(&nl, &cls, "mh4", 154)->attr_vals[0]=255; + /* Set up output */ + g_timeout_add(100, scanout_cb, &nl); + + /* Create main window */ mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_fullscreen(GTK_WINDOW(mainwindow)); g_signal_connect_swapped(G_OBJECT(mainwindow), "destroy", gtk_main_quit, NULL); diff --git a/src/scanout.c b/src/scanout.c new file mode 100644 index 0000000..cbb990f --- /dev/null +++ b/src/scanout.c @@ -0,0 +1,56 @@ +/* + * scanout.c + * + * Copyright © 2019 Thomas White + * + * This file is part of NanoLight. + * + * NanoLight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + + +#include +#include +#include +#include + +#include "nanolight.h" + +gboolean scanout_all(struct nanolight *nl) +{ + SoupSession *sess; + SoupMessage *msg; + int i; + char str[8200]; + + strcpy(str, "u=0, d="); + for ( i=0; i<512; i++ ) { + char tmp[6]; + snprintf(tmp, 5, "%i,", 255); + strcat(str, tmp); + } + printf("req='%s'\n", str); + + sess = soup_session_new(); + msg = soup_message_new("POST", "http://127.0.0.1:9090/set_dmx"); + soup_message_set_request(msg, "text/plain", SOUP_MEMORY_TEMPORARY, str, + strlen(str)); + + soup_session_send_message(sess, msg); + + g_object_unref(msg); + g_object_unref(sess); + return 0; +} diff --git a/src/scanout.h b/src/scanout.h new file mode 100644 index 0000000..b474112 --- /dev/null +++ b/src/scanout.h @@ -0,0 +1,28 @@ +/* + * scanout.h + * + * Copyright © 2019 Thomas White + * + * This file is part of NanoLight. + * + * NanoLight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef SCANOUT_H +#define SCANOUT_H + +extern int scanout_all(struct nanolight *nl); + +#endif /* SCANOUT_H */ -- cgit v1.2.3