Module Name: src
Committed By: plunky
Date: Sun Nov 28 20:37:24 UTC 2010
Modified Files:
src/usr.sbin/btconfig: btconfig.c
Log Message:
don't try to imitate the kernel while doing a reset, just
set the init flags and poll until they are cleared
To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/usr.sbin/btconfig/btconfig.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/btconfig/btconfig.c
diff -u src/usr.sbin/btconfig/btconfig.c:1.23 src/usr.sbin/btconfig/btconfig.c:1.24
--- src/usr.sbin/btconfig/btconfig.c:1.23 Mon Nov 22 20:02:06 2010
+++ src/usr.sbin/btconfig/btconfig.c Sun Nov 28 20:37:24 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: btconfig.c,v 1.23 2010/11/22 20:02:06 plunky Exp $ */
+/* $NetBSD: btconfig.c,v 1.24 2010/11/28 20:37:24 plunky Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -33,7 +33,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2006 Itronix, Inc. All rights reserved.");
-__RCSID("$NetBSD: btconfig.c,v 1.23 2010/11/22 20:02:06 plunky Exp $");
+__RCSID("$NetBSD: btconfig.c,v 1.24 2010/11/28 20:37:24 plunky Exp $");
#include <sys/ioctl.h>
#include <sys/param.h>
@@ -45,6 +45,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
#include <util.h>
@@ -474,23 +475,19 @@
}
if (opt_reset) {
- hci_req(HCI_CMD_RESET, 0, NULL, 0, NULL, 0);
+ static const struct timespec ts = { 0, 100000000 }; /* 100ms */
btr.btr_flags |= BTF_INIT;
if (ioctl(hci, SIOCSBTFLAGS, &btr) < 0)
err(EXIT_FAILURE, "SIOCSBTFLAGS");
- /*
- * although the reset command will automatically
- * carry out these commands, we do them manually
- * just so we can wait for completion.
- */
- hci_req(HCI_CMD_READ_BDADDR, 0, NULL, 0, NULL, 0);
- hci_req(HCI_CMD_READ_BUFFER_SIZE, 0, NULL, 0, NULL, 0);
- hci_req(HCI_CMD_READ_LOCAL_FEATURES, 0, NULL, 0, NULL, 0);
+ hci_req(HCI_CMD_RESET, 0, NULL, 0, NULL, 0);
- if (set_unit(SIOCGBTINFO) < 0)
- err(EXIT_FAILURE, "%s", btr.btr_name);
+ do {
+ nanosleep(&ts, NULL);
+ if (ioctl(hci, SIOCGBTINFO, &btr) < 0)
+ err(EXIT_FAILURE, "%s", btr.btr_name);
+ } while ((btr.btr_flags & BTF_INIT) != 0);
}
if (opt_master) {