public override async Task<InitializationResult> Initialize() { return await Task.Run(() => { for (uint i = 1; ; i++) { var delcom = new DelcomHid(); if (delcom.OpenNthDevice(i) != 0) break; var physicalDevice = new PhysicalDevice(delcom); var delcomDevice = new DelcomDevice { PhysicalDevice = physicalDevice }; var physicalDeviceId = physicalDevice.Id; var configuredDevice = delcomConfiguration.OutputDevices.OfType<DelcomDevice>().SingleOrDefault(d => d.PhysicalDeviceId == physicalDeviceId); var delcomDeviceInfo = new DelcomDeviceInfo(delcomDevice, configuredDevice, delcomConfiguration); if (configuredDevice != null) { ConfiguredDevices.Add(delcomDeviceInfo); } else { AvailableDevices.Add(delcomDeviceInfo); } } foreach (var missingDevice in delcomConfiguration.OutputDevices.Where(od => ConfiguredDevices.All(cd => cd.Name != od.Name))) ConfiguredDevices.Add(new DelcomDeviceInfo(null, missingDevice, delcomConfiguration)); return InitializationResult.Succeeded; }); }
public DelcomDeviceInfo(DelcomDevice delcomDevice, IOutputDevice configuredDevice, IOutputConfiguration delcomConfiguration) { IndicateCommand = new DelegateCommand(Indicate); Device = delcomDevice; if (configuredDevice != null) { Name = configuredDevice.Name; Profile = configuredDevice.Profile.Id.ToString(); } else { for (int i = 0;; i++) { var currentname = defaultName + " #" + i; if (delcomConfiguration.OutputDevices.All(d => d.Name != currentname)) { Name = currentname; break; } } } }