using Aurora; using Aurora.Api; using Aurora.View; using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; using System.Windows.Input; namespace AuroraLaser.Amplitude { public class WinLaserSettingViewModel : NotifyPropertyChangedBase { static readonly Logger LOG = new Logger("WinLaserSettingViewModel"); bool IsActivated = false; IAuroraEnvironment m_AuroraEnv; private readonly LaserSatsumaDisplay m_LaserDevice = null; public LaserSatsumaDisplay LaserDevice { get { return m_LaserDevice; } } // Pulse Picker Frequence private short m_WritePulsePickerFrequency = 0; public short WritePulsePickerFrequency { get => m_WritePulsePickerFrequency; set => SetProperty(ref m_WritePulsePickerFrequency, value); } public ICommand CMD_SetPulsePickerFrequency { get; } // Transmission Percent private ushort m_WriteTransmissionPercent = 0; public ushort WritTransmissionPercent { get => m_WriteTransmissionPercent; set => SetProperty(ref m_WriteTransmissionPercent, value); } public ICommand CMD_SetTransmissionPercent { get; } // Pulse Picker Frequence Min private ushort m_WritePulsePickerFrequencyMin = 0; public ushort WritePulsePickerFrequencyMin { get => m_WritePulsePickerFrequencyMin; set => SetProperty(ref m_WritePulsePickerFrequencyMin, value); } public ICommand CMD_SetPulsePickerFrequencyMin { get; } // Width private short m_WriteWidth = 0; public short WriteWidth { get => m_WriteWidth; set => SetProperty(ref m_WriteWidth, value); } public ICommand CMD_SetWidth { get; } // Delay private short m_WriteDelay = 0; public short WriteDelay { get => m_WriteDelay; set => SetProperty(ref m_WriteDelay, value); } public ICommand CMD_SetDelay { get; } // Modulator Frequence private short m_WriteFrequency = 0; public short WriteFrequency { get => m_WriteFrequency; set => SetProperty(ref m_WriteFrequency, value); } public ICommand CMD_SetFrequency { get; } // Frequency Min private ushort m_WriteFrequencyMin = 0; public ushort WriteFrequencyMin { get => m_WriteFrequencyMin; set => SetProperty(ref m_WriteFrequencyMin, value); } public ICommand CMD_SetFrequencyMin { get; } // BurstMode private short m_WriteBurstMode = 0; public short WriteBurstMode { get => m_WriteBurstMode; set => SetProperty(ref m_WriteBurstMode, value); } public ICommand CMD_SetBurstMode { get; } // Pulse Picker Trigger public List PulsePickerTriggerList { get; set; } private eLaserTrigger m_eSelectedPulsePickerTrigger = eLaserTrigger.EXTERNAL; public eLaserTrigger SelectedPulsePickerTrigger { get => m_eSelectedPulsePickerTrigger; set { m_eSelectedPulsePickerTrigger = value; m_LaserDevice.SetPulsePickerTrigger(value); //SetProperty(ref m_eSelectedPulsePickerTrigger, value); // OnPropertyChanged("PulsePickerTrigger"); } } // Pulse Picker Alignment public List PulsePickerAlignmentList { get; set; } private eLaserAlignment m_eSelectedPulsePickerAlignment = eLaserAlignment.NO; public eLaserAlignment SelectedPulsePickerAlignment { get => m_eSelectedPulsePickerAlignment; set { m_eSelectedPulsePickerAlignment = value; m_LaserDevice.SetPulsePickerAlignment(value); //SetProperty(ref m_eSelectedPulsePickerAlignment, value); } } // Trigger public List TriggerList { get; set; } private eLaserTrigger m_eSelectedTrigger = eLaserTrigger.EXTERNAL; public eLaserTrigger SelectedTrigger { get => m_eSelectedTrigger; set { if (m_eSelectedTrigger != value) { // Laser에 Set하는 메소드... m_eSelectedTrigger = value; m_LaserDevice.SetTrigger(value); } } } // Gate public List GateList { get; set; } private eLaserGate m_eSelectedGate = eLaserGate.EXTERNAL; public eLaserGate SelectedGate { get => m_eSelectedGate; set { m_eSelectedGate = value; m_LaserDevice.SetGate(value); //SetProperty(ref m_eSelectedGate, value); } } // Alignment public List AlignmentList { get; set; } private eLaserAlignment m_eSelectedAlignment = eLaserAlignment.NO; public eLaserAlignment SelectedAlignment { get => m_eSelectedAlignment; set { m_eSelectedAlignment = value; m_LaserDevice.SetAlignment(value); //SetProperty(ref m_eSelectedAlignment, value); } } // Transmission public List TransmissionList { get; set; } private eLaserTransmission m_eSelectedTransmission = eLaserTransmission.Software; public eLaserTransmission SelectedTransmission { get => m_eSelectedTransmission; set { m_eSelectedTransmission = value; //m_LaserDevice. //SetProperty(ref m_eSelectedTransmission, value); } } // Laser Power Transmission public List PowerTransmissionList { get; set; } private eLaserPowerTransmission m_eSelectedPowerTransmission = eLaserPowerTransmission.LASER_POWER; public eLaserPowerTransmission SelectedPowerTransmission { get => m_eSelectedPowerTransmission; set { m_eSelectedPowerTransmission = value; //=> SetProperty(ref m_eSelectedPowerTransmission, value); } } public WinLaserSettingViewModel(IAuroraEnvironment aurora, string deviceId) { m_AuroraEnv = aurora; m_LaserDevice = aurora.DeviceManager[deviceId] as LaserSatsumaDisplay; CMD_SetPulsePickerFrequency = new DelegateCommand(SetPulsePickerFrequency); CMD_SetPulsePickerFrequencyMin = new DelegateCommand(SetPulsePickerFrequencyMin); CMD_SetTransmissionPercent = new DelegateCommand(SetTransmissionPercent); CMD_SetWidth = new DelegateCommand(SetWidth); CMD_SetDelay = new DelegateCommand(SetDelay); CMD_SetFrequency = new DelegateCommand(SetFrequency); CMD_SetBurstMode = new DelegateCommand(SetBurstMode); Init_PulsePickerTriggerList(); Init_PulsePickerAlignmentList(); Init_TriggerList(); Init_GateList(); Init_AlignmentList(); Init_TransmissionList(); Init_PowerTransmissionList(); Observable.Merge( aurora.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_ACTIVATED), aurora.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_DEACTIVATED) ).Select(msg => msg.Param as string ).Where(x => x == m_LaserDevice?.DeviceId ).ObserveOnDispatcher( ).Subscribe( x => OnDeviceActiveChanged() ); OnDeviceActiveChanged(); } private void OnDeviceActiveChanged() { IsActivated = m_LaserDevice.IsActivated; if (m_LaserDevice.IsActivated) { m_WritePulsePickerFrequency = (short)m_LaserDevice.GetPulsePickerFrequency(); OnPropertyChanged("WritePulsePickerFrequency"); if (m_LaserDevice.GetPulsePickerTrigger() == false) { m_eSelectedPulsePickerTrigger = eLaserTrigger.EXTERNAL; } else { m_eSelectedPulsePickerTrigger = eLaserTrigger.INTERNAL; } OnPropertyChanged("SelectedPulsePickerTrigger"); if (m_LaserDevice.GetPulsePickerAlignment() == false) { m_eSelectedPulsePickerAlignment = eLaserAlignment.NO; } else { m_eSelectedPulsePickerAlignment = eLaserAlignment.YES; } OnPropertyChanged("SelectedPulsePickerAlignment"); m_WriteBurstMode = (short)m_LaserDevice.GetBurstMode(); OnPropertyChanged("WriteBurstMode"); m_WriteWidth = (short)m_LaserDevice.GetWidth(); OnPropertyChanged("WriteWidth"); m_WriteDelay = (short)m_LaserDevice.GetDelay(); OnPropertyChanged("WriteDelay"); m_WriteFrequency = (short)m_LaserDevice.GetFrequency(); OnPropertyChanged("WriteFrequency"); if (m_LaserDevice.GetTrigger() == false) { m_eSelectedTrigger = eLaserTrigger.EXTERNAL; } else { m_eSelectedTrigger = eLaserTrigger.INTERNAL; } OnPropertyChanged("SelectedTrigger"); if (m_LaserDevice.GetGate() == false) { m_eSelectedGate = eLaserGate.INTERNAL; } else { m_eSelectedGate = eLaserGate.EXTERNAL; } OnPropertyChanged("SelectedGate"); if (m_LaserDevice.GetAlignment() == true) { m_eSelectedAlignment = eLaserAlignment.YES; } else { m_eSelectedAlignment = eLaserAlignment.NO; } OnPropertyChanged("SelectedAlignment"); m_WriteTransmissionPercent = (ushort)(m_LaserDevice.GetTransmissionPercent() / 100); OnPropertyChanged("WriteTransmissionPercent"); } else { } } protected void OnPropertyChanged(string propertyName) { if (propertyName == "Trigger") { ; } } private void SetWidth(object obj) { m_LaserDevice.SetWidth(WriteWidth); } private void SetDelay(object obj) { m_LaserDevice.SetDelay(WriteDelay); } private void SetFrequency(object obj) { m_LaserDevice.SetFrequency(WriteFrequency); } private void SetPulsePickerFrequency(object obj) { m_LaserDevice.SetPulsePickerFrequency(WritePulsePickerFrequency); } private void SetTransmissionPercent(object obj) { m_LaserDevice.SetTransmissionPercent((ushort)(WritTransmissionPercent * 100)); } private void SetPulsePickerFrequencyMin(object obj) { m_LaserDevice.SetPulsePickerFrequencyMin((ushort)WriteFrequency); } private void SetFrequencyMin(object obj) { m_LaserDevice.SetPulsePickerFrequency(WriteFrequency); } private void SetBurstMode(object obj) { m_LaserDevice.SetBurstMode(WriteBurstMode); } private void Init_PulsePickerTriggerList() { PulsePickerTriggerList = Enum.GetValues(typeof(eLaserTrigger)).Cast().ToList(); } private void Init_PulsePickerAlignmentList() { PulsePickerAlignmentList = Enum.GetValues(typeof(eLaserAlignment)).Cast().ToList(); } private void Init_TriggerList() { TriggerList = Enum.GetValues(typeof(eLaserTrigger)).Cast().ToList(); } private void Init_GateList() { GateList = Enum.GetValues(typeof(eLaserGate)).Cast().ToList(); } private void Init_AlignmentList() { AlignmentList = Enum.GetValues(typeof(eLaserAlignment)).Cast().ToList(); } private void Init_TransmissionList() { TransmissionList = Enum.GetValues(typeof(eLaserTransmission)).Cast().ToList(); } private void Init_PowerTransmissionList() { PowerTransmissionList = Enum.GetValues(typeof(eLaserPowerTransmission)).Cast().ToList(); } //public int SetTrigger(eLaserTrigger eTrigger) //{ // m_LaserDevice.SetTrigger(eTrigger); // return 1; //} } }