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); } }
//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; }