* [PATCH v0 2/3] media: Remove internal transport locks
From: Mikel Astiz @ 2012-12-04 17:13 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354641230-3667-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
The internal transport_lock_t is not needed any more since transports
are now always acquired with read and write permissions.
---
profiles/audio/transport.c | 134 ++++++++++-----------------------------------
1 file changed, 30 insertions(+), 104 deletions(-)
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 5924f73..ad9270e 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -51,11 +51,6 @@
#define MEDIA_TRANSPORT_INTERFACE "org.bluez.MediaTransport"
typedef enum {
- TRANSPORT_LOCK_READ = 1,
- TRANSPORT_LOCK_WRITE = 1 << 1,
-} transport_lock_t;
-
-typedef enum {
TRANSPORT_STATE_IDLE, /* Not acquired and suspended */
TRANSPORT_STATE_PENDING, /* Playing but not acquired */
TRANSPORT_STATE_REQUESTING, /* Acquire in progress */
@@ -80,7 +75,6 @@ struct media_owner {
struct media_transport *transport;
struct media_request *pending;
char *name;
- transport_lock_t lock;
guint watch;
};
@@ -100,7 +94,6 @@ struct media_transport {
int fd; /* Transport file descriptor */
uint16_t imtu; /* Transport input mtu */
uint16_t omtu; /* Transport output mtu */
- transport_lock_t lock;
transport_state_t state;
guint hs_watch;
guint source_watch;
@@ -115,18 +108,6 @@ struct media_transport {
void *data;
};
-static const char *lock2str(transport_lock_t lock)
-{
- if (lock == 0)
- return "";
- else if (lock == TRANSPORT_LOCK_READ)
- return "r";
- else if (lock == TRANSPORT_LOCK_WRITE)
- return "w";
- else
- return "rw";
-}
-
static const char *state2str(transport_state_t state)
{
switch (state) {
@@ -229,20 +210,6 @@ static void media_request_reply(struct media_request *req, int err)
g_dbus_send_message(btd_get_dbus_connection(), reply);
}
-static gboolean media_transport_release(struct media_transport *transport,
- transport_lock_t lock)
-{
- transport->lock &= ~lock;
-
- if (lock & TRANSPORT_LOCK_READ)
- DBG("Transport %s: read lock released", transport->path);
-
- if (lock & TRANSPORT_LOCK_WRITE)
- DBG("Transport %s: write lock released", transport->path);
-
- return TRUE;
-}
-
static void media_owner_remove(struct media_owner *owner)
{
struct media_transport *transport = owner->transport;
@@ -279,8 +246,6 @@ static void media_transport_remove(struct media_transport *transport,
{
DBG("Transport %s Owner %s", transport->path, owner->name);
- media_transport_release(transport, owner->lock);
-
/* Reply if owner has a pending request */
if (owner->pending)
media_request_reply(owner->pending, EIO);
@@ -339,12 +304,6 @@ static void a2dp_resume_complete(struct avdtp *session,
media_transport_set_fd(transport, fd, imtu, omtu);
- if ((owner->lock & TRANSPORT_LOCK_READ) == 0)
- imtu = 0;
-
- if ((owner->lock & TRANSPORT_LOCK_WRITE) == 0)
- omtu = 0;
-
ret = g_dbus_send_reply(btd_get_dbus_connection(), req->msg,
DBUS_TYPE_UNIX_FD, &fd,
DBUS_TYPE_UINT16, &imtu,
@@ -443,24 +402,6 @@ static void media_owner_exit(DBusConnection *connection, void *user_data)
media_transport_remove(owner->transport, owner);
}
-static gboolean media_transport_acquire(struct media_transport *transport,
- transport_lock_t lock)
-{
- if (transport->lock & lock)
- return FALSE;
-
- transport->lock |= lock;
-
- if (lock & TRANSPORT_LOCK_READ)
- DBG("Transport %s: read lock acquired", transport->path);
-
- if (lock & TRANSPORT_LOCK_WRITE)
- DBG("Transport %s: write lock acquired", transport->path);
-
-
- return TRUE;
-}
-
static void media_transport_add(struct media_transport *transport,
struct media_owner *owner)
{
@@ -473,17 +414,14 @@ static void media_transport_add(struct media_transport *transport,
owner, NULL);
}
-static struct media_owner *media_owner_create(DBusMessage *msg,
- transport_lock_t lock)
+static struct media_owner *media_owner_create(DBusMessage *msg)
{
struct media_owner *owner;
owner = g_new0(struct media_owner, 1);
owner->name = g_strdup(dbus_message_get_sender(msg));
- owner->lock = lock;
- DBG("Owner created: sender=%s accesstype=%s", owner->name,
- lock2str(lock));
+ DBG("Owner created: sender=%s", owner->name);
return owner;
}
@@ -522,7 +460,6 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
const char *sender;
dbus_bool_t optional;
guint id;
- transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
if (!dbus_message_get_args(msg, NULL,
DBUS_TYPE_BOOLEAN, &optional,
@@ -535,16 +472,15 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
if (owner != NULL)
return btd_error_not_authorized(msg);
+ if (transport->state >= TRANSPORT_STATE_REQUESTING)
+ return btd_error_not_authorized(msg);
+
if (transport->state != TRANSPORT_STATE_PENDING && optional)
return btd_error_failed(msg, "Transport not playing");
- if (media_transport_acquire(transport, lock) == FALSE)
- return btd_error_not_authorized(msg);
-
- owner = media_owner_create(msg, lock);
+ owner = media_owner_create(msg);
id = transport->resume(transport, owner);
if (id == 0) {
- media_transport_release(transport, lock);
media_owner_free(owner);
return btd_error_not_authorized(msg);
}
@@ -563,7 +499,7 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
struct media_owner *owner;
const char *sender;
struct media_request *req;
- transport_lock_t lock = TRANSPORT_LOCK_READ | TRANSPORT_LOCK_WRITE;
+ guint id;
sender = dbus_message_get_sender(msg);
@@ -571,45 +507,35 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
if (owner == NULL)
return btd_error_not_authorized(msg);
- if (owner->lock == lock) {
- guint id;
-
- /* Not the last owner, no need to suspend */
- if (g_slist_length(transport->owners) != 1) {
- media_transport_remove(transport, owner);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
- }
-
- if (owner->pending) {
- const char *member;
+ /* Not the last owner, no need to suspend */
+ if (g_slist_length(transport->owners) != 1) {
+ media_transport_remove(transport, owner);
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+ }
- member = dbus_message_get_member(owner->pending->msg);
- /* Cancel Acquire request if that exist */
- if (g_str_equal(member, "Acquire"))
- media_owner_remove(owner);
- else
- return btd_error_in_progress(msg);
- }
+ if (owner->pending) {
+ const char *member;
- transport_set_state(transport, TRANSPORT_STATE_SUSPENDING);
+ member = dbus_message_get_member(owner->pending->msg);
+ /* Cancel Acquire request if that exist */
+ if (g_str_equal(member, "Acquire"))
+ media_owner_remove(owner);
+ else
+ return btd_error_in_progress(msg);
+ }
- id = transport->suspend(transport, owner);
- if (id == 0) {
- media_transport_remove(transport, owner);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
- }
+ transport_set_state(transport, TRANSPORT_STATE_SUSPENDING);
- req = media_request_create(msg, id);
- media_owner_add(owner, req);
+ id = transport->suspend(transport, owner);
+ if (id == 0) {
+ media_transport_remove(transport, owner);
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+ }
- return NULL;
- } else if ((owner->lock & lock) == lock) {
- media_transport_release(transport, lock);
- owner->lock &= ~lock;
- } else
- return btd_error_not_authorized(msg);
+ req = media_request_create(msg, id);
+ media_owner_add(owner, req);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+ return NULL;
}
static gboolean get_device(const GDBusPropertyTable *property,
--
1.7.11.7
^ permalink raw reply related
* [PATCH v0 3/3] media: Remove transport owner list
From: Mikel Astiz @ 2012-12-04 17:13 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Mikel Astiz
In-Reply-To: <1354641230-3667-1-git-send-email-mikel.astiz.oss@gmail.com>
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
Transports now have zero or one owners, so there is no need to maintain
a list any more.
---
profiles/audio/transport.c | 80 +++++++++++++---------------------------------
1 file changed, 22 insertions(+), 58 deletions(-)
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index ad9270e..2075894 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -88,7 +88,7 @@ struct media_transport {
char *path; /* Transport object path */
struct audio_device *device; /* Transport device */
struct media_endpoint *endpoint; /* Transport endpoint */
- GSList *owners; /* Transport owners */
+ struct media_owner *owner; /* Transport owner */
uint8_t *configuration; /* Transport configuration */
int size; /* Transport configuration size */
int fd; /* Transport file descriptor */
@@ -241,24 +241,25 @@ static void media_owner_free(struct media_owner *owner)
g_free(owner);
}
-static void media_transport_remove(struct media_transport *transport,
- struct media_owner *owner)
+static void media_transport_remove_owner(struct media_transport *transport)
{
+ struct media_owner *owner = transport->owner;
+
DBG("Transport %s Owner %s", transport->path, owner->name);
/* Reply if owner has a pending request */
if (owner->pending)
media_request_reply(owner->pending, EIO);
- transport->owners = g_slist_remove(transport->owners, owner);
+ if (transport->owner == owner)
+ transport->owner = NULL;
if (owner->watch)
g_dbus_remove_watch(btd_get_dbus_connection(), owner->watch);
media_owner_free(owner);
- /* Suspend if there is no longer any owner */
- if (transport->owners == NULL && state_in_use(transport->state))
+ if (state_in_use(transport->state))
transport->suspend(transport, NULL);
}
@@ -319,7 +320,7 @@ static void a2dp_resume_complete(struct avdtp *session,
return;
fail:
- media_transport_remove(transport, owner);
+ media_transport_remove_owner(transport);
}
static guint resume_a2dp(struct media_transport *transport,
@@ -366,7 +367,7 @@ static void a2dp_suspend_complete(struct avdtp *session,
a2dp_sep_unlock(sep, a2dp->session);
transport_set_state(transport, TRANSPORT_STATE_IDLE);
- media_transport_remove(transport, owner);
+ media_transport_remove_owner(transport);
}
static guint suspend_a2dp(struct media_transport *transport,
@@ -399,14 +400,14 @@ static void media_owner_exit(DBusConnection *connection, void *user_data)
media_owner_remove(owner);
- media_transport_remove(owner->transport, owner);
+ media_transport_remove_owner(owner->transport);
}
-static void media_transport_add(struct media_transport *transport,
+static void media_transport_set_owner(struct media_transport *transport,
struct media_owner *owner)
{
DBG("Transport %s Owner %s", transport->path, owner->name);
- transport->owners = g_slist_append(transport->owners, owner);
+ transport->owner = owner;
owner->transport = transport;
owner->watch = g_dbus_add_disconnect_watch(btd_get_dbus_connection(),
owner->name,
@@ -435,29 +436,12 @@ static void media_owner_add(struct media_owner *owner,
owner->pending = req;
}
-static struct media_owner *media_transport_find_owner(
- struct media_transport *transport,
- const char *name)
-{
- GSList *l;
-
- for (l = transport->owners; l; l = l->next) {
- struct media_owner *owner = l->data;
-
- if (g_strcmp0(owner->name, name) == 0)
- return owner;
- }
-
- return NULL;
-}
-
static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
void *data)
{
struct media_transport *transport = data;
struct media_owner *owner;
struct media_request *req;
- const char *sender;
dbus_bool_t optional;
guint id;
@@ -466,10 +450,7 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
DBUS_TYPE_INVALID))
return btd_error_invalid_args(msg);
- sender = dbus_message_get_sender(msg);
-
- owner = media_transport_find_owner(transport, sender);
- if (owner != NULL)
+ if (transport->owner != NULL)
return btd_error_not_authorized(msg);
if (transport->state >= TRANSPORT_STATE_REQUESTING)
@@ -487,7 +468,7 @@ static DBusMessage *acquire(DBusConnection *conn, DBusMessage *msg,
req = media_request_create(msg, id);
media_owner_add(owner, req);
- media_transport_add(transport, owner);
+ media_transport_set_owner(transport, owner);
return NULL;
}
@@ -496,23 +477,16 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
void *data)
{
struct media_transport *transport = data;
- struct media_owner *owner;
+ struct media_owner *owner = transport->owner;
const char *sender;
struct media_request *req;
guint id;
sender = dbus_message_get_sender(msg);
- owner = media_transport_find_owner(transport, sender);
- if (owner == NULL)
+ if (owner == NULL || g_strcmp0(owner->name, sender) != 0)
return btd_error_not_authorized(msg);
- /* Not the last owner, no need to suspend */
- if (g_slist_length(transport->owners) != 1) {
- media_transport_remove(transport, owner);
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
- }
-
if (owner->pending) {
const char *member;
@@ -528,7 +502,7 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
id = transport->suspend(transport, owner);
if (id == 0) {
- media_transport_remove(transport, owner);
+ media_transport_remove_owner(transport);
return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
}
@@ -698,15 +672,9 @@ static void destroy_a2dp(void *data)
static void media_transport_free(void *data)
{
struct media_transport *transport = data;
- GSList *l = transport->owners;
- while (l) {
- struct media_owner *owner = l->data;
- l = l->next;
- media_transport_remove(transport, owner);
- }
-
- g_slist_free(transport->owners);
+ if (transport->owner)
+ media_transport_remove_owner(transport);
if (transport->destroy != NULL)
transport->destroy(transport->data);
@@ -726,13 +694,9 @@ static void transport_update_playing(struct media_transport *transport,
if (transport->state == TRANSPORT_STATE_PENDING)
transport_set_state(transport, TRANSPORT_STATE_IDLE);
else if (transport->state == TRANSPORT_STATE_ACTIVE) {
- /* Remove all owners */
- while (transport->owners != NULL) {
- struct media_owner *owner;
-
- owner = transport->owners->data;
- media_transport_remove(transport, owner);
- }
+ /* Remove owner */
+ if (transport->owner != NULL)
+ media_transport_remove_owner(transport);
}
} else if (transport->state == TRANSPORT_STATE_IDLE)
transport_set_state(transport, TRANSPORT_STATE_PENDING);
--
1.7.11.7
^ permalink raw reply related
* Re: BLE issue: Start_LE_Encryption fails
From: Ajay @ 2012-12-04 18:49 UTC (permalink / raw)
To: Anderson Lizardo; +Cc: linux-bluetooth
In-Reply-To: <CAJdJm_PLSAZBc+ef_YXsmQ+VE5aW3aD_CPs3x2Y7gY+8zY19Bw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 6467 bytes --]
On Sun, Oct 28, 2012 at 1:08 PM, Ajay <ajay.kv@globaledgesoft.com> wrote:
> Hi,
> I am getting le_long_term_key_negative reply from the remote
device
> , on sending le_start_encryption . I am testing this with 2 ubuntu
> machines(3.2.5) with IOGEAR dual mode dongles .
To connect to a dual mode dongle, you need to set LE Adv. flags to
0x06 (which means general discoverable + BR/EDR not supported) on the
acceptor side. You can use this command (on the acceptor/slave side):
sudo hcitool -i hci0 cmd 0x08 0x0008 03 02 01 06 \
$(perl -e 'print "00 " x 28')
Next, enable LE advertising:
sudo hciconfig hci0 leadv
On the initiator/master side, run "hcitool lescan" and try pairing again.
Hi Ajay,
On Sun, Oct 28, 2012 at 8:30 PM, Ajay <ajay.kv@globaledgesoft.com> wrote:
> Thanks, but "sudo hcitool -i hci0 cmd 0x08 0x0008 03 02 01 06 " , this
> command only sets the advertising data to zero right . so how do i
set the
> adv flag as 0x06 . Which hci command is used for this purpose .
No, this sets adv. data to have "Flags" AD set to 0x06. But you missed
the second line of the command:
sudo hcitool -i hci0 cmd 0x08 0x0008 03 02 01 06 \
$(perl -e 'print "00 " x 28')
The second line is important because it fills the other bytes with
zero (which some controllers require).
On Tuesday 30 October 2012 07:45 PM, Anderson Lizardo wrote:
> Hi Ajay,
>
> On Sun, Oct 28, 2012 at 9:33 PM, Ajay <ajay.kv@globaledgesoft.com> wrote:
>> ya , i got your point ,advertiser is informing the remote device , that it
>> is not BR/EDR capable .That is done and device is connecting now.
>> But still i dont know, how to do le specific pairing and
>> start_encryption enable(part of le pairing) . Is there any tool in bluez
>> providing LE pairing before connecting the devices (want to try with 2
>> ubuntu pc's ).
>
> We use the "simple-agent" script from test/ directory in BlueZ for pairing.
>
> On the slave side run:
>
> test/simple-agent hci0
>
> on the master side, after "hcitool lescan", run:
>
> test/simple-agent hci0 <slave-address>
>
> This should trigger Just Works SMP pairing.
>
> Regards,
>
Hi,
I have included some of our previous conversations related to this
issue.
I got some error while testing the above case for LE pairing using
simple_agent . kindly find a solution
MASTER side
Steps followed
root@test:/home# hcitool lescan
root@test:/home# ./simple-agent hci0 00:02:72:D6:A1:0D
Creating device failed: org.freedesktop.DBus.Error.NoReply: Did not
receive a reply. Possible causes include: the remote application did not
send a reply, the message bus security policy blocked the reply, the
reply timeout expired, or the network connection was broken.
hcidump on master side
********************************************************************************
< HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7
type 0x01 (active)
interval 10.000ms window 10.000ms
own address: 0x00 (Public) policy: All
> HCI Event: Command Complete (0x0e) plen 4
LE Set Scan Parameters (0x08|0x000b) ncmd 1
status 0x00
< HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
value 0x01 (scanning enabled)
filter duplicates 0x00 (disabled)
> HCI Event: Command Complete (0x0e) plen 4
LE Set Scan Enable (0x08|0x000c) ncmd 1
status 0x00
RSSI: -71
> HCI Event: LE Meta Event (0x3e) plen 12
LE Advertising Report
SCAN_RSP - Scan Response (4)
bdaddr 00:02:72:D6:A1:0D (Public)
RSSI: -70
> HCI Event: LE Meta Event (0x3e) plen 15
LE Advertising Report
ADV_IND - Connectable undirected advertising (0)
bdaddr 00:02:72:D6:A1:0D (Public)
Flags: 0x06
RSSI: -69
> HCI Event: LE Meta Event (0x3e) plen 12
LE Advertising Report
SCAN_RSP - Scan Response (4)
bdaddr 00:02:72:D6:A1:0D (Public)
< HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2
value 0x00 (scanning disabled)
filter duplicates 0x00 (disabled)
> HCI Event: Command Complete (0x0e) plen 4
LE Set Scan Enable (0x08|0x000c) ncmd 1
status 0x00
< HCI Command: LE Create Connection (0x08|0x000d) plen 25
bdaddr 00:02:72:D6:A1:0D type 0
> HCI Event: Command Status (0x0f) plen 4
LE Create Connection (0x08|0x000d) status 0x00 ncmd 1
> HCI Event: LE Meta Event (0x3e) plen 19
LE Connection Complete
status 0x00 handle 64, role master
< ACL data: handle 64 flags 0x00 dlen 11
ATT: Read By Group req (0x10)
start 0x0001, end 0xffff
type-uuid 0x2800
> HCI Event: Number of Completed Packets (0x13) plen 5
handle 64 packets 1
< HCI Command: Read Remote Version Information (0x01|0x001d) plen 2
handle 64
> HCI Event: Command Status (0x0f) plen 4
Read Remote Version Information (0x01|0x001d) status 0x00 ncmd 1
> HCI Event: Read Remote Ver Info Complete (0x0c) plen 8
status 0x00 handle 64
LMP Version: 4.0 (0x6) LMP Subversion: 0x220e
Manufacturer: Broadcom Corporation (15)
< HCI Command: Disconnect (0x01|0x0006) plen 3
handle 64 reason 0x13
Reason: Remote User Terminated Connection
> HCI Event: Command Status (0x0f) plen 4
Disconnect (0x01|0x0006) status 0x00 ncmd 1
> HCI Event: Disconn Complete (0x05) plen 4
status 0x00 handle 64 reason 0x16
Reason: Connection Terminated by Local Host
SLAVE side
root@test:/home# hcitool -i hci0 cmd 0x08 0x0008 03 02 01 06 \
$(perl -e 'print "00 " x 28')
root@test:/home# hciconfig hci0 leadv
Hcidump shows ..
< HCI Command: LE Set Advertising Data (0x08|0x0008) plen 32
> HCI Event: Command Complete (0x0e) plen 4
LE Set Advertising Data (0x08|0x0008) ncmd 1
status 0x00
< HCI Command: LE Set Advertise Enable (0x08|0x000a) plen 1
> HCI Event: Command Complete (0x0e) plen 4
LE Set Advertise Enable (0x08|0x000a) ncmd 1
status 0x00
> HCI Event: LE Meta Event (0x3e) plen 19
LE Connection Complete
status 0x00 handle 64, role slave
bdaddr 00:02:72:D6:AB:AD (Public)
> ACL data: handle 64 flags 0x02 dlen 11
ATT: Read By Group req (0x10)
start 0x0001, end 0xffff
type-uuid 0x2800
> HCI Event: Disconn Complete (0x05) plen 4
status 0x00 handle 64 reason 0x13
Reason: Remote User Terminated Connection
***************************************************************************
--
Thanks & Regards
AJAY KV
GlobalEdge software Ltd
8892753703
[-- Attachment #2: ajay_kv.vcf --]
[-- Type: text/x-vcard, Size: 74 bytes --]
begin:vcard
fn:AJAY KV
n:;AJAY
tel;cell:8892753703
version:2.1
end:vcard
^ permalink raw reply
* [PATCH 1/2] audio: Remove left over of HFP removal
From: chanyeol.park @ 2012-12-05 2:27 UTC (permalink / raw)
To: linux-bluetooth
From: Chan-yeol Park <chanyeol.park@samsung.com>
---
profiles/audio/main.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/profiles/audio/main.c b/profiles/audio/main.c
index ce060fc..c5d1426 100644
--- a/profiles/audio/main.c
+++ b/profiles/audio/main.c
@@ -44,8 +44,6 @@
#include "device.h"
#include "manager.h"
-static GIOChannel *sco_server = NULL;
-
static GKeyFile *load_config_file(const char *file)
{
GError *err = NULL;
@@ -81,12 +79,6 @@ static int audio_init(void)
static void audio_exit(void)
{
- if (sco_server) {
- g_io_channel_shutdown(sco_server, TRUE, NULL);
- g_io_channel_unref(sco_server);
- sco_server = NULL;
- }
-
audio_manager_exit();
}
--
1.7.9.5
^ permalink raw reply related
* [PATCH 2/2] build: Include bluetooth lib folder for obexd
From: chanyeol.park @ 2012-12-05 2:27 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1354674477-25835-1-git-send-email-chanyeol.park@samsung.com>
From: Chan-yeol Park <chanyeol.park@samsung.com>
Because obexd is included in bluez repo, obexd should refer to local
lib folder before system's one.
---
Makefile.obexd | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/Makefile.obexd b/Makefile.obexd
index 1ed423b..cbcd65d 100644
--- a/Makefile.obexd
+++ b/Makefile.obexd
@@ -29,7 +29,7 @@ obexd_src_obexd_CFLAGS = @GLIB_CFLAGS@ @DBUS_CFLAGS@ \
-DPLUGINDIR=\""$(obex_plugindir)"\" \
-fPIC -D_FILE_OFFSET_BITS=64
-obexd_src_obexd_CPPFLAGS = -I$(builddir)/obexd/src \
+obexd_src_obexd_CPPFLAGS = -I$(builddir)/lib -I$(builddir)/obexd/src \
-I$(srcdir)/obexd/src -I$(srcdir)/btio \
-I$(srcdir)/gobex -I$(srcdir)/gdbus
@@ -76,7 +76,8 @@ obexd_client_obex_client_LDADD = lib/libbluetooth-private.la \
obexd_client_obex_client_CFLAGS = @GLIB_CFLAGS@ @DBUS_CFLAGS@ \
-fPIC -D_FILE_OFFSET_BITS=64
-obexd_client_obex_client_CPPFLAGS = -I$(srcdir)/obexd/src -I$(srcdir)/btio \
- -I$(srcdir)/gobex -I$(srcdir)/gdbus
+obexd_client_obex_client_CPPFLAGS = -I$(builddir)/lib -I$(srcdir)/obexd/src \
+ -I$(srcdir)/btio -I$(srcdir)/gobex \
+ -I$(srcdir)/gdbus
obexd_client_obex_client_SHORTNAME = obex-client
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH v3 00/20] CSCP plugin
From: Johan Hedberg @ 2012-12-05 8:23 UTC (permalink / raw)
To: Andrzej Kaczmarek; +Cc: linux-bluetooth
In-Reply-To: <1354625026-29358-1-git-send-email-andrzej.kaczmarek@tieto.com>
Hi Andrzej,
On Tue, Dec 04, 2012, Andrzej Kaczmarek wrote:
> Changes since v2:
> - rebased to latest upstream master
> - moved all code to cyclingspeed.c to avoid "empty" calls across files
>
> No changes in functionality.
>
>
> Andrzej Kaczmarek (20):
> cyclingspeed: Add CSC profile plugin skeleton
> cyclingspeed: Add attio callbacks
> cyclingspeed: Discover CSCS characteristics
> cyclingspeed: Discover characteristics CCC
> cyclingspeed: Read CSC Feature characteristic value
> cyclingspeed: Read Sensor Location characteristic value
> cyclingspeed: Add CyclingSpeedManager interface
> cyclingspeed: Add support to enable measurement notifications
> cyclingspeed: Process measurement notifications
> cyclingspeed: Add DBus.Properties for org.bluez.CyclingSpeed
> interface
> cyclingspeed: Add stub to use SC Control Point
> cyclingspeed: Add support for Request Supported Sensor Locations
> cyclingspeed: Add support for Update Sensor Location
> cyclingspeed: Add support for Set Cumulative Value
> core: Add CyclingSpeedWatcher interface to default policy
> doc: Remove Get-/SetProperties from CSC API document
> doc: Rename cycling API to cyclingspeed
> build: Add CSCP API document to EXTRA_DIST
> test: Add cyclingspeed test script
> test: Enable speed and cadence calculation in test-cyclingspeed
>
> Makefile.am | 8 +-
> Makefile.tools | 3 +-
> doc/cycling-api.txt | 118 ----
> doc/cyclingspeed-api.txt | 100 +++
> lib/uuid.h | 6 +
> profiles/cyclingspeed/cyclingspeed.c | 1285 ++++++++++++++++++++++++++++++++++
> src/bluetooth.conf | 1 +
> test/test-cyclingspeed | 191 +++++
> 8 files changed, 1590 insertions(+), 122 deletions(-)
> delete mode 100644 doc/cycling-api.txt
> create mode 100644 doc/cyclingspeed-api.txt
> create mode 100644 profiles/cyclingspeed/cyclingspeed.c
> create mode 100755 test/test-cyclingspeed
All patches in this set have been applied. Thanks.
I also pushed an additional coding style cleanup patch, so if you have
further patches to this code queued up please rebase first to the
upstream tree.
Johan
^ permalink raw reply
* Re: [PATCH 1/2] audio: Remove left over of HFP removal
From: Johan Hedberg @ 2012-12-05 8:43 UTC (permalink / raw)
To: chanyeol.park; +Cc: linux-bluetooth
In-Reply-To: <1354674477-25835-1-git-send-email-chanyeol.park@samsung.com>
Hi Chan-yeol,
On Wed, Dec 05, 2012, chanyeol.park@samsung.com wrote:
> ---
> profiles/audio/main.c | 8 --------
> 1 file changed, 8 deletions(-)
Both patches have been applied. Thanks!
Johan
^ permalink raw reply
* [PATCH] adapter: Fix compilation on some architectures
From: Szymon Janc @ 2012-12-05 10:02 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
plain char may be treated as signed or unsigned depending on compiler
(as oposite to other integer types). Use signed char explicitly when
signed type is needed.
This fix following compilation error on ARM:
CC src/bluetoothd-adapter.o
src/adapter.c: In function ‘convert_entry’:
src/adapter.c:2710:2: error: comparison is always true due to limited
range of data type [-Werror=type-limits]
cc1: all warnings being treated as errors
make[1]: *** [src/bluetoothd-adapter.o] Error 1
---
src/adapter.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/adapter.c b/src/adapter.c
index 3c5d277..0cbce78 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2673,7 +2673,7 @@ static void convert_ltk_entry(GKeyFile *key_file, void *value)
static void convert_entry(char *key, char *value, void *user_data)
{
struct device_converter *converter = user_data;
- char device_type = -1;
+ signed char device_type = -1;
char filename[PATH_MAX + 1];
GKeyFile *key_file;
char *data;
--
1.7.9.5
^ permalink raw reply related
* [PATCH 0/9] Remove redundant struct audio_device members
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Both src and dst addresses can be obtained from struct btd_device
reference and used when needed.
Szymon Janc (9):
avdtp: Convert avdtp_get to accept audio_device
avdtp: Convert avdtp_is_connected to accept audio_device
avctp: Convert avctp_connect to accept audio_device
avctp: Convert avctp_get to accept audio_device
avctp: Don't use audio_device src and dst in avctp_control_confirm
avdtp: Don't use audio_device src and dst fields in avdtp_confirm_cb
audio: Don't use audio_device src and dst in manager_find_devices
avrcp: Don't use audio_device src field
audio: Remove src and dst from struct audio_device
profiles/audio/avctp.c | 23 ++++++++++++++++++++---
profiles/audio/avctp.h | 4 ++--
profiles/audio/avdtp.c | 16 +++++++++++++---
profiles/audio/avdtp.h | 4 ++--
profiles/audio/avrcp.c | 16 +++++++++++-----
profiles/audio/control.c | 4 ++--
profiles/audio/device.c | 13 ++++---------
profiles/audio/device.h | 7 +------
profiles/audio/manager.c | 11 ++++++++---
profiles/audio/sink.c | 2 +-
profiles/audio/source.c | 2 +-
profiles/audio/transport.c | 3 +--
12 files changed, 66 insertions(+), 39 deletions(-)
--
1.7.9.5
^ permalink raw reply
* [PATCH 1/9] avdtp: Convert avdtp_get to accept audio_device
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Use addresses taken from btd_dev reference in audio_device to get
session source and destination.
---
profiles/audio/avdtp.c | 7 ++++++-
profiles/audio/avdtp.h | 2 +-
profiles/audio/sink.c | 2 +-
profiles/audio/source.c | 2 +-
profiles/audio/transport.c | 3 +--
5 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
index e38c95b..9ff2168 100644
--- a/profiles/audio/avdtp.c
+++ b/profiles/audio/avdtp.c
@@ -2363,9 +2363,14 @@ static struct avdtp *avdtp_get_internal(const bdaddr_t *src, const bdaddr_t *dst
return session;
}
-struct avdtp *avdtp_get(bdaddr_t *src, bdaddr_t *dst)
+struct avdtp *avdtp_get(struct audio_device *device)
{
struct avdtp *session;
+ const bdaddr_t *src;
+ const bdaddr_t *dst;
+
+ src = adapter_get_address(device_get_adapter(device->btd_dev));
+ dst = device_get_address(device->btd_dev);
session = avdtp_get_internal(src, dst);
diff --git a/profiles/audio/avdtp.h b/profiles/audio/avdtp.h
index cdf39bf..9117e89 100644
--- a/profiles/audio/avdtp.h
+++ b/profiles/audio/avdtp.h
@@ -213,7 +213,7 @@ struct avdtp_sep_ind {
typedef void (*avdtp_discover_cb_t) (struct avdtp *session, GSList *seps,
struct avdtp_error *err, void *user_data);
-struct avdtp *avdtp_get(bdaddr_t *src, bdaddr_t *dst);
+struct avdtp *avdtp_get(struct audio_device *device);
void avdtp_unref(struct avdtp *session);
struct avdtp *avdtp_ref(struct avdtp *session);
diff --git a/profiles/audio/sink.c b/profiles/audio/sink.c
index 466c0a8..d964c3c 100644
--- a/profiles/audio/sink.c
+++ b/profiles/audio/sink.c
@@ -348,7 +348,7 @@ int sink_connect(struct audio_device *dev, audio_device_cb cb, void *data)
struct pending_request *pending;
if (!sink->session)
- sink->session = avdtp_get(&dev->src, &dev->dst);
+ sink->session = avdtp_get(dev);
if (!sink->session) {
DBG("Unable to get a session");
diff --git a/profiles/audio/source.c b/profiles/audio/source.c
index 157a4e8..eea2661 100644
--- a/profiles/audio/source.c
+++ b/profiles/audio/source.c
@@ -348,7 +348,7 @@ int source_connect(struct audio_device *dev, audio_device_cb cb, void *data)
struct pending_request *pending;
if (!source->session)
- source->session = avdtp_get(&dev->src, &dev->dst);
+ source->session = avdtp_get(dev);
if (!source->session) {
DBG("Unable to get a session");
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 610aca3..859900d 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -381,11 +381,10 @@ static guint resume_a2dp(struct media_transport *transport,
{
struct a2dp_transport *a2dp = transport->data;
struct media_endpoint *endpoint = transport->endpoint;
- struct audio_device *device = transport->device;
struct a2dp_sep *sep = media_endpoint_get_sep(endpoint);
if (a2dp->session == NULL) {
- a2dp->session = avdtp_get(&device->src, &device->dst);
+ a2dp->session = avdtp_get(transport->device);
if (a2dp->session == NULL)
return 0;
}
--
1.7.9.5
^ permalink raw reply related
* [PATCH 2/9] avdtp: Convert avdtp_is_connected to accept audio_device
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Use addresses taken from btd_dev reference in audio_device to get
session source and destination.
---
profiles/audio/avdtp.c | 7 ++++++-
profiles/audio/avdtp.h | 2 +-
profiles/audio/device.c | 7 +++----
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
index 9ff2168..deb8d26 100644
--- a/profiles/audio/avdtp.c
+++ b/profiles/audio/avdtp.c
@@ -3201,10 +3201,15 @@ static gboolean avdtp_parse_rej(struct avdtp *session,
}
}
-gboolean avdtp_is_connected(const bdaddr_t *src, const bdaddr_t *dst)
+gboolean avdtp_is_connected(struct audio_device *device)
{
struct avdtp_server *server;
struct avdtp *session;
+ const bdaddr_t *src;
+ const bdaddr_t *dst;
+
+ src = adapter_get_address(device_get_adapter(device->btd_dev));
+ dst = device_get_address(device->btd_dev);
server = find_server(servers, src);
if (!server)
diff --git a/profiles/audio/avdtp.h b/profiles/audio/avdtp.h
index 9117e89..e014623 100644
--- a/profiles/audio/avdtp.h
+++ b/profiles/audio/avdtp.h
@@ -218,7 +218,7 @@ struct avdtp *avdtp_get(struct audio_device *device);
void avdtp_unref(struct avdtp *session);
struct avdtp *avdtp_ref(struct avdtp *session);
-gboolean avdtp_is_connected(const bdaddr_t *src, const bdaddr_t *dst);
+gboolean avdtp_is_connected(struct audio_device *device);
struct avdtp_service_capability *avdtp_service_cap_new(uint8_t category,
void *data, int size);
diff --git a/profiles/audio/device.c b/profiles/audio/device.c
index fef2bea..ba1efec 100644
--- a/profiles/audio/device.c
+++ b/profiles/audio/device.c
@@ -323,14 +323,13 @@ gboolean audio_device_is_active(struct audio_device *dev,
const char *interface)
{
if (!interface) {
- if ((dev->sink || dev->source) &&
- avdtp_is_connected(&dev->src, &dev->dst))
+ if ((dev->sink || dev->source) && avdtp_is_connected(dev))
return TRUE;
} else if (!strcmp(interface, AUDIO_SINK_INTERFACE) && dev->sink &&
- avdtp_is_connected(&dev->src, &dev->dst))
+ avdtp_is_connected(dev))
return TRUE;
else if (!strcmp(interface, AUDIO_SOURCE_INTERFACE) && dev->source &&
- avdtp_is_connected(&dev->src, &dev->dst))
+ avdtp_is_connected(dev))
return TRUE;
else if (!strcmp(interface, AUDIO_CONTROL_INTERFACE) && dev->control &&
control_is_active(dev))
--
1.7.9.5
^ permalink raw reply related
* [PATCH 3/9] avctp: Convert avctp_connect to accept audio_device
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Use addresses taken from btd_dev reference in audio_device to get
session source and destination.
---
profiles/audio/avctp.c | 7 ++++++-
profiles/audio/avctp.h | 2 +-
profiles/audio/avrcp.c | 4 ++--
profiles/audio/control.c | 2 +-
4 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c
index dcffb05..6752cef 100644
--- a/profiles/audio/avctp.c
+++ b/profiles/audio/avctp.c
@@ -1594,11 +1594,16 @@ gboolean avctp_unregister_browsing_pdu_handler(unsigned int id)
return FALSE;
}
-struct avctp *avctp_connect(const bdaddr_t *src, const bdaddr_t *dst)
+struct avctp *avctp_connect(struct audio_device *device)
{
struct avctp *session;
GError *err = NULL;
GIOChannel *io;
+ const bdaddr_t *src;
+ const bdaddr_t *dst;
+
+ src = adapter_get_address(device_get_adapter(device->btd_dev));
+ dst = device_get_address(device->btd_dev);
session = avctp_get_internal(src, dst);
if (!session)
diff --git a/profiles/audio/avctp.h b/profiles/audio/avctp.h
index c00a3fc..7314a04 100644
--- a/profiles/audio/avctp.h
+++ b/profiles/audio/avctp.h
@@ -93,7 +93,7 @@ gboolean avctp_remove_state_cb(unsigned int id);
int avctp_register(const bdaddr_t *src, gboolean master);
void avctp_unregister(const bdaddr_t *src);
-struct avctp *avctp_connect(const bdaddr_t *src, const bdaddr_t *dst);
+struct avctp *avctp_connect(struct audio_device *device);
struct avctp *avctp_get(const bdaddr_t *src, const bdaddr_t *dst);
int avctp_connect_browsing(struct avctp *session);
void avctp_disconnect(struct avctp *session);
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 2517df8..f6a5ac9 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -2173,7 +2173,7 @@ static struct avrcp *session_create(struct avrcp_server *server,
session = g_new0(struct avrcp, 1);
session->server = server;
- session->conn = avctp_connect(&dev->src, &dev->dst);
+ session->conn = avctp_connect(dev);
session->dev = dev;
server->sessions = g_slist_append(server->sessions, session);
@@ -2254,7 +2254,7 @@ gboolean avrcp_connect(struct audio_device *dev)
{
struct avctp *session;
- session = avctp_connect(&dev->src, &dev->dst);
+ session = avctp_connect(dev);
if (session)
return FALSE;
diff --git a/profiles/audio/control.c b/profiles/audio/control.c
index 7299b7e..5b16e17 100644
--- a/profiles/audio/control.c
+++ b/profiles/audio/control.c
@@ -141,7 +141,7 @@ int control_connect(struct audio_device *dev, audio_device_cb cb, void *data)
if (control->connect)
return -EINPROGRESS;
- control->session = avctp_connect(&dev->src, &dev->dst);
+ control->session = avctp_connect(dev);
if (!control->session)
return -EIO;
--
1.7.9.5
^ permalink raw reply related
* [PATCH 4/9] avctp: Convert avctp_get to accept audio_device
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Use addresses taken from btd_dev reference in audio_device to get
session source and destination.
---
profiles/audio/avctp.c | 8 +++++++-
profiles/audio/avctp.h | 2 +-
profiles/audio/avrcp.c | 2 +-
profiles/audio/control.c | 2 +-
4 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c
index 6752cef..a7daef3 100644
--- a/profiles/audio/avctp.c
+++ b/profiles/audio/avctp.c
@@ -1671,7 +1671,13 @@ void avctp_disconnect(struct avctp *session)
avctp_set_state(session, AVCTP_STATE_DISCONNECTED);
}
-struct avctp *avctp_get(const bdaddr_t *src, const bdaddr_t *dst)
+struct avctp *avctp_get(struct audio_device *device)
{
+ const bdaddr_t *src;
+ const bdaddr_t *dst;
+
+ src = adapter_get_address(device_get_adapter(device->btd_dev));
+ dst = device_get_address(device->btd_dev);
+
return avctp_get_internal(src, dst);
}
diff --git a/profiles/audio/avctp.h b/profiles/audio/avctp.h
index 7314a04..2597e6e 100644
--- a/profiles/audio/avctp.h
+++ b/profiles/audio/avctp.h
@@ -94,7 +94,7 @@ int avctp_register(const bdaddr_t *src, gboolean master);
void avctp_unregister(const bdaddr_t *src);
struct avctp *avctp_connect(struct audio_device *device);
-struct avctp *avctp_get(const bdaddr_t *src, const bdaddr_t *dst);
+struct avctp *avctp_get(struct audio_device *device);
int avctp_connect_browsing(struct avctp *session);
void avctp_disconnect(struct avctp *session);
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index f6a5ac9..d5f23da 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -2265,7 +2265,7 @@ void avrcp_disconnect(struct audio_device *dev)
{
struct avctp *session;
- session = avctp_get(&dev->src, &dev->dst);
+ session = avctp_get(dev);
if (!session)
return;
diff --git a/profiles/audio/control.c b/profiles/audio/control.c
index 5b16e17..fea49b6 100644
--- a/profiles/audio/control.c
+++ b/profiles/audio/control.c
@@ -110,7 +110,7 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
if (control->session)
break;
- control->session = avctp_get(&dev->src, &dev->dst);
+ control->session = avctp_get(dev);
break;
case AVCTP_STATE_CONNECTED:
--
1.7.9.5
^ permalink raw reply related
* [PATCH 5/9] avctp: Don't use audio_device src and dst in avctp_control_confirm
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Use src and dst addresses from btd_dev reference.
---
profiles/audio/avctp.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c
index a7daef3..e29527f 100644
--- a/profiles/audio/avctp.c
+++ b/profiles/audio/avctp.c
@@ -1055,6 +1055,9 @@ static struct avctp *avctp_get_internal(const bdaddr_t *src,
static void avctp_control_confirm(struct avctp *session, GIOChannel *chan,
struct audio_device *dev)
{
+ const bdaddr_t *src;
+ const bdaddr_t *dst;
+
if (session->control != NULL) {
error("Control: Refusing unexpected connect");
g_io_channel_shutdown(chan, TRUE, NULL);
@@ -1064,7 +1067,10 @@ static void avctp_control_confirm(struct avctp *session, GIOChannel *chan,
avctp_set_state(session, AVCTP_STATE_CONNECTING);
session->control = avctp_channel_create(session, chan);
- session->auth_id = btd_request_authorization(&dev->src, &dev->dst,
+ src = adapter_get_address(device_get_adapter(dev->btd_dev));
+ dst = device_get_address(dev->btd_dev);
+
+ session->auth_id = btd_request_authorization(src, dst,
AVRCP_TARGET_UUID,
auth_cb, session);
if (session->auth_id == 0)
--
1.7.9.5
^ permalink raw reply related
* [PATCH 6/9] avdtp: Don't use audio_device src and dst fields in avdtp_confirm_cb
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
There is already src and dst available from bt_io.
---
profiles/audio/avdtp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
index deb8d26..9f7bea2 100644
--- a/profiles/audio/avdtp.c
+++ b/profiles/audio/avdtp.c
@@ -2546,7 +2546,7 @@ static void avdtp_confirm_cb(GIOChannel *chan, gpointer data)
session->io_id = g_io_add_watch(chan, G_IO_ERR | G_IO_HUP | G_IO_NVAL,
(GIOFunc) session_cb, session);
- session->auth_id = btd_request_authorization(&dev->src, &dev->dst,
+ session->auth_id = btd_request_authorization(&src, &dst,
ADVANCED_AUDIO_UUID,
auth_cb, session);
if (session->auth_id == 0) {
--
1.7.9.5
^ permalink raw reply related
* [PATCH 7/9] audio: Don't use audio_device src and dst in manager_find_devices
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Use addresses taken from btd_dev reference in audio_device to get
device source and destination.
---
profiles/audio/manager.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 714489a..98ae694 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -673,15 +673,20 @@ GSList *manager_find_devices(const char *path,
for (l = devices; l != NULL; l = l->next) {
struct audio_device *dev = l->data;
+ const bdaddr_t *dev_src;
+ const bdaddr_t *dev_dst;
+
+ dev_src = adapter_get_address(device_get_adapter(dev->btd_dev));
+ dev_dst = device_get_address(dev->btd_dev);
if ((path && (strcmp(path, "")) &&
strcmp(device_get_path(dev->btd_dev), path)))
continue;
- if ((src && bacmp(src, BDADDR_ANY)) && bacmp(&dev->src, src))
+ if ((src && bacmp(src, BDADDR_ANY)) && bacmp(dev_src, src))
continue;
- if ((dst && bacmp(dst, BDADDR_ANY)) && bacmp(&dev->dst, dst))
+ if ((dst && bacmp(dst, BDADDR_ANY)) && bacmp(dev_dst, dst))
continue;
if (interface && !strcmp(AUDIO_SINK_INTERFACE, interface)
--
1.7.9.5
^ permalink raw reply related
* [PATCH 8/9] avrcp: Don't use audio_device src field
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Use address from btd_dev reference in audio_device to get source
address.
---
profiles/audio/avrcp.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index d5f23da..06b524e 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -2217,8 +2217,11 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
{
struct avrcp_server *server;
struct avrcp *session;
+ const bdaddr_t *src;
- server = find_server(servers, &dev->src);
+ src = adapter_get_address(device_get_adapter(dev->btd_dev));
+
+ server = find_server(servers, src);
if (!server)
return;
@@ -2445,8 +2448,11 @@ int avrcp_set_volume(struct audio_device *dev, uint8_t volume)
struct avrcp *session;
uint8_t buf[AVRCP_HEADER_LENGTH + 1];
struct avrcp_header *pdu = (void *) buf;
+ const bdaddr_t *src;
- server = find_server(servers, &dev->src);
+ src = adapter_get_address(device_get_adapter(dev->btd_dev));
+
+ server = find_server(servers, src);
if (server == NULL)
return -EINVAL;
--
1.7.9.5
^ permalink raw reply related
* [PATCH 9/9] audio: Remove src and dst from struct audio_device
From: Szymon Janc @ 2012-12-05 10:10 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1354702224-15895-1-git-send-email-szymon.janc@tieto.com>
Those are not used anymore as addresses are takes from btd_device
reference.
---
profiles/audio/device.c | 6 +-----
profiles/audio/device.h | 7 +------
profiles/audio/manager.c | 2 +-
3 files changed, 3 insertions(+), 12 deletions(-)
diff --git a/profiles/audio/device.c b/profiles/audio/device.c
index ba1efec..d135ce9 100644
--- a/profiles/audio/device.c
+++ b/profiles/audio/device.c
@@ -292,9 +292,7 @@ static void device_avctp_cb(struct audio_device *dev,
}
}
-struct audio_device *audio_device_register(struct btd_device *device,
- const bdaddr_t *src,
- const bdaddr_t *dst)
+struct audio_device *audio_device_register(struct btd_device *device)
{
struct audio_device *dev;
@@ -303,8 +301,6 @@ struct audio_device *audio_device_register(struct btd_device *device,
dev = g_new0(struct audio_device, 1);
dev->btd_dev = btd_device_ref(device);
- bacpy(&dev->dst, dst);
- bacpy(&dev->src, src);
dev->priv = g_new0(struct dev_priv, 1);
dev->priv->state = AUDIO_STATE_DISCONNECTED;
diff --git a/profiles/audio/device.h b/profiles/audio/device.h
index 0801cda..e3dc519 100644
--- a/profiles/audio/device.h
+++ b/profiles/audio/device.h
@@ -36,9 +36,6 @@ typedef void (*audio_device_cb) (struct audio_device *dev, int err, void *data);
struct audio_device {
struct btd_device *btd_dev;
- bdaddr_t src;
- bdaddr_t dst;
-
gboolean auto_connect;
struct sink *sink;
@@ -52,9 +49,7 @@ struct audio_device {
struct dev_priv *priv;
};
-struct audio_device *audio_device_register(struct btd_device *device,
- const bdaddr_t *src,
- const bdaddr_t *dst);
+struct audio_device *audio_device_register(struct btd_device *device);
void audio_device_unregister(struct audio_device *device);
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 98ae694..0c21287 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -761,7 +761,7 @@ struct audio_device *manager_get_device(const bdaddr_t *src,
return NULL;
}
- dev = audio_device_register(device, src, dst);
+ dev = audio_device_register(device);
if (!dev)
return NULL;
--
1.7.9.5
^ permalink raw reply related
* [PATCH 1/2] audio: Remove left over of HFP removal
From: Chan-yeol Park @ 2012-12-05 10:16 UTC (permalink / raw)
To: linux-bluetooth
---
profiles/audio/audio.conf | 21 ++-------------------
profiles/audio/manager.c | 10 ----------
2 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/profiles/audio/audio.conf b/profiles/audio/audio.conf
index 6bf4482..12b9c55 100644
--- a/profiles/audio/audio.conf
+++ b/profiles/audio/audio.conf
@@ -8,12 +8,8 @@
#Master=true
# If we want to disable support for specific services
-# Defaults to supporting the services: HFP, Headset, Sink, Control
-#Disable=Gateway,Source
-
-# SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA)
-# Defaults to HCI
-#SCORouting=PCM
+# Defaults to supporting the services: Sink, Control
+#Disable=Source
# Automatically connect both A2DP and HFP/HSP profiles for incoming
# connections. Some headsets that support both profiles will only connect the
@@ -21,16 +17,3 @@
# idea.
#AutoConnect=true
-# Headset interface specific options (i.e. options which affect how the audio
-# service interacts with remote headset devices)
-[Headset]
-
-# Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
-MaxConnected=1
-
-# Set to true to enable use of fast connectable mode (faster page scanning)
-# for HFP when incoming call starts. Default settings are restored after
-# call is answered or rejected. Page scan interval is much shorter and page
-# scan type changed to interlaced. Such allows faster connection initiated
-# by a headset.
-FastConnectable=false
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 714489a..4e0c631 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -81,7 +81,6 @@ struct profile_req {
};
static gboolean auto_connect = TRUE;
-static int max_connected_headsets = 1;
static GKeyFile *config = NULL;
static GSList *adapters = NULL;
static GSList *devices = NULL;
@@ -619,15 +618,6 @@ int audio_manager_init(GKeyFile *conf)
} else
auto_connect = b;
- err = NULL;
- i = g_key_file_get_integer(config, "Headset", "MaxConnected",
- &err);
- if (err) {
- DBG("audio.conf: %s", err->message);
- g_clear_error(&err);
- } else
- max_connected_headsets = i;
-
proceed:
if (enabled.source)
btd_profile_register(&a2dp_source_profile);
--
1.7.9.5
^ permalink raw reply related
* [PATCH 2/2] audio: Remove not used auto connect flag
From: Chan-yeol Park @ 2012-12-05 10:16 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1354702595-5040-1-git-send-email-chanyeol.park@samsung.com>
This flag is not used anymore because HFP is moved away from bluez
It was used for Automatic HFP+A2DP connection with incomming connection.
---
profiles/audio/audio.conf | 7 -------
profiles/audio/avdtp.c | 11 -----------
profiles/audio/device.h | 2 --
profiles/audio/manager.c | 10 ----------
profiles/audio/sink.c | 2 --
profiles/audio/source.c | 2 --
6 files changed, 34 deletions(-)
diff --git a/profiles/audio/audio.conf b/profiles/audio/audio.conf
index 12b9c55..f556610 100644
--- a/profiles/audio/audio.conf
+++ b/profiles/audio/audio.conf
@@ -10,10 +10,3 @@
# If we want to disable support for specific services
# Defaults to supporting the services: Sink, Control
#Disable=Source
-
-# Automatically connect both A2DP and HFP/HSP profiles for incoming
-# connections. Some headsets that support both profiles will only connect the
-# other one automatically so the default setting of true is usually a good
-# idea.
-#AutoConnect=true
-
diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
index e38c95b..4b74b65 100644
--- a/profiles/audio/avdtp.c
+++ b/profiles/audio/avdtp.c
@@ -436,8 +436,6 @@ static GSList *servers = NULL;
static GSList *avdtp_callbacks = NULL;
-static gboolean auto_connect = TRUE;
-
static int send_request(struct avdtp *session, gboolean priority,
struct avdtp_stream *stream, uint8_t signal_id,
void *buffer, size_t size);
@@ -2549,8 +2547,6 @@ static void avdtp_confirm_cb(GIOChannel *chan, gpointer data)
goto drop;
}
- dev->auto_connect = auto_connect;
-
return;
drop:
@@ -3880,13 +3876,6 @@ int avdtp_init(const bdaddr_t *src, GKeyFile *config)
} else
master = tmp;
- tmp = g_key_file_get_boolean(config, "General", "AutoConnect",
- &err);
- if (err)
- g_clear_error(&err);
- else
- auto_connect = tmp;
-
proceed:
server = g_new0(struct avdtp_server, 1);
diff --git a/profiles/audio/device.h b/profiles/audio/device.h
index 0801cda..77e3c98 100644
--- a/profiles/audio/device.h
+++ b/profiles/audio/device.h
@@ -39,8 +39,6 @@ struct audio_device {
bdaddr_t src;
bdaddr_t dst;
- gboolean auto_connect;
-
struct sink *sink;
struct source *source;
struct control *control;
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 4e0c631..355d7fb 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -80,7 +80,6 @@ struct profile_req {
btd_profile_cb cb;
};
-static gboolean auto_connect = TRUE;
static GKeyFile *config = NULL;
static GSList *adapters = NULL;
static GSList *devices = NULL;
@@ -579,8 +578,6 @@ int audio_manager_init(GKeyFile *conf)
{
char **list;
int i;
- gboolean b;
- GError *err = NULL;
if (!conf)
goto proceed;
@@ -611,13 +608,6 @@ int audio_manager_init(GKeyFile *conf)
}
g_strfreev(list);
- b = g_key_file_get_boolean(config, "General", "AutoConnect", &err);
- if (err) {
- DBG("audio.conf: %s", err->message);
- g_clear_error(&err);
- } else
- auto_connect = b;
-
proceed:
if (enabled.source)
btd_profile_register(&a2dp_source_profile);
diff --git a/profiles/audio/sink.c b/profiles/audio/sink.c
index 466c0a8..bc9a194 100644
--- a/profiles/audio/sink.c
+++ b/profiles/audio/sink.c
@@ -366,8 +366,6 @@ int sink_connect(struct audio_device *dev, audio_device_cb cb, void *data)
return -EIO;
}
- dev->auto_connect = FALSE;
-
pending = sink->connect;
pending->cb = cb;
diff --git a/profiles/audio/source.c b/profiles/audio/source.c
index 157a4e8..1105d3e 100644
--- a/profiles/audio/source.c
+++ b/profiles/audio/source.c
@@ -366,8 +366,6 @@ int source_connect(struct audio_device *dev, audio_device_cb cb, void *data)
return -EIO;
}
- dev->auto_connect = FALSE;
-
pending = source->connect;
pending->cb = cb;
pending->cb_data = data;
--
1.7.9.5
^ permalink raw reply related
* [PATCH] hciconfig: Retrieve linkey from device info file
From: Frédéric Danis @ 2012-12-05 10:20 UTC (permalink / raw)
To: linux-bluetooth
Skip 2 first bytes of Key entry as it begins with "0x"
---
Makefile.tools | 2 +-
tools/hciconfig.c | 37 ++++++++++++++++++++++++++++---------
2 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/Makefile.tools b/Makefile.tools
index 1cbd876..e820301 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -23,7 +23,7 @@ tools_hciattach_LDADD = lib/libbluetooth-private.la
tools_hciconfig_SOURCES = tools/hciconfig.c tools/csr.h tools/csr.c \
src/textfile.h src/textfile.c
-tools_hciconfig_LDADD = lib/libbluetooth-private.la
+tools_hciconfig_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@
tools_hcitool_SOURCES = tools/hcitool.c src/oui.h src/oui.c \
src/textfile.h src/textfile.c
diff --git a/tools/hciconfig.c b/tools/hciconfig.c
index 045e9a8..3700198 100644
--- a/tools/hciconfig.c
+++ b/tools/hciconfig.c
@@ -38,6 +38,8 @@
#include <sys/ioctl.h>
#include <sys/socket.h>
+#include <glib.h>
+
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
@@ -1018,26 +1020,43 @@ static void cmd_voice(int ctl, int hdev, char *opt)
static int get_link_key(const bdaddr_t *local, const bdaddr_t *peer,
uint8_t *key)
{
- char filename[PATH_MAX + 1], addr[18], tmp[3], *str;
+ char filename[PATH_MAX + 1];
+ char local_addr[18], peer_addr[18];
+ GKeyFile *key_file;
+ char tmp[3], *str;
int i;
+ int err = 0;
+
+ ba2str(local, local_addr);
+ ba2str(peer, peer_addr);
+ snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", local_addr,
+ peer_addr);
+ filename[PATH_MAX] = '\0';
+ key_file = g_key_file_new();
- ba2str(local, addr);
- create_name(filename, PATH_MAX, STORAGEDIR, addr, "linkkeys");
+ if (!g_key_file_load_from_file(key_file, filename, 0, NULL)) {
+ err = -EIO;
+ goto failed;
+ }
- ba2str(peer, addr);
- str = textfile_get(filename, addr);
- if (!str)
- return -EIO;
+ str = g_key_file_get_string(key_file, "LinkKey", "Key", NULL);
+ if (!str) {
+ err = -EIO;
+ goto failed;
+ }
memset(tmp, 0, sizeof(tmp));
for (i = 0; i < 16; i++) {
- memcpy(tmp, str + (i * 2), 2);
+ memcpy(tmp, str + 2 + (i * 2), 2);
key[i] = (uint8_t) strtol(tmp, NULL, 16);
}
free(str);
- return 0;
+failed:
+ g_key_file_free(key_file);
+
+ return err;
}
static void cmd_putkey(int ctl, int hdev, char *opt)
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH] adapter: Fix compilation on some architectures
From: Johan Hedberg @ 2012-12-05 10:29 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <1354701750-15578-1-git-send-email-szymon.janc@tieto.com>
Hi Szymon,
On Wed, Dec 05, 2012, Szymon Janc wrote:
> plain char may be treated as signed or unsigned depending on compiler
> (as oposite to other integer types). Use signed char explicitly when
> signed type is needed.
>
> This fix following compilation error on ARM:
>
> CC src/bluetoothd-adapter.o
> src/adapter.c: In function ‘convert_entry’:
> src/adapter.c:2710:2: error: comparison is always true due to limited
> range of data type [-Werror=type-limits]
> cc1: all warnings being treated as errors
> make[1]: *** [src/bluetoothd-adapter.o] Error 1
> ---
> src/adapter.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/adapter.c b/src/adapter.c
> index 3c5d277..0cbce78 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -2673,7 +2673,7 @@ static void convert_ltk_entry(GKeyFile *key_file, void *value)
> static void convert_entry(char *key, char *value, void *user_data)
> {
> struct device_converter *converter = user_data;
> - char device_type = -1;
> + signed char device_type = -1;
> char filename[PATH_MAX + 1];
> GKeyFile *key_file;
> char *data;
Couldn't we just initialize the value to BDADDR_BREDR or maybe use an
int for it. And the naming is confusing as the value contains an address
type and not a device type.
Johan
^ permalink raw reply
* Re: [PATCH] hciconfig: Retrieve linkey from device info file
From: Marcel Holtmann @ 2012-12-05 10:33 UTC (permalink / raw)
To: Frédéric Danis; +Cc: linux-bluetooth
In-Reply-To: <1354702812-21080-1-git-send-email-frederic.danis@linux.intel.com>
Hi Fred,
> Skip 2 first bytes of Key entry as it begins with "0x"
> ---
> Makefile.tools | 2 +-
> tools/hciconfig.c | 37 ++++++++++++++++++++++++++++---------
> 2 files changed, 29 insertions(+), 10 deletions(-)
this is not worth it. I rather have the feature in hciconfig removed.
Regards
Marcel
^ permalink raw reply
* [PATCH v2] hciconfig: Remove putkey command
From: Frédéric Danis @ 2012-12-05 11:02 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1354703610.1815.0.camel@aeonflux>
---
tools/hciconfig.c | 64 -----------------------------------------------------
1 file changed, 64 deletions(-)
diff --git a/tools/hciconfig.c b/tools/hciconfig.c
index 045e9a8..6b18c4f 100644
--- a/tools/hciconfig.c
+++ b/tools/hciconfig.c
@@ -1015,69 +1015,6 @@ static void cmd_voice(int ctl, int hdev, char *opt)
}
}
-static int get_link_key(const bdaddr_t *local, const bdaddr_t *peer,
- uint8_t *key)
-{
- char filename[PATH_MAX + 1], addr[18], tmp[3], *str;
- int i;
-
- ba2str(local, addr);
- create_name(filename, PATH_MAX, STORAGEDIR, addr, "linkkeys");
-
- ba2str(peer, addr);
- str = textfile_get(filename, addr);
- if (!str)
- return -EIO;
-
- memset(tmp, 0, sizeof(tmp));
- for (i = 0; i < 16; i++) {
- memcpy(tmp, str + (i * 2), 2);
- key[i] = (uint8_t) strtol(tmp, NULL, 16);
- }
-
- free(str);
-
- return 0;
-}
-
-static void cmd_putkey(int ctl, int hdev, char *opt)
-{
- struct hci_dev_info di;
- bdaddr_t bdaddr;
- uint8_t key[16];
- int dd;
-
- if (!opt)
- return;
-
- dd = hci_open_dev(hdev);
- if (dd < 0) {
- fprintf(stderr, "Can't open device hci%d: %s (%d)\n",
- hdev, strerror(errno), errno);
- exit(1);
- }
-
- if (hci_devinfo(hdev, &di) < 0) {
- fprintf(stderr, "Can't get device info for hci%d: %s (%d)\n",
- hdev, strerror(errno), errno);
- exit(1);
- }
-
- str2ba(opt, &bdaddr);
- if (get_link_key(&di.bdaddr, &bdaddr, key) < 0) {
- fprintf(stderr, "Can't find link key for %s on hci%d\n", opt, hdev);
- exit(1);
- }
-
- if (hci_write_stored_link_key(dd, &bdaddr, key, 1000) < 0) {
- fprintf(stderr, "Can't write stored link key on hci%d: %s (%d)\n",
- hdev, strerror(errno), errno);
- exit(1);
- }
-
- hci_close_dev(dd);
-}
-
static void cmd_delkey(int ctl, int hdev, char *opt)
{
bdaddr_t bdaddr;
@@ -1984,7 +1921,6 @@ static struct {
{ "sspmode", cmd_ssp_mode, "[mode]", "Get/Set Simple Pairing Mode" },
{ "aclmtu", cmd_aclmtu, "<mtu:pkt>", "Set ACL MTU and number of packets" },
{ "scomtu", cmd_scomtu, "<mtu:pkt>", "Set SCO MTU and number of packets" },
- { "putkey", cmd_putkey, "<bdaddr>", "Store link key on the device" },
{ "delkey", cmd_delkey, "<bdaddr>", "Delete link key from the device" },
{ "oobdata", cmd_oob_data, 0, "Get local OOB data" },
{ "commands", cmd_commands, 0, "Display supported commands" },
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH 1/2] audio: Remove left over of HFP removal
From: Johan Hedberg @ 2012-12-05 11:03 UTC (permalink / raw)
To: Chan-yeol Park; +Cc: linux-bluetooth
In-Reply-To: <1354702595-5040-1-git-send-email-chanyeol.park@samsung.com>
Hi Chan-yeol,
On Wed, Dec 05, 2012, Chan-yeol Park wrote:
> ---
> profiles/audio/audio.conf | 21 ++-------------------
> profiles/audio/manager.c | 10 ----------
> 2 files changed, 2 insertions(+), 29 deletions(-)
Both patches have been applied. Thanks.
Johan
^ 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