summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2019-06-09 14:27:31 +0200
committerThomas White <taw@physics.org>2019-06-09 14:29:02 +0200
commitbf928144bdaa9f330b7ec6054e330e7e3f1ff620 (patch)
treec63e85d88343d3de898c9e6d5ee5a5566ce54439 /src
parent08b3bc06e792320c4ea15fbba11712c1b4f0bd2e (diff)
Scan out DMX for real
Diffstat (limited to 'src')
-rw-r--r--src/scanout.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/scanout.c b/src/scanout.c
index cbb990f..1c5823b 100644
--- a/src/scanout.c
+++ b/src/scanout.c
@@ -23,31 +23,49 @@
#include <string.h>
#include <stdlib.h>
-#include <ctype.h>
#include <libsoup/soup.h>
#include "nanolight.h"
-gboolean scanout_all(struct nanolight *nl)
+int scanout_all(struct nanolight *nl)
{
SoupSession *sess;
SoupMessage *msg;
int i;
+ int dmx[512];
char str[8200];
- strcpy(str, "u=0, d=");
+ /* Start from zero */
+ for ( i=0; i<512; i++ ) dmx[i] = 0;
+
+ /* Loop over fixtures and set values */
+ for ( i=0; i<nl->n_fixtures; i++ ) {
+ int j;
+ struct fixture *fix = &nl->fixtures[i];
+ for ( j=0; j<fix->cls->n_attrs; j++ ) {
+ int pos = fix->base_addr + fix->cls->attrs[j].addr_offset;
+ if ( fix->cls->attrs[j].props & ATTR_16BIT ) {
+ dmx[pos] = (fix->attr_vals[j] & 0xff00) >> 8;
+ dmx[pos+1] = fix->attr_vals[j] & 0xff;
+ } else {
+ dmx[pos] = fix->attr_vals[j];
+ }
+ }
+ }
+
+ /* Loop over DMX channels and prepare request */
+ strcpy(str, "u=1&d=");
for ( i=0; i<512; i++ ) {
char tmp[6];
- snprintf(tmp, 5, "%i,", 255);
+ snprintf(tmp, 5, "%i,", dmx[i]);
strcat(str, tmp);
}
- printf("req='%s'\n", str);
+ /* Send request to OLA */
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_message_set_request(msg, "application/x-www-form-urlencoded",
+ SOUP_MEMORY_TEMPORARY, str, strlen(str));
soup_session_send_message(sess, msg);
g_object_unref(msg);