public void Configure(SlaveInfo rootSlaveInfo = null) { SlaveInfo actualSlaveInfo; IList <SlaveInfo> slaveInfoSet; IList <SlaveInfo> actualSlaveInfoSet; NetworkInterface networkInterface; networkInterface = NetworkInterface.GetAllNetworkInterfaces().Where(nic => nic.Name == _settings.InterfaceName).FirstOrDefault(); if (networkInterface?.OperationalStatus != OperationalStatus.Up) { throw new Exception($"Network interface '{_settings.InterfaceName}' is not linked. Aborting action."); } #region "PreOp" actualSlaveInfo = EcUtilities.ScanDevices(this.Context, _settings.InterfaceName, null); if (rootSlaveInfo == null) { rootSlaveInfo = actualSlaveInfo; rootSlaveInfo.Descendants().ToList().ForEach(current => { ExtensibilityHelper.CreateDynamicData(_settings.EsiDirectoryPath, _extensionFactory, current); }); } slaveInfoSet = rootSlaveInfo.Descendants().ToList(); actualSlaveInfoSet = actualSlaveInfo.Descendants().ToList(); this.ValidateSlaves(slaveInfoSet, actualSlaveInfoSet); this.ConfigureSlaves(slaveInfoSet); this.ConfigureIoMap(slaveInfoSet); this.ConfigureDc(); this.ConfigureSync01(slaveInfoSet); #endregion #region "SafeOp" EcUtilities.CheckErrorCode(this.Context, EcHL.CheckSafeOpState(this.Context), nameof(EcHL.CheckSafeOpState)); #endregion #region "Op" EcUtilities.CheckErrorCode(this.Context, EcHL.RequestOpState(this.Context), nameof(EcHL.RequestOpState)); #endregion if (_watchdogTask == null) { _watchdogTask = Task.Run(() => this.WatchdogRoutine(), _cts.Token); } }