diff --git a/CUE.NET.csproj b/CUE.NET.csproj
index a378353..61b3900 100644
--- a/CUE.NET.csproj
+++ b/CUE.NET.csproj
@@ -58,6 +58,9 @@
+
+
+
diff --git a/CUE.NET.sln b/CUE.NET.sln
index 8183f2b..d99caab 100644
--- a/CUE.NET.sln
+++ b/CUE.NET.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
-VisualStudioVersion = 14.0.23107.0
+VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CUE.NET", "CUE.NET.csproj", "{70A266B5-E9D4-4EAA-A91A-947C0039FFB6}"
EndProject
@@ -20,12 +20,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{D69EF6D8-6
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "x86", "x86", "{0525D895-E706-4920-8733-DABD9194BFB1}"
ProjectSection(SolutionItems) = preProject
- libs\x86\CUESDK_2013.dll = libs\x86\CUESDK_2013.dll
+ bin\x86\CUESDK_2015.dll = bin\x86\CUESDK_2015.dll
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "x64", "x64", "{2F99124B-FAED-432D-B797-45566D373411}"
ProjectSection(SolutionItems) = preProject
- libs\x64\CUESDK_2013.dll = libs\x64\CUESDK_2013.dll
+ bin\x64\CUESDK_2015.dll = bin\x64\CUESDK_2015.dll
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AudioAnalyzer", "AudioAnalyzer", "{BE16A0BF-6794-4718-AF27-F2A50078D880}"
diff --git a/CueSDK.cs b/CueSDK.cs
index 5a233ad..0369cfd 100644
--- a/CueSDK.cs
+++ b/CueSDK.cs
@@ -7,6 +7,7 @@ using CUE.NET.Devices.Generic.Enums;
using CUE.NET.Devices.Headset;
using CUE.NET.Devices.Keyboard;
using CUE.NET.Devices.Mouse;
+using CUE.NET.Devices.Mousemat;
using CUE.NET.Exceptions;
using CUE.NET.Native;
@@ -61,6 +62,12 @@ namespace CUE.NET
///
public static CorsairHeadset HeadsetSDK { get; private set; }
+ ///
+ /// Gets the managed representation of a moustmat managed by the CUE-SDK.
+ /// Note that currently only one connected mousemat is supported.
+ ///
+ public static CorsairMousemat MousematSDK { get; private set; }
+
// ReSharper restore UnusedAutoPropertyAccessor.Global
#endregion
@@ -86,6 +93,8 @@ namespace CUE.NET
return MouseSDK != null;
case CorsairDeviceType.Headset:
return HeadsetSDK != null;
+ case CorsairDeviceType.Mousemat:
+ return MousematSDK != null;
default:
return true;
}
@@ -163,7 +172,9 @@ namespace CUE.NET
case CorsairDeviceType.Headset:
HeadsetSDK = new CorsairHeadset(new CorsairHeadsetDeviceInfo(nativeDeviceInfo));
break;
-
+ case CorsairDeviceType.Mousemat:
+ MousematSDK = new CorsairMousemat(new CorsairMousematDeviceInfo(nativeDeviceInfo));
+ break;
// ReSharper disable once RedundantCaseLabel
case CorsairDeviceType.Unknown:
default:
@@ -198,6 +209,7 @@ namespace CUE.NET
KeyboardSDK?.ResetLeds();
MouseSDK?.ResetLeds();
HeadsetSDK?.ResetLeds();
+ MousematSDK?.ResetLeds();
_CUESDK.Reload();
@@ -244,6 +256,10 @@ namespace CUE.NET
if (!reloadedDevices.ContainsKey(CorsairDeviceType.Headset)
|| HeadsetSDK.HeadsetDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Headset].Model)
throw new WrapperException("The previously loaded Headset got disconnected.");
+ if (MousematSDK != null)
+ if (!reloadedDevices.ContainsKey(CorsairDeviceType.Mousemat)
+ || MousematSDK.MousematDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Mousemat].Model)
+ throw new WrapperException("The previously loaded Mousemat got disconnected.");
IsInitialized = true;
}
@@ -255,6 +271,7 @@ namespace CUE.NET
KeyboardSDK = null;
MouseSDK = null;
HeadsetSDK = null;
+ MousematSDK = null;
IsInitialized = false;
throw new CUEException(error);
diff --git a/Devices/Generic/Enums/CorsairDeviceType.cs b/Devices/Generic/Enums/CorsairDeviceType.cs
index 4deeeba..0e31b63 100644
--- a/Devices/Generic/Enums/CorsairDeviceType.cs
+++ b/Devices/Generic/Enums/CorsairDeviceType.cs
@@ -11,6 +11,7 @@ namespace CUE.NET.Devices.Generic.Enums
Unknown = 0,
Mouse = 1,
Keyboard = 2,
- Headset = 3
+ Headset = 3,
+ Mousemat = 4
};
}
diff --git a/Devices/Mousemat/CorsairMousemat.cs b/Devices/Mousemat/CorsairMousemat.cs
new file mode 100644
index 0000000..efcdc0d
--- /dev/null
+++ b/Devices/Mousemat/CorsairMousemat.cs
@@ -0,0 +1,149 @@
+// ReSharper disable UnusedAutoPropertyAccessor.Global
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable UnusedMember.Global
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Drawing;
+using System.Linq;
+using System.Runtime.InteropServices;
+using CUE.NET.Devices.Generic;
+using CUE.NET.Devices.Generic.Enums;
+using CUE.NET.Devices.Mousemat.Enums;
+using CUE.NET.Effects;
+using CUE.NET.Exceptions;
+using CUE.NET.Native;
+
+namespace CUE.NET.Devices.Mousemat
+{
+ ///
+ /// Represents the SDK for a corsair mousemat.
+ ///
+ public class CorsairMousemat : AbstractCueDevice, IEnumerable
+ {
+ #region Properties & Fields
+
+ #region Indexer
+
+ ///
+ /// Gets the with the specified ID.
+ ///
+ /// The ID of the LED to get.
+ /// The LED with the specified ID.
+ public CorsairLed this[CorsairMousematLedId ledId]
+ {
+ get
+ {
+ CorsairLed led;
+ return base.Leds.TryGetValue((int)ledId, out led) ? led : null;
+ }
+ }
+
+ #endregion
+
+ ///
+ /// Gets specific information provided by CUE for the mousemat.
+ ///
+ public CorsairMousematDeviceInfo MousematDeviceInfo { get; }
+
+ ///
+ /// Gets a value indicating if the mousemat has an active effect to deal with or not.
+ ///
+ protected override bool HasEffect => false;
+
+ ///
+ /// Gets a read-only collection containing all LEDs of the mousemat.
+ ///
+ public new IEnumerable Leds => new ReadOnlyCollection(base.Leds.Values.ToList());
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The specific information provided by CUE for the mousemat
+ internal CorsairMousemat(CorsairMousematDeviceInfo info)
+ : base(info)
+ {
+ this.MousematDeviceInfo = info;
+ InitializeLeds();
+ }
+
+ #endregion
+
+ #region Methods
+
+ private void InitializeLeds()
+ {
+ int deviceCount = _CUESDK.CorsairGetDeviceCount();
+
+ // Get mousemat device index
+ int mousematIndex = -1;
+ for (int i = 0; i < deviceCount; i++)
+ {
+ _CorsairDeviceInfo nativeDeviceInfo = (_CorsairDeviceInfo)Marshal.PtrToStructure(_CUESDK.CorsairGetDeviceInfo(i), typeof(_CorsairDeviceInfo));
+ GenericDeviceInfo info = new GenericDeviceInfo(nativeDeviceInfo);
+ if (info.Type != CorsairDeviceType.Mousemat)
+ continue;
+
+ mousematIndex = i;
+ break;
+ }
+ if (mousematIndex < 0)
+ throw new WrapperException("Can't determine mousemat device index");
+
+ _CorsairLedPositions nativeLedPositions = (_CorsairLedPositions)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(mousematIndex), typeof(_CorsairLedPositions));
+ int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
+ IntPtr ptr = nativeLedPositions.pLedPosition;
+
+ // Put the positions in an array for sorting later on
+ List<_CorsairLedPosition> positions = new List<_CorsairLedPosition>();
+ for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
+ {
+ _CorsairLedPosition ledPosition = (_CorsairLedPosition)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
+ ptr = new IntPtr(ptr.ToInt64() + structSize);
+ positions.Add(ledPosition);
+ }
+
+ // Sort for easy iteration by clients
+ foreach (_CorsairLedPosition position in positions.OrderBy(p => p.ledId))
+ GetLed((int)position.ledId);
+ }
+
+ protected override void DeviceUpdate()
+ {
+ //TODO SpoinkyNL 01.09.2016: I'm not sure what DarthAffe is planning with this, will note in PR
+ }
+
+ protected override void ApplyEffect(IEffect effect)
+ {
+ //TODO SpoinkyNL 09.09.2016: How should brushes be applied to mousemats? This seems to be gone in the dev branch
+ foreach (CorsairLed led in effect.LedList)
+ led.Color = effect.EffectBrush.GetColorAtPoint(new RectangleF(0, 0, 2, 2), new PointF(1, 1));
+ }
+
+ #region IEnumerable
+
+ ///
+ /// Returns an enumerator that iterates over all LEDs of the mousemat.
+ ///
+ /// An enumerator for all LDS of the mousemat.
+ public IEnumerator GetEnumerator()
+ {
+ return Leds.GetEnumerator();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ #endregion
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Devices/Mousemat/CorsairMousematDeviceInfo.cs b/Devices/Mousemat/CorsairMousematDeviceInfo.cs
new file mode 100644
index 0000000..41be788
--- /dev/null
+++ b/Devices/Mousemat/CorsairMousematDeviceInfo.cs
@@ -0,0 +1,27 @@
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable UnusedAutoPropertyAccessor.Global
+
+using CUE.NET.Devices.Generic;
+using CUE.NET.Native;
+
+namespace CUE.NET.Devices.Mousemat
+{
+ ///
+ /// Represents specific information for a CUE Mousemat.
+ ///
+ public class CorsairMousematDeviceInfo : GenericDeviceInfo
+ {
+ #region Constructors
+
+ ///
+ /// Internal constructor of managed .
+ ///
+ /// The native -struct
+ internal CorsairMousematDeviceInfo(_CorsairDeviceInfo nativeInfo)
+ : base(nativeInfo)
+ {
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Devices/Mousemat/Enums/CorsairMousematLedId.cs b/Devices/Mousemat/Enums/CorsairMousematLedId.cs
new file mode 100644
index 0000000..d3a6d5f
--- /dev/null
+++ b/Devices/Mousemat/Enums/CorsairMousematLedId.cs
@@ -0,0 +1,25 @@
+namespace CUE.NET.Devices.Mousemat.Enums
+{
+ ///
+ /// Contains list of all LEDs available for corsair mousemats.
+ ///
+ public enum CorsairMousematLedId
+ {
+ Invalid = 0,
+ Zone1 = 155,
+ Zone2 = 156,
+ Zone3 = 157,
+ Zone4 = 158,
+ Zone5 = 159,
+ Zone6 = 160,
+ Zone7 = 161,
+ Zone8 = 162,
+ Zone9 = 163,
+ Zone10 = 164,
+ Zone11 = 165,
+ Zone12 = 166,
+ Zone13 = 167,
+ Zone14 = 168,
+ Zone15 = 169
+ }
+}
\ No newline at end of file
diff --git a/Examples/AudioAnalyzer/Example_AudioAnalyzer_full/Example_AudioAnalyzer_full.csproj b/Examples/AudioAnalyzer/Example_AudioAnalyzer_full/Example_AudioAnalyzer_full.csproj
index 6ba9d6d..f15269a 100644
--- a/Examples/AudioAnalyzer/Example_AudioAnalyzer_full/Example_AudioAnalyzer_full.csproj
+++ b/Examples/AudioAnalyzer/Example_AudioAnalyzer_full/Example_AudioAnalyzer_full.csproj
@@ -96,7 +96,7 @@
- xcopy "$(SolutionDir)libs\x86\CUESDK_2013.dll" "$(TargetDir)x86\" /y
+ xcopy "$(SolutionDir)libs\x86\CUESDK_2015.dll" "$(TargetDir)x86\" /y