* Re: [PATCH v2 resend 1/2] Introduced a load_firmware callback to struct hci_dev
From: Marcel Holtmann @ 2012-10-04 13:06 UTC (permalink / raw)
To: Jesse Sung; +Cc: Gustavo Padovan, Johan Hedberg, linux-bluetooth
In-Reply-To: <CAH10aOiwWGseiYEiqk_h=WhNyGGGhpWPhU1TO8E948Ka+xHu9w@mail.gmail.com>
Hi Jesse,
> >> load_firmware will be called at the end of hci_dev_open() if it
> >> is defined.
> >>
> >> Signed-off-by: Wen-chien Jesse Sung <jesse.sung@canonical.com>
> >> ---
> >> include/net/bluetooth/hci_core.h | 1 +
> >> net/bluetooth/hci_core.c | 2 ++
> >> 2 files changed, 3 insertions(+)
> >>
> >> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
> >> index 593cd1d..40972a3 100644
> >> --- a/include/net/bluetooth/hci_core.h
> >> +++ b/include/net/bluetooth/hci_core.h
> >> @@ -281,6 +281,7 @@ struct hci_dev {
> >> int (*send)(struct sk_buff *skb);
> >> void (*notify)(struct hci_dev *hdev, unsigned int evt);
> >> int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
> >> + void (*load_firmware)(struct hci_dev *hdev);
> >> };
> >>
> >> struct hci_conn {
> >> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> >> index d4de5db..49be87a 100644
> >> --- a/net/bluetooth/hci_core.c
> >> +++ b/net/bluetooth/hci_core.c
> >> @@ -725,6 +725,8 @@ int hci_dev_open(__u16 dev)
> >> done:
> >> hci_req_unlock(hdev);
> >> hci_dev_put(hdev);
> >> + if (!ret && hdev->load_firmware)
> >> + hdev->load_firmware(hdev);
> >> return ret;
> >> }
> >>
> >
> > has anybody thought this through actually? Do we need to reload the
> > firmware after every HCI_Reset? Since hci_dev_open() is used at least
> > twice during normal operation. And for every RFKILL or power down/up
> > cycle of the chip.
> >
> > And there is an internal process of hci_dev_open() trigger on
> > registration and others triggered by hciconfig hci0 up. I am pretty much
> > against having to wait for all this firmware loading crap during every
> > bring up of the device. Especially since it always does a trip via
> > request_firmware().
>
> In the second patch, firmware loading would be done only once per
> power cycle of the chip. Since I think it should be the device driver, not hci,
> who knows when and how to load firmware, the lock is placed in btusb.c.
and how does the driver knows these details? That makes no sense. How
does the driver know it got rebooted?
The hci_dev_open() will start the transport. And as I explained before,
that can happen twice during boot time.
Regards
Marcel
^ permalink raw reply
* Re: [PATCH] Bluetooth: mgmt: Fix dereference after NULL check
From: Andrei Emeltchenko @ 2012-10-04 12:33 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <20121004121702.GA31328@x220>
Hi Johan,
On Thu, Oct 04, 2012 at 03:17:02PM +0300, Johan Hedberg wrote:
> Hi Andrei,
>
> On Thu, Oct 04, 2012, Andrei Emeltchenko wrote:
> > hdev might be NULL, so we need to avoid possible NULL derefernce in
> > handler->func functions.
> >
> > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> > ---
> > net/bluetooth/mgmt.c | 14 ++++++++------
> > 1 file changed, 8 insertions(+), 6 deletions(-)
>
> Nack. Some of the handlers actually should be getting a NULL hdev and
> there's code higher up in the function you're changing that ensures that
> NULL is allowed for those handlers but not for any others (which should
> safely be able to skip NULL checks).
True, BTW: this would be nice to put this explanation as comment there.
Best regards
Andrei Emeltchenko
^ permalink raw reply
* Re: [PATCH] Bluetooth: mgmt: Fix dereference after NULL check
From: Johan Hedberg @ 2012-10-04 12:17 UTC (permalink / raw)
To: Andrei Emeltchenko; +Cc: linux-bluetooth
In-Reply-To: <1349348218-676-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
Hi Andrei,
On Thu, Oct 04, 2012, Andrei Emeltchenko wrote:
> hdev might be NULL, so we need to avoid possible NULL derefernce in
> handler->func functions.
>
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
> net/bluetooth/mgmt.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
Nack. Some of the handlers actually should be getting a NULL hdev and
there's code higher up in the function you're changing that ensures that
NULL is allowed for those handlers but not for any others (which should
safely be able to skip NULL checks).
Johan
^ permalink raw reply
* [RFC 7/7] device: Make device_get_address return const pointer
From: Szymon Janc @ 2012-10-04 12:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1349352364-5491-1-git-send-email-szymon.janc@tieto.com>
---
src/device.c | 2 +-
src/device.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/device.c b/src/device.c
index 58498b2..46758bd 100644
--- a/src/device.c
+++ b/src/device.c
@@ -2311,7 +2311,7 @@ struct btd_adapter *device_get_adapter(struct btd_device *device)
return device->adapter;
}
-bdaddr_t *device_get_address(struct btd_device *device)
+const bdaddr_t *device_get_address(struct btd_device *device)
{
return &device->bdaddr;
}
diff --git a/src/device.h b/src/device.h
index f919af4..0c16c18 100644
--- a/src/device.h
+++ b/src/device.h
@@ -64,7 +64,7 @@ void btd_device_add_uuid(struct btd_device *device, const char *uuid);
void device_probe_profile(gpointer a, gpointer b);
void device_remove_profile(gpointer a, gpointer b);
struct btd_adapter *device_get_adapter(struct btd_device *device);
-bdaddr_t *device_get_address(struct btd_device *device);
+const bdaddr_t *device_get_address(struct btd_device *device);
void device_set_addr_type(struct btd_device *device, uint8_t bdaddr_type);
uint8_t device_get_addr_type(struct btd_device *device);
const gchar *device_get_path(struct btd_device *device);
--
1.7.9.5
^ permalink raw reply related
* [RFC 6/7] adapter: Constify use of bdaddr_t pointer parameters
From: Szymon Janc @ 2012-10-04 12:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1349352364-5491-1-git-send-email-szymon.janc@tieto.com>
Mark all input only bdaddr_t pointer parameters as const.
---
src/adapter.c | 52 +++++++++++++++++++++++++++++-----------------------
src/adapter.h | 51 +++++++++++++++++++++++++++++----------------------
2 files changed, 58 insertions(+), 45 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index 439046d..cc455a5 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2037,14 +2037,14 @@ static void load_devices(struct btd_adapter *adapter)
textfile_foreach(filename, create_stored_device_from_blocked, adapter);
}
-int btd_adapter_block_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type)
+int btd_adapter_block_address(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
return mgmt_block_device(adapter->dev_id, bdaddr, bdaddr_type);
}
-int btd_adapter_unblock_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type)
+int btd_adapter_unblock_address(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
return mgmt_unblock_device(adapter->dev_id, bdaddr,
bdaddr_type);
@@ -2749,7 +2749,7 @@ static int found_device_cmp(gconstpointer a, gconstpointer b)
}
struct remote_dev_info *adapter_search_found_devices(struct btd_adapter *adapter,
- bdaddr_t *bdaddr)
+ const bdaddr_t *bdaddr)
{
GSList *l;
@@ -2976,7 +2976,7 @@ static void dev_prepend_uuid(gpointer data, gpointer user_data)
dev->services = g_slist_prepend(dev->services, g_strdup(new_uuid));
}
-static gboolean pairing_is_legacy(bdaddr_t *local, bdaddr_t *peer,
+static gboolean pairing_is_legacy(const bdaddr_t *local, const bdaddr_t *peer,
const uint8_t *eir, const char *name)
{
unsigned char features[8];
@@ -2996,7 +2996,7 @@ static gboolean pairing_is_legacy(bdaddr_t *local, bdaddr_t *peer,
return TRUE;
}
-static char *read_stored_data(bdaddr_t *local, bdaddr_t *peer,
+static char *read_stored_data(const bdaddr_t *local, const bdaddr_t *peer,
uint8_t peer_type, const char *file)
{
char local_addr[18], key[20], filename[PATH_MAX + 1], *str;
@@ -3065,9 +3065,10 @@ static gboolean connect_pending_cb(gpointer user_data)
}
void adapter_update_found_devices(struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t bdaddr_type,
- int8_t rssi, uint8_t confirm_name,
- uint8_t *data, uint8_t data_len)
+ const bdaddr_t *bdaddr,
+ uint8_t bdaddr_type, int8_t rssi,
+ uint8_t confirm_name, uint8_t *data,
+ uint8_t data_len)
{
struct remote_dev_info *dev;
struct eir_data eir_data;
@@ -3650,7 +3651,7 @@ int btd_adapter_set_fast_connectable(struct btd_adapter *adapter,
return mgmt_set_fast_connectable(adapter->dev_id, enable);
}
-int btd_adapter_read_clock(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+int btd_adapter_read_clock(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
int which, int timeout, uint32_t *clock,
uint16_t *accuracy)
{
@@ -3662,33 +3663,37 @@ int btd_adapter_read_clock(struct btd_adapter *adapter, bdaddr_t *bdaddr,
}
int btd_adapter_disconnect_device(struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t bdaddr_type)
+ const bdaddr_t *bdaddr,
+ uint8_t bdaddr_type)
{
return mgmt_disconnect(adapter->dev_id, bdaddr, bdaddr_type);
}
-int btd_adapter_remove_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type)
+int btd_adapter_remove_bonding(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
return mgmt_unpair_device(adapter->dev_id, bdaddr, bdaddr_type);
}
-int btd_adapter_pincode_reply(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+int btd_adapter_pincode_reply(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr,
const char *pin, size_t pin_len)
{
return mgmt_pincode_reply(adapter->dev_id, bdaddr, pin, pin_len);
}
-int btd_adapter_confirm_reply(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type, gboolean success)
+int btd_adapter_confirm_reply(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type,
+ gboolean success)
{
return mgmt_confirm_reply(adapter->dev_id, bdaddr, bdaddr_type,
success);
}
-int btd_adapter_passkey_reply(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type, uint32_t passkey)
+int btd_adapter_passkey_reply(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type,
+ uint32_t passkey)
{
return mgmt_passkey_reply(adapter->dev_id, bdaddr, bdaddr_type,
passkey);
@@ -3701,14 +3706,14 @@ int btd_adapter_set_did(struct btd_adapter *adapter, uint16_t vendor,
return mgmt_set_did(adapter->dev_id, vendor, product, version, source);
}
-int adapter_create_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
uint8_t addr_type, uint8_t io_cap)
{
suspend_discovery(adapter);
return mgmt_create_bonding(adapter->dev_id, bdaddr, addr_type, io_cap);
}
-int adapter_cancel_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr)
+int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr)
{
return mgmt_cancel_bonding(adapter->dev_id, bdaddr);
}
@@ -3758,14 +3763,15 @@ int btd_adapter_read_local_oob_data(struct btd_adapter *adapter)
}
int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t *hash, uint8_t *randomizer)
+ const bdaddr_t *bdaddr,
+ uint8_t *hash, uint8_t *randomizer)
{
return mgmt_add_remote_oob_data(adapter->dev_id, bdaddr, hash,
randomizer);
}
int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
- bdaddr_t *bdaddr)
+ const bdaddr_t *bdaddr)
{
return mgmt_remove_remote_oob_data(adapter->dev_id, bdaddr);
}
diff --git a/src/adapter.h b/src/adapter.h
index 07c0ad5..72a9988 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -124,11 +124,12 @@ uint16_t adapter_get_dev_id(struct btd_adapter *adapter);
const gchar *adapter_get_path(struct btd_adapter *adapter);
const bdaddr_t *adapter_get_address(struct btd_adapter *adapter);
struct remote_dev_info *adapter_search_found_devices(struct btd_adapter *adapter,
- bdaddr_t *bdaddr);
+ const bdaddr_t *bdaddr);
void adapter_update_found_devices(struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t bdaddr_type,
- int8_t rssi, uint8_t confirm_name,
- uint8_t *data, uint8_t data_len);
+ const bdaddr_t *bdaddr,
+ uint8_t bdaddr_type, int8_t rssi,
+ uint8_t confirm_name, uint8_t *data,
+ uint8_t data_len);
void adapter_emit_device_found(struct btd_adapter *adapter,
struct remote_dev_info *dev);
void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode);
@@ -205,36 +206,41 @@ void btd_adapter_unregister_powered_callback(struct btd_adapter *adapter,
int btd_adapter_set_fast_connectable(struct btd_adapter *adapter,
gboolean enable);
-int btd_adapter_read_clock(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+int btd_adapter_read_clock(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
int which, int timeout, uint32_t *clock,
uint16_t *accuracy);
-int btd_adapter_block_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type);
-int btd_adapter_unblock_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type);
+int btd_adapter_block_address(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type);
+int btd_adapter_unblock_address(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type);
int btd_adapter_disconnect_device(struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t bdaddr_type);
-
-int btd_adapter_remove_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+ const bdaddr_t *bdaddr,
uint8_t bdaddr_type);
-int btd_adapter_pincode_reply(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+int btd_adapter_remove_bonding(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type);
+
+int btd_adapter_pincode_reply(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr,
const char *pin, size_t pin_len);
-int btd_adapter_confirm_reply(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type, gboolean success);
-int btd_adapter_passkey_reply(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type, uint32_t passkey);
+int btd_adapter_confirm_reply(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type,
+ gboolean success);
+int btd_adapter_passkey_reply(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type,
+ uint32_t passkey);
int btd_adapter_set_did(struct btd_adapter *adapter, uint16_t vendor,
uint16_t product, uint16_t version,
uint16_t source);
-int adapter_create_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t bdaddr_type, uint8_t io_cap);
+int adapter_create_bonding(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t bdaddr_type,
+ uint8_t io_cap);
-int adapter_cancel_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr);
+int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr);
void adapter_bonding_complete(struct btd_adapter *adapter,
const bdaddr_t *bdaddr, uint8_t status);
@@ -244,10 +250,11 @@ void adapter_read_local_oob_data_complete(struct btd_adapter *adapter,
uint8_t *hash, uint8_t *randomizer);
int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t *hash, uint8_t *randomizer);
+ const bdaddr_t *bdaddr,
+ uint8_t *hash, uint8_t *randomizer);
int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
- bdaddr_t *bdaddr);
+ const bdaddr_t *bdaddr);
int btd_adapter_gatt_server_start(struct btd_adapter *adapter);
void btd_adapter_gatt_server_stop(struct btd_adapter *adapter);
--
1.7.9.5
^ permalink raw reply related
* [RFC 5/7] mgmt: Constify use of bdaddr_t pointer parameters
From: Szymon Janc @ 2012-10-04 12:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1349352364-5491-1-git-send-email-szymon.janc@tieto.com>
Mark all input only bdaddr_t pointer parameters as const.
---
plugins/neard.c | 5 +++--
src/adapter.c | 6 +++---
src/adapter.h | 6 +++---
src/mgmt.c | 31 ++++++++++++++++---------------
src/mgmt.h | 26 +++++++++++++-------------
5 files changed, 38 insertions(+), 36 deletions(-)
diff --git a/plugins/neard.c b/plugins/neard.c
index 2fe1785..2da5024 100644
--- a/plugins/neard.c
+++ b/plugins/neard.c
@@ -216,8 +216,9 @@ static void read_local_complete(struct btd_adapter *adapter, uint8_t *hash,
error("D-Bus send failed");
}
-static void bonding_complete(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t status, void *user_data)
+static void bonding_complete(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t status,
+ void *user_data)
{
DBusMessage *msg = user_data;
DBusMessage *reply;
diff --git a/src/adapter.c b/src/adapter.c
index 4610b85..439046d 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -3714,7 +3714,7 @@ int adapter_cancel_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr)
}
static void check_oob_bonding_complete(struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t status)
+ const bdaddr_t *bdaddr, uint8_t status)
{
if (!adapter->oob_handler || !adapter->oob_handler->bonding_cb)
return;
@@ -3729,8 +3729,8 @@ static void check_oob_bonding_complete(struct btd_adapter *adapter,
adapter->oob_handler = NULL;
}
-void adapter_bonding_complete(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t status)
+void adapter_bonding_complete(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t status)
{
struct btd_device *device;
char addr[18];
diff --git a/src/adapter.h b/src/adapter.h
index d4fb14b..07c0ad5 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -47,7 +47,7 @@ typedef void (*oob_read_local_cb_t) (struct btd_adapter *adapter,
uint8_t *hash, uint8_t *randomizer,
void *user_data);
typedef void (*oob_bonding_cb_t) (struct btd_adapter *adapter,
- bdaddr_t *bdaddr, uint8_t status,
+ const bdaddr_t *bdaddr, uint8_t status,
void *user_data);
struct oob_handler {
@@ -236,8 +236,8 @@ int adapter_create_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr,
int adapter_cancel_bonding(struct btd_adapter *adapter, bdaddr_t *bdaddr);
-void adapter_bonding_complete(struct btd_adapter *adapter, bdaddr_t *bdaddr,
- uint8_t status);
+void adapter_bonding_complete(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t status);
int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
void adapter_read_local_oob_data_complete(struct btd_adapter *adapter,
diff --git a/src/mgmt.c b/src/mgmt.c
index b689be8..d3f7809 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -432,8 +432,8 @@ static void mgmt_new_settings(int sk, uint16_t index, void *buf, size_t len)
info->current_settings = settings;
}
-static void bonding_complete(struct controller_info *info, bdaddr_t *bdaddr,
- uint8_t status)
+static void bonding_complete(struct controller_info *info,
+ const bdaddr_t *bdaddr, uint8_t status)
{
struct btd_adapter *adapter;
@@ -579,7 +579,7 @@ static void mgmt_connect_failed(int sk, uint16_t index, void *buf, size_t len)
bonding_complete(info, &ev->addr.bdaddr, ev->status);
}
-int mgmt_pincode_reply(int index, bdaddr_t *bdaddr, const char *pin,
+int mgmt_pincode_reply(int index, const bdaddr_t *bdaddr, const char *pin,
size_t pin_len)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_pin_code_reply)];
@@ -660,7 +660,7 @@ static void mgmt_pin_code_request(int sk, uint16_t index, void *buf, size_t len)
}
}
-int mgmt_confirm_reply(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
+int mgmt_confirm_reply(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
gboolean success)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_user_confirm_reply)];
@@ -691,7 +691,7 @@ int mgmt_confirm_reply(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
return 0;
}
-int mgmt_passkey_reply(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
+int mgmt_passkey_reply(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
uint32_t passkey)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_user_passkey_reply)];
@@ -2130,7 +2130,7 @@ int mgmt_set_fast_connectable(int index, gboolean enable)
return 0;
}
-int mgmt_read_clock(int index, bdaddr_t *bdaddr, int which, int timeout,
+int mgmt_read_clock(int index, const bdaddr_t *bdaddr, int which, int timeout,
uint32_t *clock, uint16_t *accuracy)
{
char addr[18];
@@ -2158,7 +2158,7 @@ int mgmt_read_bdaddr(int index, bdaddr_t *bdaddr)
return 0;
}
-int mgmt_block_device(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type)
+int mgmt_block_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_block_device)];
struct mgmt_hdr *hdr = (void *) buf;
@@ -2187,7 +2187,7 @@ int mgmt_block_device(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type)
return 0;
}
-int mgmt_unblock_device(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type)
+int mgmt_unblock_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_unblock_device)];
struct mgmt_hdr *hdr = (void *) buf;
@@ -2228,7 +2228,7 @@ int mgmt_get_conn_list(int index, GSList **conns)
return 0;
}
-int mgmt_disconnect(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type)
+int mgmt_disconnect(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_disconnect)];
struct mgmt_hdr *hdr = (void *) buf;
@@ -2252,7 +2252,7 @@ int mgmt_disconnect(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type)
return 0;
}
-int mgmt_unpair_device(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type)
+int mgmt_unpair_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_unpair_device)];
struct mgmt_hdr *hdr = (void *) buf;
@@ -2373,7 +2373,8 @@ int mgmt_set_io_capability(int index, uint8_t io_capability)
return 0;
}
-int mgmt_create_bonding(int index, bdaddr_t *bdaddr, uint8_t addr_type, uint8_t io_cap)
+int mgmt_create_bonding(int index, const bdaddr_t *bdaddr, uint8_t addr_type,
+ uint8_t io_cap)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_pair_device)];
struct mgmt_hdr *hdr = (void *) buf;
@@ -2399,7 +2400,7 @@ int mgmt_create_bonding(int index, bdaddr_t *bdaddr, uint8_t addr_type, uint8_t
return 0;
}
-int mgmt_cancel_bonding(int index, bdaddr_t *bdaddr)
+int mgmt_cancel_bonding(int index, const bdaddr_t *bdaddr)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_addr_info)];
struct mgmt_hdr *hdr = (void *) buf;
@@ -2438,7 +2439,7 @@ int mgmt_read_local_oob_data(int index)
return 0;
}
-int mgmt_add_remote_oob_data(int index, bdaddr_t *bdaddr,
+int mgmt_add_remote_oob_data(int index, const bdaddr_t *bdaddr,
uint8_t *hash, uint8_t *randomizer)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_add_remote_oob_data)];
@@ -2467,7 +2468,7 @@ int mgmt_add_remote_oob_data(int index, bdaddr_t *bdaddr,
return 0;
}
-int mgmt_remove_remote_oob_data(int index, bdaddr_t *bdaddr)
+int mgmt_remove_remote_oob_data(int index, const bdaddr_t *bdaddr)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_remove_remote_oob_data)];
struct mgmt_hdr *hdr = (void *) buf;
@@ -2491,7 +2492,7 @@ int mgmt_remove_remote_oob_data(int index, bdaddr_t *bdaddr)
return 0;
}
-int mgmt_confirm_name(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
+int mgmt_confirm_name(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
gboolean name_known)
{
char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_confirm_name)];
diff --git a/src/mgmt.h b/src/mgmt.h
index 1d25cb0..a2c0497 100644
--- a/src/mgmt.h
+++ b/src/mgmt.h
@@ -36,18 +36,18 @@ int mgmt_start_discovery(int index);
int mgmt_start_le_scanning(int index);
int mgmt_stop_discovery(int index);
-int mgmt_read_clock(int index, bdaddr_t *bdaddr, int which, int timeout,
+int mgmt_read_clock(int index, const bdaddr_t *bdaddr, int which, int timeout,
uint32_t *clock, uint16_t *accuracy);
int mgmt_read_bdaddr(int index, bdaddr_t *bdaddr);
-int mgmt_block_device(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type);
-int mgmt_unblock_device(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type);
+int mgmt_block_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type);
+int mgmt_unblock_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type);
int mgmt_get_conn_list(int index, GSList **conns);
-int mgmt_disconnect(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type);
+int mgmt_disconnect(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type);
-int mgmt_unpair_device(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type);
+int mgmt_unpair_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type);
int mgmt_add_uuid(int index, uuid_t *uuid, uint8_t svc_hint);
int mgmt_remove_uuid(int index, uuid_t *uuid);
@@ -60,24 +60,24 @@ int mgmt_load_ltks(int index, GSList *keys);
int mgmt_set_io_capability(int index, uint8_t io_capability);
-int mgmt_create_bonding(int index, bdaddr_t *bdaddr, uint8_t addr_type,
+int mgmt_create_bonding(int index, const bdaddr_t *bdaddr, uint8_t addr_type,
uint8_t io_cap);
-int mgmt_cancel_bonding(int index, bdaddr_t *bdaddr);
+int mgmt_cancel_bonding(int index, const bdaddr_t *bdaddr);
-int mgmt_pincode_reply(int index, bdaddr_t *bdaddr, const char *pin,
+int mgmt_pincode_reply(int index, const bdaddr_t *bdaddr, const char *pin,
size_t pin_len);
-int mgmt_confirm_reply(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
+int mgmt_confirm_reply(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
gboolean success);
-int mgmt_passkey_reply(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
+int mgmt_passkey_reply(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
uint32_t passkey);
int mgmt_read_local_oob_data(int index);
-int mgmt_add_remote_oob_data(int index, bdaddr_t *bdaddr,
+int mgmt_add_remote_oob_data(int index, const bdaddr_t *bdaddr,
uint8_t *hash, uint8_t *randomizer);
-int mgmt_remove_remote_oob_data(int index, bdaddr_t *bdaddr);
+int mgmt_remove_remote_oob_data(int index, const bdaddr_t *bdaddr);
-int mgmt_confirm_name(int index, bdaddr_t *bdaddr, uint8_t bdaddr_type,
+int mgmt_confirm_name(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
gboolean name_known);
int mgmt_ssp_enabled(int index);
--
1.7.9.5
^ permalink raw reply related
* [RFC 4/7] device: Convert device_get_address into simple getter
From: Szymon Janc @ 2012-10-04 12:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1349352364-5491-1-git-send-email-szymon.janc@tieto.com>
This allow to remove number of local variables used only to get device
address and pass it as pointer later on.
bdaddr_type parameter is also removed as there is device_get_addr_type
already present which can be used to get it if needed.
---
attrib/client.c | 42 ++++++++++++++++--------------------------
audio/manager.c | 6 ++----
plugins/wiimote.c | 4 +---
profiles/gatt/gas.c | 20 ++++++++------------
profiles/health/hdp.c | 4 +---
profiles/health/hdp_util.c | 27 +++++++++++++--------------
profiles/input/device.c | 6 +++---
profiles/network/manager.c | 10 +++++-----
profiles/proximity/monitor.c | 11 +++--------
src/adapter.c | 6 ++----
src/device.c | 37 ++++++++++++++-----------------------
src/device.h | 3 +--
src/event.c | 27 +++++++++------------------
src/profile.c | 24 +++++++++---------------
14 files changed, 87 insertions(+), 140 deletions(-)
diff --git a/attrib/client.c b/attrib/client.c
index eea06ae..30513d1 100644
--- a/attrib/client.c
+++ b/attrib/client.c
@@ -222,17 +222,6 @@ static void remove_attio(struct gatt_service *gatt)
}
}
-static void gatt_get_address(struct gatt_service *gatt, bdaddr_t *sba,
- bdaddr_t *dba, uint8_t *bdaddr_type)
-{
- struct btd_device *device = gatt->dev;
- struct btd_adapter *adapter;
-
- adapter = device_get_adapter(device);
- bacpy(sba, adapter_get_address(adapter));
- device_get_address(device, dba, bdaddr_type);
-}
-
static int characteristic_handle_cmp(gconstpointer a, gconstpointer b)
{
const struct characteristic *chr = a;
@@ -684,14 +673,15 @@ static GSList *string_to_characteristic_list(struct gatt_service *gatt,
static GSList *load_characteristics(struct gatt_service *gatt, uint16_t start)
{
+ struct btd_device *device = gatt->dev;
+ struct btd_adapter *adapter = device_get_adapter(device);
GSList *chrs_list;
- bdaddr_t sba, dba;
- uint8_t bdaddr_type;
char *str;
- gatt_get_address(gatt, &sba, &dba, &bdaddr_type);
-
- str = read_device_characteristics(&sba, &dba, bdaddr_type, start);
+ str = read_device_characteristics(adapter_get_address(adapter),
+ device_get_address(device),
+ device_get_addr_type(device),
+ start);
if (str == NULL)
return NULL;
@@ -705,8 +695,7 @@ static GSList *load_characteristics(struct gatt_service *gatt, uint16_t start)
static void store_attribute(struct gatt_service *gatt, uint16_t handle,
uint16_t type, uint8_t *value, gsize len)
{
- bdaddr_t sba, dba;
- uint8_t bdaddr_type;
+ struct btd_device *device = gatt->dev;
bt_uuid_t uuid;
char *str, *tmp;
guint i;
@@ -721,9 +710,9 @@ static void store_attribute(struct gatt_service *gatt, uint16_t handle,
for (i = 0, tmp = str + MAX_LEN_UUID_STR; i < len; i++, tmp += 2)
sprintf(tmp, "%02X", value[i]);
- gatt_get_address(gatt, &sba, &dba, &bdaddr_type);
-
- write_device_attribute(&sba, &dba, bdaddr_type, handle, str);
+ write_device_attribute(adapter_get_address(device_get_adapter(device)),
+ device_get_address(device),
+ device_get_addr_type(device), handle, str);
g_free(str);
}
@@ -964,9 +953,9 @@ static void char_discovered_cb(GSList *characteristics, guint8 status,
struct gatt_service *gatt = current->gatt;
struct gatt_primary *prim = gatt->prim;
uint16_t *previous_end = NULL;
+ struct btd_device *device = gatt->dev;
+ struct btd_adapter *adapter = device_get_adapter(device);
GSList *l;
- bdaddr_t sba, dba;
- uint8_t bdaddr_type;
if (status != 0) {
const char *str = att_ecode2str(status);
@@ -1005,9 +994,10 @@ static void char_discovered_cb(GSList *characteristics, guint8 status,
if (previous_end)
*previous_end = prim->range.end;
- gatt_get_address(gatt, &sba, &dba, &bdaddr_type);
- store_characteristics(&sba, &dba, bdaddr_type, prim->range.start,
- gatt->chars);
+ store_characteristics(adapter_get_address(adapter),
+ device_get_address(device),
+ device_get_addr_type(device),
+ prim->range.start, gatt->chars);
g_slist_foreach(gatt->chars, update_all_chars, gatt);
diff --git a/audio/manager.c b/audio/manager.c
index e6886d7..26cd9bf 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -663,11 +663,9 @@ failed:
static struct audio_device *get_audio_dev(struct btd_device *device)
{
struct btd_adapter *adapter = device_get_adapter(device);
- bdaddr_t dst;
- device_get_address(device, &dst, NULL);
-
- return manager_get_device(adapter_get_address(adapter), &dst, TRUE);
+ return manager_get_device(adapter_get_address(adapter),
+ device_get_address(device), TRUE);
}
static void audio_remove(struct btd_profile *p, struct btd_device *device)
diff --git a/plugins/wiimote.c b/plugins/wiimote.c
index 93d1e2d..5708bf8 100644
--- a/plugins/wiimote.c
+++ b/plugins/wiimote.c
@@ -62,11 +62,9 @@ static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
char *pinbuf, gboolean *display)
{
uint16_t vendor, product;
- bdaddr_t dba;
char addr[18], name[25];
- device_get_address(device, &dba, NULL);
- ba2str(&dba, addr);
+ ba2str(device_get_address(device), addr);
vendor = btd_device_get_vendor(device);
product = btd_device_get_product(device);
diff --git a/profiles/gatt/gas.c b/profiles/gatt/gas.c
index 03bdd5a..82c2ef0 100644
--- a/profiles/gatt/gas.c
+++ b/profiles/gatt/gas.c
@@ -170,8 +170,6 @@ static void ccc_written_cb(guint8 status, const guint8 *pdu, guint16 plen,
gpointer user_data)
{
struct gas *gas = user_data;
- bdaddr_t dba;
- uint8_t bdaddr_type;
if (status) {
error("Write Service Changed CCC failed: %s",
@@ -181,11 +179,11 @@ static void ccc_written_cb(guint8 status, const guint8 *pdu, guint16 plen,
DBG("Service Changed indications enabled");
- device_get_address(gas->device, &dba, &bdaddr_type);
-
write_ctp_handle(adapter_get_address(device_get_adapter(gas->device)),
- &dba, bdaddr_type, GATT_CHARAC_SERVICE_CHANGED,
- gas->changed_handle);
+ device_get_address(gas->device),
+ device_get_addr_type(gas->device),
+ GATT_CHARAC_SERVICE_CHANGED,
+ gas->changed_handle);
}
static void write_ccc(GAttrib *attrib, uint16_t handle, gpointer user_data)
@@ -379,8 +377,6 @@ int gas_register(struct btd_device *device, struct att_range *gap,
struct att_range *gatt)
{
struct gas *gas;
- bdaddr_t dba;
- uint8_t bdaddr_type;
gas = g_new0(struct gas, 1);
gas->gap.start = gap->start;
@@ -396,11 +392,11 @@ int gas_register(struct btd_device *device, struct att_range *gap,
attio_connected_cb,
attio_disconnected_cb, gas);
- device_get_address(gas->device, &dba, &bdaddr_type);
-
read_ctp_handle(adapter_get_address(device_get_adapter(gas->device)),
- &dba, bdaddr_type, GATT_CHARAC_SERVICE_CHANGED,
- &gas->changed_handle);
+ device_get_address(gas->device),
+ device_get_addr_type(gas->device),
+ GATT_CHARAC_SERVICE_CHANGED,
+ &gas->changed_handle);
return 0;
}
diff --git a/profiles/health/hdp.c b/profiles/health/hdp.c
index d07462a..fd21a23 100644
--- a/profiles/health/hdp.c
+++ b/profiles/health/hdp.c
@@ -210,10 +210,8 @@ static int cmp_device(gconstpointer a, gconstpointer b)
static gint cmp_dev_addr(gconstpointer a, gconstpointer dst)
{
const struct hdp_device *device = a;
- bdaddr_t addr;
- device_get_address(device->dev, &addr, NULL);
- return bacmp(&addr, dst);
+ return bacmp(device_get_address(device->dev), dst);
}
static gint cmp_dev_mcl(gconstpointer a, gconstpointer mcl)
diff --git a/profiles/health/hdp_util.c b/profiles/health/hdp_util.c
index 1d9419e..1fd33e5 100644
--- a/profiles/health/hdp_util.c
+++ b/profiles/health/hdp_util.c
@@ -857,12 +857,12 @@ gboolean hdp_get_mdep(struct hdp_device *device, struct hdp_application *app,
GDestroyNotify destroy, GError **err)
{
struct get_mdep_data *mdep_data;
- bdaddr_t dst;
const bdaddr_t *src;
+ const bdaddr_t *dst;
uuid_t uuid;
- device_get_address(device->dev, &dst, NULL);
src = adapter_get_address(device_get_adapter(device->dev));
+ dst = device_get_address(device->dev);
mdep_data = g_new0(struct get_mdep_data, 1);
mdep_data->app = hdp_application_ref(app);
@@ -871,7 +871,7 @@ gboolean hdp_get_mdep(struct hdp_device *device, struct hdp_application *app,
mdep_data->destroy = destroy;
bt_string2uuid(&uuid, HDP_UUID);
- if (bt_search_service(src, &dst, &uuid, get_mdep_cb, mdep_data,
+ if (bt_search_service(src, dst, &uuid, get_mdep_cb, mdep_data,
free_mdep_data) < 0) {
g_set_error(err, HDP_ERROR, HDP_CONNECTION_ERROR,
"Can't get remote SDP record");
@@ -1044,7 +1044,6 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data)
{
struct conn_mcl_data *conn_data = user_data;
GError *gerr = NULL;
- bdaddr_t dst;
uint16_t ccpsm;
if (conn_data->dev->hdp_adapter->mi == NULL) {
@@ -1067,10 +1066,10 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data)
conn_data = con_mcl_data_ref(conn_data);
- device_get_address(conn_data->dev->dev, &dst, NULL);
- if (!mcap_create_mcl(conn_data->dev->hdp_adapter->mi, &dst, ccpsm,
- create_mcl_cb, conn_data,
- destroy_con_mcl_data, &gerr)) {
+ if (!mcap_create_mcl(conn_data->dev->hdp_adapter->mi,
+ device_get_address(conn_data->dev->dev),
+ ccpsm, create_mcl_cb, conn_data,
+ destroy_con_mcl_data, &gerr)) {
con_mcl_data_unref(conn_data);
goto fail;
}
@@ -1087,12 +1086,12 @@ gboolean hdp_establish_mcl(struct hdp_device *device,
GError **err)
{
struct conn_mcl_data *conn_data;
- bdaddr_t dst;
const bdaddr_t *src;
+ const bdaddr_t *dst;
uuid_t uuid;
- device_get_address(device->dev, &dst, NULL);
src = adapter_get_address(device_get_adapter(device->dev));
+ dst = device_get_address(device->dev);
conn_data = g_new0(struct conn_mcl_data, 1);
conn_data->refs = 1;
@@ -1102,7 +1101,7 @@ gboolean hdp_establish_mcl(struct hdp_device *device,
conn_data->dev = health_device_ref(device);
bt_string2uuid(&uuid, HDP_UUID);
- if (bt_search_service(src, &dst, &uuid, search_cb, conn_data,
+ if (bt_search_service(src, dst, &uuid, search_cb, conn_data,
destroy_con_mcl_data) < 0) {
g_set_error(err, HDP_ERROR, HDP_CONNECTION_ERROR,
"Can't get remote SDP record");
@@ -1158,12 +1157,12 @@ gboolean hdp_get_dcpsm(struct hdp_device *device, hdp_continue_dcpsm_f func,
GError **err)
{
struct get_dcpsm_data *dcpsm_data;
- bdaddr_t dst;
const bdaddr_t *src;
+ const bdaddr_t *dst;
uuid_t uuid;
- device_get_address(device->dev, &dst, NULL);
src = adapter_get_address(device_get_adapter(device->dev));
+ dst = device_get_address(device->dev);
dcpsm_data = g_new0(struct get_dcpsm_data, 1);
dcpsm_data->func = func;
@@ -1171,7 +1170,7 @@ gboolean hdp_get_dcpsm(struct hdp_device *device, hdp_continue_dcpsm_f func,
dcpsm_data->destroy = destroy;
bt_string2uuid(&uuid, HDP_UUID);
- if (bt_search_service(src, &dst, &uuid, get_dcpsm_cb, dcpsm_data,
+ if (bt_search_service(src, dst, &uuid, get_dcpsm_cb, dcpsm_data,
free_dcpsm_data) < 0) {
g_set_error(err, HDP_ERROR, HDP_CONNECTION_ERROR,
"Can't get remote SDP record");
diff --git a/profiles/input/device.c b/profiles/input/device.c
index ed50e3b..92e1fa9 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
@@ -782,11 +782,10 @@ static struct input_device *input_device_new(struct btd_device *device,
struct btd_adapter *adapter = device_get_adapter(device);
struct input_device *idev;
char name[249], src_addr[18], dst_addr[18];
- uint8_t dst_type;
idev = g_new0(struct input_device, 1);
bacpy(&idev->src, adapter_get_address(adapter));
- device_get_address(device, &idev->dst, &dst_type);
+ bacpy(&idev->dst, device_get_address(device));
idev->device = btd_device_ref(device);
idev->path = g_strdup(path);
idev->handle = handle;
@@ -795,7 +794,8 @@ static struct input_device *input_device_new(struct btd_device *device,
ba2str(&idev->src, src_addr);
ba2str(&idev->dst, dst_addr);
- if (read_device_name(src_addr, dst_addr, dst_type, name) == 0)
+ if (read_device_name(src_addr, dst_addr, device_get_addr_type(device),
+ name) == 0)
idev->name = g_strdup(name);
if (g_dbus_register_interface(btd_get_dbus_connection(),
diff --git a/profiles/network/manager.c b/profiles/network/manager.c
index 42b5214..049fbc7 100644
--- a/profiles/network/manager.c
+++ b/profiles/network/manager.c
@@ -79,19 +79,19 @@ static int network_probe(struct btd_profile *p, struct btd_device *device,
struct btd_adapter *adapter = device_get_adapter(device);
const gchar *path = device_get_path(device);
const bdaddr_t *src;
- bdaddr_t dst;
+ const bdaddr_t *dst;
DBG("path %s", path);
src = adapter_get_address(adapter);
- device_get_address(device, &dst, NULL);
+ dst = device_get_address(device);
if (g_slist_find_custom(uuids, PANU_UUID, bt_uuid_strcmp))
- connection_register(device, path, src, &dst, BNEP_SVC_PANU);
+ connection_register(device, path, src, dst, BNEP_SVC_PANU);
if (g_slist_find_custom(uuids, GN_UUID, bt_uuid_strcmp))
- connection_register(device, path, src, &dst, BNEP_SVC_GN);
+ connection_register(device, path, src, dst, BNEP_SVC_GN);
if (g_slist_find_custom(uuids, NAP_UUID, bt_uuid_strcmp))
- connection_register(device, path, src, &dst, BNEP_SVC_NAP);
+ connection_register(device, path, src, dst, BNEP_SVC_NAP);
return 0;
}
diff --git a/profiles/proximity/monitor.c b/profiles/proximity/monitor.c
index 03df0e2..1a14265 100644
--- a/profiles/proximity/monitor.c
+++ b/profiles/proximity/monitor.c
@@ -407,7 +407,6 @@ static DBusMessage *set_link_loss_alert(DBusConnection *conn, DBusMessage *msg,
{
struct monitor *monitor = data;
struct btd_device *device = monitor->device;
- bdaddr_t dba;
if (!level_is_valid(level))
return btd_error_invalid_args(msg);
@@ -418,10 +417,9 @@ static DBusMessage *set_link_loss_alert(DBusConnection *conn, DBusMessage *msg,
g_free(monitor->linklosslevel);
monitor->linklosslevel = g_strdup(level);
- device_get_address(device, &dba, NULL);
-
write_proximity_config(adapter_get_address(device_get_adapter(device)),
- &dba, "LinkLossAlertLevel", level);
+ device_get_address(device),
+ "LinkLossAlertLevel", level);
if (monitor->attrib)
write_alert_level(monitor);
@@ -593,14 +591,11 @@ int monitor_register(struct btd_device *device,
{
const char *path = device_get_path(device);
struct monitor *monitor;
- bdaddr_t dba;
char *level;
- device_get_address(device, &dba, NULL);
-
level = read_proximity_config(
adapter_get_address(device_get_adapter(device)),
- &dba, "LinkLossAlertLevel");
+ device_get_address(device), "LinkLossAlertLevel");
monitor = g_new0(struct monitor, 1);
monitor->device = btd_device_ref(device);
diff --git a/src/adapter.c b/src/adapter.c
index 9ed580c..4610b85 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -3614,7 +3614,6 @@ ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
{
GSList *l;
btd_adapter_pin_cb_t cb;
- bdaddr_t dba;
ssize_t ret;
for (l = adapter->pin_callbacks; l != NULL; l = g_slist_next(l)) {
@@ -3624,9 +3623,8 @@ ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
return ret;
}
- device_get_address(dev, &dba, NULL);
-
- return read_pin_code(adapter_get_address(adapter), &dba, pin_buf);
+ return read_pin_code(adapter_get_address(adapter),
+ device_get_address(dev), pin_buf);
}
void btd_adapter_register_powered_callback(struct btd_adapter *adapter,
diff --git a/src/device.c b/src/device.c
index 7133137..58498b2 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1222,28 +1222,25 @@ uint16_t btd_device_get_version(struct btd_device *device)
static void device_remove_stored(struct btd_device *device)
{
- const bdaddr_t *src;
- bdaddr_t dst;
- uint8_t dst_type;
-
- src = adapter_get_address(device->adapter);
- device_get_address(device, &dst, &dst_type);
+ const bdaddr_t *src = adapter_get_address(device->adapter);
+ uint8_t dst_type = device->bdaddr_type;
- delete_entry(src, "profiles", &dst, dst_type);
- delete_entry(src, "trusts", &dst, dst_type);
+ delete_entry(src, "profiles", &device->bdaddr, dst_type);
+ delete_entry(src, "trusts", &device->bdaddr, dst_type);
if (device_is_bonded(device)) {
- delete_entry(src, "linkkeys", &dst, dst_type);
- delete_entry(src, "aliases", &dst, dst_type);
- delete_entry(src, "longtermkeys", &dst, dst_type);
+ delete_entry(src, "linkkeys", &device->bdaddr, dst_type);
+ delete_entry(src, "aliases", &device->bdaddr, dst_type);
+ delete_entry(src, "longtermkeys", &device->bdaddr, dst_type);
device_set_bonded(device, FALSE);
device->paired = FALSE;
- btd_adapter_remove_bonding(device->adapter, &dst, dst_type);
+ btd_adapter_remove_bonding(device->adapter, &device->bdaddr,
+ dst_type);
}
- delete_all_records(src, &dst, dst_type);
- delete_device_service(src, &dst, dst_type);
+ delete_all_records(src, &device->bdaddr, dst_type);
+ delete_device_service(src, &device->bdaddr, dst_type);
if (device->blocked)
device_unblock(device, TRUE, FALSE);
@@ -1883,12 +1880,9 @@ static char *primary_list_to_string(GSList *primary_list)
static void store_services(struct btd_device *device)
{
struct btd_adapter *adapter = device->adapter;
- bdaddr_t dba;
char *str = primary_list_to_string(device->primaries);
- device_get_address(device, &dba, NULL);
-
- write_device_services(adapter_get_address(adapter), &dba,
+ write_device_services(adapter_get_address(adapter), &device->bdaddr,
device->bdaddr_type, str);
g_free(str);
@@ -2317,12 +2311,9 @@ struct btd_adapter *device_get_adapter(struct btd_device *device)
return device->adapter;
}
-void device_get_address(struct btd_device *device, bdaddr_t *bdaddr,
- uint8_t *bdaddr_type)
+bdaddr_t *device_get_address(struct btd_device *device)
{
- bacpy(bdaddr, &device->bdaddr);
- if (bdaddr_type != NULL)
- *bdaddr_type = device->bdaddr_type;
+ return &device->bdaddr;
}
void device_set_addr_type(struct btd_device *device, uint8_t bdaddr_type)
diff --git a/src/device.h b/src/device.h
index 462b9a1..f919af4 100644
--- a/src/device.h
+++ b/src/device.h
@@ -64,8 +64,7 @@ void btd_device_add_uuid(struct btd_device *device, const char *uuid);
void device_probe_profile(gpointer a, gpointer b);
void device_remove_profile(gpointer a, gpointer b);
struct btd_adapter *device_get_adapter(struct btd_device *device);
-void device_get_address(struct btd_device *device, bdaddr_t *bdaddr,
- uint8_t *bdaddr_type);
+bdaddr_t *device_get_address(struct btd_device *device);
void device_set_addr_type(struct btd_device *device, uint8_t bdaddr_type);
uint8_t device_get_addr_type(struct btd_device *device);
const gchar *device_get_path(struct btd_device *device);
diff --git a/src/event.c b/src/event.c
index 9626053..84c7f88 100644
--- a/src/event.c
+++ b/src/event.c
@@ -90,20 +90,18 @@ static void pincode_cb(struct agent *agent, DBusError *derr,
const char *pincode, struct btd_device *device)
{
struct btd_adapter *adapter = device_get_adapter(device);
- bdaddr_t dba;
int err;
- device_get_address(device, &dba, NULL);
-
if (derr) {
- err = btd_adapter_pincode_reply(adapter, &dba, NULL, 0);
+ err = btd_adapter_pincode_reply(adapter,
+ device_get_address(device), NULL, 0);
if (err < 0)
goto fail;
return;
}
- err = btd_adapter_pincode_reply(adapter, &dba, pincode,
- pincode ? strlen(pincode) : 0);
+ err = btd_adapter_pincode_reply(adapter, device_get_address(device),
+ pincode, pincode ? strlen(pincode) : 0);
if (err < 0)
goto fail;
@@ -141,13 +139,9 @@ int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure)
static int confirm_reply(struct btd_adapter *adapter,
struct btd_device *device, gboolean success)
{
- bdaddr_t bdaddr;
- uint8_t bdaddr_type;
-
- device_get_address(device, &bdaddr, &bdaddr_type);
-
- return btd_adapter_confirm_reply(adapter, &bdaddr, bdaddr_type,
- success);
+ return btd_adapter_confirm_reply(adapter, device_get_address(device),
+ device_get_addr_type(device),
+ success);
}
static void confirm_cb(struct agent *agent, DBusError *err, void *user_data)
@@ -164,15 +158,12 @@ static void passkey_cb(struct agent *agent, DBusError *err, uint32_t passkey,
{
struct btd_device *device = user_data;
struct btd_adapter *adapter = device_get_adapter(device);
- bdaddr_t bdaddr;
- uint8_t bdaddr_type;
-
- device_get_address(device, &bdaddr, &bdaddr_type);
if (err)
passkey = INVALID_PASSKEY;
- btd_adapter_passkey_reply(adapter, &bdaddr, bdaddr_type, passkey);
+ btd_adapter_passkey_reply(adapter, device_get_address(device),
+ device_get_addr_type(device), passkey);
}
int btd_event_user_confirm(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
diff --git a/src/profile.c b/src/profile.c
index 46b2e21..eb63e1e 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -184,13 +184,9 @@ static void ext_io_destroy(gpointer p)
ext_cancel(ext);
}
- if (ext_io->resolving) {
- bdaddr_t dst;
-
- device_get_address(ext_io->device, &dst, NULL);
-
- bt_cancel_discovery(adapter_get_address(ext_io->adapter), &dst);
- }
+ if (ext_io->resolving)
+ bt_cancel_discovery(adapter_get_address(ext_io->adapter),
+ device_get_address(ext_io->device));
if (ext_io->rec_handle)
remove_record_from_server(ext_io->rec_handle);
@@ -720,7 +716,6 @@ static void record_cb(sdp_list_t *recs, int err, gpointer user_data)
{
struct ext_io *conn = user_data;
struct ext_profile *ext = conn->ext;
- bdaddr_t dst;
sdp_list_t *r;
conn->resolving = false;
@@ -772,9 +767,8 @@ static void record_cb(sdp_list_t *recs, int err, gpointer user_data)
goto failed;
}
- device_get_address(conn->device, &dst, NULL);
-
- err = connect_io(conn, adapter_get_address(conn->adapter), &dst);
+ err = connect_io(conn, adapter_get_address(conn->adapter),
+ device_get_address(conn->device));
if (err < 0) {
error("Connecting %s failed: %s", ext->name, strerror(-err));
goto failed;
@@ -810,7 +804,6 @@ static int ext_connect_dev(struct btd_device *dev, struct btd_profile *profile,
struct btd_adapter *adapter;
struct ext_io *conn;
struct ext_profile *ext;
- bdaddr_t dst;
int err;
ext = find_ext(profile);
@@ -818,15 +811,16 @@ static int ext_connect_dev(struct btd_device *dev, struct btd_profile *profile,
return -ENOENT;
adapter = device_get_adapter(dev);
- device_get_address(dev, &dst, NULL);
conn = g_new0(struct ext_io, 1);
conn->ext = ext;
if (ext->psm || ext->chan)
- err = connect_io(conn, adapter_get_address(adapter), &dst);
+ err = connect_io(conn, adapter_get_address(adapter),
+ device_get_address(dev));
else
- err = resolve_service(conn, adapter_get_address(adapter), &dst);
+ err = resolve_service(conn, adapter_get_address(adapter),
+ device_get_address(dev));
if (err < 0)
goto failed;
--
1.7.9.5
^ permalink raw reply related
* [RFC 3/7] adapter: Constify pointer returned by adapter_get_address
From: Szymon Janc @ 2012-10-04 12:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1349352364-5491-1-git-send-email-szymon.janc@tieto.com>
---
audio/manager.c | 4 ++--
profiles/gatt/gas.c | 10 ++++++----
profiles/health/hdp_util.c | 9 ++++++---
profiles/health/mcap.c | 2 +-
profiles/health/mcap_lib.h | 2 +-
profiles/network/connection.c | 6 +++---
profiles/network/connection.h | 2 +-
profiles/network/manager.c | 3 ++-
profiles/proximity/monitor.c | 4 ++--
profiles/sap/server.c | 2 +-
profiles/sap/server.h | 2 +-
src/adapter.c | 2 +-
src/adapter.h | 2 +-
src/attrib-server.c | 2 +-
src/device.c | 5 +++--
src/eir.c | 2 +-
src/eir.h | 2 +-
src/profile.c | 9 ++++++---
18 files changed, 40 insertions(+), 30 deletions(-)
diff --git a/audio/manager.c b/audio/manager.c
index 6ddea5a..e6886d7 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -507,7 +507,7 @@ static int headset_server_init(struct audio_adapter *adapter)
GError *err = NULL;
uint32_t features;
GIOChannel *io;
- bdaddr_t *src;
+ const bdaddr_t *src;
if (config) {
gboolean tmp;
@@ -608,7 +608,7 @@ static int gateway_server_init(struct audio_adapter *adapter)
gboolean master = TRUE;
GError *err = NULL;
GIOChannel *io;
- bdaddr_t *src;
+ const bdaddr_t *src;
if (config) {
gboolean tmp;
diff --git a/profiles/gatt/gas.c b/profiles/gatt/gas.c
index f0fcbe7..03bdd5a 100644
--- a/profiles/gatt/gas.c
+++ b/profiles/gatt/gas.c
@@ -86,8 +86,9 @@ static inline int create_filename(char *buf, size_t size,
return create_name(buf, size, STORAGEDIR, addr, name);
}
-static int write_ctp_handle(bdaddr_t *sba, bdaddr_t *dba, uint8_t bdaddr_type,
- uint16_t uuid, uint16_t handle)
+static int write_ctp_handle(const bdaddr_t *sba, const bdaddr_t *dba,
+ uint8_t bdaddr_type, uint16_t uuid,
+ uint16_t handle)
{
char filename[PATH_MAX + 1], addr[18], key[27], value[7];
@@ -104,8 +105,9 @@ static int write_ctp_handle(bdaddr_t *sba, bdaddr_t *dba, uint8_t bdaddr_type,
return textfile_put(filename, key, value);
}
-static int read_ctp_handle(bdaddr_t *sba, bdaddr_t *dba, uint8_t bdaddr_type,
- uint16_t uuid, uint16_t *value)
+static int read_ctp_handle(const bdaddr_t *sba, const bdaddr_t *dba,
+ uint8_t bdaddr_type, uint16_t uuid,
+ uint16_t *value)
{
char filename[PATH_MAX + 1], addr[18], key[27];
char *str;
diff --git a/profiles/health/hdp_util.c b/profiles/health/hdp_util.c
index 931c1dd..1d9419e 100644
--- a/profiles/health/hdp_util.c
+++ b/profiles/health/hdp_util.c
@@ -857,7 +857,8 @@ gboolean hdp_get_mdep(struct hdp_device *device, struct hdp_application *app,
GDestroyNotify destroy, GError **err)
{
struct get_mdep_data *mdep_data;
- bdaddr_t dst, *src;
+ bdaddr_t dst;
+ const bdaddr_t *src;
uuid_t uuid;
device_get_address(device->dev, &dst, NULL);
@@ -1086,7 +1087,8 @@ gboolean hdp_establish_mcl(struct hdp_device *device,
GError **err)
{
struct conn_mcl_data *conn_data;
- bdaddr_t dst, *src;
+ bdaddr_t dst;
+ const bdaddr_t *src;
uuid_t uuid;
device_get_address(device->dev, &dst, NULL);
@@ -1156,7 +1158,8 @@ gboolean hdp_get_dcpsm(struct hdp_device *device, hdp_continue_dcpsm_f func,
GError **err)
{
struct get_dcpsm_data *dcpsm_data;
- bdaddr_t dst, *src;
+ bdaddr_t dst;
+ const bdaddr_t *src;
uuid_t uuid;
device_get_address(device->dev, &dst, NULL);
diff --git a/profiles/health/mcap.c b/profiles/health/mcap.c
index 86f0575..57ea1c3 100644
--- a/profiles/health/mcap.c
+++ b/profiles/health/mcap.c
@@ -1984,7 +1984,7 @@ drop:
g_io_channel_shutdown(chan, TRUE, NULL);
}
-struct mcap_instance *mcap_create_instance(bdaddr_t *src,
+struct mcap_instance *mcap_create_instance(const bdaddr_t *src,
BtIOSecLevel sec,
uint16_t ccpsm,
uint16_t dcpsm,
diff --git a/profiles/health/mcap_lib.h b/profiles/health/mcap_lib.h
index 8fcc141..603ccc0 100644
--- a/profiles/health/mcap_lib.h
+++ b/profiles/health/mcap_lib.h
@@ -196,7 +196,7 @@ void mcap_sync_set_req(struct mcap_mcl *mcl,
/* MCAP main operations */
-struct mcap_instance *mcap_create_instance(bdaddr_t *src,
+struct mcap_instance *mcap_create_instance(const bdaddr_t *src,
BtIOSecLevel sec, uint16_t ccpsm,
uint16_t dcpsm,
mcap_mcl_event_cb mcl_connected,
diff --git a/profiles/network/connection.c b/profiles/network/connection.c
index 7688beb..9646e5a 100644
--- a/profiles/network/connection.c
+++ b/profiles/network/connection.c
@@ -594,8 +594,8 @@ void connection_unregister(const char *path)
}
static struct network_peer *create_peer(struct btd_device *device,
- const char *path, bdaddr_t *src,
- bdaddr_t *dst)
+ const char *path, const bdaddr_t *src,
+ const bdaddr_t *dst)
{
struct network_peer *peer;
@@ -623,7 +623,7 @@ static struct network_peer *create_peer(struct btd_device *device,
}
int connection_register(struct btd_device *device, const char *path,
- bdaddr_t *src, bdaddr_t *dst, uint16_t id)
+ const bdaddr_t *src, const bdaddr_t *dst, uint16_t id)
{
struct network_peer *peer;
struct network_conn *nc;
diff --git a/profiles/network/connection.h b/profiles/network/connection.h
index 2e33c55..efc4ccb 100644
--- a/profiles/network/connection.h
+++ b/profiles/network/connection.h
@@ -22,5 +22,5 @@
*/
int connection_register(struct btd_device *device, const char *path,
- bdaddr_t *src, bdaddr_t *dst, uint16_t id);
+ const bdaddr_t *src, const bdaddr_t *dst, uint16_t id);
void connection_unregister(const char *path);
diff --git a/profiles/network/manager.c b/profiles/network/manager.c
index 661181d..42b5214 100644
--- a/profiles/network/manager.c
+++ b/profiles/network/manager.c
@@ -78,7 +78,8 @@ static int network_probe(struct btd_profile *p, struct btd_device *device,
{
struct btd_adapter *adapter = device_get_adapter(device);
const gchar *path = device_get_path(device);
- bdaddr_t *src, dst;
+ const bdaddr_t *src;
+ bdaddr_t dst;
DBG("path %s", path);
diff --git a/profiles/proximity/monitor.c b/profiles/proximity/monitor.c
index 477eeea..03df0e2 100644
--- a/profiles/proximity/monitor.c
+++ b/profiles/proximity/monitor.c
@@ -93,7 +93,7 @@ static inline int create_filename(char *buf, size_t size,
return create_name(buf, size, STORAGEDIR, addr, name);
}
-static int write_proximity_config(bdaddr_t *sba, bdaddr_t *dba,
+static int write_proximity_config(const bdaddr_t *sba, const bdaddr_t *dba,
const char *alert, const char *level)
{
char filename[PATH_MAX + 1], addr[18], key[38];
@@ -109,7 +109,7 @@ static int write_proximity_config(bdaddr_t *sba, bdaddr_t *dba,
return textfile_put(filename, key, level);
}
-static char *read_proximity_config(bdaddr_t *sba, bdaddr_t *dba,
+static char *read_proximity_config(const bdaddr_t *sba, const bdaddr_t *dba,
const char *alert)
{
char filename[PATH_MAX + 1], addr[18], key[38];
diff --git a/profiles/sap/server.c b/profiles/sap/server.c
index 6072432..9a7cb72 100644
--- a/profiles/sap/server.c
+++ b/profiles/sap/server.c
@@ -1366,7 +1366,7 @@ static void destroy_sap_interface(void *data)
server_remove(server);
}
-int sap_server_register(const char *path, bdaddr_t *src)
+int sap_server_register(const char *path, const bdaddr_t *src)
{
sdp_record_t *record = NULL;
GError *gerr = NULL;
diff --git a/profiles/sap/server.h b/profiles/sap/server.h
index 9ea9a78..e636d91 100644
--- a/profiles/sap/server.h
+++ b/profiles/sap/server.h
@@ -20,5 +20,5 @@
#include <gdbus.h>
-int sap_server_register(const char *path, bdaddr_t *src);
+int sap_server_register(const char *path, const bdaddr_t *src);
void sap_server_unregister(const char *path);
diff --git a/src/adapter.c b/src/adapter.c
index 166b64f..9ed580c 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2666,7 +2666,7 @@ const gchar *adapter_get_path(struct btd_adapter *adapter)
return adapter->path;
}
-bdaddr_t *adapter_get_address(struct btd_adapter *adapter)
+const bdaddr_t *adapter_get_address(struct btd_adapter *adapter)
{
return &adapter->bdaddr;
}
diff --git a/src/adapter.h b/src/adapter.h
index f3599b5..d4fb14b 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -122,7 +122,7 @@ void adapter_set_discovering(struct btd_adapter *adapter,
gboolean discovering);
uint16_t adapter_get_dev_id(struct btd_adapter *adapter);
const gchar *adapter_get_path(struct btd_adapter *adapter);
-bdaddr_t *adapter_get_address(struct btd_adapter *adapter);
+const bdaddr_t *adapter_get_address(struct btd_adapter *adapter);
struct remote_dev_info *adapter_search_found_devices(struct btd_adapter *adapter,
bdaddr_t *bdaddr);
void adapter_update_found_devices(struct btd_adapter *adapter,
diff --git a/src/attrib-server.c b/src/attrib-server.c
index e7e2531..9155ab2 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
@@ -1237,7 +1237,7 @@ int btd_adapter_gatt_server_start(struct btd_adapter *adapter)
{
struct gatt_server *server;
GError *gerr = NULL;
- bdaddr_t *addr;
+ const bdaddr_t *addr;
DBG("Start GATT server in hci%d", adapter_get_dev_id(adapter));
diff --git a/src/device.c b/src/device.c
index 499dbc2..7133137 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1116,7 +1116,7 @@ struct btd_device *device_create(struct btd_adapter *adapter,
gchar *address_up;
struct btd_device *device;
const gchar *adapter_path = adapter_get_path(adapter);
- bdaddr_t *src;
+ const bdaddr_t *src;
char srcaddr[18], alias[MAX_NAME_LENGTH + 1];
uint16_t vendor, product, version;
@@ -1222,7 +1222,8 @@ uint16_t btd_device_get_version(struct btd_device *device)
static void device_remove_stored(struct btd_device *device)
{
- bdaddr_t *src, dst;
+ const bdaddr_t *src;
+ bdaddr_t dst;
uint8_t dst_type;
src = adapter_get_address(device->adapter);
diff --git a/src/eir.c b/src/eir.c
index d9fdb32..1f8d229 100644
--- a/src/eir.c
+++ b/src/eir.c
@@ -280,7 +280,7 @@ static void eir_generate_uuid128(sdp_list_t *list, uint8_t *ptr,
}
}
-int eir_create_oob(bdaddr_t *addr, const char *name, uint32_t cod,
+int eir_create_oob(const bdaddr_t *addr, const char *name, uint32_t cod,
uint8_t *hash, uint8_t *randomizer,
uint16_t did_vendor, uint16_t did_product,
uint16_t did_version, uint16_t did_source,
diff --git a/src/eir.h b/src/eir.h
index d8c5e32..1ad0832 100644
--- a/src/eir.h
+++ b/src/eir.h
@@ -53,7 +53,7 @@ struct eir_data {
void eir_data_free(struct eir_data *eir);
int eir_parse(struct eir_data *eir, uint8_t *eir_data, uint8_t eir_len);
int eir_parse_oob(struct eir_data *eir, uint8_t *eir_data, uint16_t eir_len);
-int eir_create_oob(bdaddr_t *addr, const char *name, uint32_t cod,
+int eir_create_oob(const bdaddr_t *addr, const char *name, uint32_t cod,
uint8_t *hash, uint8_t *randomizer,
uint16_t did_vendor, uint16_t did_product,
uint16_t did_version, uint16_t did_source,
diff --git a/src/profile.c b/src/profile.c
index c10e315..46b2e21 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -470,7 +470,8 @@ static sdp_record_t *ext_get_record(struct ext_profile *ext)
return NULL;
}
-static uint16_t ext_register_record(struct ext_profile *ext, bdaddr_t *src)
+static uint16_t ext_register_record(struct ext_profile *ext,
+ const bdaddr_t *src)
{
sdp_record_t *rec;
@@ -661,7 +662,8 @@ static void ext_device_remove(struct btd_profile *p, struct btd_device *dev)
remove_connect(ext, dev);
}
-static int connect_io(struct ext_io *conn, bdaddr_t *src, bdaddr_t *dst)
+static int connect_io(struct ext_io *conn, const bdaddr_t *src,
+ const bdaddr_t *dst)
{
struct ext_profile *ext = conn->ext;
GError *gerr = NULL;
@@ -786,7 +788,8 @@ failed:
ext_io_destroy(conn);
}
-static int resolve_service(struct ext_io *conn, bdaddr_t *src, bdaddr_t *dst)
+static int resolve_service(struct ext_io *conn, const bdaddr_t *src,
+ const bdaddr_t *dst)
{
struct ext_profile *ext = conn->ext;
uuid_t uuid;
--
1.7.9.5
^ permalink raw reply related
* [RFC 2/7] storage: Constify bdaddr_t pointers parameters
From: Szymon Janc @ 2012-10-04 12:05 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1349352364-5491-1-git-send-email-szymon.janc@tieto.com>
---
src/storage.c | 97 +++++++++++++++++++++++++++++++--------------------------
src/storage.h | 95 ++++++++++++++++++++++++++++++-------------------------
2 files changed, 105 insertions(+), 87 deletions(-)
diff --git a/src/storage.c b/src/storage.c
index 96db6f5..df6b0aa 100644
--- a/src/storage.c
+++ b/src/storage.c
@@ -110,7 +110,7 @@ int write_device_alias(const char *src, const char *dst, uint8_t dst_type,
return textfile_put(filename, key, alias);
}
-int write_discoverable_timeout(bdaddr_t *bdaddr, int timeout)
+int write_discoverable_timeout(const bdaddr_t *bdaddr, int timeout)
{
char filename[PATH_MAX + 1], str[32];
@@ -143,7 +143,7 @@ int read_discoverable_timeout(const char *src, int *timeout)
return 0;
}
-int write_pairable_timeout(bdaddr_t *bdaddr, int timeout)
+int write_pairable_timeout(const bdaddr_t *bdaddr, int timeout)
{
char filename[PATH_MAX + 1], str[32];
@@ -176,7 +176,7 @@ int read_pairable_timeout(const char *src, int *timeout)
return 0;
}
-int write_device_mode(bdaddr_t *bdaddr, const char *mode)
+int write_device_mode(const bdaddr_t *bdaddr, const char *mode)
{
char filename[PATH_MAX + 1];
@@ -226,7 +226,7 @@ int read_on_mode(const char *src, char *mode, int length)
return 0;
}
-int write_local_name(bdaddr_t *bdaddr, const char *name)
+int write_local_name(const bdaddr_t *bdaddr, const char *name)
{
char filename[PATH_MAX + 1], str[249];
int i;
@@ -245,7 +245,7 @@ int write_local_name(bdaddr_t *bdaddr, const char *name)
return textfile_put(filename, "name", str);
}
-int read_local_name(bdaddr_t *bdaddr, char *name)
+int read_local_name(const bdaddr_t *bdaddr, char *name)
{
char filename[PATH_MAX + 1], *str;
int len;
@@ -266,7 +266,7 @@ int read_local_name(bdaddr_t *bdaddr, char *name)
return 0;
}
-int write_local_class(bdaddr_t *bdaddr, uint8_t *class)
+int write_local_class(const bdaddr_t *bdaddr, uint8_t *class)
{
char filename[PATH_MAX + 1], str[9];
@@ -279,7 +279,7 @@ int write_local_class(bdaddr_t *bdaddr, uint8_t *class)
return textfile_put(filename, "class", str);
}
-int read_local_class(bdaddr_t *bdaddr, uint8_t *class)
+int read_local_class(const bdaddr_t *bdaddr, uint8_t *class)
{
char filename[PATH_MAX + 1], tmp[3], *str;
int i;
@@ -301,8 +301,8 @@ int read_local_class(bdaddr_t *bdaddr, uint8_t *class)
return 0;
}
-int read_remote_appearance(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- uint16_t *appearance)
+int read_remote_appearance(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, uint16_t *appearance)
{
char filename[PATH_MAX + 1], key[20], *str;
@@ -325,7 +325,7 @@ int read_remote_appearance(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
return 0;
}
-int write_remote_appearance(bdaddr_t *local, bdaddr_t *peer,
+int write_remote_appearance(const bdaddr_t *local, const bdaddr_t *peer,
uint8_t bdaddr_type, uint16_t appearance)
{
char filename[PATH_MAX + 1], key[20], str[7];
@@ -342,7 +342,8 @@ int write_remote_appearance(bdaddr_t *local, bdaddr_t *peer,
return textfile_put(filename, key, str);
}
-int write_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class)
+int write_remote_class(const bdaddr_t *local, const bdaddr_t *peer,
+ uint32_t class)
{
char filename[PATH_MAX + 1], addr[18], str[9];
@@ -356,7 +357,8 @@ int write_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class)
return textfile_put(filename, addr, str);
}
-int read_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t *class)
+int read_remote_class(const bdaddr_t *local, const bdaddr_t *peer,
+ uint32_t *class)
{
char filename[PATH_MAX + 1], addr[18], *str;
@@ -378,8 +380,8 @@ int read_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t *class)
return 0;
}
-int write_device_name(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- const char *name)
+int write_device_name(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, const char *name)
{
char filename[PATH_MAX + 1], key[20], str[HCI_MAX_NAME_LENGTH + 1];
int i;
@@ -433,8 +435,9 @@ done:
return 0;
}
-int write_remote_eir(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- uint8_t *data, uint8_t data_len)
+int write_remote_eir(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, uint8_t *data,
+ uint8_t data_len)
{
char filename[PATH_MAX + 1], key[20], str[481];
int i;
@@ -453,8 +456,8 @@ int write_remote_eir(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
return textfile_put(filename, key, str);
}
-int read_remote_eir(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- uint8_t *data)
+int read_remote_eir(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, uint8_t *data)
{
char filename[PATH_MAX + 1], key[18], *str;
int i;
@@ -494,8 +497,9 @@ done:
return 0;
}
-int write_version_info(bdaddr_t *local, bdaddr_t *peer, uint16_t manufacturer,
- uint8_t lmp_ver, uint16_t lmp_subver)
+int write_version_info(const bdaddr_t *local, const bdaddr_t *peer,
+ uint16_t manufacturer, uint8_t lmp_ver,
+ uint16_t lmp_subver)
{
char filename[PATH_MAX + 1], addr[18], str[16];
@@ -510,7 +514,7 @@ int write_version_info(bdaddr_t *local, bdaddr_t *peer, uint16_t manufacturer,
return textfile_put(filename, addr, str);
}
-int write_features_info(bdaddr_t *local, bdaddr_t *peer,
+int write_features_info(const bdaddr_t *local, const bdaddr_t *peer,
unsigned char *page1, unsigned char *page2)
{
char filename[PATH_MAX + 1], addr[18];
@@ -554,7 +558,7 @@ static int decode_bytes(const char *str, unsigned char *bytes, size_t len)
return 0;
}
-int read_remote_features(bdaddr_t *local, bdaddr_t *peer,
+int read_remote_features(const bdaddr_t *local, const bdaddr_t *peer,
unsigned char *page1, unsigned char *page2)
{
char filename[PATH_MAX + 1], addr[18], *str;
@@ -587,8 +591,8 @@ int read_remote_features(bdaddr_t *local, bdaddr_t *peer,
return err;
}
-int write_lastseen_info(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- struct tm *tm)
+int write_lastseen_info(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, struct tm *tm)
{
char filename[PATH_MAX + 1], key[20], str[24];
@@ -605,8 +609,8 @@ int write_lastseen_info(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
return textfile_put(filename, key, str);
}
-int write_lastused_info(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- struct tm *tm)
+int write_lastused_info(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, struct tm *tm)
{
char filename[PATH_MAX + 1], key[20], str[24];
@@ -623,8 +627,9 @@ int write_lastused_info(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
return textfile_put(filename, key, str);
}
-int write_link_key(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- unsigned char *key, uint8_t type, int length)
+int write_link_key(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, unsigned char *key,
+ uint8_t type, int length)
{
char filename[PATH_MAX + 1], addr[20], str[38];
int i;
@@ -653,8 +658,9 @@ int write_link_key(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
return textfile_put(filename, addr, str);
}
-int read_link_key(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- unsigned char *key, uint8_t *type)
+int read_link_key(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, unsigned char *key,
+ uint8_t *type)
{
char filename[PATH_MAX + 1], addr[20], tmp[3], *str;
int i;
@@ -697,7 +703,7 @@ done:
return 0;
}
-ssize_t read_pin_code(bdaddr_t *local, bdaddr_t *peer, char *pin)
+ssize_t read_pin_code(const bdaddr_t *local, const bdaddr_t *peer, char *pin)
{
char filename[PATH_MAX + 1], addr[18], *str;
ssize_t len;
@@ -760,8 +766,8 @@ gboolean read_trust(const bdaddr_t *local, const char *addr, uint8_t addr_type)
return ret;
}
-int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, uint8_t dst_type,
- const char *profiles)
+int write_device_profiles(const bdaddr_t *src, const bdaddr_t *dst,
+ uint8_t dst_type, const char *profiles)
{
char filename[PATH_MAX + 1], key[20];
@@ -778,7 +784,7 @@ int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, uint8_t dst_type,
return textfile_put(filename, key, profiles);
}
-int delete_entry(bdaddr_t *src, const char *storage, bdaddr_t *dst,
+int delete_entry(const bdaddr_t *src, const char *storage, const bdaddr_t *dst,
uint8_t dst_type)
{
char filename[PATH_MAX + 1], key[20];
@@ -1147,7 +1153,7 @@ int read_device_id(const gchar *srcaddr, const gchar *dstaddr,
return 0;
}
-int write_device_pairable(bdaddr_t *bdaddr, gboolean mode)
+int write_device_pairable(const bdaddr_t *bdaddr, gboolean mode)
{
char filename[PATH_MAX + 1];
@@ -1158,7 +1164,7 @@ int write_device_pairable(bdaddr_t *bdaddr, gboolean mode)
return textfile_put(filename, "pairable", mode ? "yes" : "no");
}
-int read_device_pairable(bdaddr_t *bdaddr, gboolean *mode)
+int read_device_pairable(const bdaddr_t *bdaddr, gboolean *mode)
{
char filename[PATH_MAX + 1], *str;
@@ -1359,8 +1365,9 @@ int read_device_attributes(const bdaddr_t *sba, textfile_cb func, void *data)
return textfile_foreach(filename, func, data);
}
-int read_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- uint16_t handle, uint16_t *value)
+int read_device_ccc(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, uint16_t handle,
+ uint16_t *value)
{
char filename[PATH_MAX + 1], addr[18], key[25];
char *str;
@@ -1386,8 +1393,9 @@ int read_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
return err;
}
-int write_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- uint16_t handle, uint16_t value)
+int write_device_ccc(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, uint16_t handle,
+ uint16_t value)
{
char filename[PATH_MAX + 1], addr[18], key[25], config[5];
@@ -1403,7 +1411,7 @@ int write_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
return textfile_put(filename, key, config);
}
-void delete_device_ccc(bdaddr_t *local, bdaddr_t *peer)
+void delete_device_ccc(const bdaddr_t *local, const bdaddr_t *peer)
{
char filename[PATH_MAX + 1], addr[18];
@@ -1414,8 +1422,8 @@ void delete_device_ccc(bdaddr_t *local, bdaddr_t *peer)
delete_by_pattern(filename, addr);
}
-int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- const char *key)
+int write_longtermkeys(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, const char *key)
{
char filename[PATH_MAX + 1], addr[20];
@@ -1432,7 +1440,8 @@ int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
return textfile_put(filename, addr, key);
}
-gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type)
+gboolean has_longtermkeys(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type)
{
char filename[PATH_MAX + 1], key[20], *str;
diff --git a/src/storage.h b/src/storage.h
index 6a8df83..741b8a7 100644
--- a/src/storage.h
+++ b/src/storage.h
@@ -27,50 +27,57 @@ int read_device_alias(const char *src, const char *dst, uint8_t dst_type,
char *alias, size_t size);
int write_device_alias(const char *src, const char *dst, uint8_t dst_type,
const char *alias);
-int write_discoverable_timeout(bdaddr_t *bdaddr, int timeout);
+int write_discoverable_timeout(const bdaddr_t *bdaddr, int timeout);
int read_discoverable_timeout(const char *src, int *timeout);
-int write_pairable_timeout(bdaddr_t *bdaddr, int timeout);
+int write_pairable_timeout(const bdaddr_t *bdaddr, int timeout);
int read_pairable_timeout(const char *src, int *timeout);
-int write_device_mode(bdaddr_t *bdaddr, const char *mode);
+int write_device_mode(const bdaddr_t *bdaddr, const char *mode);
int read_device_mode(const char *src, char *mode, int length);
int read_on_mode(const char *src, char *mode, int length);
-int write_local_name(bdaddr_t *bdaddr, const char *name);
-int read_local_name(bdaddr_t *bdaddr, char *name);
-int write_local_class(bdaddr_t *bdaddr, uint8_t *class);
-int read_local_class(bdaddr_t *bdaddr, uint8_t *class);
-int write_remote_appearance(bdaddr_t *local, bdaddr_t *peer,
+int write_local_name(const bdaddr_t *bdaddr, const char *name);
+int read_local_name(const bdaddr_t *bdaddr, char *name);
+int write_local_class(const bdaddr_t *bdaddr, uint8_t *class);
+int read_local_class(const bdaddr_t *bdaddr, uint8_t *class);
+int write_remote_appearance(const bdaddr_t *local, const bdaddr_t *peer,
uint8_t bdaddr_type, uint16_t appearance);
-int read_remote_appearance(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- uint16_t *appearance);
-int write_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class);
-int read_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t *class);
-int write_device_name(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- const char *name);
+int read_remote_appearance(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, uint16_t *appearance);
+int write_remote_class(const bdaddr_t *local, const bdaddr_t *peer,
+ uint32_t class);
+int read_remote_class(const bdaddr_t *local, const bdaddr_t *peer,
+ uint32_t *class);
+int write_device_name(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, const char *name);
int read_device_name(const char *src, const char *dst, uint8_t dst_type,
char *name);
-int write_remote_eir(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- uint8_t *data, uint8_t data_len);
-int read_remote_eir(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- uint8_t *data);
-int write_version_info(bdaddr_t *local, bdaddr_t *peer, uint16_t manufacturer, uint8_t lmp_ver, uint16_t lmp_subver);
-int write_features_info(bdaddr_t *local, bdaddr_t *peer, unsigned char *page1, unsigned char *page2);
-int read_remote_features(bdaddr_t *local, bdaddr_t *peer, unsigned char *page1, unsigned char *page2);
-int write_lastseen_info(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- struct tm *tm);
-int write_lastused_info(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- struct tm *tm);
-int write_link_key(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- unsigned char *key, uint8_t type, int length);
-int read_link_key(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
- unsigned char *key, uint8_t *type);
-ssize_t read_pin_code(bdaddr_t *local, bdaddr_t *peer, char *pin);
+int write_remote_eir(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, uint8_t *data, uint8_t data_len);
+int read_remote_eir(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, uint8_t *data);
+int write_version_info(const bdaddr_t *local, const bdaddr_t *peer,
+ uint16_t manufacturer, uint8_t lmp_ver,
+ uint16_t lmp_subver);
+int write_features_info(const bdaddr_t *local, const bdaddr_t *peer,
+ unsigned char *page1, unsigned char *page2);
+int read_remote_features(const bdaddr_t *local, const bdaddr_t *peer,
+ unsigned char *page1, unsigned char *page2);
+int write_lastseen_info(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, struct tm *tm);
+int write_lastused_info(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, struct tm *tm);
+int write_link_key(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, unsigned char *key,
+ uint8_t type, int length);
+int read_link_key(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t peer_type, unsigned char *key, uint8_t *type);
+ssize_t read_pin_code(const bdaddr_t *local, const bdaddr_t *peer, char *pin);
gboolean read_trust(const bdaddr_t *local, const char *addr,
uint8_t addr_type);
int write_trust(const char *src, const char *addr, uint8_t addr_type,
gboolean trust);
-int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, uint8_t dst_type,
- const char *profiles);
-int delete_entry(bdaddr_t *src, const char *storage, bdaddr_t *dst,
+int write_device_profiles(const bdaddr_t *src, const bdaddr_t *dst,
+ uint8_t dst_type, const char *profiles);
+int delete_entry(const bdaddr_t *src, const char *storage, const bdaddr_t *dst,
uint8_t dst_type);
int store_record(const gchar *src, const gchar *dst, uint8_t dst_type,
sdp_record_t *rec);
@@ -89,8 +96,8 @@ int store_device_id(const gchar *src, const gchar *dst, uint8_t dst_type,
int read_device_id(const gchar *src, const gchar *dst, uint8_t dst_type,
uint16_t *source, uint16_t *vendor,
uint16_t *product, uint16_t *version);
-int write_device_pairable(bdaddr_t *local, gboolean mode);
-int read_device_pairable(bdaddr_t *local, gboolean *mode);
+int write_device_pairable(const bdaddr_t *local, gboolean mode);
+int read_device_pairable(const bdaddr_t *local, gboolean *mode);
gboolean read_blocked(const bdaddr_t *local, const bdaddr_t *remote,
uint8_t remote_type);
int write_blocked(const bdaddr_t *local, const bdaddr_t *remote,
@@ -110,11 +117,13 @@ int write_device_attribute(const bdaddr_t *sba, const bdaddr_t *dba,
uint8_t bdaddr_type, uint16_t handle,
const char *chars);
int read_device_attributes(const bdaddr_t *sba, textfile_cb func, void *data);
-int read_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- uint16_t handle, uint16_t *value);
-int write_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- uint16_t handle, uint16_t value);
-void delete_device_ccc(bdaddr_t *local, bdaddr_t *peer);
-int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type,
- const char *key);
-gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type);
+int read_device_ccc(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, uint16_t handle, uint16_t *value);
+int write_device_ccc(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, uint16_t handle,
+ uint16_t value);
+void delete_device_ccc(const bdaddr_t *local, const bdaddr_t *peer);
+int write_longtermkeys(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type, const char *key);
+gboolean has_longtermkeys(const bdaddr_t *local, const bdaddr_t *peer,
+ uint8_t bdaddr_type);
--
1.7.9.5
^ permalink raw reply related
* [RFC 1/7] adapter: Convert adapter_get_address into simple getter
From: Szymon Janc @ 2012-10-04 12:05 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1349352364-5491-1-git-send-email-szymon.janc@tieto.com>
Most uses of adapter_get_address were in form of:
bdaddr_t addr;
adapter_get_address(adapter, &addr);
foo(&addr);
Changing it to getter makes code simpler and avoid number of not
needed memcpy.
---
attrib/client.c | 2 +-
audio/manager.c | 48 +++++---------
plugins/adaptername.c | 4 +-
plugins/dbusoob.c | 8 +--
plugins/neard.c | 16 ++---
plugins/service.c | 57 ++++++-----------
plugins/wiimote.c | 5 +-
profiles/alert/server.c | 4 +-
profiles/gatt/gas.c | 16 ++---
profiles/health/hdp.c | 14 ++---
profiles/health/hdp_util.c | 24 ++++---
profiles/input/device.c | 2 +-
profiles/input/manager.c | 11 +---
profiles/network/manager.c | 10 +--
profiles/network/server.c | 8 +--
profiles/proximity/monitor.c | 13 ++--
profiles/sap/manager.c | 5 +-
src/adapter.c | 13 ++--
src/adapter.h | 2 +-
src/attrib-server.c | 18 +++---
src/device.c | 143 +++++++++++++++++-------------------------
src/manager.c | 5 +-
src/profile.c | 28 ++++-----
23 files changed, 179 insertions(+), 277 deletions(-)
diff --git a/attrib/client.c b/attrib/client.c
index d49804c..eea06ae 100644
--- a/attrib/client.c
+++ b/attrib/client.c
@@ -229,7 +229,7 @@ static void gatt_get_address(struct gatt_service *gatt, bdaddr_t *sba,
struct btd_adapter *adapter;
adapter = device_get_adapter(device);
- adapter_get_address(adapter, sba);
+ bacpy(sba, adapter_get_address(adapter));
device_get_address(device, dba, bdaddr_type);
}
diff --git a/audio/manager.c b/audio/manager.c
index dbc98d5..6ddea5a 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -507,7 +507,7 @@ static int headset_server_init(struct audio_adapter *adapter)
GError *err = NULL;
uint32_t features;
GIOChannel *io;
- bdaddr_t src;
+ bdaddr_t *src;
if (config) {
gboolean tmp;
@@ -521,10 +521,10 @@ static int headset_server_init(struct audio_adapter *adapter)
master = tmp;
}
- adapter_get_address(adapter->btd_adapter, &src);
+ src = adapter_get_address(adapter->btd_adapter);
io = bt_io_listen(NULL, ag_confirm, adapter, NULL, &err,
- BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_SOURCE_BDADDR, src,
BT_IO_OPT_CHANNEL, chan,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
BT_IO_OPT_MASTER, master,
@@ -540,7 +540,7 @@ static int headset_server_init(struct audio_adapter *adapter)
goto failed;
}
- if (add_record_to_server(&src, record) < 0) {
+ if (add_record_to_server(src, record) < 0) {
error("Unable to register HS AG service record");
sdp_record_free(record);
goto failed;
@@ -555,7 +555,7 @@ static int headset_server_init(struct audio_adapter *adapter)
chan = DEFAULT_HF_AG_CHANNEL;
io = bt_io_listen(NULL, ag_confirm, adapter, NULL, &err,
- BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_SOURCE_BDADDR, src,
BT_IO_OPT_CHANNEL, chan,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
BT_IO_OPT_MASTER, master,
@@ -571,7 +571,7 @@ static int headset_server_init(struct audio_adapter *adapter)
goto failed;
}
- if (add_record_to_server(&src, record) < 0) {
+ if (add_record_to_server(src, record) < 0) {
error("Unable to register HF AG service record");
sdp_record_free(record);
goto failed;
@@ -608,7 +608,7 @@ static int gateway_server_init(struct audio_adapter *adapter)
gboolean master = TRUE;
GError *err = NULL;
GIOChannel *io;
- bdaddr_t src;
+ bdaddr_t *src;
if (config) {
gboolean tmp;
@@ -622,10 +622,10 @@ static int gateway_server_init(struct audio_adapter *adapter)
master = tmp;
}
- adapter_get_address(adapter->btd_adapter, &src);
+ src = adapter_get_address(adapter->btd_adapter);
io = bt_io_listen(NULL, hf_io_cb, adapter, NULL, &err,
- BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_SOURCE_BDADDR, src,
BT_IO_OPT_CHANNEL, chan,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
BT_IO_OPT_MASTER, master,
@@ -643,7 +643,7 @@ static int gateway_server_init(struct audio_adapter *adapter)
goto failed;
}
- if (add_record_to_server(&src, record) < 0) {
+ if (add_record_to_server(src, record) < 0) {
error("Unable to register HFP HS service record");
sdp_record_free(record);
goto failed;
@@ -663,12 +663,11 @@ failed:
static struct audio_device *get_audio_dev(struct btd_device *device)
{
struct btd_adapter *adapter = device_get_adapter(device);
- bdaddr_t src, dst;
+ bdaddr_t dst;
- adapter_get_address(adapter, &src);
device_get_address(device, &dst, NULL);
- return manager_get_device(&src, &dst, TRUE);
+ return manager_get_device(adapter_get_address(adapter), &dst, TRUE);
}
static void audio_remove(struct btd_profile *p, struct btd_device *device)
@@ -970,7 +969,6 @@ static int a2dp_server_probe(struct btd_profile *p,
{
struct audio_adapter *adp;
const gchar *path = adapter_get_path(adapter);
- bdaddr_t src;
int err;
DBG("path %s", path);
@@ -979,9 +977,7 @@ static int a2dp_server_probe(struct btd_profile *p,
if (!adp)
return -EINVAL;
- adapter_get_address(adapter, &src);
-
- err = a2dp_register(&src, config);
+ err = a2dp_register(adapter_get_address(adapter), config);
if (err < 0)
audio_adapter_unref(adp);
@@ -993,7 +989,6 @@ static void a2dp_server_remove(struct btd_profile *p,
{
struct audio_adapter *adp;
const gchar *path = adapter_get_path(adapter);
- bdaddr_t src;
DBG("path %s", path);
@@ -1001,8 +996,7 @@ static void a2dp_server_remove(struct btd_profile *p,
if (!adp)
return;
- adapter_get_address(adapter, &src);
- a2dp_unregister(&src);
+ a2dp_unregister(adapter_get_address(adapter));
audio_adapter_unref(adp);
}
@@ -1011,7 +1005,6 @@ static int avrcp_server_probe(struct btd_profile *p,
{
struct audio_adapter *adp;
const gchar *path = adapter_get_path(adapter);
- bdaddr_t src;
int err;
DBG("path %s", path);
@@ -1020,9 +1013,7 @@ static int avrcp_server_probe(struct btd_profile *p,
if (!adp)
return -EINVAL;
- adapter_get_address(adapter, &src);
-
- err = avrcp_register(&src, config);
+ err = avrcp_register(adapter_get_address(adapter), config);
if (err < 0)
audio_adapter_unref(adp);
@@ -1034,7 +1025,6 @@ static void avrcp_server_remove(struct btd_profile *p,
{
struct audio_adapter *adp;
const gchar *path = adapter_get_path(adapter);
- bdaddr_t src;
DBG("path %s", path);
@@ -1042,8 +1032,7 @@ static void avrcp_server_remove(struct btd_profile *p,
if (!adp)
return;
- adapter_get_address(adapter, &src);
- avrcp_unregister(&src);
+ avrcp_unregister(adapter_get_address(adapter));
audio_adapter_unref(adp);
}
@@ -1051,7 +1040,6 @@ static int media_server_probe(struct btd_adapter *adapter)
{
struct audio_adapter *adp;
const gchar *path = adapter_get_path(adapter);
- bdaddr_t src;
int err;
DBG("path %s", path);
@@ -1060,9 +1048,7 @@ static int media_server_probe(struct btd_adapter *adapter)
if (!adp)
return -EINVAL;
- adapter_get_address(adapter, &src);
-
- err = media_register(path, &src);
+ err = media_register(path, adapter_get_address(adapter));
if (err < 0)
audio_adapter_unref(adp);
diff --git a/plugins/adaptername.c b/plugins/adaptername.c
index cd0ffb2..f58fb0f 100644
--- a/plugins/adaptername.c
+++ b/plugins/adaptername.c
@@ -200,7 +200,6 @@ static int adaptername_probe(struct btd_adapter *adapter)
int current_id;
char name[MAX_NAME_LENGTH + 1];
char *pretty_hostname;
- bdaddr_t bdaddr;
pretty_hostname = read_pretty_host_name();
if (pretty_hostname != NULL) {
@@ -210,10 +209,9 @@ static int adaptername_probe(struct btd_adapter *adapter)
}
adapter_set_allow_name_changes(adapter, TRUE);
- adapter_get_address(adapter, &bdaddr);
current_id = adapter_get_dev_id(adapter);
- if (read_local_name(&bdaddr, name) < 0)
+ if (read_local_name(adapter_get_address(adapter), name) < 0)
expand_name(name, MAX_NAME_LENGTH, main_opts.name, current_id);
DBG("Setting name '%s' for device 'hci%d'", name, current_id);
diff --git a/plugins/dbusoob.c b/plugins/dbusoob.c
index ea40355..5c5b6ef 100644
--- a/plugins/dbusoob.c
+++ b/plugins/dbusoob.c
@@ -194,10 +194,8 @@ static gboolean parse_data(DBusMessageIter *data, struct oob_data *remote_data)
static gboolean store_data(struct btd_adapter *adapter, struct oob_data *data)
{
bdaddr_t bdaddr;
- bdaddr_t local;
str2ba(data->addr, &bdaddr);
- adapter_get_address(adapter, &local);
if (data->hash) {
if (btd_adapter_add_remote_oob_data(adapter, &bdaddr,
@@ -206,10 +204,12 @@ static gboolean store_data(struct btd_adapter *adapter, struct oob_data *data)
}
if (data->class)
- write_remote_class(&local, &bdaddr, data->class);
+ write_remote_class(adapter_get_address(adapter), &bdaddr,
+ data->class);
if (data->name)
- write_device_name(&local, &bdaddr, 0, data->name);
+ write_device_name(adapter_get_address(adapter), &bdaddr, 0,
+ data->name);
return TRUE;
}
diff --git a/plugins/neard.c b/plugins/neard.c
index 632d454..2fe1785 100644
--- a/plugins/neard.c
+++ b/plugins/neard.c
@@ -180,13 +180,11 @@ static void read_local_complete(struct btd_adapter *adapter, uint8_t *hash,
int len;
uint8_t eir[NFC_OOB_EIR_MAX];
uint8_t *peir = eir;
- bdaddr_t addr;
DBusMessageIter iter;
DBusMessageIter dict;
- adapter_get_address(adapter, &addr);
-
- len = eir_create_oob(&addr, btd_adapter_get_name(adapter),
+ len = eir_create_oob(adapter_get_address(adapter),
+ btd_adapter_get_name(adapter),
btd_adapter_get_class(adapter), hash,
randomizer, main_opts.did_vendor,
main_opts.did_product, main_opts.did_version,
@@ -254,7 +252,6 @@ static int process_eir(struct btd_adapter *adapter, uint8_t *eir, size_t size,
{
struct btd_device *device;
struct eir_data eir_data;
- bdaddr_t local;
char remote_address[18];
DBG("size %zu", size);
@@ -288,16 +285,15 @@ static int process_eir(struct btd_adapter *adapter, uint8_t *eir, size_t size,
if (device)
adapter_remove_device(adapter, device, TRUE);
- adapter_get_address(adapter, &local);
-
/* store OOB data */
if (eir_data.class != 0)
- write_remote_class(&local, &eir_data.addr, eir_data.class);
+ write_remote_class(adapter_get_address(adapter),
+ &eir_data.addr, eir_data.class);
/* TODO handle incomplete name? */
if (eir_data.name)
- write_device_name(&local, &eir_data.addr, BDADDR_BREDR,
- eir_data.name);
+ write_device_name(adapter_get_address(adapter), &eir_data.addr,
+ BDADDR_BREDR, eir_data.name);
if (eir_data.hash)
btd_adapter_add_remote_oob_data(adapter, &eir_data.addr,
diff --git a/plugins/service.c b/plugins/service.c
index 4a38270..e81452c 100644
--- a/plugins/service.c
+++ b/plugins/service.c
@@ -134,13 +134,20 @@ static void exit_callback(DBusConnection *conn, void *user_data)
g_free(user_record);
}
+static const bdaddr_t *get_address(struct service_adapter *serv_adapter)
+{
+ if (serv_adapter->adapter)
+ return adapter_get_address(serv_adapter->adapter);
+
+ return BDADDR_ANY;
+}
+
static int add_xml_record(const char *sender,
struct service_adapter *serv_adapter,
const char *record, dbus_uint32_t *handle)
{
struct record_data *user_record;
sdp_record_t *sdp_record;
- bdaddr_t src;
sdp_record = sdp_xml_parse_record(record, strlen(record));
if (!sdp_record) {
@@ -148,12 +155,7 @@ static int add_xml_record(const char *sender,
return -EIO;
}
- if (serv_adapter->adapter)
- adapter_get_address(serv_adapter->adapter, &src);
- else
- bacpy(&src, BDADDR_ANY);
-
- if (add_record_to_server(&src, sdp_record) < 0) {
+ if (add_record_to_server(get_address(serv_adapter), sdp_record) < 0) {
error("Failed to register service record");
sdp_record_free(sdp_record);
return -EIO;
@@ -181,7 +183,6 @@ static DBusMessage *update_record(DBusMessage *msg,
struct service_adapter *serv_adapter,
dbus_uint32_t handle, sdp_record_t *sdp_record)
{
- bdaddr_t src;
int err;
if (remove_record_from_server(handle) < 0) {
@@ -189,13 +190,8 @@ static DBusMessage *update_record(DBusMessage *msg,
return btd_error_not_available(msg);
}
- if (serv_adapter->adapter)
- adapter_get_address(serv_adapter->adapter, &src);
- else
- bacpy(&src, BDADDR_ANY);
-
sdp_record->handle = handle;
- err = add_record_to_server(&src, sdp_record);
+ err = add_record_to_server(get_address(serv_adapter), sdp_record);
if (err < 0) {
sdp_record_free(sdp_record);
error("Failed to update the service record");
@@ -322,7 +318,6 @@ static void auth_cb(DBusError *derr, void *user_data)
struct service_adapter *serv_adapter = user_data;
DBusMessage *reply;
struct pending_auth *auth;
- bdaddr_t src;
auth = next_pending(serv_adapter);
if (auth == NULL) {
@@ -350,14 +345,9 @@ done:
if (auth == NULL)
return;
- if (serv_adapter->adapter)
- adapter_get_address(serv_adapter->adapter, &src);
- else
- bacpy(&src, BDADDR_ANY);
-
- auth->id = btd_request_authorization(&src, &auth->dst,
- auth->uuid, auth_cb,
- serv_adapter);
+ auth->id = btd_request_authorization(get_address(serv_adapter),
+ &auth->dst, auth->uuid,
+ auth_cb, serv_adapter);
}
static DBusMessage *request_authorization(DBusConnection *conn,
@@ -373,7 +363,6 @@ static DBusMessage *request_authorization(DBusConnection *conn,
struct pending_auth *auth;
char uuid_str[MAX_LEN_UUID_STR];
uuid_t *uuid, *uuid128;
- bdaddr_t src;
if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
DBUS_TYPE_UINT32, &handle,
@@ -427,12 +416,8 @@ static DBusMessage *request_authorization(DBusConnection *conn,
if (auth == NULL)
return btd_error_does_not_exist(msg);
- if (serv_adapter->adapter)
- adapter_get_address(serv_adapter->adapter, &src);
- else
- bacpy(&src, BDADDR_ANY);
-
- auth->id = btd_request_authorization(&src, &auth->dst, auth->uuid,
+ auth->id = btd_request_authorization(get_address(serv_adapter),
+ &auth->dst, auth->uuid,
auth_cb, serv_adapter);
if (auth->id == 0) {
serv_adapter->pending_list = g_slist_remove(serv_adapter->pending_list,
@@ -451,7 +436,6 @@ static DBusMessage *cancel_authorization(DBusConnection *conn,
struct service_adapter *serv_adapter = data;
struct pending_auth *auth;
const gchar *sender;
- bdaddr_t src;
sender = dbus_message_get_sender(msg);
@@ -473,14 +457,9 @@ static DBusMessage *cancel_authorization(DBusConnection *conn,
if (auth == NULL)
goto done;
- if (serv_adapter->adapter)
- adapter_get_address(serv_adapter->adapter, &src);
- else
- bacpy(&src, BDADDR_ANY);
-
- auth->id = btd_request_authorization(&src, &auth->dst,
- auth->uuid, auth_cb,
- serv_adapter);
+ auth->id = btd_request_authorization(get_address(serv_adapter),
+ &auth->dst, auth->uuid,
+ auth_cb, serv_adapter);
done:
return dbus_message_new_method_return(msg);
diff --git a/plugins/wiimote.c b/plugins/wiimote.c
index f7fad60..93d1e2d 100644
--- a/plugins/wiimote.c
+++ b/plugins/wiimote.c
@@ -62,10 +62,9 @@ static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
char *pinbuf, gboolean *display)
{
uint16_t vendor, product;
- bdaddr_t sba, dba;
+ bdaddr_t dba;
char addr[18], name[25];
- adapter_get_address(adapter, &sba);
device_get_address(device, &dba, NULL);
ba2str(&dba, addr);
@@ -79,7 +78,7 @@ static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
g_str_equal(name, "Nintendo RVL-WBC-01") ||
(vendor == 0x057e && product == 0x0306)) {
DBG("Forcing fixed pin on detected wiimote %s", addr);
- memcpy(pinbuf, &sba, 6);
+ memcpy(pinbuf, adapter_get_address(adapter), 6);
return 6;
}
diff --git a/profiles/alert/server.c b/profiles/alert/server.c
index 0c17176..b8ea141 100644
--- a/profiles/alert/server.c
+++ b/profiles/alert/server.c
@@ -415,10 +415,8 @@ static void filter_devices_notify(char *key, char *value, void *user_data)
static void create_filename(char *filename, struct btd_adapter *adapter)
{
char srcaddr[18];
- bdaddr_t src;
- adapter_get_address(adapter, &src);
- ba2str(&src, srcaddr);
+ ba2str(adapter_get_address(adapter), srcaddr);
create_name(filename, PATH_MAX, STORAGEDIR, srcaddr, "ccc");
}
diff --git a/profiles/gatt/gas.c b/profiles/gatt/gas.c
index da6d555..f0fcbe7 100644
--- a/profiles/gatt/gas.c
+++ b/profiles/gatt/gas.c
@@ -168,7 +168,7 @@ static void ccc_written_cb(guint8 status, const guint8 *pdu, guint16 plen,
gpointer user_data)
{
struct gas *gas = user_data;
- bdaddr_t sba, dba;
+ bdaddr_t dba;
uint8_t bdaddr_type;
if (status) {
@@ -179,11 +179,11 @@ static void ccc_written_cb(guint8 status, const guint8 *pdu, guint16 plen,
DBG("Service Changed indications enabled");
- adapter_get_address(device_get_adapter(gas->device), &sba);
device_get_address(gas->device, &dba, &bdaddr_type);
- write_ctp_handle(&sba, &dba, bdaddr_type, GATT_CHARAC_SERVICE_CHANGED,
- gas->changed_handle);
+ write_ctp_handle(adapter_get_address(device_get_adapter(gas->device)),
+ &dba, bdaddr_type, GATT_CHARAC_SERVICE_CHANGED,
+ gas->changed_handle);
}
static void write_ccc(GAttrib *attrib, uint16_t handle, gpointer user_data)
@@ -377,7 +377,7 @@ int gas_register(struct btd_device *device, struct att_range *gap,
struct att_range *gatt)
{
struct gas *gas;
- bdaddr_t sba, dba;
+ bdaddr_t dba;
uint8_t bdaddr_type;
gas = g_new0(struct gas, 1);
@@ -394,11 +394,11 @@ int gas_register(struct btd_device *device, struct att_range *gap,
attio_connected_cb,
attio_disconnected_cb, gas);
- adapter_get_address(device_get_adapter(gas->device), &sba);
device_get_address(gas->device, &dba, &bdaddr_type);
- read_ctp_handle(&sba, &dba, bdaddr_type, GATT_CHARAC_SERVICE_CHANGED,
- &gas->changed_handle);
+ read_ctp_handle(adapter_get_address(device_get_adapter(gas->device)),
+ &dba, bdaddr_type, GATT_CHARAC_SERVICE_CHANGED,
+ &gas->changed_handle);
return 0;
}
diff --git a/profiles/health/hdp.c b/profiles/health/hdp.c
index d262a2a..d07462a 100644
--- a/profiles/health/hdp.c
+++ b/profiles/health/hdp.c
@@ -1317,7 +1317,6 @@ static void release_adapter_instance(struct hdp_adapter *hdp_adapter)
static gboolean update_adapter(struct hdp_adapter *hdp_adapter)
{
GError *err = NULL;
- bdaddr_t addr;
if (applications == NULL) {
release_adapter_instance(hdp_adapter);
@@ -1327,12 +1326,13 @@ static gboolean update_adapter(struct hdp_adapter *hdp_adapter)
if (hdp_adapter->mi != NULL)
goto update;
- adapter_get_address(hdp_adapter->btd_adapter, &addr);
- hdp_adapter->mi = mcap_create_instance(&addr, BT_IO_SEC_MEDIUM, 0, 0,
- mcl_connected, mcl_reconnected,
- mcl_disconnected, mcl_uncached,
- NULL, /* CSP is not used by now */
- hdp_adapter, &err);
+ hdp_adapter->mi = mcap_create_instance(
+ adapter_get_address(hdp_adapter->btd_adapter),
+ BT_IO_SEC_MEDIUM, 0, 0,
+ mcl_connected, mcl_reconnected,
+ mcl_disconnected, mcl_uncached,
+ NULL, /* CSP is not used by now */
+ hdp_adapter, &err);
if (hdp_adapter->mi == NULL) {
error("Error creating the MCAP instance: %s", err->message);
diff --git a/profiles/health/hdp_util.c b/profiles/health/hdp_util.c
index 3afd715..931c1dd 100644
--- a/profiles/health/hdp_util.c
+++ b/profiles/health/hdp_util.c
@@ -695,7 +695,6 @@ static gboolean register_mcap_features(sdp_record_t *sdp_record)
gboolean hdp_update_sdp_record(struct hdp_adapter *adapter, GSList *app_list)
{
sdp_record_t *sdp_record;
- bdaddr_t addr;
if (adapter->sdp_handler > 0)
remove_record_from_server(adapter->sdp_handler);
@@ -738,9 +737,8 @@ gboolean hdp_update_sdp_record(struct hdp_adapter *adapter, GSList *app_list)
if (sdp_set_record_state(sdp_record, adapter->record_state++) < 0)
goto fail;
- adapter_get_address(adapter->btd_adapter, &addr);
-
- if (add_record_to_server(&addr, sdp_record) < 0)
+ if (add_record_to_server(adapter_get_address(adapter->btd_adapter),
+ sdp_record) < 0)
goto fail;
adapter->sdp_handler = sdp_record->handle;
return TRUE;
@@ -859,11 +857,11 @@ gboolean hdp_get_mdep(struct hdp_device *device, struct hdp_application *app,
GDestroyNotify destroy, GError **err)
{
struct get_mdep_data *mdep_data;
- bdaddr_t dst, src;
+ bdaddr_t dst, *src;
uuid_t uuid;
device_get_address(device->dev, &dst, NULL);
- adapter_get_address(device_get_adapter(device->dev), &src);
+ src = adapter_get_address(device_get_adapter(device->dev));
mdep_data = g_new0(struct get_mdep_data, 1);
mdep_data->app = hdp_application_ref(app);
@@ -872,7 +870,7 @@ gboolean hdp_get_mdep(struct hdp_device *device, struct hdp_application *app,
mdep_data->destroy = destroy;
bt_string2uuid(&uuid, HDP_UUID);
- if (bt_search_service(&src, &dst, &uuid, get_mdep_cb, mdep_data,
+ if (bt_search_service(src, &dst, &uuid, get_mdep_cb, mdep_data,
free_mdep_data) < 0) {
g_set_error(err, HDP_ERROR, HDP_CONNECTION_ERROR,
"Can't get remote SDP record");
@@ -1088,11 +1086,11 @@ gboolean hdp_establish_mcl(struct hdp_device *device,
GError **err)
{
struct conn_mcl_data *conn_data;
- bdaddr_t dst, src;
+ bdaddr_t dst, *src;
uuid_t uuid;
device_get_address(device->dev, &dst, NULL);
- adapter_get_address(device_get_adapter(device->dev), &src);
+ src = adapter_get_address(device_get_adapter(device->dev));
conn_data = g_new0(struct conn_mcl_data, 1);
conn_data->refs = 1;
@@ -1102,7 +1100,7 @@ gboolean hdp_establish_mcl(struct hdp_device *device,
conn_data->dev = health_device_ref(device);
bt_string2uuid(&uuid, HDP_UUID);
- if (bt_search_service(&src, &dst, &uuid, search_cb, conn_data,
+ if (bt_search_service(src, &dst, &uuid, search_cb, conn_data,
destroy_con_mcl_data) < 0) {
g_set_error(err, HDP_ERROR, HDP_CONNECTION_ERROR,
"Can't get remote SDP record");
@@ -1158,11 +1156,11 @@ gboolean hdp_get_dcpsm(struct hdp_device *device, hdp_continue_dcpsm_f func,
GError **err)
{
struct get_dcpsm_data *dcpsm_data;
- bdaddr_t dst, src;
+ bdaddr_t dst, *src;
uuid_t uuid;
device_get_address(device->dev, &dst, NULL);
- adapter_get_address(device_get_adapter(device->dev), &src);
+ src = adapter_get_address(device_get_adapter(device->dev));
dcpsm_data = g_new0(struct get_dcpsm_data, 1);
dcpsm_data->func = func;
@@ -1170,7 +1168,7 @@ gboolean hdp_get_dcpsm(struct hdp_device *device, hdp_continue_dcpsm_f func,
dcpsm_data->destroy = destroy;
bt_string2uuid(&uuid, HDP_UUID);
- if (bt_search_service(&src, &dst, &uuid, get_dcpsm_cb, dcpsm_data,
+ if (bt_search_service(src, &dst, &uuid, get_dcpsm_cb, dcpsm_data,
free_dcpsm_data) < 0) {
g_set_error(err, HDP_ERROR, HDP_CONNECTION_ERROR,
"Can't get remote SDP record");
diff --git a/profiles/input/device.c b/profiles/input/device.c
index 07c72c0..ed50e3b 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
@@ -785,7 +785,7 @@ static struct input_device *input_device_new(struct btd_device *device,
uint8_t dst_type;
idev = g_new0(struct input_device, 1);
- adapter_get_address(adapter, &idev->src);
+ bacpy(&idev->src, adapter_get_address(adapter));
device_get_address(device, &idev->dst, &dst_type);
idev->device = btd_device_ref(device);
idev->path = g_strdup(path);
diff --git a/profiles/input/manager.c b/profiles/input/manager.c
index 32698aa..3f68620 100644
--- a/profiles/input/manager.c
+++ b/profiles/input/manager.c
@@ -77,12 +77,9 @@ static void hid_device_remove(struct btd_profile *p, struct btd_device *device)
static int hid_server_probe(struct btd_profile *p, struct btd_adapter *adapter)
{
- bdaddr_t src;
int ret;
- adapter_get_address(adapter, &src);
-
- ret = server_start(&src);
+ ret = server_start(adapter_get_address(adapter));
if (ret < 0)
return ret;
@@ -94,11 +91,7 @@ static int hid_server_probe(struct btd_profile *p, struct btd_adapter *adapter)
static void hid_server_remove(struct btd_profile *p,
struct btd_adapter *adapter)
{
- bdaddr_t src;
-
- adapter_get_address(adapter, &src);
-
- server_stop(&src);
+ server_stop(adapter_get_address(adapter));
adapters = g_slist_remove(adapters, adapter);
btd_adapter_unref(adapter);
diff --git a/profiles/network/manager.c b/profiles/network/manager.c
index e1f4164..661181d 100644
--- a/profiles/network/manager.c
+++ b/profiles/network/manager.c
@@ -78,19 +78,19 @@ static int network_probe(struct btd_profile *p, struct btd_device *device,
{
struct btd_adapter *adapter = device_get_adapter(device);
const gchar *path = device_get_path(device);
- bdaddr_t src, dst;
+ bdaddr_t *src, dst;
DBG("path %s", path);
- adapter_get_address(adapter, &src);
+ src = adapter_get_address(adapter);
device_get_address(device, &dst, NULL);
if (g_slist_find_custom(uuids, PANU_UUID, bt_uuid_strcmp))
- connection_register(device, path, &src, &dst, BNEP_SVC_PANU);
+ connection_register(device, path, src, &dst, BNEP_SVC_PANU);
if (g_slist_find_custom(uuids, GN_UUID, bt_uuid_strcmp))
- connection_register(device, path, &src, &dst, BNEP_SVC_GN);
+ connection_register(device, path, src, &dst, BNEP_SVC_GN);
if (g_slist_find_custom(uuids, NAP_UUID, bt_uuid_strcmp))
- connection_register(device, path, &src, &dst, BNEP_SVC_NAP);
+ connection_register(device, path, src, &dst, BNEP_SVC_NAP);
return 0;
}
diff --git a/profiles/network/server.c b/profiles/network/server.c
index 6ee4770..ccf6e69 100644
--- a/profiles/network/server.c
+++ b/profiles/network/server.c
@@ -742,16 +742,14 @@ static struct network_adapter *create_adapter(struct btd_adapter *adapter)
{
struct network_adapter *na;
GError *err = NULL;
- bdaddr_t src;
na = g_new0(struct network_adapter, 1);
na->adapter = btd_adapter_ref(adapter);
- adapter_get_address(adapter, &src);
-
na->io = bt_io_listen(NULL, confirm_event, na,
NULL, &err,
- BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_SOURCE_BDADDR,
+ adapter_get_address(adapter),
BT_IO_OPT_PSM, BNEP_PSM,
BT_IO_OPT_OMTU, BNEP_MTU,
BT_IO_OPT_IMTU, BNEP_MTU,
@@ -803,7 +801,7 @@ int server_register(struct btd_adapter *adapter)
return -1;
}
- adapter_get_address(adapter, &ns->src);
+ bacpy(&ns->src, adapter_get_address(adapter));
ns->id = BNEP_SVC_NAP;
ns->na = na;
ns->record_id = 0;
diff --git a/profiles/proximity/monitor.c b/profiles/proximity/monitor.c
index 6444a75..477eeea 100644
--- a/profiles/proximity/monitor.c
+++ b/profiles/proximity/monitor.c
@@ -407,7 +407,7 @@ static DBusMessage *set_link_loss_alert(DBusConnection *conn, DBusMessage *msg,
{
struct monitor *monitor = data;
struct btd_device *device = monitor->device;
- bdaddr_t sba, dba;
+ bdaddr_t dba;
if (!level_is_valid(level))
return btd_error_invalid_args(msg);
@@ -418,10 +418,10 @@ static DBusMessage *set_link_loss_alert(DBusConnection *conn, DBusMessage *msg,
g_free(monitor->linklosslevel);
monitor->linklosslevel = g_strdup(level);
- adapter_get_address(device_get_adapter(device), &sba);
device_get_address(device, &dba, NULL);
- write_proximity_config(&sba, &dba, "LinkLossAlertLevel", level);
+ write_proximity_config(adapter_get_address(device_get_adapter(device)),
+ &dba, "LinkLossAlertLevel", level);
if (monitor->attrib)
write_alert_level(monitor);
@@ -593,13 +593,14 @@ int monitor_register(struct btd_device *device,
{
const char *path = device_get_path(device);
struct monitor *monitor;
- bdaddr_t sba, dba;
+ bdaddr_t dba;
char *level;
- adapter_get_address(device_get_adapter(device), &sba);
device_get_address(device, &dba, NULL);
- level = read_proximity_config(&sba, &dba, "LinkLossAlertLevel");
+ level = read_proximity_config(
+ adapter_get_address(device_get_adapter(device)),
+ &dba, "LinkLossAlertLevel");
monitor = g_new0(struct monitor, 1);
monitor->device = btd_device_ref(device);
diff --git a/profiles/sap/manager.c b/profiles/sap/manager.c
index cb47b93..fddd7aa 100644
--- a/profiles/sap/manager.c
+++ b/profiles/sap/manager.c
@@ -35,13 +35,10 @@
static int sap_server_probe(struct btd_profile *p, struct btd_adapter *adapter)
{
const char *path = adapter_get_path(adapter);
- bdaddr_t src;
DBG("path %s", path);
- adapter_get_address(adapter, &src);
-
- return sap_server_register(path, &src);
+ return sap_server_register(path, adapter_get_address(adapter));
}
static void sap_server_remove(struct btd_profile *p,
diff --git a/src/adapter.c b/src/adapter.c
index 073c722..166b64f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1870,7 +1870,6 @@ static void create_stored_device_from_ltks(char *key, char *value,
struct smp_ltk_info *info;
char address[18], srcaddr[18];
uint8_t bdaddr_type;
- bdaddr_t src;
if (sscanf(key, "%17s#%hhu", address, &bdaddr_type) < 2)
return;
@@ -1885,8 +1884,7 @@ static void create_stored_device_from_ltks(char *key, char *value,
(GCompareFunc) device_address_cmp))
return;
- adapter_get_address(adapter, &src);
- ba2str(&src, srcaddr);
+ ba2str(adapter_get_address(adapter), srcaddr);
if (g_strcmp0(srcaddr, address) == 0)
return;
@@ -2668,9 +2666,9 @@ const gchar *adapter_get_path(struct btd_adapter *adapter)
return adapter->path;
}
-void adapter_get_address(struct btd_adapter *adapter, bdaddr_t *bdaddr)
+bdaddr_t *adapter_get_address(struct btd_adapter *adapter)
{
- bacpy(bdaddr, &adapter->bdaddr);
+ return &adapter->bdaddr;
}
void adapter_set_allow_name_changes(struct btd_adapter *adapter,
@@ -3616,7 +3614,7 @@ ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
{
GSList *l;
btd_adapter_pin_cb_t cb;
- bdaddr_t sba, dba;
+ bdaddr_t dba;
ssize_t ret;
for (l = adapter->pin_callbacks; l != NULL; l = g_slist_next(l)) {
@@ -3626,10 +3624,9 @@ ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
return ret;
}
- adapter_get_address(adapter, &sba);
device_get_address(dev, &dba, NULL);
- return read_pin_code(&sba, &dba, pin_buf);
+ return read_pin_code(adapter_get_address(adapter), &dba, pin_buf);
}
void btd_adapter_register_powered_callback(struct btd_adapter *adapter,
diff --git a/src/adapter.h b/src/adapter.h
index 7ca8d95..f3599b5 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -122,7 +122,7 @@ void adapter_set_discovering(struct btd_adapter *adapter,
gboolean discovering);
uint16_t adapter_get_dev_id(struct btd_adapter *adapter);
const gchar *adapter_get_path(struct btd_adapter *adapter);
-void adapter_get_address(struct btd_adapter *adapter, bdaddr_t *bdaddr);
+bdaddr_t *adapter_get_address(struct btd_adapter *adapter);
struct remote_dev_info *adapter_search_found_devices(struct btd_adapter *adapter,
bdaddr_t *bdaddr);
void adapter_update_found_devices(struct btd_adapter *adapter,
diff --git a/src/attrib-server.c b/src/attrib-server.c
index 9b03e54..e7e2531 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
@@ -154,11 +154,8 @@ static gint adapter_cmp_addr(gconstpointer a, gconstpointer b)
{
const struct gatt_server *server = a;
const bdaddr_t *bdaddr = b;
- bdaddr_t src;
-
- adapter_get_address(server->adapter, &src);
- return bacmp(&src, bdaddr);
+ return bacmp(adapter_get_address(server->adapter), bdaddr);
}
static gint adapter_cmp(gconstpointer a, gconstpointer b)
@@ -302,7 +299,6 @@ static uint32_t attrib_create_sdp_new(struct gatt_server *server,
struct attribute *a;
uint16_t end = 0;
uuid_t svc, gap_uuid;
- bdaddr_t addr;
a = find_svc_range(server, handle, &end);
@@ -330,8 +326,8 @@ static uint32_t attrib_create_sdp_new(struct gatt_server *server,
"http://www.bluez.org/");
}
- adapter_get_address(server->adapter, &addr);
- if (add_record_to_server(&addr, record) == 0)
+ if (add_record_to_server(adapter_get_address(server->adapter), record)
+ == 0)
return record->handle;
sdp_record_free(record);
@@ -1241,19 +1237,19 @@ int btd_adapter_gatt_server_start(struct btd_adapter *adapter)
{
struct gatt_server *server;
GError *gerr = NULL;
- bdaddr_t addr;
+ bdaddr_t *addr;
DBG("Start GATT server in hci%d", adapter_get_dev_id(adapter));
server = g_new0(struct gatt_server, 1);
server->adapter = btd_adapter_ref(adapter);
- adapter_get_address(server->adapter, &addr);
+ addr = adapter_get_address(server->adapter);
/* BR/EDR socket */
server->l2cap_io = bt_io_listen(NULL, confirm_event,
NULL, NULL, &gerr,
- BT_IO_OPT_SOURCE_BDADDR, &addr,
+ BT_IO_OPT_SOURCE_BDADDR, addr,
BT_IO_OPT_PSM, ATT_PSM,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
BT_IO_OPT_INVALID);
@@ -1273,7 +1269,7 @@ int btd_adapter_gatt_server_start(struct btd_adapter *adapter)
/* LE socket */
server->le_io = bt_io_listen(NULL, confirm_event,
&server->le_io, NULL, &gerr,
- BT_IO_OPT_SOURCE_BDADDR, &addr,
+ BT_IO_OPT_SOURCE_BDADDR, addr,
BT_IO_OPT_CID, ATT_CID,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
BT_IO_OPT_INVALID);
diff --git a/src/device.c b/src/device.c
index c659164..499dbc2 100644
--- a/src/device.c
+++ b/src/device.c
@@ -221,14 +221,11 @@ static void browse_request_cancel(struct browse_req *req)
{
struct btd_device *device = req->device;
struct btd_adapter *adapter = device->adapter;
- bdaddr_t src;
if (device_is_creating(device, NULL))
device_set_temporary(device, TRUE);
- adapter_get_address(adapter, &src);
-
- bt_cancel_discovery(&src, &device->bdaddr);
+ bt_cancel_discovery(adapter_get_address(adapter), &device->bdaddr);
attio_cleanup(device);
@@ -313,7 +310,6 @@ static DBusMessage *get_properties(DBusConnection *conn,
DBusMessage *reply;
DBusMessageIter iter;
DBusMessageIter dict;
- bdaddr_t src;
char name[MAX_NAME_LENGTH + 1], dstaddr[18];
char **str;
const char *ptr, *icon = NULL;
@@ -343,7 +339,6 @@ static DBusMessage *get_properties(DBusConnection *conn,
/* Name */
ptr = NULL;
memset(name, 0, sizeof(name));
- adapter_get_address(adapter, &src);
ptr = device->name;
dict_append_entry(&dict, "Name", DBUS_TYPE_STRING, &ptr);
@@ -359,12 +354,13 @@ static DBusMessage *get_properties(DBusConnection *conn,
dict_append_entry(&dict, "Alias", DBUS_TYPE_STRING, &ptr);
/* Class */
- if (read_remote_class(&src, &device->bdaddr, &class) == 0) {
+ if (read_remote_class(adapter_get_address(adapter),
+ &device->bdaddr, &class) == 0) {
icon = class_to_icon(class);
dict_append_entry(&dict, "Class", DBUS_TYPE_UINT32, &class);
- } else if (read_remote_appearance(&src, &device->bdaddr,
- device->bdaddr_type, &app) == 0) {
+ } else if (read_remote_appearance(adapter_get_address(adapter),
+ &device->bdaddr, device->bdaddr_type, &app) == 0) {
/* Appearance */
icon = gap_appearance_to_icon(app);
@@ -437,7 +433,6 @@ static DBusMessage *set_alias(DBusMessage *msg, const char *alias, void *data)
struct btd_device *device = data;
struct btd_adapter *adapter = device->adapter;
char srcaddr[18], dstaddr[18];
- bdaddr_t src;
int err;
/* No change */
@@ -445,8 +440,7 @@ static DBusMessage *set_alias(DBusMessage *msg, const char *alias, void *data)
g_strcmp0(device->alias, alias) == 0)
return dbus_message_new_method_return(msg);
- adapter_get_address(adapter, &src);
- ba2str(&src, srcaddr);
+ ba2str(adapter_get_address(adapter), srcaddr);
ba2str(&device->bdaddr, dstaddr);
/* Remove alias if empty string */
@@ -470,14 +464,12 @@ static DBusMessage *set_trust(DBusMessage *msg, gboolean value, void *data)
struct btd_device *device = data;
struct btd_adapter *adapter = device->adapter;
char srcaddr[18], dstaddr[18];
- bdaddr_t src;
int err;
if (device->trusted == value)
return dbus_message_new_method_return(msg);
- adapter_get_address(adapter, &src);
- ba2str(&src, srcaddr);
+ ba2str(adapter_get_address(adapter), srcaddr);
ba2str(&device->bdaddr, dstaddr);
err = write_trust(srcaddr, dstaddr, device->bdaddr_type, value);
@@ -516,7 +508,6 @@ static gboolean do_disconnect(gpointer user_data)
int device_block(struct btd_device *device, gboolean update_only)
{
int err = 0;
- bdaddr_t src;
if (device->blocked)
return 0;
@@ -535,9 +526,8 @@ int device_block(struct btd_device *device, gboolean update_only)
device->blocked = TRUE;
- adapter_get_address(device->adapter, &src);
-
- err = write_blocked(&src, &device->bdaddr, device->bdaddr_type, TRUE);
+ err = write_blocked(adapter_get_address(device->adapter),
+ &device->bdaddr, device->bdaddr_type, TRUE);
if (err < 0)
error("write_blocked(): %s (%d)", strerror(-err), -err);
@@ -554,7 +544,6 @@ int device_unblock(struct btd_device *device, gboolean silent,
gboolean update_only)
{
int err = 0;
- bdaddr_t src;
if (!device->blocked)
return 0;
@@ -568,9 +557,8 @@ int device_unblock(struct btd_device *device, gboolean silent,
device->blocked = FALSE;
- adapter_get_address(device->adapter, &src);
-
- err = write_blocked(&src, &device->bdaddr, device->bdaddr_type, FALSE);
+ err = write_blocked(adapter_get_address(device->adapter),
+ &device->bdaddr, device->bdaddr_type, FALSE);
if (err < 0)
error("write_blocked(): %s (%d)", strerror(-err), -err);
@@ -1128,7 +1116,7 @@ struct btd_device *device_create(struct btd_adapter *adapter,
gchar *address_up;
struct btd_device *device;
const gchar *adapter_path = adapter_get_path(adapter);
- bdaddr_t src;
+ bdaddr_t *src;
char srcaddr[18], alias[MAX_NAME_LENGTH + 1];
uint16_t vendor, product, version;
@@ -1154,25 +1142,25 @@ struct btd_device *device_create(struct btd_adapter *adapter,
str2ba(address, &device->bdaddr);
device->adapter = adapter;
device->bdaddr_type = bdaddr_type;
- adapter_get_address(adapter, &src);
- ba2str(&src, srcaddr);
+ src = adapter_get_address(adapter);
+ ba2str(src, srcaddr);
read_device_name(srcaddr, address, bdaddr_type, device->name);
if (read_device_alias(srcaddr, address, bdaddr_type, alias,
sizeof(alias)) == 0)
device->alias = g_strdup(alias);
- device->trusted = read_trust(&src, address, device->bdaddr_type);
+ device->trusted = read_trust(src, address, device->bdaddr_type);
- if (read_blocked(&src, &device->bdaddr, device->bdaddr_type))
+ if (read_blocked(src, &device->bdaddr, device->bdaddr_type))
device_block(device, FALSE);
- if (read_link_key(&src, &device->bdaddr, device->bdaddr_type, NULL,
+ if (read_link_key(src, &device->bdaddr, device->bdaddr_type, NULL,
NULL) == 0) {
device_set_paired(device, TRUE);
device_set_bonded(device, TRUE);
}
- if (device_is_le(device) && has_longtermkeys(&src, &device->bdaddr,
+ if (device_is_le(device) && has_longtermkeys(src, &device->bdaddr,
device->bdaddr_type)) {
device_set_paired(device, TRUE);
device_set_bonded(device, TRUE);
@@ -1234,27 +1222,27 @@ uint16_t btd_device_get_version(struct btd_device *device)
static void device_remove_stored(struct btd_device *device)
{
- bdaddr_t src, dst;
+ bdaddr_t *src, dst;
uint8_t dst_type;
- adapter_get_address(device->adapter, &src);
+ src = adapter_get_address(device->adapter);
device_get_address(device, &dst, &dst_type);
- delete_entry(&src, "profiles", &dst, dst_type);
- delete_entry(&src, "trusts", &dst, dst_type);
+ delete_entry(src, "profiles", &dst, dst_type);
+ delete_entry(src, "trusts", &dst, dst_type);
if (device_is_bonded(device)) {
- delete_entry(&src, "linkkeys", &dst, dst_type);
- delete_entry(&src, "aliases", &dst, dst_type);
- delete_entry(&src, "longtermkeys", &dst, dst_type);
+ delete_entry(src, "linkkeys", &dst, dst_type);
+ delete_entry(src, "aliases", &dst, dst_type);
+ delete_entry(src, "longtermkeys", &dst, dst_type);
device_set_bonded(device, FALSE);
device->paired = FALSE;
btd_adapter_remove_bonding(device->adapter, &dst, dst_type);
}
- delete_all_records(&src, &dst, dst_type);
- delete_device_service(&src, &dst, dst_type);
+ delete_all_records(src, &dst, dst_type);
+ delete_device_service(src, &dst, dst_type);
if (device->blocked)
device_unblock(device, TRUE, FALSE);
@@ -1467,15 +1455,13 @@ static void device_remove_profiles(struct btd_device *device, GSList *uuids)
{
struct btd_adapter *adapter = device_get_adapter(device);
char srcaddr[18], dstaddr[18];
- bdaddr_t src;
sdp_list_t *records;
GSList *l;
- adapter_get_address(adapter, &src);
- ba2str(&src, srcaddr);
+ ba2str(adapter_get_address(adapter), srcaddr);
ba2str(&device->bdaddr, dstaddr);
- records = read_records(&src, &device->bdaddr);
+ records = read_records(adapter_get_address(adapter), &device->bdaddr);
DBG("Removing profiles for %s", dstaddr);
@@ -1546,10 +1532,8 @@ static void update_bredr_services(struct browse_req *req, sdp_list_t *recs)
sdp_list_t *seq;
char srcaddr[18], dstaddr[18];
uint8_t dst_type;
- bdaddr_t src;
- adapter_get_address(adapter, &src);
- ba2str(&src, srcaddr);
+ ba2str(adapter_get_address(adapter), srcaddr);
ba2str(&device->bdaddr, dstaddr);
for (seq = recs; seq; seq = seq->next) {
@@ -1680,19 +1664,18 @@ static void update_gatt_services(struct browse_req *req, GSList *current,
static void store_profiles(struct btd_device *device)
{
struct btd_adapter *adapter = device->adapter;
- bdaddr_t src;
char *str;
- adapter_get_address(adapter, &src);
-
if (!device->uuids) {
- write_device_profiles(&src, &device->bdaddr,
- device->bdaddr_type, "");
+ write_device_profiles(adapter_get_address(adapter),
+ &device->bdaddr, device->bdaddr_type,
+ "");
return;
}
str = bt_list2string(device->uuids);
- write_device_profiles(&src, &device->bdaddr, device->bdaddr_type, str);
+ write_device_profiles(adapter_get_address(adapter), &device->bdaddr,
+ device->bdaddr_type, str);
g_free(str);
}
@@ -1831,7 +1814,6 @@ static void browse_cb(sdp_list_t *recs, int err, gpointer user_data)
struct browse_req *req = user_data;
struct btd_device *device = req->device;
struct btd_adapter *adapter = device->adapter;
- bdaddr_t src;
uuid_t uuid;
/* If we have a valid response and req->search_uuid == 2, then L2CAP
@@ -1846,12 +1828,11 @@ static void browse_cb(sdp_list_t *recs, int err, gpointer user_data)
update_bredr_services(req, recs);
- adapter_get_address(adapter, &src);
-
/* Search for mandatory uuids */
if (uuid_list[req->search_uuid]) {
sdp_uuid16_create(&uuid, uuid_list[req->search_uuid++]);
- bt_search_service(&src, &device->bdaddr, &uuid,
+ bt_search_service(adapter_get_address(adapter),
+ &device->bdaddr, &uuid,
browse_cb, user_data, NULL);
return;
}
@@ -1901,13 +1882,13 @@ static char *primary_list_to_string(GSList *primary_list)
static void store_services(struct btd_device *device)
{
struct btd_adapter *adapter = device->adapter;
- bdaddr_t dba, sba;
+ bdaddr_t dba;
char *str = primary_list_to_string(device->primaries);
- adapter_get_address(adapter, &sba);
device_get_address(device, &dba, NULL);
- write_device_services(&sba, &dba, device->bdaddr_type, str);
+ write_device_services(adapter_get_address(adapter), &dba,
+ device->bdaddr_type, str);
g_free(str);
}
@@ -2129,9 +2110,7 @@ GIOChannel *device_att_connect(gpointer user_data)
GIOChannel *io;
GError *gerr = NULL;
char addr[18];
- bdaddr_t sba;
- adapter_get_address(adapter, &sba);
ba2str(&device->bdaddr, addr);
DBG("Connection attempt to: %s", addr);
@@ -2144,7 +2123,8 @@ GIOChannel *device_att_connect(gpointer user_data)
if (device_is_bredr(device)) {
io = bt_io_connect(att_connect_cb,
attcb, NULL, &gerr,
- BT_IO_OPT_SOURCE_BDADDR, &sba,
+ BT_IO_OPT_SOURCE_BDADDR,
+ adapter_get_address(adapter),
BT_IO_OPT_DEST_BDADDR, &device->bdaddr,
BT_IO_OPT_PSM, ATT_PSM,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
@@ -2153,7 +2133,8 @@ GIOChannel *device_att_connect(gpointer user_data)
/* this is a LE device during pairing, using low sec level */
io = bt_io_connect(att_connect_cb,
attcb, NULL, &gerr,
- BT_IO_OPT_SOURCE_BDADDR, &sba,
+ BT_IO_OPT_SOURCE_BDADDR,
+ adapter_get_address(adapter),
BT_IO_OPT_DEST_BDADDR, &device->bdaddr,
BT_IO_OPT_DEST_TYPE, device->bdaddr_type,
BT_IO_OPT_CID, ATT_CID,
@@ -2169,7 +2150,8 @@ GIOChannel *device_att_connect(gpointer user_data)
} else {
io = bt_io_connect(att_connect_cb,
attcb, NULL, &gerr,
- BT_IO_OPT_SOURCE_BDADDR, &sba,
+ BT_IO_OPT_SOURCE_BDADDR,
+ adapter_get_address(adapter),
BT_IO_OPT_DEST_BDADDR, &device->bdaddr,
BT_IO_OPT_DEST_TYPE, device->bdaddr_type,
BT_IO_OPT_CID, ATT_CID,
@@ -2222,14 +2204,12 @@ int device_browse_primary(struct btd_device *device, DBusMessage *msg,
struct att_callbacks *attcb;
struct browse_req *req;
BtIOSecLevel sec_level;
- bdaddr_t src;
if (device->browse)
return -EBUSY;
req = g_new0(struct browse_req, 1);
req->device = btd_device_ref(device);
- adapter_get_address(adapter, &src);
device->browse = req;
@@ -2247,7 +2227,8 @@ int device_browse_primary(struct btd_device *device, DBusMessage *msg,
device->att_io = bt_io_connect(att_connect_cb,
attcb, NULL, NULL,
- BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_SOURCE_BDADDR,
+ adapter_get_address(adapter),
BT_IO_OPT_DEST_BDADDR, &device->bdaddr,
BT_IO_OPT_DEST_TYPE, device->bdaddr_type,
BT_IO_OPT_CID, ATT_CID,
@@ -2285,15 +2266,12 @@ int device_browse_sdp(struct btd_device *device, DBusMessage *msg,
struct btd_adapter *adapter = device->adapter;
struct browse_req *req;
bt_callback_t cb;
- bdaddr_t src;
uuid_t uuid;
int err;
if (device->browse)
return -EBUSY;
- adapter_get_address(adapter, &src);
-
req = g_new0(struct browse_req, 1);
req->device = btd_device_ref(device);
if (search) {
@@ -2305,7 +2283,8 @@ int device_browse_sdp(struct btd_device *device, DBusMessage *msg,
cb = browse_cb;
}
- err = bt_search_service(&src, &device->bdaddr, &uuid, cb, req, NULL);
+ err = bt_search_service(adapter_get_address(adapter), &device->bdaddr,
+ &uuid, cb, req, NULL);
if (err < 0) {
browse_request_free(req);
return err;
@@ -2577,6 +2556,7 @@ DBusMessage *device_create_bonding(struct btd_device *device,
if (device_is_bonded(device))
return btd_error_already_exists(msg);
+ adapter_get_address(adapter),
bonding = bonding_request_new(msg, device, agent_path,
capability);
@@ -3127,8 +3107,6 @@ void btd_device_add_uuid(struct btd_device *device, const char *uuid)
const sdp_record_t *btd_device_get_record(struct btd_device *device,
const char *uuid)
{
- bdaddr_t src;
-
if (device->tmp_records) {
const sdp_record_t *record;
@@ -3141,9 +3119,8 @@ const sdp_record_t *btd_device_get_record(struct btd_device *device,
device->tmp_records = NULL;
}
- adapter_get_address(device->adapter, &src);
-
- device->tmp_records = read_records(&src, &device->bdaddr);
+ device->tmp_records = read_records(adapter_get_address(device->adapter),
+ &device->bdaddr);
if (!device->tmp_records)
return NULL;
@@ -3194,14 +3171,12 @@ void device_set_class(struct btd_device *device, uint32_t value)
int device_get_appearance(struct btd_device *device, uint16_t *value)
{
- bdaddr_t src;
uint16_t app;
int err;
- adapter_get_address(device_get_adapter(device), &src);
-
- err = read_remote_appearance(&src, &device->bdaddr,
- device->bdaddr_type, &app);
+ err = read_remote_appearance(adapter_get_address(device->adapter),
+ &device->bdaddr, device->bdaddr_type,
+ &app);
if (err < 0)
return err;
@@ -3214,7 +3189,6 @@ int device_get_appearance(struct btd_device *device, uint16_t *value)
void device_set_appearance(struct btd_device *device, uint16_t value)
{
const char *icon = gap_appearance_to_icon(value);
- bdaddr_t src;
emit_property_changed(device->path,
DEVICE_INTERFACE, "Appearance",
@@ -3225,9 +3199,8 @@ void device_set_appearance(struct btd_device *device, uint16_t value)
DEVICE_INTERFACE, "Icon",
DBUS_TYPE_STRING, &icon);
- adapter_get_address(device_get_adapter(device), &src);
- write_remote_appearance(&src, &device->bdaddr, device->bdaddr_type,
- value);
+ write_remote_appearance(adapter_get_address(device->adapter),
+ &device->bdaddr, device->bdaddr_type, value);
}
static gboolean notify_attios(gpointer user_data)
diff --git a/src/manager.c b/src/manager.c
index f1f0f4d..083e24e 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -312,11 +312,8 @@ static gint adapter_cmp(gconstpointer a, gconstpointer b)
{
struct btd_adapter *adapter = (struct btd_adapter *) a;
const bdaddr_t *bdaddr = b;
- bdaddr_t src;
- adapter_get_address(adapter, &src);
-
- return bacmp(&src, bdaddr);
+ return bacmp(adapter_get_address(adapter), bdaddr);
}
struct btd_adapter *manager_find_adapter(const bdaddr_t *sba)
diff --git a/src/profile.c b/src/profile.c
index 338e903..c10e315 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -185,12 +185,11 @@ static void ext_io_destroy(gpointer p)
}
if (ext_io->resolving) {
- bdaddr_t src, dst;
+ bdaddr_t dst;
- adapter_get_address(ext_io->adapter, &src);
device_get_address(ext_io->device, &dst, NULL);
- bt_cancel_discovery(&src, &dst);
+ bt_cancel_discovery(adapter_get_address(ext_io->adapter), &dst);
}
if (ext_io->rec_handle)
@@ -501,11 +500,8 @@ static int ext_start_servers(struct ext_profile *ext,
GError *err = NULL;
uint16_t handle;
GIOChannel *io;
- bdaddr_t src;
-
- adapter_get_address(adapter, &src);
- handle = ext_register_record(ext, &src);
+ handle = ext_register_record(ext, adapter_get_address(adapter));
if (ext->authorize) {
confirm = ext_confirm;
@@ -521,7 +517,8 @@ static int ext_start_servers(struct ext_profile *ext,
server->rec_handle = handle;
io = bt_io_listen(connect, confirm, server, NULL, &err,
- BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_SOURCE_BDADDR,
+ adapter_get_address(adapter),
BT_IO_OPT_PSM, ext->psm,
BT_IO_OPT_SEC_LEVEL, ext->sec_level,
BT_IO_OPT_INVALID);
@@ -545,7 +542,8 @@ static int ext_start_servers(struct ext_profile *ext,
server->rec_handle = handle;
io = bt_io_listen(connect, confirm, server, NULL, &err,
- BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_SOURCE_BDADDR,
+ adapter_get_address(adapter),
BT_IO_OPT_CHANNEL, ext->chan,
BT_IO_OPT_SEC_LEVEL, ext->sec_level,
BT_IO_OPT_INVALID);
@@ -720,7 +718,7 @@ static void record_cb(sdp_list_t *recs, int err, gpointer user_data)
{
struct ext_io *conn = user_data;
struct ext_profile *ext = conn->ext;
- bdaddr_t src, dst;
+ bdaddr_t dst;
sdp_list_t *r;
conn->resolving = false;
@@ -772,10 +770,9 @@ static void record_cb(sdp_list_t *recs, int err, gpointer user_data)
goto failed;
}
- adapter_get_address(conn->adapter, &src);
device_get_address(conn->device, &dst, NULL);
- err = connect_io(conn, &src, &dst);
+ err = connect_io(conn, adapter_get_address(conn->adapter), &dst);
if (err < 0) {
error("Connecting %s failed: %s", ext->name, strerror(-err));
goto failed;
@@ -810,7 +807,7 @@ static int ext_connect_dev(struct btd_device *dev, struct btd_profile *profile,
struct btd_adapter *adapter;
struct ext_io *conn;
struct ext_profile *ext;
- bdaddr_t src, dst;
+ bdaddr_t dst;
int err;
ext = find_ext(profile);
@@ -818,16 +815,15 @@ static int ext_connect_dev(struct btd_device *dev, struct btd_profile *profile,
return -ENOENT;
adapter = device_get_adapter(dev);
- adapter_get_address(adapter, &src);
device_get_address(dev, &dst, NULL);
conn = g_new0(struct ext_io, 1);
conn->ext = ext;
if (ext->psm || ext->chan)
- err = connect_io(conn, &src, &dst);
+ err = connect_io(conn, adapter_get_address(adapter), &dst);
else
- err = resolve_service(conn, &src, &dst);
+ err = resolve_service(conn, adapter_get_address(adapter), &dst);
if (err < 0)
goto failed;
--
1.7.9.5
^ permalink raw reply related
* [RFC 0/7] adapter and device bdaddr_t getters
From: Szymon Janc @ 2012-10-04 12:05 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Hi,
I've noticed that in many places similar code was created to adapt to current
adapter/device_get_address API:
bdaddr_t addr;
adapter_get_address(adapter, &addr);
foo(&addr);
bdaddr is constant anyway and such code can be converted to more convenient
foo(adapter_get_address(adapter));
Thanks to this we reduce number of memcpy calls of data that is not going to
change. Also number of local variables is removed (in places where it reduced
number of consecutive get_address calls or due to code readibility local
pointers were left).
Since this leads to calls where return is passed directly as function parameter
adapter/device_get_address could also be renamed to shorter form e.g.
adapter/device_get_addr (like device_get_addr_type is called now).
(this is not done in this patchset).
Comments are welcome.
Szymon Janc (7):
adapter: Convert adapter_get_address into simple getter
storage: Constify bdaddr_t pointers parameters
adapter: Constify pointer returned by adapter_get_address
device: Convert device_get_address into simple getter
mgmt: Constify use of bdaddr_t pointer parameters
adapter: Constify use of bdaddr_t pointer parameters
device: Make device_get_address return const pointer
attrib/client.c | 42 +++++------
audio/manager.c | 50 +++++--------
plugins/adaptername.c | 4 +-
plugins/dbusoob.c | 8 +--
plugins/neard.c | 21 +++---
plugins/service.c | 57 +++++----------
plugins/wiimote.c | 7 +-
profiles/alert/server.c | 4 +-
profiles/gatt/gas.c | 34 +++++----
profiles/health/hdp.c | 18 +++--
profiles/health/hdp_util.c | 42 +++++------
profiles/health/mcap.c | 2 +-
profiles/health/mcap_lib.h | 2 +-
profiles/input/device.c | 8 +--
profiles/input/manager.c | 11 +--
profiles/network/connection.c | 6 +-
profiles/network/connection.h | 2 +-
profiles/network/manager.c | 13 ++--
profiles/network/server.c | 8 +--
profiles/proximity/monitor.c | 20 +++---
profiles/sap/manager.c | 5 +-
profiles/sap/server.c | 2 +-
profiles/sap/server.h | 2 +-
src/adapter.c | 73 +++++++++----------
src/adapter.h | 59 +++++++++-------
src/attrib-server.c | 18 ++---
src/device.c | 157 ++++++++++++++++-------------------------
src/device.h | 3 +-
src/eir.c | 2 +-
src/eir.h | 2 +-
src/event.c | 27 +++----
src/manager.c | 5 +-
src/mgmt.c | 31 ++++----
src/mgmt.h | 26 +++----
src/profile.c | 47 ++++++------
src/storage.c | 97 +++++++++++++------------
src/storage.h | 95 ++++++++++++++-----------
37 files changed, 451 insertions(+), 559 deletions(-)
--
1.7.9.5
^ permalink raw reply
* Re: [PATCH BlueZ v4 14/15] Use DBus.Properties on Control interface
From: Anderson Lizardo @ 2012-10-04 11:42 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: linux-bluetooth, Lucas De Marchi
In-Reply-To: <1349335599-12443-15-git-send-email-lucas.de.marchi@gmail.com>
Hi Lucas,
On Thu, Oct 4, 2012 at 3:26 AM, Lucas De Marchi
<lucas.demarchi@profusion.mobi> wrote:
> @@ -77,13 +76,11 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
> if (old_state != AVCTP_STATE_CONNECTED)
> break;
>
> - value = FALSE;
> g_dbus_emit_signal(conn, dev->path,
> AUDIO_CONTROL_INTERFACE,
> "Disconnected", DBUS_TYPE_INVALID);
> - emit_property_changed(dev->path,
> - AUDIO_CONTROL_INTERFACE, "Connected",
> - DBUS_TYPE_BOOLEAN, &value);
> + g_dbus_emit_property_changed(conn, dev->path,
> + AUDIO_CONTROL_INTERFACE, "Connected");
Out of curiosity, do you know why this API has Connected/Disconnected
signals besides the PropertyChanged("Connected", ...) ?
Regards,
--
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil
^ permalink raw reply
* [PATCH] Bluetooth: mgmt: Fix dereference after NULL check
From: Andrei Emeltchenko @ 2012-10-04 10:56 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
hdev might be NULL, so we need to avoid possible NULL derefernce in
handler->func functions.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/mgmt.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index b127b88..be3182c 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -2738,7 +2738,6 @@ static const struct mgmt_handler {
int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
{
void *buf;
- u8 *cp;
struct mgmt_hdr *hdr;
u16 opcode, index, len;
struct hci_dev *hdev = NULL;
@@ -2802,14 +2801,17 @@ int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
goto done;
}
- if (hdev)
+ if (hdev) {
+ u8 *cp;
+
mgmt_init_hdev(sk, hdev);
- cp = buf + sizeof(*hdr);
+ cp = buf + sizeof(*hdr);
- err = handler->func(sk, hdev, cp, len);
- if (err < 0)
- goto done;
+ err = handler->func(sk, hdev, cp, len);
+ if (err < 0)
+ goto done;
+ }
err = msglen;
--
1.7.9.5
^ permalink raw reply related
* [PATCH] Bluetooth: Fix dereference after NULL check
From: Andrei Emeltchenko @ 2012-10-04 10:45 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Move code dereferencing possible NULL pointer to the check branch.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/l2cap_sock.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index e6238eb..0c05d7d 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -386,13 +386,14 @@ static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, ch
}
memset(&sec, 0, sizeof(sec));
- if (chan->conn)
+ if (chan->conn) {
sec.level = chan->conn->hcon->sec_level;
- else
- sec.level = chan->sec_level;
- if (sk->sk_state == BT_CONNECTED)
- sec.key_size = chan->conn->hcon->enc_key_size;
+ if (sk->sk_state == BT_CONNECTED)
+ sec.key_size = chan->conn->hcon->enc_key_size;
+ } else {
+ sec.level = chan->sec_level;
+ }
len = min_t(unsigned int, len, sizeof(sec));
if (copy_to_user(optval, (char *) &sec, len))
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH BlueZ 2/2] build-sys: Don't use deprecated INCLUDES variable
From: Anderson Lizardo @ 2012-10-04 10:38 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: linux-bluetooth, Lucas De Marchi
In-Reply-To: <1349332630-8901-2-git-send-email-lucas.de.marchi@gmail.com>
Hi Lucas/Johan,
On Thu, Oct 4, 2012 at 2:37 AM, Lucas De Marchi
<lucas.demarchi@profusion.mobi> wrote:
> Makefile.am:410: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
> ---
> Makefile.am | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/Makefile.am b/Makefile.am
> index dea207e..3b08f9a 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -407,13 +407,13 @@ AM_YFLAGS = -d
>
> AM_CFLAGS += @DBUS_CFLAGS@ @GLIB_CFLAGS@
>
> -INCLUDES = -I$(builddir)/lib -I$(builddir)/src -I$(srcdir)/src \
> +AM_CPPFLAGS = -I$(builddir)/lib -I$(builddir)/src -I$(srcdir)/src \
> -I$(srcdir)/audio -I$(srcdir)/sbc -I$(srcdir)/gdbus \
> -I$(srcdir)/attrib -I$(srcdir)/btio -I$(srcdir)/tools \
> -I$(builddir)/tools -I$(srcdir)/monitor
>
> if MCAP
> -INCLUDES += -I$(builddir)/health
> +AM_CPPFLAGS += -I$(builddir)/health
> endif
This reminds me that the patch I sent few days ago which removes the
snippet above (which is unnecessary, given the directory does not
exist anymore and profiles/health still builds just fine) was not
applied yet.
I'll rebase and resend. There were comments from Marcel regarding the
use of symlinks for drivers (i.e. telephony, sap), which will be
addressed in a separate patch.
Best Regards,
--
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil
^ permalink raw reply
* Re: [PATCH v2 resend 1/2] Introduced a load_firmware callback to struct hci_dev
From: Jesse Sung @ 2012-10-04 10:37 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: Gustavo Padovan, Johan Hedberg, linux-bluetooth
In-Reply-To: <1349344897.27233.13.camel@aeonflux>
Hi Marcel,
2012/10/4 Marcel Holtmann <marcel@holtmann.org>:
> Hi Jesse,
>
>> load_firmware will be called at the end of hci_dev_open() if it
>> is defined.
>>
>> Signed-off-by: Wen-chien Jesse Sung <jesse.sung@canonical.com>
>> ---
>> include/net/bluetooth/hci_core.h | 1 +
>> net/bluetooth/hci_core.c | 2 ++
>> 2 files changed, 3 insertions(+)
>>
>> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
>> index 593cd1d..40972a3 100644
>> --- a/include/net/bluetooth/hci_core.h
>> +++ b/include/net/bluetooth/hci_core.h
>> @@ -281,6 +281,7 @@ struct hci_dev {
>> int (*send)(struct sk_buff *skb);
>> void (*notify)(struct hci_dev *hdev, unsigned int evt);
>> int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
>> + void (*load_firmware)(struct hci_dev *hdev);
>> };
>>
>> struct hci_conn {
>> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
>> index d4de5db..49be87a 100644
>> --- a/net/bluetooth/hci_core.c
>> +++ b/net/bluetooth/hci_core.c
>> @@ -725,6 +725,8 @@ int hci_dev_open(__u16 dev)
>> done:
>> hci_req_unlock(hdev);
>> hci_dev_put(hdev);
>> + if (!ret && hdev->load_firmware)
>> + hdev->load_firmware(hdev);
>> return ret;
>> }
>>
>
> has anybody thought this through actually? Do we need to reload the
> firmware after every HCI_Reset? Since hci_dev_open() is used at least
> twice during normal operation. And for every RFKILL or power down/up
> cycle of the chip.
>
> And there is an internal process of hci_dev_open() trigger on
> registration and others triggered by hciconfig hci0 up. I am pretty much
> against having to wait for all this firmware loading crap during every
> bring up of the device. Especially since it always does a trip via
> request_firmware().
In the second patch, firmware loading would be done only once per
power cycle of the chip. Since I think it should be the device driver, not hci,
who knows when and how to load firmware, the lock is placed in btusb.c.
Thanks,
Jesse
^ permalink raw reply
* [PATCH] Bluetooth: AMP: Fix possible NULL dereference
From: Andrei Emeltchenko @ 2012-10-04 10:31 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Check that link key exist before accessing.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
net/bluetooth/amp.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/net/bluetooth/amp.c b/net/bluetooth/amp.c
index c933c72..7e4a1e5 100644
--- a/net/bluetooth/amp.c
+++ b/net/bluetooth/amp.c
@@ -185,6 +185,10 @@ int phylink_gen_key(struct hci_conn *conn, u8 *data, u8 *len, u8 *type)
*len = HCI_AMP_LINK_KEY_SIZE;
key = hci_find_link_key(hdev, &conn->dst);
+ if (!key) {
+ BT_DBG("No Link key for conn %p dst %pMR", conn, &conn->dst);
+ return -EACCES;
+ }
/* BR/EDR Link Key concatenated together with itself */
memcpy(&keybuf[0], key->val, HCI_LINK_KEY_SIZE);
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH] Bluetooth: AMP: Register AMP only if High Speed enabled
From: Marcel Holtmann @ 2012-10-04 10:26 UTC (permalink / raw)
To: Andrei Emeltchenko; +Cc: linux-bluetooth
In-Reply-To: <20121004101010.GA12229@aemeltch-MOBL1>
Hi Andrei,
> > > Make sure that AMP controller is registered only if HS enables.
> > > Return EINVAL if High Speed is not enabled and dev_type is HCI_AMP.
> >
> > I don't think this is a good idea. I like to keep the adapter registers,
> > but maybe have a hciconfig hciX up fail. Not the registration itself.
>
> So currently AMP registers itself as RAW device, maybe leave it as is.
we can do that, but that will also never give us enough testing
exposure. An adapter registered a RAW device, can not undo the RAW
device from userspace, you need to recompile the kernel.
So as I said, I rather have hciconfig hciX up fail in the case enable_hs
is set to false.
I am even fine with allowing to bring up AMP controllers. Just when it
comes to A2MP, you can not announce them to the other side unless
enable_hs is set to true.
You can not even list A2MP in the fixed channel list if enanble_hs is
false and L2CAP and A2MP procedures should just fail or return an error.
Regards
Marcel
^ permalink raw reply
* Re: [RFC 2/2] Bluetooth: Add BT USB mini driver template
From: Marcel Holtmann @ 2012-10-04 10:21 UTC (permalink / raw)
To: Tedd Ho-Jeong An; +Cc: linux-bluetooth, johan.hedberg, albert.o.ho, tedd.hj.an
In-Reply-To: <2904542.YtJ1Wo3BEY@tedd-ubuntu>
Hi Tedd,
> This patch adds BT USB mini driver template.
>
> Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
> ---
> drivers/bluetooth/Makefile | 1 +
> drivers/bluetooth/btusb.c | 3 ++
> drivers/bluetooth/btusb_template.c | 78 ++++++++++++++++++++++++++++++++++++
> 3 files changed, 82 insertions(+)
> create mode 100644 drivers/bluetooth/btusb_template.c
we would have samples/ for this.
Regards
Marcel
^ permalink raw reply
* Re: [RFC 1/2] Bluetooth: Add driver extension for vendor specific init
From: Marcel Holtmann @ 2012-10-04 10:20 UTC (permalink / raw)
To: Tedd Ho-Jeong An; +Cc: linux-bluetooth, johan.hedberg, albert.o.ho, tedd.hj.an
In-Reply-To: <39660287.XHkFNqYcyS@tedd-ubuntu>
Hi Tedd,
> This patch provides an extension of btusb to support device vendor
> can implement their own module to execute the vendor specific
> device initialization before the stack sends generic BT device
> initialization.
>
> Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
> ---
> drivers/bluetooth/btusb.c | 191 +++++++++++++++++++++++++-------------
> drivers/bluetooth/btusb.h | 53 +++++++++++
> include/net/bluetooth/hci_core.h | 10 ++
> net/bluetooth/hci_core.c | 15 ++-
> 4 files changed, 204 insertions(+), 65 deletions(-)
> create mode 100644 drivers/bluetooth/btusb.h
>
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index f637c25..afa1558 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -26,6 +26,7 @@
>
> #include <net/bluetooth/bluetooth.h>
> #include <net/bluetooth/hci_core.h>
> +#include "btusb.h"
>
> #define VERSION "0.6"
>
> @@ -39,14 +40,59 @@ static bool reset = 1;
>
> static struct usb_driver btusb_driver;
>
> -#define BTUSB_IGNORE 0x01
> -#define BTUSB_DIGIANSWER 0x02
> -#define BTUSB_CSR 0x04
> -#define BTUSB_SNIFFER 0x08
> -#define BTUSB_BCM92035 0x10
> -#define BTUSB_BROKEN_ISOC 0x20
> -#define BTUSB_WRONG_SCO_MTU 0x40
> -#define BTUSB_ATH3012 0x80
> +/*
> + * Create btusb_driver_info struct for each driver_info flags used by
> + * blacklist since vendor's btusb driver will return btusb_driver_info struct.
> + */
> +
> +/*
> + * if the device is set to this, this menas that the device is generic and
> + * doesn't require any vendor specific handling
> + */
> +static const struct btusb_driver_info generic = {
> + .description = "BTUSB Generic",
> + .flags = BTUSB_GENERIC,
> +};
> +
> +static const struct btusb_driver_info ignore = {
> + .description = "BTUSB Ignore",
> + .flags = BTUSB_IGNORE,
> +};
I like the effort, but I think you went a little bit too far here. For
these simple ones, we can easily keep our simple blacklist. It keeps the
code more readable than this part. But I do appreciate the attempt in
unifying this.
> +
> +static const struct btusb_driver_info digianswer = {
> + .description = "BTUSB DIGIANSWER",
> + .flags = BTUSB_DIGIANSWER,
> +};
> +
> +static const struct btusb_driver_info csr = {
> + .description = "BTUSB CSR",
> + .flags = BTUSB_CSR,
> +};
> +
> +static const struct btusb_driver_info sniffer = {
> + .description = "BTUSB Sniffer",
> + .flags = BTUSB_SNIFFER,
> +};
> +
> +static const struct btusb_driver_info bcm92035 = {
> + .description = "BTUSB BCM92035",
> + .flags = BTUSB_BCM92035,
> +};
> +
> +static const struct btusb_driver_info broken_isoc = {
> + .description = "BTUSB Broken ISOC",
> + .flags = BTUSB_BROKEN_ISOC,
> +};
> +
> +static const struct btusb_driver_info wrong_sco_mtu = {
> + .description = "BTUSB Wrong SCO MTU",
> + .flags = BTUSB_WRONG_SCO_MTU,
> +};
> +
> +static const struct btusb_driver_info ath3012 = {
> + .description = "BTUSB Ath3012",
> + .flags = BTUSB_ATH3012,
> +};
>
> static struct usb_device_id btusb_table[] = {
> /* Generic Bluetooth USB device */
> @@ -105,90 +151,89 @@ static struct usb_device_id btusb_table[] = {
>
> { } /* Terminating entry */
> };
> -
> MODULE_DEVICE_TABLE(usb, btusb_table);
>
> static struct usb_device_id blacklist_table[] = {
> /* CSR BlueCore devices */
> - { USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR },
> + { USB_DEVICE(0x0a12, 0x0001), .driver_info = (unsigned long) &csr },
Keep the blacklist_table as it is. The important table to modify is
btusb_table and use a common driver_info that will be shared between
drivers.
That would also make it simple to just add BTUSB_IGNORE or a new
BTUSB_VENDOR flag to call out the drivers that have a separate driver
with a vendor init function, but would match the Bluetooth general USB
descriptors.
Then over time, we can move the BTUSB_BCM92035 for example into its
separate driver. And also deal with cleaning up all the other Broadcom
specialties.
>
> /* Broadcom BCM2033 without firmware */
> - { USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
> + { USB_DEVICE(0x0a5c, 0x2033), .driver_info = (unsigned long) &ignore },
>
> /* Atheros 3011 with sflash firmware */
> - { USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
> - { USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE },
> - { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
> - { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
> - { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
> + { USB_DEVICE(0x0cf3, 0x3002), .driver_info = (unsigned long) &ignore },
> + { USB_DEVICE(0x0cf3, 0xe019), .driver_info = (unsigned long) &ignore },
> + { USB_DEVICE(0x13d3, 0x3304), .driver_info = (unsigned long) &ignore },
> + { USB_DEVICE(0x0930, 0x0215), .driver_info = (unsigned long) &ignore },
> + { USB_DEVICE(0x0489, 0xe03d), .driver_info = (unsigned long) &ignore },
>
> /* Atheros AR9285 Malbec with sflash firmware */
> - { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
> + { USB_DEVICE(0x03f0, 0x311d), .driver_info = (unsigned long) &ignore },
>
> /* Atheros 3012 with sflash firmware */
> - { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
> - { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
> - { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
> - { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
> - { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
> - { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
> - { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
> + { USB_DEVICE(0x0cf3, 0x3004), .driver_info = (unsigned long) &ath3012 },
> + { USB_DEVICE(0x0cf3, 0x311d), .driver_info = (unsigned long) &ath3012 },
> + { USB_DEVICE(0x13d3, 0x3375), .driver_info = (unsigned long) &ath3012 },
> + { USB_DEVICE(0x04ca, 0x3005), .driver_info = (unsigned long) &ath3012 },
> + { USB_DEVICE(0x13d3, 0x3362), .driver_info = (unsigned long) &ath3012 },
> + { USB_DEVICE(0x0cf3, 0xe004), .driver_info = (unsigned long) &ath3012 },
> + { USB_DEVICE(0x0930, 0x0219), .driver_info = (unsigned long) &ath3012 },
>
> /* Atheros AR5BBU12 with sflash firmware */
> - { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
> + { USB_DEVICE(0x0489, 0xe02c), .driver_info = (unsigned long) &ignore },
>
> /* Atheros AR5BBU12 with sflash firmware */
> - { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
> + { USB_DEVICE(0x0489, 0xe03c), .driver_info = (unsigned long) &ath3012 },
>
> /* Broadcom BCM2035 */
> - { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
> - { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
> - { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
> + { USB_DEVICE(0x0a5c, 0x2035), .driver_info = (unsigned long) &wrong_sco_mtu },
> + { USB_DEVICE(0x0a5c, 0x200a), .driver_info = (unsigned long) &wrong_sco_mtu },
> + { USB_DEVICE(0x0a5c, 0x2009), .driver_info = (unsigned long) &bcm92035 },
>
> /* Broadcom BCM2045 */
> - { USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU },
> - { USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x0a5c, 0x2039), .driver_info = (unsigned long) &wrong_sco_mtu },
> + { USB_DEVICE(0x0a5c, 0x2101), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* IBM/Lenovo ThinkPad with Broadcom chip */
> - { USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_WRONG_SCO_MTU },
> - { USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x0a5c, 0x201e), .driver_info = (unsigned long) &wrong_sco_mtu },
> + { USB_DEVICE(0x0a5c, 0x2110), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* HP laptop with Broadcom chip */
> - { USB_DEVICE(0x03f0, 0x171d), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x03f0, 0x171d), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* Dell laptop with Broadcom chip */
> - { USB_DEVICE(0x413c, 0x8126), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x413c, 0x8126), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* Dell Wireless 370 and 410 devices */
> - { USB_DEVICE(0x413c, 0x8152), .driver_info = BTUSB_WRONG_SCO_MTU },
> - { USB_DEVICE(0x413c, 0x8156), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x413c, 0x8152), .driver_info = (unsigned long) &wrong_sco_mtu },
> + { USB_DEVICE(0x413c, 0x8156), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* Belkin F8T012 and F8T013 devices */
> - { USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_WRONG_SCO_MTU },
> - { USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x050d, 0x0012), .driver_info = (unsigned long) &wrong_sco_mtu },
> + { USB_DEVICE(0x050d, 0x0013), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* Asus WL-BTD202 device */
> - { USB_DEVICE(0x0b05, 0x1715), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x0b05, 0x1715), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* Kensington Bluetooth USB adapter */
> - { USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU },
> + { USB_DEVICE(0x047d, 0x105e), .driver_info = (unsigned long) &wrong_sco_mtu },
>
> /* RTX Telecom based adapters with buggy SCO support */
> - { USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC },
> - { USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC },
> + { USB_DEVICE(0x0400, 0x0807), .driver_info = (unsigned long) &broken_isoc },
> + { USB_DEVICE(0x0400, 0x080a), .driver_info = (unsigned long) &broken_isoc },
>
> /* CONWISE Technology based adapters with buggy SCO support */
> - { USB_DEVICE(0x0e5e, 0x6622), .driver_info = BTUSB_BROKEN_ISOC },
> + { USB_DEVICE(0x0e5e, 0x6622), .driver_info = (unsigned long) &broken_isoc },
>
> /* Digianswer devices */
> - { USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER },
> - { USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE },
> + { USB_DEVICE(0x08fd, 0x0001), .driver_info = (unsigned long) &digianswer },
> + { USB_DEVICE(0x08fd, 0x0002), .driver_info = (unsigned long) &ignore },
>
> /* CSR BlueCore Bluetooth Sniffer */
> - { USB_DEVICE(0x0a12, 0x0002), .driver_info = BTUSB_SNIFFER },
> + { USB_DEVICE(0x0a12, 0x0002), .driver_info = (unsigned long) &sniffer },
>
> /* Frontline ComProbe Bluetooth Sniffer */
> - { USB_DEVICE(0x16d3, 0x0002), .driver_info = BTUSB_SNIFFER },
> + { USB_DEVICE(0x16d3, 0x0002), .driver_info = (unsigned long) &sniffer },
>
> { } /* Terminating entry */
> };
> @@ -910,12 +955,12 @@ static void btusb_waker(struct work_struct *work)
> usb_autopm_put_interface(data->intf);
> }
>
> -static int btusb_probe(struct usb_interface *intf,
> - const struct usb_device_id *id)
> +int btusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
> {
> struct usb_endpoint_descriptor *ep_desc;
> struct btusb_data *data;
> struct hci_dev *hdev;
> + struct btusb_driver_info *info;
> int i, err;
>
> BT_DBG("intf %p id %p", intf, id);
> @@ -931,19 +976,28 @@ static int btusb_probe(struct usb_interface *intf,
> id = match;
> }
>
> - if (id->driver_info == BTUSB_IGNORE)
> + /*
> + * Make sure the driver_info is not null or 0 because the code below
> + * need to access the flags
> + */
> + if (!id->driver_info)
> + info = (struct btusb_driver_info *) &generic;
> + else
> + info = (struct btusb_driver_info *) id->driver_info;
> +
> + if (info->flags == BTUSB_IGNORE)
> return -ENODEV;
>
> - if (ignore_dga && id->driver_info & BTUSB_DIGIANSWER)
> + if (ignore_dga && (info->flags & BTUSB_DIGIANSWER))
> return -ENODEV;
>
> - if (ignore_csr && id->driver_info & BTUSB_CSR)
> + if (ignore_csr && (info->flags & BTUSB_CSR))
> return -ENODEV;
>
> - if (ignore_sniffer && id->driver_info & BTUSB_SNIFFER)
> + if (ignore_sniffer && (info->flags & BTUSB_SNIFFER))
> return -ENODEV;
>
> - if (id->driver_info & BTUSB_ATH3012) {
> + if (info->flags & BTUSB_ATH3012) {
> struct usb_device *udev = interface_to_usbdev(intf);
>
> /* Old firmware would otherwise let ath3k driver load
> @@ -1012,26 +1066,30 @@ static int btusb_probe(struct usb_interface *intf,
> hdev->send = btusb_send_frame;
> hdev->notify = btusb_notify;
>
> + /* vendor specific device initialization routines */
> + hdev->vsdev_init = info->vsdev_init;
> + hdev->vsdev_event = info->vsdev_event;
> +
> /* Interface numbers are hardcoded in the specification */
> data->isoc = usb_ifnum_to_if(data->udev, 1);
>
> if (!reset)
> set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
>
> - if (force_scofix || id->driver_info & BTUSB_WRONG_SCO_MTU) {
> + if (force_scofix || (info->flags & BTUSB_WRONG_SCO_MTU)) {
> if (!disable_scofix)
> set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
> }
>
> - if (id->driver_info & BTUSB_BROKEN_ISOC)
> + if (info->flags & BTUSB_BROKEN_ISOC)
> data->isoc = NULL;
>
> - if (id->driver_info & BTUSB_DIGIANSWER) {
> + if (info->flags & BTUSB_DIGIANSWER) {
> data->cmdreq_type = USB_TYPE_VENDOR;
> set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
> }
>
> - if (id->driver_info & BTUSB_CSR) {
> + if (info->flags & BTUSB_CSR) {
> struct usb_device *udev = data->udev;
>
> /* Old firmware would otherwise execute USB reset */
> @@ -1039,7 +1097,7 @@ static int btusb_probe(struct usb_interface *intf,
> set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
> }
>
> - if (id->driver_info & BTUSB_SNIFFER) {
> + if (info->flags & BTUSB_SNIFFER) {
> struct usb_device *udev = data->udev;
>
> /* New sniffer firmware has crippled HCI interface */
> @@ -1049,7 +1107,7 @@ static int btusb_probe(struct usb_interface *intf,
> data->isoc = NULL;
> }
>
> - if (id->driver_info & BTUSB_BCM92035) {
> + if (info->flags & BTUSB_BCM92035) {
> unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
> struct sk_buff *skb;
>
> @@ -1079,8 +1137,9 @@ static int btusb_probe(struct usb_interface *intf,
>
> return 0;
> }
> +EXPORT_SYMBOL_GPL(btusb_probe);
>
> -static void btusb_disconnect(struct usb_interface *intf)
> +void btusb_disconnect(struct usb_interface *intf)
> {
> struct btusb_data *data = usb_get_intfdata(intf);
> struct hci_dev *hdev;
> @@ -1105,9 +1164,10 @@ static void btusb_disconnect(struct usb_interface *intf)
>
> hci_free_dev(hdev);
> }
> +EXPORT_SYMBOL_GPL(btusb_disconnect);
>
> #ifdef CONFIG_PM
> -static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
> +int btusb_suspend(struct usb_interface *intf, pm_message_t message)
> {
> struct btusb_data *data = usb_get_intfdata(intf);
>
> @@ -1133,6 +1193,7 @@ static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
>
> return 0;
> }
> +EXPORT_SYMBOL_GPL(btusb_suspend);
>
> static void play_deferred(struct btusb_data *data)
> {
> @@ -1149,7 +1210,7 @@ static void play_deferred(struct btusb_data *data)
> usb_scuttle_anchored_urbs(&data->deferred);
> }
>
> -static int btusb_resume(struct usb_interface *intf)
> +int btusb_resume(struct usb_interface *intf)
> {
> struct btusb_data *data = usb_get_intfdata(intf);
> struct hci_dev *hdev = data->hdev;
> @@ -1205,8 +1266,10 @@ done:
>
> return err;
> }
> +EXPORT_SYMBOL_GPL(btusb_resume);
> #endif
>
> +
> static struct usb_driver btusb_driver = {
> .name = "btusb",
> .probe = btusb_probe,
> diff --git a/drivers/bluetooth/btusb.h b/drivers/bluetooth/btusb.h
> new file mode 100644
> index 0000000..c26a845
> --- /dev/null
> +++ b/drivers/bluetooth/btusb.h
> @@ -0,0 +1,53 @@
> +/*
> + *
> + * Generic Bluetooth USB driver
> + *
> + * Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org>
> + *
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + *
> + */
> +#ifndef _BTUSB_H
> +#define _BTUSB_H
> +
> +struct btusb_driver_info {
> + char *description;
> + int flags;
> +#define BTUSB_GENERIC 0x00
> +#define BTUSB_IGNORE 0x01
> +#define BTUSB_DIGIANSWER 0x02
> +#define BTUSB_CSR 0x04
> +#define BTUSB_SNIFFER 0x08
> +#define BTUSB_BCM92035 0x10
> +#define BTUSB_BROKEN_ISOC 0x20
> +#define BTUSB_WRONG_SCO_MTU 0x40
> +#define BTUSB_ATH3012 0x80
> +
> + /* entry point for vendor specific device initialization */
> + int (*vsdev_init)(struct hci_dev *hdev);
Keep it simple. Call this (*setup).
> +
> + /* event handler during vendor specific device initiation phase */
> + void (*vsdev_event)(struct hci_dev *hdev, struct sk_buff *skb);
And this just (*event).
I am still curious if we would need the event part at all when using HCI
command handling with callbacks, but I know at least that CSR is not
following the HCI specification for command + event, so it might be a
good idea.
> +};
> +
> +extern int btusb_probe(struct usb_interface *, const struct usb_device_id *);
> +extern void btusb_disconnect(struct usb_interface *);
> +#ifdef CONFIG_PM
> +extern int btusb_suspend(struct usb_interface *, pm_message_t);
> +extern int btusb_resume(struct usb_interface *);
> +#endif
> +
> +#endif /* _BTUSB_H */
> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
> index 6a3337e..4af601d 100644
> --- a/include/net/bluetooth/hci_core.h
> +++ b/include/net/bluetooth/hci_core.h
> @@ -275,6 +275,16 @@ struct hci_dev {
> int (*send)(struct sk_buff *skb);
> void (*notify)(struct hci_dev *hdev, unsigned int evt);
> int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
> +
> + /*
> + * TODO: Added following members for vendor specific initialization to
> + * make the bluetooth.ko transparent to the interface.
> + * These members are set by the vendor provided driver
> + */
> + int vsdev_init_done;
For this, please use dev_flags. No need waste space with another
variable.
> + void *vsdev_priv_data;
> + int (*vsdev_init)(struct hci_dev *hdev);
> + void (*vsdev_event)(struct hci_dev *hdev, struct sk_buff *skb);
> };
Rather like vendor_setup and vendor_event here. I do not even want to
know what vs stands for ;)
Hope we are not getting into trouble with driver id tables normally
being const.
>
> struct hci_conn {
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index e407051..80aa13f 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -685,6 +685,15 @@ int hci_dev_open(__u16 dev)
> set_bit(HCI_INIT, &hdev->flags);
> hdev->init_last_cmd = 0;
>
> + /* vendor specific device initialization */
> + if (hdev->vsdev_init) {
> + ret = hdev->vsdev_init(hdev);
> + hdev->vsdev_init_done = 1;
> + hdev->vsdev_event = NULL;
> + if (ret < 0)
> + goto done;
> + }
> +
Do you really want to do this on every hciconfig hci0 up? I assumed this
is a one time task. So you might better look at hci_power_on() for this.
Is a HCI_Reset command unloading the firmware patches.
> ret = __hci_request(hdev, hci_init_req, 0, HCI_INIT_TIMEOUT);
>
> if (lmp_host_le_capable(hdev))
> @@ -2119,6 +2128,7 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param)
>
> return 0;
> }
> +EXPORT_SYMBOL(hci_send_cmd);
>
> /* Get data from the previously sent command */
> void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
> @@ -2800,7 +2810,10 @@ static void hci_rx_work(struct work_struct *work)
> switch (bt_cb(skb)->pkt_type) {
> case HCI_EVENT_PKT:
> BT_DBG("%s Event packet", hdev->name);
> - hci_event_packet(hdev, skb);
> + if (hdev->vsdev_event && !hdev->vsdev_init_done)
> + hdev->vsdev_event(hdev, skb);
> + else
> + hci_event_packet(hdev, skb);
> break;
Not going through hci_event_packet is a bad idea. That will screw over
the flow control handling for commands.
Regards
Marcel
^ permalink raw reply
* Re: [PATCH] Bluetooth: AMP: Register AMP only if High Speed enabled
From: Andrei Emeltchenko @ 2012-10-04 10:10 UTC (permalink / raw)
To: Marcel Holtmann; +Cc: linux-bluetooth
In-Reply-To: <1349344331.27233.9.camel@aeonflux>
Hi Marcel,
On Thu, Oct 04, 2012 at 11:52:11AM +0200, Marcel Holtmann wrote:
> Hi Andrei,
>
> > Make sure that AMP controller is registered only if HS enables.
> > Return EINVAL if High Speed is not enabled and dev_type is HCI_AMP.
>
> I don't think this is a good idea. I like to keep the adapter registers,
> but maybe have a hciconfig hciX up fail. Not the registration itself.
So currently AMP registers itself as RAW device, maybe leave it as is.
Best regards
Andrei Emeltchenko
>
> If you would fail the registration itself, then you have the problem
> that you need to unplug and replug the hardware once you changed
> enable_hs. And that might not always be possible.
>
> Regards
>
> Marcel
>
>
^ permalink raw reply
* Re: [PATCH v2 resend 1/2] Introduced a load_firmware callback to struct hci_dev
From: Marcel Holtmann @ 2012-10-04 10:01 UTC (permalink / raw)
To: Jesse Sung; +Cc: Gustavo Padovan, Johan Hedberg, linux-bluetooth
In-Reply-To: <1349335847-1615-2-git-send-email-jesse.sung@canonical.com>
Hi Jesse,
> load_firmware will be called at the end of hci_dev_open() if it
> is defined.
>
> Signed-off-by: Wen-chien Jesse Sung <jesse.sung@canonical.com>
> ---
> include/net/bluetooth/hci_core.h | 1 +
> net/bluetooth/hci_core.c | 2 ++
> 2 files changed, 3 insertions(+)
>
> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
> index 593cd1d..40972a3 100644
> --- a/include/net/bluetooth/hci_core.h
> +++ b/include/net/bluetooth/hci_core.h
> @@ -281,6 +281,7 @@ struct hci_dev {
> int (*send)(struct sk_buff *skb);
> void (*notify)(struct hci_dev *hdev, unsigned int evt);
> int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
> + void (*load_firmware)(struct hci_dev *hdev);
> };
>
> struct hci_conn {
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index d4de5db..49be87a 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -725,6 +725,8 @@ int hci_dev_open(__u16 dev)
> done:
> hci_req_unlock(hdev);
> hci_dev_put(hdev);
> + if (!ret && hdev->load_firmware)
> + hdev->load_firmware(hdev);
> return ret;
> }
>
has anybody thought this through actually? Do we need to reload the
firmware after every HCI_Reset? Since hci_dev_open() is used at least
twice during normal operation. And for every RFKILL or power down/up
cycle of the chip.
And there is an internal process of hci_dev_open() trigger on
registration and others triggered by hciconfig hci0 up. I am pretty much
against having to wait for all this firmware loading crap during every
bring up of the device. Especially since it always does a trip via
request_firmware().
Regards
Marcel
^ permalink raw reply
* Re: [PATCH] Bluetooth: AMP: Register AMP only if High Speed enabled
From: Marcel Holtmann @ 2012-10-04 9:52 UTC (permalink / raw)
To: Andrei Emeltchenko; +Cc: linux-bluetooth
In-Reply-To: <1349339215-8422-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>
Hi Andrei,
> Make sure that AMP controller is registered only if HS enables.
> Return EINVAL if High Speed is not enabled and dev_type is HCI_AMP.
I don't think this is a good idea. I like to keep the adapter registers,
but maybe have a hciconfig hciX up fail. Not the registration itself.
If you would fail the registration itself, then you have the problem
that you need to unplug and replug the hardware once you changed
enable_hs. And that might not always be possible.
Regards
Marcel
^ permalink raw reply
* Re: [PATCH 1/5] bt tool: initial tool handling
From: Marcel Holtmann @ 2012-10-04 9:47 UTC (permalink / raw)
To: Gustavo Padovan; +Cc: linux-bluetooth, travis.reitter, Gustavo Padovan
In-Reply-To: <1349285669-20464-2-git-send-email-gustavo@padovan.org>
Hi Gustavo,
> All core code to using this tool is here, the nexts steps will add
> commands like 'discover' 'pair' 'agent', etc.
> ---
> Makefile.tools | 7 +-
> tools/bt-tool.c | 421 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 427 insertions(+), 1 deletion(-)
> create mode 100644 tools/bt-tool.c
use client/main.c for this. Similar to how we do that inside ConnMan.
The tools directory is full of files by now.
Regards
Marcel
^ permalink raw reply
* Re: [PATCH BlueZ 02/10] gdbus: Remove connection from g_dbus_remove_watch
From: Luiz Augusto von Dentz @ 2012-10-04 8:42 UTC (permalink / raw)
To: Lucas De Marchi, Marcel Holtmann; +Cc: linux-bluetooth
In-Reply-To: <CABBYNZKtES_LgxOBjx-aaDCKionV039M+mDHF5WJ3SZVAn2ABQ@mail.gmail.com>
Hi Marcel,
On Tue, Oct 2, 2012 at 4:57 PM, Luiz Augusto von Dentz
<luiz.dentz@gmail.com> wrote:
> Hi Lucas,
>
> On Tue, Oct 2, 2012 at 1:49 PM, Lucas De Marchi
> <lucas.demarchi@profusion.mobi> wrote:
>> On Tue, Oct 2, 2012 at 5:05 AM, Luiz Augusto von Dentz
>> <luiz.dentz@gmail.com> wrote:
>>> Hi Lucas,
>>>
>>> On Tue, Oct 2, 2012 at 7:23 AM, Lucas De Marchi
>>> <lucas.demarchi@profusion.mobi> wrote:
>>>> On Mon, Oct 1, 2012 at 2:53 PM, Luiz Augusto von Dentz
>>>> <luiz.dentz@gmail.com> wrote:
>>>>> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>>>>>
>>>>> The connection is not really needed since the list of listeners is
>>>>> global not per connection, besides it is more convenient this way as
>>>>> only the id is needed.
>>>>> ---
>>>>> gdbus/gdbus.h | 2 +-
>>>>> gdbus/watch.c | 4 ++--
>>>>> 2 files changed, 3 insertions(+), 3 deletions(-)
>>>>>
>>>>> diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
>>>>> index 0a8a27c..3bd8986 100644
>>>>> --- a/gdbus/gdbus.h
>>>>> +++ b/gdbus/gdbus.h
>>>>> @@ -217,7 +217,7 @@ guint g_dbus_add_signal_watch(DBusConnection *connection,
>>>>> const char *interface, const char *member,
>>>>> GDBusSignalFunction function, void *user_data,
>>>>> GDBusDestroyFunction destroy);
>>>>> -gboolean g_dbus_remove_watch(DBusConnection *connection, guint tag);
>>>>> +gboolean g_dbus_remove_watch(guint id);
>>>>> void g_dbus_remove_all_watches(DBusConnection *connection);
>>>>>
>>>>> #ifdef __cplusplus
>>>>> diff --git a/gdbus/watch.c b/gdbus/watch.c
>>>>> index 07feb61..00cedae 100644
>>>>> --- a/gdbus/watch.c
>>>>> +++ b/gdbus/watch.c
>>>>> @@ -285,7 +285,7 @@ static void filter_data_free(struct filter_data *data)
>>>>> g_free(l->data);
>>>>>
>>>>> g_slist_free(data->callbacks);
>>>>> - g_dbus_remove_watch(data->connection, data->name_watch);
>>>>> + g_dbus_remove_watch(data->name_watch);
>>>>> g_free(data->name);
>>>>> g_free(data->owner);
>>>>> g_free(data->path);
>>>>> @@ -752,7 +752,7 @@ guint g_dbus_add_signal_watch(DBusConnection *connection,
>>>>> return cb->id;
>>>>> }
>>>>>
>>>>> -gboolean g_dbus_remove_watch(DBusConnection *connection, guint id)
>>>>> +gboolean g_dbus_remove_watch(guint id)
>>>>> {
>>>>> struct filter_data *data;
>>>>> struct filter_callback *cb;
>>>>> --
>>>>
>>>> This will lead to a broken build which is not nice to bisect. Any
>>>> other option besides adding with another name, converting everybody
>>>> and then renaming?
>>>>
>>>> The only other option I can think of is adding an ifdef and an option
>>>> to build-sys... this would avoid the final renaming.
>>>
>>> I guess this time it worth having the break of bisect in favor of a
>>> more convenient API, if you look at what the code is doing the
>>> connection is useless and normally we end up having to call the core
>>> to figure out a connection that is not used for anything.
>>
>> Ahn? did you read what I proposed as an option? I proposed splitting
>> the patch in 4 as opposed to 2 as you did.
>>
>> 0001) WARNING, whitespace error below
>>
>> diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
>> index 0a8a27c..d254562 100644
>> --- a/gdbus/gdbus.h
>> +++ b/gdbus/gdbus.h
>> @@ -217,7 +217,12 @@ guint g_dbus_add_signal_watch(DBusConnection *connection,
>> const char *interface, const char *member,
>> GDBusSignalFunction function, void *user_data,
>> GDBusDestroyFunction destroy);
>> -gboolean g_dbus_remove_watch(DBusConnection *connection, guint tag);
>> +#ifdef _GDBUS_WITH_NEW_REMOVE_WATCH
>> +gboolean g_dbus_remove_watch(guint tag);
>> +#else
>> +gboolean g_dbus_remove_watch(DBusConnection *connection, guint tag);
>> +#endif
>> +
>> void g_dbus_remove_all_watches(DBusConnection *connection);
>>
>> #ifdef __cplusplus
>>
>>
>> 0002) Convert everybody adding the definition on Makefile.am
>>
>> 0003) Remove the define from Makefile.am
>>
>> 0004) Remove the old code from gdbus/
>
> That sounds overkill for so simple change, I will send updates to
> other projects using gdbus to see their reception, if they are
> receptive to the changes I think we can ignore the bisect problem.
Apparently you raised some concerns about this changes, but note that
this should not affect watches to different/private connections since
the watch itself carries a reference to the connection, in fact if you
look at the changes the connection given as parameter is completely
ignored, you could even pass NULL and it would still work.
--
Luiz Augusto von Dentz
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox