UDDF export: save events occurring between samples

UDDF export saved events only if they occurred at exactly same time as a
profile sample. This patch will include events between samples as well.
This assumes that profile samples are recorded in even intervals.

Fixes #385

Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Miika Turkia 2013-12-25 17:43:10 +02:00 committed by Dirk Hohndel
parent c8e4ce9b81
commit 57f85a773a

View file

@ -185,6 +185,27 @@
</xsl:if>
</informationbeforedive>
<!-- We get sample interval from the time between first and second
sample to include all events in the existing samples.
-->
<xsl:variable name="timefirst">
<xsl:call-template name="time2sec">
<xsl:with-param name="time">
<xsl:value-of select="./divecomputer[1]/sample[1]/@time"/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="timesecond">
<xsl:call-template name="time2sec">
<xsl:with-param name="time">
<xsl:value-of select="./divecomputer[1]/sample[2]/@time"/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="delta">
<xsl:value-of select="$timesecond - $timefirst"/>
</xsl:variable>
<samples>
<xsl:for-each select="./divecomputer[1]/sample">
<waypoint>
@ -214,26 +235,42 @@
to the one in UDDF specification.
-->
<xsl:variable name="time">
<xsl:call-template name="time2sec">
<xsl:with-param name="time">
<xsl:value-of select="./@time"/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:if test="preceding-sibling::event/@time = $time">
<xsl:if test="preceding-sibling::event[@time=$time and @name='gaschange']/@name">
<!-- Event is included in waypoint when:
sample_time - $delta < event_time <= sample_time
This should include all the events that occurred
between the samples. This also introduces inaccuracy in
the timestamp of events, but it is either that or a
crafted waypoint, with inaccurate depth.
-->
<xsl:if test="preceding-sibling::event[substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&lt;=$time and substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&gt;($time - $delta) and @name='gaschange']/@name">
<!-- Gas change is a reference to the gases section, as
the gases index was pure o2 value, we can directly
use Subsurfaces reference here.
-->
<xsl:for-each select="preceding-sibling::event[substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&lt;=$time and substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&gt;($time - $delta) and @name='gaschange']/@value">
<switchmix>
<xsl:attribute name="ref">
<xsl:value-of select="preceding-sibling::event[@time=$time and @name='gaschange']/@value"/>
<xsl:value-of select="."/>
</xsl:attribute>
</switchmix>
</xsl:for-each>
</xsl:if>
<xsl:if test="preceding-sibling::event[@time=$time and @name='heading']/@name">
<xsl:if test="preceding-sibling::event[substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&lt;=$time and substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&gt;($time - $delta) and @name='heading']/@name">
<xsl:for-each select="preceding-sibling::event[substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&lt;=$time and substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&gt;($time - $delta) and @name='heading']/@value">
<heading>
<xsl:value-of select="preceding-sibling::event[@time=$time and @name='heading']/@value"/>
<xsl:value-of select="."/>
</heading>
</xsl:for-each>
</xsl:if>
<!-- We'll just print the alarm text from our event name
@ -241,13 +278,12 @@
specification but the rest is not recognized and
there is no equivalent available.
-->
<xsl:if test="preceding-sibling::event[@time=$time and not(@name='heading' or @name='gaschange')]/@name">
<xsl:if test="preceding-sibling::event[substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&lt;=$time and substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&gt;($time - $delta) and not(@name='heading' or @name='gaschange')]/@name">
<xsl:for-each select="preceding-sibling::event[substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&lt;=$time and substring-before(@time, ':') * 60 + substring-before(substring-after(@time, ':'), ' ')&gt;($time - $delta) and not(@name='heading' or @name='gaschange')]/@name">
<alarm>
<xsl:for-each select="preceding-sibling::event[@time=$time and not(@name='heading' or @name='gaschange')]/@name">
<xsl:value-of select="."/>
</xsl:for-each>
</alarm>
</xsl:if>
</xsl:for-each>
</xsl:if>
</waypoint>
</xsl:for-each>