Replies: 22 comments 37 replies
|
Hi. BTW, how do you get haptics? Im using a wireless dualsense too, but doenst seem to get haptic. At least the real ones from the game. Do you have to enable any setting in padforge? Im using Dualsense USB as emulated controller. |
|
Thanks. Tried again and something not working here. I selected wireless controller on windows audio output. Dualsense (PS5) full as emulated pad. didnt touch any other setting at all. Started Ratchet, sounds play on dualsense speaker.. Main menu, as soon as I go in game, audio stop playing. And there are no haptics. Adaptive trigers works. Tried to swap to TV audio output then started to get some rumble, but doesnt look like haptic. For haptic is mandatory selecting wireless controller as audio output? There is a way to get specific games sound on speaker and not complete system audio? Tried a clean padforge but didnt help to get haptic. Did another test, leave spotify playing on dualsense speaker on dualsense (PS5) full. Launched Ratchet, after loading save, sound stopped, in game no haptics. After closing the game, sound (spotify) returned to dualsense speaker. I guess game is writing some report padforge is not interpreting correctly. |
|
I think I have similar problem, whether Bluetooth-connected or usb-connected physical DualSense, when PadForge emulates a virtual "DualSense Full" with GTA V E, the delay become worst as you play and the controller will continues doing the delayed advanced haptics and adaptive triggers even if you close the game! |
|
@vlue-c, this is a real bug, your diagnosis is right, and the direction you found is the correct one. Fixed in What was wrongBoth reports carry the packet PadForge already had this failure recorded one level down. An early cut sent the same frame on both the speaker and headset lanes as two The reasoning that split the counters in the first place cited What changedOne session, one counter pair. The haptic stream's private sequence and packet counter are gone. Both lanes, and the mic open/close toggle that also carries a A tick with both payloads sends one report. Speaker plus haptics in the same tick is now a single Your instinct that this was the right shape holds up against the references, which is worth spelling out since you mentioned you had not dug into the protocol:
Ordering follows what you tested: session header, actuators, then audio. Evidence StatusConfirmed. The wire format is pinned by five new tests covering the packet chain and its offsets, both payloads surviving intact (the Opus frame is not clipped by the actuator block sitting ahead of it), the headset lane and mic-session byte, CRC coverage over the audio payload, and the signal verdict that drives the silence gate. Each was mutation-verified against a wrong chain offset. Full suite 3,388 green, zero warnings. Hypothesized. That this removes the stall on hardware. The mechanism matches your symptoms exactly and the fix is the shape you already validated on your pad, but the change as committed has not run on a physical DualSense here. Unverified. Whether anything else shares that session in a way this misses, for example a game driving haptics while the mic toggle retries. @Jobima1st and @Trihy, the growing delay that keeps running after the game exits is a separate report and this change does not claim to fix it. I checked the two places a backlog could accumulate on that path, and neither can grow without bound: the actuator ring resynchronises to a 20 ms cushion once it drifts past 250 ms, and the Bluetooth write pool has eight slots and drops a frame rather than queueing when it saturates. Adaptive triggers continuing after exit also points somewhere other than the audio session, since triggers do not ride it at all. It needs its own investigation rather than being folded into this one, and the fact that it happens on USB as well as Bluetooth is a useful discriminator, since the session grammar here is Bluetooth-only. @Trihy, the speaker going silent when Ratchet moves from the menu into gameplay is also its own thing. Worth keeping separate from the two above until there is something concrete tying them together. |
|
@Trihy, thanks for coming back with the result. That is the confirmation this needed: the fix was verified on vlue-c's hardware as a patch before it shipped, and yours is the first report of the shipped build working on a second machine and a different game. Your earlier symptom turns out to be the same bug, not a separate one, and your own guess in that last message is right. You reported the speaker playing in the menu and going silent the moment you reached gameplay, with Spotify behaving the same way and coming back when the game closed. That is exactly what the session collision looks like from the speaker's side. In the menu only one stream was live, so its counter was monotonic and everything worked. Entering gameplay the game began driving the actuators, the second stream joined with its own counter, and the one audio session the pad tracks saw a counter jumping back and forth. The pad went quiet and then resynced onto whichever stream kept talking. So "the speaker stops when I go in game" and "haptics and speaker cannot start together" were one defect seen from two sides, which is why the same build fixed both without anything else changing. That also means the earlier note in this thread, where I split your speaker report off as its own separate thing, was wrong. It was the same root cause and the fix covers it. The remaining item@Jobima1st's report, that the lag grows over a session and the controller keeps acting after the game is closed, is still open and is being tracked here in this thread. Two things have changed on that since the last update. The first is that a plain reading of the queue no longer settles it. The effect lane is a bounded 64-slot queue that drops rather than grows, so it cannot accumulate without limit, which is what I said earlier. What that reasoning does not cover is how long each write takes when a Bluetooth link is also carrying an audio stream, and that is measurable rather than arguable. So the second change is instrumentation. The build now carries a per-second effect-lane trace behind the existing diagnostic switch, recording what the game produced, what was refused, what actually reached the pad, how much is still queued, the worst single write in milliseconds, and how long since the game last wrote. Those fields separate the candidates instead of ranking them by plausibility: a queue depth that climbs with slow writes is transport backpressure, writes continuing while the game has gone quiet is a backlog draining, and both quiet while the pad still acts means the writer is somewhere else entirely. One piece of context worth stating plainly, because it shapes what a fix can look like. Adaptive trigger programs are stateful on the real firmware: a program is set once and the pad holds it until something overwrites it. PadForge deliberately stands down and leaves that state alone when it is not authoring the triggers itself, so that a program written by something else survives instead of being stamped over a second later. That behaviour was itself the fix for a hardware-reported problem last August. So "make it clear the triggers on exit" is not a free change, and any fix here has to keep that guarantee intact rather than trade one report for the other. Evidence StatusConfirmed. The audio session fix works on hardware, now on two machines and three games (@vlue-c's patch on his pad, @Trihy on the shipped build in Ratchet & Clank). The effect lane's queue is bounded at 64 with a drop-on-full policy. Adaptive trigger state is latched in DS5 firmware and PadForge's non-assertion when idle is deliberate. Hypothesized. That link contention between the audio stream and the effect writes explains the growing lag. The mechanism fits the reports and is now measurable, but it has not been measured. Unverified. Whether the post-exit behaviour is one cause or two, since a trigger held by firmware and a trigger being rewritten feel identical from the outside. |
|
Thanks for reading through the report, analyzing it, and putting together the patch. For reference, my test setup was:
With this setup, I can confirm that haptic feedback and the controller speaker work correctly at the same time. I also tested recording through NVIDIA's recording feature. While haptics and the controller speaker were both active in-game, microphone recording through the DualSense Edge also worked correctly. I wasn't able to fully verify the behavior of the mic mute button, though. While haptics + speaker + mic were all active, pressing the mute button did mute the microphone, but pressing it again did not unmute it. This looks more like a game-side issue or an unimplemented feature than a PadForge bug. The reason I suspect that is that, on the desktop, pressing the DualSense Edge mute button does not appear to do anything at all. So at least from my hardware test, the shared audio session fix is working correctly with haptics + speaker + microphone recording active together. My issue is resolved, but I’ll left the thread open since the other issue identified here is still being tested. |
|
@Jobima1st, a request, and some context for why. You reported that the delay grows as you play, and that the controller keeps running advanced haptics and adaptive triggers after the game is closed, on a virtual DualSense Full with GTA V Enhanced. Your report landed about five hours before the fix in this thread was posted, so everything you saw was on the older build. That matters here, because the defect that was fixed was two audio streams each running their own counter into the one session the pad tracks, which put roughly twice the traffic on the Bluetooth link whenever the speaker and the haptics were both live. A tick that carries both now goes out as a single report instead of two. Since then this has been retested on the current build by two people, on a standard DualSense and on a DualSense Edge, across three games, and neither sees a growing delay. It has also been tested here directly and does not reproduce. So the question is simply whether it still happens for you. If you have a chance to run the current dev build, anything at or after the commit referenced above, we would like to know which of these you get:
Any of the three is useful. A "still happening" answer is the one that would keep this open, and it would come with your GTA V Enhanced setup attached, which is the configuration nobody else here has tested. One note in case it saves you time. If the controller feels stiff or keeps clicking on the triggers after a game closes, that part is expected and is not a fault. Adaptive trigger programs are held in the controller's own firmware and stay loaded until something replaces them, so a game that is closed while an effect is active leaves that effect in the pad. The Weapon and Vibration effects click when you pull the trigger by design, so a latched one keeps clicking every time you touch it. That is the same on a real DualSense with no PadForge involved. Setting an adaptive trigger mode in PadForge and setting it back to Off will clear it. The part we are asking about is only the growing delay. |
|
Unfortunately, its
it's noticeable as soon as I load my save and take a car, the delay around 1 min after playing for 3 min (These figures are estimates) |
|
thank you, now the latency/delay is feel like 0 (feel like using without using PadForge)! the skipping maybe get better, but it's still there |
|
I feel the last build is kinda odd, the skipping in BT is kinda same as PadForge_r3194@ee93187, but with usb is worst than even the BT in both |
|
I only test with usb for now, PadForge_r3196@a29583c has more odd problems, now "After closing the game" is back! |
|
the PadForge r3197@7b71380 still has latency/delay problem that keeps running after the game exits, the problem that back in PadForge_r3196@a29583c, which is the old problem that was already fixed before anyway, I dont need PadForge to emulated usb Dualsense using Dualsense via USB (for now at least), so the last build is fine for me now |
|
@Jobima1st @Trihy, the last piece of this is fixed. You both reported it independently: @Jobima1st that the controller keeps acting after closing the game, @Trihy that you can hear the trigger click after the game is gone. Same thing, and it is now handled rather than explained. What it actually wasA DualSense stores its adaptive trigger program in the controller itself, and keeps it until something sends a different one. There is no timeout in the hardware. So a game that exits while a trigger effect is loaded leaves that effect sitting there, and PadForge is the only thing left that could clear it. @Jobima1st's last trace is what proved this was not the forwarding misbehaving. After the game closed, PadForge wrote nothing at all to the controller for 56 seconds. Nothing was late, nothing was still draining. The controller was simply holding what the game left. Why it was not already handledI said earlier in this thread that fixing this properly needed a change in the driver, so PadForge could be told when a game lets go of the virtual controller. That was wrong, and it is worth correcting plainly because it would have parked this indefinitely. No virtual controller driver offers that signal. ViGEmBus does not, and neither does VIIPER. And tools that do this job do not wait for one. DualSenseY-v2 drives a physical DualSense from a game's trigger and haptic instructions, which is the same problem exactly, and it uses a plain staleness window: fifteen seconds without an update and the driving app is treated as gone. That is what PadForge now does, using the same fifteen seconds rather than a number I picked. Why fifteen and not oneThis is the part that matters, and it is why the fix had to be careful rather than quick. A game can set a trigger effect once when a level loads and then never mention it again while you play. Release too eagerly and you take the trigger away from a game that is still running and still wants it. That is not a theoretical worry. PadForge tried reclaiming state on a 1.5 second window once before, and it cost the microphone LED and the adaptive triggers on real hardware. Fifteen seconds is far clear of that, and the release is a single frame rather than something asserted continuously, so if a game does come back it simply wins the next write and nothing fights it. What the release actually touchesOnly the two trigger blocks, and nothing else in the report. The lightbar, the player lights, the microphone LED and the whole audio side are PadForge's own to manage, and it is already writing them thirty times a second. A release that grabbed at those as well would end up fighting itself. Rumble needed nothing: it is already released about a second and a half after a game stops, which you can actually see happening in @Jobima1st's trace as PadForge takes the lightbar back 1.4 seconds after the last packet from the game. Trying itLatest dev build. Close a game that was driving the triggers, wait about fifteen seconds, and the trigger should let go on its own. No settings change needed, and you no longer have to set a trigger mode on the slot to get it back, which was the workaround offered before this was fixed properly. @Jobima1st, this came out of your traces again. Four faults on this path have now been found and fixed from logs you took. |
|
I can confirm everything works as expected on build from a few minutes ago. At least using real wireless dualsense and virtual dualsense (ps5) full. No trigger actuator after game close. No ghost triggers and crazy led bar after finishing a race in F1 22 Tested ratchet and F1 22. |
|
Everything reported in this thread is now fixed and confirmed on hardware. @Trihy's test a few minutes ago was the last one outstanding, and it came back clean on both games he checked. What was actually wrongSix separate faults, only the first of which was the one this thread opened on. The other five were found underneath it, and two of those were mistakes made along the way. The audio session. Speaker and advanced haptics each ran their own packet counter into the single audio session the controller tracks. With one stream live the counter was monotonic and everything worked, which is exactly why speaker-only and haptics-only were both fine. With both live, that one session saw a counter jumping backwards, and the controller did what any device does with a discontinuous stream: went quiet, then resynced onto whichever stream kept talking. That is @vlue-c's one-second gap and the recovery into only one feature, and it is also why @Trihy's speaker went silent the moment he reached gameplay. A leaked buffer per dropped packet. The effect forwarding used a bounded queue set to discard when full, on a belief written into a comment: that a refused write reports itself as refused, so the memory reserved for that packet could be released. It does not. It accepts the write, reports success, and discards the item, so every dropped packet leaked its reservation. @Jobima1st's first trace measured the cost at roughly 10,500 leaked allocations per second, which is what his growing delay actually was. A rate limit set for a reason that turned out to be false. While the delay was being blamed on a saturated Bluetooth link, the forwarding was capped at one packet every 8 milliseconds. His trace then measured writes at a tenth of a millisecond and killed that explanation outright. The cap stayed anyway and became the skipping. Repeats filtered on the wrong side. Fixing that introduced a worse bug: real updates were being destroyed by the flood of identical packets before anything looked at them. His USB trace showed writes of zero for seconds at a time. Repeats suppressed outright. Fixing that introduced the opposite bug. PadForge writes to the same controller thirty times a second while mirroring what a game drives, so a repeated packet is not redundant, it re-asserts the game's own state over that. Suppressing repeats left the game winning six times a second against a writer running at thirty. Nothing handing the triggers back. A DualSense holds its adaptive trigger program in firmware until something loads a different one. A game that exits mid-effect leaves it there. That is the "keeps running after closing the game" both @Jobima1st and @Trihy reported, and the trigger click @Trihy could hear after exit. It now releases after fifteen seconds of silence from the game, a number taken from DualSenseY-v2, which solves the same problem the same way. The commits
Two of those made things worse before they got better, and they are listed rather than quietly folded into the ones that worked. Answered rather than fixed@Trihy's HidHide question. PadForge owning its hide states at launch is by design rather than a reset, and the reasoning is earlier in this thread. @vlue-c's mute button. PadForge forwards that button and mirrors the host's mute rather than inventing one, so a game that acts on the first press without implementing the toggle back produces exactly what was seen. That is outside PadForge, and the practical route is binding it to whatever mute hotkey your chat or recording application exposes. The people who did this@vlue-c opened it with a diagnosis that was already correct, updated PersonaVerify into a reproduction tool that separated the sequential case from the simultaneous one, pointed at the right direction for the fix, and then confirmed it on a DualSense Edge over Bluetooth and tested the microphone alongside it. @Jobima1st ran trace after trace across build after build, on both USB and Bluetooth, including the two where the fix made his controller worse than before he started. Four of the six faults above were found in his logs and none of them were reachable by reading the code. @Trihy reported the speaker dropping out in gameplay, which turned out to be the same bug seen from the other side, spotted the ghost trigger and the lightbar behaviour in F1 22 that would otherwise have been left behind when this thread closed, and confirmed the final build on hardware. Five games between the three of you: Arknights Endfield, Ratchet and Clank, F1 22, GTA V Enhanced and Indiana Jones and the Great Circle. Two controllers, both transports. |
|
the new build with the usb is still has latency/delay problem that keeps running after the game exits, the problem that back in PadForge_r3196@a29583c, which is the old problem that was already fixed before and now the LEDs seems not working in BT, so I think I will keep using old PadForge_r3196@a29583c (or PadForger3197@7b71380) for now |
|
Unfortunately, the situation remains the same with the new build and usb this time I closed padforge as soon as I close the game (maybe it was why you didnt see the problem because I was wait until the controller stop the feedbacking then I close padforge) padforge-trace usb.log I will test BT in the next comment |
|
Unfortunately, in r3212@fd8b007 nothing seems fixed with the usb BT will be in next comment |
|
Unfortunately, even in r3213@1bda40c the usb delay (and the led flashing) is not fixed |
|
in r3214@c6b4591 things changes indeed, it still has long delay that keep getting bigger in the feeds but seems they will not keeps running after the game exits, also the flashing is fixed or it's way better at least |
|
you nail it this time in r3215@775559d thank you so much, the usb is work fine (as using usb without PadForge if I am not mistaken), bt is fine too, I think the log is not needed :) |
|
Everything reported in this thread is fixed, and every fix has been confirmed on hardware by the person who reported it. @Jobima1st on the final build: "the usb is work fine (as using usb without PadForge if I am not mistaken), bt is fine too." @Trihy confirmed the trigger and light bar behaviour on Ratchet and Clank and F1 22. @vlue-c confirmed the original fault on a DualSense Edge over Bluetooth, with the microphone tested alongside it. What was actually wrongNine faults. One was the bug this thread opened on. The rest were found underneath it, and two were mistakes made while fixing the others. Speaker and haptics could not start together. Both carry the packet A leaked allocation per dropped packet. The forwarding used a bounded queue set to discard when full, on a belief written into a comment: that a refused write reports itself as refused. It does not. Every Drop mode accepts the write, reports success, and discards the item. Measured in @Jobima1st's first trace at roughly 10,500 leaked allocations a second. A rate limit set for a reason that turned out to be false. The delay was blamed on a saturated Bluetooth link, so the forwarding was capped. The same trace then measured writes at a tenth of a millisecond and killed that explanation. The cap stayed and became audible skipping. Repeats filtered on the wrong side, which destroyed every real update inside a burst. Writes read zero for seconds at a time. Then repeats suppressed outright, which broke it the opposite way, because this lane is not the pad's only writer. Nothing released the adaptive triggers when a game exited. A DualSense holds its trigger program in firmware until something loads a different one. Nothing released them when PadForge itself exited either, which is the case @Jobima1st was actually hitting and which he identified himself. The light bar was never handed back once a game claimed it, for the rest of the session. Two writers fought over the light bar while a game was driving it, one live and one a frame behind. @Jobima1st's description was the diagnosis: "an overlap between two, one lagging and the other not lagging, and the controller is flashing between them." PadForge wrote to the pad over USB four times faster than it could take them in, so the excess queued below the application and grew for as long as you played. The rate is now the one DualSenseY-v2 uses to drive a real DualSense, and the one that has worked over Bluetooth throughout. The commits
Two of those made things worse before they got better. They are listed rather than quietly folded into the ones that worked. Answered rather than fixed@Trihy's HidHide question. PadForge owning its hide states at launch is by design rather than a reset. @vlue-c's mute button. PadForge forwards the button and mirrors the host's mute rather than inventing one, so a game that acts on the first press without implementing the toggle back produces exactly what was seen. That is outside PadForge, and binding the button to a chat or recording application's own mute hotkey is the practical route. @Trihy's F1 22 ghost trigger and erratic light bar, which he set aside for a separate thread that was never created. He retested it after the fixes above and reported it clean, so it closes here rather than being lost. The people who did this@vlue-c opened it with a diagnosis that was already correct, updated PersonaVerify into a reproduction tool that separated the sequential case from the simultaneous one, pointed at the right shape for the fix, then confirmed it on a DualSense Edge over Bluetooth and tested the microphone at the same time. @Jobima1st ran trace after trace across seven builds, on both transports, including two that made his controller worse than before he started. Six of the nine faults were found in his logs and none were reachable by reading the code. Twice he did not just test but diagnosed: the note that he closes PadForge immediately after the game was the whole of one bug, and his description of the light bar was the whole of another. He was also right about USB and Bluetooth from his first message and stayed right through six builds in which our own instrumentation looked perfectly healthy. @Trihy reported the speaker dropping out in gameplay, which turned out to be the same bug seen from the other side, caught the F1 22 behaviour that would otherwise have been dropped, and confirmed on hardware nobody here has. Five games between the three of you: Arknights Endfield, Ratchet and Clank, F1 22, GTA V Enhanced and Indiana Jones and the Great Circle. Two controllers, both transports. Evidence StatusConfirmed. Every fix above verified on hardware by the reporter, on the shipped build. The counters behind each diagnosis are quoted from the attached traces. Full suite green at 3,423 on the final build. Hypothesized. That the USB rate is now optimal rather than merely correct. 125 Hz is the reference implementation's cadence and the rate that works on both transports here, but no one has swept the range to find where it starts costing detail. Unverified. DualSense Edge on the final build. @vlue-c confirmed the original session fix on an Edge, but the six later fixes have only been confirmed on standard DualSenses. Closing and locking. If anything resurfaces, open a fresh discussion and link back here. |
Uh oh!
There was an error while loading. Please reload this page.
Bluetooth DualSense / DualSense Edge: speaker and advanced haptics cannot start together
I noticed this while playing Arknights: Endfield, which makes active use of both the DualSense controller speaker and advanced haptic feedback.
For example, opening the dial menu by holding LT can trigger a sound effect through the controller speaker and advanced haptics at the same time.
Observed behavior
With a Bluetooth-connected physical DualSense or DualSense Edge, when PadForge emulates either a virtual DualSense or a virtual DualSense Edge:
I observed this with both physical DualSense and DualSense Edge controllers, and with both DualSense and DualSense Edge virtual-controller personas.
Reproduction tool
I updated
PersonaVerifyso that it renders three distinct phases to the composite virtual audio endpoint:This makes it easier to distinguish normal sequential transitions from the simultaneous-output case.
Temporary local workaround
I used Codex to experiment with a local PadForge patch. I did not independently investigate the protocol or fully understand the existing implementation.
The workaround keeps the existing paths for individual features:
0x35audio report0x32haptics reportBut when both speaker and haptic data are active in the same tick, it sends a single
0x35report containing:0x11session header,0x12advanced-haptics payload, and0x13speaker/Opus payload.With that local change, the final simultaneous phase in PersonaVerify works as expected, and I can also hear and feel speaker output and advanced haptics together in Arknights: Endfield.
I am sharing this mainly to report that the issue exists and to provide a reproducible symptom, affected configurations, and a possible direction for investigation. If useful, I can also share the relevant local code changes.
All reactions