private async void applyBtn_Click(object sender, EventArgs e) { bool startupBtnState = startupHandlerBtn.Enabled; try { this.programmingMouse = true; applyBtn.Enabled = false; defaultBtn.Enabled = false; startupHandlerBtn.Enabled = false; Firmware.LedMode progMode = Firmware.LedMode.AlwaysOn; int progBright = 0; byte progR = 0, progG = 0, progB = 0; Color color = ColorSlider.ToRgbColor(); if (Firmware.GetLED(ref progMode, ref progBright, ref progR, ref progG, ref progB)) { if (progMode == GetLedModeFromRadio() && progBright == ledBrightnessSlider.Value && color.R == progR && color.G == progG && color.B == progB) { Console.WriteLine("Not reprogramming, just applying."); Firmware.EnableCustomLED(); return; } } Console.WriteLine("Reprogramming..."); await Firmware.SetLEDAsync(GetLedModeFromRadio(), ledBrightnessSlider.Value, color.R, color.G, color.B); Firmware.EnableCustomLED(); } catch (FirmwareException ex) { // Mouse may be in a "waiting for write operations" state, better reset the mouse. // Additionally, scroll wheel and LED are most likely turned off, so user should indeed reconnect the mice. MessageBox.Show("Failed to apply changes to the mouse.\n" + "\nIt's highly recommended that you disconnect and reconnect your mice right now to avoid further problems.\n" + "\nAdditional error information: " + ex.Message, "CmAlcorGUI", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { this.programmingMouse = false; applyBtn.Enabled = true; defaultBtn.Enabled = true; startupHandlerBtn.Enabled = startupBtnState; } }
/// <summary> /// /// </summary> private void SetRadioFromLedMode(Firmware.LedMode mode) { switch (mode) { case Firmware.LedMode.AlwaysOff: alwaysOffRadioBtn.Checked = true; break; case Firmware.LedMode.AlwaysOn: alwaysOnRadioBtn.Checked = true; break; case Firmware.LedMode.RapidFire: rapidFireRadioBtn.Checked = true; break; case Firmware.LedMode.Breathing: breathingRadioBtn.Checked = true; break; default: throw new InvalidOperationException(); } }