Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libbluetooth use cached values directly rather than quer...
details: https://anonhg.NetBSD.org/src/rev/ef397ec95444
branches: trunk
changeset: 758965:ef397ec95444
user: plunky <plunky%NetBSD.org@localhost>
date: Mon Nov 22 19:59:04 2010 +0000
description:
use cached values directly rather than querying device for
features and buffer_size
diffstat:
lib/libbluetooth/bt_dev.c | 67 +++++++++++++++++-----------------------------
1 files changed, 25 insertions(+), 42 deletions(-)
diffs (125 lines):
diff -r 0dcba6fbdd44 -r ef397ec95444 lib/libbluetooth/bt_dev.c
--- a/lib/libbluetooth/bt_dev.c Mon Nov 22 19:56:51 2010 +0000
+++ b/lib/libbluetooth/bt_dev.c Mon Nov 22 19:59:04 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bt_dev.c,v 1.2 2010/11/13 19:43:56 plunky Exp $ */
+/* $NetBSD: bt_dev.c,v 1.3 2010/11/22 19:59:04 plunky Exp $ */
/*-
* Copyright (c) 2009 Iain Hibbert
@@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: bt_dev.c,v 1.2 2010/11/13 19:43:56 plunky Exp $");
+__RCSID("$NetBSD: bt_dev.c,v 1.3 2010/11/22 19:59:04 plunky Exp $");
#include <sys/event.h>
#include <sys/ioctl.h>
@@ -773,17 +773,12 @@
/*
* Internal version of bt_devinfo. Fill in the devinfo structure
- * with the socket handle provided. If the device is present and
- * active, the socket will be left connected to the device.
+ * with the socket handle provided.
*/
static int
bt__devinfo(int s, const char *name, struct bt_devinfo *info)
{
- struct sockaddr_bt sa;
- struct bt_devreq req;
struct btreq btr;
- hci_read_buffer_size_rp bp;
- hci_read_local_features_rp fp;
memset(&btr, 0, sizeof(btr));
strncpy(btr.btr_name, name, HCI_DEVNAME_SIZE);
@@ -801,10 +796,17 @@
info->cmd_free = btr.btr_num_cmd;
info->sco_free = btr.btr_num_sco;
info->acl_free = btr.btr_num_acl;
+ info->sco_pkts = btr.btr_max_sco;
+ info->acl_pkts = btr.btr_max_acl;
info->link_policy_info = btr.btr_link_policy;
info->packet_type_info = btr.btr_packet_type;
+ if (ioctl(s, SIOCGBTFEAT, &btr) == -1)
+ return -1;
+
+ memcpy(info->features, btr.btr_features0, HCI_FEATURES_SIZE);
+
if (ioctl(s, SIOCGBTSTATS, &btr) == -1)
return -1;
@@ -817,40 +819,6 @@
info->bytes_recv = btr.btr_stats.byte_rx;
info->bytes_sent = btr.btr_stats.byte_tx;
- /* can only get the rest from enabled devices */
- if ((info->enabled) == 0)
- return 0;
-
- memset(&sa, 0, sizeof(sa));
- sa.bt_len = sizeof(sa);
- sa.bt_family = AF_BLUETOOTH;
- bdaddr_copy(&sa.bt_bdaddr, &info->bdaddr);
-
- if (bind(s, (struct sockaddr *)&sa, sizeof(sa)) == -1
- || connect(s, (struct sockaddr *)&sa, sizeof(sa)) == -1)
- return -1;
-
- memset(&req, 0, sizeof(req));
- req.opcode = HCI_CMD_READ_BUFFER_SIZE;
- req.rparam = &bp;
- req.rlen = sizeof(bp);
-
- if (bt_devreq(s, &req, 5) == -1)
- return -1;
-
- info->acl_pkts = bp.max_acl_size;
- info->sco_pkts = bp.max_sco_size;
-
- memset(&req, 0, sizeof(req));
- req.opcode = HCI_CMD_READ_LOCAL_FEATURES;
- req.rparam = &fp;
- req.rlen = sizeof(fp);
-
- if (bt_devreq(s, &req, 5) == -1)
- return -1;
-
- memcpy(info->features, fp.features, HCI_FEATURES_SIZE);
-
return 0;
}
@@ -878,6 +846,7 @@
{
struct btreq btr;
struct bt_devinfo info;
+ struct sockaddr_bt sa;
int count, fd, rv, s;
s = socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
@@ -905,6 +874,20 @@
return -1;
}
+ if (info.enabled) {
+ memset(&sa, 0, sizeof(sa));
+ sa.bt_len = sizeof(sa);
+ sa.bt_family = AF_BLUETOOTH;
+ bdaddr_copy(&sa.bt_bdaddr, &info.bdaddr);
+
+ if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1
+ || connect(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
+ close(fd);
+ close(s);
+ return -1;
+ }
+ }
+
rv = (*cb)(fd, &info, arg);
close(fd);
if (rv != 0)
Home |
Main Index |
Thread Index |
Old Index