toy / blueutil

CLI for bluetooth on OSX: power, discoverable state, list, inquire devices, connect, info, …
https://github.com/toy/blueutil
Other
969 stars 52 forks source link

Fix device inquiry not finishing in Monterey and later #66

Closed RaphaelKn closed 2 months ago

RaphaelKn commented 2 years ago

Hi @toy Do you have some time to take a look ? Thanks!

toy commented 2 years ago

Sorry for not replying earlier. I tried the code, but something was misbehaving in bluetooth framework (inquiry didn't work at all, with and without changes, and through pref pane), so I left it till weekend to hopefully investigate.

RaphaelKn commented 2 years ago

Sure thing.. Thanks!

toy commented 2 years ago

I was able to reproduce the problem and only on Monterey. Can you please add description to this issue and a changelog entry?

Please tell what was the issue with [inquirer setInquiryLength:args->duration]? If it is removed, as it defaults to 10 seconds, when the problem with too long inquiry doesn't happen (previous versions, fixed in Monterey or afterwards, it also seems it doesn't happen always), the behaviour will be odd.

RaphaelKn commented 2 years ago

So i don't have a good answer for why the [inquirer setInquiryLength:args->duration] isn't working - it seems likely to be an apple bug.

The default is set anyway to be 10 inside your code in any case by - https://github.com/RaphaelKn/blueutil/blob/90ba4dd77771acbf0d993670c45f7271a601a540/blueutil.m#L821, no ?

toy commented 2 years ago

So i don't have a good answer for why the [inquirer setInquiryLength:args->duration] isn't working - it seems likely to be an apple bug.

I meant why did you comment it out, so is something not working with all other changes if you don't comment it out?

RaphaelKn commented 2 years ago

I assume that internally setting the inquiry timeout may be doing also something like [inquirer stop] so to my understanding it's better not to have both mechanisms working as i can't tell how it will behave. Once we figure out that [inquirer setInquiryLength:args->duration] is working again (assuming it's an apple bug, or something in this code), then we can just revet this PR.

mtalexander commented 2 years ago

I tried these changes on Monterey 12.3 and even with them blueutil doesn't work. For example the "connect" and "disconnect" commands seem to silently fail. It also seems to be unable to look up a bluetooth device by name.

For example

mta@bayswater ~>blueutil --info 70-bf-92-09-10-b4
address: 70-bf-92-09-10-b4, connected (master, 0 dBm), not favourite, paired, name: "Jabra Talk 45", recent access date: 2022-04-23 03:13:42 +0000
mta@bayswater ~>blueutil --info "Jabra Talk 45"
Device not found by name: Jabra Talk 45

This is using blueutil built from commit 90ba4dd which is the tip of the fix-inquiry branch.

RaphaelKn commented 2 years ago

@mtalexander I didn't try the other commands as i don't use blueutil, i was just asked by some friend to check on the inquiry which didn't work for him, and that's what i aim to fix here. Please let me know if the inquiry doesn't work you with this fix (it works for me and for my friend and seems to work for @toy as well). For other issues i think it would be better to open a separate issue, but that's up to @toy

toy commented 2 years ago

@mtalexander For connect/disconnect, please check #58, #62 and #64. For not getting info by name please create a new issue.

@RaphaelKn I finally checked on earlier mac and without [inquirer setInquiryLength:args->duration] the inquiry finishes after 10-15 seconds even if requested to run for longer, so please enable it. I also don't like that according to documentation stop should interrupt also updating found device names, which makes me think if it would be better to set inquiry length to duration, but set dispatch_after to duration + 5 (random number) seconds, though not sure.

mliradelc commented 8 months ago

thanks @RaphaelKn, for your PR, I was able to use this app with Mojave on my intel mac and finally paired and old apple wireless keyboard.

Also I checked with the -T option and worked for me very well.

toy commented 8 months ago

@mliradelc So the released version doesn't work, but this PR fixes it? And what do you mean by -T option?