Open twoxa opened 2 years ago
What kind of Bluetooth controller are you using? Judging from the OUI I'm guessing it's one of those cheap USB dongles (probably with very short internal antenna). Could just be signal quality issue then? What does blueman say about the link quality?
I don't think it's a signal issue because then why would the Joycons work normally (they also use Bluetooth with the same adapter), also tried it with the adapter right next to the controller still disconnects. Tried it on a different computer also running Linux with its internal Bluetooth adapter, still disconnects.
Thank you for your efforts for this feature!
Same question here.
The pro controller with vibration will disconnect after a few minutes of connection, while it works fine on Windows (same machine) and on my NS.
The bluetooth adapter is: Intel AX200
I am using Archlinux with linux 5.16.12-arch1-1. The logs are as follows:
journalctl -u bluetooth
:
Mar 05 17:12:44 chindpc bluetoothd[25826]: Adv Monitor app :1.369 disconnected from D-Bus
Mar 05 17:12:44 chindpc bluetoothd[25826]: Path / reserved for Adv Monitor app :1.370
Mar 05 17:12:44 chindpc bluetoothd[25826]: profiles/input/device.c:ioctl_is_connected() Can't get HIDP connection info
Mar 05 17:12:44 chindpc bluetoothd[25826]: Adv Monitor app :1.370 disconnected from D-Bus
btmon
> HCI Event: Disconnect Complete (0x05) plen 4 #73275 [hci0] 557.690726
Status: Success (0x00)
Handle: 512
Reason: Connection Terminated By Local Host (0x16)
@ MGMT Event: Device Disconnected (0x000c) plen 8 {0x0001} [hci0] 557.690733
BR/EDR Address: xx:xx:xx:xx:xx:xx (Nintendo Co.,Ltd)
Reason: Connection terminated by local host (0x02)
> HCI Event: Number of Completed Pack.. (0x13) plen 5 #73276 [hci0] 557.693726
Num handles: 1
Handle: 256
Count: 1
...
< HCI Command: Disconnect (0x01|0x0006) plen 3 #73569 [hci0] 560.522601
Handle: 512
Reason: Authentication Failure (0x05)
...
> HCI Event: Remote Name Req Complete (0x07) plen 255 #73585 [hci0] 560.681756
Status: Remote User Terminated Connection (0x13)
Address: xx:xx:xx:xx:xx:xx (Nintendo Co.,Ltd)
Name:
> HCI Event: Disconnect Complete (0x05) plen 4 #73586 [hci0] 560.682761
Status: Success (0x00)
Handle: 512
Reason: Connection Terminated By Local Host (0x16)
> HCI Event: Number of Completed Pack.. (0x13) plen 5 #73587 [hci0] 560.683760
Num handles: 1
Handle: 256
Count: 1
If the information provided is not enough, I will gladly continue to provide it.
I have tried my Pro Controllers with 5 different Bluetooth radios and they all presented the same behavior: When used with games that have rumble, they disconnect (specially if more than 1 controller is connected).
I have tried the following Bluetooth radios:
All of them are officially certified Bluetooth products, with the exception of the 1st one.
I tested by playing the N64 Super Smash Bros on RetroArch with 2 Pro Controllers and I consistently get a disconnect usually in less than 5 minutes. Sometimes in just a few seconds.
Using the controllers with rumble through Steam on Windows does not cause a disconnection. That, together with the fact that all 5 radios show the same behavior makes me believe this is not an hardware issue.
@DanielOgorchock @nicman23 I would really like to help you debug this issue. Is there any way for me to help? Any logs I can provide?
I forgot to mention: When using the 2 Pro controllers and a 3rd non-Nintendo controller all connected to the same Bluetooth, only the Pro controllers disconnect after a while, while the 3rd controller, keeps connected and functioning. Furthermore, the 2 Pro Controllers, usually disconnect at the same time or within a few seconds of each other.
This gives weight to the theory that there must be something wrong in the code and not in the hardware. I wish I knew how to debug this, though.
Should I also post this info on https://github.com/nicman23/dkms-hid-nintendo/issues/33 for awareness?
It is getting weirder, now the pro controller connects and if it doesn't disconnect in the first 2 minutes then it'll work until I turn it off manually. It usually takes about 3-5 times before it connects for good (so the way I use it now is: connect wait a minute or two see if it doesn't disconnect in that time its good and i can use it for how ever long I want, if it does disconnect then try again until it stays connected for those 1-2 minutes). It works but i have to keep trying to connect until the connection "sticks", not sure if its related but, I did change some settings in /etc/bluetooth/main.conf:
FastConnectable = true
JustWorksRepairing = always
ReconnectAttempts=3
ReconnectIntervals=1,1,2,3,5,8,13,21,34,55
AutoEnable=true
Forgot to mention I am also using Arch Linux on both the machines I tested it on, so it might be an Arch specific issue.
@twoxa Arch user here too. Interesting finds. I'll see if I arrive at the same pattern as you.
@nfp0 sorry i currently do not have any switch controllers to test with. btw what is your system specs and usb controller
I have tested this on 3 different systems:
On my desktop I have these USB controllers:
I imagine the Intel laptop has other controllers but I can't get those right now.
The USB Bluetooth dongles tested:
The laptop integrated Bluetooth radios:
All Bluetooth certified except the cheap chinese one.
The OS is Manjaro KDE, but I also tested this on Arch. I always get the exact same problem with the same behavior, regardless of system or Bluetooth dongle: a simultaneous disconnection of all HID-Nintendo managed controllers when using rumble after a few seconds or minutes. Non-HID-Nintendo controllers remain working perfectly. That's quite a lot of different hardware this fails on, and this does not happen on Windows when using rumble through Steam.
sorry i currently do not have any switch controllers to test with
@nicman23 I would like to help. I can test with multiple controllers and easily trigger the disconnection after a few seconds. How can I provide you with information to try and fix this? Any kind of logging or debugging?
~I don't know if it's just me, but it seems that games with a strong rumble intensity tend to disconnect more frequently. For example, Rocket League rumbles the controller basically all the time, but it's low intensity. I played it quite a lot of hours, and I only ever got one disconnection. Another game, Wondersong, almost never uses rumble, but when it does, it's of high intensity, and I got quite a lot of disconnections on that game (and only in the parts where there is that rumble). There is one section of the game where rumble is instead done all the time, with the same high intensity, and the controller couldn't stay connected one minute in that section.~
~Does my experience match yours?~
~EDIT: Maybe it's related: https://github.com/DanielOgorchock/joycond/issues/104.~
I submitted a bug on Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=216218.
@SuperSamus Interesting!
RetroArch allows to choose the intensity of the vibration. I'll test it at max and minimum vibration intensity and report back if there is a pattern or not.
I have the same problem. @SuperSamus You're right, I checked with Yuzu - there you can control the intensity of vibration, as well as turn it off. In games where vibration is used often (e.g. Super Mario Oddesey) - the controller is turned off within a few minutes after the start of the game. In games where vibration is used infrequently (such as Legend Of Zelda BOTW), the controller can run for up to several hours without turning it off. If you completely disable vibration in the control settings, the controller does not turn off during the game at all. And similarly, with a wired connection, the controller does not turn off regardless of whether vibration is on or not. It's not a hardware problem - the problem is reproduced on 2 different controllers. And not a problem with bluetooth - I also have an Xbox One controller that does not turn off with vibration on.
@Labaman Yeah, it's certainly not a hardware problem. I've tested with 5 different bluetooth radios with 2 different Pro Controllers. Same problem happens in any of them.
So is there any hope of improving the situation?
Since we can easily reproduce the bug, we could provide debug help to @nicman23, but he's been absent for a while. :disappointed:
Does there appear to be any correlation with the strength of the rumble? Does higher rumble intensity seem to cause disconnects more frequently than light rumble events?
If so, I can try decreasing the driver's maximum amplitude. I wonder if there's a power supply brownout occurring when connected via bluetooth that doesn't occur over USB (since the controllers can draw power from USB instead of battery in the latter case)
@DanielOgorchock I'm afraid not. Well, or the effect is insignificant. I tested on Yuzu + Super Mario Oddesey with vibration intensity 100%, 50%, 40% and 30% - the controller still disconnects. I did not notice any noticeable difference in the frequency of controller disconnects. The most interesting thing is that on Windows with the same controller on the same Bluetooth adapter - a similar problem is not observed.
@Labaman And is the perceived rumble intensity on Yuzu the same between Windows and Linux?
@nfp0 yep. @DanielOgorchock It is highly unlikely that it is related to the USB power supply, with a wired connection: Did the following test: connected an external charger to the Pro Contronller - same result - controller disconnects when vibration is on.
I think it may also have to do with gyro. After turning rumble and haptic feedback off, it still happens. But it seems to correlate with gyro use. I really think it is the bluetooth stack though, and not hid_nintendo, because I can blacklist the module, passing the responsibility to steam, and it still occurs. Every time it does, I get:
Bluetooth: Frame is too long (len 54, expected len 51)
I think it might go deeper than steam input or hid_nintendo
I really think it is the bluetooth stack though, and not hid_nintendo, because I can blacklist the module, passing the responsibility to steam, and it still occurs.
Interesting... If that's the case then it should not be hid_nintendo. I'm gonna try and test the same way you did.
I really think it is the bluetooth stack though, and not hid_nintendo, because I can blacklist the module, passing the responsibility to steam, and it still occurs.
Interesting... If that's the case then it should not be hid_nintendo. I'm gonna try and test the same way you did.
I don't think I blacklisted the module properly. It was still being loaded with the kernel, but after (I think) solving that, rumble off + haptics off in Steam, I'm not having the issue any longer. Gyro seems to be fine. This is a really inconsistent issue though in my experience so I can't be sure about any of this.
Bluetooth: Frame is too long (len 54, expected len 51)
@a-priestley Where are you getting this error message? I've checked the logs from bluetooth.service
but I don't see it anywhere when the controller disconnects.
Bluetooth: Frame is too long (len 54, expected len 51)
@a-priestley Where are you getting this error message? I've checked the logs from
bluetooth.service
but I don't see it anywhere when the controller disconnects.
journalctl prints it out.
journalctl prints it out.
@a-priestley Really? I've been using journalctl -u bluetooth.service -b
after the disconnect happens and I don't see that message anywhere. Am I targeting the correct service?
@nfp0 well I'm not querying userland. The exact command I'm issuing is sudo journalctl -p 3 -xb
You could target Bluetooth if you wanted but that set of arguments should be specific enough for it to show up unobscured
@a-priestley Even with that command, I don't get the error. You did not get that error while using it through Steam, did you? I've raised -p to 4 and I get these warnings instead:
kernel: nintendo 0005:057E:2009.0027: timeout waiting for input report
tlp[38355]: Warning: systemd-rfkill.service is not masked, radio device switching may not work as configured.
tlp[38355]: >>> Invoke 'systemctl mask systemd-rfkill.service' to correct this.
tlp[38355]: Warning: systemd-rfkill.socket is not masked, radio device switching may not work as configured.
tlp[38355]: >>> Invoke 'systemctl mask systemd-rfkill.socket' to correct this.
kernel: ata1.00: supports DRM functions and may not be fully accessible
kernel: ata1.00: supports DRM functions and may not be fully accessible
org_kde_powerdevil[11683]: QObject::disconnect: Unexpected nullptr parameter
org_kde_powerdevil[11683]: QObject::disconnect: Unexpected nullptr parameter
These are just warnings though. I wonder why I'm not getting the same error as you.
Furthermore: I re-tested this and it seems to happen even more frequently now (I can always reproduce it in under 60 seconds of use), but now the controllers don't disconnect at the same time, as they did previously. They seem to disconnect at random times, as long as rumble is enabled.
The controllers never disconnect if I completely disable rumble, which leads me to believe this is exclusively triggered by rumble and not related to gyro. But I noticed that if I have rumble enabled, but at 0% strength on RetroArch, they still disconnect, even though they don't physically vibrate. Perhaps because the rumble signals are still being sent?
@nfp0 I'm not sure where the discrepency is. I am using a usb bluetooth adapter that's connected to a hub, so that might be it. I'll see if I can test out a direct I/O connection when I get home.
I am using a usb bluetooth adapter that's connected to a hub
@a-priestley Same here. I don't believe connecting it directly will make a difference, as I believe most Bluetooth radios connect through internal USB hubs. I might be wrong though.
For example (from a quick skim), the rumble queue from BetterJoy is size 15 (as opposed to hid-nintendo's 8).
@SuperSamus Not really knowing what I'm doing, I've changed the JC_RUMBLE_QUEUE_SIZE
to 15 and to 4 to try and get some different behavior, but the issue still occurs more or less with the same frequency.
Should we play with some of these other rumble values, or is it pointless?
#define JC_RUMBLE_DATA_SIZE 8
#define JC_RUMBLE_QUEUE_SIZE 8
static const u16 JC_RUMBLE_DFLT_LOW_FREQ = 160;
static const u16 JC_RUMBLE_DFLT_HIGH_FREQ = 320;
static const u16 JC_RUMBLE_PERIOD_MS = 50;
static const unsigned short JC_RUMBLE_ZERO_AMP_PKT_CNT = 5;
Sorry for the lack of responsiveness. I also feel that we need to deep dive a bit into the bluetooth stack. I've tried a lot of mitigations on the driver level, and by reducing the number of rumble control packets sent to the controller, it reduces the rate of these disconnects. However, it doesn't completely eliminate the issue as many of you have noticed.
Another thing we can try is modifying the JC_RUMBLE_DFLT_LOW_FREQ and JC_RUMBLE_DFLT_HIGH_FREQ values to see if that makes any difference (I doubt it will).
The fact that the driver works fine via USB makes me suspicious of the bluetooth stack. Maybe we can test with Android's bluetooth stack to see if it exhibits the same problem.
@DanielOgorchock Glad to see you back! :slightly_smiling_face: Let's see if we can tackle this problem once and for all.
I was just now testing this issue with Steam by blacklisting hid_nintendo
and the controller never disconnects.
I've setup Super Smash Bros 64 on RetroArch through Steam and let the game run for 45 minutes while the computer players hammered on my character (producing lots of constant rumble) and the controller never disconnected once. I can run the test longer if you wish.
If I use hid_nintendo
on this same scenario (not on Steam), it usually disconnects in less than a minute.
Maybe we could take and test some values from other drivers like BetterJoy or DS4Windows (Joy, Pro)? For example (from a quick skim), the rumble queue from BetterJoy is size 15 (as opposed to hid-nintendo's 8).
I think this idea from @SuperSamus might get us somewhere. It doesn't hurt to try their values. It would also be nice if we could check what values Steam is using, but that might be harder.
@nfp0 Are you able to quickly walk me through the process you use for blacklisting the module? I'm on arch and I followed the steps on the wiki. I can also lsmod showing that hid_nintendo is not there. But I still get disconnects in Steam with rumble/haptics.
@a-priestley I also followed the instructions on Archwiki.
Basically I just added a no_hid_nintendo.conf
file with a blacklist hid_nintendo
line to /etc/modprobe.d/
and rebooted.
To verify that the module is really not loading, you just need to check that the controller LEDs continue to flash left and right indefinitely. You can also verify that the controller will not have any rumble support at all inside a game.
After verifying that, open Steam and the controller should be detected and the LEDs will stop flashing left and right. Now the controller should rumble in games.
If this is not happening, make sure you have Switch Configuration Support
enabled on Settings->Controller Settings
.
Please note that on that same menu, Steam has a Controller shutdown time
setting to save battery on idle controllers. Make sure you set it to Never
for the purpose of testing this issue.
I also thought the controller was disconnecting on Steam, but that's because I left the controller sitting idle vibrating while I go do some other thing, but in the end it was just reaching that idle shutdown timer. Now it never disconnects.
EDIT: Also please make sure your controller has plenty of charge, so that a disconnection by low battery charge is not mixed up with this issue.
@nfp0 okay thanks for this. Yeah I did the exact same thing. I can't remember exactly what the result was but I'll have to revisit this soon. Do you use grub?
Do you use grub?
@a-priestley I do, yes. Why?
Do you use grub?
@a-priestley I do, yes. Why?
The reason I ask is because the kernel module blacklisting is likely different for each bootloader. But I've only ever used grub
I did not blacklist it on the bootloader's kernel parameters though. Adding the blacklist to the /etc/modprobe.d/
folder and a reboot was enough.
Since the LED kept flashing left and right it was easy to confirm the blacklist worked.
EDIT: lsmod
also stopped showing hid_nintendo
.
> ACL Data RX: Handle 6 flags 0x02 dlen 54 #14897 [hci0] 106.898081
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 e7 80 00 00 00 3f 18 79 c6 c7 74 0b 09 fb .0.....?.y..t...
e5 05 69 0e 78 ff 74 02 fc fe 15 fb ea 05 99 0e ..i.x.t.........
d2 ff 94 02 1b ff 03 fb 1d 06 cd 0d d5 ff ab 02 ................
35 ff 5.
> ACL Data RX: Handle 6 flags 0x02 dlen 54 #14898 [hci0] 106.928099
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 e9 80 00 00 00 40 f8 78 c4 c7 74 09 24 fc .0.....@.x..t.$.
50 06 1c 0e cc ff 55 02 3d ff e1 fb 4c 06 26 0e P.....U.=...L.&.
fb ff 49 02 34 ff 66 fb 04 06 70 0e e8 ff 57 02 ..I.4.f...p...W.
16 ff ..
< ACL Data TX: Handle 6 flags 0x00 dlen 15 #14899 [hci0] 106.928117
Channel: 65 len 11 [PSM 0 mode Basic (0x00)] {chan 65535}
a2 10 06 00 89 40 62 00 89 40 62 .....@b..@b
> ACL Data RX: Handle 6 flags 0x02 dlen 54 #14900 [hci0] 106.930598
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 eb 80 00 00 00 3d 08 79 c4 b7 74 09 21 fc .0.....=.y..t.!.
3d 06 78 0d 1c 00 18 02 d0 ff 29 fc 40 06 af 0d =.x.......).@...
ad ff 25 02 99 ff 19 fc 5b 06 e1 0d dc ff 47 02 ..%.....[.....G.
6a ff j.
> ACL Data RX: Handle 6 flags 0x02 dlen 54 #14901 [hci0] 106.931956
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 ed 80 00 00 00 41 28 79 c3 b7 74 09 11 fc .0.....A(y..t...
21 06 38 0d f4 ff 88 01 15 00 1c fc 15 06 23 0d !.8...........#.
87 ff c0 01 e5 ff 2b fc 20 06 65 0d 7d ff ee 01 ......+. .e.}...
c6 ff ..
> HCI Event: Number of Completed Packets (0x13) plen 5 #14902 [hci0] 106.933263
Num handles: 1
Handle: 6
Count: 1
> ACL Data RX: Handle 6 flags 0x02 dlen 54 #14903 [hci0] 106.940572
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f0 80 00 00 00 3f 18 79 c2 c7 74 0c c4 fb .0.....?.y..t...
34 06 e9 0c 61 ff cc 00 21 00 df fb 2a 06 fe 0c 4...a...!...*...
9e ff 0e 01 26 00 05 fc 11 06 12 0d 9f ff 67 01 ....&.........g.
0e 00 ..
> HCI Event: Disconnect Complete (0x05) plen 4 #14904 [hci0] 107.108265
Status: Success (0x00)
Handle: 6
Reason: LMP Response Timeout / LL Response Timeout (0x22)
@ MGMT Event: Device Disconnected (0x000c) plen 8 {0x0001} [hci0] 107.108271
BR/EDR Address: 98:B6:E9:B1:88:81 (Nintendo Co.,Ltd)
Reason: Unspecified (0x00)
< HCI Command: Write Scan Enable (0x03|0x001a) plen 1 #14905 [hci0] 107.376059
Scan enable: Page Scan (0x02)
Here's my btmon output when the controller disconnects during a rumble event.
The disconnect I'm seeing appears to be due to a link layer response timeout. I'll see if this is consistently the logged reason or if it differs each time.
edit: It does appear to be consistent.
< ACL Data TX: Handle 9 flags 0x00 dlen 15 #68455 [hci0] 495.786799
Channel: 65 len 11 [PSM 0 mode Basic (0x00)] {chan 65535}
a2 10 09 00 6f c0 5b 00 05 40 41 ....o.[..@A
> HCI Event: Number of Completed Packets (0x13) plen 5 #68456 [hci0] 495.790912
Num handles: 1
Handle: 9
Count: 1
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #68457 [hci0] 495.791737
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 ab 80 08 00 00 de 7d 99 c7 47 72 0b 69 02 .0......}..Gr.i.
90 fe bd 10 e0 ff 21 00 cd ff 7f 02 90 fe 3a 10 ......!.......:.
1a 00 45 00 d3 ff 76 02 b3 fe 4f 10 2c 00 29 00 ..E...v...O.,.).
c5 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #68458 [hci0] 495.794230
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 ad 80 08 00 00 de 7d 99 c7 57 72 0b 75 02 .0......}..Wr.u.
79 fe 01 10 91 ff 11 00 e0 ff 81 02 85 fe 17 10 y...............
d1 ff 57 00 e8 ff 83 02 7e fe 1e 10 e8 ff 46 00 ..W.....~.....F.
da ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #68459 [hci0] 495.824244
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 af 80 08 00 00 d7 7d 98 c6 57 72 0c a5 02 .0......}..Wr...
94 fe 71 0f c5 ff 8d 00 14 00 8a 02 7a fe 36 10 ..q.........z.6.
a9 ff 63 00 02 00 8c 02 77 fe 1b 10 bb ff 5f 00 ..c.....w....._.
f7 ff ..
< ACL Data TX: Handle 9 flags 0x00 dlen 15 #68460 [hci0] 495.824273
Channel: 65 len 11 [PSM 0 mode Basic (0x00)] {chan 65535}
a2 10 0a 00 ab c0 6a 00 03 c0 40 ......j...@
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #68461 [hci0] 495.826762
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 b1 80 08 00 00 dc 3d 98 c6 57 72 0c 80 02 .0......=..Wr...
6d fe 69 0f c4 ff c8 00 2d 00 77 02 6f fe e2 0f m.i.....-.w.o...
81 ff 60 00 13 00 88 02 6b fe 3c 10 a2 ff 77 00 ..`.....k.<...w.
0f 00 ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #68462 [hci0] 495.828104
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 b4 80 08 00 00 d5 5d 98 c8 67 72 0c 50 02 .0......]..gr.P.
80 fe 11 10 c1 ff 7c 00 41 00 49 02 88 fe a4 0f ......|.A.I.....
ab ff 71 00 38 00 55 02 76 fe b1 0f 97 ff 76 00 ..q.8.U.v.....v.
26 00 &.
> HCI Event: Number of Completed Packets (0x13) plen 5 #68463 [hci0] 495.828912
Num handles: 1
Handle: 9
Count: 1
> HCI Event: Disconnect Complete (0x05) plen 4 #68464 [hci0] 495.990916
Status: Success (0x00)
Handle: 9
Reason: LMP Response Timeout / LL Response Timeout (0x22)
@ MGMT Event: Device Disconnected (0x000c) plen 8 {0x0001} [hci0] 495.990928
BR/EDR Address: 98:B6:E9:B1:88:81 (Nintendo Co.,Ltd)
Reason: Unspecified (0x00)
When looking at the timestamp deltas between the RX packets leading up to these disconnections, it seems that they're inconsistent with the expectations.
Here's some logs from shortly before a disconnection:
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67866 [hci0] 490.965464
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 de 80 08 00 00 34 84 b5 c7 37 72 0b b0 02 .0.....4...7r...
fd fe 2d 10 f1 ff 75 ff e0 ff 9d 02 fd fe 2f 10 ..-...u......./.
f4 ff 74 ff e2 ff 8d 02 0a ff 34 10 f8 ff 6f ff ..t.......4...o.
e5 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67867 [hci0] 490.966754
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 e0 80 08 00 00 39 c5 b1 c7 57 72 0b d4 02 .0.....9...Wr...
f4 fe 19 10 dc ff 80 ff d9 ff ce 02 f0 fe 1f 10 ................
e0 ff 79 ff d9 ff c0 02 f6 fe 29 10 ea ff 75 ff ..y.......)...u.
dd ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67868 [hci0] 490.995491
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 e2 80 08 00 00 8d 46 b1 c6 47 72 0b e5 02 .0......F..Gr...
f9 fe fc 0f cc ff a0 ff d4 ff e4 02 fb fe 02 10 ................
cd ff 97 ff d4 ff dc 02 f5 fe 0f 10 d4 ff 87 ff ................
d6 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67869 [hci0] 490.997980
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 e4 80 08 00 00 5a 57 ad c6 37 72 0b dc 02 .0.....ZW..7r...
e8 fe d4 0f c1 ff cd ff e0 ff df 02 e8 fe df 0f ................
c3 ff c0 ff db ff e8 02 f0 fe ee 0f c6 ff ae ff ................
d6 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67870 [hci0] 491.000473
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 e7 80 08 00 00 26 b8 a9 c5 57 72 0b ec 02 .0.....&...Wr...
d8 fe ac 0f b9 ff 08 00 e4 ff e6 02 e2 fe b4 0f ................
b9 ff f3 ff e2 ff db 02 e8 fe c8 0f bd ff d8 ff ................
df ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67871 [hci0] 491.027984
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 e9 80 08 00 00 1b b9 a9 c6 57 72 0b fc 02 .0.........Wr...
dd fe 99 0f b4 ff 50 00 dd ff f7 02 d8 fe 9a 0f ......P.........
b4 ff 3d 00 df ff f0 02 d5 fe a3 0f b7 ff 1a 00 ..=.............
e1 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67872 [hci0] 491.032972
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 eb 80 08 00 00 af f9 a8 c6 57 72 0b e4 02 .0.........Wr...
e4 fe 98 0f bc ff 8d 00 d4 ff ee 02 e8 fe 96 0f ................
b8 ff 81 00 d5 ff f9 02 e4 fe 98 0f b5 ff 66 00 ..............f.
d9 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67873 [hci0] 491.034231
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 ed 80 08 00 00 29 fa a7 c4 47 72 0b c4 02 .0.....)...Gr...
e4 fe ad 0f c5 ff a9 00 c9 ff c8 02 e0 fe a5 0f ................
c1 ff a6 00 cb ff d4 02 e0 fe 9b 0f bd ff 99 00 ................
d0 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67874 [hci0] 491.063000
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f0 80 08 00 00 49 cb a1 c6 47 72 0b b8 02 .0.....I...Gr...
d0 fe d5 0f c0 ff 98 00 c5 ff b9 02 d7 fe cb 0f ................
c2 ff 9e 00 c3 ff b9 02 e0 fe ba 0f c4 ff a7 00 ................
c6 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67875 [hci0] 491.065488
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f2 80 08 00 00 8c 3c a1 c7 17 72 0b 90 02 .0......<...r...
88 fe f8 0f a4 ff 64 00 cc ff 9c 02 9c fe e7 0f ......d.........
ae ff 76 00 c7 ff b1 02 c2 fe d9 0f b8 ff 8d 00 ..v.............
c5 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67876 [hci0] 491.067973
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f4 80 08 00 00 ae dd 9e c6 47 72 0b bd 02 .0.........Gr...
dc fd f5 0f 98 ff 4d 00 c9 ff 98 02 29 fe f1 0f ......M.....)...
97 ff 3e 00 d5 ff 89 02 81 fe 06 10 9e ff 52 00 ..>...........R.
d0 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67877 [hci0] 491.095491
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f6 80 88 00 00 c4 ad 9d c5 67 72 0b 44 02 .0.........gr.D.
35 fe dd 10 a5 ff 14 00 f1 ff 27 03 fe fd c2 10 5.........'.....
a9 ff 3f 00 e0 ff e3 02 ce fd 3f 10 9d ff 54 00 ..?.......?...T.
c3 ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67878 [hci0] 491.100481
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f9 80 88 00 00 c0 4d 9d c7 47 72 0b 85 01 .0......M..Gr...
20 fe 6d 10 e0 ff f1 00 d1 ff d9 01 0c fe 16 10 .m.............
e6 ff d2 00 d2 ff 24 02 4e fe 3f 10 be ff 5f 00 ......$.N.?..._.
ce ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67879 [hci0] 491.101740
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 fb 80 88 00 00 d4 3d 9a c4 47 72 0b c8 01 .0......=..Gr...
59 fe cd 10 91 ff 51 01 ec ff 90 01 4b fe b9 10 Y.....Q.....K...
a0 ff 2a 01 de ff 6c 01 32 fe 9d 10 c1 ff fe 00 ..*...l.2.......
cf ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67880 [hci0] 491.130517
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 fd 80 88 00 00 de fd 97 c6 47 72 0b 14 02 .0.........Gr...
94 fe e9 10 39 ff 50 01 29 00 01 02 89 fe f4 10 ....9.P.).......
50 ff 5e 01 1b 00 e2 01 6b fe e1 10 7f ff 62 01 P.^.....k.....b.
fd ff ..
> ACL Data RX: Handle 9 flags 0x02 dlen 54 #67881 [hci0] 491.132986
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 ff 80 88 00 00 d9 0d 94 c5 47 72 0b 5c 02 .0.........Gr.\.
c9 fe 95 10 19 ff 05 01 71 00 45 02 b9 fe a2 10 ........q.E.....
1b ff 1a 01 5c 00 29 02 9d fe c7 10 29 ff 3d 01 ....\.).....).=.
3b 00 ;.
The input reports are expected to arrive every 15ms from the pro controller. In the logs above, the deltas are sporadic (e.g. 28ms, 2ms, etc.). I'm not sure if this is a scheduling issue on the controller's fw or if its something being introduced at the BLE layer.
Compare to when the controller is operating nominally:
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #471 [hci0] 7.888166
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 ef 80 00 00 00 1d 28 7d c7 47 73 09 1e ff .0......(}.Gs...
d7 fd 37 10 ef ff 0d 00 09 00 1b ff d9 fd 39 10 ..7...........9.
ef ff 0c 00 0a 00 1b ff dd fd 39 10 ee ff 0b 00 ..........9.....
0b 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #472 [hci0] 7.903165
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f2 80 00 00 00 1c 18 7d c5 67 73 09 1d ff .0.......}.gs...
cd fd 36 10 ed ff 0e 00 09 00 1e ff d0 fd 38 10 ..6...........8.
ec ff 0d 00 09 00 1c ff d3 fd 36 10 ed ff 0e 00 ..........6.....
09 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #473 [hci0] 7.919401
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f5 80 00 00 00 1d 28 7d c5 67 73 09 1d ff .0......(}.gs...
c6 fd 3a 10 eb ff 0e 00 09 00 19 ff c6 fd 39 10 ..:...........9.
ea ff 0e 00 0a 00 1d ff c9 fd 38 10 eb ff 0f 00 ..........8.....
0a 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #474 [hci0] 7.933173
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 f8 80 00 00 00 1c 18 7d c5 57 73 09 1a ff .0.......}.Ws...
c1 fd 37 10 ed ff 10 00 0c 00 1d ff c3 fd 39 10 ..7...........9.
ed ff 0f 00 0c 00 1e ff c6 fd 39 10 ea ff 0e 00 ..........9.....
0a 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #475 [hci0] 7.948164
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 fb 80 00 00 00 1c 18 7d c3 57 73 09 13 ff .0.......}.Ws...
bb fd 3a 10 f2 ff 0b 00 0d 00 16 ff b7 fd 38 10 ..:...........8.
f0 ff 0f 00 0d 00 16 ff be fd 39 10 ee ff 10 00 ..........9.....
0b 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #476 [hci0] 7.963175
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 fe 80 00 00 00 1c 18 7d c7 47 73 09 17 ff .0.......}.Gs...
cf fd 3b 10 f4 ff 0d 00 0c 00 17 ff c9 fd 3d 10 ..;...........=.
f5 ff 0d 00 0b 00 14 ff c2 fd 3d 10 f4 ff 0c 00 ..........=.....
0b 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #477 [hci0] 7.978173
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 01 80 00 00 00 1c 28 7d c5 37 73 09 17 ff .0......(}.7s...
d2 fd 35 10 f0 ff 0a 00 0d 00 19 ff d4 fd 36 10 ..5...........6.
f1 ff 0c 00 0c 00 19 ff d1 fd 3a 10 f3 ff 0d 00 ..........:.....
0d 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #478 [hci0] 7.993166
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 04 80 00 00 00 1b 18 7d c4 67 73 09 1a ff .0.......}.gs...
d6 fd 36 10 f0 ff 0a 00 0d 00 17 ff d2 fd 35 10 ..6...........5.
f0 ff 0b 00 0c 00 18 ff d0 fd 35 10 f0 ff 0a 00 ..........5.....
0d 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #479 [hci0] 8.008165
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 07 80 00 00 00 1c 18 7d c3 47 73 09 15 ff .0.......}.Gs...
d7 fd 3c 10 f3 ff 0d 00 0f 00 18 ff d8 fd 39 10 ..<...........9.
f2 ff 0e 00 0e 00 1a ff d6 fd 36 10 f1 ff 0c 00 ..........6.....
0c 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #480 [hci0] 8.023166
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 0a 80 00 00 00 1d 28 7d c4 57 73 09 14 ff .0......(}.Ws...
d5 fd 3d 10 f8 ff 10 00 0f 00 14 ff d6 fd 3c 10 ..=...........<.
f7 ff 0f 00 0f 00 14 ff d7 fd 3c 10 f4 ff 0e 00 ..........<.....
0e 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #481 [hci0] 8.038173
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 0d 80 00 00 00 1c 28 7d c7 47 73 09 13 ff .0......(}.Gs...
d1 fd 40 10 f9 ff 0b 00 0e 00 12 ff d2 fd 40 10 ..@...........@.
fa ff 0d 00 0e 00 15 ff d6 fd 3e 10 f9 ff 0f 00 ..........>.....
0e 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #482 [hci0] 8.053174
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 10 80 00 00 00 1b 08 7d c5 57 73 09 17 ff .0.......}.Ws...
d5 fd 3b 10 f6 ff 09 00 0e 00 15 ff d5 fd 3c 10 ..;...........<.
f8 ff 09 00 0e 00 14 ff d3 fd 3f 10 f9 ff 0a 00 ..........?.....
0d 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #483 [hci0] 8.068165
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 13 80 00 00 00 1d 28 7d c6 57 73 09 20 ff .0......(}.Ws. .
dd fd 3b 10 f4 ff 09 00 0d 00 1f ff da fd 39 10 ..;...........9.
f4 ff 0a 00 0f 00 1b ff d9 fd 3a 10 f4 ff 09 00 ..........:.....
0f 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #484 [hci0] 8.083166
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 16 80 00 00 00 1c 18 7d c5 57 73 09 24 ff .0.......}.Ws.$.
e2 fd 3a 10 f1 ff 0f 00 0f 00 24 ff e1 fd 3a 10 ..:.......$...:.
f2 ff 0c 00 0f 00 23 ff df fd 3b 10 f2 ff 0b 00 ......#...;.....
0e 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #485 [hci0] 8.098173
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 19 80 00 00 00 1c 28 7d c5 47 73 09 1f ff .0......(}.Gs...
df fd 3d 10 f5 ff 0d 00 11 00 1f ff e0 fd 3a 10 ..=...........:.
f4 ff 0e 00 0f 00 20 ff e3 fd 38 10 f2 ff 0f 00 ...... ...8.....
10 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #486 [hci0] 8.113174
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 1c 80 00 00 00 1d 38 7d c7 57 73 09 1a ff .0......8}.Ws...
e5 fd 41 10 f8 ff 0c 00 12 00 19 ff e1 fd 42 10 ..A...........B.
f8 ff 0d 00 10 00 1c ff e1 fd 40 10 f7 ff 0d 00 ..........@.....
11 00 ..
> ACL Data RX: Handle 10 flags 0x02 dlen 54 #487 [hci0] 8.128173
Channel: 65 len 50 [PSM 0 mode Basic (0x00)] {chan 65535}
a1 30 1f 80 00 00 00 1e 28 7d c6 67 73 09 1d ff .0......(}.gs...
e3 fd 40 10 f8 ff 0c 00 11 00 1f ff e1 fd 40 10 ..@...........@.
f7 ff 0c 00 10 00 1b ff e4 fd 41 10 f9 ff 0b 00 ..........A.....
11 00
The RX timestamps above are far closer to 15ms apart.
@DanielOgorchock I believe you forgot to post the timestamps in your last log, or am I looking at the wrong place?
@DanielOgorchock I believe you forgot to post the timestamps in your last log, or am I looking at the wrong place?
It seems to have been pasted funny. They're there, but you have to scroll far to the right.
very good and I hope you have solved your problem but a question out of curiosity, I see that you mention that you have the TP-Link UB500 Adapter and that adapter is a Bluetooth V5.0 the problem that I have and well it already seems to be known is that it seems that the Joycons and the Pro Controller do not work with Bluetooth V5.0 adapters, for example they connect me the first time, but if I turn off the Joycons/Pro Controller or the pc they no longer pair again and the only way is to desynchronize and synchronize and so on yes I turn off the PC, I have to repeat the same procedure, it does not happen to me with Bluetooth V4.0 adapters but I want to use V5.0 since there is no Input Lag in the joycon and I feel the connection is much more stable but with the detail that it is not They pair again unless I repeat the procedure, I would like to know in your case, when the control was disconnected with the TP-Link UB50, did you synchronize immediately with a single button or did you have to repeat the synchronization procedure?
@DanielOgorchock Indeed, I've checked your values and there's a clear discrepancy between the deltas on the two situations.
During normal operation:
Timestamp | ms since last timestamp |
---|---|
7.888166 | |
7.903165 | 14.9990000000004 |
7.919401 | 16.2359999999993 |
7.933173 | 13.7720000000003 |
7.948164 | 14.9910000000002 |
7.963175 | 15.0109999999994 |
7.978173 | 14.9980000000003 |
7.993166 | 14.9930000000005 |
8.008165 | 14.9989999999995 |
8.023166 | 15.0009999999998 |
8.038173 | 15.0070000000007 |
8.053174 | 15.0009999999998 |
8.068165 | 14.9910000000002 |
8.083166 | 15.0009999999998 |
8.098173 | 15.0069999999989 |
8.113174 | 15.0010000000016 |
8.128173 | 14.9989999999995 |
Shortly before disconnection: Timestamp | ms since last timestamp |
---|---|
490.965464 | |
490.966754 | 1.28999999998314 |
490.995491 | 28.7370000000351 |
490.99798 | 2.48899999996866 |
491.000473 | 2.4930000000154 |
491.027984 | 27.5110000000041 |
491.032972 | 4.98799999996891 |
491.034231 | 1.25900000000456 |
491.063 | 28.7690000000111 |
491.065488 | 2.48800000002802 |
491.067973 | 2.48499999997875 |
491.095491 | 27.5179999999864 |
491.100481 | 4.9900000000207 |
491.10174 | 1.25900000000456 |
491.130517 | 28.776999999991 |
491.132986 | 2.46900000001915 |
These seem extremely irregular. So, what does this tells us? Do we have a path forward, or is this external to hid_nintendo?
@Soul-Miku I also have the TP-Link UB500 Adapter and I remember having the same issue as you, but not consistently. Sometimes it connects afterwards, and other times it doesn't. I have not found a pattern and I'm not sure if it's specific to Nintendo controllers or if other devices are also affected. Regardless, that's a completely separate issue from this one.
@DanielOgorchock Indeed, I've checked your values and there's a clear discrepancy between the deltas on the two situations.
These seem extremely irregular. So, what does this tells us? Do we have a path forward, or is this external to hid_nintendo?
I have been experimenting with approaches to detecting these sporadic timestamp states in the driver. I tried disabling rumble packets during those times with mixed success.
I will continue experimenting to see if there's a good recovery mechanism (maybe toggling rumble support on and off or something like that)
It's still not clear to me why steam's user space driver doesn't run into this issue.
It's still not clear to me why steam's user space driver doesn't run into this issue.
@DanielOgorchock Is it possible to capture and observe how packets with rumble info are sent to the Pro Controller from Steam and check for differences?
@nfp0 yes, I know, just out of curiosity, I just wanted to see if someone solved it, the problem is not the adapters and it seems to be more a problem with the nintendo controllers than with the bluetooth 5.0 adapters since I can pair my 2 ps4 controllers that are controls from 9 years ago and my headphones without any problem, I have seen that the problem has been out for almost 2 years since bluetooth 5.0 came out and it is already a thing of nintendo that they do not want to update the firmware of their Joycons and Pro controller because if they want they do it seems that They just don't like it and you have to wait, because most likely if Nintendo releases a new console in the future, that console should come with Bluetooth 5.0 or higher and also, most likely, both Joycon and Pro controllers will be compatible with the new console. that comes out and the person is not going to be very happy that those controls do not work, so in the future Nintendo will have to release an update for their controllers and so that they can support Bluetooth 5.0
since I have tried to find a solution in almost all the forums and looking for an answer in searches of up to 2 years but it seems that there is still no way for it to work with bluetooth 5.0, the only "Solution" to solve your problems if that is what it can be called is to use bluetooth 4.0 adapters believe me if so not because my Joycons work perfectly and no input lag with bluetooth 5.0 I would still use bluetooth 4.0 but as always nintendo making "quality" products xD
When using the Pro Controller in Bluetooth mode it will randomly disconnect after some time, it might last a few minutes or a few hours (usually its a couple of minutes), it seems random. When using combined Joycons there is no issue, they work perfectly every time. When using the Pro Controller in wired mode it works normally. Tried pairing without joycond, with different Bluetooth adapters, nothing works. Logs when the controller connects:
Logs when the controller disconnects: