Controlling DS4 input programmatically (PC)



  • Of course, I wouldn't be asking for anything. PowerCLI gets the job done just fine, so everything's good. I was just wondering if I've missed something.

    By the way, do those legal stuff have anything to do with the work you've been doing on this?



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

    Of course, I wouldn't be asking for anything. PowerCLI gets the job done just fine, so everything's good. I was just wondering if I've missed something.

    PowerCLI... I've spotted a VMware user it seems πŸ˜‰

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

    By the way, do those legal stuff have anything to do with the work you've been doing on this?

    It has indeed. I will shed light on it in greater detail in a dedicated news post. Sorry to beat around the bush but I don't like talking about unfinished business πŸ˜‰



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

    Sorry to beat around the bush but I don't like talking about unfinished business

    don’t count your chickens before they hatch

    Seems like the closest English translation to the German figure of speech "ΓΌber ungelegte Eier spricht man nicht" πŸ˜‰



  • I've put together a very (very) simple solution to invoke the client API from Java, using JNA. I should mention it only supports DS* calls for now.

    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?

    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?

    Cheers



  • @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 πŸ˜…


Log in to reply