Controlling DS4 input programmatically (PC)

@harry said in Controlling DS4 input programmatically (PC):

All calls but one seem to be working fine. Specifically, VIGEM_API BOOL vigem_target_is_attached(PVIGEM_TARGET target); never returns true, even when the target is actually attached and I can send reports to it. Perhaps I got the API wrong?

Oh? That's odd, it's expected to return TRUE when the bus has brought it to working stage. This application uses the API so I suspect it to function properly 🤔

@harry said in Controlling DS4 input programmatically (PC):

Isn't that API call supposed to be used right after a vigem_target_add call (with polling for instance) to ensure that the device is attached before starting to send reports?

vigem_target_add is blocking until the device is truly operational and calling vigem_target_is_attached afterwards is expected to return TRUE.

Cheers

@nefarius said in Controlling DS4 input programmatically (PC):

@harry said in Controlling DS4 input programmatically (PC):

All calls but one seem to be working fine. Specifically, VIGEM_API BOOL vigem_target_is_attached(PVIGEM_TARGET target); never returns true, even when the target is actually attached and I can send reports to it. Perhaps I got the API wrong?

Oh? That's odd, it's expected to return TRUE when the bus has brought it to working stage. This application uses the API so I suspect it to function properly 🤔

In fact, I used that code as a reference and I was expecting it to work like you described, but it didn't. Everything else is working fine. I've actually integrated it with some tools that I have and it works like a charm.

Hats off to you sir! You've done an excellent job 🙂

I'll try that specific API again, see if I did something wrong in the first place.

@harry said in Controlling DS4 input programmatically (PC):

Hats off to you sir! You've done an excellent job

Years of stealing studying other peoples C/C++ code got me there, and for my first real public API it's surprisingly solid and even considers backwards compatibility, the wet dream of every Windows developer 😛

But thanks, appreciate it.

If it still bombs for whatever reason maybe we can spin up a quick debugging session; I'm always on the bug-hunt 🔫

This post is deleted!

Had to signup to thank you for this...

within 20 minutes, I had it installed and sending buttons to remote play.

then...
Used a real xbox one controller with xinput, and mapped all the controls.

now have a nice little app to let you use remote play with an xbox controller, without having a real PS4 controller plugged in.

ran into a problem...

I can't get the trigger buttons to work.

tried all the combos below:

report.SetAxis(DualShock4Axes.RightTrigger, 255);
report.RightTrigger = 255;
report.SetButtonState(DualShock4Buttons.TriggerRight, true);

all the other buttons work flawless...so IDK

some info:
Windows 10 1809 - 17763.348
PS4 Pro 6.50
Driver 1.14.3.0 (untouched and signed by you)

I really don't know if it worked a few days ago before the PS4 updated to 6.5

any idea?

made a new test app...
winform + timer
https://pastebin.com/Tw2dV7as

Quick map of keyboard WSAD + numpad to test trigger.

triggers do work local, but remote play doesn't...

ran a game I know uses PS4 controllers local(axiom verge) + remote play.
video here:
Youtube Video

notice the stick movement works on both..but when I "press" the trigger
*axiom verge works (laser) (local)
*remote play not working(diablo) should shot out 360 knifes

I figured it out!

Checked the windows controller settings and noticed these 2 buttons didn't light up on my emulated controller.
*did light up on a real controller

alt text

added the following code:

        byte lt = XtoP2(xbox.Triggers.Left);//convert float (0-1) to byte (0-255)
        byte rt = XtoP2(xbox.Triggers.Right);

        report.LeftTrigger = lt;
        report.RightTrigger = rt;

        if (lt > 0)
            report.SetButtonState(DualShock4Buttons.TriggerLeft, true);
        else
            report.SetButtonState(DualShock4Buttons.TriggerLeft, false);

        if (rt > 0)
            report.SetButtonState(DualShock4Buttons.TriggerRight, true);
        else
            report.SetButtonState(DualShock4Buttons.TriggerRight, false);

working now.

didn't realize triggers have an axis and button assigned to the same button.

@BOCS Cool! That needs documentation then I guess 😅