From 2bbfe6c6f7228de5ae64f7c806c931dba0dbca5d Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Mon, 2 Apr 2018 16:11:58 +0200 Subject: [PATCH] Fixed not working razer headset and chroma-link devices by using type-effects not device-effects --- .../ChromaLink/RazerChromaLinkUpdateQueue.cs | 3 +++ RGB.NET.Devices.Razer/Enum/RazerError.cs | 4 ++-- RGB.NET.Devices.Razer/Generic/RazerUpdateQueue.cs | 4 +++- .../Headset/RazerHeadsetUpdateQueue.cs | 5 ++++- RGB.NET.Devices.Razer/Native/_Defines.cs | 2 ++ RGB.NET.Devices.Razer/Native/_RazerSDK.cs | 14 ++++++++++++++ 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/RGB.NET.Devices.Razer/ChromaLink/RazerChromaLinkUpdateQueue.cs b/RGB.NET.Devices.Razer/ChromaLink/RazerChromaLinkUpdateQueue.cs index 0395c21..22ba06f 100644 --- a/RGB.NET.Devices.Razer/ChromaLink/RazerChromaLinkUpdateQueue.cs +++ b/RGB.NET.Devices.Razer/ChromaLink/RazerChromaLinkUpdateQueue.cs @@ -34,6 +34,9 @@ namespace RGB.NET.Devices.Razer return ptr; } + /// + protected override void CreateEffect(IntPtr effectParams, ref Guid effectId) => _RazerSDK.CreateChromaLinkEffect(_Defines.CHROMALINK_EFFECT_ID, effectParams, ref effectId); + #endregion } } diff --git a/RGB.NET.Devices.Razer/Enum/RazerError.cs b/RGB.NET.Devices.Razer/Enum/RazerError.cs index 06321a7..3400792 100644 --- a/RGB.NET.Devices.Razer/Enum/RazerError.cs +++ b/RGB.NET.Devices.Razer/Enum/RazerError.cs @@ -3,7 +3,7 @@ /// /// Razer-SDK: Error codes for Chroma SDK. If the error is not defined here, refer to WinError.h from the Windows SDK. /// - public enum RazerError : long + public enum RazerError : int { /// /// Razer-SDK: Invalid. @@ -88,6 +88,6 @@ /// /// Razer-SDK: General failure. /// - Failed = 2147500037 + Failed = unchecked(-2147467259) } } diff --git a/RGB.NET.Devices.Razer/Generic/RazerUpdateQueue.cs b/RGB.NET.Devices.Razer/Generic/RazerUpdateQueue.cs index 97baf19..0da1d49 100644 --- a/RGB.NET.Devices.Razer/Generic/RazerUpdateQueue.cs +++ b/RGB.NET.Devices.Razer/Generic/RazerUpdateQueue.cs @@ -31,7 +31,7 @@ namespace RGB.NET.Devices.Razer { IntPtr effectParams = CreateEffectParams(dataSet); Guid effectId = Guid.NewGuid(); - _RazerSDK.CreateEffect(_deviceId, _Defines.EFFECT_ID, effectParams, ref effectId); + CreateEffect(effectParams, ref effectId); _RazerSDK.SetEffect(effectId); @@ -41,6 +41,8 @@ namespace RGB.NET.Devices.Razer _lastEffect = effectId; } + protected virtual void CreateEffect(IntPtr effectParams, ref Guid effectId) => _RazerSDK.CreateEffect(_deviceId, _Defines.EFFECT_ID, effectParams, ref effectId); + /// public override void Reset() { diff --git a/RGB.NET.Devices.Razer/Headset/RazerHeadsetUpdateQueue.cs b/RGB.NET.Devices.Razer/Headset/RazerHeadsetUpdateQueue.cs index b867a4e..f038e4c 100644 --- a/RGB.NET.Devices.Razer/Headset/RazerHeadsetUpdateQueue.cs +++ b/RGB.NET.Devices.Razer/Headset/RazerHeadsetUpdateQueue.cs @@ -27,13 +27,16 @@ namespace RGB.NET.Devices.Razer colors[(int)data.Key] = new _Color(data.Value); _HeadsetCustomEffect effectParams = new _HeadsetCustomEffect { Color = colors }; - + IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(effectParams)); Marshal.StructureToPtr(effectParams, ptr, false); return ptr; } + /// + protected override void CreateEffect(IntPtr effectParams, ref Guid effectId) => _RazerSDK.CreateHeadsetEffect(_Defines.HEADSET_EFFECT_ID, effectParams, ref effectId); + #endregion } } diff --git a/RGB.NET.Devices.Razer/Native/_Defines.cs b/RGB.NET.Devices.Razer/Native/_Defines.cs index 2c0c724..17d5167 100644 --- a/RGB.NET.Devices.Razer/Native/_Defines.cs +++ b/RGB.NET.Devices.Razer/Native/_Defines.cs @@ -3,6 +3,8 @@ internal static class _Defines { internal const int EFFECT_ID = 7; + internal const int HEADSET_EFFECT_ID = 4; + internal const int CHROMALINK_EFFECT_ID = 1; internal const int KEYBOARD_MAX_ROW = 6; internal const int KEYBOARD_MAX_COLUMN = 22; diff --git a/RGB.NET.Devices.Razer/Native/_RazerSDK.cs b/RGB.NET.Devices.Razer/Native/_RazerSDK.cs index b2638cb..17742b3 100644 --- a/RGB.NET.Devices.Razer/Native/_RazerSDK.cs +++ b/RGB.NET.Devices.Razer/Native/_RazerSDK.cs @@ -46,6 +46,8 @@ namespace RGB.NET.Devices.Razer.Native _unInitPointer = (UnInitPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "UnInit"), typeof(UnInitPointer)); _queryDevicePointer = (QueryDevicePointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "QueryDevice"), typeof(QueryDevicePointer)); _createEffectPointer = (CreateEffectPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "CreateEffect"), typeof(CreateEffectPointer)); + _createHeadsetEffectPointer = (CreateHeadsetEffectPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "CreateHeadsetEffect"), typeof(CreateHeadsetEffectPointer)); + _createChromaLinkEffectPointer = (CreateChromaLinkEffectPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "CreateChromaLinkEffect"), typeof(CreateChromaLinkEffectPointer)); _setEffectPointer = (SetEffectPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "SetEffect"), typeof(SetEffectPointer)); _deleteEffectPointer = (DeleteEffectPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "DeleteEffect"), typeof(DeleteEffectPointer)); } @@ -78,6 +80,8 @@ namespace RGB.NET.Devices.Razer.Native private static UnInitPointer _unInitPointer; private static QueryDevicePointer _queryDevicePointer; private static CreateEffectPointer _createEffectPointer; + private static CreateHeadsetEffectPointer _createHeadsetEffectPointer; + private static CreateChromaLinkEffectPointer _createChromaLinkEffectPointer; private static SetEffectPointer _setEffectPointer; private static DeleteEffectPointer _deleteEffectPointer; @@ -97,6 +101,12 @@ namespace RGB.NET.Devices.Razer.Native [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate RazerError CreateEffectPointer(Guid deviceId, int effectType, IntPtr param, ref Guid effectId); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate RazerError CreateHeadsetEffectPointer(int effectType, IntPtr param, ref Guid effectId); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate RazerError CreateChromaLinkEffectPointer(int effectType, IntPtr param, ref Guid effectId); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate RazerError SetEffectPointer(Guid effectId); @@ -135,6 +145,10 @@ namespace RGB.NET.Devices.Razer.Native internal static RazerError CreateEffect(Guid deviceId, int effectType, IntPtr param, ref Guid effectId) => _createEffectPointer(deviceId, effectType, param, ref effectId); + internal static RazerError CreateHeadsetEffect(int effectType, IntPtr param, ref Guid effectId) => _createHeadsetEffectPointer(effectType, param, ref effectId); + + internal static RazerError CreateChromaLinkEffect(int effectType, IntPtr param, ref Guid effectId) => _createChromaLinkEffectPointer(effectType, param, ref effectId); + internal static RazerError SetEffect(Guid effectId) => _setEffectPointer(effectId); internal static RazerError DeleteEffect(Guid effectId) => _deleteEffectPointer(effectId);