2022-11-24 22:37:24 +01:00
|
|
|
using hidapi;
|
|
|
|
|
using PowerControl.External;
|
|
|
|
|
using static CommonHelpers.Log;
|
|
|
|
|
|
|
|
|
|
namespace SteamController.Devices
|
|
|
|
|
{
|
|
|
|
|
public partial class SteamController
|
|
|
|
|
{
|
|
|
|
|
public const int LizardModeUpdateInterval = 250;
|
|
|
|
|
|
|
|
|
|
public bool LizardMouse { get; set; } = true;
|
|
|
|
|
public bool LizardButtons { get; set; } = true;
|
|
|
|
|
|
|
|
|
|
private bool? savedLizardMouse;
|
|
|
|
|
private bool? savedLizardButtons;
|
|
|
|
|
private DateTime lizardMouseUpdated = DateTime.Now;
|
|
|
|
|
private DateTime lizardButtonUpdated = DateTime.Now;
|
|
|
|
|
|
|
|
|
|
private void UpdateLizardMouse()
|
|
|
|
|
{
|
|
|
|
|
if (savedLizardMouse == LizardMouse)
|
|
|
|
|
{
|
|
|
|
|
// We need to explicitly disable lizard every some time
|
|
|
|
|
// but don't fight enabling it, as someone else might be taking control (Steam?)
|
2022-11-25 10:56:17 +01:00
|
|
|
if (lizardMouseUpdated.AddMilliseconds(LizardModeUpdateInterval) > DateTime.Now)
|
2022-11-24 22:37:24 +01:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-25 10:56:17 +01:00
|
|
|
savedLizardMouse = LizardMouse;
|
|
|
|
|
lizardMouseUpdated = DateTime.Now;
|
|
|
|
|
|
2022-11-24 22:37:24 +01:00
|
|
|
if (LizardMouse)
|
|
|
|
|
{
|
|
|
|
|
//Enable mouse emulation
|
|
|
|
|
byte[] data = new byte[] { 0x8e, 0x00 };
|
|
|
|
|
neptuneDevice.RequestFeatureReport(data);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//Disable mouse emulation
|
|
|
|
|
byte[] data = new byte[] { 0x87, 0x03, 0x08, 0x07 };
|
|
|
|
|
neptuneDevice.RequestFeatureReport(data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void UpdateLizardButtons()
|
|
|
|
|
{
|
|
|
|
|
if (savedLizardButtons == LizardButtons)
|
|
|
|
|
{
|
|
|
|
|
// We need to explicitly disable lizard every some time
|
|
|
|
|
// but don't fight enabling it, as someone else might be taking control (Steam?)
|
2022-11-25 10:56:17 +01:00
|
|
|
if (lizardButtonUpdated.AddMilliseconds(LizardModeUpdateInterval) > DateTime.Now)
|
2022-11-24 22:37:24 +01:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-25 10:56:17 +01:00
|
|
|
savedLizardButtons = LizardButtons;
|
|
|
|
|
lizardButtonUpdated = DateTime.Now;
|
|
|
|
|
|
2022-11-24 22:37:24 +01:00
|
|
|
if (LizardButtons)
|
|
|
|
|
{
|
|
|
|
|
//Enable keyboard/mouse button emulation
|
|
|
|
|
byte[] data = new byte[] { 0x85, 0x00 };
|
|
|
|
|
neptuneDevice.RequestFeatureReport(data);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//Disable keyboard/mouse button emulation
|
|
|
|
|
byte[] data = new byte[] { 0x81, 0x00 };
|
|
|
|
|
neptuneDevice.RequestFeatureReport(data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|