On 2014-08-22 13:29, Calle Gunnarsson wrote:
And implemented this for Cressi Leonardo, see the attached patches.
Great! Together with the tank pressure, this is one of the most often requested features. See libdivecomputer tickets #3 and #4 [1-2]. It's also one of the things I consider a mandatory feature for the next v0.5 version, which I hope to release around the end of September. So I'm very happy to see your patches.
[1] http://trac.libdivecomputer.org/ticket/3 [2] http://trac.libdivecomputer.org/ticket/4
For the new temperature and tank pressure feature, we'll need at least two new DC_FIELD_{TEMPERATURE,TANKPRESSURE} enum values and the corresponding dataformats. And that's where we can use some feedback from the application developers, because we need to get this right from the start (see the explanation at the end of this email). Or at least good enough to be useful :-)
Calle's patch uses a double for the temperature, which I think is fine. I remember that a while ago there was some discussion about defining the exact meaning of such temperature field. Keep in mind that not all dive computer store the same kind of temperature value(s). Some may record the minimum or maximum temperature, the temperature at maximum depth, etc. Others may even record several values. I think trying to support all these variants will quickly end up in a mess, so I'm fine to provide just a single value without attaching any particular meaning. Of course the interpretation will always be fixed within a particular backend, but temperature values from different backends may have a slightly different interpretation.
For the tank pressure, we certainly need support for multiple tanks, so my proposal is to add DC_FIELD_TANKPRESSURE along with a DC_FIELD_TANKPRESSURE_COUNT. That's consistent with what we already have for the gasmixes. For the corresponding data structure, I propose this:
typedef struct dc_tankpressure_t { double begin; double end; } dc_tankpressure_t;
That would be consistent with the data that is delivered in the samples (e.g. a pressure value with a tank id). The begin/end fields would simply correspond to the value of the first/last sample. So no attempt to add tank size (which not many dive computers support) or anything else.
Comments are welcome!
Note that after the v0.5 release, I'm planning to introduce some architectural changes to fix some long standing design flaws and make the library easier to use. Unfortunately those changes will significantly break backwards compatibility, and therefore I expect applications will (have to) stick to the stable branch for a long while. Because on the stable branch only backwards compatible changes are acceptable, the data format of these will essentially be fixed. So we better do get this right while we can.
Jef