public void SendRdm(RdmPacket packet, RdmEndPoint targetAddress, UId targetId, UId sourceId) { if (BlockRDM) { return; } //Fill in addition details packet.Header.SourceId = sourceId; packet.Header.DestinationId = targetId; SubDeviceUId id = targetId as SubDeviceUId; if (id != null) { packet.Header.SubDevice = id.SubDeviceId; } //Create Rdm Packet MemoryStream rdmData = new MemoryStream(); RdmBinaryWriter rdmWriter = new RdmBinaryWriter(rdmData); //Write the RDM sub-start code. rdmWriter.Write((byte)RdmVersions.SubMessage); //Write the RDM packet RdmPacket.WritePacket(packet, rdmWriter); //Write the checksum rdmWriter.WriteNetwork((short)RdmPacket.CalculateChecksum(rdmData.GetBuffer()) + (byte)DmxStartCodes.RDM); //Create sACN Packet RdmNetPacket dmxPacket = new RdmNetPacket(); dmxPacket.Framing.SourceName = SourceName; dmxPacket.Framing.EndpointID = (short)targetAddress.Universe; dmxPacket.RdmNet.RdmData = rdmData.GetBuffer(); SendPacket(dmxPacket, targetAddress); RaiseRdmPacketSent(new NewPacketEventArgs <RdmPacket>(targetAddress, packet)); }
void socket_NewRdmPacket(object sender, NewPacketEventArgs <RdmPacket> e) { //Exit if not from the target device or correct sub device. if (!SubDeviceUId.IsMatch(Id, e.Packet.Header.SourceId, e.Packet.Header.SubDevice)) { return; } RdmPacket replyPacket = ProcessPacket(e.Packet); SetParameterStatus(e.Packet.Header.ParameterId, ParameterStatus.Valid); if (replyPacket != null) { socket.SendRdm(replyPacket, Address, Id); } DeviceInfo.GetReply info = e.Packet as DeviceInfo.GetReply; if (info != null) { DeviceInformation = info; RequestDetails(); RequestLabel(); RequestConfiguration(); RequestHistory(); RequestPersonality(); RequestParameters(); if (!SubDeviceUId.IsSubDevice(Id)) { if (SubDevices.Count != info.SubDeviceCount) { SubDevices.Clear(); for (short n = 1; n <= info.SubDeviceCount; n++) { RdmDeviceBroker subDeviceBroker = new RdmDeviceBroker(socket, new SubDeviceUId(Id, n), Address); SubDevices.Add(subDeviceBroker); subDeviceBroker.Interogate(); } } RaisePropertyChanged("SubDevices"); } } ManufacturerLabel.GetReply manufacturer = e.Packet as ManufacturerLabel.GetReply; if (manufacturer != null) { Manufacturer = manufacturer.Label; } DeviceModelDescription.GetReply model = e.Packet as DeviceModelDescription.GetReply; if (model != null) { Model = model.Description; } DeviceLabel.GetReply label = e.Packet as DeviceLabel.GetReply; if (label != null) { this.label = label.Label; RaisePropertyChanged("Label"); } }