Hi,
I've been playing with the linux wiimote daemon called Cwiid, and
noticed that while it's waiting for a connection from a wiimote, it's
blocking the bluetooth adapter from doing anything else.
Searching around and looking at the code, I can see it's calling
hci_inquiry() in a loop which is blocking the device.
Does a non-blocking hci_inquiry() function exist? If not, could I get
some help on how to go about writing one?
Looking around, someone mentions that it might be the ioctl() function
called within hci_inquiry() which is causing the blocking, could it be
something as trivial as playing with that?
from lib/hci.c:
int hci_inquiry(int dev_id, int len, int nrsp, const uint8_t *lap,
inquiry_info **ii, long flags)
{
[snip]
??????? ret = ioctl(dd, HCIINQUIRY, (unsigned long) buf);
??????? if (ret < 0)
??????????????? goto free;
Many thanks,
Alex
Hi Alex,
> I've been playing with the linux wiimote daemon called Cwiid, and
> noticed that while it's waiting for a connection from a wiimote, it's
> blocking the bluetooth adapter from doing anything else.
>
> Searching around and looking at the code, I can see it's calling
> hci_inquiry() in a loop which is blocking the device.
>
> Does a non-blocking hci_inquiry() function exist? If not, could I get
> some help on how to go about writing one?
use the D-Bus interface for non-blocking inquiry.
Regards
Marcel
Hi Alex,
> > use the D-Bus interface for non-blocking inquiry.
>
> I'm following the GLib with C example in the following doc:
> http://wiki.bluez.org/wiki/HOWTO/DiscoveringDevices and having
> problems running the example code.
>
> It compiles perfectly fine, however, when I run it, it gives me the
> following error:
>
> jackflap@genesis:~/Desktop/cwiid-0.6.00/new_test$ ./bluetooth
> Failed to discover devices: Method "DiscoverDevices" with signature ""
> on interface "org.bluez.Adapter" doesn't exist
>
> I'm getting the impression that it's the following line in the code
> that isn't working:
>
> obj = dbus_g_proxy_new_for_name(bus, "org.bluez",
> "/org/bluez/hci0", "org.bluez.Adapter");
>
> I'm certain my bluetooth adapter is recognized and is configured as hci0.
looks like you are not using the 4.x API. That one works differently.
Regards
Marcel
Hi Marcel,
2009/7/28 Marcel Holtmann <[email protected]>:
>
> use the D-Bus interface for non-blocking inquiry.
I'm following the GLib with C example in the following doc:
http://wiki.bluez.org/wiki/HOWTO/DiscoveringDevices and having
problems running the example code.
It compiles perfectly fine, however, when I run it, it gives me the
following error:
jackflap@genesis:~/Desktop/cwiid-0.6.00/new_test$ ./bluetooth
Failed to discover devices: Method "DiscoverDevices" with signature ""
on interface "org.bluez.Adapter" doesn't exist
I'm getting the impression that it's the following line in the code
that isn't working:
obj = dbus_g_proxy_new_for_name(bus, "org.bluez",
"/org/bluez/hci0", "org.bluez.Adapter");
I'm certain my bluetooth adapter is recognized and is configured as hci0.
What am I missing?
Thanks,
Alex