diff --git a/RGB.NET.Core/Devices/AbstractRGBDevice.cs b/RGB.NET.Core/Devices/AbstractRGBDevice.cs index a737f29..8ea688a 100644 --- a/RGB.NET.Core/Devices/AbstractRGBDevice.cs +++ b/RGB.NET.Core/Devices/AbstractRGBDevice.cs @@ -149,11 +149,7 @@ namespace RGB.NET.Core } protected virtual IEnumerable GetLedsToUpdate(bool flushLeds) => ((RequiresFlush || flushLeds) ? LedMapping.Values : LedMapping.Values.Where(x => x.IsDirty)); - - /// - public virtual void SyncBack() - { } - + /// public virtual void Dispose() { @@ -200,20 +196,7 @@ namespace RGB.NET.Core LedMapping.Add(ledId, led); return led; } - - /// - /// Applies the give to the ignoring internal workflows regarding locks and update-requests. - /// This should be only used for syncbacks! - /// - /// The the should be aplied to. - /// The to apply. - protected virtual void SetLedColorWithoutRequest(Led led, Color color) - { - if (led == null) return; - - led.InternalColor = color; - } - + /// /// Applies the given layout. /// diff --git a/RGB.NET.Core/Devices/DeviceUpdateMode.cs b/RGB.NET.Core/Devices/DeviceUpdateMode.cs index b6e27d9..1a60c67 100644 --- a/RGB.NET.Core/Devices/DeviceUpdateMode.cs +++ b/RGB.NET.Core/Devices/DeviceUpdateMode.cs @@ -17,13 +17,7 @@ namespace RGB.NET.Core /// Represents a mode which updates the leds of the device. /// Sync = 1 << 0, - - /// - /// Represents a mode which reads the color of the leds of the device. - /// This isn't supported by all devices! - /// - SyncBack = 1 << 1, - + /// /// Represents all update modes. /// diff --git a/RGB.NET.Core/Devices/IRGBDevice.cs b/RGB.NET.Core/Devices/IRGBDevice.cs index 23278ba..f79b2b7 100644 --- a/RGB.NET.Core/Devices/IRGBDevice.cs +++ b/RGB.NET.Core/Devices/IRGBDevice.cs @@ -89,13 +89,7 @@ namespace RGB.NET.Core /// /// Specifies whether all (including clean ones) should be updated. void Update(bool flushLeds = false); - - /// - /// Synchronizes the internal state of the device to the real (physical) state. - /// This isn't supported by all devices! Check to see if it's supported or not. - /// - void SyncBack(); - + /// /// Adds the given to the device. /// This will override existing of the same type. diff --git a/RGB.NET.Core/Devices/IRGBDeviceInfo.cs b/RGB.NET.Core/Devices/IRGBDeviceInfo.cs index 68bb9dc..f0c9ef3 100644 --- a/RGB.NET.Core/Devices/IRGBDeviceInfo.cs +++ b/RGB.NET.Core/Devices/IRGBDeviceInfo.cs @@ -33,12 +33,7 @@ namespace RGB.NET.Core /// Gets the lighting capability of the /// RGBDeviceLighting Lighting { get; } - - /// - /// Gets a bool indicating, if the supports SynBacks or not. - /// - bool SupportsSyncBack { get; } - + /// /// Gets the URI of an image of the or null if there is no image. /// diff --git a/RGB.NET.Core/RGBSurface.cs b/RGB.NET.Core/RGBSurface.cs index 74bc882..31edaf8 100644 --- a/RGB.NET.Core/RGBSurface.cs +++ b/RGB.NET.Core/RGBSurface.cs @@ -101,7 +101,6 @@ namespace RGB.NET.Core try { bool flushLeds = customData["flushLeds"] as bool? ?? false; - bool syncBack = customData["syncBack"] as bool? ?? true; bool render = customData["render"] as bool? ?? true; bool updateDevices = customData["updateDevices"] as bool? ?? true; @@ -109,13 +108,7 @@ namespace RGB.NET.Core lock (_devices) { OnUpdating(updateTrigger, customData); - - if (syncBack) - foreach (IRGBDevice device in _devices) - if (device.UpdateMode.HasFlag(DeviceUpdateMode.SyncBack) && device.DeviceInfo.SupportsSyncBack) - try { device.SyncBack(); } - catch (Exception ex) { OnException(ex); } - + if (render) lock (_ledGroups) { diff --git a/RGB.NET.Devices.Asus/Generic/AsusRGBDevice.cs b/RGB.NET.Devices.Asus/Generic/AsusRGBDevice.cs index 42caff9..cafd420 100644 --- a/RGB.NET.Devices.Asus/Generic/AsusRGBDevice.cs +++ b/RGB.NET.Devices.Asus/Generic/AsusRGBDevice.cs @@ -67,19 +67,7 @@ namespace RGB.NET.Devices.Asus /// protected override void UpdateLeds(IEnumerable ledsToUpdate) => UpdateQueue.SetData(ledsToUpdate.Where(x => x.Color.A > 0)); - - /// - public override void SyncBack() - { - // DarthAffe 16.06.2019: This doesn't work since the SDK only returns the colors we set. - //foreach (Led led in LedMapping.Values) - //{ - // int index = (int)led.CustomData; - // IAuraRgbLight light = DeviceInfo.Device.Lights[index]; - // SetLedColorWithoutRequest(led, new Color(light.Red, light.Green, light.Blue)); - //} - } - + /// public override void Dispose() { diff --git a/RGB.NET.Devices.Asus/Generic/AsusRGBDeviceInfo.cs b/RGB.NET.Devices.Asus/Generic/AsusRGBDeviceInfo.cs index 62c7ea9..42d61e6 100644 --- a/RGB.NET.Devices.Asus/Generic/AsusRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Asus/Generic/AsusRGBDeviceInfo.cs @@ -29,10 +29,7 @@ namespace RGB.NET.Devices.Asus /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + public IAuraSyncDevice Device { get; } #endregion diff --git a/RGB.NET.Devices.CoolerMaster/Generic/CoolerMasterRGBDeviceInfo.cs b/RGB.NET.Devices.CoolerMaster/Generic/CoolerMasterRGBDeviceInfo.cs index d10eb01..9e98e92 100644 --- a/RGB.NET.Devices.CoolerMaster/Generic/CoolerMasterRGBDeviceInfo.cs +++ b/RGB.NET.Devices.CoolerMaster/Generic/CoolerMasterRGBDeviceInfo.cs @@ -29,10 +29,7 @@ namespace RGB.NET.Devices.CoolerMaster /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + /// /// Gets the of the . /// diff --git a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs index 650a61e..ef12ad4 100644 --- a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs +++ b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs @@ -96,32 +96,6 @@ namespace RGB.NET.Devices.Corsair protected override void UpdateLeds(IEnumerable ledsToUpdate) => DeviceUpdateQueue.SetData(ledsToUpdate.Where(x => (x.Color.A > 0) && (x.CustomData is CorsairLedId ledId && (ledId != CorsairLedId.Invalid)))); - /// - public override void SyncBack() - { - int structSize = Marshal.SizeOf(typeof(_CorsairLedColor)); - IntPtr ptr = Marshal.AllocHGlobal(structSize * LedMapping.Count); - IntPtr addPtr = new IntPtr(ptr.ToInt64()); - foreach (Led led in this) - { - _CorsairLedColor color = new _CorsairLedColor { ledId = (int)led.CustomData }; - Marshal.StructureToPtr(color, addPtr, false); - addPtr = new IntPtr(addPtr.ToInt64() + structSize); - } - _CUESDK.CorsairGetLedsColorsByDeviceIndex(DeviceInfo.CorsairDeviceIndex, LedMapping.Count, ptr); - - IntPtr readPtr = ptr; - for (int i = 0; i < LedMapping.Count; i++) - { - _CorsairLedColor ledColor = (_CorsairLedColor)Marshal.PtrToStructure(readPtr, typeof(_CorsairLedColor)); - SetLedColorWithoutRequest(this[(CorsairLedId)ledColor.ledId], new Color(ledColor.r, ledColor.g, ledColor.b)); - - readPtr = new IntPtr(readPtr.ToInt64() + structSize); - } - - Marshal.FreeHGlobal(ptr); - } - /// public override void Dispose() { diff --git a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs index 88e6600..2e68418 100644 --- a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs @@ -39,10 +39,7 @@ namespace RGB.NET.Devices.Corsair /// public Uri Image { get; set; } - - /// - public bool SupportsSyncBack => true; - + /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; diff --git a/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs b/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs index 2401f58..eb486a4 100644 --- a/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs +++ b/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs @@ -35,10 +35,7 @@ namespace RGB.NET.Devices.DMX.E131 /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + /// public Uri Image { get; set; } diff --git a/RGB.NET.Devices.Debug/DebugDeviceProvider.cs b/RGB.NET.Devices.Debug/DebugDeviceProvider.cs index ca6561e..24a82fe 100644 --- a/RGB.NET.Devices.Debug/DebugDeviceProvider.cs +++ b/RGB.NET.Devices.Debug/DebugDeviceProvider.cs @@ -31,8 +31,8 @@ namespace RGB.NET.Devices.Debug /// public bool HasExclusiveAccess { get; private set; } - private List<(string layout, string imageLayout, Func> syncBackFunc, Action> updateLedsAction)> _fakeDeviceDefinitions - = new List<(string layout, string imageLayout, Func> syncBackFunc, Action> updateLedsAction)>(); + private List<(string layout, string imageLayout, Action> updateLedsAction)> _fakeDeviceDefinitions + = new List<(string layout, string imageLayout, Action> updateLedsAction)>(); #endregion @@ -57,10 +57,9 @@ namespace RGB.NET.Devices.Debug /// /// The path of the layout file to be used. /// The image-layout to load. - /// A function emulating device syncback. /// A action emulating led-updates. - public void AddFakeDeviceDefinition(string layout, string imageLayout, Func> syncBackFunc = null, Action> updateLedsAction = null) - => _fakeDeviceDefinitions.Add((layout, imageLayout, syncBackFunc, updateLedsAction)); + public void AddFakeDeviceDefinition(string layout, string imageLayout, Action> updateLedsAction = null) + => _fakeDeviceDefinitions.Add((layout, imageLayout, updateLedsAction)); /// /// Removes all previously added fake device definitions. @@ -76,9 +75,9 @@ namespace RGB.NET.Devices.Debug HasExclusiveAccess = exclusiveAccessIfPossible; List devices = new List(); - foreach ((string layout, string imageLayout, Func> syncBackFunc, Action> updateLedsAction) in _fakeDeviceDefinitions) + foreach ((string layout, string imageLayout, Action> updateLedsAction) in _fakeDeviceDefinitions) { - DebugRGBDevice device = new DebugRGBDevice(layout, syncBackFunc, updateLedsAction); + DebugRGBDevice device = new DebugRGBDevice(layout, updateLedsAction); device.Initialize(layout, imageLayout); devices.Add(device); } diff --git a/RGB.NET.Devices.Debug/DebugRGBDevice.cs b/RGB.NET.Devices.Debug/DebugRGBDevice.cs index 174e7fd..7d787d7 100644 --- a/RGB.NET.Devices.Debug/DebugRGBDevice.cs +++ b/RGB.NET.Devices.Debug/DebugRGBDevice.cs @@ -20,8 +20,7 @@ namespace RGB.NET.Devices.Debug /// Gets the path of the layout used to mock this /// public string LayoutPath { get; } - - private Func> _syncBackFunc; + private Action> _updateLedsAction; #endregion @@ -30,14 +29,13 @@ namespace RGB.NET.Devices.Debug /// /// Internal constructor of . /// - internal DebugRGBDevice(string layoutPath, Func> syncBackFunc = null, Action> updateLedsAction = null) + internal DebugRGBDevice(string layoutPath, Action> updateLedsAction = null) { this.LayoutPath = layoutPath; - this._syncBackFunc = syncBackFunc; this._updateLedsAction = updateLedsAction; DeviceLayout layout = DeviceLayout.Load(layoutPath); - DeviceInfo = new DebugRGBDeviceInfo(layout.Type, layout.Vendor, layout.Model, layout.Lighting, syncBackFunc != null); + DeviceInfo = new DebugRGBDeviceInfo(layout.Type, layout.Vendor, layout.Model, layout.Lighting); } #endregion @@ -46,23 +44,6 @@ namespace RGB.NET.Devices.Debug internal void Initialize(string layoutPath, string imageLayout) => ApplyLayoutFromFile(layoutPath, imageLayout, true); - /// - public override void SyncBack() - { - try - { - Dictionary syncBackValues = _syncBackFunc?.Invoke(); - if (syncBackValues == null) return; - - foreach (KeyValuePair value in syncBackValues) - { - Led led = ((IRGBDevice)this)[value.Key]; - SetLedColorWithoutRequest(led, value.Value); - } - } - catch {/* idc that's not my fault ... */} - } - /// protected override void UpdateLeds(IEnumerable ledsToUpdate) => _updateLedsAction?.Invoke(ledsToUpdate); diff --git a/RGB.NET.Devices.Debug/DebugRGBDeviceInfo.cs b/RGB.NET.Devices.Debug/DebugRGBDeviceInfo.cs index e3e6205..d7f5a74 100644 --- a/RGB.NET.Devices.Debug/DebugRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Debug/DebugRGBDeviceInfo.cs @@ -25,10 +25,7 @@ namespace RGB.NET.Devices.Debug /// public RGBDeviceLighting Lighting { get; } - - /// - public bool SupportsSyncBack { get; } - + /// public Uri Image { get; set; } @@ -43,14 +40,12 @@ namespace RGB.NET.Devices.Debug /// The manufacturer of the device. /// The model of the device. /// The of the device. - /// True if the device supports syncback; false if not. - internal DebugRGBDeviceInfo(RGBDeviceType deviceType, string manufacturer, string model, RGBDeviceLighting lighting, bool supportsSyncBack, string deviceName = null) + internal DebugRGBDeviceInfo(RGBDeviceType deviceType, string manufacturer, string model, RGBDeviceLighting lighting, string deviceName = null) { this.DeviceType = deviceType; this.Manufacturer = manufacturer; this.Model = model; this.Lighting = lighting; - this.SupportsSyncBack = supportsSyncBack; DeviceName = deviceName ?? $"{Manufacturer} {Model}"; } diff --git a/RGB.NET.Devices.Logitech/Generic/LogitechRGBDeviceInfo.cs b/RGB.NET.Devices.Logitech/Generic/LogitechRGBDeviceInfo.cs index a476c7f..1a9bce7 100644 --- a/RGB.NET.Devices.Logitech/Generic/LogitechRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Logitech/Generic/LogitechRGBDeviceInfo.cs @@ -40,10 +40,7 @@ namespace RGB.NET.Devices.Logitech return RGBDeviceLighting.None; } } - - /// - public bool SupportsSyncBack => false; - + /// /// Gets a flag that describes device capabilities. () /// diff --git a/RGB.NET.Devices.Msi/Generic/MsiRGBDeviceInfo.cs b/RGB.NET.Devices.Msi/Generic/MsiRGBDeviceInfo.cs index 269d34e..3790298 100644 --- a/RGB.NET.Devices.Msi/Generic/MsiRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Msi/Generic/MsiRGBDeviceInfo.cs @@ -30,10 +30,7 @@ namespace RGB.NET.Devices.Msi /// public Uri Image { get; set; } - - /// - public bool SupportsSyncBack => false; - + /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; diff --git a/RGB.NET.Devices.Msi/GraphicsCard/MsiGraphicsCardRGBDevice.cs b/RGB.NET.Devices.Msi/GraphicsCard/MsiGraphicsCardRGBDevice.cs index 74bd673..3b295f4 100644 --- a/RGB.NET.Devices.Msi/GraphicsCard/MsiGraphicsCardRGBDevice.cs +++ b/RGB.NET.Devices.Msi/GraphicsCard/MsiGraphicsCardRGBDevice.cs @@ -46,11 +46,7 @@ namespace RGB.NET.Devices.Msi /// protected override object CreateLedCustomData(LedId ledId) => (int)ledId - (int)LedId.GraphicsCard1; - - /// - public override void SyncBack() - { } - + #endregion } } diff --git a/RGB.NET.Devices.Msi/Mainboard/MsiMainboardRGBDevice.cs b/RGB.NET.Devices.Msi/Mainboard/MsiMainboardRGBDevice.cs index 455e63a..04e7787 100644 --- a/RGB.NET.Devices.Msi/Mainboard/MsiMainboardRGBDevice.cs +++ b/RGB.NET.Devices.Msi/Mainboard/MsiMainboardRGBDevice.cs @@ -44,11 +44,7 @@ namespace RGB.NET.Devices.Msi /// protected override object CreateLedCustomData(LedId ledId) => (int)ledId - (int)LedId.Mainboard1; - - /// - public override void SyncBack() - { } - + #endregion } } diff --git a/RGB.NET.Devices.Msi/Mouse/MsiMouseRGBDevice.cs b/RGB.NET.Devices.Msi/Mouse/MsiMouseRGBDevice.cs index bbcbd57..1438f3a 100644 --- a/RGB.NET.Devices.Msi/Mouse/MsiMouseRGBDevice.cs +++ b/RGB.NET.Devices.Msi/Mouse/MsiMouseRGBDevice.cs @@ -44,11 +44,7 @@ namespace RGB.NET.Devices.Msi /// protected override object CreateLedCustomData(LedId ledId) => (int)ledId - (int)LedId.Mouse1; - - /// - public override void SyncBack() - { } - + #endregion } } diff --git a/RGB.NET.Devices.Novation/Generic/NovationRGBDeviceInfo.cs b/RGB.NET.Devices.Novation/Generic/NovationRGBDeviceInfo.cs index 2240500..8e613bb 100644 --- a/RGB.NET.Devices.Novation/Generic/NovationRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Novation/Generic/NovationRGBDeviceInfo.cs @@ -28,10 +28,7 @@ namespace RGB.NET.Devices.Novation /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + /// /// Gets the of the . /// diff --git a/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs b/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs index 3b1f241..4336bfb 100644 --- a/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs @@ -30,10 +30,7 @@ namespace RGB.NET.Devices.Razer /// public Uri Image { get; set; } - - /// - public bool SupportsSyncBack => false; - + /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; diff --git a/RGB.NET.Devices.SoIP/Client/SoIPClientDeviceDefinition.cs b/RGB.NET.Devices.SoIP/Client/SoIPClientDeviceDefinition.cs deleted file mode 100644 index 470df74..0000000 --- a/RGB.NET.Devices.SoIP/Client/SoIPClientDeviceDefinition.cs +++ /dev/null @@ -1,41 +0,0 @@ -using RGB.NET.Devices.SoIP.Generic; - -namespace RGB.NET.Devices.SoIP.Client -{ - public class SoIPClientDeviceDefinition : ISoIPDeviceDefinition - { - #region Properties & Fields - - /// - /// Gets or sets the hostname of the device. - /// - public string Hostname { get; set; } - - /// - /// Gets or sets the port to device is listening to. - /// - public int Port { get; set; } - - /// - /// Gets or sets the manufacturer of the device. - /// - public string Manufacturer { get; set; } = "Unknown"; - - /// - /// Gets or sets the model name of the device. - /// - public string Model { get; set; } = "Generic SoIP-Device"; - - #endregion - - #region Constructors - - public SoIPClientDeviceDefinition(string hostname, int port) - { - this.Hostname = hostname; - this.Port = port; - } - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/Client/SoIPClientRGBDevice.cs b/RGB.NET.Devices.SoIP/Client/SoIPClientRGBDevice.cs deleted file mode 100644 index 38ef9a8..0000000 --- a/RGB.NET.Devices.SoIP/Client/SoIPClientRGBDevice.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using RGB.NET.Core; -using RGB.NET.Devices.SoIP.Generic; -using SimpleTCP; - -namespace RGB.NET.Devices.SoIP.Client -{ - public class SoIPClientRGBDevice : AbstractRGBDevice, ISoIPRGBDevice, IUnknownDevice - { - #region Properties & Fields - - private readonly Dictionary _syncbackCache = new Dictionary(); - private readonly SimpleTcpClient _tcpClient; - - public override SoIPClientRGBDeviceInfo DeviceInfo { get; } - - #endregion - - #region Constructors - - public SoIPClientRGBDevice(SoIPClientRGBDeviceInfo deviceInfo) - { - this.DeviceInfo = deviceInfo; - - _tcpClient = new SimpleTcpClient(); - _tcpClient.DelimiterDataReceived += TcpClientOnDelimiterDataReceived; - } - - #endregion - - #region Methods - - void ISoIPRGBDevice.Initialize(IDeviceUpdateTrigger updateTrigger) - { - _tcpClient.Connect(DeviceInfo.Hostname, DeviceInfo.Port); - } - - /// - protected override void UpdateLeds(IEnumerable ledsToUpdate) - { } - - /// - public override void SyncBack() - { - lock (_syncbackCache) - { - foreach (KeyValuePair cacheEntry in _syncbackCache) - { - LedId ledId = cacheEntry.Key; - Color color = cacheEntry.Value; - - if (!LedMapping.TryGetValue(ledId, out Led led)) - led = InitializeLed(cacheEntry.Key, new Rectangle(0, 0, 10, 10)); //TODO DarthAffe 10.06.2018: Send layout with initial package - - SetLedColorWithoutRequest(led, color); - } - - _syncbackCache.Clear(); - } - } - - private void TcpClientOnDelimiterDataReceived(object sender, Message message) - { - List<(LedId, Color)> leds = message.MessageString.Split(';').Select(x => - { - string[] led = x.Split('|'); - return ((LedId)Enum.Parse(typeof(LedId), led[0]), RGBColor.FromHexString(led[1])); - }).ToList(); - lock (_syncbackCache) - foreach ((LedId ledId, Color color) in leds) - _syncbackCache[ledId] = color; - } - - /// - public override void Dispose() - { - base.Dispose(); - - _tcpClient.Disconnect(); - _tcpClient.Dispose(); - } - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/Client/SoIPClientRGBDeviceInfo.cs b/RGB.NET.Devices.SoIP/Client/SoIPClientRGBDeviceInfo.cs deleted file mode 100644 index 99f8099..0000000 --- a/RGB.NET.Devices.SoIP/Client/SoIPClientRGBDeviceInfo.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using RGB.NET.Core; - -namespace RGB.NET.Devices.SoIP.Client -{ - /// - /// - /// Represents device information for a />. - /// - public class SoIPClientRGBDeviceInfo : IRGBDeviceInfo - { - #region Properties & Fields - - /// - public RGBDeviceType DeviceType => RGBDeviceType.Unknown; - - /// - public string DeviceName { get; } - - /// - public string Manufacturer { get; } - - /// - public string Model { get; } - - /// - public RGBDeviceLighting Lighting => RGBDeviceLighting.None; - - /// - public bool SupportsSyncBack => true; - - /// - public Uri Image { get; set; } - - /// - /// The hostname of the device. - /// - public string Hostname { get; } - - /// - /// The port of the device. - /// - public int Port { get; } - - #endregion - - #region Constructors - - internal SoIPClientRGBDeviceInfo(SoIPClientDeviceDefinition deviceDefinition) - { - this.Manufacturer = deviceDefinition.Manufacturer; - this.Model = deviceDefinition.Model; - this.Hostname = deviceDefinition.Hostname; - this.Port = deviceDefinition.Port; - - DeviceName = $"{Manufacturer} {Model}"; - } - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/FodyWeavers.xml b/RGB.NET.Devices.SoIP/FodyWeavers.xml deleted file mode 100644 index 7e25d14..0000000 --- a/RGB.NET.Devices.SoIP/FodyWeavers.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/RGB.NET.Devices.SoIP/FodyWeavers.xsd b/RGB.NET.Devices.SoIP/FodyWeavers.xsd deleted file mode 100644 index 44a5374..0000000 --- a/RGB.NET.Devices.SoIP/FodyWeavers.xsd +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks - - - - - A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. - - - - - A list of unmanaged 32 bit assembly names to include, delimited with line breaks. - - - - - A list of unmanaged 64 bit assembly names to include, delimited with line breaks. - - - - - The order of preloaded assemblies, delimited with line breaks. - - - - - - This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. - - - - - Controls if .pdbs for reference assemblies are also embedded. - - - - - Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. - - - - - As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. - - - - - Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. - - - - - Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. - - - - - A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | - - - - - A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. - - - - - A list of unmanaged 32 bit assembly names to include, delimited with |. - - - - - A list of unmanaged 64 bit assembly names to include, delimited with |. - - - - - The order of preloaded assemblies, delimited with |. - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/RGB.NET.Devices.SoIP/Generic/ISoIPDeviceDefinition.cs b/RGB.NET.Devices.SoIP/Generic/ISoIPDeviceDefinition.cs deleted file mode 100644 index 5c6dba8..0000000 --- a/RGB.NET.Devices.SoIP/Generic/ISoIPDeviceDefinition.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace RGB.NET.Devices.SoIP.Generic -{ - /// - /// Marker interface for SoIP device definitions. - /// - public interface ISoIPDeviceDefinition - { } -} diff --git a/RGB.NET.Devices.SoIP/Generic/ISoIPRGBDevice.cs b/RGB.NET.Devices.SoIP/Generic/ISoIPRGBDevice.cs deleted file mode 100644 index d7d6743..0000000 --- a/RGB.NET.Devices.SoIP/Generic/ISoIPRGBDevice.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using RGB.NET.Core; - -namespace RGB.NET.Devices.SoIP.Generic -{ - // ReSharper disable once InconsistentNaming - internal interface ISoIPRGBDevice : IRGBDevice, IDisposable - { - void Initialize(IDeviceUpdateTrigger updateTrigger); - } -} diff --git a/RGB.NET.Devices.SoIP/RGB.NET.Devices.SoIP.csproj b/RGB.NET.Devices.SoIP/RGB.NET.Devices.SoIP.csproj deleted file mode 100644 index ff30199..0000000 --- a/RGB.NET.Devices.SoIP/RGB.NET.Devices.SoIP.csproj +++ /dev/null @@ -1,65 +0,0 @@ - - - net5.0 - latest - enable - - Darth Affe - Wyrez - en-US - en-US - RGB.NET.Devices.SoIP - RGB.NET.Devices.SoIP - RGB.NET.Devices.SoIP - RGB.NET.Devices.SoIP - RGB.NET.Devices.SoIP - SoIP-Device-Implementations of RGB.NET - SoIP-Device-Implementations of RGB.NET, a C# (.NET) library - Copyright © Darth Affe 2020 - Copyright © Darth Affe 2020 - http://lib.arge.be/icon.png - https://github.com/DarthAffe/RGB.NET - https://raw.githubusercontent.com/DarthAffe/RGB.NET/master/LICENSE - Github - https://github.com/DarthAffe/RGB.NET - True - - - - 0.0.1 - 0.0.1 - 0.0.1 - - ..\bin\ - true - True - True - - - - $(DefineConstants);TRACE;DEBUG - true - full - false - - - - pdbonly - true - $(NoWarn);CS1591;CS1572;CS1573 - $(DefineConstants);RELEASE - - - - - - all - runtime; build; native; contentfiles; analyzers - - - - - - - - \ No newline at end of file diff --git a/RGB.NET.Devices.SoIP/Server/SoIPServerDeviceDefinition.cs b/RGB.NET.Devices.SoIP/Server/SoIPServerDeviceDefinition.cs deleted file mode 100644 index 2eff475..0000000 --- a/RGB.NET.Devices.SoIP/Server/SoIPServerDeviceDefinition.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using RGB.NET.Core; -using RGB.NET.Devices.SoIP.Generic; - -namespace RGB.NET.Devices.SoIP.Server -{ - public class SoIPServerDeviceDefinition : ISoIPDeviceDefinition - { - #region Properties & Fields - - /// - /// Gets or sets the port to device is listening to. - /// - public int Port { get; set; } - - /// - /// Gets or sets the manufacturer of the device. - /// - public string Manufacturer { get; set; } = "Unknown"; - - /// - /// Gets or sets the model name of the device. - /// - public string Model { get; set; } = "Generic SoIP-Device"; - - /// - /// Gets the IDs of the leds represented by this device. - /// - public List Leds { get; } - - #endregion - - #region Constructors - - public SoIPServerDeviceDefinition(int port, params LedId[] ledIds) - { - this.Port = port; - this.Leds = ledIds.ToList(); - } - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/Server/SoIPServerRGBDevice.cs b/RGB.NET.Devices.SoIP/Server/SoIPServerRGBDevice.cs deleted file mode 100644 index 5908a1b..0000000 --- a/RGB.NET.Devices.SoIP/Server/SoIPServerRGBDevice.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Net.Sockets; -using RGB.NET.Core; -using RGB.NET.Devices.SoIP.Generic; -using SimpleTCP; - -namespace RGB.NET.Devices.SoIP.Server -{ - public class SoIPServerRGBDevice : AbstractRGBDevice, ISoIPRGBDevice, IUnknownDevice - { - #region Properties & Fields - - private readonly List _leds; - private readonly SimpleTcpServer _tcpServer; - private SoIPServerUpdateQueue _updateQueue; - - public override SoIPServerRGBDeviceInfo DeviceInfo { get; } - - #endregion - - #region Constructors - - public SoIPServerRGBDevice(SoIPServerRGBDeviceInfo deviceInfo, List leds) - { - this.DeviceInfo = deviceInfo; - this._leds = leds; - - _tcpServer = new SimpleTcpServer(); - _tcpServer.ClientConnected += TcpServerOnClientConnected; - } - - #endregion - - #region Methods - - void ISoIPRGBDevice.Initialize(IDeviceUpdateTrigger updateTrigger) - { - int count = 0; - foreach (LedId id in _leds) - InitializeLed(id, new Rectangle((count++) * 10, 0, 10, 10)); - - //TODO DarthAffe 10.06.2018: Allow to load a layout. - - if (Size == Size.Invalid) - { - Rectangle ledRectangle = new Rectangle(this.Select(x => x.LedRectangle)); - Size = ledRectangle.Size + new Size(ledRectangle.Location.X, ledRectangle.Location.Y); - } - - _tcpServer.Start(DeviceInfo.Port); - _updateQueue = new SoIPServerUpdateQueue(updateTrigger, _tcpServer); - } - - protected override void UpdateLeds(IEnumerable ledsToUpdate) => _updateQueue.SetData(ledsToUpdate); - - private void TcpServerOnClientConnected(object sender, TcpClient tcpClient) - { - string message = GetLedString(LedMapping.Values); - byte[] messageData = _tcpServer.StringEncoder.GetBytes(message + _tcpServer.StringEncoder.GetString(new[] { _tcpServer.Delimiter })); - tcpClient.GetStream().WriteAsync(messageData, 0, messageData.Length); - } - - private string GetLedString(IEnumerable leds) => string.Join(";", leds.Select(x => x.Id.ToString() + "|" + x.Color.AsARGBHexString(false))); - - /// - public override void Dispose() - { - try { _updateQueue?.Dispose(); } - catch { /* at least we tried */ } - - base.Dispose(); - - _tcpServer.Stop(); - } - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/Server/SoIPServerRGBDeviceInfo.cs b/RGB.NET.Devices.SoIP/Server/SoIPServerRGBDeviceInfo.cs deleted file mode 100644 index 10ff143..0000000 --- a/RGB.NET.Devices.SoIP/Server/SoIPServerRGBDeviceInfo.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using RGB.NET.Core; - -namespace RGB.NET.Devices.SoIP.Server -{ - /// - /// - /// Represents device information for a />. - /// - public class SoIPServerRGBDeviceInfo : IRGBDeviceInfo - { - #region Properties & Fields - - /// - public RGBDeviceType DeviceType => RGBDeviceType.Unknown; - - /// - public string DeviceName { get; } - - /// - public string Manufacturer { get; } - - /// - public string Model { get; } - - /// - public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - - /// - public Uri Image { get; set; } - - /// - /// The port of the device. - /// - public int Port { get; } - - #endregion - - #region Constructors - - internal SoIPServerRGBDeviceInfo(SoIPServerDeviceDefinition deviceDefinition) - { - this.Manufacturer = deviceDefinition.Manufacturer; - this.Model = deviceDefinition.Model; - this.Port = deviceDefinition.Port; - - DeviceName = $"{Manufacturer} {Model}"; - } - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/Server/SoIPServerUpdateQueue.cs b/RGB.NET.Devices.SoIP/Server/SoIPServerUpdateQueue.cs deleted file mode 100644 index 1d100ce..0000000 --- a/RGB.NET.Devices.SoIP/Server/SoIPServerUpdateQueue.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using RGB.NET.Core; -using SimpleTCP; - -namespace RGB.NET.Devices.SoIP.Server -{ - /// - /// - /// Represents the update-queue performing updates for E131-DMX devices. - /// - public class SoIPServerUpdateQueue : UpdateQueue - { - #region Properties & Fields - - private readonly SimpleTcpServer _tcpServer; - - #endregion - - #region Constructors - - /// - /// - /// Initializes a new instance of the class. - /// - /// The update trigger used by this queue. - /// The hostname of the device this queue is performing updates for. - public SoIPServerUpdateQueue(IDeviceUpdateTrigger updateTrigger, SimpleTcpServer tcpServer) - : base(updateTrigger) - { - this._tcpServer = tcpServer; - } - - #endregion - - #region Methods - - /// - protected override void Update(Dictionary dataSet) - { - if ((dataSet != null) && (dataSet.Count > 0)) - { - string m = GetLedString(dataSet); - _tcpServer.BroadcastLine(m); - } - } - - private string GetLedString(Dictionary dataSet) => string.Join(";", dataSet.Select(x => x.Key.ToString() + "|" + x.Value.AsARGBHexString(false))); - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/SoIPDeviceProvider.cs b/RGB.NET.Devices.SoIP/SoIPDeviceProvider.cs deleted file mode 100644 index 9755cc2..0000000 --- a/RGB.NET.Devices.SoIP/SoIPDeviceProvider.cs +++ /dev/null @@ -1,139 +0,0 @@ -// ReSharper disable MemberCanBePrivate.Global -// ReSharper disable UnusedMember.Global - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using RGB.NET.Core; -using RGB.NET.Devices.SoIP.Client; -using RGB.NET.Devices.SoIP.Generic; -using RGB.NET.Devices.SoIP.Server; - -namespace RGB.NET.Devices.SoIP -{ - /// - /// - /// Represents a device provider responsible for debug devices. - /// - public class SoIPDeviceProvider : IRGBDeviceProvider - { - #region Properties & Fields - - private static SoIPDeviceProvider _instance; - /// - /// Gets the singleton instance. - /// - public static SoIPDeviceProvider Instance => _instance ?? new SoIPDeviceProvider(); - - /// - public bool IsInitialized { get; private set; } - - /// - public IEnumerable Devices { get; private set; } - - /// - public bool HasExclusiveAccess => false; - - /// - /// Gets a list of all defined device-definitions. - /// - public List DeviceDefinitions { get; } = new List(); - - /// - /// The used to trigger the updates for dmx devices. - /// - public DeviceUpdateTrigger UpdateTrigger { get; private set; } - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - /// Thrown if this constructor is called even if there is already an instance of this class. - public SoIPDeviceProvider() - { - if (_instance != null) throw new InvalidOperationException($"There can be only one instance of type {nameof(SoIPDeviceProvider)}"); - _instance = this; - - UpdateTrigger = new DeviceUpdateTrigger(); - } - - #endregion - - #region Methods - - /// - /// Adds the given to this device-provider. - /// - /// The to add. - public void AddDeviceDefinition(ISoIPDeviceDefinition deviceDefinition) => DeviceDefinitions.Add(deviceDefinition); - - /// - public bool Initialize(RGBDeviceType loadFilter = RGBDeviceType.Unknown, bool exclusiveAccessIfPossible = false, bool throwExceptions = false) - { - - IsInitialized = false; - - try - { - UpdateTrigger.Stop(); - - IList devices = new List(); - - foreach (ISoIPDeviceDefinition deviceDefinition in DeviceDefinitions) - { - try - { - ISoIPRGBDevice device = null; - - switch (deviceDefinition) - { - case SoIPServerDeviceDefinition serverDeviceDefinition: - if (serverDeviceDefinition.Leds.Count > 0) - device = new SoIPServerRGBDevice(new SoIPServerRGBDeviceInfo(serverDeviceDefinition), serverDeviceDefinition.Leds); - break; - - case SoIPClientDeviceDefinition clientDeviceDefinition: - device = new SoIPClientRGBDevice(new SoIPClientRGBDeviceInfo(clientDeviceDefinition)); - break; - } - - if (device != null) - { - device.Initialize(UpdateTrigger); - devices.Add(device); - } - } - catch { if (throwExceptions) throw; } - } - - UpdateTrigger.Start(); - - Devices = new ReadOnlyCollection(devices); - IsInitialized = true; - } - catch - { - if (throwExceptions) throw; - return false; - } - - return true; - } - - /// - public void ResetDevices() - { } - - /// - public void Dispose() - { - try { UpdateTrigger?.Dispose(); } - catch { /* at least we tried */ } - } - - #endregion - } -} diff --git a/RGB.NET.Devices.SoIP/SoIPDeviceProviderLoader.cs b/RGB.NET.Devices.SoIP/SoIPDeviceProviderLoader.cs deleted file mode 100644 index ead1010..0000000 --- a/RGB.NET.Devices.SoIP/SoIPDeviceProviderLoader.cs +++ /dev/null @@ -1,24 +0,0 @@ -using RGB.NET.Core; - -namespace RGB.NET.Devices.SoIP -{ - /// - /// Represents a device provider loaded used to dynamically load SoIP (syncback over IP) devices into an application. - /// - public class SoIPDeviceProviderLoader : IRGBDeviceProviderLoader - { - #region Properties & Fields - - /// - public bool RequiresInitialization => true; - - #endregion - - #region Methods - - /// - public IRGBDeviceProvider GetDeviceProvider() => SoIPDeviceProvider.Instance; - - #endregion - } -} diff --git a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDeviceInfo.cs b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDeviceInfo.cs index afb2e7d..cb356c7 100644 --- a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDeviceInfo.cs +++ b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDeviceInfo.cs @@ -28,10 +28,7 @@ namespace RGB.NET.Devices.SteelSeries /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + public SteelSeriesDeviceType SteelSeriesDeviceType { get; } /// diff --git a/RGB.NET.Devices.WS281X/Arduino/ArduinoWS2812USBDeviceInfo.cs b/RGB.NET.Devices.WS281X/Arduino/ArduinoWS2812USBDeviceInfo.cs index c8f0282..9fbb965 100644 --- a/RGB.NET.Devices.WS281X/Arduino/ArduinoWS2812USBDeviceInfo.cs +++ b/RGB.NET.Devices.WS281X/Arduino/ArduinoWS2812USBDeviceInfo.cs @@ -26,10 +26,7 @@ namespace RGB.NET.Devices.WS281X.Arduino /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + /// public Uri Image { get; set; } diff --git a/RGB.NET.Devices.WS281X/Bitwizard/BitwizardWS2812USBDeviceInfo.cs b/RGB.NET.Devices.WS281X/Bitwizard/BitwizardWS2812USBDeviceInfo.cs index 7e86dae..311b0d4 100644 --- a/RGB.NET.Devices.WS281X/Bitwizard/BitwizardWS2812USBDeviceInfo.cs +++ b/RGB.NET.Devices.WS281X/Bitwizard/BitwizardWS2812USBDeviceInfo.cs @@ -26,10 +26,7 @@ namespace RGB.NET.Devices.WS281X.Bitwizard /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + /// public Uri Image { get; set; } diff --git a/RGB.NET.Devices.WS281X/NodeMCU/NodeMCUWS2812USBDeviceInfo.cs b/RGB.NET.Devices.WS281X/NodeMCU/NodeMCUWS2812USBDeviceInfo.cs index 916f516..935dcf9 100644 --- a/RGB.NET.Devices.WS281X/NodeMCU/NodeMCUWS2812USBDeviceInfo.cs +++ b/RGB.NET.Devices.WS281X/NodeMCU/NodeMCUWS2812USBDeviceInfo.cs @@ -26,10 +26,7 @@ namespace RGB.NET.Devices.WS281X.NodeMCU /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + /// public Uri Image { get; set; } diff --git a/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs b/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs index bf91f8d..750daca 100644 --- a/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs @@ -30,10 +30,7 @@ namespace RGB.NET.Devices.Wooting.Generic /// public RGBDeviceLighting Lighting => RGBDeviceLighting.Key; - - /// - public bool SupportsSyncBack => false; - + /// /// Gets the of the . /// diff --git a/RGB.NET.sln b/RGB.NET.sln index 02cec92..9e742b4 100644 --- a/RGB.NET.sln +++ b/RGB.NET.sln @@ -27,8 +27,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Devices.Razer", "RG EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Devices.Roccat", "RGB.NET.Devices.Roccat\RGB.NET.Devices.Roccat.csproj", "{9DF256B9-1AB7-4D5B-B2E5-94AF6691DC9E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Devices.SoIP", "RGB.NET.Devices.SoIP\RGB.NET.Devices.SoIP.csproj", "{14FF7ECF-2E58-4B11-97A2-C5801E1BC696}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Brushes", "RGB.NET.Brushes\RGB.NET.Brushes.csproj", "{B159FB51-5939-490E-A1BA-FB55D4D7ADDF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Decorators", "RGB.NET.Decorators\RGB.NET.Decorators.csproj", "{8725C448-818C-41F7-B23F-F97E062BF233}" @@ -93,10 +91,6 @@ Global {9DF256B9-1AB7-4D5B-B2E5-94AF6691DC9E}.Debug|Any CPU.Build.0 = Debug|Any CPU {9DF256B9-1AB7-4D5B-B2E5-94AF6691DC9E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9DF256B9-1AB7-4D5B-B2E5-94AF6691DC9E}.Release|Any CPU.Build.0 = Release|Any CPU - {14FF7ECF-2E58-4B11-97A2-C5801E1BC696}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14FF7ECF-2E58-4B11-97A2-C5801E1BC696}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14FF7ECF-2E58-4B11-97A2-C5801E1BC696}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14FF7ECF-2E58-4B11-97A2-C5801E1BC696}.Release|Any CPU.Build.0 = Release|Any CPU {B159FB51-5939-490E-A1BA-FB55D4D7ADDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B159FB51-5939-490E-A1BA-FB55D4D7ADDF}.Debug|Any CPU.Build.0 = Debug|Any CPU {B159FB51-5939-490E-A1BA-FB55D4D7ADDF}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -143,7 +137,6 @@ Global {19F701FD-5577-4873-9BE6-6775676FA185} = {D13032C6-432E-4F43-8A32-071133C22B16} {2E162CB7-2C6C-4069-8356-06162F7BE0AA} = {D13032C6-432E-4F43-8A32-071133C22B16} {9DF256B9-1AB7-4D5B-B2E5-94AF6691DC9E} = {D13032C6-432E-4F43-8A32-071133C22B16} - {14FF7ECF-2E58-4B11-97A2-C5801E1BC696} = {D13032C6-432E-4F43-8A32-071133C22B16} {B159FB51-5939-490E-A1BA-FB55D4D7ADDF} = {EBC33090-8494-4DF4-B4B6-64D0E531E93F} {8725C448-818C-41F7-B23F-F97E062BF233} = {EBC33090-8494-4DF4-B4B6-64D0E531E93F} {6FEBDC9E-909D-4EE2-B003-EDFBEF5FFF40} = {EBC33090-8494-4DF4-B4B6-64D0E531E93F}