Re: D-Bus API for GATT Connect/Disconnect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Marcel,

> On Wed, Dec 10, 2014 at 1:38 PM, Arman Uguray <armansito@xxxxxxxxxx> wrote:
> Hi Marcel,
>
>> On Wed, Dec 10, 2014 at 1:11 PM, Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote:
>> Hi Arman,
>>
>>> For GATT, applications using bluetoothd currently need to use
>>> Device1.Connect and Device1.Disconnect when they want to initiate a
>>> connection to a peripheral, though these functions are really
>>> primarily meant for UI usage. BlueZ already has a D-Bus API for BR/EDR
>>> profiles such as ConnectProfile/DisconnectProfile and the
>>> ProfileManager API which is more geared towards applications and I
>>> think we'll need something for GATT as well. The basic features that
>>> I'm thinking of are:
>>>
>>>   1. Sessions per D-Bus connection that provide a reference count for
>>> the ACL connection.
>>>   2. Correctly handling the reference count if the connection was
>>> initiated via Device1.Connect or via auto-connect.
>>>   3. This would be GATT only at first but it could perhaps expand to
>>> connection-oriented channels eventually?
>>>
>>> I don't really have an RFC API proposal at this point but I wanted to
>>> get this discussion going. What would make most sense here?
>>
>> the basic concept behind ProfileManager API that we used for BR/EDR worked out pretty nicely. So maybe extend the general idea with the agent and callbacks to GattManager.
>>
>> When looking at the difference then we are talking about accessing remote GATT service via a local GATT profile. So what we want is implement that profile handling in an application.
>>
>
> Right, though there are some edge cases to consider. I think that if
> I'm implementing the server-role of a GATT profile (some I'm
> registering GATT services via D-Bus), I probably don't care much about
> the status of the connection, since I'll likely be just sitting and
> listening. So the connection mostly makes sense for central-role
> applications, except if I'm implementing the peripheral end of a CoC.
>
>> If we want to avoid overloading we could use GattProfileManager and GattProfile as terms to implement that. However the general idea that you get the connection status via the callback (in this case it would be an object path and not a fd of course) seem still valid. Especially with LE we have to handle the auto-connect cases gracefully.
>>
>
> I think this makes sense. What I'm thinking is that if you're in the
> server role, you expose a GattProfile that has all the GattService1
> objects as children of the tree and register with GattProfileManager.
> If you're in the central role, you only register yourself as a profile
> if you want to explicitly initiate a connection. If you don't care
> about the connection (e.g. you're just showing the battery level from
> a secondary Battery Service on already connected peripherals) then you
> can just work with the GattService1 objects already exported under the
> device. Otherwise you register yourself as a GattProfile and get
> updates on the connection.
>
>> And if we have a connection oriented channel assigned with a GATT profile, then that could be just reported via an extra callback. In that case it would be exactly like we do within ProfileManager.
>
> Yep, that makes sense.
>
>>
>> Regards
>>
>> Marcel
>>
>
> Cheers,
> Arman

And just following up on my previous response, we would then need
Device1.ConnectGatt and Device1.DisconnectGatt methods that parallel
ConnectProfile/DisconnectProfile? But then ConnectGatt wouldn't accept
a UUID but instead it would invoke the GattProfile callbacks based on
discovered services?

In that case, would the regular Device1.Connect also cause registered
GattProfile's callbacks to be invoked? (This is all while accessing
the remote GATT services).

Thanks,
Arman
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux