Thread (21 messages) flat view 21 messages, 4 authors, 2011-06-27

Re: [RFC] Health Thermometer Profile API

From: mike tsai <hidden>
Date: 2011-06-23 15:27:38

Hi Elvis,

On Thu, Jun 23, 2011 at 7:08 AM, Elvis Pfutzenreuter [off-list ref] wrote:
On 22 Jun 2011, at 18:44 , mike tsai wrote:
quoted
Hi,

On Wed, Jun 22, 2011 at 6:50 AM, Elvis Pfutzenreuter [off-list ref] wrote:
quoted
quoted
quoted
quoted
(cut)
True, I did not remember that those were properties. They would have
to go, otherwise it is too easy for an app to "break" another, by
disabling notifications.

A pair of Enable/DisableIntermediate methods taking an agent as
parameter would be more adequate.

IMHO there would not be a need of such
methods for final measure, because the final measurement (which is
the only one guaranteed to be precise) is the final objective, there
is no point in registering an agent and not wanting a final measurement.
They werent in this RFC. I only see a problem now, for example if an
agent wants to get only a single *final* measure without setting an
interval and after a while the same agents decides that it wants to
get a new single measure without setting an interval for periodic
measurements. I don't see how it could do this with current API (where
get final measure methods are not present).
For that, having temperature as one of the properties would be great
(allowing apps unable/unwilling to set up an agent to read it).

Or setting a convention that, if you register an agent, a GATT read is
fired and you get a measurement right after. (It seems that you said
something in that direction below.) Disvantage is that registering
and unregistering agents just to get 1 measurement would cycle
GATT indications needlessly.
quoted
We could think that an agent is only registered during the time it is
interested in being notified about final measures, after that, it
should unregister itself from the service. In that scenario we can set
notify property for final measures each time an agent is registered
(if not periodic interval is already set).
In terms of minimizing energy consumption and API methods, the 'best'
would be:

a) intermediate and final temperatures being properties (intermediate
  property is there only if thermometer supports it).

b) There are GATT reads on them when some app reads the property;
[MT] Final temperature can only be indicated and intermediate
temperature can only be notified. Client can't read them from server,
according to the Thermometer profile spec.
Glup, that is true :\

In other profiles people are taking care of making notifiable
characteristics readable as well, but it slipped for thermometer.

In this case, the only reason one could argue using properties for
temperatures would be to reuse the PropertyChanged for notifications
and indications. BlueZ could store the last temperature locally,
should some app wants it immediately. (The special IEEE FLOAT values
take care of the case where a measurement hasn't been taken yet.)
quoted
quoted
c) those properties generate PropertyChanged signals only when
notifications are enabled for one or another, or there was a GATT read;

d) applications signal interest in notifications by registering
an agent (or by some other way). Registering an agent automatically
means interest in final temp notifications, an additional method
enables/disables interest in intermediate temp notifications.
[MT] Once indication or notification is enabled, client has to be
ready to receive notification or indication as soon as the physical
link is established with the temperature sensor.
Ok, but we can disable it when no agent is active, right?
Actually, from "Health" thermometer profile point of view, the desire
processing should be like this.

Application registers with profile (or agent?)
Application decides to connect to thermometer, bond and enable
indication/notification(Profile shall return OK immediately if device
was bonded before)
Profile should add thermometer device into white list
Application disconnects thermometer
Application ends (user exits the application)

User press a button in Health thermometer sensor to measure the temperature
Thermometer starts directed connectable advertising, then indirected
connectable advertising
Profile does white list selective connection and connects to thermometer
thermometer sends intermediate temperature (if enabled) notification
Profile invokes application(s) and passes the intermediate temperature
Application processes the intermediate temperature (display as number
or draw a graphic)
Profile sends final measurement to application
User sees the data and ends the application

So, since the current architecture has thermometer profile as part of
bluetoothd, then it shall remember the registered application(s) and
invoke it(or them) automatically.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help