Any information on RunningTrack description fit file?

Merry Christmas to everyone here!

Is there any information on message format for track run mode track description fit file (ones from RunningTrack folder on 945, Fenix etc)? Current SDK is silent about it.

Looks like Garmin approximate track with two strait lines and two semi-ellipses and the message contains:

  • track center latitude (semicircles)
  • track center longitude (semicircles)
  • first semi-axis (aka half the distance between strait lines, cm) track altitude
  • ???
  • second semi-axis (cm)
  • strait line length (cm)
  • orientation angle (deg)
  • 0 - ?
  • 1 - ?

But it seems that the model is incomplete (as you can see, the lines are not identical), so I definitely missed something.  Any suggestions?

  • Hi, I don't really have an answer, but I wonder if you could share an example fit file from a track run to see what information is in it? I don't have a track around me... 

  • Sure.

    This file is quite small.

    Type,Local Number,Message,Field 1,Value 1,Units 1,Field 2,Value 2,Units 2,Field 3,Value 3,Units 3,Field 4,Value 4,Units 4,Field 5,Value 5,Units 5,Field 6,Value 6,Units 6,Field 7,Value 7,Units 7,Field 8,Value 8,Units 8,Field 9,Value 9,Units 9,Field 10,Value 10,Units 10,
    Definition,0,file_id,serial_number,1,,time_created,1,,unknown,1,,manufacturer,1,,product,1,,number,1,,type,1,,
    Data,0,file_id,serial_number,"3306508546",,time_created,"974196670",,manufacturer,"1",,garmin_product,"3113",,type,"60",,,,,,,,
    Definition,1,file_creator,unknown,20,,software_version,1,,hardware_version,1,,,,,,,,,,,,,,
    Data,1,file_creator,software_version,"540",,,,,,,,,,,,,,,,,,,,
    Definition,2,unknown,unknown,32,,unknown,1,,unknown,1,,unknown,1,,unknown,1,,unknown,1,,unknown,1,,unknown,1,,unknown,1,,unknown,1,,
    Data,2,unknown,unknown,"663958825",,unknown,"447325971",,unknown,"3657",,unknown,"104",,unknown,"3618",,unknown,"8821",,unknown,"52",,unknown,"0",,unknown,"1",,,,,

    Only the last two lines are Definition Message and Data Message related to track itself.

  • EDIT: Sorry I can't read... You've already mentioned what I posted below. :) Anyway, the original fit-file may still help. So we want the formula for what's presumably track/ellipsoid parameters derived from it's center coordinate?

    EDIT2: Are the differences due to something as boring as GPS inaccuracy on top of the "perfect circle" model, perhaps?

    It's somewhat easier to dissect if you post the original fit-file, not the csv-result. Is that possible? Line 7 may contain a coordinate in semicircles, which somewhat fits with a location in Moscow if one of the 3000-ish values on the same line correspond to altitude (roughly 200m above sea level).

  • Yep, line 7 contain latitude and longitude of the point in the middle of the track :) Can't collect information on other tracks now -- it's winter in Moscow, so running tracks are covered with snow and ice :)

    Interesting idea about altitude, this track placed between 200 and 210 m, closer to 200.

    I don't know, is it possible to attach files to message, so original FIT file is here: http://wintermute.ru/tmp/AB6D3757.fit

  • Sounds like it's time to bring out the skates! :)

    That is indeed a tiny fit-file! The only additional info I gathered from a quick look is that the data message on line 7 has the global id 335. The 0 and 1 are enums so some value from some list we don't have. :P No ellipsoid formula yet.

    Would be nice to make a bit of official documentation containing undocumented message types etc.

    Here's what I get, a "debug" print I do, including definitions, and another more straightforward print out of te data. Nothing new yet, I'm afraid - though I'm interested in finding the formula!

    [14/177] HEADER: 0b01000000
      DEF U8 [64, 0, 0, 0, 0, 7, 3, 4, 140, 4, 4, 134, 7, 4, 134, 1, 2, 132, 2, 2, 132, 5, 2, 132, 0, 1, 0]
      DEV U8 None
      PARSED DefinitionMessage {
        header: 64,
        reserved: 0,
        architecture: 0,
        global: 0,
        definition_fields: [
            DefinitionField {
                field_definition_number: 3,
                size: 4,
                base_type: 140,
                field_name: "serial_number",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 4,
                size: 4,
                base_type: 134,
                field_name: "time_created",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 7,
                size: 4,
                base_type: 134,
                field_name: "UNDEFINED_FIELD_7",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 1,
                size: 2,
                base_type: 132,
                field_name: "manufacturer",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 2,
                size: 2,
                base_type: 132,
                field_name: "product",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 5,
                size: 2,
                base_type: 132,
                field_name: "number",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 0,
                size: 1,
                base_type: 0,
                field_name: "type",
                units: None,
                scale: None,
                offset: None,
            },
        ],
        developer_fields: [],
        data_message_length: 20,
    }
    [41/177] HEADER: 0b00000000
      DAT U8 [0, 2, 81, 21, 197, 190, 15, 17, 58, 255, 255, 255, 255, 1, 0, 41, 12, 255, 255, 60]
      PARSED DataMessage {
        header: 0,
        global: 0,
        description: "file_id",
        fields: [
            DataField {
                field_definition_number: 3,
                description: "serial_number",
                units: None,
                data: UINT32Z(
                    [
                        3306508546,
                    ],
                ),
            },
            DataField {
                field_definition_number: 4,
                description: "time_created",
                units: None,
                data: UINT32(
                    [
                        974196670,
                    ],
                ),
            },
            DataField {
                field_definition_number: 7,
                description: "UNDEFINED_FIELD_7",
                units: None,
                data: UINT32(
                    [
                        4294967295,
                    ],
                ),
            },
            DataField {
                field_definition_number: 1,
                description: "manufacturer",
                units: None,
                data: UINT16(
                    [
                        1,
                    ],
                ),
            },
            DataField {
                field_definition_number: 2,
                description: "product",
                units: None,
                data: UINT16(
                    [
                        3113,
                    ],
                ),
            },
            DataField {
                field_definition_number: 5,
                description: "number",
                units: None,
                data: UINT16(
                    [
                        65535,
                    ],
                ),
            },
            DataField {
                field_definition_number: 0,
                description: "type",
                units: None,
                data: ENUM(
                    [
                        60,
                    ],
                ),
            },
        ],
        dev_fields: [],
    }
    [61/177] HEADER: 0b01000001
      DEF U8 [65, 0, 0, 49, 0, 3, 2, 20, 7, 0, 2, 132, 1, 1, 2]
      DEV U8 None
      PARSED DefinitionMessage {
        header: 65,
        reserved: 0,
        architecture: 0,
        global: 49,
        definition_fields: [
            DefinitionField {
                field_definition_number: 2,
                size: 20,
                base_type: 7,
                field_name: "UNDEFINED_FIELD_2",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 0,
                size: 2,
                base_type: 132,
                field_name: "software_version",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 1,
                size: 1,
                base_type: 2,
                field_name: "hardware_version",
                units: None,
                scale: None,
                offset: None,
            },
        ],
        developer_fields: [],
        data_message_length: 24,
    }
    [76/177] HEADER: 0b00000001
      DAT U8 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 2, 255]
      PARSED DataMessage {
        header: 1,
        global: 49,
        description: "file_creator",
        fields: [
            DataField {
                field_definition_number: 2,
                description: "UNDEFINED_FIELD_2",
                units: None,
                data: STRING(
                    "",
                ),
            },
            DataField {
                field_definition_number: 0,
                description: "software_version",
                units: None,
                data: UINT16(
                    [
                        540,
                    ],
                ),
            },
            DataField {
                field_definition_number: 1,
                description: "hardware_version",
                units: None,
                data: UINT8(
                    [
                        255,
                    ],
                ),
            },
        ],
        dev_fields: [],
    }
    [100/177] HEADER: 0b01000010
      DEF U8 [66, 0, 0, 79, 1, 10, 1, 32, 7, 3, 4, 133, 4, 4, 133, 10, 4, 134, 0, 2, 132, 5, 2, 131, 6, 2, 132, 9, 2, 132, 2, 1, 0, 8, 1, 0]
      DEV U8 None
      PARSED DefinitionMessage {
        header: 66,
        reserved: 0,
        architecture: 0,
        global: 335,
        definition_fields: [
            DefinitionField {
                field_definition_number: 1,
                size: 32,
                base_type: 7,
                field_name: "UNDEFINED_FIELD_1",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 3,
                size: 4,
                base_type: 133,
                field_name: "UNDEFINED_FIELD_3",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 4,
                size: 4,
                base_type: 133,
                field_name: "UNDEFINED_FIELD_4",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 10,
                size: 4,
                base_type: 134,
                field_name: "UNDEFINED_FIELD_10",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 0,
                size: 2,
                base_type: 132,
                field_name: "UNDEFINED_FIELD_0",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 5,
                size: 2,
                base_type: 131,
                field_name: "UNDEFINED_FIELD_5",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 6,
                size: 2,
                base_type: 132,
                field_name: "UNDEFINED_FIELD_6",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 9,
                size: 2,
                base_type: 132,
                field_name: "UNDEFINED_FIELD_9",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 2,
                size: 1,
                base_type: 0,
                field_name: "UNDEFINED_FIELD_2",
                units: None,
                scale: None,
                offset: None,
            },
            DefinitionField {
                field_definition_number: 8,
                size: 1,
                base_type: 0,
                field_name: "UNDEFINED_FIELD_8",
                units: None,
                scale: None,
                offset: None,
            },
        ],
        developer_fields: [],
        data_message_length: 55,
    }
    [136/177] HEADER: 0b00000010
      DAT U8 [2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 53, 147, 39, 19, 167, 169, 26, 73, 14, 0, 0, 104, 0, 34, 14, 117, 34, 52, 0, 0, 1]
      PARSED DataMessage {
        header: 2,
        global: 335,
        description: "UNDEFINED_MESSAGE_TYPE_335",
        fields: [
            DataField {
                field_definition_number: 1,
                description: "UNDEFINED_FIELD_1",
                units: None,
                data: STRING(
                    "",
                ),
            },
            DataField {
                field_definition_number: 3,
                description: "UNDEFINED_FIELD_3",
                units: None,
                data: SINT32(
                    [
                        663958825,
                    ],
                ),
            },
            DataField {
                field_definition_number: 4,
                description: "UNDEFINED_FIELD_4",
                units: None,
                data: SINT32(
                    [
                        447325971,
                    ],
                ),
            },
            DataField {
                field_definition_number: 10,
                description: "UNDEFINED_FIELD_10",
                units: None,
                data: UINT32(
                    [
                        3657,
                    ],
                ),
            },
            DataField {
                field_definition_number: 0,
                description: "UNDEFINED_FIELD_0",
                units: None,
                data: UINT16(
                    [
                        104,
                    ],
                ),
            },
            DataField {
                field_definition_number: 5,
                description: "UNDEFINED_FIELD_5",
                units: None,
                data: SINT16(
                    [
                        3618,
                    ],
                ),
            },
            DataField {
                field_definition_number: 6,
                description: "UNDEFINED_FIELD_6",
                units: None,
                data: UINT16(
                    [
                        8821,
                    ],
                ),
            },
            DataField {
                field_definition_number: 9,
                description: "UNDEFINED_FIELD_9",
                units: None,
                data: UINT16(
                    [
                        52,
                    ],
                ),
            },
            DataField {
                field_definition_number: 2,
                description: "UNDEFINED_FIELD_2",
                units: None,
                data: ENUM(
                    [
                        0,
                    ],
                ),
            },
            DataField {
                field_definition_number: 8,
                description: "UNDEFINED_FIELD_8",
                units: None,
                data: ENUM(
                    [
                        1,
                    ],
                ),
            },
        ],
        dev_fields: [],
    }
    FINAL INDEX: 191

    [1] Global ID: 335 | Message type: UNDEFINED_MESSAGE_TYPE_335 | Header: 2/0b00000010
        id:   1 UNDEFINED_FIELD_1     : STRING("") 
        id:   3 UNDEFINED_FIELD_3     : SINT32([663958825]) 
        id:   4 UNDEFINED_FIELD_4     : SINT32([447325971]) 
        id:  10 UNDEFINED_FIELD_10    : UINT32([3657]) 
        id:   0 UNDEFINED_FIELD_0     : UINT16([104]) 
        id:   5 UNDEFINED_FIELD_5     : SINT16([3618]) 
        id:   6 UNDEFINED_FIELD_6     : UINT16([8821]) 
        id:   9 UNDEFINED_FIELD_9     : UINT16([52]) 
        id:   2 UNDEFINED_FIELD_2     : ENUM([0]) ENUM_NOT_IMPLEMENTED_FOR_GLOBAL_ID_335
        id:   8 UNDEFINED_FIELD_8     : ENUM([1]) ENUM_NOT_IMPLEMENTED_FOR_GLOBAL_ID_335
    [2] Global ID: 49 | Message type: file_creator | Header: 1/0b00000001
        id:   2 UNDEFINED_FIELD_2     : STRING("") 
        id:   0 software_version      : UINT16([540]) 
        id:   1 hardware_version      : UINT8([255]) 
    [3] Global ID: 0 | Message type: file_id | Header: 0/0b00000000
        id:   3 serial_number         : UINT32Z([3306508546]) 
        id:   4 time_created          : UINT32([974196670]) 
        id:   7 UNDEFINED_FIELD_7     : UINT32([4294967295]) 
        id:   1 manufacturer          : UINT16([1]) 
        id:   2 product               : UINT16([3113]) 
        id:   5 number                : UINT16([65535]) 
        id:   0 type                  : ENUM([60]) ENUM_NOT_IMPLEMENTED_FOR_GLOBAL_ID_0
    
    SUMMARY
    ---------------------------------------------------
    Header
    
          size: 14
      protocol: 16
       profile: 2139
      datasize: 177
        dotfit: ['.', 'F', 'I', 'T']
           crc: Some(22972)
    ---------------------------------------------------
    Data
    
     Global ID | Message type                 | Count
    ...................................................
           335 | UNDEFINED_MESSAGE_TYPE_335   |      1
            49 | file_creator                 |      1
             0 | file_id                      |      1
    ...................................................
                                        Total:       3 
    ---------------------------------------------------

  • one of the 3000-ish values on the same line correspond to altitude

    First one.

  • Here another fit file for another track. 3285 definitely means altitude - 157 m. Next value -- 104 -- is same in both files.

    Result is available here. Sorry for pace, at least ankle-height snow there :)