dtgd

Dependencies:   EthernetNetIf mbed DmxArtNet

Committer:
demian
Date:
Mon Feb 13 15:51:02 2012 +0000
Revision:
0:d7c1b9e83e55
gffgd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demian 0:d7c1b9e83e55 1 /*
demian 0:d7c1b9e83e55 2 * "Node" Device
demian 0:d7c1b9e83e55 3 * "Universe" 512 DMX datas
demian 0:d7c1b9e83e55 4 * "Sub-Net" 16 Universe
demian 0:d7c1b9e83e55 5 * "Server" Controller
demian 0:d7c1b9e83e55 6 *
demian 0:d7c1b9e83e55 7 * can use over 40 Sub-Net on network.
demian 0:d7c1b9e83e55 8 */
demian 0:d7c1b9e83e55 9
demian 0:d7c1b9e83e55 10 #include "mbed.h"
demian 0:d7c1b9e83e55 11 #include "EthernetNetIf.h"
demian 0:d7c1b9e83e55 12 #include "DmxArtNet.h"
demian 0:d7c1b9e83e55 13 #include "DMX.h"
demian 0:d7c1b9e83e55 14
demian 0:d7c1b9e83e55 15
demian 0:d7c1b9e83e55 16 #define LED_NET_ACT_ON led_yk = 0
demian 0:d7c1b9e83e55 17 #define LED_NET_ACT_OFF led_yk = 1
demian 0:d7c1b9e83e55 18 #define LED_NET_G_ON led_gayk = 1; led_gkya = 0
demian 0:d7c1b9e83e55 19 #define LED_NET_Y_ON led_gayk = 0; led_gkya = 1
demian 0:d7c1b9e83e55 20 #define LED_NET_GY_OFF led_gayk = 0; led_gkya = 0
demian 0:d7c1b9e83e55 21
demian 0:d7c1b9e83e55 22 extern "C" void mbed_mac_address(char *s);
demian 0:d7c1b9e83e55 23
demian 0:d7c1b9e83e55 24 DigitalOut led_red(p22), led_yellow(p23);
demian 0:d7c1b9e83e55 25 DigitalOut led_gayk(p24),led_gkya(p25), led_yk(p26);
demian 0:d7c1b9e83e55 26 DigitalIn eth_link(P1_25), eth_speed(P1_26);
demian 0:d7c1b9e83e55 27 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
demian 0:d7c1b9e83e55 28 EthernetNetIf *eth;
demian 0:d7c1b9e83e55 29 DmxArtNet art;
demian 0:d7c1b9e83e55 30 DMX dmx1(p13, p14);
demian 0:d7c1b9e83e55 31 DMX dmx2(p28, p27);
demian 0:d7c1b9e83e55 32 Serial pc(USBTX, USBRX);
demian 0:d7c1b9e83e55 33
demian 0:d7c1b9e83e55 34 void no_memory () {
demian 0:d7c1b9e83e55 35 printf("panic: can't allocate to memory!\r\n");
demian 0:d7c1b9e83e55 36 exit(-1);
demian 0:d7c1b9e83e55 37 }
demian 0:d7c1b9e83e55 38
demian 0:d7c1b9e83e55 39 void shutdown () {
demian 0:d7c1b9e83e55 40 art.ArtPollReply.NumPorts = 0;
demian 0:d7c1b9e83e55 41 strcpy(art.ArtPollReply.NodeReport, "Shutdown");
demian 0:d7c1b9e83e55 42 art.SendArtPollReply();
demian 0:d7c1b9e83e55 43 art.Done();
demian 0:d7c1b9e83e55 44 }
demian 0:d7c1b9e83e55 45
demian 0:d7c1b9e83e55 46 int main () {
demian 0:d7c1b9e83e55 47 int i, u;
demian 0:d7c1b9e83e55 48 char mac[6];
demian 0:d7c1b9e83e55 49 IpAddr ip;
demian 0:d7c1b9e83e55 50 EthernetErr ethErr;
demian 0:d7c1b9e83e55 51
demian 0:d7c1b9e83e55 52 set_new_handler(no_memory); // new handler function
demian 0:d7c1b9e83e55 53
demian 0:d7c1b9e83e55 54 pc.baud(112500);
demian 0:d7c1b9e83e55 55
demian 0:d7c1b9e83e55 56 eth_link.mode(PullUp);
demian 0:d7c1b9e83e55 57 eth_speed.mode(PullUp);
demian 0:d7c1b9e83e55 58
demian 0:d7c1b9e83e55 59 if (! eth_link) {
demian 0:d7c1b9e83e55 60 LED_NET_G_ON;
demian 0:d7c1b9e83e55 61 }
demian 0:d7c1b9e83e55 62 LED_NET_ACT_ON;
demian 0:d7c1b9e83e55 63
demian 0:d7c1b9e83e55 64 mbed_mac_address(mac);
demian 0:d7c1b9e83e55 65 ip = IpAddr(2, mac[3], mac[4], mac[5]);
demian 0:d7c1b9e83e55 66 eth = new EthernetNetIf(ip, IpAddr(255,0,0,0), IpAddr(0,0,0,0), IpAddr(0,0,0,0));
demian 0:d7c1b9e83e55 67 ethErr = eth->setup();
demian 0:d7c1b9e83e55 68 if (ethErr) {
demian 0:d7c1b9e83e55 69 LED_NET_Y_ON;
demian 0:d7c1b9e83e55 70 led_red = 1;
demian 0:d7c1b9e83e55 71 return -1;
demian 0:d7c1b9e83e55 72 }
demian 0:d7c1b9e83e55 73 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]);
demian 0:d7c1b9e83e55 74
demian 0:d7c1b9e83e55 75 art.BindIpAddress = ip;
demian 0:d7c1b9e83e55 76 art.BCastAddress = IpAddr(2,255,255,255);
demian 0:d7c1b9e83e55 77
demian 0:d7c1b9e83e55 78 art.InitArtPollReplyDefaults();
demian 0:d7c1b9e83e55 79 // Device
demian 0:d7c1b9e83e55 80 art.ArtPollReply.PortType[0] = 128; // output
demian 0:d7c1b9e83e55 81 art.ArtPollReply.PortType[1] = 128; // output
demian 0:d7c1b9e83e55 82 art.ArtPollReply.PortType[2] = 64; // input
demian 0:d7c1b9e83e55 83 art.ArtPollReply.GoodInput[2] = 4;
demian 0:d7c1b9e83e55 84 art.ArtPollReply.PortType[3] = 64; // input
demian 0:d7c1b9e83e55 85 art.ArtPollReply.GoodInput[3] = 4;
demian 0:d7c1b9e83e55 86
demian 0:d7c1b9e83e55 87 art.Init();
demian 0:d7c1b9e83e55 88 art.SendArtPollReply(); // announce to art-net nodes
demian 0:d7c1b9e83e55 89
demian 0:d7c1b9e83e55 90 while (1) {
demian 0:d7c1b9e83e55 91 Net::poll();
demian 0:d7c1b9e83e55 92 if (! eth_link) {
demian 0:d7c1b9e83e55 93 LED_NET_G_ON;
demian 0:d7c1b9e83e55 94 } else {
demian 0:d7c1b9e83e55 95 LED_NET_GY_OFF;
demian 0:d7c1b9e83e55 96 }
demian 0:d7c1b9e83e55 97
demian 0:d7c1b9e83e55 98 if (art.Work()) {
demian 0:d7c1b9e83e55 99 LED_NET_ACT_ON;
demian 0:d7c1b9e83e55 100 led_yellow = 1;
demian 0:d7c1b9e83e55 101 u = art.LastRecievedUniverse;
demian 0:d7c1b9e83e55 102 if (u == 0) {
demian 0:d7c1b9e83e55 103 led1 = 1;
demian 0:d7c1b9e83e55 104 for (i = 0; i < 512; i ++) {
demian 0:d7c1b9e83e55 105 dmx1.put(i, art.DmxIn[u][i]);
demian 0:d7c1b9e83e55 106 }
demian 0:d7c1b9e83e55 107 } else
demian 0:d7c1b9e83e55 108 if (u == 1) {
demian 0:d7c1b9e83e55 109 led2 = 1;
demian 0:d7c1b9e83e55 110 for (i = 0; i < 512; i ++) {
demian 0:d7c1b9e83e55 111 dmx2.put(i, art.DmxIn[u][i]);
demian 0:d7c1b9e83e55 112 }
demian 0:d7c1b9e83e55 113 }
demian 0:d7c1b9e83e55 114 pc.printf("recv, node %d, data %d\r\n", u, art.DmxIn[u][0]);
demian 0:d7c1b9e83e55 115 led1 = 0;
demian 0:d7c1b9e83e55 116 led2 = 0;
demian 0:d7c1b9e83e55 117 led_yellow = 0;
demian 0:d7c1b9e83e55 118 }
demian 0:d7c1b9e83e55 119
demian 0:d7c1b9e83e55 120 if (dmx1.is_recived) {
demian 0:d7c1b9e83e55 121 led3 = 1;
demian 0:d7c1b9e83e55 122 led_yellow = 1;
demian 0:d7c1b9e83e55 123 dmx1.is_recived = 0;
demian 0:d7c1b9e83e55 124 u = 0;
demian 0:d7c1b9e83e55 125 for (i = 0; i < 512; i ++) {
demian 0:d7c1b9e83e55 126 art.DmxIn[u][i] = dmx1.get(i);
demian 0:d7c1b9e83e55 127 }
demian 0:d7c1b9e83e55 128 LED_NET_ACT_ON;
demian 0:d7c1b9e83e55 129 art.ArtPollReply.GoodInput[u] = 128;
demian 0:d7c1b9e83e55 130 art.Send_ArtDmx(u, 0, (char*)art.DmxIn[u], 512);
demian 0:d7c1b9e83e55 131 pc.printf("send, node %d, data %d\r\n", u, art.DmxIn[u][0]);
demian 0:d7c1b9e83e55 132 led3 = 0;
demian 0:d7c1b9e83e55 133 led_yellow = 0;
demian 0:d7c1b9e83e55 134 }
demian 0:d7c1b9e83e55 135
demian 0:d7c1b9e83e55 136 if (dmx2.is_recived) {
demian 0:d7c1b9e83e55 137 led4 = 1;
demian 0:d7c1b9e83e55 138 led_yellow = 1;
demian 0:d7c1b9e83e55 139 dmx2.is_recived = 0;
demian 0:d7c1b9e83e55 140 u = 1;
demian 0:d7c1b9e83e55 141 for (i = 0; i < 512; i ++) {
demian 0:d7c1b9e83e55 142 art.DmxIn[u][i] = dmx2.get(i);
demian 0:d7c1b9e83e55 143 }
demian 0:d7c1b9e83e55 144 LED_NET_ACT_ON;
demian 0:d7c1b9e83e55 145 art.ArtPollReply.GoodInput[u] = 128;
demian 0:d7c1b9e83e55 146 art.Send_ArtDmx(u, 0, (char*)art.DmxIn[u], 512);
demian 0:d7c1b9e83e55 147 pc.printf("send, node %d, data %d\r\n", u, art.DmxIn[u][0]);
demian 0:d7c1b9e83e55 148 led4 = 0;
demian 0:d7c1b9e83e55 149 led_yellow = 0;
demian 0:d7c1b9e83e55 150 }
demian 0:d7c1b9e83e55 151
demian 0:d7c1b9e83e55 152 LED_NET_ACT_OFF;
demian 0:d7c1b9e83e55 153 }
demian 0:d7c1b9e83e55 154 }
demian 0:d7c1b9e83e55 155