The port of Art-Net protocol parser natcl/Artnet to openFrameworks and mbed. https://github.com/hideakitai/ofxArtnetProtocol

Committer:
hideakitai
Date:
Fri Mar 25 07:39:22 2016 +0000
Revision:
0:1abf45d17b99
first  commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hideakitai 0:1abf45d17b99 1 /*The MIT License (MIT)
hideakitai 0:1abf45d17b99 2
hideakitai 0:1abf45d17b99 3 Copyright (c) 2014 Nathanaël Lécaudé
hideakitai 0:1abf45d17b99 4 https://github.com/natcl/Artnet, http://forum.pjrc.com/threads/24688-Artnet-to-OctoWS2811
hideakitai 0:1abf45d17b99 5
hideakitai 0:1abf45d17b99 6 Permission is hereby granted, free of charge, to any person obtaining a copy
hideakitai 0:1abf45d17b99 7 of this software and associated documentation files (the "Software"), to deal
hideakitai 0:1abf45d17b99 8 in the Software without restriction, including without limitation the rights
hideakitai 0:1abf45d17b99 9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
hideakitai 0:1abf45d17b99 10 copies of the Software, and to permit persons to whom the Software is
hideakitai 0:1abf45d17b99 11 furnished to do so, subject to the following conditions:
hideakitai 0:1abf45d17b99 12
hideakitai 0:1abf45d17b99 13 The above copyright notice and this permission notice shall be included in
hideakitai 0:1abf45d17b99 14 all copies or substantial portions of the Software.
hideakitai 0:1abf45d17b99 15
hideakitai 0:1abf45d17b99 16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
hideakitai 0:1abf45d17b99 17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
hideakitai 0:1abf45d17b99 18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
hideakitai 0:1abf45d17b99 19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
hideakitai 0:1abf45d17b99 20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
hideakitai 0:1abf45d17b99 21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
hideakitai 0:1abf45d17b99 22 THE SOFTWARE.
hideakitai 0:1abf45d17b99 23 */
hideakitai 0:1abf45d17b99 24
hideakitai 0:1abf45d17b99 25 #include <Artnet.h>
hideakitai 0:1abf45d17b99 26
hideakitai 0:1abf45d17b99 27 Artnet::Artnet() {}
hideakitai 0:1abf45d17b99 28
hideakitai 0:1abf45d17b99 29 void Artnet::begin(const char* ip, const char* mask, const char* gateway)
hideakitai 0:1abf45d17b99 30 {
hideakitai 0:1abf45d17b99 31 eth.init(ip, mask, gateway);
hideakitai 0:1abf45d17b99 32 eth.connect();
hideakitai 0:1abf45d17b99 33 printf("\nServer IP Address is %s\n", eth.getIPAddress());
hideakitai 0:1abf45d17b99 34
hideakitai 0:1abf45d17b99 35 server.bind(ART_NET_PORT);
hideakitai 0:1abf45d17b99 36 }
hideakitai 0:1abf45d17b99 37
hideakitai 0:1abf45d17b99 38 uint16_t Artnet::read()
hideakitai 0:1abf45d17b99 39 {
hideakitai 0:1abf45d17b99 40 int packetSize = server.receiveFrom(client, (char*)artnetPacket, (int)MAX_BUFFER_ARTNET);
hideakitai 0:1abf45d17b99 41
hideakitai 0:1abf45d17b99 42 if (packetSize <= MAX_BUFFER_ARTNET && packetSize > 0)
hideakitai 0:1abf45d17b99 43 {
hideakitai 0:1abf45d17b99 44 // Udp.read(artnetPacket, MAX_BUFFER_ARTNET);
hideakitai 0:1abf45d17b99 45
hideakitai 0:1abf45d17b99 46 // Check that packetID is "Art-Net" else ignore
hideakitai 0:1abf45d17b99 47 for (size_t i = 0 ; i < 9 ; i++)
hideakitai 0:1abf45d17b99 48 {
hideakitai 0:1abf45d17b99 49 if (artnetPacket[i] != ART_NET_ID[i])
hideakitai 0:1abf45d17b99 50 return 0;
hideakitai 0:1abf45d17b99 51 }
hideakitai 0:1abf45d17b99 52
hideakitai 0:1abf45d17b99 53 opcode = artnetPacket[8] | artnetPacket[9] << 8;
hideakitai 0:1abf45d17b99 54
hideakitai 0:1abf45d17b99 55 if (opcode == ART_DMX)
hideakitai 0:1abf45d17b99 56 {
hideakitai 0:1abf45d17b99 57 sequence = artnetPacket[12];
hideakitai 0:1abf45d17b99 58 incomingUniverse = artnetPacket[14] | artnetPacket[15] << 8;
hideakitai 0:1abf45d17b99 59 dmxDataLength = artnetPacket[17] | artnetPacket[16] << 8;
hideakitai 0:1abf45d17b99 60 // dmxDataLength = artnetPacket[16] | artnetPacket[17] << 8;
hideakitai 0:1abf45d17b99 61
hideakitai 0:1abf45d17b99 62 if (artDmxCallback) (*artDmxCallback)(incomingUniverse, dmxDataLength, sequence, artnetPacket + ART_DMX_START);
hideakitai 0:1abf45d17b99 63 return ART_DMX;
hideakitai 0:1abf45d17b99 64 }
hideakitai 0:1abf45d17b99 65 if (opcode == ART_POLL)
hideakitai 0:1abf45d17b99 66 {
hideakitai 0:1abf45d17b99 67 return ART_POLL;
hideakitai 0:1abf45d17b99 68 }
hideakitai 0:1abf45d17b99 69 }
hideakitai 0:1abf45d17b99 70 else
hideakitai 0:1abf45d17b99 71 {
hideakitai 0:1abf45d17b99 72 return 0;
hideakitai 0:1abf45d17b99 73 }
hideakitai 0:1abf45d17b99 74 }
hideakitai 0:1abf45d17b99 75
hideakitai 0:1abf45d17b99 76 void Artnet::printPacketHeader()
hideakitai 0:1abf45d17b99 77 {
hideakitai 0:1abf45d17b99 78 printf("\npacket size = %d", packetSize);
hideakitai 0:1abf45d17b99 79 printf("\nopcode = %2x", opcode);
hideakitai 0:1abf45d17b99 80 printf("\nuniverse number = %d", incomingUniverse);
hideakitai 0:1abf45d17b99 81 printf("\ndata length = %d", dmxDataLength);
hideakitai 0:1abf45d17b99 82 printf("\nsequence n0. = %d", sequence);
hideakitai 0:1abf45d17b99 83 }
hideakitai 0:1abf45d17b99 84
hideakitai 0:1abf45d17b99 85 void Artnet::printPacketContent()
hideakitai 0:1abf45d17b99 86 {
hideakitai 0:1abf45d17b99 87 for (uint16_t i = ART_DMX_START ; i < dmxDataLength ; i++){
hideakitai 0:1abf45d17b99 88 printf("%d ", artnetPacket[i]);
hideakitai 0:1abf45d17b99 89 }
hideakitai 0:1abf45d17b99 90 printf("\n\n");
hideakitai 0:1abf45d17b99 91 }