Skip to content

[Windows][DS4] PS4 DualShock lightbar/LED flickers distractingly like it's broken (possibly same with rumble motors) #5490

Description

@geekycow

Is there an existing issue for this?

  • I have searched the existing issues

Is your issue described in the documentation?

  • I have read the documentation

Is your issue present in the latest beta/pre-release?

This issue is present in the latest pre-release

Describe the Bug

Summary

During gameplay with some games such as Lego Star Wars The Skywalker Saga, the PS4 DualShock Gamepad lightbar/LED quickly flickers between the colour selected by the game and black/off.

Because the lightbar is big and bright, it's horridly distracting .

And because of the fast and stochastic flickering, it looks like a failing light, as if it's a hardware fault (which I first suspected) but it's not:

Sunshine seems to be rapidly sending (wrong?) instructions to turn the LED on/off (and probably the rumble motors too) using values that are theoretically undefined.

This can also mean that the lightbar is left black after finishing a game, leaving the gamepad ON but looking like it's OFF, which caused me no end of confusion.

I'm seeing this with both the stable and pre-release version of Sunlight running on Windows 10 with both Moonlight on Android and on a hardware Steam Link, using both V1 and V2 PS4 DS4s.

There's been reports on Reddit of others experiencing likely the same issue.

Suspected Cause

I think this occurs because a game's instructions to the DS4 controller are supposed to come with feature flags indicating which feature value fields should be sent to the controller (e.g. set the rumble motors to 11) and which features should be left untouched (e.g. don't touch the LED) -- but Sunshine currently doesn't get these feature flags, and so sets ALL the features to the supplied values, including the ones it shouldn't.

So if a game says-
SET LED TO BLUE (Colour 0x00,0x00,0x40) + DON'T CHANGE RUMBLE MOTORS
Sunshine sends-
SET LED TO BLUE (Colour 0x00,0x00,0x40) [Correct] + SET RUMBLE MOTORS TO (0,0) [Wrong]

And conversely if the game sends-
DON'T CHANGE LED - SET RUMBLE MOTORS TO (27,11)
Sunshine actually sends-
SET LED TO BLACK (Colour 0x00,0x00,0x00) [Wrong] - SET RUMBLE MOTORS TO (27,11) [Correct]

In the case of Lego Star Wars The Skywalker Saga, instructions to turn the LED on and then off again seem to about once per frame / output-update cycle, which the the controller seems to struggle with, hence the worrying-looking random flickering.

nefarius/ViGEmBus#80 describes this problem and support for accessing the feature flags was implemented in 2022 (>= v1.19)

Expected Behavior

Sunshine should only set the LEDs and motors on the DS4 gamepad if the relevant feature flag received from ViGEmBus says they should be set.

Unfortunately a fix for this this would only appear to only be possible for ViGEmBus version >=1.19 (when nefarius/ViGEmBus#80 was addressed.)

So, in order to retain backwards compatibility with older versions, it would seem to require conditional use of the newer vigem_target_ds4_await_output_report_timeout() etc interface (which I gather allows access to the feature flags) vs the older vigem_target_ds4_register_notification() / ds4_notify() (which doesn't) depending on ViGEmBus version.

Additional Context

Excerpts from log (with rumble enabled in Lego Star Wars The Skywalker Saga):

[2026-08-09 16:19:32.809]: Debug: largeMotor: 21 smallMotor: 0 LED: 00 00 00
[2026-08-09 16:19:32.809]: Debug: largeMotor: 0 smallMotor: 0 LED: 00 00 40
[2026-08-09 16:19:32.825]: Debug: largeMotor: 19 smallMotor: 0 LED: 00 00 00
[2026-08-09 16:19:32.825]: Debug: largeMotor: 0 smallMotor: 0 LED: 00 00 40

Note the apparent pattern and timing: For each frame, one instruction presumably intended to ONLY control the rumble motors (that wrongly also turns the LED off), and one instruction to intended to set the LED colour (that wrongly turns the motors off!)

(Full log attached via gist, more info and versions etc available if needed.)

Host Operating System

Windows

Operating System Version

Windows 10 19045.7548

Architecture

amd64/x86_64

Package

Windows - msi installer (recommended)

GPU Type

Intel

GPU Model

RTX 3060 Ti

GPU Driver/Mesa Version

591.74

Capture Method

Desktop Duplication API (Windows)

Apps

Log output

Online logs

https://gist.github.com/geekycow/907accbd0f5d05e886bb9e446d673b79

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions