Thanks for getting back to me. Any idea what could be stopping it from working properly?
Are there special timing requirements? Does it require special threading stuff?
Could it be something to do with me running the latest official Windows 10 update?
I tried SimWinGamepad at https://github.com/DavidRieman/SimWinInput or https://www.nuget.org/packages/SimWinGamePad and am having similar results.
The gamepad is connected, but the reports don't seem to be registering properly.
If I do a simple button press and release with SimGamePad.Instance.Use(GamePadControl.A);
it works properly, but if I try to do other stuff and then call simPad.Update(0);
, nothing at all registers.
This leads me to believe it's a problem with my code setup or an incompatibility with a Windows update or something similar.
Could you try compiling my code on your PC and checking if it works?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Nefarius.ViGEm.Client;
using Nefarius.ViGEm.Client.Targets;
using Nefarius.ViGEm.Client.Targets.Xbox360;
using Nefarius.ViGEm.Client.Exceptions;
namespace ControllerConverter
{
class Program
{
static ViGEmClient client = new ViGEmClient();
static Xbox360Controller controller = new Xbox360Controller(client);
static Xbox360FeedbackReceivedEventArgs previousXbox360FeedbackReceivedEventArgs;
static void Main(string[] args)
{
previousXbox360FeedbackReceivedEventArgs = new Xbox360FeedbackReceivedEventArgs(0, 0, 1);
controller.FeedbackReceived += new Xbox360FeedbackReceivedEventHandler(OnXbox360FeedbackReceived);
controller.Connect();
Console.WriteLine("Virtual Xbox360 gamepad connected.");
while (true)
{
Xbox360Report report = new Xbox360Report();
report.SetButtons(Xbox360Buttons.A, Xbox360Buttons.B, Xbox360Buttons.Up, Xbox360Buttons.LeftShoulder);
report.SetAxis(Xbox360Axes.LeftThumbX, 0);
report.SetAxis(Xbox360Axes.LeftThumbY, 0);
report.SetAxis(Xbox360Axes.RightThumbX, 128);
report.SetAxis(Xbox360Axes.RightThumbY, 0);
report.SetAxis(Xbox360Axes.LeftTrigger, 0);
report.SetAxis(Xbox360Axes.RightTrigger, 0);
//Xbox360ReportExtensions.SetButtons(report, Xbox360Buttons.A);
//Xbox360ReportExtensions.SetButtonState(report, Xbox360Buttons.A, true);
controller.SendReport(report);
Thread.Sleep(1);
}
}
static void OnXbox360FeedbackReceived(object sender, Xbox360FeedbackReceivedEventArgs e)
{
if (e.LargeMotor != previousXbox360FeedbackReceivedEventArgs.LargeMotor && e.SmallMotor != previousXbox360FeedbackReceivedEventArgs.SmallMotor & e.LedNumber != previousXbox360FeedbackReceivedEventArgs.LedNumber)
{
// Store passed in values
byte largeMotorData = e.LargeMotor;
byte smallMotorData = e.SmallMotor;
byte ledNumberData = e.LedNumber;
// Deal with new values
Console.WriteLine("Large Motor Data: {0}", largeMotorData);
Console.WriteLine("Small Motor Data: {0}", smallMotorData);
Console.WriteLine("LED Number: {0}", ledNumberData);
}
previousXbox360FeedbackReceivedEventArgs = e;
}
}
}