Example #1
0
 public void BlinkThenRevert(LedColour colour, int blinkInterval = 100)
 {
     var oldColour = CurrentColour;
     TurnOffLights();
     Thread.Sleep(blinkInterval);
     ChangeColor(colour);
     Thread.Sleep(blinkInterval);
     ChangeColor(oldColour);
 }
Example #2
0
 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);
        }
Example #4
0
 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);
     }
 }
Example #5
0
 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;
         }
     }
 }