Message ID | 20200715222812.238172-1-sonnysasaka@chromium.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [BlueZ] profile: Add exception from being claimed internally | expand |
Hi Sonny, On Wed, Jul 15, 2020 at 3:32 PM Sonny Sasaka <sonnysasaka@chromium.org> wrote: > > This adds a flag to give exception to profiles that are considered safe > to be both handled internally and externally via GATT API. Currently > this includes the battery profile. > > --- > profiles/battery/battery.c | 1 + > src/device.c | 2 +- > src/profile.h | 5 +++++ > 3 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c > index 4da4355a1..20aa47727 100644 > --- a/profiles/battery/battery.c > +++ b/profiles/battery/battery.c > @@ -354,6 +354,7 @@ static struct btd_profile batt_profile = { > .device_remove = batt_remove, > .accept = batt_accept, > .disconnect = batt_disconnect, > + .claim_service_exception = true, > }; > > static int batt_init(void) > diff --git a/src/device.c b/src/device.c > index 0deee2707..cfa52461f 100644 > --- a/src/device.c > +++ b/src/device.c > @@ -3818,7 +3818,7 @@ done: > profile = btd_service_get_profile(service); > > /* Claim attributes of internal profiles */ > - if (!profile->external) { > + if (!profile->external && !profile->claim_service_exception) { The external field was added exactly to allow it to be used externally. > /* Mark the service as claimed by the existing profile. */ > gatt_db_service_set_claimed(attr, true); > } > diff --git a/src/profile.h b/src/profile.h > index 4448a2a6d..25e83381b 100644 > --- a/src/profile.h > +++ b/src/profile.h > @@ -36,6 +36,11 @@ struct btd_profile { > > bool auto_connect; > bool external; > + /* Some profiles are considered safe to be handled internally and also > + * be exposed in the GATT API. This flag give such profiles exception > + * from being claimed internally. > + */ > + bool claim_service_exception; > > int (*device_probe) (struct btd_service *service); > void (*device_remove) (struct btd_service *service); > -- > 2.26.2 >
Hi Luiz, On Wed, Jul 15, 2020 at 3:40 PM Luiz Augusto von Dentz <luiz.dentz@gmail.com> wrote: > > Hi Sonny, > > On Wed, Jul 15, 2020 at 3:32 PM Sonny Sasaka <sonnysasaka@chromium.org> wrote: > > > > This adds a flag to give exception to profiles that are considered safe > > to be both handled internally and externally via GATT API. Currently > > this includes the battery profile. > > > > --- > > profiles/battery/battery.c | 1 + > > src/device.c | 2 +- > > src/profile.h | 5 +++++ > > 3 files changed, 7 insertions(+), 1 deletion(-) > > > > diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c > > index 4da4355a1..20aa47727 100644 > > --- a/profiles/battery/battery.c > > +++ b/profiles/battery/battery.c > > @@ -354,6 +354,7 @@ static struct btd_profile batt_profile = { > > .device_remove = batt_remove, > > .accept = batt_accept, > > .disconnect = batt_disconnect, > > + .claim_service_exception = true, > > }; > > > > static int batt_init(void) > > diff --git a/src/device.c b/src/device.c > > index 0deee2707..cfa52461f 100644 > > --- a/src/device.c > > +++ b/src/device.c > > @@ -3818,7 +3818,7 @@ done: > > profile = btd_service_get_profile(service); > > > > /* Claim attributes of internal profiles */ > > - if (!profile->external) { > > + if (!profile->external && !profile->claim_service_exception) { > > The external field was added exactly to allow it to be used externally. Oh, I was misled by the field name, I thought it's to mark profiles which are not handled internally. I have sent another patch also clarifying the field with a comment. > > > /* Mark the service as claimed by the existing profile. */ > > gatt_db_service_set_claimed(attr, true); > > } > > diff --git a/src/profile.h b/src/profile.h > > index 4448a2a6d..25e83381b 100644 > > --- a/src/profile.h > > +++ b/src/profile.h > > @@ -36,6 +36,11 @@ struct btd_profile { > > > > bool auto_connect; > > bool external; > > + /* Some profiles are considered safe to be handled internally and also > > + * be exposed in the GATT API. This flag give such profiles exception > > + * from being claimed internally. > > + */ > > + bool claim_service_exception; > > > > int (*device_probe) (struct btd_service *service); > > void (*device_remove) (struct btd_service *service); > > -- > > 2.26.2 > > > > > -- > Luiz Augusto von Dentz
diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c index 4da4355a1..20aa47727 100644 --- a/profiles/battery/battery.c +++ b/profiles/battery/battery.c @@ -354,6 +354,7 @@ static struct btd_profile batt_profile = { .device_remove = batt_remove, .accept = batt_accept, .disconnect = batt_disconnect, + .claim_service_exception = true, }; static int batt_init(void) diff --git a/src/device.c b/src/device.c index 0deee2707..cfa52461f 100644 --- a/src/device.c +++ b/src/device.c @@ -3818,7 +3818,7 @@ done: profile = btd_service_get_profile(service); /* Claim attributes of internal profiles */ - if (!profile->external) { + if (!profile->external && !profile->claim_service_exception) { /* Mark the service as claimed by the existing profile. */ gatt_db_service_set_claimed(attr, true); } diff --git a/src/profile.h b/src/profile.h index 4448a2a6d..25e83381b 100644 --- a/src/profile.h +++ b/src/profile.h @@ -36,6 +36,11 @@ struct btd_profile { bool auto_connect; bool external; + /* Some profiles are considered safe to be handled internally and also + * be exposed in the GATT API. This flag give such profiles exception + * from being claimed internally. + */ + bool claim_service_exception; int (*device_probe) (struct btd_service *service); void (*device_remove) (struct btd_service *service);