public void SendSetResponse(PhysicalAddress destination, uint xid, DCP.BlockOptions option, DCP.BlockErrors status)
        {
            Trace.WriteLine("Sending Set " + option.ToString() + " response", null);

            MemoryStream mem = new MemoryStream();

            //ethernet
            Ethernet.Encode(mem, destination, adapter.MacAddress, Ethernet.Type.VLanTaggedFrame);

            //VLAN
            VLAN.Encode(mem, VLAN.Priorities.Priority0, VLAN.Type.PN);

            //Profinet Real Time
            RT.EncodeFrameId(mem, RT.FrameIds.DCP_Get_Set_PDU);

            //Profinet DCP
            DCP.EncodeSetResponse(mem, xid, option, status);

            //Send
            Send(mem);
        }
        public IAsyncResult BeginGetRequest(PhysicalAddress destination, DCP.BlockOptions option)
        {
            Trace.WriteLine("Sending Get " + option.ToString() + " request", null);

            MemoryStream mem = new MemoryStream();

            //ethernet
            Ethernet.Encode(mem, destination, adapter.MacAddress, Ethernet.Type.VLanTaggedFrame);

            //VLAN
            VLAN.Encode(mem, VLAN.Priorities.Priority0, VLAN.Type.PN);

            //Profinet Real Time
            RT.EncodeFrameId(mem, RT.FrameIds.DCP_Get_Set_PDU);

            //Profinet DCP
            UInt16 xid = ++lastXid;

            DCP.EncodeGetRequest(mem, xid, option);
            //start Async
            return(new ProfinetAsyncDcpResult(this, mem, xid));
        }
 public Dictionary <DCP.BlockOptions, object> SendGetRequest(PhysicalAddress destination, int timeoutMs, int retries, DCP.BlockOptions option)
 {
     for (int r = 0; r < retries; r++)
     {
         IAsyncResult asyncResult = BeginGetRequest(destination, option);
         try
         {
             return(EndGetRequest(asyncResult, timeoutMs));
         }
         catch (TimeoutException)
         {
             //continue
         }
     }
     throw new TimeoutException("No response received");
 }
 public DCP.BlockErrors SendSetRequest(PhysicalAddress destination, int timeoutMs, int retries, DCP.BlockOptions option, byte[] data)
 {
     return(SendSetRequest(destination, timeoutMs, retries, option, DCP.BlockQualifiers.Permanent, data));
 }
 public DCP.BlockErrors SendSetRequest(PhysicalAddress destination, int timeoutMs, int retries, DCP.BlockOptions option, DCP.BlockQualifiers qualifiers, byte[] data)
 {
     for (int r = 0; r < retries; r++)
     {
         IAsyncResult asyncResult = BeginSetRequest(destination, option, qualifiers, data);
         try
         {
             return(EndSetRequest(asyncResult, timeoutMs));
         }
         catch (TimeoutException)
         {
             //continue
         }
     }
     throw new TimeoutException("No response received");
 }