1
0
mirror of https://github.com/DarthAffe/CUE.NET.git synced 2025-12-13 09:08:34 +00:00

Added a method to check for SDK availability.

This should address #45
This commit is contained in:
Darth Affe 2016-06-03 20:51:20 +02:00
parent f71342545c
commit c1027df0f7

View File

@ -16,6 +16,8 @@ namespace CUE.NET
{ {
#region Properties & Fields #region Properties & Fields
private static bool _isInitialized;
// ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable UnusedAutoPropertyAccessor.Global
/// <summary> /// <summary>
@ -62,6 +64,47 @@ namespace CUE.NET
#region Methods #region Methods
public static bool IsSDKAvailable(CorsairDeviceType? sdkType = null)
{
try
{
if (_isInitialized)
{
switch (sdkType)
{
case CorsairDeviceType.Keyboard:
return KeyboardSDK != null;
case CorsairDeviceType.Mouse:
return MouseSDK != null;
case CorsairDeviceType.Headset:
return HeadsetSDK != null;
default:
return true;
}
}
else
{
_CUESDK.CorsairPerformProtocolHandshake();
if (sdkType == null || sdkType == CorsairDeviceType.Unknown)
return LastError == CorsairError.Success;
int deviceCount = _CUESDK.CorsairGetDeviceCount();
for (int i = 0; i < deviceCount; i++)
{
GenericDeviceInfo info = new GenericDeviceInfo((_CorsairDeviceInfo)Marshal.PtrToStructure(_CUESDK.CorsairGetDeviceInfo(i), typeof(_CorsairDeviceInfo)));
if (info.CapsMask.HasFlag(CorsairDeviceCaps.Lighting) && info.Type == sdkType.Value)
return true;
}
}
}
catch
{
return false;
}
return false;
}
// ReSharper disable once ExceptionNotThrown // ReSharper disable once ExceptionNotThrown
/// <summary> /// <summary>
/// Initializes the CUE-SDK. This method should be called exactly ONE time, before anything else is done. /// Initializes the CUE-SDK. This method should be called exactly ONE time, before anything else is done.
@ -71,7 +114,7 @@ namespace CUE.NET
/// <exception cref="CUEException">Thrown if the CUE-SDK provides an error.</exception> /// <exception cref="CUEException">Thrown if the CUE-SDK provides an error.</exception>
public static void Initialize(bool exclusiveAccess = false) public static void Initialize(bool exclusiveAccess = false)
{ {
if (ProtocolDetails != null) if (_isInitialized)
throw new WrapperException("CueSDK is already initialized."); throw new WrapperException("CueSDK is already initialized.");
ProtocolDetails = new CorsairProtocolDetails(_CUESDK.CorsairPerformProtocolHandshake()); ProtocolDetails = new CorsairProtocolDetails(_CUESDK.CorsairPerformProtocolHandshake());
@ -81,9 +124,7 @@ namespace CUE.NET
Throw(error); Throw(error);
if (ProtocolDetails.BreakingChanges) if (ProtocolDetails.BreakingChanges)
throw new WrapperException("The SDK currently used isn't compatible with the installed version of CUE.\r\n" + throw new WrapperException("The SDK currently used isn't compatible with the installed version of CUE.\r\n" + $"CUE-Version: {ProtocolDetails.ServerVersion} (Protocol {ProtocolDetails.ServerProtocolVersion})\r\n" + $"SDK-Version: {ProtocolDetails.SdkVersion} (Protocol {ProtocolDetails.SdkProtocolVersion})");
$"CUE-Version: {ProtocolDetails.ServerVersion} (Protocol {ProtocolDetails.ServerProtocolVersion})\r\n" +
$"SDK-Version: {ProtocolDetails.SdkVersion} (Protocol {ProtocolDetails.SdkProtocolVersion})");
if (exclusiveAccess) if (exclusiveAccess)
{ {
@ -123,6 +164,8 @@ namespace CUE.NET
if (error != CorsairError.Success) if (error != CorsairError.Success)
Throw(error); Throw(error);
} }
_isInitialized = true;
} }
/// <summary> /// <summary>
@ -139,7 +182,7 @@ namespace CUE.NET
/// <param name="exclusiveAccess">Specifies whether the application should request exclusive access or not.</param> /// <param name="exclusiveAccess">Specifies whether the application should request exclusive access or not.</param>
public static void Reinitialize(bool exclusiveAccess) public static void Reinitialize(bool exclusiveAccess)
{ {
if (ProtocolDetails == null) if (!_isInitialized)
throw new WrapperException("CueSDK isn't initialized."); throw new WrapperException("CueSDK isn't initialized.");
KeyboardSDK?.ResetLeds(); KeyboardSDK?.ResetLeds();
@ -155,9 +198,7 @@ namespace CUE.NET
Throw(error); Throw(error);
if (ProtocolDetails.BreakingChanges) if (ProtocolDetails.BreakingChanges)
throw new WrapperException("The SDK currently used isn't compatible with the installed version of CUE.\r\n" + throw new WrapperException("The SDK currently used isn't compatible with the installed version of CUE.\r\n" + $"CUE-Version: {ProtocolDetails.ServerVersion} (Protocol {ProtocolDetails.ServerProtocolVersion})\r\n" + $"SDK-Version: {ProtocolDetails.SdkVersion} (Protocol {ProtocolDetails.SdkProtocolVersion})");
$"CUE-Version: {ProtocolDetails.ServerVersion} (Protocol {ProtocolDetails.ServerProtocolVersion})\r\n" +
$"SDK-Version: {ProtocolDetails.SdkVersion} (Protocol {ProtocolDetails.SdkProtocolVersion})");
if (exclusiveAccess) if (exclusiveAccess)
if (!_CUESDK.CorsairRequestControl(CorsairAccessMode.ExclusiveLightingControl)) if (!_CUESDK.CorsairRequestControl(CorsairAccessMode.ExclusiveLightingControl))
@ -180,17 +221,16 @@ namespace CUE.NET
} }
if (KeyboardSDK != null) if (KeyboardSDK != null)
if (!reloadedDevices.ContainsKey(CorsairDeviceType.Keyboard) if (!reloadedDevices.ContainsKey(CorsairDeviceType.Keyboard) || KeyboardSDK.KeyboardDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Keyboard].Model)
|| KeyboardSDK.KeyboardDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Keyboard].Model)
throw new WrapperException("The previously loaded Keyboard got disconnected."); throw new WrapperException("The previously loaded Keyboard got disconnected.");
if (MouseSDK != null) if (MouseSDK != null)
if (!reloadedDevices.ContainsKey(CorsairDeviceType.Mouse) if (!reloadedDevices.ContainsKey(CorsairDeviceType.Mouse) || MouseSDK.MouseDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Mouse].Model)
|| MouseSDK.MouseDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Mouse].Model)
throw new WrapperException("The previously loaded Mouse got disconnected."); throw new WrapperException("The previously loaded Mouse got disconnected.");
if (HeadsetSDK != null) if (HeadsetSDK != null)
if (!reloadedDevices.ContainsKey(CorsairDeviceType.Headset) if (!reloadedDevices.ContainsKey(CorsairDeviceType.Headset) || HeadsetSDK.HeadsetDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Headset].Model)
|| HeadsetSDK.HeadsetDeviceInfo.Model != reloadedDevices[CorsairDeviceType.Headset].Model)
throw new WrapperException("The previously loaded Headset got disconnected."); throw new WrapperException("The previously loaded Headset got disconnected.");
_isInitialized = true;
} }
private static void Throw(CorsairError error) private static void Throw(CorsairError error)
@ -200,6 +240,7 @@ namespace CUE.NET
KeyboardSDK = null; KeyboardSDK = null;
MouseSDK = null; MouseSDK = null;
HeadsetSDK = null; HeadsetSDK = null;
_isInitialized = false;
throw new CUEException(error); throw new CUEException(error);
} }