gps-wizard

FIT - Flexible and Interoperable Data Transfer

Introduction

The Flexible and Interoperable Data Transfer (FIT) protocol is designed specifically for the storing and sharing of data that originates from sport, fitness and health devices. The FIT protocol defines a set of data storage templates (FIT messages) that can be used to store information such as user profiles, activity data, courses, and workouts. It is specifically designed to be compact, interoperable and extensible.

Files from different manufacturer (and even for some different products) are all slightly different and this can cause problems for software trying to load the FIT file. This document provides a summary of these differences in the data frames.

The official developer page is quite a useful resource for anyone requiring a detailed understanding of the FIT protocol.

Data Frames

There are a couple of useful data frames, providing device information:

Track data is is stored in “record” data frames:

Note: The enhanced_altitude and enhanced_speed are just 32-bit versions of altitude and speed which are 16-bit, thus capable of storing larger numbers.

device_info

The device information frames appear to be standard for all devices from a particular brand.

Garmin files always contain many device_info frames but the ones that are relevant all contain a serial number.

  COROS Garmin
serial_number - Yes
manufacturer 294 1
product_name COROS APEX Pro -
garmin_product - Yes
software_version - Yes

Notes:

file_id

The file identification frame appears to be standard for all devices from a particular brand.

The table below provides a single file_id example for each brand:

  COROS Garmin Suunto Timex
  e.g. APEX Pro e.g. Fenix 5 e.g. Ambit3 e.g. Ironman
serial_number - 3949903342 - 4294967295
manufacturer 294 1 23 16
product 841 - 23 87
product_name COROS APEX Pro - Suunto Ambit3 Sport Timex Ironman GPS
garmin_product - 2697 - -

Notes:

record

The record frames are the most important content of the FIT files.

Each brand (and sometimes model) will contain slightly different data which is illustrated in the table below:

  COROS Garmin Garmin Suunto Timex
  APEX Pro
VERTIX
VERTIX 2
Fenix 3
Fenix 5
Vivoactive 3
Fenix 6
Fenix 7
Ambit3 Ironman
timestamp Yes Yes Yes Yes Yes
position_lat Yes Yes Yes Yes Yes
position_long Yes Yes Yes Yes Yes
altitude - Yes - Yes 2 Yes
enhanced_altitude 0 - Yes Yes Yes 2 Yes
distance Yes Yes Yes Yes 2 Yes 3
speed Yes Yes - Yes 2 Yes 3
enhanced_speed 0 Yes Yes Yes Yes 2 Yes 3
vertical_speed - - - Yes 2 -
Sat Yes 1 - - - -
hdop Yes 1 - - - -
cog Yes 1 - - - -

0 The enhanced_altitude and enhanced_speed are just 32-bit versions of altitude and speed which are 16-bit, thus capable of storing larger numbers.

1 The APEX Pro, VERTIX and VERTIX 2 use “developer fields” to record Satellites, HDOP and COG.

2 The Ambit 3 will sometimes record individual frames containing just timestamp, position_lat and position_long.

3 The Ironman records multiple frames with the same timestamp. These frames must therefore be combined for subsequent analysis.