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

Dependents:   ArtNode ArtNode DMXStation ArtNodeLED ... more

Committer:
okini3939
Date:
Fri Sep 13 08:03:40 2019 +0000
Revision:
3:89aa639c946a
Parent:
2:0753f1ed1dec
bug fix;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:629617d401de 1 /*
okini3939 0:629617d401de 2 * Control Art-Net from freepascal & delphi
okini3939 0:629617d401de 3 * (c) Rowan Maclachlan (hippy) rowanmac@optusnet.com.au [15d/01m/06y]
okini3939 0:629617d401de 4 *
okini3939 0:629617d401de 5 * Free for personal not-for-profit use only, please contact me if you are
okini3939 0:629617d401de 6 * using it in a commercial product, as i would like a copy :)
okini3939 0:629617d401de 7 *
okini3939 0:629617d401de 8 * http://members.westnet.com.au/rowanmac/
okini3939 0:629617d401de 9 *
okini3939 2:0753f1ed1dec 10 * for mbed ported by Suga 2011, 2017
okini3939 0:629617d401de 11 */
okini3939 0:629617d401de 12
okini3939 0:629617d401de 13 /** @file
okini3939 0:629617d401de 14 */
okini3939 0:629617d401de 15
okini3939 2:0753f1ed1dec 16 #ifndef _DmxArtNet_H_
okini3939 2:0753f1ed1dec 17 #define _DmxArtNet_H_
okini3939 2:0753f1ed1dec 18
okini3939 0:629617d401de 19 #include "mbed.h"
okini3939 2:0753f1ed1dec 20 #include "rtos.h"
okini3939 2:0753f1ed1dec 21 #include "EthernetInterface.h"
okini3939 2:0753f1ed1dec 22
okini3939 2:0753f1ed1dec 23 #ifndef DMX_SIZE
okini3939 2:0753f1ed1dec 24 #define DMX_SIZE 512
okini3939 2:0753f1ed1dec 25 #endif
okini3939 0:629617d401de 26
okini3939 0:629617d401de 27 //#define ArtMaxUniv 16 // Universe
okini3939 0:629617d401de 28 #define ArtMaxUniv 4 // Universe
okini3939 0:629617d401de 29
okini3939 0:629617d401de 30 //#define SizeRecvBuffer (530*4)
okini3939 2:0753f1ed1dec 31 //#define SizeRecvBuffer 560
okini3939 2:0753f1ed1dec 32 #define SizeRecvBuffer 1024
okini3939 0:629617d401de 33
okini3939 0:629617d401de 34 // Art-Net Standard Stuff
okini3939 2:0753f1ed1dec 35 #define ArtHeaderID "Art-Net" // packet header
okini3939 2:0753f1ed1dec 36 #define ArtUDPPort 0x1936 // UDP port 6454 for Art-Net
okini3939 2:0753f1ed1dec 37 #define ArtVersion 14 // Art-Net version
okini3939 0:629617d401de 38
okini3939 0:629617d401de 39 // Art-Net OpCodes - defines type of packet
okini3939 2:0753f1ed1dec 40 #define OP_Output 0x5000 //Art-Net DMX Packet 'Output'
okini3939 2:0753f1ed1dec 41 #define OP_Poll 0x2000 // ArtPoll
okini3939 2:0753f1ed1dec 42 #define OP_PollReply 0x2100 // ArtPoll Reply
okini3939 2:0753f1ed1dec 43 #define OP_Address 0x6000 // ArtAddress
okini3939 2:0753f1ed1dec 44
okini3939 2:0753f1ed1dec 45 #define OP_OpTodRequest 0x8000
okini3939 2:0753f1ed1dec 46 #define OP_OpTodData 0x8100
okini3939 2:0753f1ed1dec 47 #define OP_OpTodControl 0x8200
okini3939 2:0753f1ed1dec 48 #define OP_OpRdm 0x8300
okini3939 2:0753f1ed1dec 49 #define OP_OpRdmSub 0x8400
okini3939 2:0753f1ed1dec 50
okini3939 2:0753f1ed1dec 51 #define OP_IpProg 0xf800 // IpProg
okini3939 2:0753f1ed1dec 52 #define OP_IpProgReply 0xf900 // IpProgReply
okini3939 2:0753f1ed1dec 53
okini3939 2:0753f1ed1dec 54 #define StyleNode 0
okini3939 2:0753f1ed1dec 55 #define StyleServer 1
okini3939 2:0753f1ed1dec 56
okini3939 2:0753f1ed1dec 57 #define STR_LongName "MbedArtNode - By Suga (2017), Rowan Maclachlan (2005)"
okini3939 2:0753f1ed1dec 58 #define STR_ShortName "MbedArtNode"
okini3939 2:0753f1ed1dec 59 #define OEM_ID 0x7ff7
okini3939 0:629617d401de 60
okini3939 2:0753f1ed1dec 61 #define OP_Poll_TalkToMe_SendMeDiag (1<<2)
okini3939 2:0753f1ed1dec 62 #define OP_Poll_TalkToMe_DiagUnicast (1<<3)
okini3939 2:0753f1ed1dec 63 #define OP_Poll_TalkToMe_DisableVLC (1<<4)
okini3939 2:0753f1ed1dec 64
okini3939 2:0753f1ed1dec 65 #define OP_PollRep_GoodIn_ReceiveError (1<<2)
okini3939 2:0753f1ed1dec 66 #define OP_PollRep_GoodIn_Disabled (1<<3)
okini3939 2:0753f1ed1dec 67 #define OP_PollRep_GoodIn_DmxText (1<<4)
okini3939 2:0753f1ed1dec 68 #define OP_PollRep_GoodIn_DmxSip (1<<5)
okini3939 2:0753f1ed1dec 69 #define OP_PollRep_GoodIn_DmxTest (1<<6)
okini3939 2:0753f1ed1dec 70 #define OP_PollRep_GoodIn_Received (1<<7)
okini3939 0:629617d401de 71
okini3939 2:0753f1ed1dec 72 #define OP_PollRep_GoodOut_sACN (1<<0)
okini3939 2:0753f1ed1dec 73 #define OP_PollRep_GoodOut_ModeLTP (1<<1)
okini3939 2:0753f1ed1dec 74 #define OP_PollRep_GoodOut_ShortDetected (1<<2)
okini3939 2:0753f1ed1dec 75 #define OP_PollRep_GoodOut_MergeArtNet (1<<3)
okini3939 2:0753f1ed1dec 76 #define OP_PollRep_GoodOut_DmxText (1<<4)
okini3939 2:0753f1ed1dec 77 #define OP_PollRep_GoodOut_DmxSip (1<<5)
okini3939 2:0753f1ed1dec 78 #define OP_PollRep_GoodOut_DmxTest (1<<6)
okini3939 2:0753f1ed1dec 79 #define OP_PollRep_GoodOut_Transmitted (1<<7)
okini3939 2:0753f1ed1dec 80
okini3939 2:0753f1ed1dec 81 #define OP_IpProg_Command_ProgPort (1<<0)
okini3939 2:0753f1ed1dec 82 #define OP_IpProg_Command_ProgNetmask (1<<1)
okini3939 2:0753f1ed1dec 83 #define OP_IpProg_Command_ProgIpaddress (1<<2)
okini3939 2:0753f1ed1dec 84 #define OP_IpProg_Command_Prog3Param (1<<3)
okini3939 2:0753f1ed1dec 85 #define OP_IpProg_Command_EnableDhcp (1<<6)
okini3939 2:0753f1ed1dec 86 #define OP_IpProg_Command_EnableProg (1<<7)
okini3939 0:629617d401de 87
okini3939 0:629617d401de 88
okini3939 0:629617d401de 89 // a DMX universe
okini3939 0:629617d401de 90 //#define DMXArray = array[0..511] of byte;
okini3939 0:629617d401de 91
okini3939 0:629617d401de 92 struct ArtAddr {
okini3939 0:629617d401de 93 unsigned char IP[4]; // ip addess 0.1.2.3
okini3939 0:629617d401de 94 unsigned short Port;
okini3939 0:629617d401de 95 } __attribute__((packed));
okini3939 0:629617d401de 96
okini3939 0:629617d401de 97 struct ArtPacketHeader {
okini3939 0:629617d401de 98 char ID[8];
okini3939 0:629617d401de 99 unsigned short OpCode; // 0x5000
okini3939 0:629617d401de 100 } __attribute__((packed));
okini3939 0:629617d401de 101
okini3939 0:629617d401de 102
okini3939 0:629617d401de 103 // dmx transport packet
okini3939 0:629617d401de 104 struct ArtDMX_Packet {
okini3939 0:629617d401de 105 char ID[8];
okini3939 0:629617d401de 106 unsigned short OpCode; // 0x5000
okini3939 0:629617d401de 107 unsigned char VersionH; // 0
okini3939 0:629617d401de 108 unsigned char Version; // 14
okini3939 0:629617d401de 109 unsigned char Sequence; // 0
okini3939 0:629617d401de 110 unsigned char Physical; // 0
okini3939 0:629617d401de 111 unsigned short Universes;
okini3939 0:629617d401de 112 unsigned short Length; // size of data segment
okini3939 2:0753f1ed1dec 113 unsigned char Data[DMX_SIZE]; // data segment
okini3939 0:629617d401de 114 } __attribute__((packed));
okini3939 0:629617d401de 115
okini3939 0:629617d401de 116 struct ArtPoll_Packet {
okini3939 0:629617d401de 117 char ID[8];
okini3939 2:0753f1ed1dec 118 unsigned short OpCode; // 0x2000
okini3939 0:629617d401de 119 unsigned char VersionH; // 0
okini3939 0:629617d401de 120 unsigned char Version; // 14
okini3939 0:629617d401de 121 unsigned char TalkToMe; // 0
okini3939 2:0753f1ed1dec 122 unsigned char Priority;
okini3939 0:629617d401de 123 } __attribute__((packed));
okini3939 0:629617d401de 124
okini3939 0:629617d401de 125 // a responce to a artpoll packet
okini3939 0:629617d401de 126 struct ArtPollReply_Packet {
okini3939 0:629617d401de 127 char ID[8];
okini3939 2:0753f1ed1dec 128 unsigned short OpCode; // 0x2100
okini3939 0:629617d401de 129 struct ArtAddr Addr; // our ip address
okini3939 0:629617d401de 130 unsigned char VersionH;
okini3939 0:629617d401de 131 unsigned char Version;
okini3939 2:0753f1ed1dec 132 unsigned char NetSwitch;
okini3939 0:629617d401de 133 unsigned char SubSwitch;
okini3939 0:629617d401de 134 unsigned short OEM;
okini3939 0:629617d401de 135 char UbeaVersion;
okini3939 0:629617d401de 136 char Status;
okini3939 0:629617d401de 137 unsigned short EstaMan;
okini3939 0:629617d401de 138 char ShortName[18];
okini3939 0:629617d401de 139 char LongName[64];
okini3939 0:629617d401de 140 char NodeReport[64];
okini3939 0:629617d401de 141 unsigned char NumPortsH;
okini3939 0:629617d401de 142 unsigned char NumPorts;
okini3939 0:629617d401de 143 unsigned char PortType[4];
okini3939 0:629617d401de 144 unsigned char GoodInput[4];
okini3939 0:629617d401de 145 unsigned char GoodOutput[4];
okini3939 0:629617d401de 146 unsigned char Swin[4];
okini3939 0:629617d401de 147 unsigned char Swout[4];
okini3939 0:629617d401de 148 unsigned char SwVideo;
okini3939 0:629617d401de 149 unsigned char SwMacro;
okini3939 0:629617d401de 150 unsigned char SwRemote;
okini3939 0:629617d401de 151 unsigned char Spare[3]; // three spare bytes
okini3939 0:629617d401de 152 unsigned char Style;
okini3939 0:629617d401de 153 unsigned char Mac[6];
okini3939 2:0753f1ed1dec 154 unsigned char BindIp[4];
okini3939 2:0753f1ed1dec 155 unsigned char BindIndex;
okini3939 2:0753f1ed1dec 156 unsigned char Status2;
okini3939 2:0753f1ed1dec 157 unsigned char Padding[26]; // padding
okini3939 2:0753f1ed1dec 158 } __attribute__((packed));
okini3939 2:0753f1ed1dec 159
okini3939 2:0753f1ed1dec 160 struct ArtIpProg_Packet {
okini3939 2:0753f1ed1dec 161 char ID[8];
okini3939 2:0753f1ed1dec 162 unsigned short OpCode; // 0xf800
okini3939 2:0753f1ed1dec 163 unsigned char VersionH; // 0
okini3939 2:0753f1ed1dec 164 unsigned char Version; // 14
okini3939 2:0753f1ed1dec 165 unsigned char Filler1;
okini3939 2:0753f1ed1dec 166 unsigned char Filler2;
okini3939 2:0753f1ed1dec 167 unsigned char Command;
okini3939 2:0753f1ed1dec 168 unsigned char Filler4;
okini3939 2:0753f1ed1dec 169 unsigned char ProgIp[4];
okini3939 2:0753f1ed1dec 170 unsigned char ProgSm[4];
okini3939 2:0753f1ed1dec 171 unsigned char ProgPortH;
okini3939 2:0753f1ed1dec 172 unsigned char ProgPort;
okini3939 2:0753f1ed1dec 173 unsigned char Padding[8];
okini3939 2:0753f1ed1dec 174 } __attribute__((packed));
okini3939 2:0753f1ed1dec 175
okini3939 2:0753f1ed1dec 176 struct ArtIpProgReply_Packet {
okini3939 2:0753f1ed1dec 177 char ID[8];
okini3939 2:0753f1ed1dec 178 unsigned short OpCode; // 0xf900
okini3939 2:0753f1ed1dec 179 unsigned char VersionH; // 0
okini3939 2:0753f1ed1dec 180 unsigned char Version; // 14
okini3939 2:0753f1ed1dec 181 unsigned char Filler1;
okini3939 2:0753f1ed1dec 182 unsigned char Filler2;
okini3939 2:0753f1ed1dec 183 unsigned char Filler3;
okini3939 2:0753f1ed1dec 184 unsigned char Filler4;
okini3939 2:0753f1ed1dec 185 unsigned char ProgIp[4];
okini3939 2:0753f1ed1dec 186 unsigned char ProgSm[4];
okini3939 2:0753f1ed1dec 187 unsigned char ProgPortH;
okini3939 2:0753f1ed1dec 188 unsigned char ProgPort;
okini3939 2:0753f1ed1dec 189 unsigned char Status;
okini3939 2:0753f1ed1dec 190 unsigned char Padding[7];
okini3939 2:0753f1ed1dec 191 } __attribute__((packed));
okini3939 2:0753f1ed1dec 192
okini3939 2:0753f1ed1dec 193 struct ArtAddress_Packet {
okini3939 2:0753f1ed1dec 194 char ID[8];
okini3939 2:0753f1ed1dec 195 unsigned short OpCode; // 0x6000
okini3939 2:0753f1ed1dec 196 unsigned char VersionH;
okini3939 2:0753f1ed1dec 197 unsigned char Version;
okini3939 2:0753f1ed1dec 198 unsigned char NetSwitch;
okini3939 2:0753f1ed1dec 199 unsigned char BindIndex;
okini3939 2:0753f1ed1dec 200 char ShortName[18];
okini3939 2:0753f1ed1dec 201 char LongName[64];
okini3939 2:0753f1ed1dec 202 unsigned char Swin[4];
okini3939 2:0753f1ed1dec 203 unsigned char Swout[4];
okini3939 2:0753f1ed1dec 204 unsigned char SubSwitch;
okini3939 2:0753f1ed1dec 205 unsigned char SwVideo;
okini3939 2:0753f1ed1dec 206 unsigned char Command;
okini3939 2:0753f1ed1dec 207 } __attribute__((packed));
okini3939 2:0753f1ed1dec 208
okini3939 2:0753f1ed1dec 209 struct ArtTodRequest_Packet {
okini3939 2:0753f1ed1dec 210 char ID[8];
okini3939 2:0753f1ed1dec 211 unsigned short OpCode; // 0x8300
okini3939 2:0753f1ed1dec 212 unsigned char VersionH;
okini3939 2:0753f1ed1dec 213 unsigned char Version;
okini3939 2:0753f1ed1dec 214 unsigned char Filler1;
okini3939 2:0753f1ed1dec 215 unsigned char Filler2;
okini3939 2:0753f1ed1dec 216 char Spare[7];
okini3939 2:0753f1ed1dec 217 char Net;
okini3939 2:0753f1ed1dec 218 char Command;
okini3939 2:0753f1ed1dec 219 char AddCount;
okini3939 2:0753f1ed1dec 220 char Address[32];
okini3939 0:629617d401de 221 } __attribute__((packed));
okini3939 0:629617d401de 222
okini3939 2:0753f1ed1dec 223 struct ArtTodData_Packet {
okini3939 2:0753f1ed1dec 224 char ID[8];
okini3939 2:0753f1ed1dec 225 unsigned short OpCode; // 0x8300
okini3939 2:0753f1ed1dec 226 unsigned char VersionH;
okini3939 2:0753f1ed1dec 227 unsigned char Version;
okini3939 2:0753f1ed1dec 228 unsigned char RdmVersion;
okini3939 2:0753f1ed1dec 229 unsigned char Port;
okini3939 2:0753f1ed1dec 230 char Spare[6];
okini3939 2:0753f1ed1dec 231 char BindIndex;
okini3939 2:0753f1ed1dec 232 char Net;
okini3939 2:0753f1ed1dec 233 char CommandResponse;
okini3939 2:0753f1ed1dec 234 char Address;
okini3939 2:0753f1ed1dec 235 char UidTotalH;
okini3939 2:0753f1ed1dec 236 char UidTotalL;
okini3939 2:0753f1ed1dec 237 char BlockCount;
okini3939 2:0753f1ed1dec 238 char UidCount;
okini3939 2:0753f1ed1dec 239 char ToD[6];
okini3939 2:0753f1ed1dec 240 } __attribute__((packed));
okini3939 2:0753f1ed1dec 241
okini3939 2:0753f1ed1dec 242 struct ArtTodControl_Packet {
okini3939 2:0753f1ed1dec 243 char ID[8];
okini3939 2:0753f1ed1dec 244 unsigned short OpCode; // 0x8300
okini3939 2:0753f1ed1dec 245 unsigned char VersionH;
okini3939 2:0753f1ed1dec 246 unsigned char Version;
okini3939 2:0753f1ed1dec 247 unsigned char Filler1;
okini3939 2:0753f1ed1dec 248 unsigned char Filler2;
okini3939 2:0753f1ed1dec 249 char Spare[7];
okini3939 2:0753f1ed1dec 250 char Net;
okini3939 2:0753f1ed1dec 251 char Command;
okini3939 2:0753f1ed1dec 252 char Address;
okini3939 2:0753f1ed1dec 253 } __attribute__((packed));
okini3939 2:0753f1ed1dec 254
okini3939 2:0753f1ed1dec 255 struct ArtRdm_Packet {
okini3939 2:0753f1ed1dec 256 char ID[8];
okini3939 2:0753f1ed1dec 257 unsigned short OpCode; // 0x8300
okini3939 2:0753f1ed1dec 258 unsigned char VersionH;
okini3939 2:0753f1ed1dec 259 unsigned char Version;
okini3939 2:0753f1ed1dec 260 unsigned char RdmVersion;
okini3939 2:0753f1ed1dec 261 unsigned char Filler2;
okini3939 2:0753f1ed1dec 262 char Spare[7];
okini3939 2:0753f1ed1dec 263 char Net;
okini3939 2:0753f1ed1dec 264 char Command;
okini3939 2:0753f1ed1dec 265 char Address;
okini3939 2:0753f1ed1dec 266 char RdmPacket[];
okini3939 2:0753f1ed1dec 267 } __attribute__((packed));
okini3939 2:0753f1ed1dec 268
okini3939 2:0753f1ed1dec 269 struct ArtRdmSub_Packet {
okini3939 2:0753f1ed1dec 270 char ID[8];
okini3939 2:0753f1ed1dec 271 unsigned short OpCode; // 0x8400
okini3939 2:0753f1ed1dec 272 unsigned char VersionH;
okini3939 2:0753f1ed1dec 273 unsigned char Version;
okini3939 2:0753f1ed1dec 274 unsigned char RdmVersion;
okini3939 2:0753f1ed1dec 275 unsigned char Filler2;
okini3939 2:0753f1ed1dec 276 char uid[6];
okini3939 2:0753f1ed1dec 277 char Spare1;
okini3939 2:0753f1ed1dec 278 char CommandClass;
okini3939 2:0753f1ed1dec 279 short ParameterId;
okini3939 2:0753f1ed1dec 280 short SubDevice;
okini3939 2:0753f1ed1dec 281 short SubCount;
okini3939 2:0753f1ed1dec 282 char Spare[4];
okini3939 2:0753f1ed1dec 283 short data[];
okini3939 2:0753f1ed1dec 284 } __attribute__((packed));
okini3939 2:0753f1ed1dec 285
okini3939 2:0753f1ed1dec 286
okini3939 2:0753f1ed1dec 287 struct ArtPorts_Config {
okini3939 2:0753f1ed1dec 288 unsigned char PortType[ArtMaxUniv];
okini3939 2:0753f1ed1dec 289 unsigned char GoodInput[ArtMaxUniv];
okini3939 2:0753f1ed1dec 290 unsigned char GoodOutput[ArtMaxUniv];
okini3939 2:0753f1ed1dec 291 unsigned char Swin[ArtMaxUniv];
okini3939 2:0753f1ed1dec 292 unsigned char Swout[ArtMaxUniv];
okini3939 2:0753f1ed1dec 293 };
okini3939 2:0753f1ed1dec 294
okini3939 1:c59dc374fc64 295 /** DmxArtNet class
okini3939 1:c59dc374fc64 296 */
okini3939 0:629617d401de 297 class DmxArtNet {
okini3939 0:629617d401de 298 public:
okini3939 2:0753f1ed1dec 299 unsigned short NetSwitch;
okini3939 2:0753f1ed1dec 300 char BindIpAddress[16]; // Local IP Address to bind onto
okini3939 2:0753f1ed1dec 301 char BCastAddress[16]; // address to broadcast on
okini3939 2:0753f1ed1dec 302 char SubNetMask[16], DGateWay[16];
okini3939 2:0753f1ed1dec 303 int UdpPort, OemId;
okini3939 2:0753f1ed1dec 304
okini3939 2:0753f1ed1dec 305 DmxArtNet ();
okini3939 0:629617d401de 306
okini3939 0:629617d401de 307 /** create network socket, setup for NetworkWork
okini3939 0:629617d401de 308 * @return true if socket creation succeded
okini3939 0:629617d401de 309 */
okini3939 0:629617d401de 310 int Init();
okini3939 0:629617d401de 311
okini3939 0:629617d401de 312 /** socket shutdown
okini3939 0:629617d401de 313 */
okini3939 0:629617d401de 314 void Done();
okini3939 0:629617d401de 315
okini3939 0:629617d401de 316 /** last error
okini3939 0:629617d401de 317 * @retval 0 ok
okini3939 0:629617d401de 318 */
okini3939 0:629617d401de 319 int LastError() {
okini3939 0:629617d401de 320 return LError;
okini3939 0:629617d401de 321 }
okini3939 0:629617d401de 322 /** returns descrip of last error
okini3939 0:629617d401de 323 * @return descrip of last error
okini3939 0:629617d401de 324 */
okini3939 0:629617d401de 325 char *LastErrorString() {
okini3939 0:629617d401de 326 return LErrorString;
okini3939 0:629617d401de 327 }
okini3939 0:629617d401de 328 /** clear error
okini3939 0:629617d401de 329 */
okini3939 0:629617d401de 330 void ClearError();
okini3939 0:629617d401de 331
okini3939 0:629617d401de 332 /** Send
okini3939 0:629617d401de 333 * send an array [0..511] of (length) bytes representing the dmx you want to send to
okini3939 0:629617d401de 334 * univ[0..15] , physical is info only, can be the universe number or port of device
okini3939 0:629617d401de 335 */
okini3939 0:629617d401de 336 int Send_ArtDmx(int univ, int physical, char *data, int length);
okini3939 0:629617d401de 337 /** execute often
okini3939 0:629617d401de 338 * returns true if something happened
okini3939 0:629617d401de 339 * @return 1 something happened
okini3939 0:629617d401de 340 */
okini3939 0:629617d401de 341 int Work();
okini3939 2:0753f1ed1dec 342 /*
okini3939 2:0753f1ed1dec 343 void WorkAddress (ArtAddress_Packet *address);
okini3939 2:0753f1ed1dec 344 void WorkIpProg (ArtIpProg_Packet *ipprog);
okini3939 2:0753f1ed1dec 345 */
okini3939 0:629617d401de 346 unsigned char *DmxIn[ArtMaxUniv]; // Recieved ArtDMX, 16 Dmx Arrays
okini3939 2:0753f1ed1dec 347 volatile int LastRecievedUniverse; // the number of the last recieved universe
okini3939 0:629617d401de 348
okini3939 0:629617d401de 349 struct ArtPollReply_Packet ArtPollReply; // a response to ArtPoll
okini3939 0:629617d401de 350 // contains many variables you may set
okini3939 2:0753f1ed1dec 351 struct ArtPorts_Config ArtPorts;
okini3939 0:629617d401de 352
okini3939 0:629617d401de 353 void InitArtPollReplyDefaults();
okini3939 0:629617d401de 354 int SendArtPollReply();
okini3939 2:0753f1ed1dec 355 int SendArtIpProgReply();
okini3939 2:0753f1ed1dec 356 int SendArtTodData (int n);
okini3939 2:0753f1ed1dec 357
okini3939 2:0753f1ed1dec 358 void attach (void (*handler)(struct ArtPacketHeader *, int));
okini3939 2:0753f1ed1dec 359
okini3939 2:0753f1ed1dec 360 void bcast(char *dest, char *ipaddr, char *netmask);
okini3939 0:629617d401de 361
okini3939 0:629617d401de 362 private:
okini3939 0:629617d401de 363 UDPSocket _art; // the network socket
okini3939 0:629617d401de 364 struct ArtPacketHeader ArtHead; // packet header
okini3939 0:629617d401de 365 struct ArtDMX_Packet ArtDMX; // an Art-Net DMX Packet
okini3939 0:629617d401de 366 struct ArtPoll_Packet ArtPoll; // an Art-Poll Packet
okini3939 0:629617d401de 367 unsigned char buf[SizeRecvBuffer]; // a temp buffer
okini3939 0:629617d401de 368 struct ArtAddr localaddr;
okini3939 0:629617d401de 369 int LError;
okini3939 2:0753f1ed1dec 370 char LErrorString[40];
okini3939 0:629617d401de 371
okini3939 0:629617d401de 372 int makeword16 (int lsb, int msb);
okini3939 0:629617d401de 373
okini3939 0:629617d401de 374 void Init_ArtDMX();
okini3939 0:629617d401de 375 void SocketErrorOccured(char *proc);
okini3939 0:629617d401de 376
okini3939 2:0753f1ed1dec 377 static void task_UDPSocket (void const *arg);
okini3939 2:0753f1ed1dec 378 void on_UDPSocketEvent ();
okini3939 2:0753f1ed1dec 379
okini3939 2:0753f1ed1dec 380 void (*cb_ArtParser)(struct ArtPacketHeader *art, int len);
okini3939 0:629617d401de 381
okini3939 2:0753f1ed1dec 382 Endpoint RemoteSin;
okini3939 0:629617d401de 383 volatile int rxlen;
okini3939 2:0753f1ed1dec 384 Thread *thread;
okini3939 0:629617d401de 385 };
okini3939 2:0753f1ed1dec 386 #endif