Module Name: src
Committed By: bouyer
Date: Sun Jan 20 12:10:53 UTC 2013
Modified Files:
src/sys/dev/bluetooth [netbsd-5]: bthidev.c btmagic.c
src/usr.sbin/btdevctl [netbsd-5]: btdevctl.8
Log Message:
Pull up following revision(s) (requested by plunky in ticket #1835):
sys/dev/bluetooth/bthidev.c: revision 1.23 via patch
sys/dev/bluetooth/bthidev.c: revision 1.24 via patch
usr.sbin/btdevctl/btdevctl.8: revision 1.8 via patch
sys/dev/bluetooth/btmagic.c: revision 1.4 via patch
sys/dev/bluetooth/btmagic.c: revision 1.5 via patch
when no link-mode is specified, explicitly set a mode of (int)0
otherwise l2cap_setmode() will fail during connection setup
for bthidev.c, this fixes a problem with Microsoft Wedge Touch
mouse (which may not be able to authenticate)
for btmagic.c, include this fix in case somebody tries that
related to PR/47286
increase some diagnostics
add a comment pointing out that the link-mode may need to be
changed manually, for devices which cannot authenticate
for PR/47286
To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.16.4.1 src/sys/dev/bluetooth/bthidev.c
cvs rdiff -u -r1.1.8.2 -r1.1.8.3 src/sys/dev/bluetooth/btmagic.c
cvs rdiff -u -r1.5 -r1.5.12.1 src/usr.sbin/btdevctl/btdevctl.8
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/bluetooth/bthidev.c
diff -u src/sys/dev/bluetooth/bthidev.c:1.16 src/sys/dev/bluetooth/bthidev.c:1.16.4.1
--- src/sys/dev/bluetooth/bthidev.c:1.16 Wed Aug 6 15:01:23 2008
+++ src/sys/dev/bluetooth/bthidev.c Sun Jan 20 12:10:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: bthidev.c,v 1.16 2008/08/06 15:01:23 plunky Exp $ */
+/* $NetBSD: bthidev.c,v 1.16.4.1 2013/01/20 12:10:51 bouyer Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bthidev.c,v 1.16 2008/08/06 15:01:23 plunky Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bthidev.c,v 1.16.4.1 2013/01/20 12:10:51 bouyer Exp $");
#include <sys/param.h>
#include <sys/conf.h>
@@ -181,6 +181,7 @@ bthidev_attach(device_t parent, device_t
const void *desc;
int locs[BTHIDBUSCF_NLOCS];
int maxid, rep, dlen;
+ int err;
/*
* Init softc
@@ -220,7 +221,8 @@ bthidev_attach(device_t parent, device_t
aprint_verbose(" %s %s", BTDEVmode,
prop_string_cstring_nocopy(obj));
- }
+ } else
+ sockopt_setint(&sc->sc_mode, 0);
obj = prop_dictionary_get(dict, BTHIDEVcontrolpsm);
if (prop_object_type(obj) == PROP_TYPE_NUMBER) {
@@ -305,8 +307,9 @@ bthidev_attach(device_t parent, device_t
* start bluetooth connections
*/
mutex_enter(bt_lock);
- if ((sc->sc_flags & BTHID_RECONNECT) == 0)
- bthidev_listen(sc);
+ if ((sc->sc_flags & BTHID_RECONNECT) == 0
+ && (err = bthidev_listen(sc)) != 0)
+ aprint_error_dev(self, "failed to listen (%d)\n", err);
if (sc->sc_flags & BTHID_CONNECTING)
bthidev_connect(sc);
@@ -514,8 +517,10 @@ bthidev_connect(struct bthidev_softc *sc
}
err = l2cap_setopt(sc->sc_ctl, &sc->sc_mode);
- if (err)
+ if (err) {
+ aprint_error_dev(sc->sc_dev, "l2cap_setopt failed (%d)\n", err);
return err;
+ }
bdaddr_copy(&sa.bt_bdaddr, &sc->sc_laddr);
err = l2cap_bind(sc->sc_ctl, &sa);
@@ -638,7 +643,7 @@ bthidev_ctl_disconnected(void *arg, int
sc->sc_state = BTHID_CLOSED;
if (sc->sc_int == NULL) {
- aprint_normal_dev(sc->sc_dev, "disconnected\n");
+ aprint_normal_dev(sc->sc_dev, "disconnected (%d)\n", err);
sc->sc_flags &= ~BTHID_CONNECTING;
if (sc->sc_flags & BTHID_RECONNECT)
@@ -670,7 +675,7 @@ bthidev_int_disconnected(void *arg, int
sc->sc_state = BTHID_CLOSED;
if (sc->sc_ctl == NULL) {
- aprint_normal_dev(sc->sc_dev, "disconnected\n");
+ aprint_normal_dev(sc->sc_dev, "disconnected (%d)\n", err);
sc->sc_flags &= ~BTHID_CONNECTING;
if (sc->sc_flags & BTHID_RECONNECT)
Index: src/sys/dev/bluetooth/btmagic.c
diff -u src/sys/dev/bluetooth/btmagic.c:1.1.8.2 src/sys/dev/bluetooth/btmagic.c:1.1.8.3
--- src/sys/dev/bluetooth/btmagic.c:1.1.8.2 Sun Nov 21 03:05:03 2010
+++ src/sys/dev/bluetooth/btmagic.c Sun Jan 20 12:10:52 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: btmagic.c,v 1.1.8.2 2010/11/21 03:05:03 riz Exp $ */
+/* $NetBSD: btmagic.c,v 1.1.8.3 2013/01/20 12:10:52 bouyer Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -85,7 +85,7 @@
*****************************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: btmagic.c,v 1.1.8.2 2010/11/21 03:05:03 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: btmagic.c,v 1.1.8.3 2013/01/20 12:10:52 bouyer Exp $");
#include <sys/param.h>
#include <sys/conf.h>
@@ -272,6 +272,7 @@ btmagic_attach(device_t parent, device_t
struct wsmousedev_attach_args wsma;
const struct sysctlnode *node;
prop_object_t obj;
+ int err;
/*
* Init softc
@@ -306,7 +307,8 @@ btmagic_attach(device_t parent, device_t
aprint_verbose(" %s %s", BTDEVmode,
prop_string_cstring_nocopy(obj));
- }
+ } else
+ sockopt_setint(&sc->sc_mode, 0);
aprint_normal(": 3 buttons, W and Z dirs\n");
aprint_naive("\n");
@@ -389,7 +391,8 @@ btmagic_attach(device_t parent, device_t
* start bluetooth connections
*/
mutex_enter(bt_lock);
- btmagic_listen(sc);
+ if ((err = btmagic_listen(sc)) != 0)
+ aprint_error_dev(self, "failed to listen (%d)\n", err);
btmagic_connect(sc);
mutex_exit(bt_lock);
}
@@ -528,8 +531,11 @@ btmagic_connect(struct btmagic_softc *sc
}
err = l2cap_setopt(sc->sc_ctl, &sc->sc_mode);
- if (err)
+ if (err) {
+ printf("%s: l2cap_setopt failed (%d)\n",
+ device_xname(sc->sc_dev), err);
return err;
+ }
bdaddr_copy(&sa.bt_bdaddr, &sc->sc_laddr);
err = l2cap_bind(sc->sc_ctl, &sa);
@@ -880,7 +886,7 @@ btmagic_ctl_disconnected(void *arg, int
}
if (sc->sc_int == NULL) {
- printf("%s: disconnected\n", device_xname(sc->sc_dev));
+ printf("%s: disconnected (%d)\n", device_xname(sc->sc_dev), err);
CLR(sc->sc_flags, BTMAGIC_CONNECTING);
sc->sc_state = BTMAGIC_WAIT_CTL;
} else {
@@ -906,7 +912,7 @@ btmagic_int_disconnected(void *arg, int
}
if (sc->sc_ctl == NULL) {
- printf("%s: disconnected\n", device_xname(sc->sc_dev));
+ printf("%s: disconnected (%d)\n", device_xname(sc->sc_dev), err);
CLR(sc->sc_flags, BTMAGIC_CONNECTING);
sc->sc_state = BTMAGIC_WAIT_CTL;
} else {
Index: src/usr.sbin/btdevctl/btdevctl.8
diff -u src/usr.sbin/btdevctl/btdevctl.8:1.5 src/usr.sbin/btdevctl/btdevctl.8:1.5.12.1
--- src/usr.sbin/btdevctl/btdevctl.8:1.5 Sun Dec 2 20:59:29 2007
+++ src/usr.sbin/btdevctl/btdevctl.8 Sun Jan 20 12:10:52 2013
@@ -1,4 +1,4 @@
-.\" $NetBSD: btdevctl.8,v 1.5 2007/12/02 20:59:29 wiz Exp $
+.\" $NetBSD: btdevctl.8,v 1.5.12.1 2013/01/20 12:10:52 bouyer Exp $
.\"
.\" Copyright (c) 2006 Itronix Inc.
.\" All rights reserved.
@@ -51,10 +51,10 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $Id: btdevctl.8,v 1.5 2007/12/02 20:59:29 wiz Exp $
+.\" $Id: btdevctl.8,v 1.5.12.1 2013/01/20 12:10:52 bouyer Exp $
.\" $FreeBSD: src/usr.sbin/bluetooth/bthidcontrol/bthidcontrol.8,v 1.3 2005/01/18 20:02:30 ru Exp $
.\"
-.Dd April 10, 2007
+.Dd December 26, 2012
.Dt BTDEVCTL 8
.Os
.Sh NAME
@@ -104,7 +104,7 @@ May be given as BDADDR or device name.
Connection link mode.
The following modes are supported:
.Pp
-.Bl -tag -compact
+.Bl -tag -width encrypt -compact
.It none
clear previously set mode.
.It auth
@@ -123,6 +123,8 @@ will set
by default, or
.Sq encrypt
for keyboard devices.
+If the device cannot handle authentication, then the mode will need
+to be cleared manually.
.It Fl q
Ignore any cached data and perform a SDP query for the given
.Ar service .