Where to get a COMPLETE list of FIT profile and message definitions?

I've written a tool to convert FIT files to GPX some years ago which does not work with the newest generation of Garmin devices.

The FIT files seem to contain the message type 327 (0x147) which is not seen on the latest list (Profile.xlsx in the FitSDKRelease_21.84.00 archive). So I am unsure if the list is incomplete or I forgot to implement something in my code (still investigating if anything has changed in newer FIT file definitions)...

..

  • when cycling with auto=pause, field 107 also becomes 0 when paused

    Turn gps chip off to spare battery

    Since it is auto-pause, it needs to keep gps on to detect when moving starts again.

  • OK,  great point, but no need to continuosly track gps fix, gps chips have a multitude of (power/state) modes

  • I have been frustrated that Garmin refuses to help 3rd party makers append info to FIT file summary, etc. via datafields 

    You can add info to the FIT File lap and session messages, see my data field Efficiency Factor There is a link to the source code.

  • Thank you for awesome FIT File Viewer, .i think i have contributed indirectly one or two fields already, namely record field 140, by asking in this forum  BenFit about it. And message type 147 sensor types in a exchange with RinseRepeat.

    Thanks for the update!

  • I notice you have updated the FIT File Viewer with my table.

    name wheel_size_manual calibration_factor wheel_size_auto product manufacturer use_for_speed use_for_distance connection_type sensor_type
    HR - Polar 2 indoor indoor antplus external_heart_rate
    Canyon Power 2096 50 117 antplus power
    HRM-Pro hrm_pro garmin off off antplus external_heart_rate
    Speed_SC 2096 2044 3 antplus speed
    Canyon Speed 2110 15 antplus speed
    29600 12954 antplus 8
    Máquina Remo 2096 7 antplus fitness_equipment_control
    Stryd-Duo 0 antplus 18
    Stryd-Duo 101.7 4660 always always antplus foot_pod
    607203 1570 antplus temperature

    Here is the updated version. I suggest you use the field names found in Garmin devices (under Settings > Sensors & Accessories > Add New) whenever possible. Otherwise, please use the SDK Device Type names.

    Improved and updated table for field 52:

    Ant+ Device_Type BLE DeviceTypes Sensor_Type
    1: 'Di2 Shifting' 8: 'Shimano Di2'
    11: 'PowerMeter' 2: "BikePower", 3: 'Power'
    16: "Control" 10: "Edge Remote"
    17: "FitnessEquipmentDevice" 7: "BikeTrainer", 12: "Smart Trainer"
    18: "BloodPressureMonitor" : "BloodPressureMonitor"
    19: "GeocacheTransmitter" : "GeocacheTransmitter"
    25: "EnvironmentSensor" 6: "Tempe"
    30: "RunningDynamicsPod" 18: "RD Pod"
    31: "MuscleOxygen" 17: "Muscle O2"
    34: "Shifting" 16: "Shifting"
    35: "Ligths" 13: "Ligths"
    40: ' Radar' 14: ' Radar'
    119: "WeightSensor" : "WeightSensor"
    120: "HeartRateSensor" 1: ''HeartRate', 0: "External Heart Rate"
    121: "BikeSpeedCadenceSensor" 3::"BikeSpeedCadence", 5: "Bike Speed Cadence"
    122: "BikeCadenceSensor" 5: "BikeCadence", 1: "Bike Cadence"
    123: "BikeSpeedSensor" 4: "BikeSpeed", 4: "Bike Speed"
    124: "StrideSpeedAndDistanceSensor" 6: "Footpod" 2: "Foot Pod"
    22: "Headrphones"

    Field 52 also maps BLE Devices.

  • Using FitFileViiwer

    And Runalyze fit file viwer for quick sequence view

    = TYPE=1 NAME=record NUMBER=20
    --- timestamp=1087023450=2024-06-11T06:57:30Z
    --- distance=136932=1369.32 m
    --- accumulated_power=97891=97891 watts
    --- enhanced_speed=3060=11.016 km/h
    --- enhanced_altitude=2580=16.0 m
    --- xxx140=2940=2940
    --- power=218=218 watts
    --- vertical_oscillation=950=95.0 mm
    --- stance_time=2530=253.0 ms
    --- vertical_ratio=882=8.82 %
    --- step_length=10760=1076.0 mm
    --- xxx87=0=0
    --- heart_rate=154=154 bpm
    --- cadence=86=86 rpm
    --- temperature=22=22 deg.C
    --- activity_type=1=running
    --- fractional_cadence=0=0.00 rpm
    --- xxx107=0=0
    --- xxx135=13=13
    --- xxx136=154=154
    --- xxx143=90=90
    ==
    = TYPE=2 NUMBER=233
    --- xxx2=4=4,12,0,40
    ==
    = TYPE=7 NAME=source NUMBER=22
    --- timestamp=1087023451=2024-06-11T06:57:31Z
    --- unknown0=3=heart_rate
    --- unknown1=2=device2
    --- unknown2=3=heart_rate
    --- unknown3=1=device1
    --- unknown4=4=speed
    --- unknown5=3=3
    --- unknown6=0=0
    --- xxx16=0=0
    ==
    = TYPE=1 NAME=record NUMBER=20
    --- timestamp=1087023451=2024-06-11T06:57:31Z
    --- position_lat=461739970=38.7025972 deg
    --- position_long=-112049164=-9.3918524 deg
    --- distance=136932=1369.32 m
    --- accumulated_power=98109=98109 watts
    --- enhanced_speed=3060=11.016 km/h
    --- enhanced_altitude=2580=16.0 m
    --- xxx140=2940=2940
    --- power=218=218 watts
    --- vertical_oscillation=931=93.1 mm
    --- stance_time=2500=250.0 ms
    --- vertical_ratio=872=8.72 %
    --- step_length=10670=1067.0 mm
    --- xxx87=0=0
    --- heart_rate=154=154 bpm
    --- cadence=86=86 rpm
    --- temperature=22=22 deg.C
    --- activity_type=1=running
    --- fractional_cadence=0=0.00 rpm
    --- xxx107=1=1
    --- xxx135=13=13
    --- xxx136=154=154
    --- xxx143=90=90
    ==
    = TYPE=2 NUMBER=233
    --- xxx2=0=0,0,0,48
    ==
    = TYPE=1 NAME=record NUMBER=20
    --- timestamp=1087023452=2024-06-11T06:57:32Z
    --- position_lat=461739589=38.7025653 deg
    --- position_long=-112049504=-9.3918809 deg
    --- distance=137350=1373.50 m
    --- accumulated_power=98329=98329 watts
    --- enhanced_speed=3060=11.016 km/h
    --- enhanced_altitude=2580=16.0 m
    --- xxx140=2940=2940
    --- power=220=220 watts
    --- vertical_oscillation=931=93.1 mm
    --- stance_time=2500=250.0 ms
    --- vertical_ratio=872=8.72 %
    --- step_length=10670=1067.0 mm
    --- xxx87=0=0
    --- heart_rate=155=155 bpm
    --- cadence=86=86 rpm
    --- temperature=22=22 deg.C
    --- activity_type=1=running
    --- fractional_cadence=0=0.00 rpm
    --- xxx107=1=1
    --- xxx135=8=8
    --- xxx136=155=155
    --- xxx143=90=90
    ==
    = TYPE=3 NAME=gps_metadata NUMBER=160
    --- enhanced_altitude=2539=7.8 m
    --- enhanced_speed=1186=4.270 km/h
    ==
    = TYPE=2 NUMBER=233
    --- xxx2=0=0,0,0,56
    ==
    = TYPE=1 NAME=record NUMBER=20
    --- timestamp=1087023453=2024-06-11T06:57:33Z
    --- position_lat=461739267=38.7025383 deg
    --- position_long=-112049728=-9.3918997 deg
    --- distance=137759=1377.59 m
    --- accumulated_power=98550=98550 watts
    --- enhanced_speed=3060=11.016 km/h
    --- enhanced_altitude=2580=16.0 m
    --- xxx140=2940=2940
    --- power=221=221 watts
    --- vertical_oscillation=931=93.1 mm
    --- stance_time=2500=250.0 ms
    --- vertical_ratio=872=8.72 %
    --- step_length=10670=1067.0 mm
    --- xxx87=0=0
    --- heart_rate=155=155 bpm
    --- cadence=85=85 rpm
    --- temperature=22=22 deg.C
    --- activity_type=1=running
    --- fractional_cadence=64=0.50 rpm
    --- xxx107=1=1
    --- xxx135=8=8
    --- xxx136=155=155
    --- xxx143=90=90
    ==
    = TYPE=3 NAME=gps_metadata NUMBER=160
    --- enhanced_altitude=2538=7.6 m
    --- enhanced_speed=4464=16.070 km/h
    ==
    = TYPE=2 NUMBER=233
    --- xxx2=0=0,0,0,64
    ==
    = TYPE=7 NAME=source NUMBER=22
    --- timestamp=1087023454=2024-06-11T06:57:34Z
    --- unknown0=2=device2
    --- unknown1=2=device2
    --- unknown2=3=heart_rate
    --- unknown3=1=device1
    --- unknown4=4=speed
    --- unknown5=3=3
    --- unknown6=0=0
    --- xxx16=0=0

    After three xxx107=1=1 in sequence, there is a speed distance source change to device2 (GNSS)

    Tested without external speed distance sensors. Also valid for Pauses.

  • It looks indeedlike filed 107 in the record message is a flag indicating GNSS availability, but what exactly it means is not clear to me. It shows up only in running/cycling/walking, but not in open water swimming/speed skating, i.e. the value is then always 0 even if there is GNSS signal.

  • For open water swimming, It doesn't make sense to constantly check for or flag a GPS/GNSS fix when you already know the result will be very noisy, sports watches can achieve a GPS fix during open water swimming, but the connection is very unstable. The main challenge is that the GPS signal is blocked every time the watch submerges, which happens frequently with each swimming stroke.

    For speed skating, please tell, you are a specialist in that sport.

  • For open water swimming, GNSS is quite OK, depending on your swim stroke. See also my response at forums.garmin.com/.../1994150