示例#1
0
        private static string GetModelName(IRGBDeviceInfo info, _CorsairChannelDeviceInfo channelDeviceInfo)
        {
            switch (channelDeviceInfo.type)
            {
            case CorsairChannelDeviceType.Invalid:
                return("Invalid");

            case CorsairChannelDeviceType.FanHD:
                return("HD Fan");

            case CorsairChannelDeviceType.FanSP:
                return("SP Fan");

            case CorsairChannelDeviceType.FanLL:
                return("LL Fan");

            case CorsairChannelDeviceType.FanML:
                return("ML Fan");

            case CorsairChannelDeviceType.Strip:
                // LS100 Led Strips are reported as one big strip if configured in monitor mode in iCUE, 138 LEDs for dual monitor, 84 for single
                if ((info.Model == "LS100 Starter Kit") && (channelDeviceInfo.deviceLedCount == 138))
                {
                    return("LS100 LED Strip (dual monitor)");
                }
                else if ((info.Model == "LS100 Starter Kit") && (channelDeviceInfo.deviceLedCount == 84))
                {
                    return("LS100 LED Strip (single monitor)");
                }
                // Any other value means an "External LED Strip" in iCUE, these are reported per-strip, 15 for short strips, 27 for long
                else if ((info.Model == "LS100 Starter Kit") && (channelDeviceInfo.deviceLedCount == 15))
                {
                    return("LS100 LED Strip (short)");
                }
                else if ((info.Model == "LS100 Starter Kit") && (channelDeviceInfo.deviceLedCount == 27))
                {
                    return("LS100 LED Strip (long)");
                }
                // Device model is "Commander Pro" for regular LED strips
                else
                {
                    return("LED Strip");
                }

            case CorsairChannelDeviceType.DAP:
                return("DAP Fan");

            case CorsairChannelDeviceType.Pump:
                return("Pump");

            case CorsairChannelDeviceType.FanQL:
                return("QL Fan");

            default:
                throw new ArgumentOutOfRangeException(nameof(channelDeviceInfo.type), channelDeviceInfo.type, null);
            }
        }
示例#2
0
        //TODO DarthAffe 07.07.2018: DAP is a fan right now, that's most likely wrong
        /// <inheritdoc />
        /// <summary>
        /// Internal constructor of managed <see cref="T:RGB.NET.Devices.Corsair.CorsairCustomRGBDeviceInfo" />.
        /// </summary>
        /// <param name="info">The info describing the the <see cref="T:RGB.NET.Devices.Corsair.CorsairCustomRGBDevice" />.</param>
        /// <param name="nativeInfo">The native <see cref="T:RGB.NET.Devices.Corsair.Native._CorsairDeviceInfo" />-struct</param>
        /// <param name="channelDeviceInfo">The native <see cref="T:RGB.NET.Devices.Corsair.Native._CorsairChannelDeviceInfo"/> representing this device.</param>
        /// <param name="referenceCorsairLed">The id of the first led of this device.</param>
        /// <param name="modelCounter">A dictionary containing counters to create unique names for equal devices models.</param>
        internal CorsairCustomRGBDeviceInfo(CorsairRGBDeviceInfo info, _CorsairDeviceInfo nativeInfo,
                                            _CorsairChannelDeviceInfo channelDeviceInfo,
                                            CorsairLedId referenceCorsairLed, Dictionary <string, int> modelCounter)
            : base(info.CorsairDeviceIndex, GetDeviceType(channelDeviceInfo.type), nativeInfo,
                   GetModelName(info, channelDeviceInfo), modelCounter)
        {
            this.ReferenceCorsairLed = referenceCorsairLed;

            LedCount = channelDeviceInfo.deviceLedCount;
        }
        private static IEnumerable <ICorsairRGBDevice> GetRGBDevice(CorsairRGBDeviceInfo info, int i, _CorsairDeviceInfo nativeDeviceInfo, Dictionary <string, int> modelCounter)
        {
            switch (info.CorsairDeviceType)
            {
            case CorsairDeviceType.Keyboard:
                yield return(new CorsairKeyboardRGBDevice(new CorsairKeyboardRGBDeviceInfo(i, nativeDeviceInfo, modelCounter)));

                break;

            case CorsairDeviceType.Mouse:
                yield return(new CorsairMouseRGBDevice(new CorsairMouseRGBDeviceInfo(i, nativeDeviceInfo, modelCounter)));

                break;

            case CorsairDeviceType.Headset:
                yield return(new CorsairHeadsetRGBDevice(new CorsairHeadsetRGBDeviceInfo(i, nativeDeviceInfo, modelCounter)));

                break;

            case CorsairDeviceType.Mousepad:
                yield return(new CorsairMousepadRGBDevice(new CorsairMousepadRGBDeviceInfo(i, nativeDeviceInfo, modelCounter)));

                break;

            case CorsairDeviceType.HeadsetStand:
                yield return(new CorsairHeadsetStandRGBDevice(new CorsairHeadsetStandRGBDeviceInfo(i, nativeDeviceInfo, modelCounter)));

                break;

            case CorsairDeviceType.MemoryModule:
                yield return(new CorsairMemoryRGBDevice(new CorsairMemoryRGBDeviceInfo(i, nativeDeviceInfo, modelCounter)));

                break;

            case CorsairDeviceType.Cooler:
            case CorsairDeviceType.CommanderPro:
            case CorsairDeviceType.LightningNodePro:
                _CorsairChannelsInfo channelsInfo = nativeDeviceInfo.channels;
                if (channelsInfo != null)
                {
                    IntPtr channelInfoPtr = channelsInfo.channels;

                    for (int channel = 0; channel < channelsInfo.channelsCount; channel++)
                    {
                        CorsairLedId referenceLed = channel == 0 ? CorsairLedId.CustomDeviceChannel1Led1 : CorsairLedId.CustomDeviceChannel2Led1;

                        _CorsairChannelInfo channelInfo = (_CorsairChannelInfo)Marshal.PtrToStructure(channelInfoPtr, typeof(_CorsairChannelInfo));

                        int    channelDeviceInfoStructSize = Marshal.SizeOf(typeof(_CorsairChannelDeviceInfo));
                        IntPtr channelDeviceInfoPtr        = channelInfo.devices;

                        for (int device = 0; device < channelInfo.devicesCount; device++)
                        {
                            _CorsairChannelDeviceInfo channelDeviceInfo = (_CorsairChannelDeviceInfo)Marshal.PtrToStructure(channelDeviceInfoPtr, typeof(_CorsairChannelDeviceInfo));

                            yield return(new CorsairCustomRGBDevice(new CorsairCustomRGBDeviceInfo(info.CorsairDeviceIndex, nativeDeviceInfo, channelDeviceInfo, referenceLed, modelCounter)));

                            referenceLed += channelDeviceInfo.deviceLedCount;

                            channelDeviceInfoPtr = new IntPtr(channelDeviceInfoPtr.ToInt64() + channelDeviceInfoStructSize);
                        }

                        int channelInfoStructSize = Marshal.SizeOf(typeof(_CorsairChannelInfo));
                        channelInfoPtr = new IntPtr(channelInfoPtr.ToInt64() + channelInfoStructSize);
                    }
                }

                break;


            // ReSharper disable once RedundantCaseLabel
            case CorsairDeviceType.Unknown:
            default:
                throw new RGBDeviceException("Unknown Device-Type");
            }
        }
        //TODO DarthAffe 07.07.2018: DAP is a fan right now, that's most likely wrong
        /// <inheritdoc />
        /// <summary>
        /// Internal constructor of managed <see cref="T:RGB.NET.Devices.Corsair.CorsairCustomRGBDeviceInfo" />.
        /// </summary>
        /// <param name="deviceIndex">The index of the <see cref="T:RGB.NET.Devices.Corsair.CorsairCustomRGBDevice" />.</param>
        /// <param name="nativeInfo">The native <see cref="T:RGB.NET.Devices.Corsair.Native._CorsairDeviceInfo" />-struct</param>
        /// <param name="channelDeviceInfo">The native <see cref="T:RGB.NET.Devices.Corsair.Native._CorsairChannelDeviceInfo"/> representing this device.</param>
        /// <param name="referenceCorsairLed">The id of the first led of this device.</param>
        internal CorsairCustomRGBDeviceInfo(int deviceIndex, _CorsairDeviceInfo nativeInfo, _CorsairChannelDeviceInfo channelDeviceInfo,
                                            CorsairLedId referenceCorsairLed, Dictionary <string, int> modelCounter)
            : base(deviceIndex, channelDeviceInfo.type == CorsairChannelDeviceType.Strip ? RGBDeviceType.LedStripe : RGBDeviceType.Fan, nativeInfo,
                   GetModelName(channelDeviceInfo.type), modelCounter)
        {
            this.ReferenceCorsairLed = referenceCorsairLed;

            LedCount = channelDeviceInfo.deviceLedCount;
        }