public void BlinkThenRevert(LedColour colour, int blinkInterval = 100) { var oldColour = CurrentColour; TurnOffLights(); Thread.Sleep(blinkInterval); ChangeColor(colour); Thread.Sleep(blinkInterval); ChangeColor(oldColour); }
private void SetLight(LedColour ledColour) { if (this.red != null) { this.red.Write(ledColour.Red); } if (this.green != null) { this.green.Write(ledColour.Green); } if (this.blue != null) { this.blue.Write(ledColour.Blue); } }
public bool UpdateDevice(Dictionary <DeviceKeys, Color> keyColors, DoWorkEventArgs e, bool forced = false) { uint maxKbLength = 0; Dictionary <Color, List <Keyboard_LEDIndex> > kbIndices = null; if (sbKeyboard != null) { kbIndices = new Dictionary <Color, List <Keyboard_LEDIndex> >(); } LedColour[] mouseColors = null; foreach (KeyValuePair <DeviceKeys, Color> kv in keyColors) { if (e.Cancel) { return(false); } if (kbIndices != null) { var kbLedIdx = GetKeyboardMappingLedIndex(kv.Key); if (kbLedIdx != Keyboard_LEDIndex.NotApplicable) { if (!kbIndices.ContainsKey(kv.Value)) { kbIndices[kv.Value] = new List <Keyboard_LEDIndex>(1); } var list = kbIndices[kv.Value]; list.Add(kbLedIdx); if (list.Count > maxKbLength) { maxKbLength = (uint)list.Count; } } } if (sbMouse != null) { int moosIdx = GetMouseMappingIndex(kv.Key); if (moosIdx >= 0 && moosIdx <= MouseMapping.Length) { if (mouseColors == null) { mouseColors = new LedColour[MouseMapping.Length]; } mouseColors[moosIdx].a = kv.Value.A; mouseColors[moosIdx].r = kv.Value.R; mouseColors[moosIdx].g = kv.Value.G; mouseColors[moosIdx].b = kv.Value.B; } } } uint numKbGroups = 0; uint[] kbGroupsArr = null; LedPattern[] kbPatterns = null; LedColour[] kbColors = null; if (kbIndices != null) { numKbGroups = (uint)kbIndices.Count; kbGroupsArr = new uint[numKbGroups * (maxKbLength + 1)]; kbPatterns = new LedPattern[numKbGroups]; kbColors = new LedColour[numKbGroups]; uint currGroup = 0; foreach (var kv in kbIndices) { if (e.Cancel) { return(false); } kbPatterns[currGroup] = LedPattern.Static; kbColors[currGroup].a = kv.Key.A; kbColors[currGroup].r = kv.Key.R; kbColors[currGroup].g = kv.Key.G; kbColors[currGroup].b = kv.Key.B; uint i = currGroup * (maxKbLength + 1); kbGroupsArr[i++] = (uint)kv.Value.Count; foreach (Keyboard_LEDIndex idx in kv.Value) { kbGroupsArr[i++] = (uint)idx; } currGroup++; } kbIndices = null; } lock (action_lock) { if (e.Cancel) { return(false); } if (sbKeyboard != null && numKbGroups > 0) { try { if (sbKeyboardSettings == null) { sbKeyboardSettings = new LedSettings(); sbKeyboardSettings.persistentInDevice = false; sbKeyboardSettings.globalPatternMode = false; sbKeyboardSettings.pattern = LedPattern.Static; sbKeyboardSettings.payloadData = new LedPayloadData(); } sbKeyboardSettings.payloadData = sbKeyboard.LedPayloadInitialize(sbKeyboardSettings.payloadData.Value, numKbGroups, maxKbLength, 1); sbKeyboardSettings.payloadData = sbKeyboard.LedPayloadFillupAll(sbKeyboardSettings.payloadData.Value, numKbGroups, kbPatterns, maxKbLength + 1, kbGroupsArr, 1, 1, kbColors); sbKeyboard.SetLedSettings(sbKeyboardSettings); } catch (Exception exc) { Global.logger.Error("Failed to Update Device " + sbKeyboardInfo.friendlyName + ": " + exc.ToString()); return(false); } finally { if (sbKeyboardSettings != null && sbKeyboardSettings.payloadData.HasValue && sbKeyboardSettings.payloadData.Value.opaqueSize > 0) { sbKeyboardSettings.payloadData = sbKeyboard.LedPayloadCleanup(sbKeyboardSettings.payloadData.Value, numKbGroups); } } } if (e.Cancel) { return(false); } if (sbMouse != null && mouseColors != null) { if (sbMouseSettings == null) { sbMouseSettings = new LedSettings(); sbMouseSettings.persistentInDevice = false; sbMouseSettings.globalPatternMode = false; sbMouseSettings.pattern = LedPattern.Static; sbMouseSettings.payloadData = new LedPayloadData(); } if (sbMouseSettings.payloadData.Value.opaqueSize == 0) { var mousePatterns = new LedPattern[mouseColors.Length]; var mouseGroups = new uint[MouseMapping.Length * 2]; for (int i = 0; i < MouseMapping.Length; i++) { mouseGroups[(i * 2) + 0] = 1; //1 LED in group mouseGroups[(i * 2) + 1] = (uint)MouseMapping[i].Key; //Which LED it is mousePatterns[i] = LedPattern.Static; //LED has a host-controlled static color } try { sbMouseSettings.payloadData = sbMouse.LedPayloadInitialize(sbMouseSettings.payloadData.Value, sbMouseInfo.totalNumLeds, 1, 1); sbMouseSettings.payloadData = sbMouse.LedPayloadFillupAll(sbMouseSettings.payloadData.Value, (uint)mouseColors.Length, mousePatterns, 2, mouseGroups, 1, 1, mouseColors); } catch (Exception exc) { Global.logger.Error("Failed to setup data for " + sbMouseInfo.friendlyName + ": " + exc.ToString()); if (sbMouseSettings.payloadData.Value.opaqueSize > 0) { sbMouseSettings.payloadData = sbMouse.LedPayloadCleanup(sbMouseSettings.payloadData.Value, sbMouseInfo.totalNumLeds); } return(false); } } else { try { for (int i = 0; i < mouseColors.Length; i++) { sbMouseSettings.payloadData = sbMouse.LedPayloadFillupLedColour(sbMouseSettings.payloadData.Value, (uint)i, 1, mouseColors[i], false); } } catch (Exception exc) { Global.logger.Error("Failed to fill color data for " + sbMouseInfo.friendlyName + ": " + exc.ToString()); return(false); } } try { sbMouse.SetLedSettings(sbMouseSettings); } catch (Exception exc) { Global.logger.Error("Failed to Update Device " + sbMouseInfo.friendlyName + ": " + exc.ToString()); return(false); } } } return(true); }
private void ChangeColor(LedColour colour) { lock (_lockObject) { switch (colour) { case LedColour.Red: CurrentColour = LedColour.Red; SetRGB(true, false, false); break; case LedColour.Green: CurrentColour = LedColour.Green; SetRGB(false, true,false); break; case LedColour.Blue: CurrentColour = LedColour.Blue; SetRGB(false, false,true); break; case LedColour.Yellow: CurrentColour = LedColour.Yellow; SetRGB(false, true,true); break; case LedColour.White: CurrentColour = LedColour.White; SetRGB(true, true,true); break; case LedColour.Purple: CurrentColour = LedColour.Purple; SetRGB(true, false,true); break; case LedColour.Off: CurrentColour = LedColour.Off; SetRGB(false, false,false); break; } } }