Art-Net node http://mbed.org/users/okini3939/notebook/art-net/

Dependencies:   EthernetNetIf mbed DmxArtNet

Files at this revision

API Documentation at this revision

Comitter:
okini3939
Date:
Thu Oct 06 04:13:35 2011 +0000
Commit message:

Changed in this revision

DMX.lib Show annotated file Show diff for this revision Revisions of this file
DmxArtNet.lib Show annotated file Show diff for this revision Revisions of this file
EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
config.h Show annotated file Show diff for this revision Revisions of this file
dbg.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r e3d0bc58141e DMX.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DMX.lib	Thu Oct 06 04:13:35 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/okini3939/code/DMX/#7826eb77d9ea
diff -r 000000000000 -r e3d0bc58141e DmxArtNet.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DmxArtNet.lib	Thu Oct 06 04:13:35 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/okini3939/code/DmxArtNet/#c59dc374fc64
diff -r 000000000000 -r e3d0bc58141e EthernetNetIf.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetNetIf.lib	Thu Oct 06 04:13:35 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
diff -r 000000000000 -r e3d0bc58141e config.h
diff -r 000000000000 -r e3d0bc58141e dbg.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbg.h	Thu Oct 06 04:13:35 2011 +0000
@@ -0,0 +1,7 @@
+#define DEBUG
+
+#ifdef DEBUG 
+#define DBG(...) printf("dbg:" __VA_ARGS__) 
+#else 
+#define DBG(...) 
+#endif 
diff -r 000000000000 -r e3d0bc58141e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Oct 06 04:13:35 2011 +0000
@@ -0,0 +1,155 @@
+/*
+ * "Node" Device
+ * "Universe" 512 DMX datas
+ * "Sub-Net" 16 Universe
+ * "Server" Controller
+ *
+ * can use over 40 Sub-Net on network.
+ */
+
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "DmxArtNet.h"
+#include "DMX.h"
+
+
+#define LED_NET_ACT_ON led_yk = 0
+#define LED_NET_ACT_OFF led_yk = 1
+#define LED_NET_G_ON led_gayk = 1; led_gkya = 0
+#define LED_NET_Y_ON led_gayk = 0; led_gkya = 1
+#define LED_NET_GY_OFF led_gayk = 0; led_gkya = 0
+
+extern "C" void mbed_mac_address(char *s);
+
+DigitalOut led_red(p22), led_yellow(p23);
+DigitalOut led_gayk(p24),led_gkya(p25), led_yk(p26);
+DigitalIn eth_link(P1_25), eth_speed(P1_26);
+DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
+EthernetNetIf *eth;
+DmxArtNet art;
+DMX dmx1(p13, p14);
+DMX dmx2(p28, p27);
+Serial pc(USBTX, USBRX);
+
+void no_memory () {
+    printf("panic: can't allocate to memory!\r\n");
+    exit(-1);
+}
+
+void shutdown () {
+   art.ArtPollReply.NumPorts = 0;
+   strcpy(art.ArtPollReply.NodeReport, "Shutdown");
+   art.SendArtPollReply();
+   art.Done();
+}
+
+int main () {
+    int i, u;
+    char mac[6];
+    IpAddr ip;
+    EthernetErr ethErr;
+
+    set_new_handler(no_memory); // new handler function
+
+    pc.baud(112500);
+
+    eth_link.mode(PullUp);
+    eth_speed.mode(PullUp);
+
+    if (! eth_link) {
+        LED_NET_G_ON;
+    }
+    LED_NET_ACT_ON;
+
+    mbed_mac_address(mac);
+    ip = IpAddr(2, mac[3], mac[4], mac[5]);
+    eth = new EthernetNetIf(ip, IpAddr(255,0,0,0), IpAddr(0,0,0,0), IpAddr(0,0,0,0));
+    ethErr = eth->setup();
+    if (ethErr) {
+        LED_NET_Y_ON;
+        led_red = 1;
+        return -1;
+    }
+    pc.printf("Bind to interface: %d.%d.%d.%d\r\n", (unsigned char)ip[0], (unsigned char)ip[1], (unsigned char)ip[2], (unsigned char)ip[3]);
+
+    art.BindIpAddress = ip;
+    art.BCastAddress = IpAddr(2,255,255,255);
+
+    art.InitArtPollReplyDefaults();
+    // Device
+    art.ArtPollReply.PortType[0] = 128; // output
+    art.ArtPollReply.PortType[1] = 128; // output
+    art.ArtPollReply.PortType[2] = 64; // input
+    art.ArtPollReply.GoodInput[2] = 4;
+    art.ArtPollReply.PortType[3] = 64; // input
+    art.ArtPollReply.GoodInput[3] = 4;
+
+    art.Init();
+    art.SendArtPollReply(); // announce to art-net nodes
+
+    while (1) {
+        Net::poll();
+        if (! eth_link) {
+            LED_NET_G_ON;
+        } else {
+            LED_NET_GY_OFF;
+        }
+
+        if (art.Work()) {
+            LED_NET_ACT_ON;
+            led_yellow = 1;
+            u = art.LastRecievedUniverse;
+            if (u == 0) {
+                led1 = 1;
+                for (i = 0; i < 512; i ++) {
+                    dmx1.put(i, art.DmxIn[u][i]);
+                }
+            } else
+            if (u == 1) {
+                led2 = 1;
+                for (i = 0; i < 512; i ++) {
+                    dmx2.put(i, art.DmxIn[u][i]);
+                }
+            }
+            pc.printf("recv, node %d, data %d\r\n", u, art.DmxIn[u][0]);
+            led1 = 0;
+            led2 = 0;
+            led_yellow = 0;
+        }
+        
+        if (dmx1.is_recived) {
+            led3 = 1;
+            led_yellow = 1;
+            dmx1.is_recived = 0;
+            u = 0;
+            for (i = 0; i < 512; i ++) {
+                art.DmxIn[u][i] = dmx1.get(i);
+            }
+            LED_NET_ACT_ON;
+            art.ArtPollReply.GoodInput[u] = 128;
+            art.Send_ArtDmx(u, 0, (char*)art.DmxIn[u], 512);
+            pc.printf("send, node %d, data %d\r\n", u, art.DmxIn[u][0]);
+            led3 = 0;
+            led_yellow = 0;
+        }
+
+        if (dmx2.is_recived) {
+            led4 = 1;
+            led_yellow = 1;
+            dmx2.is_recived = 0;
+            u = 1;
+            for (i = 0; i < 512; i ++) {
+                art.DmxIn[u][i] = dmx2.get(i);
+            }
+            LED_NET_ACT_ON;
+            art.ArtPollReply.GoodInput[u] = 128;
+            art.Send_ArtDmx(u, 0, (char*)art.DmxIn[u], 512);
+            pc.printf("send, node %d, data %d\r\n", u, art.DmxIn[u][0]);
+            led4 = 0;
+            led_yellow = 0;
+        }
+
+        LED_NET_ACT_OFF;
+    }
+}
+
diff -r 000000000000 -r e3d0bc58141e mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Oct 06 04:13:35 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912