problem:
There is currently no program included with bluez-utils which can
provide a PIN code to a bluetooth device. This is an issue for devices
like a "handsfree" mic/speaker combination that have limited input and
display capabilities. (Although it is NOT an issue for cell phone type
devices that have keypads and screens.)

system:
8.09.1, version for brcm 2.4, with bluez-utils v. 3.36 and its
dependencies installed

symptom:
when attempting to pair a device with OpenWRT, syslog shows this:
Oct 29 09:18:31 hostname daemon.info hcid[833]: link_key_request
(sba=00:11:22:33:44:55, dba=00:22:33:44:55:66)
Oct 29 09:18:31 hostname daemon.info hcid[833]: pin_code_request
(sba=00:11:22:33:44:55, dba=00:22:33:44:55:66)
which means that the device is requesting a PIN code from OpenWRT, but
OpenWRT does not respond properly.

proposed solution:
enable the creation of bluez-util package's passkey-agent program,
whose source code is part of the standard bluez-util package's test
tools. The installation of this program was disabled by florian (cc'd
on this thread) in May 2008 (see
https://dev.openwrt.org/changeset/11222/packages/utils/bluez-utils/Makefile).
There are two notes about enabling passkey-agent:
1) passkey-agent.c needs to be patched to make the if-else blocks
explicitly marked with {} characters. without this patch, it does not
send the appropriate information to register itself as a passkey agent
with hcid, and syslog fills up with messages like this one:
Oct 29 08:58:09 <host> daemon.err hcid[<pid>]: register_passkey_agent
called without any adapter info!
2) the bluez-utils package Makefile needs to be patched to enable the
compilation of passkey-agent. However, I wasn't able to figure out how
to enable ONLY passkey-agent, and not the entire suite of test tools.
So I manually specified the programs to install, based on the previous
behavior with the addition of passkey-agent. The passkey-agent program
is approximately 9kb.

alternate solution:
for systems that are able to install and run python, the pyagent
program can be installed and provide a similar PIN code service over
dbus. See https://forum.openwrt.org/viewtopic.php?id=20580

test:
I tested these patches on my own system, as described above. I was
able to pair with a device. The entry in syslog that indicated success
was this:
Oct 29 09:40:21 <host> daemon.info hcid[<pid>]: Default passkey agent
(:1.1, /org/bluez/passkey_agent_<pid>) registered


Signed-off-by: Dan Brown <[email protected]>

2 patches follow:
--------------------------------------------------
--- a/test/passkey-agent.c
+++ b/test/passkey-agent.c
@@ -223,12 +223,13 @@
                return -1;
        }

-       if (use_default)
+       if (use_default) {
                dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path,
                                                        DBUS_TYPE_INVALID);
-       else
+       } else {
                dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path,
                                DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID);
+       }

        dbus_error_init(&err);

--------------------------------------------------
--- Makefile
+++ Makefile
@@ -41,6 +41,7 @@
        --enable-network \
        --enable-usb \
        --enable-input \
+       --enable-test \
        --disable-audio \
        --with-bluez="$(STAGING_DIR)/usr/include" \
        --with-usb=yes \
@@ -58,9 +59,16 @@

 define Package/bluez-utils/install
        $(INSTALL_DIR) $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ciptool $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/hcitool $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/l2ping $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rfcomm $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sdptool $(1)/usr/bin/
        $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/hciattach $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/hciconfig $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/hcid $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/../test/passkey-agent $(1)/usr/sbin/
        $(INSTALL_DIR) $(1)/etc/bluetooth
        $(CP) $(PKG_INSTALL_DIR)/../hcid/hcid.conf $(1)/etc/bluetooth/
        $(CP) $(PKG_INSTALL_DIR)/../rfcomm/rfcomm.conf $(1)/etc/bluetooth/
--------------------------------------------------
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to