subsurface/uemis.h
Dirk Hohndel 4c4dff7683 Convert Uemis downloader to directly create dives
The initial downloader reused the XML parsing of SDA files that was
implemented early in order to support the information extracted from the
SDA with the java applet. But creating this intermediary XML file and
handing it off to the XML import function always seemed like an ugly way
to do things. This became even more obvious when adding more features to
the Uemis downloader.

This commit completely changes the downloader to instead create dives and
record them directly.

This also adds support for divespots (which are stored in a seperate
database that needs to be queried after the divelog and dive entries have
been combined - the Uemis firmware clearly was written by monkeys on
crack - oh wait: I'm trusting these same people to get the deco right?).

This commit leaves the SDA import capability in the XML parser intact.
I'll remove that later. Because of this it actually adds a few lines of
code, but the overall change will be a substantial code deletion.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-30 13:41:58 -07:00

45 lines
1.4 KiB
C

/*
* defines and prototypes for the uemis Zurich SDA file parser
*/
#ifndef UEMIS_H
#define UEMIS_H
#include <stdint.h>
void uemis_parse_divelog_binary(char *base64, void *divep);
int uemis_get_weight_unit(int diveid);
void uemis_mark_divelocation(int diveid, int divespot, char **location, double *longitude, double *latitude);
void uemis_set_divelocation(int divespot, char *text, double longitude, double latitude);
void decode(uint8_t *in, uint8_t *out, int len);
typedef struct {
uint16_t dive_time;
uint16_t water_pressure; // (in cbar)
uint16_t dive_temperature; // (in dC)
uint8_t ascent_speed; // (units unclear)
uint8_t work_fact;
uint8_t cold_fact;
uint8_t bubble_fact;
uint16_t ascent_time;
uint16_t ascent_time_opt;
uint16_t p_amb_tol;
uint16_t satt;
uint16_t hold_depth;
uint16_t hold_time;
uint8_t active_tank;
// bloody glib, when compiled for Windows, forces the whole program to use
// the Windows packing rules. So to avoid problems on Windows (and since
// only tank_pressure is currently used and that exactly once) I give in and
// make this silly low byte / high byte 8bit entries
uint8_t tank_pressure_low; // (in cbar)
uint8_t tank_pressure_high;
uint8_t consumption_low; // (units unclear)
uint8_t consumption_high;
uint8_t rgt; // (remaining gas time in minutes)
uint8_t cns;
uint8_t flags[8];
} __attribute((packed)) uemis_sample_t;
#endif /* DIVE_H */