ValveSoftware / SteamOS

SteamOS community tracker
1.52k stars 69 forks source link

OLED Bluetooth logic - Steam Deck constantly tries to reconnect to any paired bluetooth device in range #1334

Open Maz111111 opened 6 months ago

Maz111111 commented 6 months ago

Your system information

Steam client version:1702079146 SteamOS version: 3.5.7 Opted into Steam client beta?: [No] Opted into SteamOS beta?: [No] Have you checked for updates in Settings > System?: [Yes]

Please describe your issue in as much detail as possible:

I've connected my xBox controller to the OLED.

Then I put the deck to sleep mode (push the power button one time short). The controller starts to search for the host (this is normal and expected - XBox button is flashing) and the Steam Deck turns on again.

When I turn off the deck and press no button on the controller, the deck should stay in sleep mode.

The problem can only be solved, by turnig off bluetooth in the deck or turning off the the XBox Controller by long pressing the XBox button.

Steps for reproducing this issue:

  1. Connect a XBox Controller
  2. Put the deck to sleep mode
  3. The deck will constantly try to reconnect to the controller and wake up itself without that any button on the controller is pushed
kisak-valve commented 6 months ago

Hello @Maz111111, this is a side effect of the wake-on-bluetooth functionality acting as intended on the OLED Steam Deck.

Looks like there's a workaround described at https://www.reddit.com/r/SteamDeck/comments/188jgd7/howto_selectively_disable_wakeonbluetooth_for/.

Maz111111 commented 6 months ago

Thank you so much!

But that's only a workaround since the script would turn my controller into a device, that won't wake up the Steam Deck anymore. But the expected behavior - imo - should be, that the controller only wakes up the deck, when a button on the controller is pressed.

At least that is the way my shield controller works with my shield. With one of the last updates nvidia even managed to set it up in a way, that one can choose a certain button on the controller which has to be pressed for waking up the shield.

But the script will work for my bluetooth headphones, because I never want them to wake up the deck

Thank you again!

RodoMa92 commented 6 months ago

I might be wrong here, but the problem on the controller waking the deck up each time is caused by the fact that on power off, instead of the driver asking the controller to power off like on xbox it will be ignored/not sent to the controller, and therefore it will seek the device again on signal lost, forcing a wake up cycle.

There are better drivers that handles cases like that IIRC, but they causes other issues on different devices that works on the main driver in the kernel, so there is no single solution to support all of them.

robotzurg commented 6 months ago

Hello @Maz111111, this is a side effect of the wake-on-bluetooth functionality acting as intended on the OLED Steam Deck.

Looks like there's a workaround described at https://www.reddit.com/r/SteamDeck/comments/188jgd7/howto_selectively_disable_wakeonbluetooth_for/.

Can confirm I have this issue with the apple magic keyboard connected, but this workaround helped fix it, albeit making it unable to wake the deck (which I don't want a bluetooth keyboard to do anyways)

Maz111111 commented 6 months ago

I think the solution should be, to build in an option, with which one could choose, if the bluetooth device should stay connected after putting the steam deck into sleep mode, for every single bluetooth device.

Shy commented 6 months ago

An option would be great.

I use my sony wf xm5 which supports multipoint with my limited edition deck. Wherever I turn them on they turn the deck on, including when it's stored in the case. If I don't disable Bluetooth I'll find a very hot deck inside my case.

kschat commented 5 months ago

A native option to select what wakes the Steam Deck would be great. I was trying to use my Pixel Buds Pro with my laptop and the Steam Deck kept "stealing" the connection and it took a while to realize what was going on. For now, the script shared above works really well.