private void UpdateOptions() { int addressCount = _sequenceItem.Addresses.Count; if (addressCount == 0) { Commands = new Dictionary <ELLDeviceSequence.ELLCommands, string>(); Directions = new Dictionary <ELLBaseDevice.DeviceDirection, string>(); } else if (addressCount == 1) { char address = _sequenceItem.Addresses.First(); DeviceID.DeviceTypes deviceType = (_owner.DeviceTypes.ContainsKey(address)) ? _owner.DeviceTypes[address] : DeviceID.DeviceTypes.Shutter; Commands = _deviceCommands[deviceType].ToDictionary(i => i, i => i.GetStringValue()); Directions = _deviceDirections[deviceType]; if ((Commands.Count != 0) && (Directions.Count != 0)) { if (!Commands.ContainsKey(_sequenceItem.Command)) { _sequenceItem.Command = Commands.First().Key; } if (!Directions.ContainsKey(_sequenceItem.Parameter2)) { _sequenceItem.Parameter2 = Directions.Any() ? Directions.First().Key : ELLBaseDevice.DeviceDirection.Linear; } } } else { List <ELLDeviceSequence.ELLCommands> synchCommands = new List <ELLDeviceSequence.ELLCommands>(_synchroDeviceCommands); List <DeviceID.DeviceTypes> deviceTypes = _sequenceItem.Addresses.Select(c => _owner.DeviceTypes[c]).Distinct().ToList(); foreach (DeviceID.DeviceTypes deviceType in deviceTypes) { List <ELLDeviceSequence.ELLCommands> synchCommands2 = new List <ELLDeviceSequence.ELLCommands>(synchCommands); foreach (ELLDeviceSequence.ELLCommands cmd in synchCommands2) { if (!_deviceCommands[deviceType].Contains(cmd)) { synchCommands.Remove(cmd); } } } Commands = synchCommands.ToDictionary(i => i, i => i.GetStringValue()); Directions = _deviceDirections[deviceTypes[0]]; if (!Commands.ContainsKey(_sequenceItem.Command)) { _sequenceItem.Command = Commands.First().Key; } if (!Directions.ContainsKey(_sequenceItem.Parameter2)) { _sequenceItem.Parameter2 = Directions.Any() ? Directions.First().Key : ELLBaseDevice.DeviceDirection.Linear; } } UpdateAllowZero(); _owner?.OnUpdate(); }
private void ConnectEx() { if (ELLDevicePort.IsConnected) { DisconnectEx(); } else { bool connected; try { connected = ELLDevicePort.Connect(SelectedPort); } catch (Exception ex) { OutputUpdate(ex.Message, OutputItem.OutputItemType.Error); connected = false; } IsConnected = ELLDevicePort.IsConnected; if (!connected) { return; } if (MinSearchLimit > MaxSearchLimit) { MaxSearchLimit = MinSearchLimit; } ELLDevicePort.DataSent = DataSent; ELLDevicePort.DataReceived = DataReceived; _deviceViewModels.Clear(); _ellDevice.ClearDevices(); List <string> devices = _ellDevice.ScanAddresses(MinSearchLimit, MaxSearchLimit); if (devices.Count > 0) { foreach (string deviceID in devices) { _ellDevice.Configure(deviceID); _ellDevice.Connect(); char address = deviceID[0]; ELLDeviceBaseViewModel vm = null; DeviceID.DeviceTypes deviceType = _ellDevice.AddressedDevice(address).DeviceInfo.DeviceType; if (deviceType == DeviceID.DeviceTypes.Paddle) { ELLPaddlePolariser device = _ellDevice.AddressedDevice(address) as ELLPaddlePolariser; vm = new ELLPaddlePolariserViewModel(this, device); } else { ELLDevice device = _ellDevice.AddressedDevice(address) as ELLDevice; switch (deviceType) { case DeviceID.DeviceTypes.Actuator: vm = new ELLActuatorViewModel(this, device); break; case DeviceID.DeviceTypes.Shutter: vm = new ELLShutterViewModel(this, device, 2); break; case DeviceID.DeviceTypes.Shutter4: vm = new ELLShutterViewModel(this, device, 4); break; case DeviceID.DeviceTypes.Rotator: vm = new ELLStageViewModel(this, device, 2, true, true, false); break; case DeviceID.DeviceTypes.OpticsRotator: vm = new ELLStageViewModel(this, device, 2, true, true, true); break; case DeviceID.DeviceTypes.RotaryStage18: vm = new ELLStageViewModel(this, device, 2, true, false, true); break; case DeviceID.DeviceTypes.RotaryStage: vm = new ELLStageViewModel(this, device, 2, true, false, false); break; case DeviceID.DeviceTypes.LinearStage: case DeviceID.DeviceTypes.LinearStage2: vm = new ELLStageViewModel(this, device, 2, false, false, false); break; case DeviceID.DeviceTypes.LinearStage17: case DeviceID.DeviceTypes.LinearStage20: vm = new ELLStageViewModel(this, device, 2, false, false, true); break; } } if (vm != null) { _deviceViewModels[address] = vm; foreach (ELLMotorViewModel motor in vm.Motors) { motor.GetMotorInfoDirect(); } vm.InitializeViewModel(); } _sequenceViewModel.DeviceTypes = _deviceViewModels.ToDictionary(item => item.Key, item => item.Value.Device.DeviceInfo.DeviceType); } } else { DisconnectEx(); } } }