Advertisement
teplofizik

ArtDMX.cs

Feb 14th, 2013
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.73 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6.  
  7. namespace ArtNet.ArtNet
  8. {
  9.     class ArtDMX
  10.     {
  11.         private byte Sequence;
  12.  
  13.         private byte[] Packet = new byte[11 + 512];
  14.        
  15.         public ArtDMX()
  16.         {
  17.             Net = 0;
  18.             Universe = 0;
  19.             Physical = 0;
  20.             Sequence = 0;
  21.  
  22.             // Оформим заголовок
  23.             // ID[8]: Art-Net\0
  24.             Helper.WriteString(ref Packet, 0, "Art-Net", 8);
  25.             // OpCode: 0x5000
  26.             Helper.WriteUInt16(ref Packet, 8, Convert.ToInt16(OpCodes.OpDmx));
  27.             // ProtVer: 00, 14
  28.             Helper.WriteUInt16BE(ref Packet, 10, 0x000E);
  29.  
  30.             // Length
  31.             Helper.WriteUInt16BE(ref Packet, 16, 512);
  32.         }
  33.  
  34.         public void SetData(byte[] Data)
  35.         {
  36.             // Data[Length]
  37.             Helper.WriteArray(ref Packet, 18, Data, 512);
  38.         }
  39.  
  40.         // Пакет
  41.         public byte[] GetPacket()
  42.         {
  43.             // Sequence
  44.             Helper.WriteByte(ref Packet, 12, Sequence++);
  45.  
  46.             return Packet;
  47.         }
  48.  
  49.         // Длина пакета
  50.         public int Length { get { return Packet.Length; } }
  51.  
  52.         // Доступ к отдельным каналом по их индексу
  53.         public byte this[int index]
  54.         {
  55.             get { return ((index >= 0) && (index < 512)) ? Packet[18 + index] : Convert.ToByte(0); }
  56.             set
  57.             {
  58.                 if ((index >= 0) && (index < 512))
  59.                 {
  60.                     Packet[18 + index] = value;
  61.                 }
  62.             }
  63.         }
  64.  
  65.         // Идентификатор сети
  66.         public byte Net
  67.         {
  68.             get { return Packet[15]; }
  69.             set { Packet[15] = value; }
  70.         }
  71.  
  72.         // Идентификатор потока
  73.         public byte Universe
  74.         {
  75.             get { return Packet[14]; }
  76.             set { Packet[14] = value; ; }
  77.         }
  78.  
  79.         // Физический порт устройства( только для информации, не обрабатывается)
  80.         public byte Physical
  81.         {
  82.             get { return Packet[13]; }
  83.             set { Packet[13] = value; ; }
  84.         }
  85.  
  86.         // Массив каналов (512)
  87.         public byte[] Data
  88.         {
  89.             get
  90.             {
  91.                 byte[] DMX = new byte[512];
  92.                 Buffer.BlockCopy(Packet, 18, DMX, 0, 512);
  93.  
  94.                 return DMX;
  95.             }
  96.             set
  97.             {
  98.                 Buffer.BlockCopy(value, 0, Packet, 18, Math.Min(value.Length, 512));
  99.             }
  100.         }
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement