steam-deck-tools/SteamController/Devices/SteamController.cs
Kamil Trzciński ecbd0407c0 Add SteamController implementation
This adds a Steam Shortcuts, Desktop Mode, and X360 Emulation
- Supports all Steam Shortcuts (including on-screen keyboard, and brightness)
- Supports Desktop mode (with a scroll on left pad and left stick), and trackpoint (on right stick)
- Supports X360 mode: hold Options for 1s to switch between Desktop and X360
- Holding Steam button enables Desktop like controls and stops passing all inputs to X360
2022-11-26 10:19:50 +01:00

66 lines
1.5 KiB
C#

using hidapi;
using PowerControl.External;
using static CommonHelpers.Log;
namespace SteamController.Devices
{
public partial class SteamController : IDisposable
{
public const ushort SteamVendorID = 0x28DE;
public const ushort SteamProductID = 0x1205;
public const int ReadTimeout = 50;
private hidapi.HidDevice neptuneDevice;
public SteamController()
{
InitializeButtons();
InitializeActions();
neptuneDevice = new hidapi.HidDevice(SteamVendorID, SteamProductID, 64);
neptuneDevice.OpenDevice();
}
public void Dispose()
{
}
public bool Updated { get; private set; }
internal void Reset()
{
foreach (var action in AllActions)
action.Reset();
}
private void BeforeUpdate(byte[] buffer)
{
foreach (var action in AllActions)
action.BeforeUpdate(buffer, this);
}
internal void BeforeUpdate()
{
byte[] data = neptuneDevice.Read(ReadTimeout);
if (data == null)
{
Reset();
Updated = false;
return;
}
BeforeUpdate(data);
Updated = true;
}
internal void Update()
{
foreach (var action in AllActions)
action.Update();
UpdateLizardButtons();
UpdateLizardMouse();
}
}
}