The NeptuneController class is the primary interface for interacting with the Steam Deck controller.
Key Workflow:
- Instantiate: Create a new
NeptuneController object. - Subscribe to Events: Attach a handler to the
OnControllerInputReceived event to receive real-time input updates. - Configure Mode: Set
LizardModeEnabled to true if you want to enable Mouse and Keyboard emulation. - Open Device: Call
.Open() to initialize the connection to the controller hardware. - Access Data: Once opened, you can access properties like
SerialNumber. Input data is provided via NeptuneControllerInputEventArgs, which contains ButtonState and AxesState.
Example Implementation:
using System;
namespace neptune_hidapi.net
{
internal class Program
{
static void Main(string[] args)
{
NeptuneController controller = new NeptuneController();
controller.OnControllerInputReceived += Controller_OnControllerInputReceived;
controller.LizardModeEnabled = true; // Mouse and Keyboard emulation enabled.
controller.Open(); // Open the controller device.
// Serial number is only available after Open()
Console.WriteLine($"Controller Serial: {controller.SerialNumber}");
Console.ReadLine();
}
private static void Controller_OnControllerInputReceived(object sender, NeptuneControllerInputEventArgs e)
{
// Access buttons via e.State.ButtonState.Buttons
foreach (var btn in e.State.ButtonState.Buttons)
{
Console.WriteLine($"{btn}: {e.State.ButtonState[btn]}");
}
// Access axes via e.State.AxesState.Axes
foreach (var axis in e.State.AxesState.Axes)
{
Console.WriteLine($"{axis}: {e.State.AxesState[axis]}");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace neptune_hidapi.net
{
internal class Program
{
static void Main(string[] args)
{
NeptuneController controller = new NeptuneController();
controller.OnControllerInputReceived += Controller_OnControllerInputReceived;
controller.LizardModeEnabled = true; //Mouse and Keyboard emulation enabled.
controller.Open(); //Open the controller device.
Console.WriteLine($"Controller Serial: {controller.SerialNumber}"); // Output the serial number. Only available once device has been opened.
Console.ReadLine();
}
static DateTime lastUpdate = DateTime.Now;
private static void Controller_OnControllerInputReceived(object sender, NeptuneControllerInputEventArgs e)
{
if ((DateTime.Now - lastUpdate).TotalMilliseconds > 100)
{
Console.CursorTop = 0;
Console.CursorLeft = 0;
foreach (var btn in e.State.ButtonState.Buttons)
{
Console.WriteLine($"{btn}: {e.State.ButtonState[btn]} ");
}
foreach (var axis in e.State.AxesState.Axes)
{
Console.WriteLine($"{axis}: {e.State.AxesState[axis]} ");
}
lastUpdate = DateTime.Now;
}
}
}
}