private void DeviceConnected(bool isConnected) { if (isConnected) { System.Diagnostics.Trace.WriteLine("Connected " + DateTime.Now); try { m_dataflash = m_connector.ReadDataflash(); } catch { return; } m_connectedDeviceProductId = m_dataflash.ProductId; m_deviceInfo = USBConnector.GetDeviceInfo(m_connectedDeviceProductId); m_hardwareVersion = (m_dataflash.HardwareVersion / 100f).ToString("0.00", CultureInfo.InvariantCulture); m_firmwareVersion = (m_dataflash.FirmwareVersion / 100f).ToString("0.00", CultureInfo.InvariantCulture); UpdateUI(() => { DeviceNameTextBox.Text = m_deviceInfo.Name; HardwareVersionTextBox.Text = m_hardwareVersion; FirmwareVersionTextBox.Text = m_firmwareVersion; BootModeTextBox.Text = m_dataflash.LoadFromLdrom ? "LDROM" : "APROM"; UpdateStatusLabel.Text = @"Device is ready."; SetUpdaterButtonsState(true); }); } else { System.Diagnostics.Trace.WriteLine("Disconnected " + DateTime.Now); m_connectedDeviceProductId = null; m_dataflash = null; UpdateUI(() => { DeviceNameTextBox.Clear(); HardwareVersionTextBox.Clear(); FirmwareVersionTextBox.Clear(); BootModeTextBox.Clear(); UpdateStatusLabel.Text = @"Waiting for device..."; SetUpdaterButtonsState(false); }); } }
private void InitializeWorkspaceFromDataflash([NotNull] Dataflash dataflash) { if (dataflash == null) { throw new ArgumentNullException("dataflash"); } DeviceNameLabel.Text = USBConnector.GetDeviceInfo(dataflash.InfoBlock.ProductID).Name; FirmwareVersionTextBox.Text = (dataflash.InfoBlock.FWVersion / 100f).ToString("0.00", CultureInfo.InvariantCulture); BuildTextBox.Text = m_simple.Build.ToString(); HardwareVersionTextBox.Text = (dataflash.ParamsBlock.HardwareVersion / 100f).ToString("0.00", CultureInfo.InvariantCulture); BootModeTextBox.Text = dataflash.ParamsBlock.BootMode.ToString(); // General -> Power & Temp Tab PowerUpDown.Value = Math.Max(1, Math.Min(dataflash.ParamsBlock.Power / 10m, 75)); TCPowerUpDown.Value = Math.Max(1, Math.Min(dataflash.ParamsBlock.TCPower / 10m, 75)); Step1WCheckBox.Checked = dataflash.ParamsBlock.Status.Step1W; TemperatureTypeComboBox.SelectItem(dataflash.ParamsBlock.IsCelsius); TemperatureUpDown.Value = dataflash.ParamsBlock.Temperature; TemperatureDominantCheckBox.Checked = dataflash.ParamsBlock.Status.TemperatureDominant; PreheatTypeComboBox.SelectItem(dataflash.ParamsBlock.Status.PreheatPercent); PreheatPowerUpDown.Value = dataflash.ParamsBlock.Status.PreheatPercent ? dataflash.ParamsBlock.PreheatPwr : Math.Max(1, Math.Min(dataflash.ParamsBlock.PreheatPwr / 10m, 75)); PreheatTimeUpDown.Value = dataflash.ParamsBlock.PreheatTime / 100m; // General -> Coils Manager Tab ResistanceNiUpDown.Value = dataflash.ParamsBlock.ResistanceNi / 100m; ResistanceNiCheckBox.Checked = dataflash.ParamsBlock.ResistanceNiLocked; ResistanceTiUpDown.Value = dataflash.ParamsBlock.ResistanceTi / 100m; ResistanceTiCheckBox.Checked = dataflash.ParamsBlock.ResistanceTiLocked; ResistanceSSUpDown.Value = dataflash.ParamsBlock.ResistanceSS / 100m; ResistanceSSCheckBox.Checked = dataflash.ParamsBlock.ResistanceSSLocked; ResistanceTCRUpDown.Value = dataflash.ParamsBlock.ResistanceTCR / 100m; ResistanceTCRCheckBox.Checked = dataflash.ParamsBlock.ResistanceTCRLocked; TCRM1UpDown.Value = dataflash.ParamsBlock.TCR[0]; TCRM2UpDown.Value = dataflash.ParamsBlock.TCR[1]; TCRM3UpDown.Value = dataflash.ParamsBlock.TCR[2]; // General -> Modes Tab SelectedModeComboBox.SelectItem(dataflash.ParamsBlock.SelectedMode); TempNiModeCheckBox.Checked = !dataflash.ParamsBlock.DisabledModes.HasFlag(VapeModes.TempNi); TempTiModeCheckBox.Checked = !dataflash.ParamsBlock.DisabledModes.HasFlag(VapeModes.TempTi); TempSSModeCheckBox.Checked = !dataflash.ParamsBlock.DisabledModes.HasFlag(VapeModes.TempSS); TCRModeCheckBox.Checked = !dataflash.ParamsBlock.DisabledModes.HasFlag(VapeModes.TCR); PowerModeCheckBox.Checked = !dataflash.ParamsBlock.DisabledModes.HasFlag(VapeModes.Power); BypassModeCheckBox.Checked = !dataflash.ParamsBlock.DisabledModes.HasFlag(VapeModes.Bypass); SmartModeCheckBox.Checked = !dataflash.ParamsBlock.DisabledModes.HasFlag(VapeModes.Start); // General -> Controls Tab Clicks2ComboBox.SelectItem(dataflash.ParamsBlock.MClicks[0]); Clicks3ComboBox.SelectItem(dataflash.ParamsBlock.MClicks[1]); Clicks4ComboBox.SelectItem(dataflash.ParamsBlock.MClicks[2]); WakeUpByPlusMinusCheckBox.Checked = dataflash.ParamsBlock.Status.WakeUpByPlusMinus; // General -> Stats Tab PuffsUpDown.Value = Math.Max(0, Math.Min(dataflash.InfoBlock.PuffCount, 99999)); PuffsTimeUpDown.Value = Math.Max(0, Math.Min(dataflash.InfoBlock.TimeCount / 10m, 99999)); // Screen -> Display Tab BrightnessTrackBar.Value = dataflash.ParamsBlock.Contrast; IdleTimeUpDow.Value = dataflash.ParamsBlock.ScreenDimTimeout; StealthModeCheckBox.Checked = dataflash.ParamsBlock.StealthOn; FlippedModeCheckBox.Checked = dataflash.ParamsBlock.Status.Flipped; // Screen -> Layout Tab ThirdLineContentComboBox.SelectItem(dataflash.ParamsBlock.ThirdLineContent); BatteryPercentsCheckBox.Checked = dataflash.ParamsBlock.Status.BatteryPercent; ShowLogoCheckBox.Checked = !dataflash.ParamsBlock.Status.NoLogo; if (!dataflash.ParamsBlock.Status.AnalogClock) { ClockTypeComboBox.SelectItem(ClockType.Disabled); } else if (dataflash.ParamsBlock.Status.AnalogClock && dataflash.ParamsBlock.Status.DigitalClock) { ClockTypeComboBox.SelectItem(ClockType.Digital); } else if (dataflash.ParamsBlock.Status.AnalogClock) { ClockTypeComboBox.SelectItem(ClockType.Analog); } UseClassicMenuCheckBox.Checked = dataflash.ParamsBlock.Status.UseClassicMenu; // Screen -> Screensaver Tab ScreensaverTypeComboBox.SelectItem(dataflash.ParamsBlock.ScreensaverType); ScreenProtectionTimeComboBox.SelectItem(dataflash.ParamsBlock.ScreenProtectionTime); // Developer -> Expert ShuntCorrectionUpDown.Value = Math.Max((byte)85, Math.Min(dataflash.ParamsBlock.ShuntCorrection, (byte)115)); BatteryModelComboBox.SelectItem(dataflash.ParamsBlock.SelectedBatteryModel); }
public MainForm() { InitializeComponent(); try { this.usb = new USBConnector(); } catch (Exception e) { MessageBox.Show(e.Message); } this.RefreshRate.Interval = 10; try { if (this.usb.hidDevice.IsOpen) { usbStatus.Image = Properties.Resources.usb_ok; this.RefreshRate.Start(); } } catch { MessageBox.Show("Could not connect to device!\nClick status icon to reconnect!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); //Environment.Exit(0); } this.ModeBox.SelectedIndex = 0; this.mailCheckInterval.SelectedIndex = 0; try { if (!File.Exists(Application.StartupPath + "\\Settings.ini")) { ini = new IniFile(Application.StartupPath + "\\Settings.ini"); } else { ini = new IniFile(Application.StartupPath + "\\Settings.ini"); if (ini.IniReadValue("Settings", "User") != string.Empty) { txtUserName.Text = Decrypt(ini.IniReadValue("Settings", "User"), true); } if (ini.IniReadValue("Settings", "Pass") != string.Empty) { txtUserPassword.Text = Decrypt(ini.IniReadValue("Settings", "Pass"), true); } if (ini.IniReadValue("Settings", "R") != string.Empty) { R.Value = Convert.ToInt32(ini.IniReadValue("Settings", "R")); } if (ini.IniReadValue("Settings", "G") != string.Empty) { G.Value = Convert.ToInt32(ini.IniReadValue("Settings", "G")); } if (ini.IniReadValue("Settings", "B") != string.Empty) { B.Value = Convert.ToInt32(ini.IniReadValue("Settings", "B")); } if (ini.IniReadValue("Settings", "Speed") != string.Empty) { Speed.Value = Convert.ToInt32(ini.IniReadValue("Settings", "Speed")); } if (ini.IniReadValue("Settings", "PulseMode") != string.Empty) { ModeBox.SelectedIndex = Convert.ToInt32(ini.IniReadValue("Settings", "PulseMode")); } if (ini.IniReadValue("Settings", "MailInterval") != string.Empty) { mailCheckInterval.SelectedIndex = Convert.ToInt32(ini.IniReadValue("Settings", "MailInterval")); } if (ini.IniReadValue("Settings", "UnreadCount") != string.Empty) { EnableUnreadCount.Checked = Convert.ToBoolean(ini.IniReadValue("Settings", "UnreadCount")); } } } catch { MessageBox.Show("Settings read error!\nCheck settings file!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public DeviceMonitorWindow([NotNull] ApplicationConfiguration configuration, [NotNull] USBConnector usbConnector, [NotNull] COMConnector comConnector) { if (configuration == null) { throw new ArgumentNullException("configuration"); } if (usbConnector == null) { throw new ArgumentNullException("usbConnector"); } if (comConnector == null) { throw new ArgumentNullException("comConnector"); } m_configuration = configuration; m_usbConnector = usbConnector; m_comConnector = comConnector; InitializeComponent(); InitializeControls(); InitializeChart(); InitializeSeries(); InitializeContextMenus(); m_comConnector.Connected += COMConnector_Connected; m_comConnector.Disconnected += COMConnector_Disconnected; m_comConnector.MonitorDataReceived += ComConnector_MonitorDataReceived; Load += (s, e) => EnsureConnection(); Closing += (s, e) => { if (m_realClosing) { return; } StopRecording(); SaveCheckedSeries(); e.Cancel = true; m_realClosing = true; new Thread(() => { // The serial port cannot close until the DataReceived event handler stops running. // But the Invoke() call cannot complete until the UI thread goes idle and pumps the message loop. // It isn't idle, it is stuck in the Close() call. So the event handler cannot make progress because // it is stuck in the Invoke() call and your main thread cannot make progress because // it is stuck in the Close() call, deadlock city. if (m_usbConnector.IsDeviceConnected) { m_usbConnector.SetupDeviceMonitor(false); } m_comConnector.MonitorDataReceived -= ComConnector_MonitorDataReceived; m_comConnector.Connected -= COMConnector_Connected; m_comConnector.Disconnected -= COMConnector_Disconnected; if (m_isComPortConnected) { m_comConnector.Disconnect(); } UpdateUI(Close); }).Start(); }; }