gps-details

Garmin FIT

Overview

The FIT format is the most feature-rich format that can be exported from Garmin Connect.

This document describes some of the items which are currently available, and possibilities for the future (e.g. accuracy estimates).

Metadata

Sport

Only a few of the sports in Toybox.Activity are suitable for speed sailing apps.

Name Value
SPORT_GENERIC 0
SPORT_WINDSURFING 43
SPORT_KITESURFING 44

Note: The sport used for the activity recording is automatically saved to the FIT and it will persist, even if the activity type is subsequently changed in Garmin Connect.

File Id

The file ID includes the basic watch information.

Field Value Description
manufacturer 1 Garmin
product 4375 Fenix 7 Pro
serial number 3500001234  

Device Info

The firmware and GNSS version could prove to useful in the future, should any bad firmware be released.

Name Criteria
Firmware version device_type is empty, or device_index == creator
GNSS version device_type == 0

Developer Data Id

The application details from the developer_data_id record can be used to identify the application downloaded from the Connect IQ Store, but not side-loaded betas.

Name Example Descrption
application_id 9567700b-6587-44be-9708-879bfc844791 UID for application on the Connect IQ Store
application_version 120 Version number

Session

Applications such as APPro may record some human-readable information that relates to the session.

Name Example
craft wingfoil
app_name APPro
app_ver 4.07
gnss_config 6 = all systems + multi-band

Activity Data

Speed + Altitude

FIT files contain a field called speed which is a 16-bit integer. This represents the speed over ground (SOG) in mm/s, so the max speed that can be represented is 65.535 m/s. There is an enhanced_speed field which is a 32-bit integer, which has a limit of slightly over 4 billion mm/s. There is no difference between the two fields when windsurfing. There are no change to filters, or anything special about enhanced_speed.

Likewise the regular altitude field is 16-bits and limited to 6553.5 m (6.5 km). This would be too small for people like Felix Baumgartner who jumped from a balloon at 39 km, but enhanced_altitude is 32-bits and overcomes the limits of the 16-bit altitude.

Fix Quality

Connect IQ apps such as APPro are able to check the GNSS fix quality and record it in the FIT file, accompanying the latitude + longitude + speed data.

Name Value Description Sats HDOP
QUALITY_NOT_AVAILABLE 0 GPS is not available    
QUALITY_LAST_KNOWN 1 The Location is based on the last known GPS fix.    
QUALITY_POOR 2 The Location was calculated with a poor GPS fix. Only a 2-D GPS fix is available, likely due to a limited number of tracked satellites. 3  
QUALITY_USABLE 3 The Location was calculated with a usable GPS fix. A 3-D GPS fix is available, with marginal HDOP (horizontal dilution of precision) >= 4 > 3.0
QUALITY_GOOD 4 The Location was calculated with a good GPS fix. A 3-D GPS fix is available, with good-to-excellent HDOP (horizontal dilution of precision). >= 4 <= 3.0

GPS Accuracy

Accuracy estimates are available in the Android Location class and Apple CLLocation class. These estimates relate to the position and speed accuracy at the 68th percentile confidence level. Full details of the accuracy estimates provided by Android and Apple can be found on a page detailing both APIs.

The Airoha AG3335M chipset is capable of providing these metrics but they are not currently exposed via the Garmin API. It is highly desirable for the accuracy estimates from the Airoha chipset to be exposed via the Garmin Toybox.Position module in a future API.

I was digging into Garmin’s FIT SDK recently and discovered that a field called GPS accuracy is already present. The units are meters, so it will almost certainly be positional accuracy (aka hAcc). I know from my previous investigations that hAcc issues are a decent proxy for sAcc issues. This applies to all of the GNSS chipsets that I’ve studied and tested; e.g. SiRF, UBX, Broadcom, Qualcomm, Samsung.

The next question is whether Garmin have some way that we can force watches to record the GPS accuracy (aka hAcc) in FIT files. Someone in Garmin seems to have developed this capability already, based on what I can see in their FIT SDK. However, I can find nothing related in the Connect IQ developer documentation. Perhaps it is something that can be achieved with some kind of debug build?

GPS Events

There are some undocumented records called GPS events, but I have decoded and documented the content.

Timestamp Correlation

This looks interesting and may relate to the time offsets, but I have yet to investigate.

Device Status

This includes the battery level during the session and may be interesting, should power saving kick in, or suchlike.