public Task <SaveResult> SendSignalRequest(ICaptureDevice adapter, string macAddress) { var disposables = new CompositeDisposable(); var transport = new ProfinetEthernetTransport(adapter); transport.Open(); transport.AddDisposableTo(disposables); try { System.Net.NetworkInformation.PhysicalAddress deviceAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(macAddress); DCP.BlockErrors err = transport.SendSetSignalRequest(deviceAddress, timeoutInMilliseconds, retries); if (err != DCP.BlockErrors.NoError) { return(Task.FromResult(new SaveResult(false, err.ToString()))); } return(Task.FromResult(new SaveResult(true, err.ToString()))); } catch (Exception e) { return(Task.FromResult(new SaveResult(false, e.Message))); } finally { disposables.Dispose(); } }
public DCP.BlockErrors EndSetRequest(IAsyncResult result, int timeoutMs) { ProfinetAsyncDcpResult r = (ProfinetAsyncDcpResult)result; if (result.AsyncWaitHandle.WaitOne(timeoutMs)) { DCP.BlockErrors ret = r.Result.ContainsKey(DCP.BlockOptions.Control_Response) ? ((DCP.ResponseStatus)r.Result[DCP.BlockOptions.Control_Response]).Error : DCP.BlockErrors.NoError; r.Dispose(); return(ret); } else { r.Dispose(); throw new TimeoutException("No response received"); } }
public Task <SaveResult> SendSettings(ICaptureDevice adapter, string macAddress, Device newSettings, bool permanent) { var disposables = new CompositeDisposable(); var transport = new ProfinetEthernetTransport(adapter); transport.Open(); transport.AddDisposableTo(disposables); try { System.Net.NetworkInformation.PhysicalAddress deviceAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(macAddress); DCP.BlockErrors err = transport.SendSetNameRequest(deviceAddress, timeoutInMilliseconds, retries, newSettings.Name, permanent); if (err != DCP.BlockErrors.NoError) { return(Task.FromResult(new SaveResult(false, err.ToString()))); } System.Net.IPAddress ip = System.Net.IPAddress.Parse(newSettings.IP); System.Net.IPAddress subnet = System.Net.IPAddress.Parse(newSettings.SubnetMask); System.Net.IPAddress gateway = System.Net.IPAddress.Parse(newSettings.Gateway); err = transport.SendSetIpRequest(deviceAddress, timeoutInMilliseconds, retries, ip, subnet, gateway, permanent); if (err != DCP.BlockErrors.NoError) { return(Task.FromResult(new SaveResult(false, err.ToString()))); } return(Task.FromResult(new SaveResult(true, err.ToString()))); } catch (Exception e) { return(Task.FromResult(new SaveResult(false, e.Message))); } finally { disposables.Dispose(); } }
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); }