public void SendRdm(RdmPacket packet, RdmEndPoint targetAddress, UId targetId, UId sourceId) { //Fill in addition details packet.Header.SourceId = sourceId; packet.Header.DestinationId = targetId; //Sub Devices if (targetId is SubDeviceUId) { packet.Header.SubDevice = ((SubDeviceUId)targetId).SubDeviceId; } //Create Rdm Packet using (var rdmData = new MemoryStream()) { var rdmWriter = new RdmBinaryWriter(rdmData); //Write the RDM packet RdmPacket.WritePacket(packet, rdmWriter); //Write the checksum rdmWriter.WriteNetwork((short)(RdmPacket.CalculateChecksum(rdmData.GetBuffer()) + (int)RdmVersions.SubMessage + (int)DmxStartCodes.RDM)); //Create sACN Packet var rdmPacket = new ArtRdmPacket(); rdmPacket.Address = (byte)targetAddress.Universe; rdmPacket.SubStartCode = (byte)RdmVersions.SubMessage; rdmPacket.RdmData = rdmData.GetBuffer(); Send(rdmPacket, targetAddress); RdmPacketSent?.Invoke(this, new NewPacketEventArgs <RdmPacket>(new IPEndPoint(targetAddress.IpAddress, Port), packet)); } }
private void ProcessPacket(IPEndPoint source, ArtNetPacket packet) { if (packet != null) { if (NewPacket != null) { NewPacket(this, new NewPacketEventArgs <ArtNetPacket>(source, packet)); } ArtRdmPacket rdmPacket = packet as ArtRdmPacket; if (rdmPacket != null && NewRdmPacket != null) { RdmPacket rdm = RdmPacket.ReadPacket(new RdmBinaryReader(new MemoryStream(rdmPacket.RdmData))); NewRdmPacket(this, new NewPacketEventArgs <RdmPacket>(source, rdm)); } } }