mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Started work on Corsair mouse support
This commit is contained in:
parent
a9373012a8
commit
3a18ce4a5a
@ -278,22 +278,23 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="ArtemisBootstrapper.cs" />
|
<Compile Include="ArtemisBootstrapper.cs" />
|
||||||
<Compile Include="DAL\ProfileProvider.cs" />
|
<Compile Include="DAL\ProfileProvider.cs" />
|
||||||
|
<Compile Include="DeviceProviders\Corsair\CorsairMice.cs" />
|
||||||
|
<Compile Include="DeviceProviders\DeviceProvider.cs" />
|
||||||
<Compile Include="Events\ActiveKeyboardChanged.cs" />
|
<Compile Include="Events\ActiveKeyboardChanged.cs" />
|
||||||
<Compile Include="Events\ToggleEnabled.cs" />
|
<Compile Include="Events\ToggleEnabled.cs" />
|
||||||
<Compile Include="Events\ActiveEffectChanged.cs" />
|
<Compile Include="Events\ActiveEffectChanged.cs" />
|
||||||
<Compile Include="Events\ChangeBitmap.cs" />
|
<Compile Include="Events\ChangeBitmap.cs" />
|
||||||
<Compile Include="InjectionFactories\IProfileEditorViewModelFactory.cs" />
|
<Compile Include="InjectionFactories\IProfileEditorViewModelFactory.cs" />
|
||||||
<Compile Include="ItemBehaviours\BindableSelectedItemBehavior.cs" />
|
<Compile Include="ItemBehaviours\BindableSelectedItemBehavior.cs" />
|
||||||
<Compile Include="KeyboardProviders\Corsair\CorsairRGB.cs" />
|
<Compile Include="DeviceProviders\Corsair\CorsairRGB.cs" />
|
||||||
<Compile Include="KeyboardProviders\KeyboardProvider.cs" />
|
<Compile Include="DeviceProviders\KeyboardProvider.cs" />
|
||||||
<Compile Include="KeyboardProviders\KeyboardRegion.cs" />
|
<Compile Include="DeviceProviders\Logitech\Orion.cs" />
|
||||||
<Compile Include="KeyboardProviders\Logitech\Orion.cs" />
|
<Compile Include="DeviceProviders\Logitech\Utilities\KeyboardNames.cs" />
|
||||||
<Compile Include="KeyboardProviders\Logitech\Utilities\KeyboardNames.cs" />
|
<Compile Include="DeviceProviders\Logitech\Utilities\KeyMap.cs" />
|
||||||
<Compile Include="KeyboardProviders\Logitech\Utilities\KeyMap.cs" />
|
<Compile Include="DeviceProviders\Logitech\Utilities\LogitechGSDK.cs" />
|
||||||
<Compile Include="KeyboardProviders\Logitech\Utilities\LogitechGSDK.cs" />
|
<Compile Include="DeviceProviders\Logitech\Utilities\OrionUtilities.cs" />
|
||||||
<Compile Include="KeyboardProviders\Logitech\Utilities\OrionUtilities.cs" />
|
<Compile Include="DeviceProviders\Razer\BlackWidow.cs" />
|
||||||
<Compile Include="KeyboardProviders\Razer\BlackWidow.cs" />
|
<Compile Include="DeviceProviders\Razer\Utilities\RazerUtilities.cs" />
|
||||||
<Compile Include="KeyboardProviders\Razer\Utilities\RazerUtilities.cs" />
|
|
||||||
<Compile Include="Managers\EffectManager.cs" />
|
<Compile Include="Managers\EffectManager.cs" />
|
||||||
<Compile Include="Managers\KeyboardManager.cs" />
|
<Compile Include="Managers\KeyboardManager.cs" />
|
||||||
<Compile Include="Managers\LoopManager.cs" />
|
<Compile Include="Managers\LoopManager.cs" />
|
||||||
|
|||||||
@ -4,7 +4,7 @@ using System.Diagnostics;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using Artemis.KeyboardProviders;
|
using Artemis.DeviceProviders;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
using Artemis.Models.Profiles;
|
using Artemis.Models.Profiles;
|
||||||
|
|
||||||
|
|||||||
74
Artemis/Artemis/DeviceProviders/Corsair/CorsairMice.cs
Normal file
74
Artemis/Artemis/DeviceProviders/Corsair/CorsairMice.cs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
using System.Threading;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using CUE.NET;
|
||||||
|
using CUE.NET.Devices.Generic.Enums;
|
||||||
|
using CUE.NET.Devices.Mouse;
|
||||||
|
using CUE.NET.Exceptions;
|
||||||
|
|
||||||
|
namespace Artemis.DeviceProviders.Corsair
|
||||||
|
{
|
||||||
|
internal class CorsairMice : DeviceProvider
|
||||||
|
{
|
||||||
|
private readonly CorsairRGB _corsairRgb;
|
||||||
|
private CorsairMouse _mouse;
|
||||||
|
|
||||||
|
public CorsairMice(CorsairRGB corsairRgb)
|
||||||
|
{
|
||||||
|
_corsairRgb = corsairRgb;
|
||||||
|
UpdateCanUse();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateCanUse()
|
||||||
|
{
|
||||||
|
if (!CanInitializeSdk())
|
||||||
|
{
|
||||||
|
CanUse = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CueSDK.ProtocolDetails == null)
|
||||||
|
CueSDK.Initialize(true);
|
||||||
|
|
||||||
|
_mouse = CueSDK.MouseSDK;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool CanInitializeSdk()
|
||||||
|
{
|
||||||
|
// Try for about 10 seconds, in case CUE isn't started yet
|
||||||
|
var tries = 0;
|
||||||
|
while (tries < 9)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (CueSDK.ProtocolDetails == null)
|
||||||
|
CueSDK.Initialize();
|
||||||
|
}
|
||||||
|
catch (CUEException e)
|
||||||
|
{
|
||||||
|
if (e.Error == CorsairError.ServerNotFound)
|
||||||
|
{
|
||||||
|
tries++;
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (WrapperException)
|
||||||
|
{
|
||||||
|
CueSDK.Reinitialize();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void UpdateDevice(Brush brush)
|
||||||
|
{
|
||||||
|
if (!CanUse)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,122 +1,122 @@
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using Artemis.Properties;
|
using Artemis.Properties;
|
||||||
using Artemis.Utilities;
|
using Artemis.Utilities;
|
||||||
using CUE.NET;
|
using CUE.NET;
|
||||||
using CUE.NET.Brushes;
|
using CUE.NET.Brushes;
|
||||||
using CUE.NET.Devices.Generic.Enums;
|
using CUE.NET.Devices.Generic.Enums;
|
||||||
using CUE.NET.Devices.Keyboard;
|
using CUE.NET.Devices.Keyboard;
|
||||||
using CUE.NET.Exceptions;
|
using CUE.NET.Exceptions;
|
||||||
|
|
||||||
namespace Artemis.KeyboardProviders.Corsair
|
namespace Artemis.DeviceProviders.Corsair
|
||||||
{
|
{
|
||||||
public class CorsairRGB : KeyboardProvider
|
public class CorsairRGB : KeyboardProvider
|
||||||
{
|
{
|
||||||
private CorsairKeyboard _keyboard;
|
private CorsairKeyboard _keyboard;
|
||||||
|
|
||||||
public CorsairRGB()
|
public CorsairRGB()
|
||||||
{
|
{
|
||||||
Name = "Corsair RGB Keyboards";
|
Name = "Corsair RGB Keyboards";
|
||||||
CantEnableText = "Couldn't connect to your Corsair keyboard.\n" +
|
CantEnableText = "Couldn't connect to your Corsair keyboard.\n" +
|
||||||
"Please check your cables and/or drivers (could be outdated) and that Corsair Utility Engine is running.\n" +
|
"Please check your cables and/or drivers (could be outdated) and that Corsair Utility Engine is running.\n" +
|
||||||
"In CUE, make sure \"Enable SDK\" is checked under Settings > Program.\n\n" +
|
"In CUE, make sure \"Enable SDK\" is checked under Settings > Program.\n\n" +
|
||||||
"If needed, you can select a different keyboard in Artemis under settings.";
|
"If needed, you can select a different keyboard in Artemis under settings.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool CanEnable()
|
public override bool CanEnable()
|
||||||
{
|
{
|
||||||
// Try for about 10 seconds, in case CUE isn't started yet
|
// Try for about 10 seconds, in case CUE isn't started yet
|
||||||
var tries = 0;
|
var tries = 0;
|
||||||
while (tries < 9)
|
while (tries < 9)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (CueSDK.ProtocolDetails == null)
|
if (CueSDK.ProtocolDetails == null)
|
||||||
CueSDK.Initialize();
|
CueSDK.Initialize();
|
||||||
}
|
}
|
||||||
catch (CUEException e)
|
catch (CUEException e)
|
||||||
{
|
{
|
||||||
if (e.Error == CorsairError.ServerNotFound)
|
if (e.Error == CorsairError.ServerNotFound)
|
||||||
{
|
{
|
||||||
tries++;
|
tries++;
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (WrapperException)
|
catch (WrapperException)
|
||||||
{
|
{
|
||||||
CueSDK.Reinitialize();
|
CueSDK.Reinitialize();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables the SDK and sets updatemode to manual as well as the color of the background to black.
|
/// Enables the SDK and sets updatemode to manual as well as the color of the background to black.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override void Enable()
|
public override void Enable()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (CueSDK.ProtocolDetails == null)
|
if (CueSDK.ProtocolDetails == null)
|
||||||
CueSDK.Initialize(true);
|
CueSDK.Initialize(true);
|
||||||
}
|
}
|
||||||
catch (WrapperException)
|
catch (WrapperException)
|
||||||
{
|
{
|
||||||
/*CUE is already initialized*/
|
/*CUE is already initialized*/
|
||||||
}
|
}
|
||||||
_keyboard = CueSDK.KeyboardSDK;
|
_keyboard = CueSDK.KeyboardSDK;
|
||||||
if (_keyboard.DeviceInfo.Model == "K95 RGB")
|
if (_keyboard.DeviceInfo.Model == "K95 RGB")
|
||||||
{
|
{
|
||||||
Height = 7;
|
Height = 7;
|
||||||
Width = 25;
|
Width = 25;
|
||||||
PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k95);
|
PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k95);
|
||||||
}
|
}
|
||||||
else if (_keyboard.DeviceInfo.Model == "K70 RGB")
|
else if (_keyboard.DeviceInfo.Model == "K70 RGB")
|
||||||
{
|
{
|
||||||
Height = 7;
|
Height = 7;
|
||||||
Width = 21;
|
Width = 21;
|
||||||
PreviewSettings = new PreviewSettings(626, 195, new Thickness(0, -25, 0, 0), Resources.k70);
|
PreviewSettings = new PreviewSettings(626, 195, new Thickness(0, -25, 0, 0), Resources.k70);
|
||||||
}
|
}
|
||||||
else if (_keyboard.DeviceInfo.Model == "K65 RGB")
|
else if (_keyboard.DeviceInfo.Model == "K65 RGB")
|
||||||
{
|
{
|
||||||
Height = 7;
|
Height = 7;
|
||||||
Width = 18;
|
Width = 18;
|
||||||
PreviewSettings = new PreviewSettings(610, 240, new Thickness(0, -30, 0, 0), Resources.k65);
|
PreviewSettings = new PreviewSettings(610, 240, new Thickness(0, -30, 0, 0), Resources.k65);
|
||||||
}
|
}
|
||||||
else if (_keyboard.DeviceInfo.Model == "STRAFE RGB")
|
else if (_keyboard.DeviceInfo.Model == "STRAFE RGB")
|
||||||
{
|
{
|
||||||
Height = 6;
|
Height = 6;
|
||||||
Width = 22;
|
Width = 22;
|
||||||
PreviewSettings = new PreviewSettings(620, 215, new Thickness(0, -15, 0, 0), Resources.strafe);
|
PreviewSettings = new PreviewSettings(620, 215, new Thickness(0, -15, 0, 0), Resources.strafe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Disable()
|
public override void Disable()
|
||||||
{
|
{
|
||||||
CueSDK.Reinitialize();
|
CueSDK.Reinitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Properly resizes any size bitmap to the keyboard by creating a rectangle whose size is dependent on the bitmap
|
/// Properly resizes any size bitmap to the keyboard by creating a rectangle whose size is dependent on the bitmap
|
||||||
/// size.
|
/// size.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="bitmap"></param>
|
/// <param name="bitmap"></param>
|
||||||
public override void DrawBitmap(Bitmap bitmap)
|
public override void DrawBitmap(Bitmap bitmap)
|
||||||
{
|
{
|
||||||
var image = ImageUtilities.ResizeImage(bitmap, Width, Height);
|
var image = ImageUtilities.ResizeImage(bitmap, Width, Height);
|
||||||
var brush = new ImageBrush
|
var brush = new ImageBrush
|
||||||
{
|
{
|
||||||
Image = image
|
Image = image
|
||||||
};
|
};
|
||||||
|
|
||||||
_keyboard.Brush = brush;
|
_keyboard.Brush = brush;
|
||||||
_keyboard.Update();
|
_keyboard.Update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
30
Artemis/Artemis/DeviceProviders/DeviceProvider.cs
Normal file
30
Artemis/Artemis/DeviceProviders/DeviceProvider.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace Artemis.DeviceProviders
|
||||||
|
{
|
||||||
|
public abstract class DeviceProvider
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates the device type
|
||||||
|
/// </summary>
|
||||||
|
public DeviceType Type { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates whether or not the device can be updated
|
||||||
|
/// </summary>
|
||||||
|
public bool CanUse { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a non-keyboard to take the colours of the provided brush
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="brush"></param>
|
||||||
|
public abstract void UpdateDevice(Brush brush);
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DeviceType
|
||||||
|
{
|
||||||
|
Keyboard,
|
||||||
|
Mouse,
|
||||||
|
Headset
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,69 +1,64 @@
|
|||||||
using System.Drawing;
|
using System;
|
||||||
using System.Windows;
|
using System.Drawing;
|
||||||
using Size = System.Windows.Size;
|
using System.Windows;
|
||||||
|
using Brush = System.Windows.Media.Brush;
|
||||||
namespace Artemis.KeyboardProviders
|
using Size = System.Windows.Size;
|
||||||
{
|
|
||||||
public abstract class KeyboardProvider : DeviceProvider
|
namespace Artemis.DeviceProviders
|
||||||
{
|
{
|
||||||
protected KeyboardProvider()
|
public abstract class KeyboardProvider : DeviceProvider
|
||||||
{
|
{
|
||||||
Type = DeviceType.Keyboard;
|
protected KeyboardProvider()
|
||||||
}
|
{
|
||||||
|
Type = DeviceType.Keyboard;
|
||||||
public string Name { get; set; }
|
}
|
||||||
public int Height { get; set; }
|
|
||||||
public int Width { get; set; }
|
public string Name { get; set; }
|
||||||
public string CantEnableText { get; set; }
|
public int Height { get; set; }
|
||||||
|
public int Width { get; set; }
|
||||||
public PreviewSettings PreviewSettings { get; set; }
|
public string CantEnableText { get; set; }
|
||||||
|
|
||||||
public abstract bool CanEnable();
|
public PreviewSettings PreviewSettings { get; set; }
|
||||||
public abstract void Enable();
|
|
||||||
// TODO: This should be done in a background thread with a callback mechanism as it causes UI lag
|
public abstract bool CanEnable();
|
||||||
public abstract void Disable();
|
public abstract void Enable();
|
||||||
public abstract void DrawBitmap(Bitmap bitmap);
|
// TODO: This should be done in a background thread with a callback mechanism as it causes UI lag
|
||||||
|
public abstract void Disable();
|
||||||
/// <summary>
|
public abstract void DrawBitmap(Bitmap bitmap);
|
||||||
/// Returns a bitmap matching the keyboard's dimensions
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <returns></returns>
|
/// Returns a bitmap matching the keyboard's dimensions
|
||||||
public Bitmap KeyboardBitmap() => new Bitmap(Width, Height);
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
/// <summary>
|
public Bitmap KeyboardBitmap() => new Bitmap(Width, Height);
|
||||||
/// Returns a bitmap matching the keyboard's dimensions using the provided scale
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <returns></returns>
|
/// Returns a bitmap matching the keyboard's dimensions using the provided scale
|
||||||
public Bitmap KeyboardBitmap(int scale) => new Bitmap(Width*scale, Height*scale);
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public Rect KeyboardRectangle(int scale) => new Rect(new Size(Width*scale, Height*scale));
|
public Bitmap KeyboardBitmap(int scale) => new Bitmap(Width*scale, Height*scale);
|
||||||
}
|
|
||||||
|
public Rect KeyboardRectangle(int scale) => new Rect(new Size(Width*scale, Height*scale));
|
||||||
public class DeviceProvider
|
|
||||||
{
|
public override void UpdateDevice(Brush brush)
|
||||||
public DeviceType Type { get; set; }
|
{
|
||||||
}
|
throw new NotImplementedException("KeyboardProvider doesn't implement UpdateDevice, use DrawBitmap instead.");
|
||||||
|
}
|
||||||
public enum DeviceType
|
}
|
||||||
{
|
|
||||||
Keyboard,
|
public struct PreviewSettings
|
||||||
Mouse,
|
{
|
||||||
Headset
|
public int Width { get; set; }
|
||||||
}
|
public int Height { get; set; }
|
||||||
|
public Thickness Margin { get; set; }
|
||||||
public struct PreviewSettings
|
public Bitmap Image { get; set; }
|
||||||
{
|
|
||||||
public int Width { get; set; }
|
public PreviewSettings(int width, int height, Thickness margin, Bitmap image)
|
||||||
public int Height { get; set; }
|
{
|
||||||
public Thickness Margin { get; set; }
|
Width = width;
|
||||||
public Bitmap Image { get; set; }
|
Height = height;
|
||||||
|
Margin = margin;
|
||||||
public PreviewSettings(int width, int height, Thickness margin, Bitmap image)
|
Image = image;
|
||||||
{
|
}
|
||||||
Width = width;
|
}
|
||||||
Height = height;
|
|
||||||
Margin = margin;
|
|
||||||
Image = image;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -1,84 +1,82 @@
|
|||||||
using System.Collections.Generic;
|
using System.Drawing;
|
||||||
using System.Drawing;
|
using System.Threading;
|
||||||
using System.Threading;
|
using System.Windows;
|
||||||
using System.Windows;
|
using Artemis.DeviceProviders.Logitech.Utilities;
|
||||||
using Artemis.KeyboardProviders.Logitech.Utilities;
|
using Artemis.Properties;
|
||||||
using Artemis.Properties;
|
using Artemis.Utilities;
|
||||||
using Artemis.Utilities;
|
|
||||||
using Point = System.Drawing.Point;
|
namespace Artemis.DeviceProviders.Logitech
|
||||||
|
{
|
||||||
namespace Artemis.KeyboardProviders.Logitech
|
internal class Orion : KeyboardProvider
|
||||||
{
|
{
|
||||||
internal class Orion : KeyboardProvider
|
public Orion()
|
||||||
{
|
{
|
||||||
public Orion()
|
Name = "Logitech G910 RGB";
|
||||||
{
|
CantEnableText = "Couldn't connect to your Logitech G910.\n" +
|
||||||
Name = "Logitech G910 RGB";
|
"Please check your cables and updating the Logitech Gaming Software\n" +
|
||||||
CantEnableText = "Couldn't connect to your Logitech G910.\n" +
|
"A minimum version of 8.81.15 is required.\n\n" +
|
||||||
"Please check your cables and updating the Logitech Gaming Software\n" +
|
"If needed, you can select a different keyboard in Artemis under settings.";
|
||||||
"A minimum version of 8.81.15 is required.\n\n" +
|
Height = 6;
|
||||||
"If needed, you can select a different keyboard in Artemis under settings.";
|
Width = 21;
|
||||||
Height = 6;
|
PreviewSettings = new PreviewSettings(540, 154, new Thickness(25, -80, 0, 0), Resources.g910);
|
||||||
Width = 21;
|
}
|
||||||
PreviewSettings = new PreviewSettings(540, 154, new Thickness(25, -80, 0, 0), Resources.g910);
|
|
||||||
}
|
public override bool CanEnable()
|
||||||
|
{
|
||||||
public override bool CanEnable()
|
//if (DllManager.RestoreDll())
|
||||||
{
|
// RestoreDll();
|
||||||
//if (DllManager.RestoreDll())
|
int majorNum = 0, minorNum = 0, buildNum = 0;
|
||||||
// RestoreDll();
|
|
||||||
int majorNum = 0, minorNum = 0, buildNum = 0;
|
LogitechGSDK.LogiLedInit();
|
||||||
|
LogitechGSDK.LogiLedGetSdkVersion(ref majorNum, ref minorNum, ref buildNum);
|
||||||
LogitechGSDK.LogiLedInit();
|
LogitechGSDK.LogiLedShutdown();
|
||||||
LogitechGSDK.LogiLedGetSdkVersion(ref majorNum, ref minorNum, ref buildNum);
|
|
||||||
LogitechGSDK.LogiLedShutdown();
|
// Turn it into one long number...
|
||||||
|
var version = int.Parse($"{majorNum}{minorNum}{buildNum}");
|
||||||
// Turn it into one long number...
|
CantEnableText = "Couldn't connect to your Logitech G910.\n" +
|
||||||
var version = int.Parse($"{majorNum}{minorNum}{buildNum}");
|
"Please check your cables and updating the Logitech Gaming Software\n" +
|
||||||
CantEnableText = "Couldn't connect to your Logitech G910.\n" +
|
$"A minimum version of 8.81.15 is required (detected {majorNum}.{minorNum}.{buildNum}).\n\n" +
|
||||||
"Please check your cables and updating the Logitech Gaming Software\n" +
|
"If the detected version differs from the version LGS is reporting, reinstall LGS or see the FAQ.\n\n" +
|
||||||
$"A minimum version of 8.81.15 is required (detected {majorNum}.{minorNum}.{buildNum}).\n\n" +
|
"If needed, you can select a different keyboard in Artemis under settings.";
|
||||||
"If the detected version differs from the version LGS is reporting, reinstall LGS or see the FAQ.\n\n" +
|
|
||||||
"If needed, you can select a different keyboard in Artemis under settings.";
|
return version >= 88115;
|
||||||
|
}
|
||||||
return version >= 88115;
|
|
||||||
}
|
private void RestoreDll()
|
||||||
|
{
|
||||||
private void RestoreDll()
|
MessageBox.Show(
|
||||||
{
|
"Artemis couldn't enable your Logitech keyboard, because the required files are not in place.\n\n" +
|
||||||
MessageBox.Show(
|
"This happens when you run The Division and shut down Artemis before shutting down The Division\n" +
|
||||||
"Artemis couldn't enable your Logitech keyboard, because the required files are not in place.\n\n" +
|
"It can be fixed automatically by clicking OK, but to avoid this message in the future please\n" +
|
||||||
"This happens when you run The Division and shut down Artemis before shutting down The Division\n" +
|
"shut down The Division before shutting down Artemis.\n\n" +
|
||||||
"It can be fixed automatically by clicking OK, but to avoid this message in the future please\n" +
|
"Click OK to fix the issue and restart Artemis");
|
||||||
"shut down The Division before shutting down Artemis.\n\n" +
|
|
||||||
"Click OK to fix the issue and restart Artemis");
|
GeneralHelpers.RunAsAdministrator();
|
||||||
|
}
|
||||||
GeneralHelpers.RunAsAdministrator();
|
|
||||||
}
|
public override void Enable()
|
||||||
|
{
|
||||||
public override void Enable()
|
// Initialize the SDK
|
||||||
{
|
LogitechGSDK.LogiLedInit();
|
||||||
// Initialize the SDK
|
Thread.Sleep(200);
|
||||||
LogitechGSDK.LogiLedInit();
|
|
||||||
Thread.Sleep(200);
|
LogitechGSDK.LogiLedSaveCurrentLighting();
|
||||||
|
LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_PERKEY_RGB);
|
||||||
LogitechGSDK.LogiLedSaveCurrentLighting();
|
|
||||||
LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_PERKEY_RGB);
|
// Disable keys we can't color
|
||||||
|
LogitechGSDK.LogiLedSetLighting(0, 0, 0);
|
||||||
// Disable keys we can't color
|
}
|
||||||
LogitechGSDK.LogiLedSetLighting(0, 0, 0);
|
|
||||||
}
|
public override void Disable()
|
||||||
|
{
|
||||||
public override void Disable()
|
// Shutdown the SDK
|
||||||
{
|
LogitechGSDK.LogiLedRestoreLighting();
|
||||||
// Shutdown the SDK
|
LogitechGSDK.LogiLedShutdown();
|
||||||
LogitechGSDK.LogiLedRestoreLighting();
|
}
|
||||||
LogitechGSDK.LogiLedShutdown();
|
|
||||||
}
|
public override void DrawBitmap(Bitmap bitmap)
|
||||||
|
{
|
||||||
public override void DrawBitmap(Bitmap bitmap)
|
LogitechGSDK.LogiLedSetLightingFromBitmap(OrionUtilities.BitmapToByteArray(bitmap));
|
||||||
{
|
}
|
||||||
LogitechGSDK.LogiLedSetLightingFromBitmap(OrionUtilities.BitmapToByteArray(bitmap));
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -1,137 +1,137 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Artemis.Utilities.Keyboard;
|
using Artemis.Utilities.Keyboard;
|
||||||
|
|
||||||
namespace Artemis.KeyboardProviders.Logitech.Utilities
|
namespace Artemis.DeviceProviders.Logitech.Utilities
|
||||||
{
|
{
|
||||||
public static class KeyMap
|
public static class KeyMap
|
||||||
{
|
{
|
||||||
static KeyMap()
|
static KeyMap()
|
||||||
{
|
{
|
||||||
// There are several keyboard layouts
|
// There are several keyboard layouts
|
||||||
// TODO: Implemented more layouts and an option to select them
|
// TODO: Implemented more layouts and an option to select them
|
||||||
UsEnglishOrionKeys = new List<Key>
|
UsEnglishOrionKeys = new List<Key>
|
||||||
{
|
{
|
||||||
// Row 1
|
// Row 1
|
||||||
new Key(Keys.Escape, 0, 0),
|
new Key(Keys.Escape, 0, 0),
|
||||||
new Key(Keys.F1, 1, 0),
|
new Key(Keys.F1, 1, 0),
|
||||||
new Key(Keys.F2, 2, 0),
|
new Key(Keys.F2, 2, 0),
|
||||||
new Key(Keys.F3, 3, 0),
|
new Key(Keys.F3, 3, 0),
|
||||||
new Key(Keys.F4, 4, 0),
|
new Key(Keys.F4, 4, 0),
|
||||||
new Key(Keys.F5, 5, 0),
|
new Key(Keys.F5, 5, 0),
|
||||||
new Key(Keys.F6, 6, 0),
|
new Key(Keys.F6, 6, 0),
|
||||||
new Key(Keys.F7, 7, 0),
|
new Key(Keys.F7, 7, 0),
|
||||||
new Key(Keys.F8, 8, 0),
|
new Key(Keys.F8, 8, 0),
|
||||||
new Key(Keys.F9, 9, 0),
|
new Key(Keys.F9, 9, 0),
|
||||||
new Key(Keys.F10, 10, 0),
|
new Key(Keys.F10, 10, 0),
|
||||||
new Key(Keys.F11, 11, 0),
|
new Key(Keys.F11, 11, 0),
|
||||||
new Key(Keys.F12, 12, 0),
|
new Key(Keys.F12, 12, 0),
|
||||||
new Key(Keys.PrintScreen, 13, 0),
|
new Key(Keys.PrintScreen, 13, 0),
|
||||||
new Key(Keys.Scroll, 14, 0),
|
new Key(Keys.Scroll, 14, 0),
|
||||||
new Key(Keys.Pause, 15, 0),
|
new Key(Keys.Pause, 15, 0),
|
||||||
|
|
||||||
// Row 2
|
// Row 2
|
||||||
new Key(Keys.Oemtilde, 0, 1),
|
new Key(Keys.Oemtilde, 0, 1),
|
||||||
new Key(Keys.D1, 1, 1),
|
new Key(Keys.D1, 1, 1),
|
||||||
new Key(Keys.D2, 2, 1),
|
new Key(Keys.D2, 2, 1),
|
||||||
new Key(Keys.D3, 3, 1),
|
new Key(Keys.D3, 3, 1),
|
||||||
new Key(Keys.D4, 4, 1),
|
new Key(Keys.D4, 4, 1),
|
||||||
new Key(Keys.D5, 5, 1),
|
new Key(Keys.D5, 5, 1),
|
||||||
new Key(Keys.D6, 6, 1),
|
new Key(Keys.D6, 6, 1),
|
||||||
new Key(Keys.D7, 7, 1),
|
new Key(Keys.D7, 7, 1),
|
||||||
new Key(Keys.D8, 8, 1),
|
new Key(Keys.D8, 8, 1),
|
||||||
new Key(Keys.D9, 9, 1),
|
new Key(Keys.D9, 9, 1),
|
||||||
new Key(Keys.D0, 10, 1),
|
new Key(Keys.D0, 10, 1),
|
||||||
new Key(Keys.OemMinus, 11, 1),
|
new Key(Keys.OemMinus, 11, 1),
|
||||||
new Key(Keys.Oemplus, 12, 1),
|
new Key(Keys.Oemplus, 12, 1),
|
||||||
new Key(Keys.Back, 13, 1),
|
new Key(Keys.Back, 13, 1),
|
||||||
new Key(Keys.Insert, 14, 1),
|
new Key(Keys.Insert, 14, 1),
|
||||||
new Key(Keys.Home, 15, 1),
|
new Key(Keys.Home, 15, 1),
|
||||||
new Key(Keys.PageUp, 16, 1),
|
new Key(Keys.PageUp, 16, 1),
|
||||||
new Key(Keys.NumLock, 17, 1),
|
new Key(Keys.NumLock, 17, 1),
|
||||||
new Key(Keys.Divide, 18, 1),
|
new Key(Keys.Divide, 18, 1),
|
||||||
new Key(Keys.Multiply, 19, 1),
|
new Key(Keys.Multiply, 19, 1),
|
||||||
new Key(Keys.Subtract, 20, 1),
|
new Key(Keys.Subtract, 20, 1),
|
||||||
|
|
||||||
// Row 3
|
// Row 3
|
||||||
new Key(Keys.Tab, 0, 2),
|
new Key(Keys.Tab, 0, 2),
|
||||||
new Key(Keys.Q, 1, 2),
|
new Key(Keys.Q, 1, 2),
|
||||||
new Key(Keys.W, 2, 2),
|
new Key(Keys.W, 2, 2),
|
||||||
new Key(Keys.E, 3, 2),
|
new Key(Keys.E, 3, 2),
|
||||||
new Key(Keys.R, 4, 2),
|
new Key(Keys.R, 4, 2),
|
||||||
new Key(Keys.T, 5, 2),
|
new Key(Keys.T, 5, 2),
|
||||||
new Key(Keys.Y, 6, 2),
|
new Key(Keys.Y, 6, 2),
|
||||||
new Key(Keys.U, 7, 2),
|
new Key(Keys.U, 7, 2),
|
||||||
new Key(Keys.I, 8, 2),
|
new Key(Keys.I, 8, 2),
|
||||||
new Key(Keys.O, 9, 2),
|
new Key(Keys.O, 9, 2),
|
||||||
new Key(Keys.P, 10, 2),
|
new Key(Keys.P, 10, 2),
|
||||||
new Key(Keys.OemOpenBrackets, 11, 2),
|
new Key(Keys.OemOpenBrackets, 11, 2),
|
||||||
new Key(Keys.Oem6, 12, 2),
|
new Key(Keys.Oem6, 12, 2),
|
||||||
new Key(Keys.Delete, 14, 2),
|
new Key(Keys.Delete, 14, 2),
|
||||||
new Key(Keys.End, 15, 2),
|
new Key(Keys.End, 15, 2),
|
||||||
new Key(Keys.Next, 16, 2),
|
new Key(Keys.Next, 16, 2),
|
||||||
new Key(Keys.NumPad7, 17, 2),
|
new Key(Keys.NumPad7, 17, 2),
|
||||||
new Key(Keys.NumPad8, 18, 2),
|
new Key(Keys.NumPad8, 18, 2),
|
||||||
new Key(Keys.NumPad9, 19, 2),
|
new Key(Keys.NumPad9, 19, 2),
|
||||||
new Key(Keys.Add, 20, 2),
|
new Key(Keys.Add, 20, 2),
|
||||||
|
|
||||||
// Row 4
|
// Row 4
|
||||||
new Key(Keys.Capital, 0, 3),
|
new Key(Keys.Capital, 0, 3),
|
||||||
new Key(Keys.A, 1, 3),
|
new Key(Keys.A, 1, 3),
|
||||||
new Key(Keys.S, 2, 3),
|
new Key(Keys.S, 2, 3),
|
||||||
new Key(Keys.D, 3, 3),
|
new Key(Keys.D, 3, 3),
|
||||||
new Key(Keys.F, 4, 3),
|
new Key(Keys.F, 4, 3),
|
||||||
new Key(Keys.G, 5, 3),
|
new Key(Keys.G, 5, 3),
|
||||||
new Key(Keys.H, 6, 3),
|
new Key(Keys.H, 6, 3),
|
||||||
new Key(Keys.J, 7, 3),
|
new Key(Keys.J, 7, 3),
|
||||||
new Key(Keys.K, 8, 3),
|
new Key(Keys.K, 8, 3),
|
||||||
new Key(Keys.L, 9, 3),
|
new Key(Keys.L, 9, 3),
|
||||||
new Key(Keys.Oem1, 10, 3),
|
new Key(Keys.Oem1, 10, 3),
|
||||||
new Key(Keys.Oem7, 11, 3),
|
new Key(Keys.Oem7, 11, 3),
|
||||||
new Key(Keys.Oem5, 12, 3),
|
new Key(Keys.Oem5, 12, 3),
|
||||||
new Key(Keys.Return, 13, 3),
|
new Key(Keys.Return, 13, 3),
|
||||||
new Key(Keys.NumPad4, 17, 3),
|
new Key(Keys.NumPad4, 17, 3),
|
||||||
new Key(Keys.NumPad5, 18, 3),
|
new Key(Keys.NumPad5, 18, 3),
|
||||||
new Key(Keys.NumPad6, 19, 3),
|
new Key(Keys.NumPad6, 19, 3),
|
||||||
|
|
||||||
// Row 5
|
// Row 5
|
||||||
new Key(Keys.LShiftKey, 1, 4),
|
new Key(Keys.LShiftKey, 1, 4),
|
||||||
new Key(Keys.OemBackslash, 2, 4),
|
new Key(Keys.OemBackslash, 2, 4),
|
||||||
new Key(Keys.Z, 2, 4),
|
new Key(Keys.Z, 2, 4),
|
||||||
new Key(Keys.X, 3, 4),
|
new Key(Keys.X, 3, 4),
|
||||||
new Key(Keys.C, 4, 4),
|
new Key(Keys.C, 4, 4),
|
||||||
new Key(Keys.V, 5, 4),
|
new Key(Keys.V, 5, 4),
|
||||||
new Key(Keys.B, 6, 4),
|
new Key(Keys.B, 6, 4),
|
||||||
new Key(Keys.N, 7, 4),
|
new Key(Keys.N, 7, 4),
|
||||||
new Key(Keys.M, 8, 4),
|
new Key(Keys.M, 8, 4),
|
||||||
new Key(Keys.Oemcomma, 9, 4),
|
new Key(Keys.Oemcomma, 9, 4),
|
||||||
new Key(Keys.OemPeriod, 10, 4),
|
new Key(Keys.OemPeriod, 10, 4),
|
||||||
new Key(Keys.OemQuestion, 11, 4),
|
new Key(Keys.OemQuestion, 11, 4),
|
||||||
new Key(Keys.RShiftKey, 13, 4),
|
new Key(Keys.RShiftKey, 13, 4),
|
||||||
new Key(Keys.Up, 15, 4),
|
new Key(Keys.Up, 15, 4),
|
||||||
new Key(Keys.NumPad1, 17, 4),
|
new Key(Keys.NumPad1, 17, 4),
|
||||||
new Key(Keys.NumPad2, 18, 4),
|
new Key(Keys.NumPad2, 18, 4),
|
||||||
new Key(Keys.NumPad3, 19, 4),
|
new Key(Keys.NumPad3, 19, 4),
|
||||||
// Both returns return "Return" (Yes...)
|
// Both returns return "Return" (Yes...)
|
||||||
// new OrionKey(System.Windows.Forms.Keys.Return, 20, 4),
|
// new OrionKey(System.Windows.Forms.Keys.Return, 20, 4),
|
||||||
|
|
||||||
// Row 6
|
// Row 6
|
||||||
new Key(Keys.LControlKey, 0, 5),
|
new Key(Keys.LControlKey, 0, 5),
|
||||||
new Key(Keys.LWin, 1, 5),
|
new Key(Keys.LWin, 1, 5),
|
||||||
new Key(Keys.LMenu, 2, 5),
|
new Key(Keys.LMenu, 2, 5),
|
||||||
new Key(Keys.Space, 5, 5),
|
new Key(Keys.Space, 5, 5),
|
||||||
new Key(Keys.RMenu, 11, 5),
|
new Key(Keys.RMenu, 11, 5),
|
||||||
new Key(Keys.RWin, 12, 5),
|
new Key(Keys.RWin, 12, 5),
|
||||||
new Key(Keys.Apps, 13, 5),
|
new Key(Keys.Apps, 13, 5),
|
||||||
new Key(Keys.RControlKey, 14, 5),
|
new Key(Keys.RControlKey, 14, 5),
|
||||||
new Key(Keys.Left, 15, 5),
|
new Key(Keys.Left, 15, 5),
|
||||||
new Key(Keys.Down, 16, 5),
|
new Key(Keys.Down, 16, 5),
|
||||||
new Key(Keys.Right, 17, 5),
|
new Key(Keys.Right, 17, 5),
|
||||||
new Key(Keys.NumPad0, 18, 5),
|
new Key(Keys.NumPad0, 18, 5),
|
||||||
new Key(Keys.Decimal, 19, 5)
|
new Key(Keys.Decimal, 19, 5)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Key> UsEnglishOrionKeys { get; set; }
|
public static List<Key> UsEnglishOrionKeys { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,111 +1,111 @@
|
|||||||
namespace Artemis.KeyboardProviders.Logitech.Utilities
|
namespace Artemis.DeviceProviders.Logitech.Utilities
|
||||||
{
|
{
|
||||||
public enum KeyboardNames
|
public enum KeyboardNames
|
||||||
{
|
{
|
||||||
ESC = 0x01,
|
ESC = 0x01,
|
||||||
F1 = 0x3b,
|
F1 = 0x3b,
|
||||||
F2 = 0x3c,
|
F2 = 0x3c,
|
||||||
F3 = 0x3d,
|
F3 = 0x3d,
|
||||||
F4 = 0x3e,
|
F4 = 0x3e,
|
||||||
F5 = 0x3f,
|
F5 = 0x3f,
|
||||||
F6 = 0x40,
|
F6 = 0x40,
|
||||||
F7 = 0x41,
|
F7 = 0x41,
|
||||||
F8 = 0x42,
|
F8 = 0x42,
|
||||||
F9 = 0x43,
|
F9 = 0x43,
|
||||||
F10 = 0x44,
|
F10 = 0x44,
|
||||||
F11 = 0x57,
|
F11 = 0x57,
|
||||||
F12 = 0x58,
|
F12 = 0x58,
|
||||||
PRINT_SCREEN = 0x137,
|
PRINT_SCREEN = 0x137,
|
||||||
SCROLL_LOCK = 0x46,
|
SCROLL_LOCK = 0x46,
|
||||||
PAUSE_BREAK = 0x45,
|
PAUSE_BREAK = 0x45,
|
||||||
TILDE = 0x29,
|
TILDE = 0x29,
|
||||||
ONE = 0x02,
|
ONE = 0x02,
|
||||||
TWO = 0x03,
|
TWO = 0x03,
|
||||||
THREE = 0x04,
|
THREE = 0x04,
|
||||||
FOUR = 0x05,
|
FOUR = 0x05,
|
||||||
FIVE = 0x06,
|
FIVE = 0x06,
|
||||||
SIX = 0x07,
|
SIX = 0x07,
|
||||||
SEVEN = 0x08,
|
SEVEN = 0x08,
|
||||||
EIGHT = 0x09,
|
EIGHT = 0x09,
|
||||||
NINE = 0x0A,
|
NINE = 0x0A,
|
||||||
ZERO = 0x0B,
|
ZERO = 0x0B,
|
||||||
MINUS = 0x0C,
|
MINUS = 0x0C,
|
||||||
EQUALS = 0x0D,
|
EQUALS = 0x0D,
|
||||||
BACKSPACE = 0x0E,
|
BACKSPACE = 0x0E,
|
||||||
INSERT = 0x152,
|
INSERT = 0x152,
|
||||||
HOME = 0x147,
|
HOME = 0x147,
|
||||||
PAGE_UP = 0x149,
|
PAGE_UP = 0x149,
|
||||||
NUM_LOCK = 0x145,
|
NUM_LOCK = 0x145,
|
||||||
NUM_SLASH = 0x135,
|
NUM_SLASH = 0x135,
|
||||||
NUM_ASTERISK = 0x37,
|
NUM_ASTERISK = 0x37,
|
||||||
NUM_MINUS = 0x4A,
|
NUM_MINUS = 0x4A,
|
||||||
TAB = 0x0F,
|
TAB = 0x0F,
|
||||||
Q = 0x10,
|
Q = 0x10,
|
||||||
W = 0x11,
|
W = 0x11,
|
||||||
E = 0x12,
|
E = 0x12,
|
||||||
R = 0x13,
|
R = 0x13,
|
||||||
T = 0x14,
|
T = 0x14,
|
||||||
Y = 0x15,
|
Y = 0x15,
|
||||||
U = 0x16,
|
U = 0x16,
|
||||||
I = 0x17,
|
I = 0x17,
|
||||||
O = 0x18,
|
O = 0x18,
|
||||||
P = 0x19,
|
P = 0x19,
|
||||||
OPEN_BRACKET = 0x1A,
|
OPEN_BRACKET = 0x1A,
|
||||||
CLOSE_BRACKET = 0x1B,
|
CLOSE_BRACKET = 0x1B,
|
||||||
BACKSLASH = 0x2B,
|
BACKSLASH = 0x2B,
|
||||||
KEYBOARD_DELETE = 0x153,
|
KEYBOARD_DELETE = 0x153,
|
||||||
END = 0x14F,
|
END = 0x14F,
|
||||||
PAGE_DOWN = 0x151,
|
PAGE_DOWN = 0x151,
|
||||||
NUM_SEVEN = 0x47,
|
NUM_SEVEN = 0x47,
|
||||||
NUM_EIGHT = 0x48,
|
NUM_EIGHT = 0x48,
|
||||||
NUM_NINE = 0x49,
|
NUM_NINE = 0x49,
|
||||||
NUM_PLUS = 0x4E,
|
NUM_PLUS = 0x4E,
|
||||||
CAPS_LOCK = 0x3A,
|
CAPS_LOCK = 0x3A,
|
||||||
A = 0x1E,
|
A = 0x1E,
|
||||||
S = 0x1F,
|
S = 0x1F,
|
||||||
D = 0x20,
|
D = 0x20,
|
||||||
F = 0x21,
|
F = 0x21,
|
||||||
G = 0x22,
|
G = 0x22,
|
||||||
H = 0x23,
|
H = 0x23,
|
||||||
J = 0x24,
|
J = 0x24,
|
||||||
K = 0x25,
|
K = 0x25,
|
||||||
L = 0x26,
|
L = 0x26,
|
||||||
SEMICOLON = 0x27,
|
SEMICOLON = 0x27,
|
||||||
APOSTROPHE = 0x28,
|
APOSTROPHE = 0x28,
|
||||||
ENTER = 0x1C,
|
ENTER = 0x1C,
|
||||||
NUM_FOUR = 0x4B,
|
NUM_FOUR = 0x4B,
|
||||||
NUM_FIVE = 0x4C,
|
NUM_FIVE = 0x4C,
|
||||||
NUM_SIX = 0x4D,
|
NUM_SIX = 0x4D,
|
||||||
LEFT_SHIFT = 0x2A,
|
LEFT_SHIFT = 0x2A,
|
||||||
Z = 0x2C,
|
Z = 0x2C,
|
||||||
X = 0x2D,
|
X = 0x2D,
|
||||||
C = 0x2E,
|
C = 0x2E,
|
||||||
V = 0x2F,
|
V = 0x2F,
|
||||||
B = 0x30,
|
B = 0x30,
|
||||||
N = 0x31,
|
N = 0x31,
|
||||||
M = 0x32,
|
M = 0x32,
|
||||||
COMMA = 0x33,
|
COMMA = 0x33,
|
||||||
PERIOD = 0x34,
|
PERIOD = 0x34,
|
||||||
FORWARD_SLASH = 0x35,
|
FORWARD_SLASH = 0x35,
|
||||||
RIGHT_SHIFT = 0x36,
|
RIGHT_SHIFT = 0x36,
|
||||||
ARROW_UP = 0x148,
|
ARROW_UP = 0x148,
|
||||||
NUM_ONE = 0x4F,
|
NUM_ONE = 0x4F,
|
||||||
NUM_TWO = 0x50,
|
NUM_TWO = 0x50,
|
||||||
NUM_THREE = 0x51,
|
NUM_THREE = 0x51,
|
||||||
NUM_ENTER = 0x11C,
|
NUM_ENTER = 0x11C,
|
||||||
LEFT_CONTROL = 0x1D,
|
LEFT_CONTROL = 0x1D,
|
||||||
LEFT_WINDOWS = 0x15B,
|
LEFT_WINDOWS = 0x15B,
|
||||||
LEFT_ALT = 0x38,
|
LEFT_ALT = 0x38,
|
||||||
SPACE = 0x39,
|
SPACE = 0x39,
|
||||||
RIGHT_ALT = 0x138,
|
RIGHT_ALT = 0x138,
|
||||||
RIGHT_WINDOWS = 0x15C,
|
RIGHT_WINDOWS = 0x15C,
|
||||||
APPLICATION_SELECT = 0x15D,
|
APPLICATION_SELECT = 0x15D,
|
||||||
RIGHT_CONTROL = 0x11D,
|
RIGHT_CONTROL = 0x11D,
|
||||||
ARROW_LEFT = 0x14B,
|
ARROW_LEFT = 0x14B,
|
||||||
ARROW_DOWN = 0x150,
|
ARROW_DOWN = 0x150,
|
||||||
ARROW_RIGHT = 0x14D,
|
ARROW_RIGHT = 0x14D,
|
||||||
NUM_ZERO = 0x52,
|
NUM_ZERO = 0x52,
|
||||||
NUM_PERIOD = 0x53,
|
NUM_PERIOD = 0x53,
|
||||||
TEST = 0x1
|
TEST = 0x1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,95 +1,95 @@
|
|||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// ReSharper disable InconsistentNaming
|
// ReSharper disable InconsistentNaming
|
||||||
|
|
||||||
namespace Artemis.KeyboardProviders.Logitech.Utilities
|
namespace Artemis.DeviceProviders.Logitech.Utilities
|
||||||
{
|
{
|
||||||
public class LogitechGSDK
|
public class LogitechGSDK
|
||||||
{
|
{
|
||||||
//LED SDK
|
//LED SDK
|
||||||
private const int LOGI_DEVICETYPE_MONOCHROME_ORD = 0;
|
private const int LOGI_DEVICETYPE_MONOCHROME_ORD = 0;
|
||||||
private const int LOGI_DEVICETYPE_RGB_ORD = 1;
|
private const int LOGI_DEVICETYPE_RGB_ORD = 1;
|
||||||
private const int LOGI_DEVICETYPE_PERKEY_RGB_ORD = 2;
|
private const int LOGI_DEVICETYPE_PERKEY_RGB_ORD = 2;
|
||||||
|
|
||||||
public const int LOGI_DEVICETYPE_MONOCHROME = 1 << LOGI_DEVICETYPE_MONOCHROME_ORD;
|
public const int LOGI_DEVICETYPE_MONOCHROME = 1 << LOGI_DEVICETYPE_MONOCHROME_ORD;
|
||||||
public const int LOGI_DEVICETYPE_RGB = 1 << LOGI_DEVICETYPE_RGB_ORD;
|
public const int LOGI_DEVICETYPE_RGB = 1 << LOGI_DEVICETYPE_RGB_ORD;
|
||||||
public const int LOGI_DEVICETYPE_PERKEY_RGB = 1 << LOGI_DEVICETYPE_PERKEY_RGB_ORD;
|
public const int LOGI_DEVICETYPE_PERKEY_RGB = 1 << LOGI_DEVICETYPE_PERKEY_RGB_ORD;
|
||||||
public const int LOGI_LED_BITMAP_WIDTH = 21;
|
public const int LOGI_LED_BITMAP_WIDTH = 21;
|
||||||
public const int LOGI_LED_BITMAP_HEIGHT = 6;
|
public const int LOGI_LED_BITMAP_HEIGHT = 6;
|
||||||
public const int LOGI_LED_BITMAP_BYTES_PER_KEY = 4;
|
public const int LOGI_LED_BITMAP_BYTES_PER_KEY = 4;
|
||||||
|
|
||||||
public const int LOGI_LED_BITMAP_SIZE =
|
public const int LOGI_LED_BITMAP_SIZE =
|
||||||
LOGI_LED_BITMAP_WIDTH*LOGI_LED_BITMAP_HEIGHT*LOGI_LED_BITMAP_BYTES_PER_KEY;
|
LOGI_LED_BITMAP_WIDTH*LOGI_LED_BITMAP_HEIGHT*LOGI_LED_BITMAP_BYTES_PER_KEY;
|
||||||
|
|
||||||
public const int LOGI_LED_DURATION_INFINITE = 0;
|
public const int LOGI_LED_DURATION_INFINITE = 0;
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedInit();
|
public static extern bool LogiLedInit();
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSetTargetDevice(int targetDevice);
|
public static extern bool LogiLedSetTargetDevice(int targetDevice);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedGetSdkVersion(ref int majorNum, ref int minorNum, ref int buildNum);
|
public static extern bool LogiLedGetSdkVersion(ref int majorNum, ref int minorNum, ref int buildNum);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSaveCurrentLighting();
|
public static extern bool LogiLedSaveCurrentLighting();
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSetLighting(int redPercentage, int greenPercentage, int bluePercentage);
|
public static extern bool LogiLedSetLighting(int redPercentage, int greenPercentage, int bluePercentage);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedRestoreLighting();
|
public static extern bool LogiLedRestoreLighting();
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedFlashLighting(int redPercentage, int greenPercentage, int bluePercentage,
|
public static extern bool LogiLedFlashLighting(int redPercentage, int greenPercentage, int bluePercentage,
|
||||||
int milliSecondsDuration, int milliSecondsInterval);
|
int milliSecondsDuration, int milliSecondsInterval);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedPulseLighting(int redPercentage, int greenPercentage, int bluePercentage,
|
public static extern bool LogiLedPulseLighting(int redPercentage, int greenPercentage, int bluePercentage,
|
||||||
int milliSecondsDuration, int milliSecondsInterval);
|
int milliSecondsDuration, int milliSecondsInterval);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedStopEffects();
|
public static extern bool LogiLedStopEffects();
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSetLightingFromBitmap(byte[] bitmap);
|
public static extern bool LogiLedSetLightingFromBitmap(byte[] bitmap);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSetLightingForKeyWithScanCode(int keyCode, int redPercentage,
|
public static extern bool LogiLedSetLightingForKeyWithScanCode(int keyCode, int redPercentage,
|
||||||
int greenPercentage, int bluePercentage);
|
int greenPercentage, int bluePercentage);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSetLightingForKeyWithHidCode(int keyCode, int redPercentage,
|
public static extern bool LogiLedSetLightingForKeyWithHidCode(int keyCode, int redPercentage,
|
||||||
int greenPercentage, int bluePercentage);
|
int greenPercentage, int bluePercentage);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSetLightingForKeyWithQuartzCode(int keyCode, int redPercentage,
|
public static extern bool LogiLedSetLightingForKeyWithQuartzCode(int keyCode, int redPercentage,
|
||||||
int greenPercentage, int bluePercentage);
|
int greenPercentage, int bluePercentage);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSetLightingForKeyWithKeyName(int keyCode, int redPercentage,
|
public static extern bool LogiLedSetLightingForKeyWithKeyName(int keyCode, int redPercentage,
|
||||||
int greenPercentage, int bluePercentage);
|
int greenPercentage, int bluePercentage);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedSaveLightingForKey(KeyboardNames keyName);
|
public static extern bool LogiLedSaveLightingForKey(KeyboardNames keyName);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedRestoreLightingForKey(KeyboardNames keyName);
|
public static extern bool LogiLedRestoreLightingForKey(KeyboardNames keyName);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedFlashSingleKey(KeyboardNames keyName, int redPercentage, int greenPercentage,
|
public static extern bool LogiLedFlashSingleKey(KeyboardNames keyName, int redPercentage, int greenPercentage,
|
||||||
int bluePercentage, int msDuration, int msInterval);
|
int bluePercentage, int msDuration, int msInterval);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedPulseSingleKey(KeyboardNames keyName, int startRedPercentage,
|
public static extern bool LogiLedPulseSingleKey(KeyboardNames keyName, int startRedPercentage,
|
||||||
int startGreenPercentage, int startBluePercentage, int finishRedPercentage, int finishGreenPercentage,
|
int startGreenPercentage, int startBluePercentage, int finishRedPercentage, int finishGreenPercentage,
|
||||||
int finishBluePercentage, int msDuration, bool isInfinite);
|
int finishBluePercentage, int msDuration, bool isInfinite);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool LogiLedStopEffectsOnKey(KeyboardNames keyName);
|
public static extern bool LogiLedStopEffectsOnKey(KeyboardNames keyName);
|
||||||
|
|
||||||
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void LogiLedShutdown();
|
public static extern void LogiLedShutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,230 +1,230 @@
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
using System.Drawing.Drawing2D;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Artemis.KeyboardProviders.Logitech.Utilities
|
namespace Artemis.DeviceProviders.Logitech.Utilities
|
||||||
{
|
{
|
||||||
public static class OrionUtilities
|
public static class OrionUtilities
|
||||||
{
|
{
|
||||||
public static KeyMapping[] Keymappings =
|
public static KeyMapping[] Keymappings =
|
||||||
{
|
{
|
||||||
// First row
|
// First row
|
||||||
new KeyMapping(0, 0),
|
new KeyMapping(0, 0),
|
||||||
new KeyMapping(1, 1),
|
new KeyMapping(1, 1),
|
||||||
new KeyMapping(2, 1),
|
new KeyMapping(2, 1),
|
||||||
new KeyMapping(3, 2),
|
new KeyMapping(3, 2),
|
||||||
new KeyMapping(4, 3),
|
new KeyMapping(4, 3),
|
||||||
new KeyMapping(5, 4),
|
new KeyMapping(5, 4),
|
||||||
new KeyMapping(6, 5),
|
new KeyMapping(6, 5),
|
||||||
new KeyMapping(7, 6),
|
new KeyMapping(7, 6),
|
||||||
new KeyMapping(8, 7),
|
new KeyMapping(8, 7),
|
||||||
new KeyMapping(9, 8),
|
new KeyMapping(9, 8),
|
||||||
new KeyMapping(10, 9),
|
new KeyMapping(10, 9),
|
||||||
new KeyMapping(11, 9),
|
new KeyMapping(11, 9),
|
||||||
new KeyMapping(12, 10),
|
new KeyMapping(12, 10),
|
||||||
new KeyMapping(13, 11),
|
new KeyMapping(13, 11),
|
||||||
new KeyMapping(13, 12),
|
new KeyMapping(13, 12),
|
||||||
new KeyMapping(14, 13),
|
new KeyMapping(14, 13),
|
||||||
new KeyMapping(15, 14),
|
new KeyMapping(15, 14),
|
||||||
new KeyMapping(16, 15),
|
new KeyMapping(16, 15),
|
||||||
new KeyMapping(17, 16),
|
new KeyMapping(17, 16),
|
||||||
new KeyMapping(18, 17),
|
new KeyMapping(18, 17),
|
||||||
new KeyMapping(19, 18),
|
new KeyMapping(19, 18),
|
||||||
|
|
||||||
// Second row
|
// Second row
|
||||||
new KeyMapping(21, 21),
|
new KeyMapping(21, 21),
|
||||||
new KeyMapping(22, 22),
|
new KeyMapping(22, 22),
|
||||||
new KeyMapping(23, 23),
|
new KeyMapping(23, 23),
|
||||||
new KeyMapping(24, 24),
|
new KeyMapping(24, 24),
|
||||||
new KeyMapping(25, 25),
|
new KeyMapping(25, 25),
|
||||||
new KeyMapping(26, 26),
|
new KeyMapping(26, 26),
|
||||||
new KeyMapping(27, 27),
|
new KeyMapping(27, 27),
|
||||||
new KeyMapping(28, 28),
|
new KeyMapping(28, 28),
|
||||||
new KeyMapping(29, 29),
|
new KeyMapping(29, 29),
|
||||||
new KeyMapping(30, 30),
|
new KeyMapping(30, 30),
|
||||||
new KeyMapping(31, 31),
|
new KeyMapping(31, 31),
|
||||||
new KeyMapping(32, 32),
|
new KeyMapping(32, 32),
|
||||||
new KeyMapping(33, 33),
|
new KeyMapping(33, 33),
|
||||||
new KeyMapping(34, 34),
|
new KeyMapping(34, 34),
|
||||||
new KeyMapping(35, 35),
|
new KeyMapping(35, 35),
|
||||||
new KeyMapping(36, 36),
|
new KeyMapping(36, 36),
|
||||||
new KeyMapping(37, 37),
|
new KeyMapping(37, 37),
|
||||||
new KeyMapping(38, 38),
|
new KeyMapping(38, 38),
|
||||||
new KeyMapping(39, 39),
|
new KeyMapping(39, 39),
|
||||||
new KeyMapping(40, 40),
|
new KeyMapping(40, 40),
|
||||||
new KeyMapping(41, 41),
|
new KeyMapping(41, 41),
|
||||||
|
|
||||||
// Third row
|
// Third row
|
||||||
new KeyMapping(42, 42),
|
new KeyMapping(42, 42),
|
||||||
new KeyMapping(43, 43),
|
new KeyMapping(43, 43),
|
||||||
new KeyMapping(44, 44),
|
new KeyMapping(44, 44),
|
||||||
new KeyMapping(45, 45),
|
new KeyMapping(45, 45),
|
||||||
new KeyMapping(46, 46),
|
new KeyMapping(46, 46),
|
||||||
new KeyMapping(47, 46),
|
new KeyMapping(47, 46),
|
||||||
new KeyMapping(48, 47),
|
new KeyMapping(48, 47),
|
||||||
new KeyMapping(49, 48),
|
new KeyMapping(49, 48),
|
||||||
new KeyMapping(50, 49),
|
new KeyMapping(50, 49),
|
||||||
new KeyMapping(51, 50),
|
new KeyMapping(51, 50),
|
||||||
new KeyMapping(52, 51),
|
new KeyMapping(52, 51),
|
||||||
new KeyMapping(53, 52),
|
new KeyMapping(53, 52),
|
||||||
new KeyMapping(54, 53),
|
new KeyMapping(54, 53),
|
||||||
new KeyMapping(54, 54),
|
new KeyMapping(54, 54),
|
||||||
new KeyMapping(55, 55),
|
new KeyMapping(55, 55),
|
||||||
new KeyMapping(56, 56),
|
new KeyMapping(56, 56),
|
||||||
new KeyMapping(57, 57),
|
new KeyMapping(57, 57),
|
||||||
new KeyMapping(58, 58),
|
new KeyMapping(58, 58),
|
||||||
new KeyMapping(59, 59),
|
new KeyMapping(59, 59),
|
||||||
new KeyMapping(60, 60),
|
new KeyMapping(60, 60),
|
||||||
new KeyMapping(61, 61),
|
new KeyMapping(61, 61),
|
||||||
new KeyMapping(62, 62),
|
new KeyMapping(62, 62),
|
||||||
|
|
||||||
// Fourth row
|
// Fourth row
|
||||||
new KeyMapping(63, 63),
|
new KeyMapping(63, 63),
|
||||||
new KeyMapping(64, 64),
|
new KeyMapping(64, 64),
|
||||||
new KeyMapping(65, 65),
|
new KeyMapping(65, 65),
|
||||||
new KeyMapping(66, 65),
|
new KeyMapping(66, 65),
|
||||||
new KeyMapping(67, 66),
|
new KeyMapping(67, 66),
|
||||||
new KeyMapping(68, 67),
|
new KeyMapping(68, 67),
|
||||||
new KeyMapping(69, 68),
|
new KeyMapping(69, 68),
|
||||||
new KeyMapping(70, 69),
|
new KeyMapping(70, 69),
|
||||||
new KeyMapping(71, 70),
|
new KeyMapping(71, 70),
|
||||||
new KeyMapping(72, 71),
|
new KeyMapping(72, 71),
|
||||||
new KeyMapping(73, 72),
|
new KeyMapping(73, 72),
|
||||||
new KeyMapping(74, 73),
|
new KeyMapping(74, 73),
|
||||||
new KeyMapping(75, 74),
|
new KeyMapping(75, 74),
|
||||||
new KeyMapping(76, 75),
|
new KeyMapping(76, 75),
|
||||||
new KeyMapping(76, 76),
|
new KeyMapping(76, 76),
|
||||||
new KeyMapping(78, 77),
|
new KeyMapping(78, 77),
|
||||||
new KeyMapping(79, 78),
|
new KeyMapping(79, 78),
|
||||||
new KeyMapping(79, 79),
|
new KeyMapping(79, 79),
|
||||||
new KeyMapping(80, 80),
|
new KeyMapping(80, 80),
|
||||||
new KeyMapping(81, 81),
|
new KeyMapping(81, 81),
|
||||||
new KeyMapping(82, 82),
|
new KeyMapping(82, 82),
|
||||||
|
|
||||||
// Fifth row
|
// Fifth row
|
||||||
new KeyMapping(84, 84),
|
new KeyMapping(84, 84),
|
||||||
new KeyMapping(85, 85),
|
new KeyMapping(85, 85),
|
||||||
new KeyMapping(86, 86),
|
new KeyMapping(86, 86),
|
||||||
new KeyMapping(87, 87),
|
new KeyMapping(87, 87),
|
||||||
new KeyMapping(88, 88),
|
new KeyMapping(88, 88),
|
||||||
new KeyMapping(89, 89),
|
new KeyMapping(89, 89),
|
||||||
new KeyMapping(90, 90),
|
new KeyMapping(90, 90),
|
||||||
new KeyMapping(91, 91),
|
new KeyMapping(91, 91),
|
||||||
new KeyMapping(92, 92),
|
new KeyMapping(92, 92),
|
||||||
new KeyMapping(93, 93),
|
new KeyMapping(93, 93),
|
||||||
new KeyMapping(94, 94),
|
new KeyMapping(94, 94),
|
||||||
new KeyMapping(95, 95),
|
new KeyMapping(95, 95),
|
||||||
new KeyMapping(96, 96),
|
new KeyMapping(96, 96),
|
||||||
new KeyMapping(97, 97),
|
new KeyMapping(97, 97),
|
||||||
new KeyMapping(98, 98),
|
new KeyMapping(98, 98),
|
||||||
new KeyMapping(99, 99),
|
new KeyMapping(99, 99),
|
||||||
new KeyMapping(100, 100),
|
new KeyMapping(100, 100),
|
||||||
new KeyMapping(101, 101),
|
new KeyMapping(101, 101),
|
||||||
new KeyMapping(102, 102),
|
new KeyMapping(102, 102),
|
||||||
new KeyMapping(103, 103),
|
new KeyMapping(103, 103),
|
||||||
new KeyMapping(104, 104),
|
new KeyMapping(104, 104),
|
||||||
|
|
||||||
// Sixth row
|
// Sixth row
|
||||||
new KeyMapping(105, 105),
|
new KeyMapping(105, 105),
|
||||||
new KeyMapping(106, 106),
|
new KeyMapping(106, 106),
|
||||||
new KeyMapping(107, 107),
|
new KeyMapping(107, 107),
|
||||||
new KeyMapping(108, 107),
|
new KeyMapping(108, 107),
|
||||||
new KeyMapping(109, 109),
|
new KeyMapping(109, 109),
|
||||||
new KeyMapping(110, 110),
|
new KeyMapping(110, 110),
|
||||||
new KeyMapping(111, 110),
|
new KeyMapping(111, 110),
|
||||||
new KeyMapping(112, 111),
|
new KeyMapping(112, 111),
|
||||||
new KeyMapping(113, 112),
|
new KeyMapping(113, 112),
|
||||||
new KeyMapping(114, 113),
|
new KeyMapping(114, 113),
|
||||||
new KeyMapping(115, 114),
|
new KeyMapping(115, 114),
|
||||||
new KeyMapping(116, 115),
|
new KeyMapping(116, 115),
|
||||||
new KeyMapping(115, 116), // ALTGR
|
new KeyMapping(115, 116), // ALTGR
|
||||||
new KeyMapping(116, 117),
|
new KeyMapping(116, 117),
|
||||||
new KeyMapping(117, 118),
|
new KeyMapping(117, 118),
|
||||||
new KeyMapping(118, 119),
|
new KeyMapping(118, 119),
|
||||||
new KeyMapping(119, 120),
|
new KeyMapping(119, 120),
|
||||||
new KeyMapping(120, 121),
|
new KeyMapping(120, 121),
|
||||||
new KeyMapping(121, 122),
|
new KeyMapping(121, 122),
|
||||||
new KeyMapping(122, 123),
|
new KeyMapping(122, 123),
|
||||||
new KeyMapping(124, 124)
|
new KeyMapping(124, 124)
|
||||||
};
|
};
|
||||||
|
|
||||||
public static byte[] BitmapToByteArray(Bitmap b, bool remap = true)
|
public static byte[] BitmapToByteArray(Bitmap b, bool remap = true)
|
||||||
{
|
{
|
||||||
if (b.Width > 21 || b.Height > 6)
|
if (b.Width > 21 || b.Height > 6)
|
||||||
b = ResizeImage(b, 21, 6);
|
b = ResizeImage(b, 21, 6);
|
||||||
|
|
||||||
var rect = new Rectangle(0, 0, b.Width, b.Height);
|
var rect = new Rectangle(0, 0, b.Width, b.Height);
|
||||||
var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat);
|
var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat);
|
||||||
|
|
||||||
var depth = Image.GetPixelFormatSize(b.PixelFormat);
|
var depth = Image.GetPixelFormatSize(b.PixelFormat);
|
||||||
var step = depth/8;
|
var step = depth/8;
|
||||||
var pixels = new byte[21*6*step];
|
var pixels = new byte[21*6*step];
|
||||||
var iptr = bitmapData.Scan0;
|
var iptr = bitmapData.Scan0;
|
||||||
|
|
||||||
// Copy data from pointer to array
|
// Copy data from pointer to array
|
||||||
Marshal.Copy(iptr, pixels, 0, pixels.Length);
|
Marshal.Copy(iptr, pixels, 0, pixels.Length);
|
||||||
|
|
||||||
if (!remap)
|
if (!remap)
|
||||||
return pixels;
|
return pixels;
|
||||||
|
|
||||||
var remapped = new byte[pixels.Length];
|
var remapped = new byte[pixels.Length];
|
||||||
|
|
||||||
// Every key is 4 bytes
|
// Every key is 4 bytes
|
||||||
for (var i = 0; i <= pixels.Length/4; i++)
|
for (var i = 0; i <= pixels.Length/4; i++)
|
||||||
{
|
{
|
||||||
var firstSByte = Keymappings[i].Source*4;
|
var firstSByte = Keymappings[i].Source*4;
|
||||||
var firstTByte = Keymappings[i].Target*4;
|
var firstTByte = Keymappings[i].Target*4;
|
||||||
|
|
||||||
for (var j = 0; j < 4; j++)
|
for (var j = 0; j < 4; j++)
|
||||||
remapped[firstTByte + j] = pixels[firstSByte + j];
|
remapped[firstTByte + j] = pixels[firstSByte + j];
|
||||||
}
|
}
|
||||||
|
|
||||||
return remapped;
|
return remapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Resize the image to the specified width and height.
|
/// Resize the image to the specified width and height.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="image">The image to resize.</param>
|
/// <param name="image">The image to resize.</param>
|
||||||
/// <param name="width">The width to resize to.</param>
|
/// <param name="width">The width to resize to.</param>
|
||||||
/// <param name="height">The height to resize to.</param>
|
/// <param name="height">The height to resize to.</param>
|
||||||
/// <returns>The resized image.</returns>
|
/// <returns>The resized image.</returns>
|
||||||
public static Bitmap ResizeImage(Image image, int width, int height)
|
public static Bitmap ResizeImage(Image image, int width, int height)
|
||||||
{
|
{
|
||||||
var destRect = new Rectangle(0, 0, width, height);
|
var destRect = new Rectangle(0, 0, width, height);
|
||||||
var destImage = new Bitmap(width, height);
|
var destImage = new Bitmap(width, height);
|
||||||
|
|
||||||
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
|
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
|
||||||
|
|
||||||
using (var graphics = Graphics.FromImage(destImage))
|
using (var graphics = Graphics.FromImage(destImage))
|
||||||
{
|
{
|
||||||
graphics.CompositingMode = CompositingMode.SourceCopy;
|
graphics.CompositingMode = CompositingMode.SourceCopy;
|
||||||
graphics.CompositingQuality = CompositingQuality.HighQuality;
|
graphics.CompositingQuality = CompositingQuality.HighQuality;
|
||||||
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
graphics.SmoothingMode = SmoothingMode.HighQuality;
|
graphics.SmoothingMode = SmoothingMode.HighQuality;
|
||||||
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
||||||
|
|
||||||
using (var wrapMode = new ImageAttributes())
|
using (var wrapMode = new ImageAttributes())
|
||||||
{
|
{
|
||||||
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
|
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
|
||||||
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
|
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return destImage;
|
return destImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct KeyMapping
|
public struct KeyMapping
|
||||||
{
|
{
|
||||||
public KeyMapping(int source, int target)
|
public KeyMapping(int source, int target)
|
||||||
{
|
{
|
||||||
Source = source;
|
Source = source;
|
||||||
Target = target;
|
Target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Source { get; set; }
|
public int Source { get; set; }
|
||||||
public int Target { get; set; }
|
public int Target { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,49 +1,49 @@
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using Artemis.KeyboardProviders.Razer.Utilities;
|
using Artemis.DeviceProviders.Razer.Utilities;
|
||||||
using Corale.Colore.Core;
|
using Corale.Colore.Core;
|
||||||
using Corale.Colore.Razer;
|
using Corale.Colore.Razer;
|
||||||
using Constants = Corale.Colore.Razer.Keyboard.Constants;
|
using Constants = Corale.Colore.Razer.Keyboard.Constants;
|
||||||
|
|
||||||
namespace Artemis.KeyboardProviders.Razer
|
namespace Artemis.DeviceProviders.Razer
|
||||||
{
|
{
|
||||||
public class BlackWidow : KeyboardProvider
|
public class BlackWidow : KeyboardProvider
|
||||||
{
|
{
|
||||||
public BlackWidow()
|
public BlackWidow()
|
||||||
{
|
{
|
||||||
Name = "Razer BlackWidow Chroma";
|
Name = "Razer BlackWidow Chroma";
|
||||||
CantEnableText = "Couldn't connect to your Razer BlackWidow Chroma.\n" +
|
CantEnableText = "Couldn't connect to your Razer BlackWidow Chroma.\n" +
|
||||||
"Please check your cables and try updating Razer Synapse.\n\n" +
|
"Please check your cables and try updating Razer Synapse.\n\n" +
|
||||||
"If needed, you can select a different keyboard in Artemis under settings.";
|
"If needed, you can select a different keyboard in Artemis under settings.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool CanEnable()
|
public override bool CanEnable()
|
||||||
{
|
{
|
||||||
if (!Chroma.IsSdkAvailable())
|
if (!Chroma.IsSdkAvailable())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Some people have Synapse installed, but not a Chroma keyboard, deal with this
|
// Some people have Synapse installed, but not a Chroma keyboard, deal with this
|
||||||
var blackWidowFound = Chroma.Instance.Query(Devices.Blackwidow).Connected;
|
var blackWidowFound = Chroma.Instance.Query(Devices.Blackwidow).Connected;
|
||||||
var blackWidowTeFound = Chroma.Instance.Query(Devices.BlackwidowTe).Connected;
|
var blackWidowTeFound = Chroma.Instance.Query(Devices.BlackwidowTe).Connected;
|
||||||
return blackWidowFound || blackWidowTeFound;
|
return blackWidowFound || blackWidowTeFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Enable()
|
public override void Enable()
|
||||||
{
|
{
|
||||||
Chroma.Instance.Initialize();
|
Chroma.Instance.Initialize();
|
||||||
Height = Constants.MaxRows;
|
Height = Constants.MaxRows;
|
||||||
Width = Constants.MaxColumns;
|
Width = Constants.MaxColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Disable()
|
public override void Disable()
|
||||||
{
|
{
|
||||||
Chroma.Instance.Uninitialize();
|
Chroma.Instance.Uninitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DrawBitmap(Bitmap bitmap)
|
public override void DrawBitmap(Bitmap bitmap)
|
||||||
{
|
{
|
||||||
var razerArray = RazerUtilities.BitmapColorArray(bitmap, Height, Width);
|
var razerArray = RazerUtilities.BitmapColorArray(bitmap, Height, Width);
|
||||||
|
|
||||||
Chroma.Instance.Keyboard.SetCustom(razerArray);
|
Chroma.Instance.Keyboard.SetCustom(razerArray);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,22 +1,22 @@
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using Artemis.Utilities;
|
using Artemis.Utilities;
|
||||||
using Corale.Colore.Razer.Keyboard.Effects;
|
using Corale.Colore.Razer.Keyboard.Effects;
|
||||||
|
|
||||||
namespace Artemis.KeyboardProviders.Razer.Utilities
|
namespace Artemis.DeviceProviders.Razer.Utilities
|
||||||
{
|
{
|
||||||
public static class RazerUtilities
|
public static class RazerUtilities
|
||||||
{
|
{
|
||||||
public static Custom BitmapColorArray(Bitmap b, int height, int width)
|
public static Custom BitmapColorArray(Bitmap b, int height, int width)
|
||||||
{
|
{
|
||||||
var keyboardGrid = Custom.Create();
|
var keyboardGrid = Custom.Create();
|
||||||
if (b.Width > width || b.Height > height)
|
if (b.Width > width || b.Height > height)
|
||||||
b = ImageUtilities.ResizeImage(b, width, height);
|
b = ImageUtilities.ResizeImage(b, width, height);
|
||||||
|
|
||||||
for (var y = 0; y < b.Height; y++)
|
for (var y = 0; y < b.Height; y++)
|
||||||
for (var x = 0; x < b.Width; x++)
|
for (var x = 0; x < b.Width; x++)
|
||||||
keyboardGrid[y, x] = b.GetPixel(x, y);
|
keyboardGrid[y, x] = b.GetPixel(x, y);
|
||||||
|
|
||||||
return keyboardGrid;
|
return keyboardGrid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
using Artemis.KeyboardProviders;
|
using Artemis.DeviceProviders;
|
||||||
|
|
||||||
namespace Artemis.Events
|
namespace Artemis.Events
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
using Artemis.KeyboardProviders;
|
using Artemis.DeviceProviders;
|
||||||
using Artemis.KeyboardProviders.Corsair;
|
using Artemis.DeviceProviders.Corsair;
|
||||||
using Artemis.KeyboardProviders.Logitech;
|
using Artemis.DeviceProviders.Logitech;
|
||||||
using Artemis.KeyboardProviders.Razer;
|
using Artemis.DeviceProviders.Razer;
|
||||||
using Artemis.Modules.Effects.AudioVisualizer;
|
using Artemis.Modules.Effects.AudioVisualizer;
|
||||||
using Artemis.Modules.Effects.Debug;
|
using Artemis.Modules.Effects.Debug;
|
||||||
using Artemis.Modules.Effects.TypeWave;
|
using Artemis.Modules.Effects.TypeWave;
|
||||||
|
|||||||
@ -1,21 +0,0 @@
|
|||||||
using System.Drawing;
|
|
||||||
|
|
||||||
namespace Artemis.KeyboardProviders
|
|
||||||
{
|
|
||||||
public class KeyboardRegion
|
|
||||||
{
|
|
||||||
public KeyboardRegion(string regionName, Point topLeft, Point bottomRight)
|
|
||||||
{
|
|
||||||
RegionName = regionName;
|
|
||||||
TopLeft = topLeft;
|
|
||||||
BottomRight = bottomRight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string RegionName { get; set; }
|
|
||||||
public Point TopLeft { get; set; }
|
|
||||||
public Point BottomRight { get; set; }
|
|
||||||
|
|
||||||
public Rectangle GetRectangle()
|
|
||||||
=> new Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X - TopLeft.X, BottomRight.Y - TopLeft.Y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Artemis.DeviceProviders;
|
||||||
using Artemis.Events;
|
using Artemis.Events;
|
||||||
using Artemis.KeyboardProviders;
|
|
||||||
using Artemis.Services;
|
using Artemis.Services;
|
||||||
using Artemis.Settings;
|
using Artemis.Settings;
|
||||||
using Caliburn.Micro;
|
using Caliburn.Micro;
|
||||||
|
|||||||
@ -3,8 +3,8 @@ using System.Drawing;
|
|||||||
using System.Drawing.Drawing2D;
|
using System.Drawing.Drawing2D;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Artemis.KeyboardProviders.Corsair;
|
using Artemis.DeviceProviders.Corsair;
|
||||||
using Artemis.KeyboardProviders.Logitech.Utilities;
|
using Artemis.DeviceProviders.Logitech.Utilities;
|
||||||
using Artemis.Managers;
|
using Artemis.Managers;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
using Artemis.Utilities;
|
using Artemis.Utilities;
|
||||||
|
|||||||
@ -5,7 +5,7 @@ using System.Drawing.Drawing2D;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Artemis.KeyboardProviders;
|
using Artemis.DeviceProviders;
|
||||||
|
|
||||||
namespace Artemis.Utilities.Keyboard
|
namespace Artemis.Utilities.Keyboard
|
||||||
{
|
{
|
||||||
|
|||||||
@ -9,8 +9,8 @@ using System.Windows.Input;
|
|||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using Artemis.DAL;
|
using Artemis.DAL;
|
||||||
|
using Artemis.DeviceProviders;
|
||||||
using Artemis.Events;
|
using Artemis.Events;
|
||||||
using Artemis.KeyboardProviders;
|
|
||||||
using Artemis.Managers;
|
using Artemis.Managers;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
using Artemis.Models.Profiles;
|
using Artemis.Models.Profiles;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user