Add 'location_t' data structure

Instead of having people treat latitude and longitude as separate
things, just add a 'location_t' data structure that contains both.

Almost all cases want to always act on them together.

This is really just prep-work for adding a few more locations that we
track: I want to add a entry/exit location to each dive (independent of
the dive site) because of how the Garmin Descent gives us the
information (and hopefully, some day, other dive computers too).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Linus Torvalds 2018-10-20 14:12:15 -04:00 committed by Lubomir I. Ivanov
parent c986940630
commit 28e3413ff6
40 changed files with 251 additions and 264 deletions

View file

@ -569,7 +569,7 @@ static void set_dc_serial(struct divecomputer *dc, const char *serial)
dc->deviceid = calculate_string_hash(serial);
}
extern degrees_t parse_degrees(char *buf, char **end);
extern void parse_location(char *, location_t *);
static void parse_string_field(struct dive *dive, dc_field_string_t *str)
{
@ -591,14 +591,12 @@ static void parse_string_field(struct dive *dive, dc_field_string_t *str)
/* GPS data? */
if (!strncmp(str->desc, "GPS", 3)) {
char *line = (char *) str->value;
degrees_t latitude, longitude;
location_t location;
latitude = parse_degrees(line, &line);
if (*line == ',') line++;
longitude = parse_degrees(line, &line);
parse_location(line, &location);
if (latitude.udeg && longitude.udeg)
dive->dive_site_uuid = create_dive_site_with_gps(str->value, latitude, longitude, time(NULL));
if (location.lat.udeg && location.lon.udeg)
dive->dive_site_uuid = create_dive_site_with_gps(str->value, &location, time(NULL));
}
}
#endif