2011-06-09 13:53:08

by Bastien Nocera

[permalink] [raw]
Subject: [PATCH 1/2] Add function to get default adapter ID

Combined with manager_find_adapter_by_id(), it is now possible
to get the btd_adapter struct for the default adapter:
manager_find_adapter_by_id (manager_get_default_adapter_id ());
---
src/manager.c | 8 ++++++++
src/manager.h | 1 +
2 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/manager.c b/src/manager.c
index e805e0c..9d0de25 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -288,6 +288,11 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
btd_start_exit_timer();
}

+int manager_get_default_adapter_id(void)
+{
+ return default_adapter_id;
+}
+
void manager_cleanup(DBusConnection *conn, const char *path)
{
g_slist_foreach(adapters, (GFunc) manager_remove_adapter, NULL);
@@ -331,6 +336,9 @@ struct btd_adapter *manager_find_adapter_by_id(int id)
{
GSList *match;

+ if (id < 0)
+ return NULL;
+
match = g_slist_find_custom(adapters, GINT_TO_POINTER(id),
adapter_id_cmp);
if (!match)
diff --git a/src/manager.h b/src/manager.h
index 05c38b3..52bf36b 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -41,3 +41,4 @@ struct btd_adapter *btd_manager_register_adapter(int id);
int btd_manager_unregister_adapter(int id);
void manager_add_adapter(const char *path);
void btd_manager_set_did(uint16_t vendor, uint16_t product, uint16_t version);
+int manager_get_default_adapter_id(void);
--
1.7.5.1



2011-06-15 14:04:48

by Antonio Ospite

[permalink] [raw]
Subject: Re: [PATCH 1/2] Add function to get default adapter ID

On Tue, 14 Jun 2011 15:02:39 +0100
Bastien Nocera <[email protected]> wrote:

> On Tue, 2011-06-14 at 16:02 +0300, Johan Hedberg wrote:
> > Hi Bastien,

> > > diff --git a/src/manager.c b/src/manager.c
> > > index e805e0c..9d0de25 100644
> > > --- a/src/manager.c
> > > +++ b/src/manager.c
> > > @@ -288,6 +288,11 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
> > > btd_start_exit_timer();
> > > }
> > >
> > > +int manager_get_default_adapter_id(void)
> > > +{
> > > + return default_adapter_id;
> > > +}
> >
> > Would it not make more sense to have something that returns the adapter
> > object directly? I.e. are there actually any use cases where some plugin
> > would want the id but *not* want to resolve the matching adapter object?
> > And even if the plugin still needs the id (which I'd expect to be a
> > minority use-case if it exists at all) it can always call
> > adapter_get_dev_id().
>
> I really really don't care either way. I sent both variations of the
> patch already (Antonio has one in his patchset, and I sent the other).
> Commit either, and we'll change our patches.
>

Yep, same for me, either this one or the one in
http://article.gmane.org/gmane.linux.kernel.input/19751 is OK, we just
need a way to get the default adapter, please.

Thanks,
Antonio

--
Antonio Ospite
http://ao2.it

PGP public key ID: 0x4553B001

A: Because it messes up the order in which people normally read text.
See http://en.wikipedia.org/wiki/Posting_style
Q: Why is top-posting such a bad thing?


Attachments:
(No filename) (1.50 kB)
(No filename) (198.00 B)
Download all attachments

2011-06-14 14:02:39

by Bastien Nocera

[permalink] [raw]
Subject: Re: [PATCH 1/2] Add function to get default adapter ID

On Tue, 2011-06-14 at 16:02 +0300, Johan Hedberg wrote:
> Hi Bastien,
>
> On Thu, Jun 09, 2011, Bastien Nocera wrote:
> > Combined with manager_find_adapter_by_id(), it is now possible
> > to get the btd_adapter struct for the default adapter:
> > manager_find_adapter_by_id (manager_get_default_adapter_id ());
> > ---
> > src/manager.c | 8 ++++++++
> > src/manager.h | 1 +
> > 2 files changed, 9 insertions(+), 0 deletions(-)
> >
> > diff --git a/src/manager.c b/src/manager.c
> > index e805e0c..9d0de25 100644
> > --- a/src/manager.c
> > +++ b/src/manager.c
> > @@ -288,6 +288,11 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
> > btd_start_exit_timer();
> > }
> >
> > +int manager_get_default_adapter_id(void)
> > +{
> > + return default_adapter_id;
> > +}
>
> Would it not make more sense to have something that returns the adapter
> object directly? I.e. are there actually any use cases where some plugin
> would want the id but *not* want to resolve the matching adapter object?
> And even if the plugin still needs the id (which I'd expect to be a
> minority use-case if it exists at all) it can always call
> adapter_get_dev_id().

I really really don't care either way. I sent both variations of the
patch already (Antonio has one in his patchset, and I sent the other).
Commit either, and we'll change our patches.


2011-06-14 13:02:52

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH 1/2] Add function to get default adapter ID

Hi Bastien,

On Thu, Jun 09, 2011, Bastien Nocera wrote:
> Combined with manager_find_adapter_by_id(), it is now possible
> to get the btd_adapter struct for the default adapter:
> manager_find_adapter_by_id (manager_get_default_adapter_id ());
> ---
> src/manager.c | 8 ++++++++
> src/manager.h | 1 +
> 2 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/src/manager.c b/src/manager.c
> index e805e0c..9d0de25 100644
> --- a/src/manager.c
> +++ b/src/manager.c
> @@ -288,6 +288,11 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
> btd_start_exit_timer();
> }
>
> +int manager_get_default_adapter_id(void)
> +{
> + return default_adapter_id;
> +}

Would it not make more sense to have something that returns the adapter
object directly? I.e. are there actually any use cases where some plugin
would want the id but *not* want to resolve the matching adapter object?
And even if the plugin still needs the id (which I'd expect to be a
minority use-case if it exists at all) it can always call
adapter_get_dev_id().

Johan

2011-06-14 10:24:03

by Antonio Ospite

[permalink] [raw]
Subject: Re: [PATCH 1/2] Add function to get default adapter ID

On Thu, 9 Jun 2011 14:53:08 +0100
Bastien Nocera <[email protected]> wrote:

> Combined with manager_find_adapter_by_id(), it is now possible
> to get the btd_adapter struct for the default adapter:
> manager_find_adapter_by_id (manager_get_default_adapter_id ());
> ---

Ping, if this gets it I will use it in the next version of the Sixaxis
plugin.

Thanks,
Antonio


> src/manager.c | 8 ++++++++
> src/manager.h | 1 +
> 2 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/src/manager.c b/src/manager.c
> index e805e0c..9d0de25 100644
> --- a/src/manager.c
> +++ b/src/manager.c
> @@ -288,6 +288,11 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
> btd_start_exit_timer();
> }
>
> +int manager_get_default_adapter_id(void)
> +{
> + return default_adapter_id;
> +}
> +
> void manager_cleanup(DBusConnection *conn, const char *path)
> {
> g_slist_foreach(adapters, (GFunc) manager_remove_adapter, NULL);
> @@ -331,6 +336,9 @@ struct btd_adapter *manager_find_adapter_by_id(int id)
> {
> GSList *match;
>
> + if (id < 0)
> + return NULL;
> +
> match = g_slist_find_custom(adapters, GINT_TO_POINTER(id),
> adapter_id_cmp);
> if (!match)
> diff --git a/src/manager.h b/src/manager.h
> index 05c38b3..52bf36b 100644
> --- a/src/manager.h
> +++ b/src/manager.h
> @@ -41,3 +41,4 @@ struct btd_adapter *btd_manager_register_adapter(int id);
> int btd_manager_unregister_adapter(int id);
> void manager_add_adapter(const char *path);
> void btd_manager_set_did(uint16_t vendor, uint16_t product, uint16_t version);
> +int manager_get_default_adapter_id(void);
> --

--
Antonio Ospite
http://ao2.it

PGP public key ID: 0x4553B001

A: Because it messes up the order in which people normally read text.
See http://en.wikipedia.org/wiki/Posting_style
Q: Why is top-posting such a bad thing?


Attachments:
(No filename) (1.82 kB)
(No filename) (198.00 B)
Download all attachments

2011-06-09 13:53:09

by Bastien Nocera

[permalink] [raw]
Subject: [PATCH 2/2] Simplify "SetName" D-Bus call

By merging most of the functionality into adapter_update_local_name()
This also allows us to drop the adapter->name_stored struct member
as in any calls to adapter_update_local_name(), we would want to
write out the adapter name.
---
src/adapter.c | 59 ++++++++++++++++++++++++--------------------------------
src/adapter.h | 2 +-
2 files changed, 26 insertions(+), 35 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index b189841..31f1f37 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -148,8 +148,6 @@ struct btd_adapter {

GSList *powered_callbacks;

- gboolean name_stored;
-
GSList *loaded_drivers;
};

@@ -916,10 +914,17 @@ void btd_adapter_class_changed(struct btd_adapter *adapter, uint32_t new_class)
DBUS_TYPE_UINT32, &new_class);
}

-void adapter_update_local_name(struct btd_adapter *adapter, const char *name)
+int adapter_update_local_name(struct btd_adapter *adapter, const char *name)
{
+ char *name_ptr;
+
if (strncmp(name, adapter->name, MAX_NAME_LENGTH) == 0)
- return;
+ return 0;
+
+ if (!g_utf8_validate(name, -1, NULL)) {
+ error("Name change failed: supplied name isn't valid UTF-8");
+ return -EINVAL;
+ }

strncpy(adapter->name, name, MAX_NAME_LENGTH);

@@ -927,18 +932,22 @@ void adapter_update_local_name(struct btd_adapter *adapter, const char *name)
attrib_gap_set(GATT_CHARAC_DEVICE_NAME,
(const uint8_t *) adapter->name, strlen(adapter->name));

- if (!adapter->name_stored) {
- char *name_ptr = adapter->name;
+ name_ptr = adapter->name;

- write_local_name(&adapter->bdaddr, adapter->name);
+ write_local_name(&adapter->bdaddr, adapter->name);

- if (connection)
- emit_property_changed(connection, adapter->path,
- ADAPTER_INTERFACE, "Name",
- DBUS_TYPE_STRING, &name_ptr);
+ if (connection)
+ emit_property_changed(connection, adapter->path,
+ ADAPTER_INTERFACE, "Name",
+ DBUS_TYPE_STRING, &name_ptr);
+
+ if (adapter->up) {
+ int err = adapter_ops->set_name(adapter->dev_id, name);
+ if (err < 0)
+ return err;
}

- adapter->name_stored = FALSE;
+ return 0;
}

static DBusMessage *set_name(DBusConnection *conn, DBusMessage *msg,
@@ -947,29 +956,12 @@ static DBusMessage *set_name(DBusConnection *conn, DBusMessage *msg,
struct btd_adapter *adapter = data;
char *name_ptr = adapter->name;

- if (!g_utf8_validate(name, -1, NULL)) {
- error("Name change failed: supplied name isn't valid UTF-8");
+ ret = adapter_update_local_name(adapter, name);
+ if (ret == -EINVAL)
return btd_error_invalid_args(msg);
- }
-
- if (strncmp(name, adapter->name, MAX_NAME_LENGTH) == 0)
- goto done;
-
- strncpy(adapter->name, name, MAX_NAME_LENGTH);
- write_local_name(&adapter->bdaddr, name);
- emit_property_changed(connection, adapter->path,
- ADAPTER_INTERFACE, "Name",
- DBUS_TYPE_STRING, &name_ptr);
-
- if (adapter->up) {
- int err = adapter_ops->set_name(adapter->dev_id, name);
- if (err < 0)
- return btd_error_failed(msg, strerror(-err));
-
- adapter->name_stored = TRUE;
- }
+ else if (ret < 0)
+ return btd_error_failed(msg, strerror(-err));

-done:
return dbus_message_new_method_return(msg);
}

@@ -2498,7 +2490,6 @@ int btd_adapter_stop(struct btd_adapter *adapter)
adapter->mode = MODE_OFF;
adapter->state = STATE_IDLE;
adapter->off_requested = FALSE;
- adapter->name_stored = FALSE;

call_adapter_powered_callbacks(adapter, FALSE);

diff --git a/src/adapter.h b/src/adapter.h
index 3526849..13971bf 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -115,7 +115,7 @@ int adapter_remove_found_device(struct btd_adapter *adapter, bdaddr_t *bdaddr);
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);
-void adapter_update_local_name(struct btd_adapter *adapter, const char *name);
+int adapter_update_local_name(struct btd_adapter *adapter, const char *name);
void adapter_service_insert(struct btd_adapter *adapter, void *rec);
void adapter_service_remove(struct btd_adapter *adapter, void *rec);
void btd_adapter_class_changed(struct btd_adapter *adapter,
--
1.7.5.1