Extend SAMPLE_EVENT_GASCHANGE2 to have cylinder index in 'flags' field

A value of zero (which is the normal legacy one) remains "unknown", but
the divecomputer backend can now give both gasmix and cylinder number
this way.

Currently only the EON Steel backend does that, but it should be easy
enough to extend others too.

Also, fix the user-visible cylinder numbering in the cylinder change
tooltip to use a human-friendlier one-based numbering (ie first cylinder
is "cyl 1", not "cyl 0")

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Linus Torvalds 2015-01-03 17:21:05 -08:00 committed by Dirk Hohndel
parent 92733049a7
commit 08d2ceb66b
2 changed files with 7 additions and 2 deletions

7
dive.c
View file

@ -57,6 +57,7 @@ int event_gasmix_redundant(struct event *ev)
struct event *add_event(struct divecomputer *dc, int time, int type, int flags, int value, const char *name) struct event *add_event(struct divecomputer *dc, int time, int type, int flags, int value, const char *name)
{ {
int gas_index = -1;
struct event *ev, **p; struct event *ev, **p;
unsigned int size, len = strlen(name); unsigned int size, len = strlen(name);
@ -79,11 +80,15 @@ struct event *add_event(struct divecomputer *dc, int time, int type, int flags,
case SAMPLE_EVENT_GASCHANGE2: case SAMPLE_EVENT_GASCHANGE2:
/* High 16 bits are He percentage */ /* High 16 bits are He percentage */
ev->gas.mix.he.permille = (value >> 16) * 10; ev->gas.mix.he.permille = (value >> 16) * 10;
/* Extension to the GASCHANGE2 format: cylinder index in 'flags' */
if (flags > 0 && flags <= MAX_CYLINDERS)
gas_index = flags-1;
/* Fallthrough */ /* Fallthrough */
case SAMPLE_EVENT_GASCHANGE: case SAMPLE_EVENT_GASCHANGE:
/* Low 16 bits are O2 percentage */ /* Low 16 bits are O2 percentage */
ev->gas.mix.o2.permille = (value & 0xffff) * 10; ev->gas.mix.o2.permille = (value & 0xffff) * 10;
ev->gas.index = -1; ev->gas.index = gas_index;
break; break;
} }

View file

@ -106,7 +106,7 @@ void DiveEventItem::setupToolTipString()
/* Do we have an explicit cylinder index? Show it. */ /* Do we have an explicit cylinder index? Show it. */
if (internalEvent->gas.index >= 0) if (internalEvent->gas.index >= 0)
name += QString(" (cyl %1)").arg(internalEvent->gas.index); name += QString(" (cyl %1)").arg(internalEvent->gas.index+1);
} else if (type == SAMPLE_EVENT_PO2 && name == "SP change") { } else if (type == SAMPLE_EVENT_PO2 && name == "SP change") {
name += QString(":%1").arg((double)value / 1000); name += QString(":%1").arg((double)value / 1000);
} else { } else {