From 0a0c46b0e23a7c6ff9eb7fcfdd8379d0ba9e42cc Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Sat, 30 Jul 2022 19:26:16 +0100 Subject: [PATCH] FITmetadata.json Added the tooling to the util directory to generate a JSON file with product and manufacturer metadata for use by the FITRideFile decoder. [skip ci] --- util/fit/FITmetadata.json | 666 +++ util/fit/Makefile | 3 + util/fit/README | 18 + util/fit/fit_example.h | 8319 +++++++++++++++++++++++++++++++++++++ util/fit/fitprod.py | 41 + util/fit/nongarmin.json | 69 + 6 files changed, 9116 insertions(+) create mode 100644 util/fit/FITmetadata.json create mode 100644 util/fit/Makefile create mode 100644 util/fit/README create mode 100644 util/fit/fit_example.h create mode 100755 util/fit/fitprod.py create mode 100644 util/fit/nongarmin.json diff --git a/util/fit/FITmetadata.json b/util/fit/FITmetadata.json new file mode 100644 index 000000000..0c81fe9d8 --- /dev/null +++ b/util/fit/FITmetadata.json @@ -0,0 +1,666 @@ +{ + "VERSION":1659206075, + "PRODUCTS":[ + { "manu":6, "prod":6, "name":"SRM PC6" }, + { "manu":6, "prod":7, "name":"SRM PC7" }, + { "manu":6, "prod":8, "name":"SRM PC8" }, + { "manu":6, "prod":-1, "name":"SRM Powercontrol" }, + { "manu":7, "prod":1, "name":"Quarq Cinqo" }, + { "manu":7, "prod":9479, "name":"Quarq DZERO" }, + { "manu":8, "prod":2054, "name":"iBike AeroPod" }, + { "manu":9, "prod":-1, "name":"Powertap" }, + { "manu":9, "prod":14, "name":"Joule 2.0" }, + { "manu":9, "prod":18, "name":"Joule" }, + { "manu":9, "prod":19, "name":"Joule GPS" }, + { "manu":9, "prod":22, "name":"Joule GPS+" }, + { "manu":9, "prod":272, "name":"Powertap C1" }, + { "manu":9, "prod":288, "name":"Powertap P1" }, + { "manu":9, "prod":4096, "name":"Powertap G3" }, + { "manu":9, "prod":4353, "name":"Powercal" }, + { "manu":29, "prod":1031, "name":"Power2max S" }, + { "manu":32, "prod":0, "name":"Wahoo fitness" }, + { "manu":32, "prod":28, "name":"Wahoo ELEMNT" }, + { "manu":32, "prod":31, "name":"Wahoo ELEMNT BOLT" }, + { "manu":38, "prod":1, "name":"o_synce navi2coach" }, + { "manu":48, "prod":2, "name":"Pioneer SGX-CA500" }, + { "manu":54, "prod":1, "name":"IpBike" }, + { "manu":69, "prod":1, "name":"Stages Power Gen 1" }, + { "manu":69, "prod":2, "name":"Stages Power Gen 2" }, + { "manu":69, "prod":3, "name":"Stages Power Gen 3" }, + { "manu":70, "prod":15, "name":"SIGMA ROX 10.0" }, + { "manu":70, "prod":18, "name":"SIGMA ROX 7.0" }, + { "manu":70, "prod":41, "name":"SIGMA ROX 11.0" }, + { "manu":70, "prod":42, "name":"SIGMA iD.RUN" }, + { "manu":70, "prod":43, "name":"SIGMA iD.RUN HR" }, + { "manu":70, "prod":44, "name":"SIGMA ROX 12.0" }, + { "manu":70, "prod":45, "name":"SIGMA iD.FREE" }, + { "manu":70, "prod":46, "name":"SIGMA iD.TRI" }, + { "manu":70, "prod":47, "name":"SIGMA PURE GPS" }, + { "manu":70, "prod":49, "name":"SIGMA ROX 11.1" }, + { "manu":70, "prod":51, "name":"SIGMA ROX 2.0" }, + { "manu":70, "prod":52, "name":"SIGMA ROX 4.0" }, + { "manu":76, "prod":-1, "name":"Moxy Monitor" }, + { "manu":83, "prod":3, "name":"Scosche Rythm+" }, + { "manu":89, "prod":2800, "name":"Tacx Neo" }, + { "manu":89, "prod":2850, "name":"Tacx Neo 2 Smart" }, + { "manu":95, "prod":-1, "name":"Stryd" }, + { "manu":98, "prod":-1, "name":"BSX" }, + { "manu":98, "prod":2, "name":"BSX Insight 2" }, + { "manu":107, "prod":-1, "name":"Magene" }, + { "manu":108, "prod":-1, "name":"Giant" }, + { "manu":108, "prod":21845, "name":"Giant Power Pro" }, + { "manu":115, "prod":-1, "name":"iGPSPORT" }, + { "manu":116, "prod":-1, "name":"Thinkrider" }, + { "manu":123, "prod":2, "name":"Polar H10" }, + { "manu":123, "prod":3, "name":"Polar H9" }, + { "manu":123, "prod":-1, "name":"Polar" }, + { "manu":132, "prod":-1, "name":"Cycplus" }, + { "manu":258, "prod":-1, "name":"Lezyne" }, + { "manu":258, "prod":4, "name":"Lezyne Super GPS" }, + { "manu":258, "prod":6, "name":"Lezyne Micro-GPS" }, + { "manu":258, "prod":11, "name":"Lezyne MegaXL" }, + { "manu":260, "prod":-1, "name":"Zwift" }, + { "manu":263, "prod":-1, "name":"Favero" }, + { "manu":263, "prod":12, "name":"Favero Assioma Duo" }, + { "manu":267, "prod":-1, "name":"Bryton" }, + { "manu":268, "prod":-1, "name":"SRAM" }, + { "manu":268, "prod":1037, "name":"SRAM Rival eTap AXS" }, + { "manu":268, "prod":1052, "name":"SRAM Rival AXS" }, + { "manu":282, "prod":-1, "name":"The Sufferfest" }, + { "manu":284, "prod":-1, "name":"Rouvy" }, + { "manu":289, "prod":-1, "name":"Hammerhead" }, + { "manu":255, "prod":-1, "name":"Development" }, + { "manu":1, "prod":1, "name":"Hrm1" }, + { "manu":1, "prod":2, "name":"Axh01" }, + { "manu":1, "prod":3, "name":"Axb01" }, + { "manu":1, "prod":4, "name":"Axb02" }, + { "manu":1, "prod":5, "name":"Hrm2Ss" }, + { "manu":1, "prod":6, "name":"Dsi Alf02" }, + { "manu":1, "prod":7, "name":"Hrm3Ss" }, + { "manu":1, "prod":8, "name":"Hrm Run Single Byte Product Id" }, + { "manu":1, "prod":9, "name":"Bsm" }, + { "manu":1, "prod":10, "name":"Bcm" }, + { "manu":1, "prod":11, "name":"Axs01" }, + { "manu":1, "prod":12, "name":"Hrm Tri Single Byte Product Id" }, + { "manu":1, "prod":13, "name":"Hrm4 Run Single Byte Product Id" }, + { "manu":1, "prod":14, "name":"Fr225 Single Byte Product Id" }, + { "manu":1, "prod":15, "name":"Gen3 Bsm Single Byte Product Id" }, + { "manu":1, "prod":16, "name":"Gen3 Bcm Single Byte Product Id" }, + { "manu":1, "prod":255, "name":"Ohr" }, + { "manu":1, "prod":473, "name":"Fr301 China" }, + { "manu":1, "prod":474, "name":"Fr301 Japan" }, + { "manu":1, "prod":475, "name":"Fr301 Korea" }, + { "manu":1, "prod":494, "name":"Fr301 Taiwan" }, + { "manu":1, "prod":717, "name":"Fr405" }, + { "manu":1, "prod":782, "name":"Fr50" }, + { "manu":1, "prod":987, "name":"Fr405 Japan" }, + { "manu":1, "prod":988, "name":"Fr60" }, + { "manu":1, "prod":1011, "name":"Dsi Alf01" }, + { "manu":1, "prod":1018, "name":"Fr310Xt" }, + { "manu":1, "prod":1036, "name":"Edge500" }, + { "manu":1, "prod":1124, "name":"Fr110" }, + { "manu":1, "prod":1169, "name":"Edge800" }, + { "manu":1, "prod":1199, "name":"Edge500 Taiwan" }, + { "manu":1, "prod":1213, "name":"Edge500 Japan" }, + { "manu":1, "prod":1253, "name":"Chirp" }, + { "manu":1, "prod":1274, "name":"Fr110 Japan" }, + { "manu":1, "prod":1325, "name":"Edge200" }, + { "manu":1, "prod":1328, "name":"Fr910Xt" }, + { "manu":1, "prod":1333, "name":"Edge800 Taiwan" }, + { "manu":1, "prod":1334, "name":"Edge800 Japan" }, + { "manu":1, "prod":1341, "name":"Alf04" }, + { "manu":1, "prod":1345, "name":"Fr610" }, + { "manu":1, "prod":1360, "name":"Fr210 Japan" }, + { "manu":1, "prod":1380, "name":"Vector Ss" }, + { "manu":1, "prod":1381, "name":"Vector Cp" }, + { "manu":1, "prod":1386, "name":"Edge800 China" }, + { "manu":1, "prod":1387, "name":"Edge500 China" }, + { "manu":1, "prod":1405, "name":"Approach G10" }, + { "manu":1, "prod":1410, "name":"Fr610 Japan" }, + { "manu":1, "prod":1422, "name":"Edge500 Korea" }, + { "manu":1, "prod":1436, "name":"Fr70" }, + { "manu":1, "prod":1446, "name":"Fr310Xt 4T" }, + { "manu":1, "prod":1461, "name":"Amx" }, + { "manu":1, "prod":1482, "name":"Fr10" }, + { "manu":1, "prod":1497, "name":"Edge800 Korea" }, + { "manu":1, "prod":1499, "name":"Swim" }, + { "manu":1, "prod":1537, "name":"Fr910Xt China" }, + { "manu":1, "prod":1551, "name":"Fenix" }, + { "manu":1, "prod":1555, "name":"Edge200 Taiwan" }, + { "manu":1, "prod":1561, "name":"Edge510" }, + { "manu":1, "prod":1567, "name":"Edge810" }, + { "manu":1, "prod":1570, "name":"Tempe" }, + { "manu":1, "prod":1600, "name":"Fr910Xt Japan" }, + { "manu":1, "prod":1623, "name":"Fr620" }, + { "manu":1, "prod":1632, "name":"Fr220" }, + { "manu":1, "prod":1664, "name":"Fr910Xt Korea" }, + { "manu":1, "prod":1688, "name":"Fr10 Japan" }, + { "manu":1, "prod":1721, "name":"Edge810 Japan" }, + { "manu":1, "prod":1735, "name":"Virb Elite" }, + { "manu":1, "prod":1736, "name":"Edge Touring" }, + { "manu":1, "prod":1742, "name":"Edge510 Japan" }, + { "manu":1, "prod":1743, "name":"Hrm Tri" }, + { "manu":1, "prod":1752, "name":"Hrm Run" }, + { "manu":1, "prod":1765, "name":"Fr920Xt" }, + { "manu":1, "prod":1821, "name":"Edge510 Asia" }, + { "manu":1, "prod":1822, "name":"Edge810 China" }, + { "manu":1, "prod":1823, "name":"Edge810 Taiwan" }, + { "manu":1, "prod":1836, "name":"Edge1000" }, + { "manu":1, "prod":1837, "name":"Vivo Fit" }, + { "manu":1, "prod":1853, "name":"Virb Remote" }, + { "manu":1, "prod":1885, "name":"Vivo Ki" }, + { "manu":1, "prod":1903, "name":"Fr15" }, + { "manu":1, "prod":1907, "name":"Vivo Active" }, + { "manu":1, "prod":1918, "name":"Edge510 Korea" }, + { "manu":1, "prod":1928, "name":"Fr620 Japan" }, + { "manu":1, "prod":1929, "name":"Fr620 China" }, + { "manu":1, "prod":1930, "name":"Fr220 Japan" }, + { "manu":1, "prod":1931, "name":"Fr220 China" }, + { "manu":1, "prod":1936, "name":"Approach S6" }, + { "manu":1, "prod":1956, "name":"Vivo Smart" }, + { "manu":1, "prod":1967, "name":"Fenix2" }, + { "manu":1, "prod":1988, "name":"Epix" }, + { "manu":1, "prod":2050, "name":"Fenix3" }, + { "manu":1, "prod":2052, "name":"Edge1000 Taiwan" }, + { "manu":1, "prod":2053, "name":"Edge1000 Japan" }, + { "manu":1, "prod":2061, "name":"Fr15 Japan" }, + { "manu":1, "prod":2067, "name":"Edge520" }, + { "manu":1, "prod":2070, "name":"Edge1000 China" }, + { "manu":1, "prod":2072, "name":"Fr620 Russia" }, + { "manu":1, "prod":2073, "name":"Fr220 Russia" }, + { "manu":1, "prod":2079, "name":"Vector S" }, + { "manu":1, "prod":2100, "name":"Edge1000 Korea" }, + { "manu":1, "prod":2130, "name":"Fr920Xt Taiwan" }, + { "manu":1, "prod":2131, "name":"Fr920Xt China" }, + { "manu":1, "prod":2132, "name":"Fr920Xt Japan" }, + { "manu":1, "prod":2134, "name":"Virbx" }, + { "manu":1, "prod":2135, "name":"Vivo Smart Apac" }, + { "manu":1, "prod":2140, "name":"Etrex Touch" }, + { "manu":1, "prod":2147, "name":"Edge25" }, + { "manu":1, "prod":2148, "name":"Fr25" }, + { "manu":1, "prod":2150, "name":"Vivo Fit2" }, + { "manu":1, "prod":2153, "name":"Fr225" }, + { "manu":1, "prod":2156, "name":"Fr630" }, + { "manu":1, "prod":2157, "name":"Fr230" }, + { "manu":1, "prod":2158, "name":"Fr735Xt" }, + { "manu":1, "prod":2160, "name":"Vivo Active Apac" }, + { "manu":1, "prod":2161, "name":"Vector 2" }, + { "manu":1, "prod":2162, "name":"Vector 2S" }, + { "manu":1, "prod":2172, "name":"Virbxe" }, + { "manu":1, "prod":2173, "name":"Fr620 Taiwan" }, + { "manu":1, "prod":2174, "name":"Fr220 Taiwan" }, + { "manu":1, "prod":2175, "name":"Truswing" }, + { "manu":1, "prod":2187, "name":"D2Airvenu" }, + { "manu":1, "prod":2188, "name":"Fenix3 China" }, + { "manu":1, "prod":2189, "name":"Fenix3 Twn" }, + { "manu":1, "prod":2192, "name":"Varia Headlight" }, + { "manu":1, "prod":2193, "name":"Varia Taillight Old" }, + { "manu":1, "prod":2204, "name":"Edge Explore 1000" }, + { "manu":1, "prod":2219, "name":"Fr225 Asia" }, + { "manu":1, "prod":2225, "name":"Varia Radar Taillight" }, + { "manu":1, "prod":2226, "name":"Varia Radar Display" }, + { "manu":1, "prod":2238, "name":"Edge20" }, + { "manu":1, "prod":2260, "name":"Edge520 Asia" }, + { "manu":1, "prod":2261, "name":"Edge520 Japan" }, + { "manu":1, "prod":2262, "name":"D2 Bravo" }, + { "manu":1, "prod":2266, "name":"Approach S20" }, + { "manu":1, "prod":2271, "name":"Vivo Smart2" }, + { "manu":1, "prod":2274, "name":"Edge1000 Thai" }, + { "manu":1, "prod":2276, "name":"Varia Remote" }, + { "manu":1, "prod":2288, "name":"Edge25 Asia" }, + { "manu":1, "prod":2289, "name":"Edge25 Jpn" }, + { "manu":1, "prod":2290, "name":"Edge20 Asia" }, + { "manu":1, "prod":2292, "name":"Approach X40" }, + { "manu":1, "prod":2293, "name":"Fenix3 Japan" }, + { "manu":1, "prod":2294, "name":"Vivo Smart Emea" }, + { "manu":1, "prod":2310, "name":"Fr630 Asia" }, + { "manu":1, "prod":2311, "name":"Fr630 Jpn" }, + { "manu":1, "prod":2313, "name":"Fr230 Jpn" }, + { "manu":1, "prod":2327, "name":"Hrm4 Run" }, + { "manu":1, "prod":2332, "name":"Epix Japan" }, + { "manu":1, "prod":2337, "name":"Vivo Active Hr" }, + { "manu":1, "prod":2347, "name":"Vivo Smart Gps Hr" }, + { "manu":1, "prod":2348, "name":"Vivo Smart Hr" }, + { "manu":1, "prod":2361, "name":"Vivo Smart Hr Asia" }, + { "manu":1, "prod":2362, "name":"Vivo Smart Gps Hr Asia" }, + { "manu":1, "prod":2368, "name":"Vivo Move" }, + { "manu":1, "prod":2379, "name":"Varia Taillight" }, + { "manu":1, "prod":2396, "name":"Fr235 Asia" }, + { "manu":1, "prod":2397, "name":"Fr235 Japan" }, + { "manu":1, "prod":2398, "name":"Varia Vision" }, + { "manu":1, "prod":2406, "name":"Vivo Fit3" }, + { "manu":1, "prod":2407, "name":"Fenix3 Korea" }, + { "manu":1, "prod":2408, "name":"Fenix3 Sea" }, + { "manu":1, "prod":2413, "name":"Fenix3 Hr" }, + { "manu":1, "prod":2417, "name":"Virb Ultra 30" }, + { "manu":1, "prod":2429, "name":"Index Smart Scale" }, + { "manu":1, "prod":2431, "name":"Fr235" }, + { "manu":1, "prod":2432, "name":"Fenix3 Chronos" }, + { "manu":1, "prod":2441, "name":"Oregon7Xx" }, + { "manu":1, "prod":2444, "name":"Rino7Xx" }, + { "manu":1, "prod":2457, "name":"Epix Korea" }, + { "manu":1, "prod":2473, "name":"Fenix3 Hr Chn" }, + { "manu":1, "prod":2474, "name":"Fenix3 Hr Twn" }, + { "manu":1, "prod":2475, "name":"Fenix3 Hr Jpn" }, + { "manu":1, "prod":2476, "name":"Fenix3 Hr Sea" }, + { "manu":1, "prod":2477, "name":"Fenix3 Hr Kor" }, + { "manu":1, "prod":2496, "name":"Nautix" }, + { "manu":1, "prod":2497, "name":"Vivo Active Hr Apac" }, + { "manu":1, "prod":2512, "name":"Oregon7Xx Ww" }, + { "manu":1, "prod":2530, "name":"Edge 820" }, + { "manu":1, "prod":2531, "name":"Edge Explore 820" }, + { "manu":1, "prod":2533, "name":"Fr735Xt Apac" }, + { "manu":1, "prod":2534, "name":"Fr735Xt Japan" }, + { "manu":1, "prod":2544, "name":"Fenix5S" }, + { "manu":1, "prod":2547, "name":"D2 Bravo Titanium" }, + { "manu":1, "prod":2567, "name":"Varia Ut800" }, + { "manu":1, "prod":2593, "name":"Running Dynamics Pod" }, + { "manu":1, "prod":2599, "name":"Edge 820 China" }, + { "manu":1, "prod":2600, "name":"Edge 820 Japan" }, + { "manu":1, "prod":2604, "name":"Fenix5X" }, + { "manu":1, "prod":2606, "name":"Vivo Fit Jr" }, + { "manu":1, "prod":2622, "name":"Vivo Smart3" }, + { "manu":1, "prod":2623, "name":"Vivo Sport" }, + { "manu":1, "prod":2628, "name":"Edge 820 Taiwan" }, + { "manu":1, "prod":2629, "name":"Edge 820 Korea" }, + { "manu":1, "prod":2630, "name":"Edge 820 Sea" }, + { "manu":1, "prod":2650, "name":"Fr35 Hebrew" }, + { "manu":1, "prod":2656, "name":"Approach S60" }, + { "manu":1, "prod":2667, "name":"Fr35 Apac" }, + { "manu":1, "prod":2668, "name":"Fr35 Japan" }, + { "manu":1, "prod":2675, "name":"Fenix3 Chronos Asia" }, + { "manu":1, "prod":2687, "name":"Virb 360" }, + { "manu":1, "prod":2691, "name":"Fr935" }, + { "manu":1, "prod":2697, "name":"Fenix5" }, + { "manu":1, "prod":2700, "name":"Vivoactive3" }, + { "manu":1, "prod":2733, "name":"Fr235 China Nfc" }, + { "manu":1, "prod":2769, "name":"Foretrex 601 701" }, + { "manu":1, "prod":2772, "name":"Vivo Move Hr" }, + { "manu":1, "prod":2713, "name":"Edge 1030" }, + { "manu":1, "prod":2787, "name":"Vector 3" }, + { "manu":1, "prod":2796, "name":"Fenix5 Asia" }, + { "manu":1, "prod":2797, "name":"Fenix5S Asia" }, + { "manu":1, "prod":2798, "name":"Fenix5X Asia" }, + { "manu":1, "prod":2806, "name":"Approach Z80" }, + { "manu":1, "prod":2814, "name":"Fr35 Korea" }, + { "manu":1, "prod":2819, "name":"D2Charlie" }, + { "manu":1, "prod":2831, "name":"Vivo Smart3 Apac" }, + { "manu":1, "prod":2832, "name":"Vivo Sport Apac" }, + { "manu":1, "prod":2833, "name":"Fr935 Asia" }, + { "manu":1, "prod":2859, "name":"Descent" }, + { "manu":1, "prod":2878, "name":"Vivo Fit4" }, + { "manu":1, "prod":2886, "name":"Fr645" }, + { "manu":1, "prod":2888, "name":"Fr645M" }, + { "manu":1, "prod":2891, "name":"Fr30" }, + { "manu":1, "prod":2900, "name":"Fenix5S Plus" }, + { "manu":1, "prod":2909, "name":"Edge 130" }, + { "manu":1, "prod":2924, "name":"Edge 1030 Asia" }, + { "manu":1, "prod":2927, "name":"Vivosmart 4" }, + { "manu":1, "prod":2945, "name":"Vivo Move Hr Asia" }, + { "manu":1, "prod":2962, "name":"Approach X10" }, + { "manu":1, "prod":2977, "name":"Fr30 Asia" }, + { "manu":1, "prod":2988, "name":"Vivoactive3M W" }, + { "manu":1, "prod":3003, "name":"Fr645 Asia" }, + { "manu":1, "prod":3004, "name":"Fr645M Asia" }, + { "manu":1, "prod":3011, "name":"Edge Explore" }, + { "manu":1, "prod":3028, "name":"Gpsmap66" }, + { "manu":1, "prod":3049, "name":"Approach S10" }, + { "manu":1, "prod":3066, "name":"Vivoactive3M L" }, + { "manu":1, "prod":3085, "name":"Approach G80" }, + { "manu":1, "prod":3092, "name":"Edge 130 Asia" }, + { "manu":1, "prod":3095, "name":"Edge 1030 Bontrager" }, + { "manu":1, "prod":3110, "name":"Fenix5 Plus" }, + { "manu":1, "prod":3111, "name":"Fenix5X Plus" }, + { "manu":1, "prod":3112, "name":"Edge 520 Plus" }, + { "manu":1, "prod":3113, "name":"Fr945" }, + { "manu":1, "prod":3121, "name":"Edge 530" }, + { "manu":1, "prod":3122, "name":"Edge 830" }, + { "manu":1, "prod":3126, "name":"Instinct Esports" }, + { "manu":1, "prod":3134, "name":"Fenix5S Plus Apac" }, + { "manu":1, "prod":3135, "name":"Fenix5X Plus Apac" }, + { "manu":1, "prod":3142, "name":"Edge 520 Plus Apac" }, + { "manu":1, "prod":3144, "name":"Fr235L Asia" }, + { "manu":1, "prod":3145, "name":"Fr245 Asia" }, + { "manu":1, "prod":3163, "name":"Vivo Active3M Apac" }, + { "manu":1, "prod":3192, "name":"Gen3 Bsm" }, + { "manu":1, "prod":3193, "name":"Gen3 Bcm" }, + { "manu":1, "prod":3218, "name":"Vivo Smart4 Asia" }, + { "manu":1, "prod":3224, "name":"Vivoactive4 Small" }, + { "manu":1, "prod":3225, "name":"Vivoactive4 Large" }, + { "manu":1, "prod":3226, "name":"Venu" }, + { "manu":1, "prod":3246, "name":"Marq Driver" }, + { "manu":1, "prod":3247, "name":"Marq Aviator" }, + { "manu":1, "prod":3248, "name":"Marq Captain" }, + { "manu":1, "prod":3249, "name":"Marq Commander" }, + { "manu":1, "prod":3250, "name":"Marq Expedition" }, + { "manu":1, "prod":3251, "name":"Marq Athlete" }, + { "manu":1, "prod":3258, "name":"Descent Mk2" }, + { "manu":1, "prod":3284, "name":"Gpsmap66I" }, + { "manu":1, "prod":3287, "name":"Fenix6S Sport" }, + { "manu":1, "prod":3288, "name":"Fenix6S" }, + { "manu":1, "prod":3289, "name":"Fenix6 Sport" }, + { "manu":1, "prod":3290, "name":"Fenix6" }, + { "manu":1, "prod":3291, "name":"Fenix6X" }, + { "manu":1, "prod":3299, "name":"Hrm Dual" }, + { "manu":1, "prod":3300, "name":"Hrm Pro" }, + { "manu":1, "prod":3308, "name":"Vivo Move3 Premium" }, + { "manu":1, "prod":3314, "name":"Approach S40" }, + { "manu":1, "prod":3321, "name":"Fr245M Asia" }, + { "manu":1, "prod":3349, "name":"Edge 530 Apac" }, + { "manu":1, "prod":3350, "name":"Edge 830 Apac" }, + { "manu":1, "prod":3378, "name":"Vivo Move3" }, + { "manu":1, "prod":3387, "name":"Vivo Active4 Small Asia" }, + { "manu":1, "prod":3388, "name":"Vivo Active4 Large Asia" }, + { "manu":1, "prod":3389, "name":"Vivo Active4 Oled Asia" }, + { "manu":1, "prod":3405, "name":"Swim2" }, + { "manu":1, "prod":3420, "name":"Marq Driver Asia" }, + { "manu":1, "prod":3421, "name":"Marq Aviator Asia" }, + { "manu":1, "prod":3422, "name":"Vivo Move3 Asia" }, + { "manu":1, "prod":3441, "name":"Fr945 Asia" }, + { "manu":1, "prod":3446, "name":"Vivo Active3T Chn" }, + { "manu":1, "prod":3448, "name":"Marq Captain Asia" }, + { "manu":1, "prod":3449, "name":"Marq Commander Asia" }, + { "manu":1, "prod":3450, "name":"Marq Expedition Asia" }, + { "manu":1, "prod":3451, "name":"Marq Athlete Asia" }, + { "manu":1, "prod":3466, "name":"Instinct Solar" }, + { "manu":1, "prod":3469, "name":"Fr45 Asia" }, + { "manu":1, "prod":3473, "name":"Vivoactive3 Daimler" }, + { "manu":1, "prod":3498, "name":"Legacy Rey" }, + { "manu":1, "prod":3499, "name":"Legacy Darth Vader" }, + { "manu":1, "prod":3500, "name":"Legacy Captain Marvel" }, + { "manu":1, "prod":3501, "name":"Legacy First Avenger" }, + { "manu":1, "prod":3512, "name":"Fenix6S Sport Asia" }, + { "manu":1, "prod":3513, "name":"Fenix6S Asia" }, + { "manu":1, "prod":3514, "name":"Fenix6 Sport Asia" }, + { "manu":1, "prod":3515, "name":"Fenix6 Asia" }, + { "manu":1, "prod":3516, "name":"Fenix6X Asia" }, + { "manu":1, "prod":3535, "name":"Legacy Captain Marvel Asia" }, + { "manu":1, "prod":3536, "name":"Legacy First Avenger Asia" }, + { "manu":1, "prod":3537, "name":"Legacy Rey Asia" }, + { "manu":1, "prod":3538, "name":"Legacy Darth Vader Asia" }, + { "manu":1, "prod":3542, "name":"Descent Mk2S" }, + { "manu":1, "prod":3558, "name":"Edge 130 Plus" }, + { "manu":1, "prod":3570, "name":"Edge 1030 Plus" }, + { "manu":1, "prod":3578, "name":"Rally 200" }, + { "manu":1, "prod":3589, "name":"Fr745" }, + { "manu":1, "prod":3600, "name":"Venusq" }, + { "manu":1, "prod":3615, "name":"Lily" }, + { "manu":1, "prod":3624, "name":"Marq Adventurer" }, + { "manu":1, "prod":3638, "name":"Enduro" }, + { "manu":1, "prod":3639, "name":"Swim2 Apac" }, + { "manu":1, "prod":3648, "name":"Marq Adventurer Asia" }, + { "manu":1, "prod":3652, "name":"Fr945 Lte" }, + { "manu":1, "prod":3702, "name":"Descent Mk2 Asia" }, + { "manu":1, "prod":3703, "name":"Venu2" }, + { "manu":1, "prod":3704, "name":"Venu2S" }, + { "manu":1, "prod":3737, "name":"Venu Daimler Asia" }, + { "manu":1, "prod":3739, "name":"Marq Golfer" }, + { "manu":1, "prod":3740, "name":"Venu Daimler" }, + { "manu":1, "prod":3794, "name":"Fr745 Asia" }, + { "manu":1, "prod":3809, "name":"Lily Asia" }, + { "manu":1, "prod":3812, "name":"Edge 1030 Plus Asia" }, + { "manu":1, "prod":3813, "name":"Edge 130 Plus Asia" }, + { "manu":1, "prod":3823, "name":"Approach S12" }, + { "manu":1, "prod":3872, "name":"Enduro Asia" }, + { "manu":1, "prod":3837, "name":"Venusq Asia" }, + { "manu":1, "prod":3850, "name":"Marq Golfer Asia" }, + { "manu":1, "prod":3851, "name":"Venu2 Plus" }, + { "manu":1, "prod":3869, "name":"Fr55" }, + { "manu":1, "prod":3888, "name":"Instinct 2" }, + { "manu":1, "prod":3905, "name":"Fenix7S" }, + { "manu":1, "prod":3906, "name":"Fenix7" }, + { "manu":1, "prod":3907, "name":"Fenix7X" }, + { "manu":1, "prod":3908, "name":"Fenix7S Apac" }, + { "manu":1, "prod":3909, "name":"Fenix7 Apac" }, + { "manu":1, "prod":3910, "name":"Fenix7X Apac" }, + { "manu":1, "prod":3927, "name":"Approach G12" }, + { "manu":1, "prod":3930, "name":"Descent Mk2S Asia" }, + { "manu":1, "prod":3934, "name":"Approach S42" }, + { "manu":1, "prod":3943, "name":"Epix Gen2" }, + { "manu":1, "prod":3944, "name":"Epix Gen2 Apac" }, + { "manu":1, "prod":3949, "name":"Venu2S Asia" }, + { "manu":1, "prod":3950, "name":"Venu2 Asia" }, + { "manu":1, "prod":3978, "name":"Fr945 Lte Asia" }, + { "manu":1, "prod":3986, "name":"Approach S12 Asia" }, + { "manu":1, "prod":4001, "name":"Approach G12 Asia" }, + { "manu":1, "prod":4002, "name":"Approach S42 Asia" }, + { "manu":1, "prod":4005, "name":"Descent G1" }, + { "manu":1, "prod":4017, "name":"Venu2 Plus Asia" }, + { "manu":1, "prod":4033, "name":"Fr55 Asia" }, + { "manu":1, "prod":4071, "name":"Instinct 2 Asia" }, + { "manu":1, "prod":4125, "name":"D2 Air X10" }, + { "manu":1, "prod":4132, "name":"Descent G1 Asia" }, + { "manu":1, "prod":4265, "name":"Tacx Neo Smart" }, + { "manu":1, "prod":4266, "name":"Tacx Neo2 Smart" }, + { "manu":1, "prod":4267, "name":"Tacx Neo2 T Smart" }, + { "manu":1, "prod":4268, "name":"Tacx Neo Smart Bike" }, + { "manu":1, "prod":4269, "name":"Tacx Satori Smart" }, + { "manu":1, "prod":4270, "name":"Tacx Flow Smart" }, + { "manu":1, "prod":4271, "name":"Tacx Vortex Smart" }, + { "manu":1, "prod":4272, "name":"Tacx Bushido Smart" }, + { "manu":1, "prod":4273, "name":"Tacx Genius Smart" }, + { "manu":1, "prod":4274, "name":"Tacx Flux Flux S Smart" }, + { "manu":1, "prod":4275, "name":"Tacx Flux2 Smart" }, + { "manu":1, "prod":4276, "name":"Tacx Magnum" }, + { "manu":1, "prod":4135, "name":"Tactix7" }, + { "manu":1, "prod":10007, "name":"Sdm4" }, + { "manu":1, "prod":10014, "name":"Edge Remote" }, + { "manu":1, "prod":20533, "name":"Tacx Training App Win" }, + { "manu":1, "prod":20534, "name":"Tacx Training App Mac" }, + { "manu":1, "prod":20565, "name":"Tacx Training App Mac Catalyst" }, + { "manu":1, "prod":20119, "name":"Training Center" }, + { "manu":1, "prod":30045, "name":"Tacx Training App Android" }, + { "manu":1, "prod":30046, "name":"Tacx Training App Ios" }, + { "manu":1, "prod":30047, "name":"Tacx Training App Legacy" }, + { "manu":1, "prod":65531, "name":"Connectiq Simulator" }, + { "manu":1, "prod":65532, "name":"Android Antplus Plugin" }, + { "manu":1, "prod":65534, "name":"Connect" } + ], + + "MANUFACTURERS":[ + { "manu":1, "name":"Garmin" }, + { "manu":2, "name":"Garmin Fr405 Antfs" }, + { "manu":3, "name":"Zephyr" }, + { "manu":4, "name":"Dayton" }, + { "manu":5, "name":"Idt" }, + { "manu":6, "name":"Srm" }, + { "manu":7, "name":"Quarq" }, + { "manu":8, "name":"Ibike" }, + { "manu":9, "name":"Saris" }, + { "manu":10, "name":"Spark Hk" }, + { "manu":11, "name":"Tanita" }, + { "manu":12, "name":"Echowell" }, + { "manu":13, "name":"Dynastream Oem" }, + { "manu":14, "name":"Nautilus" }, + { "manu":15, "name":"Dynastream" }, + { "manu":16, "name":"Timex" }, + { "manu":17, "name":"Metrigear" }, + { "manu":18, "name":"Xelic" }, + { "manu":19, "name":"Beurer" }, + { "manu":20, "name":"Cardiosport" }, + { "manu":21, "name":"A And D" }, + { "manu":22, "name":"Hmm" }, + { "manu":23, "name":"Suunto" }, + { "manu":24, "name":"Thita Elektronik" }, + { "manu":25, "name":"Gpulse" }, + { "manu":26, "name":"Clean Mobile" }, + { "manu":27, "name":"Pedal Brain" }, + { "manu":28, "name":"Peaksware" }, + { "manu":29, "name":"Saxonar" }, + { "manu":30, "name":"Lemond Fitness" }, + { "manu":31, "name":"Dexcom" }, + { "manu":32, "name":"Wahoo Fitness" }, + { "manu":33, "name":"Octane Fitness" }, + { "manu":34, "name":"Archinoetics" }, + { "manu":35, "name":"The Hurt Box" }, + { "manu":36, "name":"Citizen Systems" }, + { "manu":37, "name":"Magellan" }, + { "manu":38, "name":"Osynce" }, + { "manu":39, "name":"Holux" }, + { "manu":40, "name":"Concept2" }, + { "manu":41, "name":"Shimano" }, + { "manu":42, "name":"One Giant Leap" }, + { "manu":43, "name":"Ace Sensor" }, + { "manu":44, "name":"Brim Brothers" }, + { "manu":45, "name":"Xplova" }, + { "manu":46, "name":"Perception Digital" }, + { "manu":47, "name":"Bf1Systems" }, + { "manu":48, "name":"Pioneer" }, + { "manu":49, "name":"Spantec" }, + { "manu":50, "name":"Metalogics" }, + { "manu":51, "name":"4Iiiis" }, + { "manu":52, "name":"Seiko Epson" }, + { "manu":53, "name":"Seiko Epson Oem" }, + { "manu":54, "name":"Ifor Powell" }, + { "manu":55, "name":"Maxwell Guider" }, + { "manu":56, "name":"Star Trac" }, + { "manu":57, "name":"Breakaway" }, + { "manu":58, "name":"Alatech Technology Ltd" }, + { "manu":59, "name":"Mio Technology Europe" }, + { "manu":60, "name":"Rotor" }, + { "manu":61, "name":"Geonaute" }, + { "manu":62, "name":"Id Bike" }, + { "manu":63, "name":"Specialized" }, + { "manu":64, "name":"Wtek" }, + { "manu":65, "name":"Physical Enterprises" }, + { "manu":66, "name":"North Pole Engineering" }, + { "manu":67, "name":"Bkool" }, + { "manu":68, "name":"Cateye" }, + { "manu":69, "name":"Stages Cycling" }, + { "manu":70, "name":"Sigmasport" }, + { "manu":71, "name":"Tomtom" }, + { "manu":72, "name":"Peripedal" }, + { "manu":73, "name":"Wattbike" }, + { "manu":76, "name":"Moxy" }, + { "manu":77, "name":"Ciclosport" }, + { "manu":78, "name":"Powerbahn" }, + { "manu":79, "name":"Acorn Projects Aps" }, + { "manu":80, "name":"Lifebeam" }, + { "manu":81, "name":"Bontrager" }, + { "manu":82, "name":"Wellgo" }, + { "manu":83, "name":"Scosche" }, + { "manu":84, "name":"Magura" }, + { "manu":85, "name":"Woodway" }, + { "manu":86, "name":"Elite" }, + { "manu":87, "name":"Nielsen Kellerman" }, + { "manu":88, "name":"Dk City" }, + { "manu":89, "name":"Tacx" }, + { "manu":90, "name":"Direction Technology" }, + { "manu":91, "name":"Magtonic" }, + { "manu":92, "name":"1Partcarbon" }, + { "manu":93, "name":"Inside Ride Technologies" }, + { "manu":94, "name":"Sound Of Motion" }, + { "manu":95, "name":"Stryd" }, + { "manu":96, "name":"Icg" }, + { "manu":97, "name":"Mipulse" }, + { "manu":98, "name":"Bsx Athletics" }, + { "manu":99, "name":"Look" }, + { "manu":100, "name":"Campagnolo Srl" }, + { "manu":101, "name":"Body Bike Smart" }, + { "manu":102, "name":"Praxisworks" }, + { "manu":103, "name":"Limits Technology" }, + { "manu":104, "name":"Topaction Technology" }, + { "manu":105, "name":"Cosinuss" }, + { "manu":106, "name":"Fitcare" }, + { "manu":107, "name":"Magene" }, + { "manu":108, "name":"Giant Manufacturing Co" }, + { "manu":109, "name":"Tigrasport" }, + { "manu":110, "name":"Salutron" }, + { "manu":111, "name":"Technogym" }, + { "manu":112, "name":"Bryton Sensors" }, + { "manu":113, "name":"Latitude Limited" }, + { "manu":114, "name":"Soaring Technology" }, + { "manu":115, "name":"Igpsport" }, + { "manu":116, "name":"Thinkrider" }, + { "manu":117, "name":"Gopher Sport" }, + { "manu":118, "name":"Waterrower" }, + { "manu":119, "name":"Orangetheory" }, + { "manu":120, "name":"Inpeak" }, + { "manu":121, "name":"Kinetic" }, + { "manu":122, "name":"Johnson Health Tech" }, + { "manu":123, "name":"Polar Electro" }, + { "manu":124, "name":"Seesense" }, + { "manu":125, "name":"Nci Technology" }, + { "manu":126, "name":"Iqsquare" }, + { "manu":127, "name":"Leomo" }, + { "manu":128, "name":"Ifit Com" }, + { "manu":129, "name":"Coros Byte" }, + { "manu":130, "name":"Versa Design" }, + { "manu":131, "name":"Chileaf" }, + { "manu":132, "name":"Cycplus" }, + { "manu":133, "name":"Gravaa Byte" }, + { "manu":134, "name":"Sigeyi" }, + { "manu":135, "name":"Coospo" }, + { "manu":136, "name":"Geoid" }, + { "manu":137, "name":"Bosch" }, + { "manu":138, "name":"Kyto" }, + { "manu":139, "name":"Kinetic Sports" }, + { "manu":140, "name":"Decathlon Byte" }, + { "manu":141, "name":"Tq Systems" }, + { "manu":142, "name":"Tag Heuer" }, + { "manu":255, "name":"Development" }, + { "manu":257, "name":"Healthandlife" }, + { "manu":258, "name":"Lezyne" }, + { "manu":259, "name":"Scribe Labs" }, + { "manu":260, "name":"Zwift" }, + { "manu":261, "name":"Watteam" }, + { "manu":262, "name":"Recon" }, + { "manu":263, "name":"Favero Electronics" }, + { "manu":264, "name":"Dynovelo" }, + { "manu":265, "name":"Strava" }, + { "manu":266, "name":"Precor" }, + { "manu":267, "name":"Bryton" }, + { "manu":268, "name":"Sram" }, + { "manu":269, "name":"Navman" }, + { "manu":270, "name":"Cobi" }, + { "manu":271, "name":"Spivi" }, + { "manu":272, "name":"Mio Magellan" }, + { "manu":273, "name":"Evesports" }, + { "manu":274, "name":"Sensitivus Gauge" }, + { "manu":275, "name":"Podoon" }, + { "manu":276, "name":"Life Time Fitness" }, + { "manu":277, "name":"Falco E Motors" }, + { "manu":278, "name":"Minoura" }, + { "manu":279, "name":"Cycliq" }, + { "manu":280, "name":"Luxottica" }, + { "manu":281, "name":"Trainer Road" }, + { "manu":282, "name":"The Sufferfest" }, + { "manu":283, "name":"Fullspeedahead" }, + { "manu":284, "name":"Virtualtraining" }, + { "manu":285, "name":"Feedbacksports" }, + { "manu":286, "name":"Omata" }, + { "manu":287, "name":"Vdo" }, + { "manu":288, "name":"Magneticdays" }, + { "manu":289, "name":"Hammerhead" }, + { "manu":290, "name":"Kinetic By Kurt" }, + { "manu":291, "name":"Shapelog" }, + { "manu":292, "name":"Dabuziduo" }, + { "manu":293, "name":"Jetblack" }, + { "manu":294, "name":"Coros" }, + { "manu":295, "name":"Virtugo" }, + { "manu":296, "name":"Velosense" }, + { "manu":297, "name":"Cycligentinc" }, + { "manu":298, "name":"Trailforks" }, + { "manu":299, "name":"Mahle Ebikemotion" }, + { "manu":300, "name":"Nurvv" }, + { "manu":301, "name":"Microprogram" }, + { "manu":302, "name":"Zone5Cloud" }, + { "manu":303, "name":"Greenteg" }, + { "manu":304, "name":"Yamaha Motors" }, + { "manu":305, "name":"Whoop" }, + { "manu":306, "name":"Gravaa" }, + { "manu":307, "name":"Onelap" }, + { "manu":308, "name":"Monark Exercise" }, + { "manu":309, "name":"Form" }, + { "manu":310, "name":"Decathlon" }, + { "manu":311, "name":"Syncros" }, + { "manu":312, "name":"Heatup" }, + { "manu":313, "name":"Cannondale" }, + { "manu":314, "name":"True Fitness" }, + { "manu":315, "name":"Rgt Cycling" }, + { "manu":316, "name":"Vasa" }, + { "manu":317, "name":"Race Republic" }, + { "manu":318, "name":"Fazua" }, + { "manu":5759, "name":"Actigraphcorp" } + ] +} diff --git a/util/fit/Makefile b/util/fit/Makefile new file mode 100644 index 000000000..667f385a2 --- /dev/null +++ b/util/fit/Makefile @@ -0,0 +1,3 @@ +FITmetadata.json: fit_example.h nongarmin.json + ./fitprod.py > FITmetadata.json + diff --git a/util/fit/README b/util/fit/README new file mode 100644 index 000000000..7683dea7d --- /dev/null +++ b/util/fit/README @@ -0,0 +1,18 @@ + +FITmetadata.json generator + +For Garmin device updates: + Make sure you download the latest FIT SDK from thisisant.com and extract + the c/fit_example.h file and place it in this directory. + +For non-Garmin device updates: + Update the file nongarmin.json to add the manufacturer and product combination + and associated description. See existing values in there as examples. Note + that a product number of -1 is to set the default description for any device + from that manufacturer that is not defined + +Once the updates have been made you can regenerate FITmetadata.json with: + $ make + +A new FITmetadata.json file will be created in the current directory, + diff --git a/util/fit/fit_example.h b/util/fit/fit_example.h new file mode 100644 index 000000000..5e289d900 --- /dev/null +++ b/util/fit/fit_example.h @@ -0,0 +1,8319 @@ +/////////////////////////////////////////////////////////////////////////////////// +// The following FIT Protocol software provided may be used with FIT protocol +// devices only and remains the copyrighted property of Garmin International, Inc. +// The software is being provided on an "as-is" basis and as an accommodation, +// and therefore all warranties, representations, or guarantees of any kind +// (whether express, implied or statutory) including, without limitation, +// warranties of merchantability, non-infringement, or fitness for a particular +// purpose, are specifically disclaimed. +// +// Copyright 2022 Garmin International, Inc. +/////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.84Release +// Tag = production/akw/21.84.00-0-g894a113c +// Product = EXAMPLE +// Alignment = 4 bytes, padding disabled. +/////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_EXAMPLE_H) +#define FIT_EXAMPLE_H + +#include "fit.h" + +#if defined(__cplusplus) + extern "C" { +#endif + + +/////////////////////////////////////////////////////////////////////// +// Public Definitions +/////////////////////////////////////////////////////////////////////// + +#define FIT_ALIGNMENT 4 + +/////////////////////////////////////////////////////////////////////// +// Types +/////////////////////////////////////////////////////////////////////// + + +typedef FIT_ENUM FIT_FILE; +#define FIT_FILE_INVALID FIT_ENUM_INVALID +#define FIT_FILE_DEVICE ((FIT_FILE)1) // Read only, single file. Must be in root directory. +#define FIT_FILE_SETTINGS ((FIT_FILE)2) // Read/write, single file. Directory=Settings +#define FIT_FILE_SPORT ((FIT_FILE)3) // Read/write, multiple files, file number = sport type. Directory=Sports +#define FIT_FILE_ACTIVITY ((FIT_FILE)4) // Read/erase, multiple files. Directory=Activities +#define FIT_FILE_WORKOUT ((FIT_FILE)5) // Read/write/erase, multiple files. Directory=Workouts +#define FIT_FILE_COURSE ((FIT_FILE)6) // Read/write/erase, multiple files. Directory=Courses +#define FIT_FILE_SCHEDULES ((FIT_FILE)7) // Read/write, single file. Directory=Schedules +#define FIT_FILE_WEIGHT ((FIT_FILE)9) // Read only, single file. Circular buffer. All message definitions at start of file. Directory=Weight +#define FIT_FILE_TOTALS ((FIT_FILE)10) // Read only, single file. Directory=Totals +#define FIT_FILE_GOALS ((FIT_FILE)11) // Read/write, single file. Directory=Goals +#define FIT_FILE_BLOOD_PRESSURE ((FIT_FILE)14) // Read only. Directory=Blood Pressure +#define FIT_FILE_MONITORING_A ((FIT_FILE)15) // Read only. Directory=Monitoring. File number=sub type. +#define FIT_FILE_ACTIVITY_SUMMARY ((FIT_FILE)20) // Read/erase, multiple files. Directory=Activities +#define FIT_FILE_MONITORING_DAILY ((FIT_FILE)28) +#define FIT_FILE_MONITORING_B ((FIT_FILE)32) // Read only. Directory=Monitoring. File number=identifier +#define FIT_FILE_SEGMENT ((FIT_FILE)34) // Read/write/erase. Multiple Files. Directory=Segments +#define FIT_FILE_SEGMENT_LIST ((FIT_FILE)35) // Read/write/erase. Single File. Directory=Segments +#define FIT_FILE_EXD_CONFIGURATION ((FIT_FILE)40) // Read/write/erase. Single File. Directory=Settings +#define FIT_FILE_MFG_RANGE_MIN ((FIT_FILE)0xF7) // 0xF7 - 0xFE reserved for manufacturer specific file types +#define FIT_FILE_MFG_RANGE_MAX ((FIT_FILE)0xFE) // 0xF7 - 0xFE reserved for manufacturer specific file types +#define FIT_FILE_COUNT 20 + +typedef FIT_UINT16 FIT_MESG_NUM; +#define FIT_MESG_NUM_INVALID FIT_UINT16_INVALID +#define FIT_MESG_NUM_FILE_ID ((FIT_MESG_NUM)0) +#define FIT_MESG_NUM_CAPABILITIES ((FIT_MESG_NUM)1) +#define FIT_MESG_NUM_DEVICE_SETTINGS ((FIT_MESG_NUM)2) +#define FIT_MESG_NUM_USER_PROFILE ((FIT_MESG_NUM)3) +#define FIT_MESG_NUM_HRM_PROFILE ((FIT_MESG_NUM)4) +#define FIT_MESG_NUM_SDM_PROFILE ((FIT_MESG_NUM)5) +#define FIT_MESG_NUM_BIKE_PROFILE ((FIT_MESG_NUM)6) +#define FIT_MESG_NUM_ZONES_TARGET ((FIT_MESG_NUM)7) +#define FIT_MESG_NUM_HR_ZONE ((FIT_MESG_NUM)8) +#define FIT_MESG_NUM_POWER_ZONE ((FIT_MESG_NUM)9) +#define FIT_MESG_NUM_MET_ZONE ((FIT_MESG_NUM)10) +#define FIT_MESG_NUM_SPORT ((FIT_MESG_NUM)12) +#define FIT_MESG_NUM_GOAL ((FIT_MESG_NUM)15) +#define FIT_MESG_NUM_SESSION ((FIT_MESG_NUM)18) +#define FIT_MESG_NUM_LAP ((FIT_MESG_NUM)19) +#define FIT_MESG_NUM_RECORD ((FIT_MESG_NUM)20) +#define FIT_MESG_NUM_EVENT ((FIT_MESG_NUM)21) +#define FIT_MESG_NUM_DEVICE_INFO ((FIT_MESG_NUM)23) +#define FIT_MESG_NUM_WORKOUT ((FIT_MESG_NUM)26) +#define FIT_MESG_NUM_WORKOUT_STEP ((FIT_MESG_NUM)27) +#define FIT_MESG_NUM_SCHEDULE ((FIT_MESG_NUM)28) +#define FIT_MESG_NUM_WEIGHT_SCALE ((FIT_MESG_NUM)30) +#define FIT_MESG_NUM_COURSE ((FIT_MESG_NUM)31) +#define FIT_MESG_NUM_COURSE_POINT ((FIT_MESG_NUM)32) +#define FIT_MESG_NUM_TOTALS ((FIT_MESG_NUM)33) +#define FIT_MESG_NUM_ACTIVITY ((FIT_MESG_NUM)34) +#define FIT_MESG_NUM_SOFTWARE ((FIT_MESG_NUM)35) +#define FIT_MESG_NUM_FILE_CAPABILITIES ((FIT_MESG_NUM)37) +#define FIT_MESG_NUM_MESG_CAPABILITIES ((FIT_MESG_NUM)38) +#define FIT_MESG_NUM_FIELD_CAPABILITIES ((FIT_MESG_NUM)39) +#define FIT_MESG_NUM_FILE_CREATOR ((FIT_MESG_NUM)49) +#define FIT_MESG_NUM_BLOOD_PRESSURE ((FIT_MESG_NUM)51) +#define FIT_MESG_NUM_SPEED_ZONE ((FIT_MESG_NUM)53) +#define FIT_MESG_NUM_MONITORING ((FIT_MESG_NUM)55) +#define FIT_MESG_NUM_TRAINING_FILE ((FIT_MESG_NUM)72) +#define FIT_MESG_NUM_HRV ((FIT_MESG_NUM)78) +#define FIT_MESG_NUM_ANT_RX ((FIT_MESG_NUM)80) +#define FIT_MESG_NUM_ANT_TX ((FIT_MESG_NUM)81) +#define FIT_MESG_NUM_ANT_CHANNEL_ID ((FIT_MESG_NUM)82) +#define FIT_MESG_NUM_LENGTH ((FIT_MESG_NUM)101) +#define FIT_MESG_NUM_MONITORING_INFO ((FIT_MESG_NUM)103) +#define FIT_MESG_NUM_PAD ((FIT_MESG_NUM)105) +#define FIT_MESG_NUM_SLAVE_DEVICE ((FIT_MESG_NUM)106) +#define FIT_MESG_NUM_CONNECTIVITY ((FIT_MESG_NUM)127) +#define FIT_MESG_NUM_WEATHER_CONDITIONS ((FIT_MESG_NUM)128) +#define FIT_MESG_NUM_WEATHER_ALERT ((FIT_MESG_NUM)129) +#define FIT_MESG_NUM_CADENCE_ZONE ((FIT_MESG_NUM)131) +#define FIT_MESG_NUM_HR ((FIT_MESG_NUM)132) +#define FIT_MESG_NUM_SEGMENT_LAP ((FIT_MESG_NUM)142) +#define FIT_MESG_NUM_MEMO_GLOB ((FIT_MESG_NUM)145) +#define FIT_MESG_NUM_SEGMENT_ID ((FIT_MESG_NUM)148) +#define FIT_MESG_NUM_SEGMENT_LEADERBOARD_ENTRY ((FIT_MESG_NUM)149) +#define FIT_MESG_NUM_SEGMENT_POINT ((FIT_MESG_NUM)150) +#define FIT_MESG_NUM_SEGMENT_FILE ((FIT_MESG_NUM)151) +#define FIT_MESG_NUM_WORKOUT_SESSION ((FIT_MESG_NUM)158) +#define FIT_MESG_NUM_WATCHFACE_SETTINGS ((FIT_MESG_NUM)159) +#define FIT_MESG_NUM_GPS_METADATA ((FIT_MESG_NUM)160) +#define FIT_MESG_NUM_CAMERA_EVENT ((FIT_MESG_NUM)161) +#define FIT_MESG_NUM_TIMESTAMP_CORRELATION ((FIT_MESG_NUM)162) +#define FIT_MESG_NUM_GYROSCOPE_DATA ((FIT_MESG_NUM)164) +#define FIT_MESG_NUM_ACCELEROMETER_DATA ((FIT_MESG_NUM)165) +#define FIT_MESG_NUM_THREE_D_SENSOR_CALIBRATION ((FIT_MESG_NUM)167) +#define FIT_MESG_NUM_VIDEO_FRAME ((FIT_MESG_NUM)169) +#define FIT_MESG_NUM_OBDII_DATA ((FIT_MESG_NUM)174) +#define FIT_MESG_NUM_NMEA_SENTENCE ((FIT_MESG_NUM)177) +#define FIT_MESG_NUM_AVIATION_ATTITUDE ((FIT_MESG_NUM)178) +#define FIT_MESG_NUM_VIDEO ((FIT_MESG_NUM)184) +#define FIT_MESG_NUM_VIDEO_TITLE ((FIT_MESG_NUM)185) +#define FIT_MESG_NUM_VIDEO_DESCRIPTION ((FIT_MESG_NUM)186) +#define FIT_MESG_NUM_VIDEO_CLIP ((FIT_MESG_NUM)187) +#define FIT_MESG_NUM_OHR_SETTINGS ((FIT_MESG_NUM)188) +#define FIT_MESG_NUM_EXD_SCREEN_CONFIGURATION ((FIT_MESG_NUM)200) +#define FIT_MESG_NUM_EXD_DATA_FIELD_CONFIGURATION ((FIT_MESG_NUM)201) +#define FIT_MESG_NUM_EXD_DATA_CONCEPT_CONFIGURATION ((FIT_MESG_NUM)202) +#define FIT_MESG_NUM_FIELD_DESCRIPTION ((FIT_MESG_NUM)206) +#define FIT_MESG_NUM_DEVELOPER_DATA_ID ((FIT_MESG_NUM)207) +#define FIT_MESG_NUM_MAGNETOMETER_DATA ((FIT_MESG_NUM)208) +#define FIT_MESG_NUM_BAROMETER_DATA ((FIT_MESG_NUM)209) +#define FIT_MESG_NUM_ONE_D_SENSOR_CALIBRATION ((FIT_MESG_NUM)210) +#define FIT_MESG_NUM_SET ((FIT_MESG_NUM)225) +#define FIT_MESG_NUM_STRESS_LEVEL ((FIT_MESG_NUM)227) +#define FIT_MESG_NUM_DIVE_SETTINGS ((FIT_MESG_NUM)258) +#define FIT_MESG_NUM_DIVE_GAS ((FIT_MESG_NUM)259) +#define FIT_MESG_NUM_DIVE_ALARM ((FIT_MESG_NUM)262) +#define FIT_MESG_NUM_EXERCISE_TITLE ((FIT_MESG_NUM)264) +#define FIT_MESG_NUM_DIVE_SUMMARY ((FIT_MESG_NUM)268) +#define FIT_MESG_NUM_JUMP ((FIT_MESG_NUM)285) +#define FIT_MESG_NUM_CLIMB_PRO ((FIT_MESG_NUM)317) +#define FIT_MESG_NUM_DEVICE_AUX_BATTERY_INFO ((FIT_MESG_NUM)375) +#define FIT_MESG_NUM_MFG_RANGE_MIN ((FIT_MESG_NUM)0xFF00) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages +#define FIT_MESG_NUM_MFG_RANGE_MAX ((FIT_MESG_NUM)0xFFFE) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages +#define FIT_MESG_NUM_COUNT 91 + +typedef FIT_UINT8 FIT_CHECKSUM; +#define FIT_CHECKSUM_INVALID FIT_UINT8_INVALID +#define FIT_CHECKSUM_CLEAR ((FIT_CHECKSUM)0) // Allows clear of checksum for flash memory where can only write 1 to 0 without erasing sector. +#define FIT_CHECKSUM_OK ((FIT_CHECKSUM)1) // Set to mark checksum as valid if computes to invalid values 0 or 0xFF. Checksum can also be set to ok to save encoding computation time. +#define FIT_CHECKSUM_COUNT 2 + +typedef FIT_UINT8Z FIT_FILE_FLAGS; +#define FIT_FILE_FLAGS_INVALID FIT_UINT8Z_INVALID +#define FIT_FILE_FLAGS_READ ((FIT_FILE_FLAGS)0x02) +#define FIT_FILE_FLAGS_WRITE ((FIT_FILE_FLAGS)0x04) +#define FIT_FILE_FLAGS_ERASE ((FIT_FILE_FLAGS)0x08) +#define FIT_FILE_FLAGS_COUNT 3 + +typedef FIT_ENUM FIT_MESG_COUNT; +#define FIT_MESG_COUNT_INVALID FIT_ENUM_INVALID +#define FIT_MESG_COUNT_NUM_PER_FILE ((FIT_MESG_COUNT)0) +#define FIT_MESG_COUNT_MAX_PER_FILE ((FIT_MESG_COUNT)1) +#define FIT_MESG_COUNT_MAX_PER_FILE_TYPE ((FIT_MESG_COUNT)2) +#define FIT_MESG_COUNT_COUNT 3 + +typedef FIT_UINT32 FIT_DATE_TIME; // seconds since UTC 00:00 Dec 31 1989 +#define FIT_DATE_TIME_INVALID FIT_UINT32_INVALID +#define FIT_DATE_TIME_MIN ((FIT_DATE_TIME)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on) +#define FIT_DATE_TIME_COUNT 1 + +typedef FIT_UINT32 FIT_LOCAL_DATE_TIME; // seconds since 00:00 Dec 31 1989 in local time zone +#define FIT_LOCAL_DATE_TIME_INVALID FIT_UINT32_INVALID +#define FIT_LOCAL_DATE_TIME_MIN ((FIT_LOCAL_DATE_TIME)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on) +#define FIT_LOCAL_DATE_TIME_COUNT 1 + +typedef FIT_UINT16 FIT_MESSAGE_INDEX; +#define FIT_MESSAGE_INDEX_INVALID FIT_UINT16_INVALID +#define FIT_MESSAGE_INDEX_SELECTED ((FIT_MESSAGE_INDEX)0x8000) // message is selected if set +#define FIT_MESSAGE_INDEX_RESERVED ((FIT_MESSAGE_INDEX)0x7000) // reserved (default 0) +#define FIT_MESSAGE_INDEX_MASK ((FIT_MESSAGE_INDEX)0x0FFF) // index +#define FIT_MESSAGE_INDEX_COUNT 3 + +typedef FIT_UINT8 FIT_DEVICE_INDEX; +#define FIT_DEVICE_INDEX_INVALID FIT_UINT8_INVALID +#define FIT_DEVICE_INDEX_CREATOR ((FIT_DEVICE_INDEX)0) // Creator of the file is always device index 0. +#define FIT_DEVICE_INDEX_COUNT 1 + +typedef FIT_ENUM FIT_GENDER; +#define FIT_GENDER_INVALID FIT_ENUM_INVALID +#define FIT_GENDER_FEMALE ((FIT_GENDER)0) +#define FIT_GENDER_MALE ((FIT_GENDER)1) +#define FIT_GENDER_UNSPECIFIED ((FIT_GENDER)2) +#define FIT_GENDER_COUNT 3 + +typedef FIT_ENUM FIT_LANGUAGE; +#define FIT_LANGUAGE_INVALID FIT_ENUM_INVALID +#define FIT_LANGUAGE_ENGLISH ((FIT_LANGUAGE)0) +#define FIT_LANGUAGE_FRENCH ((FIT_LANGUAGE)1) +#define FIT_LANGUAGE_ITALIAN ((FIT_LANGUAGE)2) +#define FIT_LANGUAGE_GERMAN ((FIT_LANGUAGE)3) +#define FIT_LANGUAGE_SPANISH ((FIT_LANGUAGE)4) +#define FIT_LANGUAGE_CROATIAN ((FIT_LANGUAGE)5) +#define FIT_LANGUAGE_CZECH ((FIT_LANGUAGE)6) +#define FIT_LANGUAGE_DANISH ((FIT_LANGUAGE)7) +#define FIT_LANGUAGE_DUTCH ((FIT_LANGUAGE)8) +#define FIT_LANGUAGE_FINNISH ((FIT_LANGUAGE)9) +#define FIT_LANGUAGE_GREEK ((FIT_LANGUAGE)10) +#define FIT_LANGUAGE_HUNGARIAN ((FIT_LANGUAGE)11) +#define FIT_LANGUAGE_NORWEGIAN ((FIT_LANGUAGE)12) +#define FIT_LANGUAGE_POLISH ((FIT_LANGUAGE)13) +#define FIT_LANGUAGE_PORTUGUESE ((FIT_LANGUAGE)14) +#define FIT_LANGUAGE_SLOVAKIAN ((FIT_LANGUAGE)15) +#define FIT_LANGUAGE_SLOVENIAN ((FIT_LANGUAGE)16) +#define FIT_LANGUAGE_SWEDISH ((FIT_LANGUAGE)17) +#define FIT_LANGUAGE_RUSSIAN ((FIT_LANGUAGE)18) +#define FIT_LANGUAGE_TURKISH ((FIT_LANGUAGE)19) +#define FIT_LANGUAGE_LATVIAN ((FIT_LANGUAGE)20) +#define FIT_LANGUAGE_UKRAINIAN ((FIT_LANGUAGE)21) +#define FIT_LANGUAGE_ARABIC ((FIT_LANGUAGE)22) +#define FIT_LANGUAGE_FARSI ((FIT_LANGUAGE)23) +#define FIT_LANGUAGE_BULGARIAN ((FIT_LANGUAGE)24) +#define FIT_LANGUAGE_ROMANIAN ((FIT_LANGUAGE)25) +#define FIT_LANGUAGE_CHINESE ((FIT_LANGUAGE)26) +#define FIT_LANGUAGE_JAPANESE ((FIT_LANGUAGE)27) +#define FIT_LANGUAGE_KOREAN ((FIT_LANGUAGE)28) +#define FIT_LANGUAGE_TAIWANESE ((FIT_LANGUAGE)29) +#define FIT_LANGUAGE_THAI ((FIT_LANGUAGE)30) +#define FIT_LANGUAGE_HEBREW ((FIT_LANGUAGE)31) +#define FIT_LANGUAGE_BRAZILIAN_PORTUGUESE ((FIT_LANGUAGE)32) +#define FIT_LANGUAGE_INDONESIAN ((FIT_LANGUAGE)33) +#define FIT_LANGUAGE_MALAYSIAN ((FIT_LANGUAGE)34) +#define FIT_LANGUAGE_VIETNAMESE ((FIT_LANGUAGE)35) +#define FIT_LANGUAGE_BURMESE ((FIT_LANGUAGE)36) +#define FIT_LANGUAGE_MONGOLIAN ((FIT_LANGUAGE)37) +#define FIT_LANGUAGE_CUSTOM ((FIT_LANGUAGE)254) +#define FIT_LANGUAGE_COUNT 39 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_0; // Bit field corresponding to language enum type (1 << language). +#define FIT_LANGUAGE_BITS_0_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_0_ENGLISH ((FIT_LANGUAGE_BITS_0)0x01) +#define FIT_LANGUAGE_BITS_0_FRENCH ((FIT_LANGUAGE_BITS_0)0x02) +#define FIT_LANGUAGE_BITS_0_ITALIAN ((FIT_LANGUAGE_BITS_0)0x04) +#define FIT_LANGUAGE_BITS_0_GERMAN ((FIT_LANGUAGE_BITS_0)0x08) +#define FIT_LANGUAGE_BITS_0_SPANISH ((FIT_LANGUAGE_BITS_0)0x10) +#define FIT_LANGUAGE_BITS_0_CROATIAN ((FIT_LANGUAGE_BITS_0)0x20) +#define FIT_LANGUAGE_BITS_0_CZECH ((FIT_LANGUAGE_BITS_0)0x40) +#define FIT_LANGUAGE_BITS_0_DANISH ((FIT_LANGUAGE_BITS_0)0x80) +#define FIT_LANGUAGE_BITS_0_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_1; +#define FIT_LANGUAGE_BITS_1_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_1_DUTCH ((FIT_LANGUAGE_BITS_1)0x01) +#define FIT_LANGUAGE_BITS_1_FINNISH ((FIT_LANGUAGE_BITS_1)0x02) +#define FIT_LANGUAGE_BITS_1_GREEK ((FIT_LANGUAGE_BITS_1)0x04) +#define FIT_LANGUAGE_BITS_1_HUNGARIAN ((FIT_LANGUAGE_BITS_1)0x08) +#define FIT_LANGUAGE_BITS_1_NORWEGIAN ((FIT_LANGUAGE_BITS_1)0x10) +#define FIT_LANGUAGE_BITS_1_POLISH ((FIT_LANGUAGE_BITS_1)0x20) +#define FIT_LANGUAGE_BITS_1_PORTUGUESE ((FIT_LANGUAGE_BITS_1)0x40) +#define FIT_LANGUAGE_BITS_1_SLOVAKIAN ((FIT_LANGUAGE_BITS_1)0x80) +#define FIT_LANGUAGE_BITS_1_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_2; +#define FIT_LANGUAGE_BITS_2_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_2_SLOVENIAN ((FIT_LANGUAGE_BITS_2)0x01) +#define FIT_LANGUAGE_BITS_2_SWEDISH ((FIT_LANGUAGE_BITS_2)0x02) +#define FIT_LANGUAGE_BITS_2_RUSSIAN ((FIT_LANGUAGE_BITS_2)0x04) +#define FIT_LANGUAGE_BITS_2_TURKISH ((FIT_LANGUAGE_BITS_2)0x08) +#define FIT_LANGUAGE_BITS_2_LATVIAN ((FIT_LANGUAGE_BITS_2)0x10) +#define FIT_LANGUAGE_BITS_2_UKRAINIAN ((FIT_LANGUAGE_BITS_2)0x20) +#define FIT_LANGUAGE_BITS_2_ARABIC ((FIT_LANGUAGE_BITS_2)0x40) +#define FIT_LANGUAGE_BITS_2_FARSI ((FIT_LANGUAGE_BITS_2)0x80) +#define FIT_LANGUAGE_BITS_2_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_3; +#define FIT_LANGUAGE_BITS_3_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_3_BULGARIAN ((FIT_LANGUAGE_BITS_3)0x01) +#define FIT_LANGUAGE_BITS_3_ROMANIAN ((FIT_LANGUAGE_BITS_3)0x02) +#define FIT_LANGUAGE_BITS_3_CHINESE ((FIT_LANGUAGE_BITS_3)0x04) +#define FIT_LANGUAGE_BITS_3_JAPANESE ((FIT_LANGUAGE_BITS_3)0x08) +#define FIT_LANGUAGE_BITS_3_KOREAN ((FIT_LANGUAGE_BITS_3)0x10) +#define FIT_LANGUAGE_BITS_3_TAIWANESE ((FIT_LANGUAGE_BITS_3)0x20) +#define FIT_LANGUAGE_BITS_3_THAI ((FIT_LANGUAGE_BITS_3)0x40) +#define FIT_LANGUAGE_BITS_3_HEBREW ((FIT_LANGUAGE_BITS_3)0x80) +#define FIT_LANGUAGE_BITS_3_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_4; +#define FIT_LANGUAGE_BITS_4_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_4_BRAZILIAN_PORTUGUESE ((FIT_LANGUAGE_BITS_4)0x01) +#define FIT_LANGUAGE_BITS_4_INDONESIAN ((FIT_LANGUAGE_BITS_4)0x02) +#define FIT_LANGUAGE_BITS_4_MALAYSIAN ((FIT_LANGUAGE_BITS_4)0x04) +#define FIT_LANGUAGE_BITS_4_VIETNAMESE ((FIT_LANGUAGE_BITS_4)0x08) +#define FIT_LANGUAGE_BITS_4_BURMESE ((FIT_LANGUAGE_BITS_4)0x10) +#define FIT_LANGUAGE_BITS_4_MONGOLIAN ((FIT_LANGUAGE_BITS_4)0x20) +#define FIT_LANGUAGE_BITS_4_COUNT 6 + +typedef FIT_ENUM FIT_TIME_ZONE; +#define FIT_TIME_ZONE_INVALID FIT_ENUM_INVALID +#define FIT_TIME_ZONE_ALMATY ((FIT_TIME_ZONE)0) +#define FIT_TIME_ZONE_BANGKOK ((FIT_TIME_ZONE)1) +#define FIT_TIME_ZONE_BOMBAY ((FIT_TIME_ZONE)2) +#define FIT_TIME_ZONE_BRASILIA ((FIT_TIME_ZONE)3) +#define FIT_TIME_ZONE_CAIRO ((FIT_TIME_ZONE)4) +#define FIT_TIME_ZONE_CAPE_VERDE_IS ((FIT_TIME_ZONE)5) +#define FIT_TIME_ZONE_DARWIN ((FIT_TIME_ZONE)6) +#define FIT_TIME_ZONE_ENIWETOK ((FIT_TIME_ZONE)7) +#define FIT_TIME_ZONE_FIJI ((FIT_TIME_ZONE)8) +#define FIT_TIME_ZONE_HONG_KONG ((FIT_TIME_ZONE)9) +#define FIT_TIME_ZONE_ISLAMABAD ((FIT_TIME_ZONE)10) +#define FIT_TIME_ZONE_KABUL ((FIT_TIME_ZONE)11) +#define FIT_TIME_ZONE_MAGADAN ((FIT_TIME_ZONE)12) +#define FIT_TIME_ZONE_MID_ATLANTIC ((FIT_TIME_ZONE)13) +#define FIT_TIME_ZONE_MOSCOW ((FIT_TIME_ZONE)14) +#define FIT_TIME_ZONE_MUSCAT ((FIT_TIME_ZONE)15) +#define FIT_TIME_ZONE_NEWFOUNDLAND ((FIT_TIME_ZONE)16) +#define FIT_TIME_ZONE_SAMOA ((FIT_TIME_ZONE)17) +#define FIT_TIME_ZONE_SYDNEY ((FIT_TIME_ZONE)18) +#define FIT_TIME_ZONE_TEHRAN ((FIT_TIME_ZONE)19) +#define FIT_TIME_ZONE_TOKYO ((FIT_TIME_ZONE)20) +#define FIT_TIME_ZONE_US_ALASKA ((FIT_TIME_ZONE)21) +#define FIT_TIME_ZONE_US_ATLANTIC ((FIT_TIME_ZONE)22) +#define FIT_TIME_ZONE_US_CENTRAL ((FIT_TIME_ZONE)23) +#define FIT_TIME_ZONE_US_EASTERN ((FIT_TIME_ZONE)24) +#define FIT_TIME_ZONE_US_HAWAII ((FIT_TIME_ZONE)25) +#define FIT_TIME_ZONE_US_MOUNTAIN ((FIT_TIME_ZONE)26) +#define FIT_TIME_ZONE_US_PACIFIC ((FIT_TIME_ZONE)27) +#define FIT_TIME_ZONE_OTHER ((FIT_TIME_ZONE)28) +#define FIT_TIME_ZONE_AUCKLAND ((FIT_TIME_ZONE)29) +#define FIT_TIME_ZONE_KATHMANDU ((FIT_TIME_ZONE)30) +#define FIT_TIME_ZONE_EUROPE_WESTERN_WET ((FIT_TIME_ZONE)31) +#define FIT_TIME_ZONE_EUROPE_CENTRAL_CET ((FIT_TIME_ZONE)32) +#define FIT_TIME_ZONE_EUROPE_EASTERN_EET ((FIT_TIME_ZONE)33) +#define FIT_TIME_ZONE_JAKARTA ((FIT_TIME_ZONE)34) +#define FIT_TIME_ZONE_PERTH ((FIT_TIME_ZONE)35) +#define FIT_TIME_ZONE_ADELAIDE ((FIT_TIME_ZONE)36) +#define FIT_TIME_ZONE_BRISBANE ((FIT_TIME_ZONE)37) +#define FIT_TIME_ZONE_TASMANIA ((FIT_TIME_ZONE)38) +#define FIT_TIME_ZONE_ICELAND ((FIT_TIME_ZONE)39) +#define FIT_TIME_ZONE_AMSTERDAM ((FIT_TIME_ZONE)40) +#define FIT_TIME_ZONE_ATHENS ((FIT_TIME_ZONE)41) +#define FIT_TIME_ZONE_BARCELONA ((FIT_TIME_ZONE)42) +#define FIT_TIME_ZONE_BERLIN ((FIT_TIME_ZONE)43) +#define FIT_TIME_ZONE_BRUSSELS ((FIT_TIME_ZONE)44) +#define FIT_TIME_ZONE_BUDAPEST ((FIT_TIME_ZONE)45) +#define FIT_TIME_ZONE_COPENHAGEN ((FIT_TIME_ZONE)46) +#define FIT_TIME_ZONE_DUBLIN ((FIT_TIME_ZONE)47) +#define FIT_TIME_ZONE_HELSINKI ((FIT_TIME_ZONE)48) +#define FIT_TIME_ZONE_LISBON ((FIT_TIME_ZONE)49) +#define FIT_TIME_ZONE_LONDON ((FIT_TIME_ZONE)50) +#define FIT_TIME_ZONE_MADRID ((FIT_TIME_ZONE)51) +#define FIT_TIME_ZONE_MUNICH ((FIT_TIME_ZONE)52) +#define FIT_TIME_ZONE_OSLO ((FIT_TIME_ZONE)53) +#define FIT_TIME_ZONE_PARIS ((FIT_TIME_ZONE)54) +#define FIT_TIME_ZONE_PRAGUE ((FIT_TIME_ZONE)55) +#define FIT_TIME_ZONE_REYKJAVIK ((FIT_TIME_ZONE)56) +#define FIT_TIME_ZONE_ROME ((FIT_TIME_ZONE)57) +#define FIT_TIME_ZONE_STOCKHOLM ((FIT_TIME_ZONE)58) +#define FIT_TIME_ZONE_VIENNA ((FIT_TIME_ZONE)59) +#define FIT_TIME_ZONE_WARSAW ((FIT_TIME_ZONE)60) +#define FIT_TIME_ZONE_ZURICH ((FIT_TIME_ZONE)61) +#define FIT_TIME_ZONE_QUEBEC ((FIT_TIME_ZONE)62) +#define FIT_TIME_ZONE_ONTARIO ((FIT_TIME_ZONE)63) +#define FIT_TIME_ZONE_MANITOBA ((FIT_TIME_ZONE)64) +#define FIT_TIME_ZONE_SASKATCHEWAN ((FIT_TIME_ZONE)65) +#define FIT_TIME_ZONE_ALBERTA ((FIT_TIME_ZONE)66) +#define FIT_TIME_ZONE_BRITISH_COLUMBIA ((FIT_TIME_ZONE)67) +#define FIT_TIME_ZONE_BOISE ((FIT_TIME_ZONE)68) +#define FIT_TIME_ZONE_BOSTON ((FIT_TIME_ZONE)69) +#define FIT_TIME_ZONE_CHICAGO ((FIT_TIME_ZONE)70) +#define FIT_TIME_ZONE_DALLAS ((FIT_TIME_ZONE)71) +#define FIT_TIME_ZONE_DENVER ((FIT_TIME_ZONE)72) +#define FIT_TIME_ZONE_KANSAS_CITY ((FIT_TIME_ZONE)73) +#define FIT_TIME_ZONE_LAS_VEGAS ((FIT_TIME_ZONE)74) +#define FIT_TIME_ZONE_LOS_ANGELES ((FIT_TIME_ZONE)75) +#define FIT_TIME_ZONE_MIAMI ((FIT_TIME_ZONE)76) +#define FIT_TIME_ZONE_MINNEAPOLIS ((FIT_TIME_ZONE)77) +#define FIT_TIME_ZONE_NEW_YORK ((FIT_TIME_ZONE)78) +#define FIT_TIME_ZONE_NEW_ORLEANS ((FIT_TIME_ZONE)79) +#define FIT_TIME_ZONE_PHOENIX ((FIT_TIME_ZONE)80) +#define FIT_TIME_ZONE_SANTA_FE ((FIT_TIME_ZONE)81) +#define FIT_TIME_ZONE_SEATTLE ((FIT_TIME_ZONE)82) +#define FIT_TIME_ZONE_WASHINGTON_DC ((FIT_TIME_ZONE)83) +#define FIT_TIME_ZONE_US_ARIZONA ((FIT_TIME_ZONE)84) +#define FIT_TIME_ZONE_CHITA ((FIT_TIME_ZONE)85) +#define FIT_TIME_ZONE_EKATERINBURG ((FIT_TIME_ZONE)86) +#define FIT_TIME_ZONE_IRKUTSK ((FIT_TIME_ZONE)87) +#define FIT_TIME_ZONE_KALININGRAD ((FIT_TIME_ZONE)88) +#define FIT_TIME_ZONE_KRASNOYARSK ((FIT_TIME_ZONE)89) +#define FIT_TIME_ZONE_NOVOSIBIRSK ((FIT_TIME_ZONE)90) +#define FIT_TIME_ZONE_PETROPAVLOVSK_KAMCHATSKIY ((FIT_TIME_ZONE)91) +#define FIT_TIME_ZONE_SAMARA ((FIT_TIME_ZONE)92) +#define FIT_TIME_ZONE_VLADIVOSTOK ((FIT_TIME_ZONE)93) +#define FIT_TIME_ZONE_MEXICO_CENTRAL ((FIT_TIME_ZONE)94) +#define FIT_TIME_ZONE_MEXICO_MOUNTAIN ((FIT_TIME_ZONE)95) +#define FIT_TIME_ZONE_MEXICO_PACIFIC ((FIT_TIME_ZONE)96) +#define FIT_TIME_ZONE_CAPE_TOWN ((FIT_TIME_ZONE)97) +#define FIT_TIME_ZONE_WINKHOEK ((FIT_TIME_ZONE)98) +#define FIT_TIME_ZONE_LAGOS ((FIT_TIME_ZONE)99) +#define FIT_TIME_ZONE_RIYAHD ((FIT_TIME_ZONE)100) +#define FIT_TIME_ZONE_VENEZUELA ((FIT_TIME_ZONE)101) +#define FIT_TIME_ZONE_AUSTRALIA_LH ((FIT_TIME_ZONE)102) +#define FIT_TIME_ZONE_SANTIAGO ((FIT_TIME_ZONE)103) +#define FIT_TIME_ZONE_MANUAL ((FIT_TIME_ZONE)253) +#define FIT_TIME_ZONE_AUTOMATIC ((FIT_TIME_ZONE)254) +#define FIT_TIME_ZONE_COUNT 106 + +typedef FIT_ENUM FIT_DISPLAY_MEASURE; +#define FIT_DISPLAY_MEASURE_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_MEASURE_METRIC ((FIT_DISPLAY_MEASURE)0) +#define FIT_DISPLAY_MEASURE_STATUTE ((FIT_DISPLAY_MEASURE)1) +#define FIT_DISPLAY_MEASURE_NAUTICAL ((FIT_DISPLAY_MEASURE)2) +#define FIT_DISPLAY_MEASURE_COUNT 3 + +typedef FIT_ENUM FIT_DISPLAY_HEART; +#define FIT_DISPLAY_HEART_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_HEART_BPM ((FIT_DISPLAY_HEART)0) +#define FIT_DISPLAY_HEART_MAX ((FIT_DISPLAY_HEART)1) +#define FIT_DISPLAY_HEART_RESERVE ((FIT_DISPLAY_HEART)2) +#define FIT_DISPLAY_HEART_COUNT 3 + +typedef FIT_ENUM FIT_DISPLAY_POWER; +#define FIT_DISPLAY_POWER_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_POWER_WATTS ((FIT_DISPLAY_POWER)0) +#define FIT_DISPLAY_POWER_PERCENT_FTP ((FIT_DISPLAY_POWER)1) +#define FIT_DISPLAY_POWER_COUNT 2 + +typedef FIT_ENUM FIT_DISPLAY_POSITION; +#define FIT_DISPLAY_POSITION_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_POSITION_DEGREE ((FIT_DISPLAY_POSITION)0) // dd.dddddd +#define FIT_DISPLAY_POSITION_DEGREE_MINUTE ((FIT_DISPLAY_POSITION)1) // dddmm.mmm +#define FIT_DISPLAY_POSITION_DEGREE_MINUTE_SECOND ((FIT_DISPLAY_POSITION)2) // dddmmss +#define FIT_DISPLAY_POSITION_AUSTRIAN_GRID ((FIT_DISPLAY_POSITION)3) // Austrian Grid (BMN) +#define FIT_DISPLAY_POSITION_BRITISH_GRID ((FIT_DISPLAY_POSITION)4) // British National Grid +#define FIT_DISPLAY_POSITION_DUTCH_GRID ((FIT_DISPLAY_POSITION)5) // Dutch grid system +#define FIT_DISPLAY_POSITION_HUNGARIAN_GRID ((FIT_DISPLAY_POSITION)6) // Hungarian grid system +#define FIT_DISPLAY_POSITION_FINNISH_GRID ((FIT_DISPLAY_POSITION)7) // Finnish grid system Zone3 KKJ27 +#define FIT_DISPLAY_POSITION_GERMAN_GRID ((FIT_DISPLAY_POSITION)8) // Gausss Krueger (German) +#define FIT_DISPLAY_POSITION_ICELANDIC_GRID ((FIT_DISPLAY_POSITION)9) // Icelandic Grid +#define FIT_DISPLAY_POSITION_INDONESIAN_EQUATORIAL ((FIT_DISPLAY_POSITION)10) // Indonesian Equatorial LCO +#define FIT_DISPLAY_POSITION_INDONESIAN_IRIAN ((FIT_DISPLAY_POSITION)11) // Indonesian Irian LCO +#define FIT_DISPLAY_POSITION_INDONESIAN_SOUTHERN ((FIT_DISPLAY_POSITION)12) // Indonesian Southern LCO +#define FIT_DISPLAY_POSITION_INDIA_ZONE_0 ((FIT_DISPLAY_POSITION)13) // India zone 0 +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IA ((FIT_DISPLAY_POSITION)14) // India zone IA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IB ((FIT_DISPLAY_POSITION)15) // India zone IB +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIA ((FIT_DISPLAY_POSITION)16) // India zone IIA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIB ((FIT_DISPLAY_POSITION)17) // India zone IIB +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIA ((FIT_DISPLAY_POSITION)18) // India zone IIIA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIB ((FIT_DISPLAY_POSITION)19) // India zone IIIB +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IVA ((FIT_DISPLAY_POSITION)20) // India zone IVA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IVB ((FIT_DISPLAY_POSITION)21) // India zone IVB +#define FIT_DISPLAY_POSITION_IRISH_TRANSVERSE ((FIT_DISPLAY_POSITION)22) // Irish Transverse Mercator +#define FIT_DISPLAY_POSITION_IRISH_GRID ((FIT_DISPLAY_POSITION)23) // Irish Grid +#define FIT_DISPLAY_POSITION_LORAN ((FIT_DISPLAY_POSITION)24) // Loran TD +#define FIT_DISPLAY_POSITION_MAIDENHEAD_GRID ((FIT_DISPLAY_POSITION)25) // Maidenhead grid system +#define FIT_DISPLAY_POSITION_MGRS_GRID ((FIT_DISPLAY_POSITION)26) // MGRS grid system +#define FIT_DISPLAY_POSITION_NEW_ZEALAND_GRID ((FIT_DISPLAY_POSITION)27) // New Zealand grid system +#define FIT_DISPLAY_POSITION_NEW_ZEALAND_TRANSVERSE ((FIT_DISPLAY_POSITION)28) // New Zealand Transverse Mercator +#define FIT_DISPLAY_POSITION_QATAR_GRID ((FIT_DISPLAY_POSITION)29) // Qatar National Grid +#define FIT_DISPLAY_POSITION_MODIFIED_SWEDISH_GRID ((FIT_DISPLAY_POSITION)30) // Modified RT-90 (Sweden) +#define FIT_DISPLAY_POSITION_SWEDISH_GRID ((FIT_DISPLAY_POSITION)31) // RT-90 (Sweden) +#define FIT_DISPLAY_POSITION_SOUTH_AFRICAN_GRID ((FIT_DISPLAY_POSITION)32) // South African Grid +#define FIT_DISPLAY_POSITION_SWISS_GRID ((FIT_DISPLAY_POSITION)33) // Swiss CH-1903 grid +#define FIT_DISPLAY_POSITION_TAIWAN_GRID ((FIT_DISPLAY_POSITION)34) // Taiwan Grid +#define FIT_DISPLAY_POSITION_UNITED_STATES_GRID ((FIT_DISPLAY_POSITION)35) // United States National Grid +#define FIT_DISPLAY_POSITION_UTM_UPS_GRID ((FIT_DISPLAY_POSITION)36) // UTM/UPS grid system +#define FIT_DISPLAY_POSITION_WEST_MALAYAN ((FIT_DISPLAY_POSITION)37) // West Malayan RSO +#define FIT_DISPLAY_POSITION_BORNEO_RSO ((FIT_DISPLAY_POSITION)38) // Borneo RSO +#define FIT_DISPLAY_POSITION_ESTONIAN_GRID ((FIT_DISPLAY_POSITION)39) // Estonian grid system +#define FIT_DISPLAY_POSITION_LATVIAN_GRID ((FIT_DISPLAY_POSITION)40) // Latvian Transverse Mercator +#define FIT_DISPLAY_POSITION_SWEDISH_REF_99_GRID ((FIT_DISPLAY_POSITION)41) // Reference Grid 99 TM (Swedish) +#define FIT_DISPLAY_POSITION_COUNT 42 + +typedef FIT_ENUM FIT_SWITCH; +#define FIT_SWITCH_INVALID FIT_ENUM_INVALID +#define FIT_SWITCH_OFF ((FIT_SWITCH)0) +#define FIT_SWITCH_ON ((FIT_SWITCH)1) +#define FIT_SWITCH_AUTO ((FIT_SWITCH)2) +#define FIT_SWITCH_COUNT 3 + +typedef FIT_ENUM FIT_SPORT; +#define FIT_SPORT_INVALID FIT_ENUM_INVALID +#define FIT_SPORT_GENERIC ((FIT_SPORT)0) +#define FIT_SPORT_RUNNING ((FIT_SPORT)1) +#define FIT_SPORT_CYCLING ((FIT_SPORT)2) +#define FIT_SPORT_TRANSITION ((FIT_SPORT)3) // Mulitsport transition +#define FIT_SPORT_FITNESS_EQUIPMENT ((FIT_SPORT)4) +#define FIT_SPORT_SWIMMING ((FIT_SPORT)5) +#define FIT_SPORT_BASKETBALL ((FIT_SPORT)6) +#define FIT_SPORT_SOCCER ((FIT_SPORT)7) +#define FIT_SPORT_TENNIS ((FIT_SPORT)8) +#define FIT_SPORT_AMERICAN_FOOTBALL ((FIT_SPORT)9) +#define FIT_SPORT_TRAINING ((FIT_SPORT)10) +#define FIT_SPORT_WALKING ((FIT_SPORT)11) +#define FIT_SPORT_CROSS_COUNTRY_SKIING ((FIT_SPORT)12) +#define FIT_SPORT_ALPINE_SKIING ((FIT_SPORT)13) +#define FIT_SPORT_SNOWBOARDING ((FIT_SPORT)14) +#define FIT_SPORT_ROWING ((FIT_SPORT)15) +#define FIT_SPORT_MOUNTAINEERING ((FIT_SPORT)16) +#define FIT_SPORT_HIKING ((FIT_SPORT)17) +#define FIT_SPORT_MULTISPORT ((FIT_SPORT)18) +#define FIT_SPORT_PADDLING ((FIT_SPORT)19) +#define FIT_SPORT_FLYING ((FIT_SPORT)20) +#define FIT_SPORT_E_BIKING ((FIT_SPORT)21) +#define FIT_SPORT_MOTORCYCLING ((FIT_SPORT)22) +#define FIT_SPORT_BOATING ((FIT_SPORT)23) +#define FIT_SPORT_DRIVING ((FIT_SPORT)24) +#define FIT_SPORT_GOLF ((FIT_SPORT)25) +#define FIT_SPORT_HANG_GLIDING ((FIT_SPORT)26) +#define FIT_SPORT_HORSEBACK_RIDING ((FIT_SPORT)27) +#define FIT_SPORT_HUNTING ((FIT_SPORT)28) +#define FIT_SPORT_FISHING ((FIT_SPORT)29) +#define FIT_SPORT_INLINE_SKATING ((FIT_SPORT)30) +#define FIT_SPORT_ROCK_CLIMBING ((FIT_SPORT)31) +#define FIT_SPORT_SAILING ((FIT_SPORT)32) +#define FIT_SPORT_ICE_SKATING ((FIT_SPORT)33) +#define FIT_SPORT_SKY_DIVING ((FIT_SPORT)34) +#define FIT_SPORT_SNOWSHOEING ((FIT_SPORT)35) +#define FIT_SPORT_SNOWMOBILING ((FIT_SPORT)36) +#define FIT_SPORT_STAND_UP_PADDLEBOARDING ((FIT_SPORT)37) +#define FIT_SPORT_SURFING ((FIT_SPORT)38) +#define FIT_SPORT_WAKEBOARDING ((FIT_SPORT)39) +#define FIT_SPORT_WATER_SKIING ((FIT_SPORT)40) +#define FIT_SPORT_KAYAKING ((FIT_SPORT)41) +#define FIT_SPORT_RAFTING ((FIT_SPORT)42) +#define FIT_SPORT_WINDSURFING ((FIT_SPORT)43) +#define FIT_SPORT_KITESURFING ((FIT_SPORT)44) +#define FIT_SPORT_TACTICAL ((FIT_SPORT)45) +#define FIT_SPORT_JUMPMASTER ((FIT_SPORT)46) +#define FIT_SPORT_BOXING ((FIT_SPORT)47) +#define FIT_SPORT_FLOOR_CLIMBING ((FIT_SPORT)48) +#define FIT_SPORT_DIVING ((FIT_SPORT)53) +#define FIT_SPORT_ALL ((FIT_SPORT)254) // All is for goals only to include all sports. +#define FIT_SPORT_COUNT 51 + +typedef FIT_UINT8Z FIT_SPORT_BITS_0; // Bit field corresponding to sport enum type (1 << sport). +#define FIT_SPORT_BITS_0_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_0_GENERIC ((FIT_SPORT_BITS_0)0x01) +#define FIT_SPORT_BITS_0_RUNNING ((FIT_SPORT_BITS_0)0x02) +#define FIT_SPORT_BITS_0_CYCLING ((FIT_SPORT_BITS_0)0x04) +#define FIT_SPORT_BITS_0_TRANSITION ((FIT_SPORT_BITS_0)0x08) // Mulitsport transition +#define FIT_SPORT_BITS_0_FITNESS_EQUIPMENT ((FIT_SPORT_BITS_0)0x10) +#define FIT_SPORT_BITS_0_SWIMMING ((FIT_SPORT_BITS_0)0x20) +#define FIT_SPORT_BITS_0_BASKETBALL ((FIT_SPORT_BITS_0)0x40) +#define FIT_SPORT_BITS_0_SOCCER ((FIT_SPORT_BITS_0)0x80) +#define FIT_SPORT_BITS_0_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_1; // Bit field corresponding to sport enum type (1 << (sport-8)). +#define FIT_SPORT_BITS_1_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_1_TENNIS ((FIT_SPORT_BITS_1)0x01) +#define FIT_SPORT_BITS_1_AMERICAN_FOOTBALL ((FIT_SPORT_BITS_1)0x02) +#define FIT_SPORT_BITS_1_TRAINING ((FIT_SPORT_BITS_1)0x04) +#define FIT_SPORT_BITS_1_WALKING ((FIT_SPORT_BITS_1)0x08) +#define FIT_SPORT_BITS_1_CROSS_COUNTRY_SKIING ((FIT_SPORT_BITS_1)0x10) +#define FIT_SPORT_BITS_1_ALPINE_SKIING ((FIT_SPORT_BITS_1)0x20) +#define FIT_SPORT_BITS_1_SNOWBOARDING ((FIT_SPORT_BITS_1)0x40) +#define FIT_SPORT_BITS_1_ROWING ((FIT_SPORT_BITS_1)0x80) +#define FIT_SPORT_BITS_1_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_2; // Bit field corresponding to sport enum type (1 << (sport-16)). +#define FIT_SPORT_BITS_2_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_2_MOUNTAINEERING ((FIT_SPORT_BITS_2)0x01) +#define FIT_SPORT_BITS_2_HIKING ((FIT_SPORT_BITS_2)0x02) +#define FIT_SPORT_BITS_2_MULTISPORT ((FIT_SPORT_BITS_2)0x04) +#define FIT_SPORT_BITS_2_PADDLING ((FIT_SPORT_BITS_2)0x08) +#define FIT_SPORT_BITS_2_FLYING ((FIT_SPORT_BITS_2)0x10) +#define FIT_SPORT_BITS_2_E_BIKING ((FIT_SPORT_BITS_2)0x20) +#define FIT_SPORT_BITS_2_MOTORCYCLING ((FIT_SPORT_BITS_2)0x40) +#define FIT_SPORT_BITS_2_BOATING ((FIT_SPORT_BITS_2)0x80) +#define FIT_SPORT_BITS_2_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_3; // Bit field corresponding to sport enum type (1 << (sport-24)). +#define FIT_SPORT_BITS_3_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_3_DRIVING ((FIT_SPORT_BITS_3)0x01) +#define FIT_SPORT_BITS_3_GOLF ((FIT_SPORT_BITS_3)0x02) +#define FIT_SPORT_BITS_3_HANG_GLIDING ((FIT_SPORT_BITS_3)0x04) +#define FIT_SPORT_BITS_3_HORSEBACK_RIDING ((FIT_SPORT_BITS_3)0x08) +#define FIT_SPORT_BITS_3_HUNTING ((FIT_SPORT_BITS_3)0x10) +#define FIT_SPORT_BITS_3_FISHING ((FIT_SPORT_BITS_3)0x20) +#define FIT_SPORT_BITS_3_INLINE_SKATING ((FIT_SPORT_BITS_3)0x40) +#define FIT_SPORT_BITS_3_ROCK_CLIMBING ((FIT_SPORT_BITS_3)0x80) +#define FIT_SPORT_BITS_3_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_4; // Bit field corresponding to sport enum type (1 << (sport-32)). +#define FIT_SPORT_BITS_4_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_4_SAILING ((FIT_SPORT_BITS_4)0x01) +#define FIT_SPORT_BITS_4_ICE_SKATING ((FIT_SPORT_BITS_4)0x02) +#define FIT_SPORT_BITS_4_SKY_DIVING ((FIT_SPORT_BITS_4)0x04) +#define FIT_SPORT_BITS_4_SNOWSHOEING ((FIT_SPORT_BITS_4)0x08) +#define FIT_SPORT_BITS_4_SNOWMOBILING ((FIT_SPORT_BITS_4)0x10) +#define FIT_SPORT_BITS_4_STAND_UP_PADDLEBOARDING ((FIT_SPORT_BITS_4)0x20) +#define FIT_SPORT_BITS_4_SURFING ((FIT_SPORT_BITS_4)0x40) +#define FIT_SPORT_BITS_4_WAKEBOARDING ((FIT_SPORT_BITS_4)0x80) +#define FIT_SPORT_BITS_4_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_5; // Bit field corresponding to sport enum type (1 << (sport-40)). +#define FIT_SPORT_BITS_5_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_5_WATER_SKIING ((FIT_SPORT_BITS_5)0x01) +#define FIT_SPORT_BITS_5_KAYAKING ((FIT_SPORT_BITS_5)0x02) +#define FIT_SPORT_BITS_5_RAFTING ((FIT_SPORT_BITS_5)0x04) +#define FIT_SPORT_BITS_5_WINDSURFING ((FIT_SPORT_BITS_5)0x08) +#define FIT_SPORT_BITS_5_KITESURFING ((FIT_SPORT_BITS_5)0x10) +#define FIT_SPORT_BITS_5_TACTICAL ((FIT_SPORT_BITS_5)0x20) +#define FIT_SPORT_BITS_5_JUMPMASTER ((FIT_SPORT_BITS_5)0x40) +#define FIT_SPORT_BITS_5_BOXING ((FIT_SPORT_BITS_5)0x80) +#define FIT_SPORT_BITS_5_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_6; // Bit field corresponding to sport enum type (1 << (sport-48)). +#define FIT_SPORT_BITS_6_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_6_FLOOR_CLIMBING ((FIT_SPORT_BITS_6)0x01) +#define FIT_SPORT_BITS_6_COUNT 1 + +typedef FIT_ENUM FIT_SUB_SPORT; +#define FIT_SUB_SPORT_INVALID FIT_ENUM_INVALID +#define FIT_SUB_SPORT_GENERIC ((FIT_SUB_SPORT)0) +#define FIT_SUB_SPORT_TREADMILL ((FIT_SUB_SPORT)1) // Run/Fitness Equipment +#define FIT_SUB_SPORT_STREET ((FIT_SUB_SPORT)2) // Run +#define FIT_SUB_SPORT_TRAIL ((FIT_SUB_SPORT)3) // Run +#define FIT_SUB_SPORT_TRACK ((FIT_SUB_SPORT)4) // Run +#define FIT_SUB_SPORT_SPIN ((FIT_SUB_SPORT)5) // Cycling +#define FIT_SUB_SPORT_INDOOR_CYCLING ((FIT_SUB_SPORT)6) // Cycling/Fitness Equipment +#define FIT_SUB_SPORT_ROAD ((FIT_SUB_SPORT)7) // Cycling +#define FIT_SUB_SPORT_MOUNTAIN ((FIT_SUB_SPORT)8) // Cycling +#define FIT_SUB_SPORT_DOWNHILL ((FIT_SUB_SPORT)9) // Cycling +#define FIT_SUB_SPORT_RECUMBENT ((FIT_SUB_SPORT)10) // Cycling +#define FIT_SUB_SPORT_CYCLOCROSS ((FIT_SUB_SPORT)11) // Cycling +#define FIT_SUB_SPORT_HAND_CYCLING ((FIT_SUB_SPORT)12) // Cycling +#define FIT_SUB_SPORT_TRACK_CYCLING ((FIT_SUB_SPORT)13) // Cycling +#define FIT_SUB_SPORT_INDOOR_ROWING ((FIT_SUB_SPORT)14) // Fitness Equipment +#define FIT_SUB_SPORT_ELLIPTICAL ((FIT_SUB_SPORT)15) // Fitness Equipment +#define FIT_SUB_SPORT_STAIR_CLIMBING ((FIT_SUB_SPORT)16) // Fitness Equipment +#define FIT_SUB_SPORT_LAP_SWIMMING ((FIT_SUB_SPORT)17) // Swimming +#define FIT_SUB_SPORT_OPEN_WATER ((FIT_SUB_SPORT)18) // Swimming +#define FIT_SUB_SPORT_FLEXIBILITY_TRAINING ((FIT_SUB_SPORT)19) // Training +#define FIT_SUB_SPORT_STRENGTH_TRAINING ((FIT_SUB_SPORT)20) // Training +#define FIT_SUB_SPORT_WARM_UP ((FIT_SUB_SPORT)21) // Tennis +#define FIT_SUB_SPORT_MATCH ((FIT_SUB_SPORT)22) // Tennis +#define FIT_SUB_SPORT_EXERCISE ((FIT_SUB_SPORT)23) // Tennis +#define FIT_SUB_SPORT_CHALLENGE ((FIT_SUB_SPORT)24) +#define FIT_SUB_SPORT_INDOOR_SKIING ((FIT_SUB_SPORT)25) // Fitness Equipment +#define FIT_SUB_SPORT_CARDIO_TRAINING ((FIT_SUB_SPORT)26) // Training +#define FIT_SUB_SPORT_INDOOR_WALKING ((FIT_SUB_SPORT)27) // Walking/Fitness Equipment +#define FIT_SUB_SPORT_E_BIKE_FITNESS ((FIT_SUB_SPORT)28) // E-Biking +#define FIT_SUB_SPORT_BMX ((FIT_SUB_SPORT)29) // Cycling +#define FIT_SUB_SPORT_CASUAL_WALKING ((FIT_SUB_SPORT)30) // Walking +#define FIT_SUB_SPORT_SPEED_WALKING ((FIT_SUB_SPORT)31) // Walking +#define FIT_SUB_SPORT_BIKE_TO_RUN_TRANSITION ((FIT_SUB_SPORT)32) // Transition +#define FIT_SUB_SPORT_RUN_TO_BIKE_TRANSITION ((FIT_SUB_SPORT)33) // Transition +#define FIT_SUB_SPORT_SWIM_TO_BIKE_TRANSITION ((FIT_SUB_SPORT)34) // Transition +#define FIT_SUB_SPORT_ATV ((FIT_SUB_SPORT)35) // Motorcycling +#define FIT_SUB_SPORT_MOTOCROSS ((FIT_SUB_SPORT)36) // Motorcycling +#define FIT_SUB_SPORT_BACKCOUNTRY ((FIT_SUB_SPORT)37) // Alpine Skiing/Snowboarding +#define FIT_SUB_SPORT_RESORT ((FIT_SUB_SPORT)38) // Alpine Skiing/Snowboarding +#define FIT_SUB_SPORT_RC_DRONE ((FIT_SUB_SPORT)39) // Flying +#define FIT_SUB_SPORT_WINGSUIT ((FIT_SUB_SPORT)40) // Flying +#define FIT_SUB_SPORT_WHITEWATER ((FIT_SUB_SPORT)41) // Kayaking/Rafting +#define FIT_SUB_SPORT_SKATE_SKIING ((FIT_SUB_SPORT)42) // Cross Country Skiing +#define FIT_SUB_SPORT_YOGA ((FIT_SUB_SPORT)43) // Training +#define FIT_SUB_SPORT_PILATES ((FIT_SUB_SPORT)44) // Fitness Equipment +#define FIT_SUB_SPORT_INDOOR_RUNNING ((FIT_SUB_SPORT)45) // Run +#define FIT_SUB_SPORT_GRAVEL_CYCLING ((FIT_SUB_SPORT)46) // Cycling +#define FIT_SUB_SPORT_E_BIKE_MOUNTAIN ((FIT_SUB_SPORT)47) // Cycling +#define FIT_SUB_SPORT_COMMUTING ((FIT_SUB_SPORT)48) // Cycling +#define FIT_SUB_SPORT_MIXED_SURFACE ((FIT_SUB_SPORT)49) // Cycling +#define FIT_SUB_SPORT_NAVIGATE ((FIT_SUB_SPORT)50) +#define FIT_SUB_SPORT_TRACK_ME ((FIT_SUB_SPORT)51) +#define FIT_SUB_SPORT_MAP ((FIT_SUB_SPORT)52) +#define FIT_SUB_SPORT_SINGLE_GAS_DIVING ((FIT_SUB_SPORT)53) // Diving +#define FIT_SUB_SPORT_MULTI_GAS_DIVING ((FIT_SUB_SPORT)54) // Diving +#define FIT_SUB_SPORT_GAUGE_DIVING ((FIT_SUB_SPORT)55) // Diving +#define FIT_SUB_SPORT_APNEA_DIVING ((FIT_SUB_SPORT)56) // Diving +#define FIT_SUB_SPORT_APNEA_HUNTING ((FIT_SUB_SPORT)57) // Diving +#define FIT_SUB_SPORT_VIRTUAL_ACTIVITY ((FIT_SUB_SPORT)58) +#define FIT_SUB_SPORT_OBSTACLE ((FIT_SUB_SPORT)59) // Used for events where participants run, crawl through mud, climb over walls, etc. +#define FIT_SUB_SPORT_BREATHING ((FIT_SUB_SPORT)62) +#define FIT_SUB_SPORT_SAIL_RACE ((FIT_SUB_SPORT)65) // Sailing +#define FIT_SUB_SPORT_ULTRA ((FIT_SUB_SPORT)67) // Ultramarathon +#define FIT_SUB_SPORT_INDOOR_CLIMBING ((FIT_SUB_SPORT)68) // Climbing +#define FIT_SUB_SPORT_BOULDERING ((FIT_SUB_SPORT)69) // Climbing +#define FIT_SUB_SPORT_ALL ((FIT_SUB_SPORT)254) +#define FIT_SUB_SPORT_COUNT 66 + +typedef FIT_ENUM FIT_SPORT_EVENT; +#define FIT_SPORT_EVENT_INVALID FIT_ENUM_INVALID +#define FIT_SPORT_EVENT_UNCATEGORIZED ((FIT_SPORT_EVENT)0) +#define FIT_SPORT_EVENT_GEOCACHING ((FIT_SPORT_EVENT)1) +#define FIT_SPORT_EVENT_FITNESS ((FIT_SPORT_EVENT)2) +#define FIT_SPORT_EVENT_RECREATION ((FIT_SPORT_EVENT)3) +#define FIT_SPORT_EVENT_RACE ((FIT_SPORT_EVENT)4) +#define FIT_SPORT_EVENT_SPECIAL_EVENT ((FIT_SPORT_EVENT)5) +#define FIT_SPORT_EVENT_TRAINING ((FIT_SPORT_EVENT)6) +#define FIT_SPORT_EVENT_TRANSPORTATION ((FIT_SPORT_EVENT)7) +#define FIT_SPORT_EVENT_TOURING ((FIT_SPORT_EVENT)8) +#define FIT_SPORT_EVENT_COUNT 9 + +typedef FIT_ENUM FIT_ACTIVITY; +#define FIT_ACTIVITY_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_MANUAL ((FIT_ACTIVITY)0) +#define FIT_ACTIVITY_AUTO_MULTI_SPORT ((FIT_ACTIVITY)1) +#define FIT_ACTIVITY_COUNT 2 + +typedef FIT_ENUM FIT_INTENSITY; +#define FIT_INTENSITY_INVALID FIT_ENUM_INVALID +#define FIT_INTENSITY_ACTIVE ((FIT_INTENSITY)0) +#define FIT_INTENSITY_REST ((FIT_INTENSITY)1) +#define FIT_INTENSITY_WARMUP ((FIT_INTENSITY)2) +#define FIT_INTENSITY_COOLDOWN ((FIT_INTENSITY)3) +#define FIT_INTENSITY_RECOVERY ((FIT_INTENSITY)4) +#define FIT_INTENSITY_INTERVAL ((FIT_INTENSITY)5) +#define FIT_INTENSITY_OTHER ((FIT_INTENSITY)6) +#define FIT_INTENSITY_COUNT 7 + +typedef FIT_ENUM FIT_SESSION_TRIGGER; +#define FIT_SESSION_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_SESSION_TRIGGER_ACTIVITY_END ((FIT_SESSION_TRIGGER)0) +#define FIT_SESSION_TRIGGER_MANUAL ((FIT_SESSION_TRIGGER)1) // User changed sport. +#define FIT_SESSION_TRIGGER_AUTO_MULTI_SPORT ((FIT_SESSION_TRIGGER)2) // Auto multi-sport feature is enabled and user pressed lap button to advance session. +#define FIT_SESSION_TRIGGER_FITNESS_EQUIPMENT ((FIT_SESSION_TRIGGER)3) // Auto sport change caused by user linking to fitness equipment. +#define FIT_SESSION_TRIGGER_COUNT 4 + +typedef FIT_ENUM FIT_AUTOLAP_TRIGGER; +#define FIT_AUTOLAP_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_AUTOLAP_TRIGGER_TIME ((FIT_AUTOLAP_TRIGGER)0) +#define FIT_AUTOLAP_TRIGGER_DISTANCE ((FIT_AUTOLAP_TRIGGER)1) +#define FIT_AUTOLAP_TRIGGER_POSITION_START ((FIT_AUTOLAP_TRIGGER)2) +#define FIT_AUTOLAP_TRIGGER_POSITION_LAP ((FIT_AUTOLAP_TRIGGER)3) +#define FIT_AUTOLAP_TRIGGER_POSITION_WAYPOINT ((FIT_AUTOLAP_TRIGGER)4) +#define FIT_AUTOLAP_TRIGGER_POSITION_MARKED ((FIT_AUTOLAP_TRIGGER)5) +#define FIT_AUTOLAP_TRIGGER_OFF ((FIT_AUTOLAP_TRIGGER)6) +#define FIT_AUTOLAP_TRIGGER_COUNT 7 + +typedef FIT_ENUM FIT_LAP_TRIGGER; +#define FIT_LAP_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_LAP_TRIGGER_MANUAL ((FIT_LAP_TRIGGER)0) +#define FIT_LAP_TRIGGER_TIME ((FIT_LAP_TRIGGER)1) +#define FIT_LAP_TRIGGER_DISTANCE ((FIT_LAP_TRIGGER)2) +#define FIT_LAP_TRIGGER_POSITION_START ((FIT_LAP_TRIGGER)3) +#define FIT_LAP_TRIGGER_POSITION_LAP ((FIT_LAP_TRIGGER)4) +#define FIT_LAP_TRIGGER_POSITION_WAYPOINT ((FIT_LAP_TRIGGER)5) +#define FIT_LAP_TRIGGER_POSITION_MARKED ((FIT_LAP_TRIGGER)6) +#define FIT_LAP_TRIGGER_SESSION_END ((FIT_LAP_TRIGGER)7) +#define FIT_LAP_TRIGGER_FITNESS_EQUIPMENT ((FIT_LAP_TRIGGER)8) +#define FIT_LAP_TRIGGER_COUNT 9 + +typedef FIT_ENUM FIT_TIME_MODE; +#define FIT_TIME_MODE_INVALID FIT_ENUM_INVALID +#define FIT_TIME_MODE_HOUR12 ((FIT_TIME_MODE)0) +#define FIT_TIME_MODE_HOUR24 ((FIT_TIME_MODE)1) // Does not use a leading zero and has a colon +#define FIT_TIME_MODE_MILITARY ((FIT_TIME_MODE)2) // Uses a leading zero and does not have a colon +#define FIT_TIME_MODE_HOUR_12_WITH_SECONDS ((FIT_TIME_MODE)3) +#define FIT_TIME_MODE_HOUR_24_WITH_SECONDS ((FIT_TIME_MODE)4) +#define FIT_TIME_MODE_UTC ((FIT_TIME_MODE)5) +#define FIT_TIME_MODE_COUNT 6 + +typedef FIT_ENUM FIT_BACKLIGHT_MODE; +#define FIT_BACKLIGHT_MODE_INVALID FIT_ENUM_INVALID +#define FIT_BACKLIGHT_MODE_OFF ((FIT_BACKLIGHT_MODE)0) +#define FIT_BACKLIGHT_MODE_MANUAL ((FIT_BACKLIGHT_MODE)1) +#define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES ((FIT_BACKLIGHT_MODE)2) +#define FIT_BACKLIGHT_MODE_AUTO_BRIGHTNESS ((FIT_BACKLIGHT_MODE)3) +#define FIT_BACKLIGHT_MODE_SMART_NOTIFICATIONS ((FIT_BACKLIGHT_MODE)4) +#define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES_NIGHT ((FIT_BACKLIGHT_MODE)5) +#define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES_AND_SMART_NOTIFICATIONS ((FIT_BACKLIGHT_MODE)6) +#define FIT_BACKLIGHT_MODE_COUNT 7 + +typedef FIT_ENUM FIT_DATE_MODE; +#define FIT_DATE_MODE_INVALID FIT_ENUM_INVALID +#define FIT_DATE_MODE_DAY_MONTH ((FIT_DATE_MODE)0) +#define FIT_DATE_MODE_MONTH_DAY ((FIT_DATE_MODE)1) +#define FIT_DATE_MODE_COUNT 2 + +typedef FIT_UINT8 FIT_BACKLIGHT_TIMEOUT; // Timeout in seconds. +#define FIT_BACKLIGHT_TIMEOUT_INVALID FIT_UINT8_INVALID +#define FIT_BACKLIGHT_TIMEOUT_INFINITE ((FIT_BACKLIGHT_TIMEOUT)0) // Backlight stays on forever. +#define FIT_BACKLIGHT_TIMEOUT_COUNT 1 + +typedef FIT_ENUM FIT_EVENT; +#define FIT_EVENT_INVALID FIT_ENUM_INVALID +#define FIT_EVENT_TIMER ((FIT_EVENT)0) // Group 0. Start / stop_all +#define FIT_EVENT_WORKOUT ((FIT_EVENT)3) // start / stop +#define FIT_EVENT_WORKOUT_STEP ((FIT_EVENT)4) // Start at beginning of workout. Stop at end of each step. +#define FIT_EVENT_POWER_DOWN ((FIT_EVENT)5) // stop_all group 0 +#define FIT_EVENT_POWER_UP ((FIT_EVENT)6) // stop_all group 0 +#define FIT_EVENT_OFF_COURSE ((FIT_EVENT)7) // start / stop group 0 +#define FIT_EVENT_SESSION ((FIT_EVENT)8) // Stop at end of each session. +#define FIT_EVENT_LAP ((FIT_EVENT)9) // Stop at end of each lap. +#define FIT_EVENT_COURSE_POINT ((FIT_EVENT)10) // marker +#define FIT_EVENT_BATTERY ((FIT_EVENT)11) // marker +#define FIT_EVENT_VIRTUAL_PARTNER_PACE ((FIT_EVENT)12) // Group 1. Start at beginning of activity if VP enabled, when VP pace is changed during activity or VP enabled mid activity. stop_disable when VP disabled. +#define FIT_EVENT_HR_HIGH_ALERT ((FIT_EVENT)13) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_HR_LOW_ALERT ((FIT_EVENT)14) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_SPEED_HIGH_ALERT ((FIT_EVENT)15) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_SPEED_LOW_ALERT ((FIT_EVENT)16) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_CAD_HIGH_ALERT ((FIT_EVENT)17) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_CAD_LOW_ALERT ((FIT_EVENT)18) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_POWER_HIGH_ALERT ((FIT_EVENT)19) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_POWER_LOW_ALERT ((FIT_EVENT)20) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_RECOVERY_HR ((FIT_EVENT)21) // marker +#define FIT_EVENT_BATTERY_LOW ((FIT_EVENT)22) // marker +#define FIT_EVENT_TIME_DURATION_ALERT ((FIT_EVENT)23) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FIT_EVENT_DISTANCE_DURATION_ALERT ((FIT_EVENT)24) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FIT_EVENT_CALORIE_DURATION_ALERT ((FIT_EVENT)25) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FIT_EVENT_ACTIVITY ((FIT_EVENT)26) // Group 1.. Stop at end of activity. +#define FIT_EVENT_FITNESS_EQUIPMENT ((FIT_EVENT)27) // marker +#define FIT_EVENT_LENGTH ((FIT_EVENT)28) // Stop at end of each length. +#define FIT_EVENT_USER_MARKER ((FIT_EVENT)32) // marker +#define FIT_EVENT_SPORT_POINT ((FIT_EVENT)33) // marker +#define FIT_EVENT_CALIBRATION ((FIT_EVENT)36) // start/stop/marker +#define FIT_EVENT_FRONT_GEAR_CHANGE ((FIT_EVENT)42) // marker +#define FIT_EVENT_REAR_GEAR_CHANGE ((FIT_EVENT)43) // marker +#define FIT_EVENT_RIDER_POSITION_CHANGE ((FIT_EVENT)44) // marker +#define FIT_EVENT_ELEV_HIGH_ALERT ((FIT_EVENT)45) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_ELEV_LOW_ALERT ((FIT_EVENT)46) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_COMM_TIMEOUT ((FIT_EVENT)47) // marker +#define FIT_EVENT_RADAR_THREAT_ALERT ((FIT_EVENT)75) // start/stop/marker +#define FIT_EVENT_COUNT 37 + +typedef FIT_ENUM FIT_EVENT_TYPE; +#define FIT_EVENT_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_EVENT_TYPE_START ((FIT_EVENT_TYPE)0) +#define FIT_EVENT_TYPE_STOP ((FIT_EVENT_TYPE)1) +#define FIT_EVENT_TYPE_CONSECUTIVE_DEPRECIATED ((FIT_EVENT_TYPE)2) +#define FIT_EVENT_TYPE_MARKER ((FIT_EVENT_TYPE)3) +#define FIT_EVENT_TYPE_STOP_ALL ((FIT_EVENT_TYPE)4) +#define FIT_EVENT_TYPE_BEGIN_DEPRECIATED ((FIT_EVENT_TYPE)5) +#define FIT_EVENT_TYPE_END_DEPRECIATED ((FIT_EVENT_TYPE)6) +#define FIT_EVENT_TYPE_END_ALL_DEPRECIATED ((FIT_EVENT_TYPE)7) +#define FIT_EVENT_TYPE_STOP_DISABLE ((FIT_EVENT_TYPE)8) +#define FIT_EVENT_TYPE_STOP_DISABLE_ALL ((FIT_EVENT_TYPE)9) +#define FIT_EVENT_TYPE_COUNT 10 + +typedef FIT_ENUM FIT_TIMER_TRIGGER; // timer event data +#define FIT_TIMER_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_TIMER_TRIGGER_MANUAL ((FIT_TIMER_TRIGGER)0) +#define FIT_TIMER_TRIGGER_AUTO ((FIT_TIMER_TRIGGER)1) +#define FIT_TIMER_TRIGGER_FITNESS_EQUIPMENT ((FIT_TIMER_TRIGGER)2) +#define FIT_TIMER_TRIGGER_COUNT 3 + +typedef FIT_ENUM FIT_FITNESS_EQUIPMENT_STATE; // fitness equipment event data +#define FIT_FITNESS_EQUIPMENT_STATE_INVALID FIT_ENUM_INVALID +#define FIT_FITNESS_EQUIPMENT_STATE_READY ((FIT_FITNESS_EQUIPMENT_STATE)0) +#define FIT_FITNESS_EQUIPMENT_STATE_IN_USE ((FIT_FITNESS_EQUIPMENT_STATE)1) +#define FIT_FITNESS_EQUIPMENT_STATE_PAUSED ((FIT_FITNESS_EQUIPMENT_STATE)2) +#define FIT_FITNESS_EQUIPMENT_STATE_UNKNOWN ((FIT_FITNESS_EQUIPMENT_STATE)3) // lost connection to fitness equipment +#define FIT_FITNESS_EQUIPMENT_STATE_COUNT 4 + +typedef FIT_ENUM FIT_TONE; +#define FIT_TONE_INVALID FIT_ENUM_INVALID +#define FIT_TONE_OFF ((FIT_TONE)0) +#define FIT_TONE_TONE ((FIT_TONE)1) +#define FIT_TONE_VIBRATE ((FIT_TONE)2) +#define FIT_TONE_TONE_AND_VIBRATE ((FIT_TONE)3) +#define FIT_TONE_COUNT 4 + +typedef FIT_ENUM FIT_AUTOSCROLL; +#define FIT_AUTOSCROLL_INVALID FIT_ENUM_INVALID +#define FIT_AUTOSCROLL_NONE ((FIT_AUTOSCROLL)0) +#define FIT_AUTOSCROLL_SLOW ((FIT_AUTOSCROLL)1) +#define FIT_AUTOSCROLL_MEDIUM ((FIT_AUTOSCROLL)2) +#define FIT_AUTOSCROLL_FAST ((FIT_AUTOSCROLL)3) +#define FIT_AUTOSCROLL_COUNT 4 + +typedef FIT_ENUM FIT_ACTIVITY_CLASS; +#define FIT_ACTIVITY_CLASS_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_CLASS_LEVEL ((FIT_ACTIVITY_CLASS)0x7F) // 0 to 100 +#define FIT_ACTIVITY_CLASS_LEVEL_MAX ((FIT_ACTIVITY_CLASS)100) +#define FIT_ACTIVITY_CLASS_ATHLETE ((FIT_ACTIVITY_CLASS)0x80) +#define FIT_ACTIVITY_CLASS_COUNT 3 + +typedef FIT_ENUM FIT_HR_ZONE_CALC; +#define FIT_HR_ZONE_CALC_INVALID FIT_ENUM_INVALID +#define FIT_HR_ZONE_CALC_CUSTOM ((FIT_HR_ZONE_CALC)0) +#define FIT_HR_ZONE_CALC_PERCENT_MAX_HR ((FIT_HR_ZONE_CALC)1) +#define FIT_HR_ZONE_CALC_PERCENT_HRR ((FIT_HR_ZONE_CALC)2) +#define FIT_HR_ZONE_CALC_COUNT 3 + +typedef FIT_ENUM FIT_PWR_ZONE_CALC; +#define FIT_PWR_ZONE_CALC_INVALID FIT_ENUM_INVALID +#define FIT_PWR_ZONE_CALC_CUSTOM ((FIT_PWR_ZONE_CALC)0) +#define FIT_PWR_ZONE_CALC_PERCENT_FTP ((FIT_PWR_ZONE_CALC)1) +#define FIT_PWR_ZONE_CALC_COUNT 2 + +typedef FIT_ENUM FIT_WKT_STEP_DURATION; +#define FIT_WKT_STEP_DURATION_INVALID FIT_ENUM_INVALID +#define FIT_WKT_STEP_DURATION_TIME ((FIT_WKT_STEP_DURATION)0) +#define FIT_WKT_STEP_DURATION_DISTANCE ((FIT_WKT_STEP_DURATION)1) +#define FIT_WKT_STEP_DURATION_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)2) +#define FIT_WKT_STEP_DURATION_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)3) +#define FIT_WKT_STEP_DURATION_CALORIES ((FIT_WKT_STEP_DURATION)4) +#define FIT_WKT_STEP_DURATION_OPEN ((FIT_WKT_STEP_DURATION)5) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_STEPS_CMPLT ((FIT_WKT_STEP_DURATION)6) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_TIME ((FIT_WKT_STEP_DURATION)7) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_DISTANCE ((FIT_WKT_STEP_DURATION)8) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_CALORIES ((FIT_WKT_STEP_DURATION)9) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)10) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)11) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)12) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)13) +#define FIT_WKT_STEP_DURATION_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)14) +#define FIT_WKT_STEP_DURATION_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)15) +#define FIT_WKT_STEP_DURATION_TRAINING_PEAKS_TSS ((FIT_WKT_STEP_DURATION)16) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_LAST_LAP_LESS_THAN ((FIT_WKT_STEP_DURATION)17) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_MAX_POWER_LAST_LAP_LESS_THAN ((FIT_WKT_STEP_DURATION)18) +#define FIT_WKT_STEP_DURATION_POWER_3S_LESS_THAN ((FIT_WKT_STEP_DURATION)19) +#define FIT_WKT_STEP_DURATION_POWER_10S_LESS_THAN ((FIT_WKT_STEP_DURATION)20) +#define FIT_WKT_STEP_DURATION_POWER_30S_LESS_THAN ((FIT_WKT_STEP_DURATION)21) +#define FIT_WKT_STEP_DURATION_POWER_3S_GREATER_THAN ((FIT_WKT_STEP_DURATION)22) +#define FIT_WKT_STEP_DURATION_POWER_10S_GREATER_THAN ((FIT_WKT_STEP_DURATION)23) +#define FIT_WKT_STEP_DURATION_POWER_30S_GREATER_THAN ((FIT_WKT_STEP_DURATION)24) +#define FIT_WKT_STEP_DURATION_POWER_LAP_LESS_THAN ((FIT_WKT_STEP_DURATION)25) +#define FIT_WKT_STEP_DURATION_POWER_LAP_GREATER_THAN ((FIT_WKT_STEP_DURATION)26) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_TRAINING_PEAKS_TSS ((FIT_WKT_STEP_DURATION)27) +#define FIT_WKT_STEP_DURATION_REPETITION_TIME ((FIT_WKT_STEP_DURATION)28) +#define FIT_WKT_STEP_DURATION_REPS ((FIT_WKT_STEP_DURATION)29) +#define FIT_WKT_STEP_DURATION_TIME_ONLY ((FIT_WKT_STEP_DURATION)31) +#define FIT_WKT_STEP_DURATION_COUNT 31 + +typedef FIT_ENUM FIT_WKT_STEP_TARGET; +#define FIT_WKT_STEP_TARGET_INVALID FIT_ENUM_INVALID +#define FIT_WKT_STEP_TARGET_SPEED ((FIT_WKT_STEP_TARGET)0) +#define FIT_WKT_STEP_TARGET_HEART_RATE ((FIT_WKT_STEP_TARGET)1) +#define FIT_WKT_STEP_TARGET_OPEN ((FIT_WKT_STEP_TARGET)2) +#define FIT_WKT_STEP_TARGET_CADENCE ((FIT_WKT_STEP_TARGET)3) +#define FIT_WKT_STEP_TARGET_POWER ((FIT_WKT_STEP_TARGET)4) +#define FIT_WKT_STEP_TARGET_GRADE ((FIT_WKT_STEP_TARGET)5) +#define FIT_WKT_STEP_TARGET_RESISTANCE ((FIT_WKT_STEP_TARGET)6) +#define FIT_WKT_STEP_TARGET_POWER_3S ((FIT_WKT_STEP_TARGET)7) +#define FIT_WKT_STEP_TARGET_POWER_10S ((FIT_WKT_STEP_TARGET)8) +#define FIT_WKT_STEP_TARGET_POWER_30S ((FIT_WKT_STEP_TARGET)9) +#define FIT_WKT_STEP_TARGET_POWER_LAP ((FIT_WKT_STEP_TARGET)10) +#define FIT_WKT_STEP_TARGET_SWIM_STROKE ((FIT_WKT_STEP_TARGET)11) +#define FIT_WKT_STEP_TARGET_SPEED_LAP ((FIT_WKT_STEP_TARGET)12) +#define FIT_WKT_STEP_TARGET_HEART_RATE_LAP ((FIT_WKT_STEP_TARGET)13) +#define FIT_WKT_STEP_TARGET_COUNT 14 + +typedef FIT_ENUM FIT_GOAL; +#define FIT_GOAL_INVALID FIT_ENUM_INVALID +#define FIT_GOAL_TIME ((FIT_GOAL)0) +#define FIT_GOAL_DISTANCE ((FIT_GOAL)1) +#define FIT_GOAL_CALORIES ((FIT_GOAL)2) +#define FIT_GOAL_FREQUENCY ((FIT_GOAL)3) +#define FIT_GOAL_STEPS ((FIT_GOAL)4) +#define FIT_GOAL_ASCENT ((FIT_GOAL)5) +#define FIT_GOAL_ACTIVE_MINUTES ((FIT_GOAL)6) +#define FIT_GOAL_COUNT 7 + +typedef FIT_ENUM FIT_GOAL_RECURRENCE; +#define FIT_GOAL_RECURRENCE_INVALID FIT_ENUM_INVALID +#define FIT_GOAL_RECURRENCE_OFF ((FIT_GOAL_RECURRENCE)0) +#define FIT_GOAL_RECURRENCE_DAILY ((FIT_GOAL_RECURRENCE)1) +#define FIT_GOAL_RECURRENCE_WEEKLY ((FIT_GOAL_RECURRENCE)2) +#define FIT_GOAL_RECURRENCE_MONTHLY ((FIT_GOAL_RECURRENCE)3) +#define FIT_GOAL_RECURRENCE_YEARLY ((FIT_GOAL_RECURRENCE)4) +#define FIT_GOAL_RECURRENCE_CUSTOM ((FIT_GOAL_RECURRENCE)5) +#define FIT_GOAL_RECURRENCE_COUNT 6 + +typedef FIT_ENUM FIT_GOAL_SOURCE; +#define FIT_GOAL_SOURCE_INVALID FIT_ENUM_INVALID +#define FIT_GOAL_SOURCE_AUTO ((FIT_GOAL_SOURCE)0) // Device generated +#define FIT_GOAL_SOURCE_COMMUNITY ((FIT_GOAL_SOURCE)1) // Social network sourced goal +#define FIT_GOAL_SOURCE_USER ((FIT_GOAL_SOURCE)2) // Manually generated +#define FIT_GOAL_SOURCE_COUNT 3 + +typedef FIT_ENUM FIT_SCHEDULE; +#define FIT_SCHEDULE_INVALID FIT_ENUM_INVALID +#define FIT_SCHEDULE_WORKOUT ((FIT_SCHEDULE)0) +#define FIT_SCHEDULE_COURSE ((FIT_SCHEDULE)1) +#define FIT_SCHEDULE_COUNT 2 + +typedef FIT_ENUM FIT_COURSE_POINT; +#define FIT_COURSE_POINT_INVALID FIT_ENUM_INVALID +#define FIT_COURSE_POINT_GENERIC ((FIT_COURSE_POINT)0) +#define FIT_COURSE_POINT_SUMMIT ((FIT_COURSE_POINT)1) +#define FIT_COURSE_POINT_VALLEY ((FIT_COURSE_POINT)2) +#define FIT_COURSE_POINT_WATER ((FIT_COURSE_POINT)3) +#define FIT_COURSE_POINT_FOOD ((FIT_COURSE_POINT)4) +#define FIT_COURSE_POINT_DANGER ((FIT_COURSE_POINT)5) +#define FIT_COURSE_POINT_LEFT ((FIT_COURSE_POINT)6) +#define FIT_COURSE_POINT_RIGHT ((FIT_COURSE_POINT)7) +#define FIT_COURSE_POINT_STRAIGHT ((FIT_COURSE_POINT)8) +#define FIT_COURSE_POINT_FIRST_AID ((FIT_COURSE_POINT)9) +#define FIT_COURSE_POINT_FOURTH_CATEGORY ((FIT_COURSE_POINT)10) +#define FIT_COURSE_POINT_THIRD_CATEGORY ((FIT_COURSE_POINT)11) +#define FIT_COURSE_POINT_SECOND_CATEGORY ((FIT_COURSE_POINT)12) +#define FIT_COURSE_POINT_FIRST_CATEGORY ((FIT_COURSE_POINT)13) +#define FIT_COURSE_POINT_HORS_CATEGORY ((FIT_COURSE_POINT)14) +#define FIT_COURSE_POINT_SPRINT ((FIT_COURSE_POINT)15) +#define FIT_COURSE_POINT_LEFT_FORK ((FIT_COURSE_POINT)16) +#define FIT_COURSE_POINT_RIGHT_FORK ((FIT_COURSE_POINT)17) +#define FIT_COURSE_POINT_MIDDLE_FORK ((FIT_COURSE_POINT)18) +#define FIT_COURSE_POINT_SLIGHT_LEFT ((FIT_COURSE_POINT)19) +#define FIT_COURSE_POINT_SHARP_LEFT ((FIT_COURSE_POINT)20) +#define FIT_COURSE_POINT_SLIGHT_RIGHT ((FIT_COURSE_POINT)21) +#define FIT_COURSE_POINT_SHARP_RIGHT ((FIT_COURSE_POINT)22) +#define FIT_COURSE_POINT_U_TURN ((FIT_COURSE_POINT)23) +#define FIT_COURSE_POINT_SEGMENT_START ((FIT_COURSE_POINT)24) +#define FIT_COURSE_POINT_SEGMENT_END ((FIT_COURSE_POINT)25) +#define FIT_COURSE_POINT_CAMPSITE ((FIT_COURSE_POINT)27) +#define FIT_COURSE_POINT_AID_STATION ((FIT_COURSE_POINT)28) +#define FIT_COURSE_POINT_REST_AREA ((FIT_COURSE_POINT)29) +#define FIT_COURSE_POINT_GENERAL_DISTANCE ((FIT_COURSE_POINT)30) // Used with UpAhead +#define FIT_COURSE_POINT_SERVICE ((FIT_COURSE_POINT)31) +#define FIT_COURSE_POINT_ENERGY_GEL ((FIT_COURSE_POINT)32) +#define FIT_COURSE_POINT_SPORTS_DRINK ((FIT_COURSE_POINT)33) +#define FIT_COURSE_POINT_MILE_MARKER ((FIT_COURSE_POINT)34) +#define FIT_COURSE_POINT_CHECKPOINT ((FIT_COURSE_POINT)35) +#define FIT_COURSE_POINT_SHELTER ((FIT_COURSE_POINT)36) +#define FIT_COURSE_POINT_MEETING_SPOT ((FIT_COURSE_POINT)37) +#define FIT_COURSE_POINT_OVERLOOK ((FIT_COURSE_POINT)38) +#define FIT_COURSE_POINT_TOILET ((FIT_COURSE_POINT)39) +#define FIT_COURSE_POINT_SHOWER ((FIT_COURSE_POINT)40) +#define FIT_COURSE_POINT_GEAR ((FIT_COURSE_POINT)41) +#define FIT_COURSE_POINT_SHARP_CURVE ((FIT_COURSE_POINT)42) +#define FIT_COURSE_POINT_STEEP_INCLINE ((FIT_COURSE_POINT)43) +#define FIT_COURSE_POINT_TUNNEL ((FIT_COURSE_POINT)44) +#define FIT_COURSE_POINT_BRIDGE ((FIT_COURSE_POINT)45) +#define FIT_COURSE_POINT_OBSTACLE ((FIT_COURSE_POINT)46) +#define FIT_COURSE_POINT_CROSSING ((FIT_COURSE_POINT)47) +#define FIT_COURSE_POINT_STORE ((FIT_COURSE_POINT)48) +#define FIT_COURSE_POINT_TRANSITION ((FIT_COURSE_POINT)49) +#define FIT_COURSE_POINT_NAVAID ((FIT_COURSE_POINT)50) +#define FIT_COURSE_POINT_TRANSPORT ((FIT_COURSE_POINT)51) +#define FIT_COURSE_POINT_ALERT ((FIT_COURSE_POINT)52) +#define FIT_COURSE_POINT_INFO ((FIT_COURSE_POINT)53) +#define FIT_COURSE_POINT_COUNT 53 + +typedef FIT_UINT16 FIT_MANUFACTURER; +#define FIT_MANUFACTURER_INVALID FIT_UINT16_INVALID +#define FIT_MANUFACTURER_GARMIN ((FIT_MANUFACTURER)1) +#define FIT_MANUFACTURER_GARMIN_FR405_ANTFS ((FIT_MANUFACTURER)2) // Do not use. Used by FR405 for ANTFS man id. +#define FIT_MANUFACTURER_ZEPHYR ((FIT_MANUFACTURER)3) +#define FIT_MANUFACTURER_DAYTON ((FIT_MANUFACTURER)4) +#define FIT_MANUFACTURER_IDT ((FIT_MANUFACTURER)5) +#define FIT_MANUFACTURER_SRM ((FIT_MANUFACTURER)6) +#define FIT_MANUFACTURER_QUARQ ((FIT_MANUFACTURER)7) +#define FIT_MANUFACTURER_IBIKE ((FIT_MANUFACTURER)8) +#define FIT_MANUFACTURER_SARIS ((FIT_MANUFACTURER)9) +#define FIT_MANUFACTURER_SPARK_HK ((FIT_MANUFACTURER)10) +#define FIT_MANUFACTURER_TANITA ((FIT_MANUFACTURER)11) +#define FIT_MANUFACTURER_ECHOWELL ((FIT_MANUFACTURER)12) +#define FIT_MANUFACTURER_DYNASTREAM_OEM ((FIT_MANUFACTURER)13) +#define FIT_MANUFACTURER_NAUTILUS ((FIT_MANUFACTURER)14) +#define FIT_MANUFACTURER_DYNASTREAM ((FIT_MANUFACTURER)15) +#define FIT_MANUFACTURER_TIMEX ((FIT_MANUFACTURER)16) +#define FIT_MANUFACTURER_METRIGEAR ((FIT_MANUFACTURER)17) +#define FIT_MANUFACTURER_XELIC ((FIT_MANUFACTURER)18) +#define FIT_MANUFACTURER_BEURER ((FIT_MANUFACTURER)19) +#define FIT_MANUFACTURER_CARDIOSPORT ((FIT_MANUFACTURER)20) +#define FIT_MANUFACTURER_A_AND_D ((FIT_MANUFACTURER)21) +#define FIT_MANUFACTURER_HMM ((FIT_MANUFACTURER)22) +#define FIT_MANUFACTURER_SUUNTO ((FIT_MANUFACTURER)23) +#define FIT_MANUFACTURER_THITA_ELEKTRONIK ((FIT_MANUFACTURER)24) +#define FIT_MANUFACTURER_GPULSE ((FIT_MANUFACTURER)25) +#define FIT_MANUFACTURER_CLEAN_MOBILE ((FIT_MANUFACTURER)26) +#define FIT_MANUFACTURER_PEDAL_BRAIN ((FIT_MANUFACTURER)27) +#define FIT_MANUFACTURER_PEAKSWARE ((FIT_MANUFACTURER)28) +#define FIT_MANUFACTURER_SAXONAR ((FIT_MANUFACTURER)29) +#define FIT_MANUFACTURER_LEMOND_FITNESS ((FIT_MANUFACTURER)30) +#define FIT_MANUFACTURER_DEXCOM ((FIT_MANUFACTURER)31) +#define FIT_MANUFACTURER_WAHOO_FITNESS ((FIT_MANUFACTURER)32) +#define FIT_MANUFACTURER_OCTANE_FITNESS ((FIT_MANUFACTURER)33) +#define FIT_MANUFACTURER_ARCHINOETICS ((FIT_MANUFACTURER)34) +#define FIT_MANUFACTURER_THE_HURT_BOX ((FIT_MANUFACTURER)35) +#define FIT_MANUFACTURER_CITIZEN_SYSTEMS ((FIT_MANUFACTURER)36) +#define FIT_MANUFACTURER_MAGELLAN ((FIT_MANUFACTURER)37) +#define FIT_MANUFACTURER_OSYNCE ((FIT_MANUFACTURER)38) +#define FIT_MANUFACTURER_HOLUX ((FIT_MANUFACTURER)39) +#define FIT_MANUFACTURER_CONCEPT2 ((FIT_MANUFACTURER)40) +#define FIT_MANUFACTURER_SHIMANO ((FIT_MANUFACTURER)41) +#define FIT_MANUFACTURER_ONE_GIANT_LEAP ((FIT_MANUFACTURER)42) +#define FIT_MANUFACTURER_ACE_SENSOR ((FIT_MANUFACTURER)43) +#define FIT_MANUFACTURER_BRIM_BROTHERS ((FIT_MANUFACTURER)44) +#define FIT_MANUFACTURER_XPLOVA ((FIT_MANUFACTURER)45) +#define FIT_MANUFACTURER_PERCEPTION_DIGITAL ((FIT_MANUFACTURER)46) +#define FIT_MANUFACTURER_BF1SYSTEMS ((FIT_MANUFACTURER)47) +#define FIT_MANUFACTURER_PIONEER ((FIT_MANUFACTURER)48) +#define FIT_MANUFACTURER_SPANTEC ((FIT_MANUFACTURER)49) +#define FIT_MANUFACTURER_METALOGICS ((FIT_MANUFACTURER)50) +#define FIT_MANUFACTURER_4IIIIS ((FIT_MANUFACTURER)51) +#define FIT_MANUFACTURER_SEIKO_EPSON ((FIT_MANUFACTURER)52) +#define FIT_MANUFACTURER_SEIKO_EPSON_OEM ((FIT_MANUFACTURER)53) +#define FIT_MANUFACTURER_IFOR_POWELL ((FIT_MANUFACTURER)54) +#define FIT_MANUFACTURER_MAXWELL_GUIDER ((FIT_MANUFACTURER)55) +#define FIT_MANUFACTURER_STAR_TRAC ((FIT_MANUFACTURER)56) +#define FIT_MANUFACTURER_BREAKAWAY ((FIT_MANUFACTURER)57) +#define FIT_MANUFACTURER_ALATECH_TECHNOLOGY_LTD ((FIT_MANUFACTURER)58) +#define FIT_MANUFACTURER_MIO_TECHNOLOGY_EUROPE ((FIT_MANUFACTURER)59) +#define FIT_MANUFACTURER_ROTOR ((FIT_MANUFACTURER)60) +#define FIT_MANUFACTURER_GEONAUTE ((FIT_MANUFACTURER)61) +#define FIT_MANUFACTURER_ID_BIKE ((FIT_MANUFACTURER)62) +#define FIT_MANUFACTURER_SPECIALIZED ((FIT_MANUFACTURER)63) +#define FIT_MANUFACTURER_WTEK ((FIT_MANUFACTURER)64) +#define FIT_MANUFACTURER_PHYSICAL_ENTERPRISES ((FIT_MANUFACTURER)65) +#define FIT_MANUFACTURER_NORTH_POLE_ENGINEERING ((FIT_MANUFACTURER)66) +#define FIT_MANUFACTURER_BKOOL ((FIT_MANUFACTURER)67) +#define FIT_MANUFACTURER_CATEYE ((FIT_MANUFACTURER)68) +#define FIT_MANUFACTURER_STAGES_CYCLING ((FIT_MANUFACTURER)69) +#define FIT_MANUFACTURER_SIGMASPORT ((FIT_MANUFACTURER)70) +#define FIT_MANUFACTURER_TOMTOM ((FIT_MANUFACTURER)71) +#define FIT_MANUFACTURER_PERIPEDAL ((FIT_MANUFACTURER)72) +#define FIT_MANUFACTURER_WATTBIKE ((FIT_MANUFACTURER)73) +#define FIT_MANUFACTURER_MOXY ((FIT_MANUFACTURER)76) +#define FIT_MANUFACTURER_CICLOSPORT ((FIT_MANUFACTURER)77) +#define FIT_MANUFACTURER_POWERBAHN ((FIT_MANUFACTURER)78) +#define FIT_MANUFACTURER_ACORN_PROJECTS_APS ((FIT_MANUFACTURER)79) +#define FIT_MANUFACTURER_LIFEBEAM ((FIT_MANUFACTURER)80) +#define FIT_MANUFACTURER_BONTRAGER ((FIT_MANUFACTURER)81) +#define FIT_MANUFACTURER_WELLGO ((FIT_MANUFACTURER)82) +#define FIT_MANUFACTURER_SCOSCHE ((FIT_MANUFACTURER)83) +#define FIT_MANUFACTURER_MAGURA ((FIT_MANUFACTURER)84) +#define FIT_MANUFACTURER_WOODWAY ((FIT_MANUFACTURER)85) +#define FIT_MANUFACTURER_ELITE ((FIT_MANUFACTURER)86) +#define FIT_MANUFACTURER_NIELSEN_KELLERMAN ((FIT_MANUFACTURER)87) +#define FIT_MANUFACTURER_DK_CITY ((FIT_MANUFACTURER)88) +#define FIT_MANUFACTURER_TACX ((FIT_MANUFACTURER)89) +#define FIT_MANUFACTURER_DIRECTION_TECHNOLOGY ((FIT_MANUFACTURER)90) +#define FIT_MANUFACTURER_MAGTONIC ((FIT_MANUFACTURER)91) +#define FIT_MANUFACTURER_1PARTCARBON ((FIT_MANUFACTURER)92) +#define FIT_MANUFACTURER_INSIDE_RIDE_TECHNOLOGIES ((FIT_MANUFACTURER)93) +#define FIT_MANUFACTURER_SOUND_OF_MOTION ((FIT_MANUFACTURER)94) +#define FIT_MANUFACTURER_STRYD ((FIT_MANUFACTURER)95) +#define FIT_MANUFACTURER_ICG ((FIT_MANUFACTURER)96) // Indoorcycling Group +#define FIT_MANUFACTURER_MIPULSE ((FIT_MANUFACTURER)97) +#define FIT_MANUFACTURER_BSX_ATHLETICS ((FIT_MANUFACTURER)98) +#define FIT_MANUFACTURER_LOOK ((FIT_MANUFACTURER)99) +#define FIT_MANUFACTURER_CAMPAGNOLO_SRL ((FIT_MANUFACTURER)100) +#define FIT_MANUFACTURER_BODY_BIKE_SMART ((FIT_MANUFACTURER)101) +#define FIT_MANUFACTURER_PRAXISWORKS ((FIT_MANUFACTURER)102) +#define FIT_MANUFACTURER_LIMITS_TECHNOLOGY ((FIT_MANUFACTURER)103) // Limits Technology Ltd. +#define FIT_MANUFACTURER_TOPACTION_TECHNOLOGY ((FIT_MANUFACTURER)104) // TopAction Technology Inc. +#define FIT_MANUFACTURER_COSINUSS ((FIT_MANUFACTURER)105) +#define FIT_MANUFACTURER_FITCARE ((FIT_MANUFACTURER)106) +#define FIT_MANUFACTURER_MAGENE ((FIT_MANUFACTURER)107) +#define FIT_MANUFACTURER_GIANT_MANUFACTURING_CO ((FIT_MANUFACTURER)108) +#define FIT_MANUFACTURER_TIGRASPORT ((FIT_MANUFACTURER)109) // Tigrasport +#define FIT_MANUFACTURER_SALUTRON ((FIT_MANUFACTURER)110) +#define FIT_MANUFACTURER_TECHNOGYM ((FIT_MANUFACTURER)111) +#define FIT_MANUFACTURER_BRYTON_SENSORS ((FIT_MANUFACTURER)112) +#define FIT_MANUFACTURER_LATITUDE_LIMITED ((FIT_MANUFACTURER)113) +#define FIT_MANUFACTURER_SOARING_TECHNOLOGY ((FIT_MANUFACTURER)114) +#define FIT_MANUFACTURER_IGPSPORT ((FIT_MANUFACTURER)115) +#define FIT_MANUFACTURER_THINKRIDER ((FIT_MANUFACTURER)116) +#define FIT_MANUFACTURER_GOPHER_SPORT ((FIT_MANUFACTURER)117) +#define FIT_MANUFACTURER_WATERROWER ((FIT_MANUFACTURER)118) +#define FIT_MANUFACTURER_ORANGETHEORY ((FIT_MANUFACTURER)119) +#define FIT_MANUFACTURER_INPEAK ((FIT_MANUFACTURER)120) +#define FIT_MANUFACTURER_KINETIC ((FIT_MANUFACTURER)121) +#define FIT_MANUFACTURER_JOHNSON_HEALTH_TECH ((FIT_MANUFACTURER)122) +#define FIT_MANUFACTURER_POLAR_ELECTRO ((FIT_MANUFACTURER)123) +#define FIT_MANUFACTURER_SEESENSE ((FIT_MANUFACTURER)124) +#define FIT_MANUFACTURER_NCI_TECHNOLOGY ((FIT_MANUFACTURER)125) +#define FIT_MANUFACTURER_IQSQUARE ((FIT_MANUFACTURER)126) +#define FIT_MANUFACTURER_LEOMO ((FIT_MANUFACTURER)127) +#define FIT_MANUFACTURER_IFIT_COM ((FIT_MANUFACTURER)128) +#define FIT_MANUFACTURER_COROS_BYTE ((FIT_MANUFACTURER)129) +#define FIT_MANUFACTURER_VERSA_DESIGN ((FIT_MANUFACTURER)130) +#define FIT_MANUFACTURER_CHILEAF ((FIT_MANUFACTURER)131) +#define FIT_MANUFACTURER_CYCPLUS ((FIT_MANUFACTURER)132) +#define FIT_MANUFACTURER_GRAVAA_BYTE ((FIT_MANUFACTURER)133) +#define FIT_MANUFACTURER_SIGEYI ((FIT_MANUFACTURER)134) +#define FIT_MANUFACTURER_COOSPO ((FIT_MANUFACTURER)135) +#define FIT_MANUFACTURER_GEOID ((FIT_MANUFACTURER)136) +#define FIT_MANUFACTURER_BOSCH ((FIT_MANUFACTURER)137) +#define FIT_MANUFACTURER_KYTO ((FIT_MANUFACTURER)138) +#define FIT_MANUFACTURER_KINETIC_SPORTS ((FIT_MANUFACTURER)139) +#define FIT_MANUFACTURER_DECATHLON_BYTE ((FIT_MANUFACTURER)140) +#define FIT_MANUFACTURER_TQ_SYSTEMS ((FIT_MANUFACTURER)141) +#define FIT_MANUFACTURER_TAG_HEUER ((FIT_MANUFACTURER)142) +#define FIT_MANUFACTURER_DEVELOPMENT ((FIT_MANUFACTURER)255) +#define FIT_MANUFACTURER_HEALTHANDLIFE ((FIT_MANUFACTURER)257) +#define FIT_MANUFACTURER_LEZYNE ((FIT_MANUFACTURER)258) +#define FIT_MANUFACTURER_SCRIBE_LABS ((FIT_MANUFACTURER)259) +#define FIT_MANUFACTURER_ZWIFT ((FIT_MANUFACTURER)260) +#define FIT_MANUFACTURER_WATTEAM ((FIT_MANUFACTURER)261) +#define FIT_MANUFACTURER_RECON ((FIT_MANUFACTURER)262) +#define FIT_MANUFACTURER_FAVERO_ELECTRONICS ((FIT_MANUFACTURER)263) +#define FIT_MANUFACTURER_DYNOVELO ((FIT_MANUFACTURER)264) +#define FIT_MANUFACTURER_STRAVA ((FIT_MANUFACTURER)265) +#define FIT_MANUFACTURER_PRECOR ((FIT_MANUFACTURER)266) // Amer Sports +#define FIT_MANUFACTURER_BRYTON ((FIT_MANUFACTURER)267) +#define FIT_MANUFACTURER_SRAM ((FIT_MANUFACTURER)268) +#define FIT_MANUFACTURER_NAVMAN ((FIT_MANUFACTURER)269) // MiTAC Global Corporation (Mio Technology) +#define FIT_MANUFACTURER_COBI ((FIT_MANUFACTURER)270) // COBI GmbH +#define FIT_MANUFACTURER_SPIVI ((FIT_MANUFACTURER)271) +#define FIT_MANUFACTURER_MIO_MAGELLAN ((FIT_MANUFACTURER)272) +#define FIT_MANUFACTURER_EVESPORTS ((FIT_MANUFACTURER)273) +#define FIT_MANUFACTURER_SENSITIVUS_GAUGE ((FIT_MANUFACTURER)274) +#define FIT_MANUFACTURER_PODOON ((FIT_MANUFACTURER)275) +#define FIT_MANUFACTURER_LIFE_TIME_FITNESS ((FIT_MANUFACTURER)276) +#define FIT_MANUFACTURER_FALCO_E_MOTORS ((FIT_MANUFACTURER)277) // Falco eMotors Inc. +#define FIT_MANUFACTURER_MINOURA ((FIT_MANUFACTURER)278) +#define FIT_MANUFACTURER_CYCLIQ ((FIT_MANUFACTURER)279) +#define FIT_MANUFACTURER_LUXOTTICA ((FIT_MANUFACTURER)280) +#define FIT_MANUFACTURER_TRAINER_ROAD ((FIT_MANUFACTURER)281) +#define FIT_MANUFACTURER_THE_SUFFERFEST ((FIT_MANUFACTURER)282) +#define FIT_MANUFACTURER_FULLSPEEDAHEAD ((FIT_MANUFACTURER)283) +#define FIT_MANUFACTURER_VIRTUALTRAINING ((FIT_MANUFACTURER)284) +#define FIT_MANUFACTURER_FEEDBACKSPORTS ((FIT_MANUFACTURER)285) +#define FIT_MANUFACTURER_OMATA ((FIT_MANUFACTURER)286) +#define FIT_MANUFACTURER_VDO ((FIT_MANUFACTURER)287) +#define FIT_MANUFACTURER_MAGNETICDAYS ((FIT_MANUFACTURER)288) +#define FIT_MANUFACTURER_HAMMERHEAD ((FIT_MANUFACTURER)289) +#define FIT_MANUFACTURER_KINETIC_BY_KURT ((FIT_MANUFACTURER)290) +#define FIT_MANUFACTURER_SHAPELOG ((FIT_MANUFACTURER)291) +#define FIT_MANUFACTURER_DABUZIDUO ((FIT_MANUFACTURER)292) +#define FIT_MANUFACTURER_JETBLACK ((FIT_MANUFACTURER)293) +#define FIT_MANUFACTURER_COROS ((FIT_MANUFACTURER)294) +#define FIT_MANUFACTURER_VIRTUGO ((FIT_MANUFACTURER)295) +#define FIT_MANUFACTURER_VELOSENSE ((FIT_MANUFACTURER)296) +#define FIT_MANUFACTURER_CYCLIGENTINC ((FIT_MANUFACTURER)297) +#define FIT_MANUFACTURER_TRAILFORKS ((FIT_MANUFACTURER)298) +#define FIT_MANUFACTURER_MAHLE_EBIKEMOTION ((FIT_MANUFACTURER)299) +#define FIT_MANUFACTURER_NURVV ((FIT_MANUFACTURER)300) +#define FIT_MANUFACTURER_MICROPROGRAM ((FIT_MANUFACTURER)301) +#define FIT_MANUFACTURER_ZONE5CLOUD ((FIT_MANUFACTURER)302) +#define FIT_MANUFACTURER_GREENTEG ((FIT_MANUFACTURER)303) +#define FIT_MANUFACTURER_YAMAHA_MOTORS ((FIT_MANUFACTURER)304) +#define FIT_MANUFACTURER_WHOOP ((FIT_MANUFACTURER)305) +#define FIT_MANUFACTURER_GRAVAA ((FIT_MANUFACTURER)306) +#define FIT_MANUFACTURER_ONELAP ((FIT_MANUFACTURER)307) +#define FIT_MANUFACTURER_MONARK_EXERCISE ((FIT_MANUFACTURER)308) +#define FIT_MANUFACTURER_FORM ((FIT_MANUFACTURER)309) +#define FIT_MANUFACTURER_DECATHLON ((FIT_MANUFACTURER)310) +#define FIT_MANUFACTURER_SYNCROS ((FIT_MANUFACTURER)311) +#define FIT_MANUFACTURER_HEATUP ((FIT_MANUFACTURER)312) +#define FIT_MANUFACTURER_CANNONDALE ((FIT_MANUFACTURER)313) +#define FIT_MANUFACTURER_TRUE_FITNESS ((FIT_MANUFACTURER)314) +#define FIT_MANUFACTURER_RGT_CYCLING ((FIT_MANUFACTURER)315) +#define FIT_MANUFACTURER_VASA ((FIT_MANUFACTURER)316) +#define FIT_MANUFACTURER_RACE_REPUBLIC ((FIT_MANUFACTURER)317) +#define FIT_MANUFACTURER_FAZUA ((FIT_MANUFACTURER)318) +#define FIT_MANUFACTURER_ACTIGRAPHCORP ((FIT_MANUFACTURER)5759) +#define FIT_MANUFACTURER_COUNT 204 + +typedef FIT_UINT16 FIT_GARMIN_PRODUCT; +#define FIT_GARMIN_PRODUCT_INVALID FIT_UINT16_INVALID +#define FIT_GARMIN_PRODUCT_HRM1 ((FIT_GARMIN_PRODUCT)1) +#define FIT_GARMIN_PRODUCT_AXH01 ((FIT_GARMIN_PRODUCT)2) // AXH01 HRM chipset +#define FIT_GARMIN_PRODUCT_AXB01 ((FIT_GARMIN_PRODUCT)3) +#define FIT_GARMIN_PRODUCT_AXB02 ((FIT_GARMIN_PRODUCT)4) +#define FIT_GARMIN_PRODUCT_HRM2SS ((FIT_GARMIN_PRODUCT)5) +#define FIT_GARMIN_PRODUCT_DSI_ALF02 ((FIT_GARMIN_PRODUCT)6) +#define FIT_GARMIN_PRODUCT_HRM3SS ((FIT_GARMIN_PRODUCT)7) +#define FIT_GARMIN_PRODUCT_HRM_RUN_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)8) // hrm_run model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_BSM ((FIT_GARMIN_PRODUCT)9) // BSM model for ANT+ messaging +#define FIT_GARMIN_PRODUCT_BCM ((FIT_GARMIN_PRODUCT)10) // BCM model for ANT+ messaging +#define FIT_GARMIN_PRODUCT_AXS01 ((FIT_GARMIN_PRODUCT)11) // AXS01 HRM Bike Chipset model for ANT+ messaging +#define FIT_GARMIN_PRODUCT_HRM_TRI_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)12) // hrm_tri model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_HRM4_RUN_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)13) // hrm4 run model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_FR225_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)14) // fr225 model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_GEN3_BSM_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)15) // gen3_bsm model for Bike Speed ANT+ messaging +#define FIT_GARMIN_PRODUCT_GEN3_BCM_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)16) // gen3_bcm model for Bike Cadence ANT+ messaging +#define FIT_GARMIN_PRODUCT_OHR ((FIT_GARMIN_PRODUCT)255) // Garmin Wearable Optical Heart Rate Sensor for ANT+ HR Profile Broadcasting +#define FIT_GARMIN_PRODUCT_FR301_CHINA ((FIT_GARMIN_PRODUCT)473) +#define FIT_GARMIN_PRODUCT_FR301_JAPAN ((FIT_GARMIN_PRODUCT)474) +#define FIT_GARMIN_PRODUCT_FR301_KOREA ((FIT_GARMIN_PRODUCT)475) +#define FIT_GARMIN_PRODUCT_FR301_TAIWAN ((FIT_GARMIN_PRODUCT)494) +#define FIT_GARMIN_PRODUCT_FR405 ((FIT_GARMIN_PRODUCT)717) // Forerunner 405 +#define FIT_GARMIN_PRODUCT_FR50 ((FIT_GARMIN_PRODUCT)782) // Forerunner 50 +#define FIT_GARMIN_PRODUCT_FR405_JAPAN ((FIT_GARMIN_PRODUCT)987) +#define FIT_GARMIN_PRODUCT_FR60 ((FIT_GARMIN_PRODUCT)988) // Forerunner 60 +#define FIT_GARMIN_PRODUCT_DSI_ALF01 ((FIT_GARMIN_PRODUCT)1011) +#define FIT_GARMIN_PRODUCT_FR310XT ((FIT_GARMIN_PRODUCT)1018) // Forerunner 310 +#define FIT_GARMIN_PRODUCT_EDGE500 ((FIT_GARMIN_PRODUCT)1036) +#define FIT_GARMIN_PRODUCT_FR110 ((FIT_GARMIN_PRODUCT)1124) // Forerunner 110 +#define FIT_GARMIN_PRODUCT_EDGE800 ((FIT_GARMIN_PRODUCT)1169) +#define FIT_GARMIN_PRODUCT_EDGE500_TAIWAN ((FIT_GARMIN_PRODUCT)1199) +#define FIT_GARMIN_PRODUCT_EDGE500_JAPAN ((FIT_GARMIN_PRODUCT)1213) +#define FIT_GARMIN_PRODUCT_CHIRP ((FIT_GARMIN_PRODUCT)1253) +#define FIT_GARMIN_PRODUCT_FR110_JAPAN ((FIT_GARMIN_PRODUCT)1274) +#define FIT_GARMIN_PRODUCT_EDGE200 ((FIT_GARMIN_PRODUCT)1325) +#define FIT_GARMIN_PRODUCT_FR910XT ((FIT_GARMIN_PRODUCT)1328) +#define FIT_GARMIN_PRODUCT_EDGE800_TAIWAN ((FIT_GARMIN_PRODUCT)1333) +#define FIT_GARMIN_PRODUCT_EDGE800_JAPAN ((FIT_GARMIN_PRODUCT)1334) +#define FIT_GARMIN_PRODUCT_ALF04 ((FIT_GARMIN_PRODUCT)1341) +#define FIT_GARMIN_PRODUCT_FR610 ((FIT_GARMIN_PRODUCT)1345) +#define FIT_GARMIN_PRODUCT_FR210_JAPAN ((FIT_GARMIN_PRODUCT)1360) +#define FIT_GARMIN_PRODUCT_VECTOR_SS ((FIT_GARMIN_PRODUCT)1380) +#define FIT_GARMIN_PRODUCT_VECTOR_CP ((FIT_GARMIN_PRODUCT)1381) +#define FIT_GARMIN_PRODUCT_EDGE800_CHINA ((FIT_GARMIN_PRODUCT)1386) +#define FIT_GARMIN_PRODUCT_EDGE500_CHINA ((FIT_GARMIN_PRODUCT)1387) +#define FIT_GARMIN_PRODUCT_APPROACH_G10 ((FIT_GARMIN_PRODUCT)1405) +#define FIT_GARMIN_PRODUCT_FR610_JAPAN ((FIT_GARMIN_PRODUCT)1410) +#define FIT_GARMIN_PRODUCT_EDGE500_KOREA ((FIT_GARMIN_PRODUCT)1422) +#define FIT_GARMIN_PRODUCT_FR70 ((FIT_GARMIN_PRODUCT)1436) +#define FIT_GARMIN_PRODUCT_FR310XT_4T ((FIT_GARMIN_PRODUCT)1446) +#define FIT_GARMIN_PRODUCT_AMX ((FIT_GARMIN_PRODUCT)1461) +#define FIT_GARMIN_PRODUCT_FR10 ((FIT_GARMIN_PRODUCT)1482) +#define FIT_GARMIN_PRODUCT_EDGE800_KOREA ((FIT_GARMIN_PRODUCT)1497) +#define FIT_GARMIN_PRODUCT_SWIM ((FIT_GARMIN_PRODUCT)1499) +#define FIT_GARMIN_PRODUCT_FR910XT_CHINA ((FIT_GARMIN_PRODUCT)1537) +#define FIT_GARMIN_PRODUCT_FENIX ((FIT_GARMIN_PRODUCT)1551) +#define FIT_GARMIN_PRODUCT_EDGE200_TAIWAN ((FIT_GARMIN_PRODUCT)1555) +#define FIT_GARMIN_PRODUCT_EDGE510 ((FIT_GARMIN_PRODUCT)1561) +#define FIT_GARMIN_PRODUCT_EDGE810 ((FIT_GARMIN_PRODUCT)1567) +#define FIT_GARMIN_PRODUCT_TEMPE ((FIT_GARMIN_PRODUCT)1570) +#define FIT_GARMIN_PRODUCT_FR910XT_JAPAN ((FIT_GARMIN_PRODUCT)1600) +#define FIT_GARMIN_PRODUCT_FR620 ((FIT_GARMIN_PRODUCT)1623) +#define FIT_GARMIN_PRODUCT_FR220 ((FIT_GARMIN_PRODUCT)1632) +#define FIT_GARMIN_PRODUCT_FR910XT_KOREA ((FIT_GARMIN_PRODUCT)1664) +#define FIT_GARMIN_PRODUCT_FR10_JAPAN ((FIT_GARMIN_PRODUCT)1688) +#define FIT_GARMIN_PRODUCT_EDGE810_JAPAN ((FIT_GARMIN_PRODUCT)1721) +#define FIT_GARMIN_PRODUCT_VIRB_ELITE ((FIT_GARMIN_PRODUCT)1735) +#define FIT_GARMIN_PRODUCT_EDGE_TOURING ((FIT_GARMIN_PRODUCT)1736) // Also Edge Touring Plus +#define FIT_GARMIN_PRODUCT_EDGE510_JAPAN ((FIT_GARMIN_PRODUCT)1742) +#define FIT_GARMIN_PRODUCT_HRM_TRI ((FIT_GARMIN_PRODUCT)1743) // Also HRM-Swim +#define FIT_GARMIN_PRODUCT_HRM_RUN ((FIT_GARMIN_PRODUCT)1752) +#define FIT_GARMIN_PRODUCT_FR920XT ((FIT_GARMIN_PRODUCT)1765) +#define FIT_GARMIN_PRODUCT_EDGE510_ASIA ((FIT_GARMIN_PRODUCT)1821) +#define FIT_GARMIN_PRODUCT_EDGE810_CHINA ((FIT_GARMIN_PRODUCT)1822) +#define FIT_GARMIN_PRODUCT_EDGE810_TAIWAN ((FIT_GARMIN_PRODUCT)1823) +#define FIT_GARMIN_PRODUCT_EDGE1000 ((FIT_GARMIN_PRODUCT)1836) +#define FIT_GARMIN_PRODUCT_VIVO_FIT ((FIT_GARMIN_PRODUCT)1837) +#define FIT_GARMIN_PRODUCT_VIRB_REMOTE ((FIT_GARMIN_PRODUCT)1853) +#define FIT_GARMIN_PRODUCT_VIVO_KI ((FIT_GARMIN_PRODUCT)1885) +#define FIT_GARMIN_PRODUCT_FR15 ((FIT_GARMIN_PRODUCT)1903) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE ((FIT_GARMIN_PRODUCT)1907) +#define FIT_GARMIN_PRODUCT_EDGE510_KOREA ((FIT_GARMIN_PRODUCT)1918) +#define FIT_GARMIN_PRODUCT_FR620_JAPAN ((FIT_GARMIN_PRODUCT)1928) +#define FIT_GARMIN_PRODUCT_FR620_CHINA ((FIT_GARMIN_PRODUCT)1929) +#define FIT_GARMIN_PRODUCT_FR220_JAPAN ((FIT_GARMIN_PRODUCT)1930) +#define FIT_GARMIN_PRODUCT_FR220_CHINA ((FIT_GARMIN_PRODUCT)1931) +#define FIT_GARMIN_PRODUCT_APPROACH_S6 ((FIT_GARMIN_PRODUCT)1936) +#define FIT_GARMIN_PRODUCT_VIVO_SMART ((FIT_GARMIN_PRODUCT)1956) +#define FIT_GARMIN_PRODUCT_FENIX2 ((FIT_GARMIN_PRODUCT)1967) +#define FIT_GARMIN_PRODUCT_EPIX ((FIT_GARMIN_PRODUCT)1988) +#define FIT_GARMIN_PRODUCT_FENIX3 ((FIT_GARMIN_PRODUCT)2050) +#define FIT_GARMIN_PRODUCT_EDGE1000_TAIWAN ((FIT_GARMIN_PRODUCT)2052) +#define FIT_GARMIN_PRODUCT_EDGE1000_JAPAN ((FIT_GARMIN_PRODUCT)2053) +#define FIT_GARMIN_PRODUCT_FR15_JAPAN ((FIT_GARMIN_PRODUCT)2061) +#define FIT_GARMIN_PRODUCT_EDGE520 ((FIT_GARMIN_PRODUCT)2067) +#define FIT_GARMIN_PRODUCT_EDGE1000_CHINA ((FIT_GARMIN_PRODUCT)2070) +#define FIT_GARMIN_PRODUCT_FR620_RUSSIA ((FIT_GARMIN_PRODUCT)2072) +#define FIT_GARMIN_PRODUCT_FR220_RUSSIA ((FIT_GARMIN_PRODUCT)2073) +#define FIT_GARMIN_PRODUCT_VECTOR_S ((FIT_GARMIN_PRODUCT)2079) +#define FIT_GARMIN_PRODUCT_EDGE1000_KOREA ((FIT_GARMIN_PRODUCT)2100) +#define FIT_GARMIN_PRODUCT_FR920XT_TAIWAN ((FIT_GARMIN_PRODUCT)2130) +#define FIT_GARMIN_PRODUCT_FR920XT_CHINA ((FIT_GARMIN_PRODUCT)2131) +#define FIT_GARMIN_PRODUCT_FR920XT_JAPAN ((FIT_GARMIN_PRODUCT)2132) +#define FIT_GARMIN_PRODUCT_VIRBX ((FIT_GARMIN_PRODUCT)2134) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_APAC ((FIT_GARMIN_PRODUCT)2135) +#define FIT_GARMIN_PRODUCT_ETREX_TOUCH ((FIT_GARMIN_PRODUCT)2140) +#define FIT_GARMIN_PRODUCT_EDGE25 ((FIT_GARMIN_PRODUCT)2147) +#define FIT_GARMIN_PRODUCT_FR25 ((FIT_GARMIN_PRODUCT)2148) +#define FIT_GARMIN_PRODUCT_VIVO_FIT2 ((FIT_GARMIN_PRODUCT)2150) +#define FIT_GARMIN_PRODUCT_FR225 ((FIT_GARMIN_PRODUCT)2153) +#define FIT_GARMIN_PRODUCT_FR630 ((FIT_GARMIN_PRODUCT)2156) +#define FIT_GARMIN_PRODUCT_FR230 ((FIT_GARMIN_PRODUCT)2157) +#define FIT_GARMIN_PRODUCT_FR735XT ((FIT_GARMIN_PRODUCT)2158) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_APAC ((FIT_GARMIN_PRODUCT)2160) +#define FIT_GARMIN_PRODUCT_VECTOR_2 ((FIT_GARMIN_PRODUCT)2161) +#define FIT_GARMIN_PRODUCT_VECTOR_2S ((FIT_GARMIN_PRODUCT)2162) +#define FIT_GARMIN_PRODUCT_VIRBXE ((FIT_GARMIN_PRODUCT)2172) +#define FIT_GARMIN_PRODUCT_FR620_TAIWAN ((FIT_GARMIN_PRODUCT)2173) +#define FIT_GARMIN_PRODUCT_FR220_TAIWAN ((FIT_GARMIN_PRODUCT)2174) +#define FIT_GARMIN_PRODUCT_TRUSWING ((FIT_GARMIN_PRODUCT)2175) +#define FIT_GARMIN_PRODUCT_D2AIRVENU ((FIT_GARMIN_PRODUCT)2187) +#define FIT_GARMIN_PRODUCT_FENIX3_CHINA ((FIT_GARMIN_PRODUCT)2188) +#define FIT_GARMIN_PRODUCT_FENIX3_TWN ((FIT_GARMIN_PRODUCT)2189) +#define FIT_GARMIN_PRODUCT_VARIA_HEADLIGHT ((FIT_GARMIN_PRODUCT)2192) +#define FIT_GARMIN_PRODUCT_VARIA_TAILLIGHT_OLD ((FIT_GARMIN_PRODUCT)2193) +#define FIT_GARMIN_PRODUCT_EDGE_EXPLORE_1000 ((FIT_GARMIN_PRODUCT)2204) +#define FIT_GARMIN_PRODUCT_FR225_ASIA ((FIT_GARMIN_PRODUCT)2219) +#define FIT_GARMIN_PRODUCT_VARIA_RADAR_TAILLIGHT ((FIT_GARMIN_PRODUCT)2225) +#define FIT_GARMIN_PRODUCT_VARIA_RADAR_DISPLAY ((FIT_GARMIN_PRODUCT)2226) +#define FIT_GARMIN_PRODUCT_EDGE20 ((FIT_GARMIN_PRODUCT)2238) +#define FIT_GARMIN_PRODUCT_EDGE520_ASIA ((FIT_GARMIN_PRODUCT)2260) +#define FIT_GARMIN_PRODUCT_EDGE520_JAPAN ((FIT_GARMIN_PRODUCT)2261) +#define FIT_GARMIN_PRODUCT_D2_BRAVO ((FIT_GARMIN_PRODUCT)2262) +#define FIT_GARMIN_PRODUCT_APPROACH_S20 ((FIT_GARMIN_PRODUCT)2266) +#define FIT_GARMIN_PRODUCT_VIVO_SMART2 ((FIT_GARMIN_PRODUCT)2271) +#define FIT_GARMIN_PRODUCT_EDGE1000_THAI ((FIT_GARMIN_PRODUCT)2274) +#define FIT_GARMIN_PRODUCT_VARIA_REMOTE ((FIT_GARMIN_PRODUCT)2276) +#define FIT_GARMIN_PRODUCT_EDGE25_ASIA ((FIT_GARMIN_PRODUCT)2288) +#define FIT_GARMIN_PRODUCT_EDGE25_JPN ((FIT_GARMIN_PRODUCT)2289) +#define FIT_GARMIN_PRODUCT_EDGE20_ASIA ((FIT_GARMIN_PRODUCT)2290) +#define FIT_GARMIN_PRODUCT_APPROACH_X40 ((FIT_GARMIN_PRODUCT)2292) +#define FIT_GARMIN_PRODUCT_FENIX3_JAPAN ((FIT_GARMIN_PRODUCT)2293) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_EMEA ((FIT_GARMIN_PRODUCT)2294) +#define FIT_GARMIN_PRODUCT_FR630_ASIA ((FIT_GARMIN_PRODUCT)2310) +#define FIT_GARMIN_PRODUCT_FR630_JPN ((FIT_GARMIN_PRODUCT)2311) +#define FIT_GARMIN_PRODUCT_FR230_JPN ((FIT_GARMIN_PRODUCT)2313) +#define FIT_GARMIN_PRODUCT_HRM4_RUN ((FIT_GARMIN_PRODUCT)2327) +#define FIT_GARMIN_PRODUCT_EPIX_JAPAN ((FIT_GARMIN_PRODUCT)2332) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_HR ((FIT_GARMIN_PRODUCT)2337) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_GPS_HR ((FIT_GARMIN_PRODUCT)2347) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_HR ((FIT_GARMIN_PRODUCT)2348) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_HR_ASIA ((FIT_GARMIN_PRODUCT)2361) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_GPS_HR_ASIA ((FIT_GARMIN_PRODUCT)2362) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE ((FIT_GARMIN_PRODUCT)2368) +#define FIT_GARMIN_PRODUCT_VARIA_TAILLIGHT ((FIT_GARMIN_PRODUCT)2379) +#define FIT_GARMIN_PRODUCT_FR235_ASIA ((FIT_GARMIN_PRODUCT)2396) +#define FIT_GARMIN_PRODUCT_FR235_JAPAN ((FIT_GARMIN_PRODUCT)2397) +#define FIT_GARMIN_PRODUCT_VARIA_VISION ((FIT_GARMIN_PRODUCT)2398) +#define FIT_GARMIN_PRODUCT_VIVO_FIT3 ((FIT_GARMIN_PRODUCT)2406) +#define FIT_GARMIN_PRODUCT_FENIX3_KOREA ((FIT_GARMIN_PRODUCT)2407) +#define FIT_GARMIN_PRODUCT_FENIX3_SEA ((FIT_GARMIN_PRODUCT)2408) +#define FIT_GARMIN_PRODUCT_FENIX3_HR ((FIT_GARMIN_PRODUCT)2413) +#define FIT_GARMIN_PRODUCT_VIRB_ULTRA_30 ((FIT_GARMIN_PRODUCT)2417) +#define FIT_GARMIN_PRODUCT_INDEX_SMART_SCALE ((FIT_GARMIN_PRODUCT)2429) +#define FIT_GARMIN_PRODUCT_FR235 ((FIT_GARMIN_PRODUCT)2431) +#define FIT_GARMIN_PRODUCT_FENIX3_CHRONOS ((FIT_GARMIN_PRODUCT)2432) +#define FIT_GARMIN_PRODUCT_OREGON7XX ((FIT_GARMIN_PRODUCT)2441) +#define FIT_GARMIN_PRODUCT_RINO7XX ((FIT_GARMIN_PRODUCT)2444) +#define FIT_GARMIN_PRODUCT_EPIX_KOREA ((FIT_GARMIN_PRODUCT)2457) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_CHN ((FIT_GARMIN_PRODUCT)2473) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_TWN ((FIT_GARMIN_PRODUCT)2474) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_JPN ((FIT_GARMIN_PRODUCT)2475) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_SEA ((FIT_GARMIN_PRODUCT)2476) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_KOR ((FIT_GARMIN_PRODUCT)2477) +#define FIT_GARMIN_PRODUCT_NAUTIX ((FIT_GARMIN_PRODUCT)2496) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_HR_APAC ((FIT_GARMIN_PRODUCT)2497) +#define FIT_GARMIN_PRODUCT_OREGON7XX_WW ((FIT_GARMIN_PRODUCT)2512) +#define FIT_GARMIN_PRODUCT_EDGE_820 ((FIT_GARMIN_PRODUCT)2530) +#define FIT_GARMIN_PRODUCT_EDGE_EXPLORE_820 ((FIT_GARMIN_PRODUCT)2531) +#define FIT_GARMIN_PRODUCT_FR735XT_APAC ((FIT_GARMIN_PRODUCT)2533) +#define FIT_GARMIN_PRODUCT_FR735XT_JAPAN ((FIT_GARMIN_PRODUCT)2534) +#define FIT_GARMIN_PRODUCT_FENIX5S ((FIT_GARMIN_PRODUCT)2544) +#define FIT_GARMIN_PRODUCT_D2_BRAVO_TITANIUM ((FIT_GARMIN_PRODUCT)2547) +#define FIT_GARMIN_PRODUCT_VARIA_UT800 ((FIT_GARMIN_PRODUCT)2567) // Varia UT 800 SW +#define FIT_GARMIN_PRODUCT_RUNNING_DYNAMICS_POD ((FIT_GARMIN_PRODUCT)2593) +#define FIT_GARMIN_PRODUCT_EDGE_820_CHINA ((FIT_GARMIN_PRODUCT)2599) +#define FIT_GARMIN_PRODUCT_EDGE_820_JAPAN ((FIT_GARMIN_PRODUCT)2600) +#define FIT_GARMIN_PRODUCT_FENIX5X ((FIT_GARMIN_PRODUCT)2604) +#define FIT_GARMIN_PRODUCT_VIVO_FIT_JR ((FIT_GARMIN_PRODUCT)2606) +#define FIT_GARMIN_PRODUCT_VIVO_SMART3 ((FIT_GARMIN_PRODUCT)2622) +#define FIT_GARMIN_PRODUCT_VIVO_SPORT ((FIT_GARMIN_PRODUCT)2623) +#define FIT_GARMIN_PRODUCT_EDGE_820_TAIWAN ((FIT_GARMIN_PRODUCT)2628) +#define FIT_GARMIN_PRODUCT_EDGE_820_KOREA ((FIT_GARMIN_PRODUCT)2629) +#define FIT_GARMIN_PRODUCT_EDGE_820_SEA ((FIT_GARMIN_PRODUCT)2630) +#define FIT_GARMIN_PRODUCT_FR35_HEBREW ((FIT_GARMIN_PRODUCT)2650) +#define FIT_GARMIN_PRODUCT_APPROACH_S60 ((FIT_GARMIN_PRODUCT)2656) +#define FIT_GARMIN_PRODUCT_FR35_APAC ((FIT_GARMIN_PRODUCT)2667) +#define FIT_GARMIN_PRODUCT_FR35_JAPAN ((FIT_GARMIN_PRODUCT)2668) +#define FIT_GARMIN_PRODUCT_FENIX3_CHRONOS_ASIA ((FIT_GARMIN_PRODUCT)2675) +#define FIT_GARMIN_PRODUCT_VIRB_360 ((FIT_GARMIN_PRODUCT)2687) +#define FIT_GARMIN_PRODUCT_FR935 ((FIT_GARMIN_PRODUCT)2691) +#define FIT_GARMIN_PRODUCT_FENIX5 ((FIT_GARMIN_PRODUCT)2697) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3 ((FIT_GARMIN_PRODUCT)2700) +#define FIT_GARMIN_PRODUCT_FR235_CHINA_NFC ((FIT_GARMIN_PRODUCT)2733) +#define FIT_GARMIN_PRODUCT_FORETREX_601_701 ((FIT_GARMIN_PRODUCT)2769) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE_HR ((FIT_GARMIN_PRODUCT)2772) +#define FIT_GARMIN_PRODUCT_EDGE_1030 ((FIT_GARMIN_PRODUCT)2713) +#define FIT_GARMIN_PRODUCT_VECTOR_3 ((FIT_GARMIN_PRODUCT)2787) +#define FIT_GARMIN_PRODUCT_FENIX5_ASIA ((FIT_GARMIN_PRODUCT)2796) +#define FIT_GARMIN_PRODUCT_FENIX5S_ASIA ((FIT_GARMIN_PRODUCT)2797) +#define FIT_GARMIN_PRODUCT_FENIX5X_ASIA ((FIT_GARMIN_PRODUCT)2798) +#define FIT_GARMIN_PRODUCT_APPROACH_Z80 ((FIT_GARMIN_PRODUCT)2806) +#define FIT_GARMIN_PRODUCT_FR35_KOREA ((FIT_GARMIN_PRODUCT)2814) +#define FIT_GARMIN_PRODUCT_D2CHARLIE ((FIT_GARMIN_PRODUCT)2819) +#define FIT_GARMIN_PRODUCT_VIVO_SMART3_APAC ((FIT_GARMIN_PRODUCT)2831) +#define FIT_GARMIN_PRODUCT_VIVO_SPORT_APAC ((FIT_GARMIN_PRODUCT)2832) +#define FIT_GARMIN_PRODUCT_FR935_ASIA ((FIT_GARMIN_PRODUCT)2833) +#define FIT_GARMIN_PRODUCT_DESCENT ((FIT_GARMIN_PRODUCT)2859) +#define FIT_GARMIN_PRODUCT_VIVO_FIT4 ((FIT_GARMIN_PRODUCT)2878) +#define FIT_GARMIN_PRODUCT_FR645 ((FIT_GARMIN_PRODUCT)2886) +#define FIT_GARMIN_PRODUCT_FR645M ((FIT_GARMIN_PRODUCT)2888) +#define FIT_GARMIN_PRODUCT_FR30 ((FIT_GARMIN_PRODUCT)2891) +#define FIT_GARMIN_PRODUCT_FENIX5S_PLUS ((FIT_GARMIN_PRODUCT)2900) +#define FIT_GARMIN_PRODUCT_EDGE_130 ((FIT_GARMIN_PRODUCT)2909) +#define FIT_GARMIN_PRODUCT_EDGE_1030_ASIA ((FIT_GARMIN_PRODUCT)2924) +#define FIT_GARMIN_PRODUCT_VIVOSMART_4 ((FIT_GARMIN_PRODUCT)2927) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE_HR_ASIA ((FIT_GARMIN_PRODUCT)2945) +#define FIT_GARMIN_PRODUCT_APPROACH_X10 ((FIT_GARMIN_PRODUCT)2962) +#define FIT_GARMIN_PRODUCT_FR30_ASIA ((FIT_GARMIN_PRODUCT)2977) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3M_W ((FIT_GARMIN_PRODUCT)2988) +#define FIT_GARMIN_PRODUCT_FR645_ASIA ((FIT_GARMIN_PRODUCT)3003) +#define FIT_GARMIN_PRODUCT_FR645M_ASIA ((FIT_GARMIN_PRODUCT)3004) +#define FIT_GARMIN_PRODUCT_EDGE_EXPLORE ((FIT_GARMIN_PRODUCT)3011) +#define FIT_GARMIN_PRODUCT_GPSMAP66 ((FIT_GARMIN_PRODUCT)3028) +#define FIT_GARMIN_PRODUCT_APPROACH_S10 ((FIT_GARMIN_PRODUCT)3049) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3M_L ((FIT_GARMIN_PRODUCT)3066) +#define FIT_GARMIN_PRODUCT_APPROACH_G80 ((FIT_GARMIN_PRODUCT)3085) +#define FIT_GARMIN_PRODUCT_EDGE_130_ASIA ((FIT_GARMIN_PRODUCT)3092) +#define FIT_GARMIN_PRODUCT_EDGE_1030_BONTRAGER ((FIT_GARMIN_PRODUCT)3095) +#define FIT_GARMIN_PRODUCT_FENIX5_PLUS ((FIT_GARMIN_PRODUCT)3110) +#define FIT_GARMIN_PRODUCT_FENIX5X_PLUS ((FIT_GARMIN_PRODUCT)3111) +#define FIT_GARMIN_PRODUCT_EDGE_520_PLUS ((FIT_GARMIN_PRODUCT)3112) +#define FIT_GARMIN_PRODUCT_FR945 ((FIT_GARMIN_PRODUCT)3113) +#define FIT_GARMIN_PRODUCT_EDGE_530 ((FIT_GARMIN_PRODUCT)3121) +#define FIT_GARMIN_PRODUCT_EDGE_830 ((FIT_GARMIN_PRODUCT)3122) +#define FIT_GARMIN_PRODUCT_INSTINCT_ESPORTS ((FIT_GARMIN_PRODUCT)3126) +#define FIT_GARMIN_PRODUCT_FENIX5S_PLUS_APAC ((FIT_GARMIN_PRODUCT)3134) +#define FIT_GARMIN_PRODUCT_FENIX5X_PLUS_APAC ((FIT_GARMIN_PRODUCT)3135) +#define FIT_GARMIN_PRODUCT_EDGE_520_PLUS_APAC ((FIT_GARMIN_PRODUCT)3142) +#define FIT_GARMIN_PRODUCT_FR235L_ASIA ((FIT_GARMIN_PRODUCT)3144) +#define FIT_GARMIN_PRODUCT_FR245_ASIA ((FIT_GARMIN_PRODUCT)3145) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE3M_APAC ((FIT_GARMIN_PRODUCT)3163) +#define FIT_GARMIN_PRODUCT_GEN3_BSM ((FIT_GARMIN_PRODUCT)3192) // gen3 bike speed sensor +#define FIT_GARMIN_PRODUCT_GEN3_BCM ((FIT_GARMIN_PRODUCT)3193) // gen3 bike cadence sensor +#define FIT_GARMIN_PRODUCT_VIVO_SMART4_ASIA ((FIT_GARMIN_PRODUCT)3218) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE4_SMALL ((FIT_GARMIN_PRODUCT)3224) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE4_LARGE ((FIT_GARMIN_PRODUCT)3225) +#define FIT_GARMIN_PRODUCT_VENU ((FIT_GARMIN_PRODUCT)3226) +#define FIT_GARMIN_PRODUCT_MARQ_DRIVER ((FIT_GARMIN_PRODUCT)3246) +#define FIT_GARMIN_PRODUCT_MARQ_AVIATOR ((FIT_GARMIN_PRODUCT)3247) +#define FIT_GARMIN_PRODUCT_MARQ_CAPTAIN ((FIT_GARMIN_PRODUCT)3248) +#define FIT_GARMIN_PRODUCT_MARQ_COMMANDER ((FIT_GARMIN_PRODUCT)3249) +#define FIT_GARMIN_PRODUCT_MARQ_EXPEDITION ((FIT_GARMIN_PRODUCT)3250) +#define FIT_GARMIN_PRODUCT_MARQ_ATHLETE ((FIT_GARMIN_PRODUCT)3251) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2 ((FIT_GARMIN_PRODUCT)3258) +#define FIT_GARMIN_PRODUCT_GPSMAP66I ((FIT_GARMIN_PRODUCT)3284) +#define FIT_GARMIN_PRODUCT_FENIX6S_SPORT ((FIT_GARMIN_PRODUCT)3287) +#define FIT_GARMIN_PRODUCT_FENIX6S ((FIT_GARMIN_PRODUCT)3288) +#define FIT_GARMIN_PRODUCT_FENIX6_SPORT ((FIT_GARMIN_PRODUCT)3289) +#define FIT_GARMIN_PRODUCT_FENIX6 ((FIT_GARMIN_PRODUCT)3290) +#define FIT_GARMIN_PRODUCT_FENIX6X ((FIT_GARMIN_PRODUCT)3291) +#define FIT_GARMIN_PRODUCT_HRM_DUAL ((FIT_GARMIN_PRODUCT)3299) // HRM-Dual +#define FIT_GARMIN_PRODUCT_HRM_PRO ((FIT_GARMIN_PRODUCT)3300) // HRM-Pro +#define FIT_GARMIN_PRODUCT_VIVO_MOVE3_PREMIUM ((FIT_GARMIN_PRODUCT)3308) +#define FIT_GARMIN_PRODUCT_APPROACH_S40 ((FIT_GARMIN_PRODUCT)3314) +#define FIT_GARMIN_PRODUCT_FR245M_ASIA ((FIT_GARMIN_PRODUCT)3321) +#define FIT_GARMIN_PRODUCT_EDGE_530_APAC ((FIT_GARMIN_PRODUCT)3349) +#define FIT_GARMIN_PRODUCT_EDGE_830_APAC ((FIT_GARMIN_PRODUCT)3350) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE3 ((FIT_GARMIN_PRODUCT)3378) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE4_SMALL_ASIA ((FIT_GARMIN_PRODUCT)3387) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE4_LARGE_ASIA ((FIT_GARMIN_PRODUCT)3388) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE4_OLED_ASIA ((FIT_GARMIN_PRODUCT)3389) +#define FIT_GARMIN_PRODUCT_SWIM2 ((FIT_GARMIN_PRODUCT)3405) +#define FIT_GARMIN_PRODUCT_MARQ_DRIVER_ASIA ((FIT_GARMIN_PRODUCT)3420) +#define FIT_GARMIN_PRODUCT_MARQ_AVIATOR_ASIA ((FIT_GARMIN_PRODUCT)3421) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE3_ASIA ((FIT_GARMIN_PRODUCT)3422) +#define FIT_GARMIN_PRODUCT_FR945_ASIA ((FIT_GARMIN_PRODUCT)3441) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE3T_CHN ((FIT_GARMIN_PRODUCT)3446) +#define FIT_GARMIN_PRODUCT_MARQ_CAPTAIN_ASIA ((FIT_GARMIN_PRODUCT)3448) +#define FIT_GARMIN_PRODUCT_MARQ_COMMANDER_ASIA ((FIT_GARMIN_PRODUCT)3449) +#define FIT_GARMIN_PRODUCT_MARQ_EXPEDITION_ASIA ((FIT_GARMIN_PRODUCT)3450) +#define FIT_GARMIN_PRODUCT_MARQ_ATHLETE_ASIA ((FIT_GARMIN_PRODUCT)3451) +#define FIT_GARMIN_PRODUCT_INSTINCT_SOLAR ((FIT_GARMIN_PRODUCT)3466) +#define FIT_GARMIN_PRODUCT_FR45_ASIA ((FIT_GARMIN_PRODUCT)3469) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3_DAIMLER ((FIT_GARMIN_PRODUCT)3473) +#define FIT_GARMIN_PRODUCT_LEGACY_REY ((FIT_GARMIN_PRODUCT)3498) +#define FIT_GARMIN_PRODUCT_LEGACY_DARTH_VADER ((FIT_GARMIN_PRODUCT)3499) +#define FIT_GARMIN_PRODUCT_LEGACY_CAPTAIN_MARVEL ((FIT_GARMIN_PRODUCT)3500) +#define FIT_GARMIN_PRODUCT_LEGACY_FIRST_AVENGER ((FIT_GARMIN_PRODUCT)3501) +#define FIT_GARMIN_PRODUCT_FENIX6S_SPORT_ASIA ((FIT_GARMIN_PRODUCT)3512) +#define FIT_GARMIN_PRODUCT_FENIX6S_ASIA ((FIT_GARMIN_PRODUCT)3513) +#define FIT_GARMIN_PRODUCT_FENIX6_SPORT_ASIA ((FIT_GARMIN_PRODUCT)3514) +#define FIT_GARMIN_PRODUCT_FENIX6_ASIA ((FIT_GARMIN_PRODUCT)3515) +#define FIT_GARMIN_PRODUCT_FENIX6X_ASIA ((FIT_GARMIN_PRODUCT)3516) +#define FIT_GARMIN_PRODUCT_LEGACY_CAPTAIN_MARVEL_ASIA ((FIT_GARMIN_PRODUCT)3535) +#define FIT_GARMIN_PRODUCT_LEGACY_FIRST_AVENGER_ASIA ((FIT_GARMIN_PRODUCT)3536) +#define FIT_GARMIN_PRODUCT_LEGACY_REY_ASIA ((FIT_GARMIN_PRODUCT)3537) +#define FIT_GARMIN_PRODUCT_LEGACY_DARTH_VADER_ASIA ((FIT_GARMIN_PRODUCT)3538) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2S ((FIT_GARMIN_PRODUCT)3542) +#define FIT_GARMIN_PRODUCT_EDGE_130_PLUS ((FIT_GARMIN_PRODUCT)3558) +#define FIT_GARMIN_PRODUCT_EDGE_1030_PLUS ((FIT_GARMIN_PRODUCT)3570) +#define FIT_GARMIN_PRODUCT_RALLY_200 ((FIT_GARMIN_PRODUCT)3578) // Rally 100/200 Power Meter Series +#define FIT_GARMIN_PRODUCT_FR745 ((FIT_GARMIN_PRODUCT)3589) +#define FIT_GARMIN_PRODUCT_VENUSQ ((FIT_GARMIN_PRODUCT)3600) +#define FIT_GARMIN_PRODUCT_LILY ((FIT_GARMIN_PRODUCT)3615) +#define FIT_GARMIN_PRODUCT_MARQ_ADVENTURER ((FIT_GARMIN_PRODUCT)3624) +#define FIT_GARMIN_PRODUCT_ENDURO ((FIT_GARMIN_PRODUCT)3638) +#define FIT_GARMIN_PRODUCT_SWIM2_APAC ((FIT_GARMIN_PRODUCT)3639) +#define FIT_GARMIN_PRODUCT_MARQ_ADVENTURER_ASIA ((FIT_GARMIN_PRODUCT)3648) +#define FIT_GARMIN_PRODUCT_FR945_LTE ((FIT_GARMIN_PRODUCT)3652) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2_ASIA ((FIT_GARMIN_PRODUCT)3702) // Mk2 and Mk2i +#define FIT_GARMIN_PRODUCT_VENU2 ((FIT_GARMIN_PRODUCT)3703) +#define FIT_GARMIN_PRODUCT_VENU2S ((FIT_GARMIN_PRODUCT)3704) +#define FIT_GARMIN_PRODUCT_VENU_DAIMLER_ASIA ((FIT_GARMIN_PRODUCT)3737) +#define FIT_GARMIN_PRODUCT_MARQ_GOLFER ((FIT_GARMIN_PRODUCT)3739) +#define FIT_GARMIN_PRODUCT_VENU_DAIMLER ((FIT_GARMIN_PRODUCT)3740) +#define FIT_GARMIN_PRODUCT_FR745_ASIA ((FIT_GARMIN_PRODUCT)3794) +#define FIT_GARMIN_PRODUCT_LILY_ASIA ((FIT_GARMIN_PRODUCT)3809) +#define FIT_GARMIN_PRODUCT_EDGE_1030_PLUS_ASIA ((FIT_GARMIN_PRODUCT)3812) +#define FIT_GARMIN_PRODUCT_EDGE_130_PLUS_ASIA ((FIT_GARMIN_PRODUCT)3813) +#define FIT_GARMIN_PRODUCT_APPROACH_S12 ((FIT_GARMIN_PRODUCT)3823) +#define FIT_GARMIN_PRODUCT_ENDURO_ASIA ((FIT_GARMIN_PRODUCT)3872) +#define FIT_GARMIN_PRODUCT_VENUSQ_ASIA ((FIT_GARMIN_PRODUCT)3837) +#define FIT_GARMIN_PRODUCT_MARQ_GOLFER_ASIA ((FIT_GARMIN_PRODUCT)3850) +#define FIT_GARMIN_PRODUCT_VENU2_PLUS ((FIT_GARMIN_PRODUCT)3851) +#define FIT_GARMIN_PRODUCT_FR55 ((FIT_GARMIN_PRODUCT)3869) +#define FIT_GARMIN_PRODUCT_INSTINCT_2 ((FIT_GARMIN_PRODUCT)3888) +#define FIT_GARMIN_PRODUCT_FENIX7S ((FIT_GARMIN_PRODUCT)3905) +#define FIT_GARMIN_PRODUCT_FENIX7 ((FIT_GARMIN_PRODUCT)3906) +#define FIT_GARMIN_PRODUCT_FENIX7X ((FIT_GARMIN_PRODUCT)3907) +#define FIT_GARMIN_PRODUCT_FENIX7S_APAC ((FIT_GARMIN_PRODUCT)3908) +#define FIT_GARMIN_PRODUCT_FENIX7_APAC ((FIT_GARMIN_PRODUCT)3909) +#define FIT_GARMIN_PRODUCT_FENIX7X_APAC ((FIT_GARMIN_PRODUCT)3910) +#define FIT_GARMIN_PRODUCT_APPROACH_G12 ((FIT_GARMIN_PRODUCT) 3927) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2S_ASIA ((FIT_GARMIN_PRODUCT)3930) +#define FIT_GARMIN_PRODUCT_APPROACH_S42 ((FIT_GARMIN_PRODUCT)3934) +#define FIT_GARMIN_PRODUCT_EPIX_GEN2 ((FIT_GARMIN_PRODUCT)3943) +#define FIT_GARMIN_PRODUCT_EPIX_GEN2_APAC ((FIT_GARMIN_PRODUCT)3944) +#define FIT_GARMIN_PRODUCT_VENU2S_ASIA ((FIT_GARMIN_PRODUCT)3949) +#define FIT_GARMIN_PRODUCT_VENU2_ASIA ((FIT_GARMIN_PRODUCT)3950) +#define FIT_GARMIN_PRODUCT_FR945_LTE_ASIA ((FIT_GARMIN_PRODUCT)3978) +#define FIT_GARMIN_PRODUCT_APPROACH_S12_ASIA ((FIT_GARMIN_PRODUCT)3986) +#define FIT_GARMIN_PRODUCT_APPROACH_G12_ASIA ((FIT_GARMIN_PRODUCT) 4001) +#define FIT_GARMIN_PRODUCT_APPROACH_S42_ASIA ((FIT_GARMIN_PRODUCT)4002) +#define FIT_GARMIN_PRODUCT_DESCENT_G1 ((FIT_GARMIN_PRODUCT)4005) +#define FIT_GARMIN_PRODUCT_VENU2_PLUS_ASIA ((FIT_GARMIN_PRODUCT)4017) +#define FIT_GARMIN_PRODUCT_FR55_ASIA ((FIT_GARMIN_PRODUCT)4033) +#define FIT_GARMIN_PRODUCT_INSTINCT_2_ASIA ((FIT_GARMIN_PRODUCT)4071) +#define FIT_GARMIN_PRODUCT_D2_AIR_X10 ((FIT_GARMIN_PRODUCT)4125) +#define FIT_GARMIN_PRODUCT_DESCENT_G1_ASIA ((FIT_GARMIN_PRODUCT)4132) +#define FIT_GARMIN_PRODUCT_TACX_NEO_SMART ((FIT_GARMIN_PRODUCT)4265) // Neo Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_NEO2_SMART ((FIT_GARMIN_PRODUCT)4266) // Neo 2 Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_NEO2_T_SMART ((FIT_GARMIN_PRODUCT)4267) // Neo 2T Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_NEO_SMART_BIKE ((FIT_GARMIN_PRODUCT)4268) // Neo Smart Bike, Tacx +#define FIT_GARMIN_PRODUCT_TACX_SATORI_SMART ((FIT_GARMIN_PRODUCT)4269) // Satori Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_FLOW_SMART ((FIT_GARMIN_PRODUCT)4270) // Flow Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_VORTEX_SMART ((FIT_GARMIN_PRODUCT)4271) // Vortex Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_BUSHIDO_SMART ((FIT_GARMIN_PRODUCT)4272) // Bushido Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_GENIUS_SMART ((FIT_GARMIN_PRODUCT)4273) // Genius Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_FLUX_FLUX_S_SMART ((FIT_GARMIN_PRODUCT)4274) // Flux/Flux S Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_FLUX2_SMART ((FIT_GARMIN_PRODUCT)4275) // Flux 2 Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_MAGNUM ((FIT_GARMIN_PRODUCT)4276) // Magnum, Tacx +#define FIT_GARMIN_PRODUCT_TACTIX7 ((FIT_GARMIN_PRODUCT)4135) +#define FIT_GARMIN_PRODUCT_SDM4 ((FIT_GARMIN_PRODUCT)10007) // SDM4 footpod +#define FIT_GARMIN_PRODUCT_EDGE_REMOTE ((FIT_GARMIN_PRODUCT)10014) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_WIN ((FIT_GARMIN_PRODUCT)20533) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_MAC ((FIT_GARMIN_PRODUCT)20534) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_MAC_CATALYST ((FIT_GARMIN_PRODUCT)20565) +#define FIT_GARMIN_PRODUCT_TRAINING_CENTER ((FIT_GARMIN_PRODUCT)20119) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_ANDROID ((FIT_GARMIN_PRODUCT)30045) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_IOS ((FIT_GARMIN_PRODUCT)30046) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_LEGACY ((FIT_GARMIN_PRODUCT)30047) +#define FIT_GARMIN_PRODUCT_CONNECTIQ_SIMULATOR ((FIT_GARMIN_PRODUCT)65531) +#define FIT_GARMIN_PRODUCT_ANDROID_ANTPLUS_PLUGIN ((FIT_GARMIN_PRODUCT)65532) +#define FIT_GARMIN_PRODUCT_CONNECT ((FIT_GARMIN_PRODUCT)65534) // Garmin Connect website +#define FIT_GARMIN_PRODUCT_COUNT 385 + +typedef FIT_UINT8 FIT_ANTPLUS_DEVICE_TYPE; +#define FIT_ANTPLUS_DEVICE_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_ANTPLUS_DEVICE_TYPE_ANTFS ((FIT_ANTPLUS_DEVICE_TYPE)1) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_POWER ((FIT_ANTPLUS_DEVICE_TYPE)11) +#define FIT_ANTPLUS_DEVICE_TYPE_ENVIRONMENT_SENSOR_LEGACY ((FIT_ANTPLUS_DEVICE_TYPE)12) +#define FIT_ANTPLUS_DEVICE_TYPE_MULTI_SPORT_SPEED_DISTANCE ((FIT_ANTPLUS_DEVICE_TYPE)15) +#define FIT_ANTPLUS_DEVICE_TYPE_CONTROL ((FIT_ANTPLUS_DEVICE_TYPE)16) +#define FIT_ANTPLUS_DEVICE_TYPE_FITNESS_EQUIPMENT ((FIT_ANTPLUS_DEVICE_TYPE)17) +#define FIT_ANTPLUS_DEVICE_TYPE_BLOOD_PRESSURE ((FIT_ANTPLUS_DEVICE_TYPE)18) +#define FIT_ANTPLUS_DEVICE_TYPE_GEOCACHE_NODE ((FIT_ANTPLUS_DEVICE_TYPE)19) +#define FIT_ANTPLUS_DEVICE_TYPE_LIGHT_ELECTRIC_VEHICLE ((FIT_ANTPLUS_DEVICE_TYPE)20) +#define FIT_ANTPLUS_DEVICE_TYPE_ENV_SENSOR ((FIT_ANTPLUS_DEVICE_TYPE)25) +#define FIT_ANTPLUS_DEVICE_TYPE_RACQUET ((FIT_ANTPLUS_DEVICE_TYPE)26) +#define FIT_ANTPLUS_DEVICE_TYPE_CONTROL_HUB ((FIT_ANTPLUS_DEVICE_TYPE)27) +#define FIT_ANTPLUS_DEVICE_TYPE_MUSCLE_OXYGEN ((FIT_ANTPLUS_DEVICE_TYPE)31) +#define FIT_ANTPLUS_DEVICE_TYPE_SHIFTING ((FIT_ANTPLUS_DEVICE_TYPE)34) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_LIGHT_MAIN ((FIT_ANTPLUS_DEVICE_TYPE)35) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_LIGHT_SHARED ((FIT_ANTPLUS_DEVICE_TYPE)36) +#define FIT_ANTPLUS_DEVICE_TYPE_EXD ((FIT_ANTPLUS_DEVICE_TYPE)38) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_RADAR ((FIT_ANTPLUS_DEVICE_TYPE)40) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_AERO ((FIT_ANTPLUS_DEVICE_TYPE)46) +#define FIT_ANTPLUS_DEVICE_TYPE_WEIGHT_SCALE ((FIT_ANTPLUS_DEVICE_TYPE)119) +#define FIT_ANTPLUS_DEVICE_TYPE_HEART_RATE ((FIT_ANTPLUS_DEVICE_TYPE)120) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_SPEED_CADENCE ((FIT_ANTPLUS_DEVICE_TYPE)121) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_CADENCE ((FIT_ANTPLUS_DEVICE_TYPE)122) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_SPEED ((FIT_ANTPLUS_DEVICE_TYPE)123) +#define FIT_ANTPLUS_DEVICE_TYPE_STRIDE_SPEED_DISTANCE ((FIT_ANTPLUS_DEVICE_TYPE)124) +#define FIT_ANTPLUS_DEVICE_TYPE_COUNT 25 + +typedef FIT_ENUM FIT_ANT_NETWORK; +#define FIT_ANT_NETWORK_INVALID FIT_ENUM_INVALID +#define FIT_ANT_NETWORK_PUBLIC ((FIT_ANT_NETWORK)0) +#define FIT_ANT_NETWORK_ANTPLUS ((FIT_ANT_NETWORK)1) +#define FIT_ANT_NETWORK_ANTFS ((FIT_ANT_NETWORK)2) +#define FIT_ANT_NETWORK_PRIVATE ((FIT_ANT_NETWORK)3) +#define FIT_ANT_NETWORK_COUNT 4 + +typedef FIT_UINT32Z FIT_WORKOUT_CAPABILITIES; +#define FIT_WORKOUT_CAPABILITIES_INVALID FIT_UINT32Z_INVALID +#define FIT_WORKOUT_CAPABILITIES_INTERVAL ((FIT_WORKOUT_CAPABILITIES)0x00000001) +#define FIT_WORKOUT_CAPABILITIES_CUSTOM ((FIT_WORKOUT_CAPABILITIES)0x00000002) +#define FIT_WORKOUT_CAPABILITIES_FITNESS_EQUIPMENT ((FIT_WORKOUT_CAPABILITIES)0x00000004) +#define FIT_WORKOUT_CAPABILITIES_FIRSTBEAT ((FIT_WORKOUT_CAPABILITIES)0x00000008) +#define FIT_WORKOUT_CAPABILITIES_NEW_LEAF ((FIT_WORKOUT_CAPABILITIES)0x00000010) +#define FIT_WORKOUT_CAPABILITIES_TCX ((FIT_WORKOUT_CAPABILITIES)0x00000020) // For backwards compatibility. Watch should add missing id fields then clear flag. +#define FIT_WORKOUT_CAPABILITIES_SPEED ((FIT_WORKOUT_CAPABILITIES)0x00000080) // Speed source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_HEART_RATE ((FIT_WORKOUT_CAPABILITIES)0x00000100) // Heart rate source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_DISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00000200) // Distance source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_CADENCE ((FIT_WORKOUT_CAPABILITIES)0x00000400) // Cadence source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_POWER ((FIT_WORKOUT_CAPABILITIES)0x00000800) // Power source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_GRADE ((FIT_WORKOUT_CAPABILITIES)0x00001000) // Grade source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_RESISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00002000) // Resistance source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_PROTECTED ((FIT_WORKOUT_CAPABILITIES)0x00004000) +#define FIT_WORKOUT_CAPABILITIES_COUNT 14 + +typedef FIT_UINT8 FIT_BATTERY_STATUS; +#define FIT_BATTERY_STATUS_INVALID FIT_UINT8_INVALID +#define FIT_BATTERY_STATUS_NEW ((FIT_BATTERY_STATUS)1) +#define FIT_BATTERY_STATUS_GOOD ((FIT_BATTERY_STATUS)2) +#define FIT_BATTERY_STATUS_OK ((FIT_BATTERY_STATUS)3) +#define FIT_BATTERY_STATUS_LOW ((FIT_BATTERY_STATUS)4) +#define FIT_BATTERY_STATUS_CRITICAL ((FIT_BATTERY_STATUS)5) +#define FIT_BATTERY_STATUS_CHARGING ((FIT_BATTERY_STATUS)6) +#define FIT_BATTERY_STATUS_UNKNOWN ((FIT_BATTERY_STATUS)7) +#define FIT_BATTERY_STATUS_COUNT 7 + +typedef FIT_ENUM FIT_HR_TYPE; +#define FIT_HR_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_HR_TYPE_NORMAL ((FIT_HR_TYPE)0) +#define FIT_HR_TYPE_IRREGULAR ((FIT_HR_TYPE)1) +#define FIT_HR_TYPE_COUNT 2 + +typedef FIT_UINT32Z FIT_COURSE_CAPABILITIES; +#define FIT_COURSE_CAPABILITIES_INVALID FIT_UINT32Z_INVALID +#define FIT_COURSE_CAPABILITIES_PROCESSED ((FIT_COURSE_CAPABILITIES)0x00000001) +#define FIT_COURSE_CAPABILITIES_VALID ((FIT_COURSE_CAPABILITIES)0x00000002) +#define FIT_COURSE_CAPABILITIES_TIME ((FIT_COURSE_CAPABILITIES)0x00000004) +#define FIT_COURSE_CAPABILITIES_DISTANCE ((FIT_COURSE_CAPABILITIES)0x00000008) +#define FIT_COURSE_CAPABILITIES_POSITION ((FIT_COURSE_CAPABILITIES)0x00000010) +#define FIT_COURSE_CAPABILITIES_HEART_RATE ((FIT_COURSE_CAPABILITIES)0x00000020) +#define FIT_COURSE_CAPABILITIES_POWER ((FIT_COURSE_CAPABILITIES)0x00000040) +#define FIT_COURSE_CAPABILITIES_CADENCE ((FIT_COURSE_CAPABILITIES)0x00000080) +#define FIT_COURSE_CAPABILITIES_TRAINING ((FIT_COURSE_CAPABILITIES)0x00000100) +#define FIT_COURSE_CAPABILITIES_NAVIGATION ((FIT_COURSE_CAPABILITIES)0x00000200) +#define FIT_COURSE_CAPABILITIES_BIKEWAY ((FIT_COURSE_CAPABILITIES)0x00000400) +#define FIT_COURSE_CAPABILITIES_COUNT 11 + +typedef FIT_UINT16 FIT_WEIGHT; +#define FIT_WEIGHT_INVALID FIT_UINT16_INVALID +#define FIT_WEIGHT_CALCULATING ((FIT_WEIGHT)0xFFFE) +#define FIT_WEIGHT_COUNT 1 + +typedef FIT_UINT32 FIT_WORKOUT_HR; // 0 - 100 indicates% of max hr; >100 indicates bpm (255 max) plus 100 +#define FIT_WORKOUT_HR_INVALID FIT_UINT32_INVALID +#define FIT_WORKOUT_HR_BPM_OFFSET ((FIT_WORKOUT_HR)100) +#define FIT_WORKOUT_HR_COUNT 1 + +typedef FIT_UINT32 FIT_WORKOUT_POWER; // 0 - 1000 indicates % of functional threshold power; >1000 indicates watts plus 1000. +#define FIT_WORKOUT_POWER_INVALID FIT_UINT32_INVALID +#define FIT_WORKOUT_POWER_WATTS_OFFSET ((FIT_WORKOUT_POWER)1000) +#define FIT_WORKOUT_POWER_COUNT 1 + +typedef FIT_ENUM FIT_BP_STATUS; +#define FIT_BP_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_BP_STATUS_NO_ERROR ((FIT_BP_STATUS)0) +#define FIT_BP_STATUS_ERROR_INCOMPLETE_DATA ((FIT_BP_STATUS)1) +#define FIT_BP_STATUS_ERROR_NO_MEASUREMENT ((FIT_BP_STATUS)2) +#define FIT_BP_STATUS_ERROR_DATA_OUT_OF_RANGE ((FIT_BP_STATUS)3) +#define FIT_BP_STATUS_ERROR_IRREGULAR_HEART_RATE ((FIT_BP_STATUS)4) +#define FIT_BP_STATUS_COUNT 5 + +typedef FIT_UINT16 FIT_USER_LOCAL_ID; +#define FIT_USER_LOCAL_ID_INVALID FIT_UINT16_INVALID +#define FIT_USER_LOCAL_ID_LOCAL_MIN ((FIT_USER_LOCAL_ID)0x0000) +#define FIT_USER_LOCAL_ID_LOCAL_MAX ((FIT_USER_LOCAL_ID)0x000F) +#define FIT_USER_LOCAL_ID_STATIONARY_MIN ((FIT_USER_LOCAL_ID)0x0010) +#define FIT_USER_LOCAL_ID_STATIONARY_MAX ((FIT_USER_LOCAL_ID)0x00FF) +#define FIT_USER_LOCAL_ID_PORTABLE_MIN ((FIT_USER_LOCAL_ID)0x0100) +#define FIT_USER_LOCAL_ID_PORTABLE_MAX ((FIT_USER_LOCAL_ID)0xFFFE) +#define FIT_USER_LOCAL_ID_COUNT 6 + +typedef FIT_ENUM FIT_SWIM_STROKE; +#define FIT_SWIM_STROKE_INVALID FIT_ENUM_INVALID +#define FIT_SWIM_STROKE_FREESTYLE ((FIT_SWIM_STROKE)0) +#define FIT_SWIM_STROKE_BACKSTROKE ((FIT_SWIM_STROKE)1) +#define FIT_SWIM_STROKE_BREASTSTROKE ((FIT_SWIM_STROKE)2) +#define FIT_SWIM_STROKE_BUTTERFLY ((FIT_SWIM_STROKE)3) +#define FIT_SWIM_STROKE_DRILL ((FIT_SWIM_STROKE)4) +#define FIT_SWIM_STROKE_MIXED ((FIT_SWIM_STROKE)5) +#define FIT_SWIM_STROKE_IM ((FIT_SWIM_STROKE)6) // IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order. +#define FIT_SWIM_STROKE_COUNT 7 + +typedef FIT_ENUM FIT_ACTIVITY_TYPE; +#define FIT_ACTIVITY_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_TYPE_GENERIC ((FIT_ACTIVITY_TYPE)0) +#define FIT_ACTIVITY_TYPE_RUNNING ((FIT_ACTIVITY_TYPE)1) +#define FIT_ACTIVITY_TYPE_CYCLING ((FIT_ACTIVITY_TYPE)2) +#define FIT_ACTIVITY_TYPE_TRANSITION ((FIT_ACTIVITY_TYPE)3) // Mulitsport transition +#define FIT_ACTIVITY_TYPE_FITNESS_EQUIPMENT ((FIT_ACTIVITY_TYPE)4) +#define FIT_ACTIVITY_TYPE_SWIMMING ((FIT_ACTIVITY_TYPE)5) +#define FIT_ACTIVITY_TYPE_WALKING ((FIT_ACTIVITY_TYPE)6) +#define FIT_ACTIVITY_TYPE_SEDENTARY ((FIT_ACTIVITY_TYPE)8) +#define FIT_ACTIVITY_TYPE_ALL ((FIT_ACTIVITY_TYPE)254) // All is for goals only to include all sports. +#define FIT_ACTIVITY_TYPE_COUNT 9 + +typedef FIT_ENUM FIT_ACTIVITY_SUBTYPE; +#define FIT_ACTIVITY_SUBTYPE_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_SUBTYPE_GENERIC ((FIT_ACTIVITY_SUBTYPE)0) +#define FIT_ACTIVITY_SUBTYPE_TREADMILL ((FIT_ACTIVITY_SUBTYPE)1) // Run +#define FIT_ACTIVITY_SUBTYPE_STREET ((FIT_ACTIVITY_SUBTYPE)2) // Run +#define FIT_ACTIVITY_SUBTYPE_TRAIL ((FIT_ACTIVITY_SUBTYPE)3) // Run +#define FIT_ACTIVITY_SUBTYPE_TRACK ((FIT_ACTIVITY_SUBTYPE)4) // Run +#define FIT_ACTIVITY_SUBTYPE_SPIN ((FIT_ACTIVITY_SUBTYPE)5) // Cycling +#define FIT_ACTIVITY_SUBTYPE_INDOOR_CYCLING ((FIT_ACTIVITY_SUBTYPE)6) // Cycling +#define FIT_ACTIVITY_SUBTYPE_ROAD ((FIT_ACTIVITY_SUBTYPE)7) // Cycling +#define FIT_ACTIVITY_SUBTYPE_MOUNTAIN ((FIT_ACTIVITY_SUBTYPE)8) // Cycling +#define FIT_ACTIVITY_SUBTYPE_DOWNHILL ((FIT_ACTIVITY_SUBTYPE)9) // Cycling +#define FIT_ACTIVITY_SUBTYPE_RECUMBENT ((FIT_ACTIVITY_SUBTYPE)10) // Cycling +#define FIT_ACTIVITY_SUBTYPE_CYCLOCROSS ((FIT_ACTIVITY_SUBTYPE)11) // Cycling +#define FIT_ACTIVITY_SUBTYPE_HAND_CYCLING ((FIT_ACTIVITY_SUBTYPE)12) // Cycling +#define FIT_ACTIVITY_SUBTYPE_TRACK_CYCLING ((FIT_ACTIVITY_SUBTYPE)13) // Cycling +#define FIT_ACTIVITY_SUBTYPE_INDOOR_ROWING ((FIT_ACTIVITY_SUBTYPE)14) // Fitness Equipment +#define FIT_ACTIVITY_SUBTYPE_ELLIPTICAL ((FIT_ACTIVITY_SUBTYPE)15) // Fitness Equipment +#define FIT_ACTIVITY_SUBTYPE_STAIR_CLIMBING ((FIT_ACTIVITY_SUBTYPE)16) // Fitness Equipment +#define FIT_ACTIVITY_SUBTYPE_LAP_SWIMMING ((FIT_ACTIVITY_SUBTYPE)17) // Swimming +#define FIT_ACTIVITY_SUBTYPE_OPEN_WATER ((FIT_ACTIVITY_SUBTYPE)18) // Swimming +#define FIT_ACTIVITY_SUBTYPE_ALL ((FIT_ACTIVITY_SUBTYPE)254) +#define FIT_ACTIVITY_SUBTYPE_COUNT 20 + +typedef FIT_ENUM FIT_ACTIVITY_LEVEL; +#define FIT_ACTIVITY_LEVEL_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_LEVEL_LOW ((FIT_ACTIVITY_LEVEL)0) +#define FIT_ACTIVITY_LEVEL_MEDIUM ((FIT_ACTIVITY_LEVEL)1) +#define FIT_ACTIVITY_LEVEL_HIGH ((FIT_ACTIVITY_LEVEL)2) +#define FIT_ACTIVITY_LEVEL_COUNT 3 + +typedef FIT_ENUM FIT_SIDE; +#define FIT_SIDE_INVALID FIT_ENUM_INVALID +#define FIT_SIDE_RIGHT ((FIT_SIDE)0) +#define FIT_SIDE_LEFT ((FIT_SIDE)1) +#define FIT_SIDE_COUNT 2 + +typedef FIT_UINT8 FIT_LEFT_RIGHT_BALANCE; +#define FIT_LEFT_RIGHT_BALANCE_INVALID FIT_UINT8_INVALID +#define FIT_LEFT_RIGHT_BALANCE_MASK ((FIT_LEFT_RIGHT_BALANCE)0x7F) // % contribution +#define FIT_LEFT_RIGHT_BALANCE_RIGHT ((FIT_LEFT_RIGHT_BALANCE)0x80) // data corresponds to right if set, otherwise unknown +#define FIT_LEFT_RIGHT_BALANCE_COUNT 2 + +typedef FIT_UINT16 FIT_LEFT_RIGHT_BALANCE_100; +#define FIT_LEFT_RIGHT_BALANCE_100_INVALID FIT_UINT16_INVALID +#define FIT_LEFT_RIGHT_BALANCE_100_MASK ((FIT_LEFT_RIGHT_BALANCE_100)0x3FFF) // % contribution scaled by 100 +#define FIT_LEFT_RIGHT_BALANCE_100_RIGHT ((FIT_LEFT_RIGHT_BALANCE_100)0x8000) // data corresponds to right if set, otherwise unknown +#define FIT_LEFT_RIGHT_BALANCE_100_COUNT 2 + +typedef FIT_ENUM FIT_LENGTH_TYPE; +#define FIT_LENGTH_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_LENGTH_TYPE_IDLE ((FIT_LENGTH_TYPE)0) // Rest period. Length with no strokes +#define FIT_LENGTH_TYPE_ACTIVE ((FIT_LENGTH_TYPE)1) // Length with strokes. +#define FIT_LENGTH_TYPE_COUNT 2 + +typedef FIT_ENUM FIT_DAY_OF_WEEK; +#define FIT_DAY_OF_WEEK_INVALID FIT_ENUM_INVALID +#define FIT_DAY_OF_WEEK_SUNDAY ((FIT_DAY_OF_WEEK)0) +#define FIT_DAY_OF_WEEK_MONDAY ((FIT_DAY_OF_WEEK)1) +#define FIT_DAY_OF_WEEK_TUESDAY ((FIT_DAY_OF_WEEK)2) +#define FIT_DAY_OF_WEEK_WEDNESDAY ((FIT_DAY_OF_WEEK)3) +#define FIT_DAY_OF_WEEK_THURSDAY ((FIT_DAY_OF_WEEK)4) +#define FIT_DAY_OF_WEEK_FRIDAY ((FIT_DAY_OF_WEEK)5) +#define FIT_DAY_OF_WEEK_SATURDAY ((FIT_DAY_OF_WEEK)6) +#define FIT_DAY_OF_WEEK_COUNT 7 + +typedef FIT_UINT32Z FIT_CONNECTIVITY_CAPABILITIES; +#define FIT_CONNECTIVITY_CAPABILITIES_INVALID FIT_UINT32Z_INVALID +#define FIT_CONNECTIVITY_CAPABILITIES_BLUETOOTH ((FIT_CONNECTIVITY_CAPABILITIES)0x00000001) +#define FIT_CONNECTIVITY_CAPABILITIES_BLUETOOTH_LE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000002) +#define FIT_CONNECTIVITY_CAPABILITIES_ANT ((FIT_CONNECTIVITY_CAPABILITIES)0x00000004) +#define FIT_CONNECTIVITY_CAPABILITIES_ACTIVITY_UPLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000008) +#define FIT_CONNECTIVITY_CAPABILITIES_COURSE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000010) +#define FIT_CONNECTIVITY_CAPABILITIES_WORKOUT_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000020) +#define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK ((FIT_CONNECTIVITY_CAPABILITIES)0x00000040) +#define FIT_CONNECTIVITY_CAPABILITIES_WEATHER_CONDITIONS ((FIT_CONNECTIVITY_CAPABILITIES)0x00000080) +#define FIT_CONNECTIVITY_CAPABILITIES_WEATHER_ALERTS ((FIT_CONNECTIVITY_CAPABILITIES)0x00000100) +#define FIT_CONNECTIVITY_CAPABILITIES_GPS_EPHEMERIS_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000200) +#define FIT_CONNECTIVITY_CAPABILITIES_EXPLICIT_ARCHIVE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000400) +#define FIT_CONNECTIVITY_CAPABILITIES_SETUP_INCOMPLETE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000800) +#define FIT_CONNECTIVITY_CAPABILITIES_CONTINUE_SYNC_AFTER_SOFTWARE_UPDATE ((FIT_CONNECTIVITY_CAPABILITIES)0x00001000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_APP_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00002000) +#define FIT_CONNECTIVITY_CAPABILITIES_GOLF_COURSE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00004000) +#define FIT_CONNECTIVITY_CAPABILITIES_DEVICE_INITIATES_SYNC ((FIT_CONNECTIVITY_CAPABILITIES)0x00008000) // Indicates device is in control of initiating all syncs +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WATCH_APP_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00010000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WIDGET_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00020000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WATCH_FACE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00040000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_DATA_FIELD_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00080000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_APP_MANAGMENT ((FIT_CONNECTIVITY_CAPABILITIES)0x00100000) // Device supports delete and reorder of apps via GCM +#define FIT_CONNECTIVITY_CAPABILITIES_SWING_SENSOR ((FIT_CONNECTIVITY_CAPABILITIES)0x00200000) +#define FIT_CONNECTIVITY_CAPABILITIES_SWING_SENSOR_REMOTE ((FIT_CONNECTIVITY_CAPABILITIES)0x00400000) +#define FIT_CONNECTIVITY_CAPABILITIES_INCIDENT_DETECTION ((FIT_CONNECTIVITY_CAPABILITIES)0x00800000) // Device supports incident detection +#define FIT_CONNECTIVITY_CAPABILITIES_AUDIO_PROMPTS ((FIT_CONNECTIVITY_CAPABILITIES)0x01000000) +#define FIT_CONNECTIVITY_CAPABILITIES_WIFI_VERIFICATION ((FIT_CONNECTIVITY_CAPABILITIES)0x02000000) // Device supports reporting wifi verification via GCM +#define FIT_CONNECTIVITY_CAPABILITIES_TRUE_UP ((FIT_CONNECTIVITY_CAPABILITIES)0x04000000) // Device supports True Up +#define FIT_CONNECTIVITY_CAPABILITIES_FIND_MY_WATCH ((FIT_CONNECTIVITY_CAPABILITIES)0x08000000) // Device supports Find My Watch +#define FIT_CONNECTIVITY_CAPABILITIES_REMOTE_MANUAL_SYNC ((FIT_CONNECTIVITY_CAPABILITIES)0x10000000) +#define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK_AUTO_START ((FIT_CONNECTIVITY_CAPABILITIES)0x20000000) // Device supports LiveTrack auto start +#define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK_MESSAGING ((FIT_CONNECTIVITY_CAPABILITIES)0x40000000) // Device supports LiveTrack Messaging +#define FIT_CONNECTIVITY_CAPABILITIES_INSTANT_INPUT ((FIT_CONNECTIVITY_CAPABILITIES)0x80000000) // Device supports instant input feature +#define FIT_CONNECTIVITY_CAPABILITIES_COUNT 32 + +typedef FIT_ENUM FIT_WEATHER_REPORT; +#define FIT_WEATHER_REPORT_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_REPORT_CURRENT ((FIT_WEATHER_REPORT)0) +#define FIT_WEATHER_REPORT_FORECAST ((FIT_WEATHER_REPORT)1) // Deprecated use hourly_forecast instead +#define FIT_WEATHER_REPORT_HOURLY_FORECAST ((FIT_WEATHER_REPORT)1) +#define FIT_WEATHER_REPORT_DAILY_FORECAST ((FIT_WEATHER_REPORT)2) +#define FIT_WEATHER_REPORT_COUNT 4 + +typedef FIT_ENUM FIT_WEATHER_STATUS; +#define FIT_WEATHER_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_STATUS_CLEAR ((FIT_WEATHER_STATUS)0) +#define FIT_WEATHER_STATUS_PARTLY_CLOUDY ((FIT_WEATHER_STATUS)1) +#define FIT_WEATHER_STATUS_MOSTLY_CLOUDY ((FIT_WEATHER_STATUS)2) +#define FIT_WEATHER_STATUS_RAIN ((FIT_WEATHER_STATUS)3) +#define FIT_WEATHER_STATUS_SNOW ((FIT_WEATHER_STATUS)4) +#define FIT_WEATHER_STATUS_WINDY ((FIT_WEATHER_STATUS)5) +#define FIT_WEATHER_STATUS_THUNDERSTORMS ((FIT_WEATHER_STATUS)6) +#define FIT_WEATHER_STATUS_WINTRY_MIX ((FIT_WEATHER_STATUS)7) +#define FIT_WEATHER_STATUS_FOG ((FIT_WEATHER_STATUS)8) +#define FIT_WEATHER_STATUS_HAZY ((FIT_WEATHER_STATUS)11) +#define FIT_WEATHER_STATUS_HAIL ((FIT_WEATHER_STATUS)12) +#define FIT_WEATHER_STATUS_SCATTERED_SHOWERS ((FIT_WEATHER_STATUS)13) +#define FIT_WEATHER_STATUS_SCATTERED_THUNDERSTORMS ((FIT_WEATHER_STATUS)14) +#define FIT_WEATHER_STATUS_UNKNOWN_PRECIPITATION ((FIT_WEATHER_STATUS)15) +#define FIT_WEATHER_STATUS_LIGHT_RAIN ((FIT_WEATHER_STATUS)16) +#define FIT_WEATHER_STATUS_HEAVY_RAIN ((FIT_WEATHER_STATUS)17) +#define FIT_WEATHER_STATUS_LIGHT_SNOW ((FIT_WEATHER_STATUS)18) +#define FIT_WEATHER_STATUS_HEAVY_SNOW ((FIT_WEATHER_STATUS)19) +#define FIT_WEATHER_STATUS_LIGHT_RAIN_SNOW ((FIT_WEATHER_STATUS)20) +#define FIT_WEATHER_STATUS_HEAVY_RAIN_SNOW ((FIT_WEATHER_STATUS)21) +#define FIT_WEATHER_STATUS_CLOUDY ((FIT_WEATHER_STATUS)22) +#define FIT_WEATHER_STATUS_COUNT 21 + +typedef FIT_ENUM FIT_WEATHER_SEVERITY; +#define FIT_WEATHER_SEVERITY_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_SEVERITY_UNKNOWN ((FIT_WEATHER_SEVERITY)0) +#define FIT_WEATHER_SEVERITY_WARNING ((FIT_WEATHER_SEVERITY)1) +#define FIT_WEATHER_SEVERITY_WATCH ((FIT_WEATHER_SEVERITY)2) +#define FIT_WEATHER_SEVERITY_ADVISORY ((FIT_WEATHER_SEVERITY)3) +#define FIT_WEATHER_SEVERITY_STATEMENT ((FIT_WEATHER_SEVERITY)4) +#define FIT_WEATHER_SEVERITY_COUNT 5 + +typedef FIT_ENUM FIT_WEATHER_SEVERE_TYPE; +#define FIT_WEATHER_SEVERE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_SEVERE_TYPE_UNSPECIFIED ((FIT_WEATHER_SEVERE_TYPE)0) +#define FIT_WEATHER_SEVERE_TYPE_TORNADO ((FIT_WEATHER_SEVERE_TYPE)1) +#define FIT_WEATHER_SEVERE_TYPE_TSUNAMI ((FIT_WEATHER_SEVERE_TYPE)2) +#define FIT_WEATHER_SEVERE_TYPE_HURRICANE ((FIT_WEATHER_SEVERE_TYPE)3) +#define FIT_WEATHER_SEVERE_TYPE_EXTREME_WIND ((FIT_WEATHER_SEVERE_TYPE)4) +#define FIT_WEATHER_SEVERE_TYPE_TYPHOON ((FIT_WEATHER_SEVERE_TYPE)5) +#define FIT_WEATHER_SEVERE_TYPE_INLAND_HURRICANE ((FIT_WEATHER_SEVERE_TYPE)6) +#define FIT_WEATHER_SEVERE_TYPE_HURRICANE_FORCE_WIND ((FIT_WEATHER_SEVERE_TYPE)7) +#define FIT_WEATHER_SEVERE_TYPE_WATERSPOUT ((FIT_WEATHER_SEVERE_TYPE)8) +#define FIT_WEATHER_SEVERE_TYPE_SEVERE_THUNDERSTORM ((FIT_WEATHER_SEVERE_TYPE)9) +#define FIT_WEATHER_SEVERE_TYPE_WRECKHOUSE_WINDS ((FIT_WEATHER_SEVERE_TYPE)10) +#define FIT_WEATHER_SEVERE_TYPE_LES_SUETES_WIND ((FIT_WEATHER_SEVERE_TYPE)11) +#define FIT_WEATHER_SEVERE_TYPE_AVALANCHE ((FIT_WEATHER_SEVERE_TYPE)12) +#define FIT_WEATHER_SEVERE_TYPE_FLASH_FLOOD ((FIT_WEATHER_SEVERE_TYPE)13) +#define FIT_WEATHER_SEVERE_TYPE_TROPICAL_STORM ((FIT_WEATHER_SEVERE_TYPE)14) +#define FIT_WEATHER_SEVERE_TYPE_INLAND_TROPICAL_STORM ((FIT_WEATHER_SEVERE_TYPE)15) +#define FIT_WEATHER_SEVERE_TYPE_BLIZZARD ((FIT_WEATHER_SEVERE_TYPE)16) +#define FIT_WEATHER_SEVERE_TYPE_ICE_STORM ((FIT_WEATHER_SEVERE_TYPE)17) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_RAIN ((FIT_WEATHER_SEVERE_TYPE)18) +#define FIT_WEATHER_SEVERE_TYPE_DEBRIS_FLOW ((FIT_WEATHER_SEVERE_TYPE)19) +#define FIT_WEATHER_SEVERE_TYPE_FLASH_FREEZE ((FIT_WEATHER_SEVERE_TYPE)20) +#define FIT_WEATHER_SEVERE_TYPE_DUST_STORM ((FIT_WEATHER_SEVERE_TYPE)21) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_WIND ((FIT_WEATHER_SEVERE_TYPE)22) +#define FIT_WEATHER_SEVERE_TYPE_WINTER_STORM ((FIT_WEATHER_SEVERE_TYPE)23) +#define FIT_WEATHER_SEVERE_TYPE_HEAVY_FREEZING_SPRAY ((FIT_WEATHER_SEVERE_TYPE)24) +#define FIT_WEATHER_SEVERE_TYPE_EXTREME_COLD ((FIT_WEATHER_SEVERE_TYPE)25) +#define FIT_WEATHER_SEVERE_TYPE_WIND_CHILL ((FIT_WEATHER_SEVERE_TYPE)26) +#define FIT_WEATHER_SEVERE_TYPE_COLD_WAVE ((FIT_WEATHER_SEVERE_TYPE)27) +#define FIT_WEATHER_SEVERE_TYPE_HEAVY_SNOW_ALERT ((FIT_WEATHER_SEVERE_TYPE)28) +#define FIT_WEATHER_SEVERE_TYPE_LAKE_EFFECT_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)29) +#define FIT_WEATHER_SEVERE_TYPE_SNOW_SQUALL ((FIT_WEATHER_SEVERE_TYPE)30) +#define FIT_WEATHER_SEVERE_TYPE_LAKE_EFFECT_SNOW ((FIT_WEATHER_SEVERE_TYPE)31) +#define FIT_WEATHER_SEVERE_TYPE_WINTER_WEATHER ((FIT_WEATHER_SEVERE_TYPE)32) +#define FIT_WEATHER_SEVERE_TYPE_SLEET ((FIT_WEATHER_SEVERE_TYPE)33) +#define FIT_WEATHER_SEVERE_TYPE_SNOWFALL ((FIT_WEATHER_SEVERE_TYPE)34) +#define FIT_WEATHER_SEVERE_TYPE_SNOW_AND_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)35) +#define FIT_WEATHER_SEVERE_TYPE_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)36) +#define FIT_WEATHER_SEVERE_TYPE_SNOW_ALERT ((FIT_WEATHER_SEVERE_TYPE)37) +#define FIT_WEATHER_SEVERE_TYPE_ARCTIC_OUTFLOW ((FIT_WEATHER_SEVERE_TYPE)38) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_DRIZZLE ((FIT_WEATHER_SEVERE_TYPE)39) +#define FIT_WEATHER_SEVERE_TYPE_STORM ((FIT_WEATHER_SEVERE_TYPE)40) +#define FIT_WEATHER_SEVERE_TYPE_STORM_SURGE ((FIT_WEATHER_SEVERE_TYPE)41) +#define FIT_WEATHER_SEVERE_TYPE_RAINFALL ((FIT_WEATHER_SEVERE_TYPE)42) +#define FIT_WEATHER_SEVERE_TYPE_AREAL_FLOOD ((FIT_WEATHER_SEVERE_TYPE)43) +#define FIT_WEATHER_SEVERE_TYPE_COASTAL_FLOOD ((FIT_WEATHER_SEVERE_TYPE)44) +#define FIT_WEATHER_SEVERE_TYPE_LAKESHORE_FLOOD ((FIT_WEATHER_SEVERE_TYPE)45) +#define FIT_WEATHER_SEVERE_TYPE_EXCESSIVE_HEAT ((FIT_WEATHER_SEVERE_TYPE)46) +#define FIT_WEATHER_SEVERE_TYPE_HEAT ((FIT_WEATHER_SEVERE_TYPE)47) +#define FIT_WEATHER_SEVERE_TYPE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)48) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_HEAT_AND_HUMIDITY ((FIT_WEATHER_SEVERE_TYPE)49) +#define FIT_WEATHER_SEVERE_TYPE_HUMIDEX_AND_HEALTH ((FIT_WEATHER_SEVERE_TYPE)50) +#define FIT_WEATHER_SEVERE_TYPE_HUMIDEX ((FIT_WEATHER_SEVERE_TYPE)51) +#define FIT_WEATHER_SEVERE_TYPE_GALE ((FIT_WEATHER_SEVERE_TYPE)52) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_SPRAY ((FIT_WEATHER_SEVERE_TYPE)53) +#define FIT_WEATHER_SEVERE_TYPE_SPECIAL_MARINE ((FIT_WEATHER_SEVERE_TYPE)54) +#define FIT_WEATHER_SEVERE_TYPE_SQUALL ((FIT_WEATHER_SEVERE_TYPE)55) +#define FIT_WEATHER_SEVERE_TYPE_STRONG_WIND ((FIT_WEATHER_SEVERE_TYPE)56) +#define FIT_WEATHER_SEVERE_TYPE_LAKE_WIND ((FIT_WEATHER_SEVERE_TYPE)57) +#define FIT_WEATHER_SEVERE_TYPE_MARINE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)58) +#define FIT_WEATHER_SEVERE_TYPE_WIND ((FIT_WEATHER_SEVERE_TYPE)59) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_HAZARDOUS_SEAS ((FIT_WEATHER_SEVERE_TYPE)60) +#define FIT_WEATHER_SEVERE_TYPE_HAZARDOUS_SEAS ((FIT_WEATHER_SEVERE_TYPE)61) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT ((FIT_WEATHER_SEVERE_TYPE)62) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_WINDS ((FIT_WEATHER_SEVERE_TYPE)63) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_ROUGH_BAR ((FIT_WEATHER_SEVERE_TYPE)64) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_WATER_LEVEL ((FIT_WEATHER_SEVERE_TYPE)65) +#define FIT_WEATHER_SEVERE_TYPE_ASHFALL ((FIT_WEATHER_SEVERE_TYPE)66) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_FOG ((FIT_WEATHER_SEVERE_TYPE)67) +#define FIT_WEATHER_SEVERE_TYPE_DENSE_FOG ((FIT_WEATHER_SEVERE_TYPE)68) +#define FIT_WEATHER_SEVERE_TYPE_DENSE_SMOKE ((FIT_WEATHER_SEVERE_TYPE)69) +#define FIT_WEATHER_SEVERE_TYPE_BLOWING_DUST ((FIT_WEATHER_SEVERE_TYPE)70) +#define FIT_WEATHER_SEVERE_TYPE_HARD_FREEZE ((FIT_WEATHER_SEVERE_TYPE)71) +#define FIT_WEATHER_SEVERE_TYPE_FREEZE ((FIT_WEATHER_SEVERE_TYPE)72) +#define FIT_WEATHER_SEVERE_TYPE_FROST ((FIT_WEATHER_SEVERE_TYPE)73) +#define FIT_WEATHER_SEVERE_TYPE_FIRE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)74) +#define FIT_WEATHER_SEVERE_TYPE_FLOOD ((FIT_WEATHER_SEVERE_TYPE)75) +#define FIT_WEATHER_SEVERE_TYPE_RIP_TIDE ((FIT_WEATHER_SEVERE_TYPE)76) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_SURF ((FIT_WEATHER_SEVERE_TYPE)77) +#define FIT_WEATHER_SEVERE_TYPE_SMOG ((FIT_WEATHER_SEVERE_TYPE)78) +#define FIT_WEATHER_SEVERE_TYPE_AIR_QUALITY ((FIT_WEATHER_SEVERE_TYPE)79) +#define FIT_WEATHER_SEVERE_TYPE_BRISK_WIND ((FIT_WEATHER_SEVERE_TYPE)80) +#define FIT_WEATHER_SEVERE_TYPE_AIR_STAGNATION ((FIT_WEATHER_SEVERE_TYPE)81) +#define FIT_WEATHER_SEVERE_TYPE_LOW_WATER ((FIT_WEATHER_SEVERE_TYPE)82) +#define FIT_WEATHER_SEVERE_TYPE_HYDROLOGICAL ((FIT_WEATHER_SEVERE_TYPE)83) +#define FIT_WEATHER_SEVERE_TYPE_SPECIAL_WEATHER ((FIT_WEATHER_SEVERE_TYPE)84) +#define FIT_WEATHER_SEVERE_TYPE_COUNT 85 + +typedef FIT_UINT32 FIT_TIME_INTO_DAY; // number of seconds into the day since 00:00:00 UTC +#define FIT_TIME_INTO_DAY_INVALID FIT_UINT32_INVALID +#define FIT_TIME_INTO_DAY_COUNT 0 + +typedef FIT_UINT32 FIT_LOCALTIME_INTO_DAY; // number of seconds into the day since local 00:00:00 +#define FIT_LOCALTIME_INTO_DAY_INVALID FIT_UINT32_INVALID +#define FIT_LOCALTIME_INTO_DAY_COUNT 0 + +typedef FIT_ENUM FIT_STROKE_TYPE; +#define FIT_STROKE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_STROKE_TYPE_NO_EVENT ((FIT_STROKE_TYPE)0) +#define FIT_STROKE_TYPE_OTHER ((FIT_STROKE_TYPE)1) // stroke was detected but cannot be identified +#define FIT_STROKE_TYPE_SERVE ((FIT_STROKE_TYPE)2) +#define FIT_STROKE_TYPE_FOREHAND ((FIT_STROKE_TYPE)3) +#define FIT_STROKE_TYPE_BACKHAND ((FIT_STROKE_TYPE)4) +#define FIT_STROKE_TYPE_SMASH ((FIT_STROKE_TYPE)5) +#define FIT_STROKE_TYPE_COUNT 6 + +typedef FIT_ENUM FIT_BODY_LOCATION; +#define FIT_BODY_LOCATION_INVALID FIT_ENUM_INVALID +#define FIT_BODY_LOCATION_LEFT_LEG ((FIT_BODY_LOCATION)0) +#define FIT_BODY_LOCATION_LEFT_CALF ((FIT_BODY_LOCATION)1) +#define FIT_BODY_LOCATION_LEFT_SHIN ((FIT_BODY_LOCATION)2) +#define FIT_BODY_LOCATION_LEFT_HAMSTRING ((FIT_BODY_LOCATION)3) +#define FIT_BODY_LOCATION_LEFT_QUAD ((FIT_BODY_LOCATION)4) +#define FIT_BODY_LOCATION_LEFT_GLUTE ((FIT_BODY_LOCATION)5) +#define FIT_BODY_LOCATION_RIGHT_LEG ((FIT_BODY_LOCATION)6) +#define FIT_BODY_LOCATION_RIGHT_CALF ((FIT_BODY_LOCATION)7) +#define FIT_BODY_LOCATION_RIGHT_SHIN ((FIT_BODY_LOCATION)8) +#define FIT_BODY_LOCATION_RIGHT_HAMSTRING ((FIT_BODY_LOCATION)9) +#define FIT_BODY_LOCATION_RIGHT_QUAD ((FIT_BODY_LOCATION)10) +#define FIT_BODY_LOCATION_RIGHT_GLUTE ((FIT_BODY_LOCATION)11) +#define FIT_BODY_LOCATION_TORSO_BACK ((FIT_BODY_LOCATION)12) +#define FIT_BODY_LOCATION_LEFT_LOWER_BACK ((FIT_BODY_LOCATION)13) +#define FIT_BODY_LOCATION_LEFT_UPPER_BACK ((FIT_BODY_LOCATION)14) +#define FIT_BODY_LOCATION_RIGHT_LOWER_BACK ((FIT_BODY_LOCATION)15) +#define FIT_BODY_LOCATION_RIGHT_UPPER_BACK ((FIT_BODY_LOCATION)16) +#define FIT_BODY_LOCATION_TORSO_FRONT ((FIT_BODY_LOCATION)17) +#define FIT_BODY_LOCATION_LEFT_ABDOMEN ((FIT_BODY_LOCATION)18) +#define FIT_BODY_LOCATION_LEFT_CHEST ((FIT_BODY_LOCATION)19) +#define FIT_BODY_LOCATION_RIGHT_ABDOMEN ((FIT_BODY_LOCATION)20) +#define FIT_BODY_LOCATION_RIGHT_CHEST ((FIT_BODY_LOCATION)21) +#define FIT_BODY_LOCATION_LEFT_ARM ((FIT_BODY_LOCATION)22) +#define FIT_BODY_LOCATION_LEFT_SHOULDER ((FIT_BODY_LOCATION)23) +#define FIT_BODY_LOCATION_LEFT_BICEP ((FIT_BODY_LOCATION)24) +#define FIT_BODY_LOCATION_LEFT_TRICEP ((FIT_BODY_LOCATION)25) +#define FIT_BODY_LOCATION_LEFT_BRACHIORADIALIS ((FIT_BODY_LOCATION)26) // Left anterior forearm +#define FIT_BODY_LOCATION_LEFT_FOREARM_EXTENSORS ((FIT_BODY_LOCATION)27) // Left posterior forearm +#define FIT_BODY_LOCATION_RIGHT_ARM ((FIT_BODY_LOCATION)28) +#define FIT_BODY_LOCATION_RIGHT_SHOULDER ((FIT_BODY_LOCATION)29) +#define FIT_BODY_LOCATION_RIGHT_BICEP ((FIT_BODY_LOCATION)30) +#define FIT_BODY_LOCATION_RIGHT_TRICEP ((FIT_BODY_LOCATION)31) +#define FIT_BODY_LOCATION_RIGHT_BRACHIORADIALIS ((FIT_BODY_LOCATION)32) // Right anterior forearm +#define FIT_BODY_LOCATION_RIGHT_FOREARM_EXTENSORS ((FIT_BODY_LOCATION)33) // Right posterior forearm +#define FIT_BODY_LOCATION_NECK ((FIT_BODY_LOCATION)34) +#define FIT_BODY_LOCATION_THROAT ((FIT_BODY_LOCATION)35) +#define FIT_BODY_LOCATION_WAIST_MID_BACK ((FIT_BODY_LOCATION)36) +#define FIT_BODY_LOCATION_WAIST_FRONT ((FIT_BODY_LOCATION)37) +#define FIT_BODY_LOCATION_WAIST_LEFT ((FIT_BODY_LOCATION)38) +#define FIT_BODY_LOCATION_WAIST_RIGHT ((FIT_BODY_LOCATION)39) +#define FIT_BODY_LOCATION_COUNT 40 + +typedef FIT_ENUM FIT_SEGMENT_LAP_STATUS; +#define FIT_SEGMENT_LAP_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_LAP_STATUS_END ((FIT_SEGMENT_LAP_STATUS)0) +#define FIT_SEGMENT_LAP_STATUS_FAIL ((FIT_SEGMENT_LAP_STATUS)1) +#define FIT_SEGMENT_LAP_STATUS_COUNT 2 + +typedef FIT_ENUM FIT_SEGMENT_LEADERBOARD_TYPE; +#define FIT_SEGMENT_LEADERBOARD_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_LEADERBOARD_TYPE_OVERALL ((FIT_SEGMENT_LEADERBOARD_TYPE)0) +#define FIT_SEGMENT_LEADERBOARD_TYPE_PERSONAL_BEST ((FIT_SEGMENT_LEADERBOARD_TYPE)1) +#define FIT_SEGMENT_LEADERBOARD_TYPE_CONNECTIONS ((FIT_SEGMENT_LEADERBOARD_TYPE)2) +#define FIT_SEGMENT_LEADERBOARD_TYPE_GROUP ((FIT_SEGMENT_LEADERBOARD_TYPE)3) +#define FIT_SEGMENT_LEADERBOARD_TYPE_CHALLENGER ((FIT_SEGMENT_LEADERBOARD_TYPE)4) +#define FIT_SEGMENT_LEADERBOARD_TYPE_KOM ((FIT_SEGMENT_LEADERBOARD_TYPE)5) +#define FIT_SEGMENT_LEADERBOARD_TYPE_QOM ((FIT_SEGMENT_LEADERBOARD_TYPE)6) +#define FIT_SEGMENT_LEADERBOARD_TYPE_PR ((FIT_SEGMENT_LEADERBOARD_TYPE)7) +#define FIT_SEGMENT_LEADERBOARD_TYPE_GOAL ((FIT_SEGMENT_LEADERBOARD_TYPE)8) +#define FIT_SEGMENT_LEADERBOARD_TYPE_RIVAL ((FIT_SEGMENT_LEADERBOARD_TYPE)9) +#define FIT_SEGMENT_LEADERBOARD_TYPE_CLUB_LEADER ((FIT_SEGMENT_LEADERBOARD_TYPE)10) +#define FIT_SEGMENT_LEADERBOARD_TYPE_COUNT 11 + +typedef FIT_ENUM FIT_SEGMENT_DELETE_STATUS; +#define FIT_SEGMENT_DELETE_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_DELETE_STATUS_DO_NOT_DELETE ((FIT_SEGMENT_DELETE_STATUS)0) +#define FIT_SEGMENT_DELETE_STATUS_DELETE_ONE ((FIT_SEGMENT_DELETE_STATUS)1) +#define FIT_SEGMENT_DELETE_STATUS_DELETE_ALL ((FIT_SEGMENT_DELETE_STATUS)2) +#define FIT_SEGMENT_DELETE_STATUS_COUNT 3 + +typedef FIT_ENUM FIT_SEGMENT_SELECTION_TYPE; +#define FIT_SEGMENT_SELECTION_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_SELECTION_TYPE_STARRED ((FIT_SEGMENT_SELECTION_TYPE)0) +#define FIT_SEGMENT_SELECTION_TYPE_SUGGESTED ((FIT_SEGMENT_SELECTION_TYPE)1) +#define FIT_SEGMENT_SELECTION_TYPE_COUNT 2 + +typedef FIT_ENUM FIT_SOURCE_TYPE; +#define FIT_SOURCE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SOURCE_TYPE_ANT ((FIT_SOURCE_TYPE)0) // External device connected with ANT +#define FIT_SOURCE_TYPE_ANTPLUS ((FIT_SOURCE_TYPE)1) // External device connected with ANT+ +#define FIT_SOURCE_TYPE_BLUETOOTH ((FIT_SOURCE_TYPE)2) // External device connected with BT +#define FIT_SOURCE_TYPE_BLUETOOTH_LOW_ENERGY ((FIT_SOURCE_TYPE)3) // External device connected with BLE +#define FIT_SOURCE_TYPE_WIFI ((FIT_SOURCE_TYPE)4) // External device connected with Wifi +#define FIT_SOURCE_TYPE_LOCAL ((FIT_SOURCE_TYPE)5) // Onboard device +#define FIT_SOURCE_TYPE_COUNT 6 + +typedef FIT_UINT8 FIT_LOCAL_DEVICE_TYPE; +#define FIT_LOCAL_DEVICE_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_LOCAL_DEVICE_TYPE_COUNT 0 + +typedef FIT_ENUM FIT_DISPLAY_ORIENTATION; +#define FIT_DISPLAY_ORIENTATION_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_ORIENTATION_AUTO ((FIT_DISPLAY_ORIENTATION)0) // automatic if the device supports it +#define FIT_DISPLAY_ORIENTATION_PORTRAIT ((FIT_DISPLAY_ORIENTATION)1) +#define FIT_DISPLAY_ORIENTATION_LANDSCAPE ((FIT_DISPLAY_ORIENTATION)2) +#define FIT_DISPLAY_ORIENTATION_PORTRAIT_FLIPPED ((FIT_DISPLAY_ORIENTATION)3) // portrait mode but rotated 180 degrees +#define FIT_DISPLAY_ORIENTATION_LANDSCAPE_FLIPPED ((FIT_DISPLAY_ORIENTATION)4) // landscape mode but rotated 180 degrees +#define FIT_DISPLAY_ORIENTATION_COUNT 5 + +typedef FIT_ENUM FIT_WORKOUT_EQUIPMENT; +#define FIT_WORKOUT_EQUIPMENT_INVALID FIT_ENUM_INVALID +#define FIT_WORKOUT_EQUIPMENT_NONE ((FIT_WORKOUT_EQUIPMENT)0) +#define FIT_WORKOUT_EQUIPMENT_SWIM_FINS ((FIT_WORKOUT_EQUIPMENT)1) +#define FIT_WORKOUT_EQUIPMENT_SWIM_KICKBOARD ((FIT_WORKOUT_EQUIPMENT)2) +#define FIT_WORKOUT_EQUIPMENT_SWIM_PADDLES ((FIT_WORKOUT_EQUIPMENT)3) +#define FIT_WORKOUT_EQUIPMENT_SWIM_PULL_BUOY ((FIT_WORKOUT_EQUIPMENT)4) +#define FIT_WORKOUT_EQUIPMENT_SWIM_SNORKEL ((FIT_WORKOUT_EQUIPMENT)5) +#define FIT_WORKOUT_EQUIPMENT_COUNT 6 + +typedef FIT_ENUM FIT_WATCHFACE_MODE; +#define FIT_WATCHFACE_MODE_INVALID FIT_ENUM_INVALID +#define FIT_WATCHFACE_MODE_DIGITAL ((FIT_WATCHFACE_MODE)0) +#define FIT_WATCHFACE_MODE_ANALOG ((FIT_WATCHFACE_MODE)1) +#define FIT_WATCHFACE_MODE_CONNECT_IQ ((FIT_WATCHFACE_MODE)2) +#define FIT_WATCHFACE_MODE_DISABLED ((FIT_WATCHFACE_MODE)3) +#define FIT_WATCHFACE_MODE_COUNT 4 + +typedef FIT_ENUM FIT_DIGITAL_WATCHFACE_LAYOUT; +#define FIT_DIGITAL_WATCHFACE_LAYOUT_INVALID FIT_ENUM_INVALID +#define FIT_DIGITAL_WATCHFACE_LAYOUT_TRADITIONAL ((FIT_DIGITAL_WATCHFACE_LAYOUT)0) +#define FIT_DIGITAL_WATCHFACE_LAYOUT_MODERN ((FIT_DIGITAL_WATCHFACE_LAYOUT)1) +#define FIT_DIGITAL_WATCHFACE_LAYOUT_BOLD ((FIT_DIGITAL_WATCHFACE_LAYOUT)2) +#define FIT_DIGITAL_WATCHFACE_LAYOUT_COUNT 3 + +typedef FIT_ENUM FIT_ANALOG_WATCHFACE_LAYOUT; +#define FIT_ANALOG_WATCHFACE_LAYOUT_INVALID FIT_ENUM_INVALID +#define FIT_ANALOG_WATCHFACE_LAYOUT_MINIMAL ((FIT_ANALOG_WATCHFACE_LAYOUT)0) +#define FIT_ANALOG_WATCHFACE_LAYOUT_TRADITIONAL ((FIT_ANALOG_WATCHFACE_LAYOUT)1) +#define FIT_ANALOG_WATCHFACE_LAYOUT_MODERN ((FIT_ANALOG_WATCHFACE_LAYOUT)2) +#define FIT_ANALOG_WATCHFACE_LAYOUT_COUNT 3 + +typedef FIT_ENUM FIT_RIDER_POSITION_TYPE; +#define FIT_RIDER_POSITION_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_RIDER_POSITION_TYPE_SEATED ((FIT_RIDER_POSITION_TYPE)0) +#define FIT_RIDER_POSITION_TYPE_STANDING ((FIT_RIDER_POSITION_TYPE)1) +#define FIT_RIDER_POSITION_TYPE_TRANSITION_TO_SEATED ((FIT_RIDER_POSITION_TYPE)2) +#define FIT_RIDER_POSITION_TYPE_TRANSITION_TO_STANDING ((FIT_RIDER_POSITION_TYPE)3) +#define FIT_RIDER_POSITION_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_POWER_PHASE_TYPE; +#define FIT_POWER_PHASE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_START_ANGLE ((FIT_POWER_PHASE_TYPE)0) +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_END_ANGLE ((FIT_POWER_PHASE_TYPE)1) +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_ARC_LENGTH ((FIT_POWER_PHASE_TYPE)2) +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_CENTER ((FIT_POWER_PHASE_TYPE)3) +#define FIT_POWER_PHASE_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_CAMERA_EVENT_TYPE; +#define FIT_CAMERA_EVENT_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_CAMERA_EVENT_TYPE_VIDEO_START ((FIT_CAMERA_EVENT_TYPE)0) // Start of video recording +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SPLIT ((FIT_CAMERA_EVENT_TYPE)1) // Mark of video file split (end of one file, beginning of the other) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_END ((FIT_CAMERA_EVENT_TYPE)2) // End of video recording +#define FIT_CAMERA_EVENT_TYPE_PHOTO_TAKEN ((FIT_CAMERA_EVENT_TYPE)3) // Still photo taken +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_START ((FIT_CAMERA_EVENT_TYPE)4) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_SPLIT ((FIT_CAMERA_EVENT_TYPE)5) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_END ((FIT_CAMERA_EVENT_TYPE)6) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SPLIT_START ((FIT_CAMERA_EVENT_TYPE)7) // Mark of video file split start +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_SPLIT_START ((FIT_CAMERA_EVENT_TYPE)8) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_PAUSE ((FIT_CAMERA_EVENT_TYPE)11) // Mark when a video recording has been paused +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_PAUSE ((FIT_CAMERA_EVENT_TYPE)12) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_RESUME ((FIT_CAMERA_EVENT_TYPE)13) // Mark when a video recording has been resumed +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_RESUME ((FIT_CAMERA_EVENT_TYPE)14) +#define FIT_CAMERA_EVENT_TYPE_COUNT 13 + +typedef FIT_ENUM FIT_SENSOR_TYPE; +#define FIT_SENSOR_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SENSOR_TYPE_ACCELEROMETER ((FIT_SENSOR_TYPE)0) +#define FIT_SENSOR_TYPE_GYROSCOPE ((FIT_SENSOR_TYPE)1) +#define FIT_SENSOR_TYPE_COMPASS ((FIT_SENSOR_TYPE)2) // Magnetometer +#define FIT_SENSOR_TYPE_BAROMETER ((FIT_SENSOR_TYPE)3) +#define FIT_SENSOR_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE; +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_AUTO ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)0) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_INDIVIDUAL ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)4) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_HIGH_VISIBILITY ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)5) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_TRAIL ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)6) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_COUNT 4 + +typedef FIT_UINT16 FIT_COMM_TIMEOUT_TYPE; +#define FIT_COMM_TIMEOUT_TYPE_INVALID FIT_UINT16_INVALID +#define FIT_COMM_TIMEOUT_TYPE_WILDCARD_PAIRING_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)0) // Timeout pairing to any device +#define FIT_COMM_TIMEOUT_TYPE_PAIRING_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)1) // Timeout pairing to previously paired device +#define FIT_COMM_TIMEOUT_TYPE_CONNECTION_LOST ((FIT_COMM_TIMEOUT_TYPE)2) // Temporary loss of communications +#define FIT_COMM_TIMEOUT_TYPE_CONNECTION_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)3) // Connection closed due to extended bad communications +#define FIT_COMM_TIMEOUT_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_CAMERA_ORIENTATION_TYPE; +#define FIT_CAMERA_ORIENTATION_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_0 ((FIT_CAMERA_ORIENTATION_TYPE)0) +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_90 ((FIT_CAMERA_ORIENTATION_TYPE)1) +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_180 ((FIT_CAMERA_ORIENTATION_TYPE)2) +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_270 ((FIT_CAMERA_ORIENTATION_TYPE)3) +#define FIT_CAMERA_ORIENTATION_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_ATTITUDE_STAGE; +#define FIT_ATTITUDE_STAGE_INVALID FIT_ENUM_INVALID +#define FIT_ATTITUDE_STAGE_FAILED ((FIT_ATTITUDE_STAGE)0) +#define FIT_ATTITUDE_STAGE_ALIGNING ((FIT_ATTITUDE_STAGE)1) +#define FIT_ATTITUDE_STAGE_DEGRADED ((FIT_ATTITUDE_STAGE)2) +#define FIT_ATTITUDE_STAGE_VALID ((FIT_ATTITUDE_STAGE)3) +#define FIT_ATTITUDE_STAGE_COUNT 4 + +typedef FIT_UINT16 FIT_ATTITUDE_VALIDITY; +#define FIT_ATTITUDE_VALIDITY_INVALID FIT_UINT16_INVALID +#define FIT_ATTITUDE_VALIDITY_TRACK_ANGLE_HEADING_VALID ((FIT_ATTITUDE_VALIDITY)0x0001) +#define FIT_ATTITUDE_VALIDITY_PITCH_VALID ((FIT_ATTITUDE_VALIDITY)0x0002) +#define FIT_ATTITUDE_VALIDITY_ROLL_VALID ((FIT_ATTITUDE_VALIDITY)0x0004) +#define FIT_ATTITUDE_VALIDITY_LATERAL_BODY_ACCEL_VALID ((FIT_ATTITUDE_VALIDITY)0x0008) +#define FIT_ATTITUDE_VALIDITY_NORMAL_BODY_ACCEL_VALID ((FIT_ATTITUDE_VALIDITY)0x0010) +#define FIT_ATTITUDE_VALIDITY_TURN_RATE_VALID ((FIT_ATTITUDE_VALIDITY)0x0020) +#define FIT_ATTITUDE_VALIDITY_HW_FAIL ((FIT_ATTITUDE_VALIDITY)0x0040) +#define FIT_ATTITUDE_VALIDITY_MAG_INVALID ((FIT_ATTITUDE_VALIDITY)0x0080) +#define FIT_ATTITUDE_VALIDITY_NO_GPS ((FIT_ATTITUDE_VALIDITY)0x0100) +#define FIT_ATTITUDE_VALIDITY_GPS_INVALID ((FIT_ATTITUDE_VALIDITY)0x0200) +#define FIT_ATTITUDE_VALIDITY_SOLUTION_COASTING ((FIT_ATTITUDE_VALIDITY)0x0400) +#define FIT_ATTITUDE_VALIDITY_TRUE_TRACK_ANGLE ((FIT_ATTITUDE_VALIDITY)0x0800) +#define FIT_ATTITUDE_VALIDITY_MAGNETIC_HEADING ((FIT_ATTITUDE_VALIDITY)0x1000) +#define FIT_ATTITUDE_VALIDITY_COUNT 13 + +typedef FIT_ENUM FIT_AUTO_SYNC_FREQUENCY; +#define FIT_AUTO_SYNC_FREQUENCY_INVALID FIT_ENUM_INVALID +#define FIT_AUTO_SYNC_FREQUENCY_NEVER ((FIT_AUTO_SYNC_FREQUENCY)0) +#define FIT_AUTO_SYNC_FREQUENCY_OCCASIONALLY ((FIT_AUTO_SYNC_FREQUENCY)1) +#define FIT_AUTO_SYNC_FREQUENCY_FREQUENT ((FIT_AUTO_SYNC_FREQUENCY)2) +#define FIT_AUTO_SYNC_FREQUENCY_ONCE_A_DAY ((FIT_AUTO_SYNC_FREQUENCY)3) +#define FIT_AUTO_SYNC_FREQUENCY_REMOTE ((FIT_AUTO_SYNC_FREQUENCY)4) +#define FIT_AUTO_SYNC_FREQUENCY_COUNT 5 + +typedef FIT_ENUM FIT_EXD_LAYOUT; +#define FIT_EXD_LAYOUT_INVALID FIT_ENUM_INVALID +#define FIT_EXD_LAYOUT_FULL_SCREEN ((FIT_EXD_LAYOUT)0) +#define FIT_EXD_LAYOUT_HALF_VERTICAL ((FIT_EXD_LAYOUT)1) +#define FIT_EXD_LAYOUT_HALF_HORIZONTAL ((FIT_EXD_LAYOUT)2) +#define FIT_EXD_LAYOUT_HALF_VERTICAL_RIGHT_SPLIT ((FIT_EXD_LAYOUT)3) +#define FIT_EXD_LAYOUT_HALF_HORIZONTAL_BOTTOM_SPLIT ((FIT_EXD_LAYOUT)4) +#define FIT_EXD_LAYOUT_FULL_QUARTER_SPLIT ((FIT_EXD_LAYOUT)5) +#define FIT_EXD_LAYOUT_HALF_VERTICAL_LEFT_SPLIT ((FIT_EXD_LAYOUT)6) +#define FIT_EXD_LAYOUT_HALF_HORIZONTAL_TOP_SPLIT ((FIT_EXD_LAYOUT)7) +#define FIT_EXD_LAYOUT_DYNAMIC ((FIT_EXD_LAYOUT)8) // The EXD may display the configured concepts in any layout it sees fit. +#define FIT_EXD_LAYOUT_COUNT 9 + +typedef FIT_ENUM FIT_EXD_DISPLAY_TYPE; +#define FIT_EXD_DISPLAY_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_EXD_DISPLAY_TYPE_NUMERICAL ((FIT_EXD_DISPLAY_TYPE)0) +#define FIT_EXD_DISPLAY_TYPE_SIMPLE ((FIT_EXD_DISPLAY_TYPE)1) +#define FIT_EXD_DISPLAY_TYPE_GRAPH ((FIT_EXD_DISPLAY_TYPE)2) +#define FIT_EXD_DISPLAY_TYPE_BAR ((FIT_EXD_DISPLAY_TYPE)3) +#define FIT_EXD_DISPLAY_TYPE_CIRCLE_GRAPH ((FIT_EXD_DISPLAY_TYPE)4) +#define FIT_EXD_DISPLAY_TYPE_VIRTUAL_PARTNER ((FIT_EXD_DISPLAY_TYPE)5) +#define FIT_EXD_DISPLAY_TYPE_BALANCE ((FIT_EXD_DISPLAY_TYPE)6) +#define FIT_EXD_DISPLAY_TYPE_STRING_LIST ((FIT_EXD_DISPLAY_TYPE)7) +#define FIT_EXD_DISPLAY_TYPE_STRING ((FIT_EXD_DISPLAY_TYPE)8) +#define FIT_EXD_DISPLAY_TYPE_SIMPLE_DYNAMIC_ICON ((FIT_EXD_DISPLAY_TYPE)9) +#define FIT_EXD_DISPLAY_TYPE_GAUGE ((FIT_EXD_DISPLAY_TYPE)10) +#define FIT_EXD_DISPLAY_TYPE_COUNT 11 + +typedef FIT_ENUM FIT_EXD_DATA_UNITS; +#define FIT_EXD_DATA_UNITS_INVALID FIT_ENUM_INVALID +#define FIT_EXD_DATA_UNITS_NO_UNITS ((FIT_EXD_DATA_UNITS)0) +#define FIT_EXD_DATA_UNITS_LAPS ((FIT_EXD_DATA_UNITS)1) +#define FIT_EXD_DATA_UNITS_MILES_PER_HOUR ((FIT_EXD_DATA_UNITS)2) +#define FIT_EXD_DATA_UNITS_KILOMETERS_PER_HOUR ((FIT_EXD_DATA_UNITS)3) +#define FIT_EXD_DATA_UNITS_FEET_PER_HOUR ((FIT_EXD_DATA_UNITS)4) +#define FIT_EXD_DATA_UNITS_METERS_PER_HOUR ((FIT_EXD_DATA_UNITS)5) +#define FIT_EXD_DATA_UNITS_DEGREES_CELSIUS ((FIT_EXD_DATA_UNITS)6) +#define FIT_EXD_DATA_UNITS_DEGREES_FARENHEIT ((FIT_EXD_DATA_UNITS)7) +#define FIT_EXD_DATA_UNITS_ZONE ((FIT_EXD_DATA_UNITS)8) +#define FIT_EXD_DATA_UNITS_GEAR ((FIT_EXD_DATA_UNITS)9) +#define FIT_EXD_DATA_UNITS_RPM ((FIT_EXD_DATA_UNITS)10) +#define FIT_EXD_DATA_UNITS_BPM ((FIT_EXD_DATA_UNITS)11) +#define FIT_EXD_DATA_UNITS_DEGREES ((FIT_EXD_DATA_UNITS)12) +#define FIT_EXD_DATA_UNITS_MILLIMETERS ((FIT_EXD_DATA_UNITS)13) +#define FIT_EXD_DATA_UNITS_METERS ((FIT_EXD_DATA_UNITS)14) +#define FIT_EXD_DATA_UNITS_KILOMETERS ((FIT_EXD_DATA_UNITS)15) +#define FIT_EXD_DATA_UNITS_FEET ((FIT_EXD_DATA_UNITS)16) +#define FIT_EXD_DATA_UNITS_YARDS ((FIT_EXD_DATA_UNITS)17) +#define FIT_EXD_DATA_UNITS_KILOFEET ((FIT_EXD_DATA_UNITS)18) +#define FIT_EXD_DATA_UNITS_MILES ((FIT_EXD_DATA_UNITS)19) +#define FIT_EXD_DATA_UNITS_TIME ((FIT_EXD_DATA_UNITS)20) +#define FIT_EXD_DATA_UNITS_ENUM_TURN_TYPE ((FIT_EXD_DATA_UNITS)21) +#define FIT_EXD_DATA_UNITS_PERCENT ((FIT_EXD_DATA_UNITS)22) +#define FIT_EXD_DATA_UNITS_WATTS ((FIT_EXD_DATA_UNITS)23) +#define FIT_EXD_DATA_UNITS_WATTS_PER_KILOGRAM ((FIT_EXD_DATA_UNITS)24) +#define FIT_EXD_DATA_UNITS_ENUM_BATTERY_STATUS ((FIT_EXD_DATA_UNITS)25) +#define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_BEAM_ANGLE_MODE ((FIT_EXD_DATA_UNITS)26) +#define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_BATTERY_STATUS ((FIT_EXD_DATA_UNITS)27) +#define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_NETWORK_CONFIG_TYPE ((FIT_EXD_DATA_UNITS)28) +#define FIT_EXD_DATA_UNITS_LIGHTS ((FIT_EXD_DATA_UNITS)29) +#define FIT_EXD_DATA_UNITS_SECONDS ((FIT_EXD_DATA_UNITS)30) +#define FIT_EXD_DATA_UNITS_MINUTES ((FIT_EXD_DATA_UNITS)31) +#define FIT_EXD_DATA_UNITS_HOURS ((FIT_EXD_DATA_UNITS)32) +#define FIT_EXD_DATA_UNITS_CALORIES ((FIT_EXD_DATA_UNITS)33) +#define FIT_EXD_DATA_UNITS_KILOJOULES ((FIT_EXD_DATA_UNITS)34) +#define FIT_EXD_DATA_UNITS_MILLISECONDS ((FIT_EXD_DATA_UNITS)35) +#define FIT_EXD_DATA_UNITS_SECOND_PER_MILE ((FIT_EXD_DATA_UNITS)36) +#define FIT_EXD_DATA_UNITS_SECOND_PER_KILOMETER ((FIT_EXD_DATA_UNITS)37) +#define FIT_EXD_DATA_UNITS_CENTIMETER ((FIT_EXD_DATA_UNITS)38) +#define FIT_EXD_DATA_UNITS_ENUM_COURSE_POINT ((FIT_EXD_DATA_UNITS)39) +#define FIT_EXD_DATA_UNITS_BRADIANS ((FIT_EXD_DATA_UNITS)40) +#define FIT_EXD_DATA_UNITS_ENUM_SPORT ((FIT_EXD_DATA_UNITS)41) +#define FIT_EXD_DATA_UNITS_INCHES_HG ((FIT_EXD_DATA_UNITS)42) +#define FIT_EXD_DATA_UNITS_MM_HG ((FIT_EXD_DATA_UNITS)43) +#define FIT_EXD_DATA_UNITS_MBARS ((FIT_EXD_DATA_UNITS)44) +#define FIT_EXD_DATA_UNITS_HECTO_PASCALS ((FIT_EXD_DATA_UNITS)45) +#define FIT_EXD_DATA_UNITS_FEET_PER_MIN ((FIT_EXD_DATA_UNITS)46) +#define FIT_EXD_DATA_UNITS_METERS_PER_MIN ((FIT_EXD_DATA_UNITS)47) +#define FIT_EXD_DATA_UNITS_METERS_PER_SEC ((FIT_EXD_DATA_UNITS)48) +#define FIT_EXD_DATA_UNITS_EIGHT_CARDINAL ((FIT_EXD_DATA_UNITS)49) +#define FIT_EXD_DATA_UNITS_COUNT 50 + +typedef FIT_ENUM FIT_EXD_QUALIFIERS; +#define FIT_EXD_QUALIFIERS_INVALID FIT_ENUM_INVALID +#define FIT_EXD_QUALIFIERS_NO_QUALIFIER ((FIT_EXD_QUALIFIERS)0) +#define FIT_EXD_QUALIFIERS_INSTANTANEOUS ((FIT_EXD_QUALIFIERS)1) +#define FIT_EXD_QUALIFIERS_AVERAGE ((FIT_EXD_QUALIFIERS)2) +#define FIT_EXD_QUALIFIERS_LAP ((FIT_EXD_QUALIFIERS)3) +#define FIT_EXD_QUALIFIERS_MAXIMUM ((FIT_EXD_QUALIFIERS)4) +#define FIT_EXD_QUALIFIERS_MAXIMUM_AVERAGE ((FIT_EXD_QUALIFIERS)5) +#define FIT_EXD_QUALIFIERS_MAXIMUM_LAP ((FIT_EXD_QUALIFIERS)6) +#define FIT_EXD_QUALIFIERS_LAST_LAP ((FIT_EXD_QUALIFIERS)7) +#define FIT_EXD_QUALIFIERS_AVERAGE_LAP ((FIT_EXD_QUALIFIERS)8) +#define FIT_EXD_QUALIFIERS_TO_DESTINATION ((FIT_EXD_QUALIFIERS)9) +#define FIT_EXD_QUALIFIERS_TO_GO ((FIT_EXD_QUALIFIERS)10) +#define FIT_EXD_QUALIFIERS_TO_NEXT ((FIT_EXD_QUALIFIERS)11) +#define FIT_EXD_QUALIFIERS_NEXT_COURSE_POINT ((FIT_EXD_QUALIFIERS)12) +#define FIT_EXD_QUALIFIERS_TOTAL ((FIT_EXD_QUALIFIERS)13) +#define FIT_EXD_QUALIFIERS_THREE_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)14) +#define FIT_EXD_QUALIFIERS_TEN_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)15) +#define FIT_EXD_QUALIFIERS_THIRTY_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)16) +#define FIT_EXD_QUALIFIERS_PERCENT_MAXIMUM ((FIT_EXD_QUALIFIERS)17) +#define FIT_EXD_QUALIFIERS_PERCENT_MAXIMUM_AVERAGE ((FIT_EXD_QUALIFIERS)18) +#define FIT_EXD_QUALIFIERS_LAP_PERCENT_MAXIMUM ((FIT_EXD_QUALIFIERS)19) +#define FIT_EXD_QUALIFIERS_ELAPSED ((FIT_EXD_QUALIFIERS)20) +#define FIT_EXD_QUALIFIERS_SUNRISE ((FIT_EXD_QUALIFIERS)21) +#define FIT_EXD_QUALIFIERS_SUNSET ((FIT_EXD_QUALIFIERS)22) +#define FIT_EXD_QUALIFIERS_COMPARED_TO_VIRTUAL_PARTNER ((FIT_EXD_QUALIFIERS)23) +#define FIT_EXD_QUALIFIERS_MAXIMUM_24H ((FIT_EXD_QUALIFIERS)24) +#define FIT_EXD_QUALIFIERS_MINIMUM_24H ((FIT_EXD_QUALIFIERS)25) +#define FIT_EXD_QUALIFIERS_MINIMUM ((FIT_EXD_QUALIFIERS)26) +#define FIT_EXD_QUALIFIERS_FIRST ((FIT_EXD_QUALIFIERS)27) +#define FIT_EXD_QUALIFIERS_SECOND ((FIT_EXD_QUALIFIERS)28) +#define FIT_EXD_QUALIFIERS_THIRD ((FIT_EXD_QUALIFIERS)29) +#define FIT_EXD_QUALIFIERS_SHIFTER ((FIT_EXD_QUALIFIERS)30) +#define FIT_EXD_QUALIFIERS_LAST_SPORT ((FIT_EXD_QUALIFIERS)31) +#define FIT_EXD_QUALIFIERS_MOVING ((FIT_EXD_QUALIFIERS)32) +#define FIT_EXD_QUALIFIERS_STOPPED ((FIT_EXD_QUALIFIERS)33) +#define FIT_EXD_QUALIFIERS_ESTIMATED_TOTAL ((FIT_EXD_QUALIFIERS)34) +#define FIT_EXD_QUALIFIERS_ZONE_9 ((FIT_EXD_QUALIFIERS)242) +#define FIT_EXD_QUALIFIERS_ZONE_8 ((FIT_EXD_QUALIFIERS)243) +#define FIT_EXD_QUALIFIERS_ZONE_7 ((FIT_EXD_QUALIFIERS)244) +#define FIT_EXD_QUALIFIERS_ZONE_6 ((FIT_EXD_QUALIFIERS)245) +#define FIT_EXD_QUALIFIERS_ZONE_5 ((FIT_EXD_QUALIFIERS)246) +#define FIT_EXD_QUALIFIERS_ZONE_4 ((FIT_EXD_QUALIFIERS)247) +#define FIT_EXD_QUALIFIERS_ZONE_3 ((FIT_EXD_QUALIFIERS)248) +#define FIT_EXD_QUALIFIERS_ZONE_2 ((FIT_EXD_QUALIFIERS)249) +#define FIT_EXD_QUALIFIERS_ZONE_1 ((FIT_EXD_QUALIFIERS)250) +#define FIT_EXD_QUALIFIERS_COUNT 44 + +typedef FIT_ENUM FIT_EXD_DESCRIPTORS; +#define FIT_EXD_DESCRIPTORS_INVALID FIT_ENUM_INVALID +#define FIT_EXD_DESCRIPTORS_BIKE_LIGHT_BATTERY_STATUS ((FIT_EXD_DESCRIPTORS)0) +#define FIT_EXD_DESCRIPTORS_BEAM_ANGLE_STATUS ((FIT_EXD_DESCRIPTORS)1) +#define FIT_EXD_DESCRIPTORS_BATERY_LEVEL ((FIT_EXD_DESCRIPTORS)2) +#define FIT_EXD_DESCRIPTORS_LIGHT_NETWORK_MODE ((FIT_EXD_DESCRIPTORS)3) +#define FIT_EXD_DESCRIPTORS_NUMBER_LIGHTS_CONNECTED ((FIT_EXD_DESCRIPTORS)4) +#define FIT_EXD_DESCRIPTORS_CADENCE ((FIT_EXD_DESCRIPTORS)5) +#define FIT_EXD_DESCRIPTORS_DISTANCE ((FIT_EXD_DESCRIPTORS)6) +#define FIT_EXD_DESCRIPTORS_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)7) +#define FIT_EXD_DESCRIPTORS_HEADING ((FIT_EXD_DESCRIPTORS)8) +#define FIT_EXD_DESCRIPTORS_TIME ((FIT_EXD_DESCRIPTORS)9) +#define FIT_EXD_DESCRIPTORS_BATTERY_LEVEL ((FIT_EXD_DESCRIPTORS)10) +#define FIT_EXD_DESCRIPTORS_TRAINER_RESISTANCE ((FIT_EXD_DESCRIPTORS)11) +#define FIT_EXD_DESCRIPTORS_TRAINER_TARGET_POWER ((FIT_EXD_DESCRIPTORS)12) +#define FIT_EXD_DESCRIPTORS_TIME_SEATED ((FIT_EXD_DESCRIPTORS)13) +#define FIT_EXD_DESCRIPTORS_TIME_STANDING ((FIT_EXD_DESCRIPTORS)14) +#define FIT_EXD_DESCRIPTORS_ELEVATION ((FIT_EXD_DESCRIPTORS)15) +#define FIT_EXD_DESCRIPTORS_GRADE ((FIT_EXD_DESCRIPTORS)16) +#define FIT_EXD_DESCRIPTORS_ASCENT ((FIT_EXD_DESCRIPTORS)17) +#define FIT_EXD_DESCRIPTORS_DESCENT ((FIT_EXD_DESCRIPTORS)18) +#define FIT_EXD_DESCRIPTORS_VERTICAL_SPEED ((FIT_EXD_DESCRIPTORS)19) +#define FIT_EXD_DESCRIPTORS_DI2_BATTERY_LEVEL ((FIT_EXD_DESCRIPTORS)20) +#define FIT_EXD_DESCRIPTORS_FRONT_GEAR ((FIT_EXD_DESCRIPTORS)21) +#define FIT_EXD_DESCRIPTORS_REAR_GEAR ((FIT_EXD_DESCRIPTORS)22) +#define FIT_EXD_DESCRIPTORS_GEAR_RATIO ((FIT_EXD_DESCRIPTORS)23) +#define FIT_EXD_DESCRIPTORS_HEART_RATE ((FIT_EXD_DESCRIPTORS)24) +#define FIT_EXD_DESCRIPTORS_HEART_RATE_ZONE ((FIT_EXD_DESCRIPTORS)25) +#define FIT_EXD_DESCRIPTORS_TIME_IN_HEART_RATE_ZONE ((FIT_EXD_DESCRIPTORS)26) +#define FIT_EXD_DESCRIPTORS_HEART_RATE_RESERVE ((FIT_EXD_DESCRIPTORS)27) +#define FIT_EXD_DESCRIPTORS_CALORIES ((FIT_EXD_DESCRIPTORS)28) +#define FIT_EXD_DESCRIPTORS_GPS_ACCURACY ((FIT_EXD_DESCRIPTORS)29) +#define FIT_EXD_DESCRIPTORS_GPS_SIGNAL_STRENGTH ((FIT_EXD_DESCRIPTORS)30) +#define FIT_EXD_DESCRIPTORS_TEMPERATURE ((FIT_EXD_DESCRIPTORS)31) +#define FIT_EXD_DESCRIPTORS_TIME_OF_DAY ((FIT_EXD_DESCRIPTORS)32) +#define FIT_EXD_DESCRIPTORS_BALANCE ((FIT_EXD_DESCRIPTORS)33) +#define FIT_EXD_DESCRIPTORS_PEDAL_SMOOTHNESS ((FIT_EXD_DESCRIPTORS)34) +#define FIT_EXD_DESCRIPTORS_POWER ((FIT_EXD_DESCRIPTORS)35) +#define FIT_EXD_DESCRIPTORS_FUNCTIONAL_THRESHOLD_POWER ((FIT_EXD_DESCRIPTORS)36) +#define FIT_EXD_DESCRIPTORS_INTENSITY_FACTOR ((FIT_EXD_DESCRIPTORS)37) +#define FIT_EXD_DESCRIPTORS_WORK ((FIT_EXD_DESCRIPTORS)38) +#define FIT_EXD_DESCRIPTORS_POWER_RATIO ((FIT_EXD_DESCRIPTORS)39) +#define FIT_EXD_DESCRIPTORS_NORMALIZED_POWER ((FIT_EXD_DESCRIPTORS)40) +#define FIT_EXD_DESCRIPTORS_TRAINING_STRESS_SCORE ((FIT_EXD_DESCRIPTORS)41) +#define FIT_EXD_DESCRIPTORS_TIME_ON_ZONE ((FIT_EXD_DESCRIPTORS)42) +#define FIT_EXD_DESCRIPTORS_SPEED ((FIT_EXD_DESCRIPTORS)43) +#define FIT_EXD_DESCRIPTORS_LAPS ((FIT_EXD_DESCRIPTORS)44) +#define FIT_EXD_DESCRIPTORS_REPS ((FIT_EXD_DESCRIPTORS)45) +#define FIT_EXD_DESCRIPTORS_WORKOUT_STEP ((FIT_EXD_DESCRIPTORS)46) +#define FIT_EXD_DESCRIPTORS_COURSE_DISTANCE ((FIT_EXD_DESCRIPTORS)47) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_DISTANCE ((FIT_EXD_DESCRIPTORS)48) +#define FIT_EXD_DESCRIPTORS_COURSE_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)49) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)50) +#define FIT_EXD_DESCRIPTORS_COURSE_TIME ((FIT_EXD_DESCRIPTORS)51) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_TIME ((FIT_EXD_DESCRIPTORS)52) +#define FIT_EXD_DESCRIPTORS_COURSE_HEADING ((FIT_EXD_DESCRIPTORS)53) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_HEADING ((FIT_EXD_DESCRIPTORS)54) +#define FIT_EXD_DESCRIPTORS_POWER_ZONE ((FIT_EXD_DESCRIPTORS)55) +#define FIT_EXD_DESCRIPTORS_TORQUE_EFFECTIVENESS ((FIT_EXD_DESCRIPTORS)56) +#define FIT_EXD_DESCRIPTORS_TIMER_TIME ((FIT_EXD_DESCRIPTORS)57) +#define FIT_EXD_DESCRIPTORS_POWER_WEIGHT_RATIO ((FIT_EXD_DESCRIPTORS)58) +#define FIT_EXD_DESCRIPTORS_LEFT_PLATFORM_CENTER_OFFSET ((FIT_EXD_DESCRIPTORS)59) +#define FIT_EXD_DESCRIPTORS_RIGHT_PLATFORM_CENTER_OFFSET ((FIT_EXD_DESCRIPTORS)60) +#define FIT_EXD_DESCRIPTORS_LEFT_POWER_PHASE_START_ANGLE ((FIT_EXD_DESCRIPTORS)61) +#define FIT_EXD_DESCRIPTORS_RIGHT_POWER_PHASE_START_ANGLE ((FIT_EXD_DESCRIPTORS)62) +#define FIT_EXD_DESCRIPTORS_LEFT_POWER_PHASE_FINISH_ANGLE ((FIT_EXD_DESCRIPTORS)63) +#define FIT_EXD_DESCRIPTORS_RIGHT_POWER_PHASE_FINISH_ANGLE ((FIT_EXD_DESCRIPTORS)64) +#define FIT_EXD_DESCRIPTORS_GEARS ((FIT_EXD_DESCRIPTORS)65) // Combined gear information +#define FIT_EXD_DESCRIPTORS_PACE ((FIT_EXD_DESCRIPTORS)66) +#define FIT_EXD_DESCRIPTORS_TRAINING_EFFECT ((FIT_EXD_DESCRIPTORS)67) +#define FIT_EXD_DESCRIPTORS_VERTICAL_OSCILLATION ((FIT_EXD_DESCRIPTORS)68) +#define FIT_EXD_DESCRIPTORS_VERTICAL_RATIO ((FIT_EXD_DESCRIPTORS)69) +#define FIT_EXD_DESCRIPTORS_GROUND_CONTACT_TIME ((FIT_EXD_DESCRIPTORS)70) +#define FIT_EXD_DESCRIPTORS_LEFT_GROUND_CONTACT_TIME_BALANCE ((FIT_EXD_DESCRIPTORS)71) +#define FIT_EXD_DESCRIPTORS_RIGHT_GROUND_CONTACT_TIME_BALANCE ((FIT_EXD_DESCRIPTORS)72) +#define FIT_EXD_DESCRIPTORS_STRIDE_LENGTH ((FIT_EXD_DESCRIPTORS)73) +#define FIT_EXD_DESCRIPTORS_RUNNING_CADENCE ((FIT_EXD_DESCRIPTORS)74) +#define FIT_EXD_DESCRIPTORS_PERFORMANCE_CONDITION ((FIT_EXD_DESCRIPTORS)75) +#define FIT_EXD_DESCRIPTORS_COURSE_TYPE ((FIT_EXD_DESCRIPTORS)76) +#define FIT_EXD_DESCRIPTORS_TIME_IN_POWER_ZONE ((FIT_EXD_DESCRIPTORS)77) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_TURN ((FIT_EXD_DESCRIPTORS)78) +#define FIT_EXD_DESCRIPTORS_COURSE_LOCATION ((FIT_EXD_DESCRIPTORS)79) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_LOCATION ((FIT_EXD_DESCRIPTORS)80) +#define FIT_EXD_DESCRIPTORS_COMPASS ((FIT_EXD_DESCRIPTORS)81) +#define FIT_EXD_DESCRIPTORS_GEAR_COMBO ((FIT_EXD_DESCRIPTORS)82) +#define FIT_EXD_DESCRIPTORS_MUSCLE_OXYGEN ((FIT_EXD_DESCRIPTORS)83) +#define FIT_EXD_DESCRIPTORS_ICON ((FIT_EXD_DESCRIPTORS)84) +#define FIT_EXD_DESCRIPTORS_COMPASS_HEADING ((FIT_EXD_DESCRIPTORS)85) +#define FIT_EXD_DESCRIPTORS_GPS_HEADING ((FIT_EXD_DESCRIPTORS)86) +#define FIT_EXD_DESCRIPTORS_GPS_ELEVATION ((FIT_EXD_DESCRIPTORS)87) +#define FIT_EXD_DESCRIPTORS_ANAEROBIC_TRAINING_EFFECT ((FIT_EXD_DESCRIPTORS)88) +#define FIT_EXD_DESCRIPTORS_COURSE ((FIT_EXD_DESCRIPTORS)89) +#define FIT_EXD_DESCRIPTORS_OFF_COURSE ((FIT_EXD_DESCRIPTORS)90) +#define FIT_EXD_DESCRIPTORS_GLIDE_RATIO ((FIT_EXD_DESCRIPTORS)91) +#define FIT_EXD_DESCRIPTORS_VERTICAL_DISTANCE ((FIT_EXD_DESCRIPTORS)92) +#define FIT_EXD_DESCRIPTORS_VMG ((FIT_EXD_DESCRIPTORS)93) +#define FIT_EXD_DESCRIPTORS_AMBIENT_PRESSURE ((FIT_EXD_DESCRIPTORS)94) +#define FIT_EXD_DESCRIPTORS_PRESSURE ((FIT_EXD_DESCRIPTORS)95) +#define FIT_EXD_DESCRIPTORS_VAM ((FIT_EXD_DESCRIPTORS)96) +#define FIT_EXD_DESCRIPTORS_COUNT 97 + +typedef FIT_UINT32 FIT_AUTO_ACTIVITY_DETECT; +#define FIT_AUTO_ACTIVITY_DETECT_INVALID FIT_UINT32_INVALID +#define FIT_AUTO_ACTIVITY_DETECT_NONE ((FIT_AUTO_ACTIVITY_DETECT)0x00000000) +#define FIT_AUTO_ACTIVITY_DETECT_RUNNING ((FIT_AUTO_ACTIVITY_DETECT)0x00000001) +#define FIT_AUTO_ACTIVITY_DETECT_CYCLING ((FIT_AUTO_ACTIVITY_DETECT)0x00000002) +#define FIT_AUTO_ACTIVITY_DETECT_SWIMMING ((FIT_AUTO_ACTIVITY_DETECT)0x00000004) +#define FIT_AUTO_ACTIVITY_DETECT_WALKING ((FIT_AUTO_ACTIVITY_DETECT)0x00000008) +#define FIT_AUTO_ACTIVITY_DETECT_ELLIPTICAL ((FIT_AUTO_ACTIVITY_DETECT)0x00000020) +#define FIT_AUTO_ACTIVITY_DETECT_SEDENTARY ((FIT_AUTO_ACTIVITY_DETECT)0x00000400) +#define FIT_AUTO_ACTIVITY_DETECT_COUNT 7 + +typedef FIT_UINT32Z FIT_SUPPORTED_EXD_SCREEN_LAYOUTS; +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_INVALID FIT_UINT32Z_INVALID +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_FULL_SCREEN ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000001) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000002) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000004) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL_RIGHT_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000008) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL_BOTTOM_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000010) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_FULL_QUARTER_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000020) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL_LEFT_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000040) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL_TOP_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000080) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_COUNT 8 + +typedef FIT_UINT8 FIT_FIT_BASE_TYPE; +#define FIT_FIT_BASE_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_FIT_BASE_TYPE_ENUM ((FIT_FIT_BASE_TYPE)0) +#define FIT_FIT_BASE_TYPE_SINT8 ((FIT_FIT_BASE_TYPE)1) +#define FIT_FIT_BASE_TYPE_UINT8 ((FIT_FIT_BASE_TYPE)2) +#define FIT_FIT_BASE_TYPE_SINT16 ((FIT_FIT_BASE_TYPE)131) +#define FIT_FIT_BASE_TYPE_UINT16 ((FIT_FIT_BASE_TYPE)132) +#define FIT_FIT_BASE_TYPE_SINT32 ((FIT_FIT_BASE_TYPE)133) +#define FIT_FIT_BASE_TYPE_UINT32 ((FIT_FIT_BASE_TYPE)134) +#define FIT_FIT_BASE_TYPE_STRING ((FIT_FIT_BASE_TYPE)7) +#define FIT_FIT_BASE_TYPE_FLOAT32 ((FIT_FIT_BASE_TYPE)136) +#define FIT_FIT_BASE_TYPE_FLOAT64 ((FIT_FIT_BASE_TYPE)137) +#define FIT_FIT_BASE_TYPE_UINT8Z ((FIT_FIT_BASE_TYPE)10) +#define FIT_FIT_BASE_TYPE_UINT16Z ((FIT_FIT_BASE_TYPE)139) +#define FIT_FIT_BASE_TYPE_UINT32Z ((FIT_FIT_BASE_TYPE)140) +#define FIT_FIT_BASE_TYPE_BYTE ((FIT_FIT_BASE_TYPE)13) +#define FIT_FIT_BASE_TYPE_SINT64 ((FIT_FIT_BASE_TYPE)142) +#define FIT_FIT_BASE_TYPE_UINT64 ((FIT_FIT_BASE_TYPE)143) +#define FIT_FIT_BASE_TYPE_UINT64Z ((FIT_FIT_BASE_TYPE)144) +#define FIT_FIT_BASE_TYPE_COUNT 17 + +typedef FIT_ENUM FIT_TURN_TYPE; +#define FIT_TURN_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_TURN_TYPE_ARRIVING_IDX ((FIT_TURN_TYPE)0) +#define FIT_TURN_TYPE_ARRIVING_LEFT_IDX ((FIT_TURN_TYPE)1) +#define FIT_TURN_TYPE_ARRIVING_RIGHT_IDX ((FIT_TURN_TYPE)2) +#define FIT_TURN_TYPE_ARRIVING_VIA_IDX ((FIT_TURN_TYPE)3) +#define FIT_TURN_TYPE_ARRIVING_VIA_LEFT_IDX ((FIT_TURN_TYPE)4) +#define FIT_TURN_TYPE_ARRIVING_VIA_RIGHT_IDX ((FIT_TURN_TYPE)5) +#define FIT_TURN_TYPE_BEAR_KEEP_LEFT_IDX ((FIT_TURN_TYPE)6) +#define FIT_TURN_TYPE_BEAR_KEEP_RIGHT_IDX ((FIT_TURN_TYPE)7) +#define FIT_TURN_TYPE_CONTINUE_IDX ((FIT_TURN_TYPE)8) +#define FIT_TURN_TYPE_EXIT_LEFT_IDX ((FIT_TURN_TYPE)9) +#define FIT_TURN_TYPE_EXIT_RIGHT_IDX ((FIT_TURN_TYPE)10) +#define FIT_TURN_TYPE_FERRY_IDX ((FIT_TURN_TYPE)11) +#define FIT_TURN_TYPE_ROUNDABOUT_45_IDX ((FIT_TURN_TYPE)12) +#define FIT_TURN_TYPE_ROUNDABOUT_90_IDX ((FIT_TURN_TYPE)13) +#define FIT_TURN_TYPE_ROUNDABOUT_135_IDX ((FIT_TURN_TYPE)14) +#define FIT_TURN_TYPE_ROUNDABOUT_180_IDX ((FIT_TURN_TYPE)15) +#define FIT_TURN_TYPE_ROUNDABOUT_225_IDX ((FIT_TURN_TYPE)16) +#define FIT_TURN_TYPE_ROUNDABOUT_270_IDX ((FIT_TURN_TYPE)17) +#define FIT_TURN_TYPE_ROUNDABOUT_315_IDX ((FIT_TURN_TYPE)18) +#define FIT_TURN_TYPE_ROUNDABOUT_360_IDX ((FIT_TURN_TYPE)19) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_45_IDX ((FIT_TURN_TYPE)20) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_90_IDX ((FIT_TURN_TYPE)21) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_135_IDX ((FIT_TURN_TYPE)22) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_180_IDX ((FIT_TURN_TYPE)23) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_225_IDX ((FIT_TURN_TYPE)24) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_270_IDX ((FIT_TURN_TYPE)25) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_315_IDX ((FIT_TURN_TYPE)26) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_360_IDX ((FIT_TURN_TYPE)27) +#define FIT_TURN_TYPE_ROUNDABOUT_GENERIC_IDX ((FIT_TURN_TYPE)28) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_GENERIC_IDX ((FIT_TURN_TYPE)29) +#define FIT_TURN_TYPE_SHARP_TURN_LEFT_IDX ((FIT_TURN_TYPE)30) +#define FIT_TURN_TYPE_SHARP_TURN_RIGHT_IDX ((FIT_TURN_TYPE)31) +#define FIT_TURN_TYPE_TURN_LEFT_IDX ((FIT_TURN_TYPE)32) +#define FIT_TURN_TYPE_TURN_RIGHT_IDX ((FIT_TURN_TYPE)33) +#define FIT_TURN_TYPE_UTURN_LEFT_IDX ((FIT_TURN_TYPE)34) +#define FIT_TURN_TYPE_UTURN_RIGHT_IDX ((FIT_TURN_TYPE)35) +#define FIT_TURN_TYPE_ICON_INV_IDX ((FIT_TURN_TYPE)36) +#define FIT_TURN_TYPE_ICON_IDX_CNT ((FIT_TURN_TYPE)37) +#define FIT_TURN_TYPE_COUNT 38 + +typedef FIT_UINT8 FIT_BIKE_LIGHT_BEAM_ANGLE_MODE; +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_INVALID FIT_UINT8_INVALID +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_MANUAL ((FIT_BIKE_LIGHT_BEAM_ANGLE_MODE)0) +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_AUTO ((FIT_BIKE_LIGHT_BEAM_ANGLE_MODE)1) +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_COUNT 2 + +typedef FIT_UINT16 FIT_FIT_BASE_UNIT; +#define FIT_FIT_BASE_UNIT_INVALID FIT_UINT16_INVALID +#define FIT_FIT_BASE_UNIT_OTHER ((FIT_FIT_BASE_UNIT)0) +#define FIT_FIT_BASE_UNIT_KILOGRAM ((FIT_FIT_BASE_UNIT)1) +#define FIT_FIT_BASE_UNIT_POUND ((FIT_FIT_BASE_UNIT)2) +#define FIT_FIT_BASE_UNIT_COUNT 3 + +typedef FIT_UINT8 FIT_SET_TYPE; +#define FIT_SET_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_SET_TYPE_REST ((FIT_SET_TYPE)0) +#define FIT_SET_TYPE_ACTIVE ((FIT_SET_TYPE)1) +#define FIT_SET_TYPE_COUNT 2 + +typedef FIT_UINT16 FIT_EXERCISE_CATEGORY; +#define FIT_EXERCISE_CATEGORY_INVALID FIT_UINT16_INVALID +#define FIT_EXERCISE_CATEGORY_BENCH_PRESS ((FIT_EXERCISE_CATEGORY)0) +#define FIT_EXERCISE_CATEGORY_CALF_RAISE ((FIT_EXERCISE_CATEGORY)1) +#define FIT_EXERCISE_CATEGORY_CARDIO ((FIT_EXERCISE_CATEGORY)2) +#define FIT_EXERCISE_CATEGORY_CARRY ((FIT_EXERCISE_CATEGORY)3) +#define FIT_EXERCISE_CATEGORY_CHOP ((FIT_EXERCISE_CATEGORY)4) +#define FIT_EXERCISE_CATEGORY_CORE ((FIT_EXERCISE_CATEGORY)5) +#define FIT_EXERCISE_CATEGORY_CRUNCH ((FIT_EXERCISE_CATEGORY)6) +#define FIT_EXERCISE_CATEGORY_CURL ((FIT_EXERCISE_CATEGORY)7) +#define FIT_EXERCISE_CATEGORY_DEADLIFT ((FIT_EXERCISE_CATEGORY)8) +#define FIT_EXERCISE_CATEGORY_FLYE ((FIT_EXERCISE_CATEGORY)9) +#define FIT_EXERCISE_CATEGORY_HIP_RAISE ((FIT_EXERCISE_CATEGORY)10) +#define FIT_EXERCISE_CATEGORY_HIP_STABILITY ((FIT_EXERCISE_CATEGORY)11) +#define FIT_EXERCISE_CATEGORY_HIP_SWING ((FIT_EXERCISE_CATEGORY)12) +#define FIT_EXERCISE_CATEGORY_HYPEREXTENSION ((FIT_EXERCISE_CATEGORY)13) +#define FIT_EXERCISE_CATEGORY_LATERAL_RAISE ((FIT_EXERCISE_CATEGORY)14) +#define FIT_EXERCISE_CATEGORY_LEG_CURL ((FIT_EXERCISE_CATEGORY)15) +#define FIT_EXERCISE_CATEGORY_LEG_RAISE ((FIT_EXERCISE_CATEGORY)16) +#define FIT_EXERCISE_CATEGORY_LUNGE ((FIT_EXERCISE_CATEGORY)17) +#define FIT_EXERCISE_CATEGORY_OLYMPIC_LIFT ((FIT_EXERCISE_CATEGORY)18) +#define FIT_EXERCISE_CATEGORY_PLANK ((FIT_EXERCISE_CATEGORY)19) +#define FIT_EXERCISE_CATEGORY_PLYO ((FIT_EXERCISE_CATEGORY)20) +#define FIT_EXERCISE_CATEGORY_PULL_UP ((FIT_EXERCISE_CATEGORY)21) +#define FIT_EXERCISE_CATEGORY_PUSH_UP ((FIT_EXERCISE_CATEGORY)22) +#define FIT_EXERCISE_CATEGORY_ROW ((FIT_EXERCISE_CATEGORY)23) +#define FIT_EXERCISE_CATEGORY_SHOULDER_PRESS ((FIT_EXERCISE_CATEGORY)24) +#define FIT_EXERCISE_CATEGORY_SHOULDER_STABILITY ((FIT_EXERCISE_CATEGORY)25) +#define FIT_EXERCISE_CATEGORY_SHRUG ((FIT_EXERCISE_CATEGORY)26) +#define FIT_EXERCISE_CATEGORY_SIT_UP ((FIT_EXERCISE_CATEGORY)27) +#define FIT_EXERCISE_CATEGORY_SQUAT ((FIT_EXERCISE_CATEGORY)28) +#define FIT_EXERCISE_CATEGORY_TOTAL_BODY ((FIT_EXERCISE_CATEGORY)29) +#define FIT_EXERCISE_CATEGORY_TRICEPS_EXTENSION ((FIT_EXERCISE_CATEGORY)30) +#define FIT_EXERCISE_CATEGORY_WARM_UP ((FIT_EXERCISE_CATEGORY)31) +#define FIT_EXERCISE_CATEGORY_RUN ((FIT_EXERCISE_CATEGORY)32) +#define FIT_EXERCISE_CATEGORY_UNKNOWN ((FIT_EXERCISE_CATEGORY)65534) +#define FIT_EXERCISE_CATEGORY_COUNT 34 + +typedef FIT_UINT16 FIT_BENCH_PRESS_EXERCISE_NAME; +#define FIT_BENCH_PRESS_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_BENCH_PRESS_EXERCISE_NAME_ALTERNATING_DUMBBELL_CHEST_PRESS_ON_SWISS_BALL ((FIT_BENCH_PRESS_EXERCISE_NAME)0) +#define FIT_BENCH_PRESS_EXERCISE_NAME_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)1) +#define FIT_BENCH_PRESS_EXERCISE_NAME_BARBELL_BOARD_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)2) +#define FIT_BENCH_PRESS_EXERCISE_NAME_BARBELL_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)3) +#define FIT_BENCH_PRESS_EXERCISE_NAME_CLOSE_GRIP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)4) +#define FIT_BENCH_PRESS_EXERCISE_NAME_DECLINE_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)5) +#define FIT_BENCH_PRESS_EXERCISE_NAME_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)6) +#define FIT_BENCH_PRESS_EXERCISE_NAME_DUMBBELL_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)7) +#define FIT_BENCH_PRESS_EXERCISE_NAME_INCLINE_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)8) +#define FIT_BENCH_PRESS_EXERCISE_NAME_INCLINE_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)9) +#define FIT_BENCH_PRESS_EXERCISE_NAME_INCLINE_SMITH_MACHINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)10) +#define FIT_BENCH_PRESS_EXERCISE_NAME_ISOMETRIC_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)11) +#define FIT_BENCH_PRESS_EXERCISE_NAME_KETTLEBELL_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)12) +#define FIT_BENCH_PRESS_EXERCISE_NAME_NEUTRAL_GRIP_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)13) +#define FIT_BENCH_PRESS_EXERCISE_NAME_NEUTRAL_GRIP_DUMBBELL_INCLINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)14) +#define FIT_BENCH_PRESS_EXERCISE_NAME_ONE_ARM_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)15) +#define FIT_BENCH_PRESS_EXERCISE_NAME_WEIGHTED_ONE_ARM_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)16) +#define FIT_BENCH_PRESS_EXERCISE_NAME_PARTIAL_LOCKOUT ((FIT_BENCH_PRESS_EXERCISE_NAME)17) +#define FIT_BENCH_PRESS_EXERCISE_NAME_REVERSE_GRIP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)18) +#define FIT_BENCH_PRESS_EXERCISE_NAME_REVERSE_GRIP_INCLINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)19) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SINGLE_ARM_CABLE_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)20) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)21) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SMITH_MACHINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)22) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SWISS_BALL_DUMBBELL_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)23) +#define FIT_BENCH_PRESS_EXERCISE_NAME_TRIPLE_STOP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)24) +#define FIT_BENCH_PRESS_EXERCISE_NAME_WIDE_GRIP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)25) +#define FIT_BENCH_PRESS_EXERCISE_NAME_ALTERNATING_DUMBBELL_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)26) +#define FIT_BENCH_PRESS_EXERCISE_NAME_COUNT 27 + +typedef FIT_UINT16 FIT_CALF_RAISE_EXERCISE_NAME; +#define FIT_CALF_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)0) +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_WEIGHTED_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)1) +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_SINGLE_LEG_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)2) +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_WEIGHTED_SINGLE_LEG_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)3) +#define FIT_CALF_RAISE_EXERCISE_NAME_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)4) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)5) +#define FIT_CALF_RAISE_EXERCISE_NAME_SEATED_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)6) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_SEATED_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)7) +#define FIT_CALF_RAISE_EXERCISE_NAME_SEATED_DUMBBELL_TOE_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)8) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_BENT_KNEE_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)9) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENT_KNEE_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)10) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_DECLINE_PUSH_UP ((FIT_CALF_RAISE_EXERCISE_NAME)11) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)12) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)13) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_KNEE_HOLD ((FIT_CALF_RAISE_EXERCISE_NAME)14) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_STANDING_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)15) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_STANDING_DUMBBELL_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)16) +#define FIT_CALF_RAISE_EXERCISE_NAME_STANDING_BARBELL_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)17) +#define FIT_CALF_RAISE_EXERCISE_NAME_STANDING_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)18) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_STANDING_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)19) +#define FIT_CALF_RAISE_EXERCISE_NAME_STANDING_DUMBBELL_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)20) +#define FIT_CALF_RAISE_EXERCISE_NAME_COUNT 21 + +typedef FIT_UINT16 FIT_CARDIO_EXERCISE_NAME; +#define FIT_CARDIO_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CARDIO_EXERCISE_NAME_BOB_AND_WEAVE_CIRCLE ((FIT_CARDIO_EXERCISE_NAME)0) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_BOB_AND_WEAVE_CIRCLE ((FIT_CARDIO_EXERCISE_NAME)1) +#define FIT_CARDIO_EXERCISE_NAME_CARDIO_CORE_CRAWL ((FIT_CARDIO_EXERCISE_NAME)2) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_CARDIO_CORE_CRAWL ((FIT_CARDIO_EXERCISE_NAME)3) +#define FIT_CARDIO_EXERCISE_NAME_DOUBLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)4) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_DOUBLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)5) +#define FIT_CARDIO_EXERCISE_NAME_JUMP_ROPE ((FIT_CARDIO_EXERCISE_NAME)6) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMP_ROPE ((FIT_CARDIO_EXERCISE_NAME)7) +#define FIT_CARDIO_EXERCISE_NAME_JUMP_ROPE_CROSSOVER ((FIT_CARDIO_EXERCISE_NAME)8) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMP_ROPE_CROSSOVER ((FIT_CARDIO_EXERCISE_NAME)9) +#define FIT_CARDIO_EXERCISE_NAME_JUMP_ROPE_JOG ((FIT_CARDIO_EXERCISE_NAME)10) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMP_ROPE_JOG ((FIT_CARDIO_EXERCISE_NAME)11) +#define FIT_CARDIO_EXERCISE_NAME_JUMPING_JACKS ((FIT_CARDIO_EXERCISE_NAME)12) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMPING_JACKS ((FIT_CARDIO_EXERCISE_NAME)13) +#define FIT_CARDIO_EXERCISE_NAME_SKI_MOGULS ((FIT_CARDIO_EXERCISE_NAME)14) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_SKI_MOGULS ((FIT_CARDIO_EXERCISE_NAME)15) +#define FIT_CARDIO_EXERCISE_NAME_SPLIT_JACKS ((FIT_CARDIO_EXERCISE_NAME)16) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_SPLIT_JACKS ((FIT_CARDIO_EXERCISE_NAME)17) +#define FIT_CARDIO_EXERCISE_NAME_SQUAT_JACKS ((FIT_CARDIO_EXERCISE_NAME)18) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_SQUAT_JACKS ((FIT_CARDIO_EXERCISE_NAME)19) +#define FIT_CARDIO_EXERCISE_NAME_TRIPLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)20) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_TRIPLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)21) +#define FIT_CARDIO_EXERCISE_NAME_COUNT 22 + +typedef FIT_UINT16 FIT_CARRY_EXERCISE_NAME; +#define FIT_CARRY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CARRY_EXERCISE_NAME_BAR_HOLDS ((FIT_CARRY_EXERCISE_NAME)0) +#define FIT_CARRY_EXERCISE_NAME_FARMERS_WALK ((FIT_CARRY_EXERCISE_NAME)1) +#define FIT_CARRY_EXERCISE_NAME_FARMERS_WALK_ON_TOES ((FIT_CARRY_EXERCISE_NAME)2) +#define FIT_CARRY_EXERCISE_NAME_HEX_DUMBBELL_HOLD ((FIT_CARRY_EXERCISE_NAME)3) +#define FIT_CARRY_EXERCISE_NAME_OVERHEAD_CARRY ((FIT_CARRY_EXERCISE_NAME)4) +#define FIT_CARRY_EXERCISE_NAME_COUNT 5 + +typedef FIT_UINT16 FIT_CHOP_EXERCISE_NAME; +#define FIT_CHOP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CHOP_EXERCISE_NAME_CABLE_PULL_THROUGH ((FIT_CHOP_EXERCISE_NAME)0) +#define FIT_CHOP_EXERCISE_NAME_CABLE_ROTATIONAL_LIFT ((FIT_CHOP_EXERCISE_NAME)1) +#define FIT_CHOP_EXERCISE_NAME_CABLE_WOODCHOP ((FIT_CHOP_EXERCISE_NAME)2) +#define FIT_CHOP_EXERCISE_NAME_CROSS_CHOP_TO_KNEE ((FIT_CHOP_EXERCISE_NAME)3) +#define FIT_CHOP_EXERCISE_NAME_WEIGHTED_CROSS_CHOP_TO_KNEE ((FIT_CHOP_EXERCISE_NAME)4) +#define FIT_CHOP_EXERCISE_NAME_DUMBBELL_CHOP ((FIT_CHOP_EXERCISE_NAME)5) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_ROTATION ((FIT_CHOP_EXERCISE_NAME)6) +#define FIT_CHOP_EXERCISE_NAME_WEIGHTED_HALF_KNEELING_ROTATION ((FIT_CHOP_EXERCISE_NAME)7) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)8) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_ROTATIONAL_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)9) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_STABILITY_CHOP ((FIT_CHOP_EXERCISE_NAME)10) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_STABILITY_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)11) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)12) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_ROTATIONAL_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)13) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_STABILITY_CHOP ((FIT_CHOP_EXERCISE_NAME)14) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_WOODCHOPPER ((FIT_CHOP_EXERCISE_NAME)15) +#define FIT_CHOP_EXERCISE_NAME_MEDICINE_BALL_WOOD_CHOPS ((FIT_CHOP_EXERCISE_NAME)16) +#define FIT_CHOP_EXERCISE_NAME_POWER_SQUAT_CHOPS ((FIT_CHOP_EXERCISE_NAME)17) +#define FIT_CHOP_EXERCISE_NAME_WEIGHTED_POWER_SQUAT_CHOPS ((FIT_CHOP_EXERCISE_NAME)18) +#define FIT_CHOP_EXERCISE_NAME_STANDING_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)19) +#define FIT_CHOP_EXERCISE_NAME_STANDING_SPLIT_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)20) +#define FIT_CHOP_EXERCISE_NAME_STANDING_SPLIT_ROTATIONAL_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)21) +#define FIT_CHOP_EXERCISE_NAME_STANDING_STABILITY_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)22) +#define FIT_CHOP_EXERCISE_NAME_COUNT 23 + +typedef FIT_UINT16 FIT_CORE_EXERCISE_NAME; +#define FIT_CORE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CORE_EXERCISE_NAME_ABS_JABS ((FIT_CORE_EXERCISE_NAME)0) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_ABS_JABS ((FIT_CORE_EXERCISE_NAME)1) +#define FIT_CORE_EXERCISE_NAME_ALTERNATING_PLATE_REACH ((FIT_CORE_EXERCISE_NAME)2) +#define FIT_CORE_EXERCISE_NAME_BARBELL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)3) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_BARBELL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)4) +#define FIT_CORE_EXERCISE_NAME_BODY_BAR_OBLIQUE_TWIST ((FIT_CORE_EXERCISE_NAME)5) +#define FIT_CORE_EXERCISE_NAME_CABLE_CORE_PRESS ((FIT_CORE_EXERCISE_NAME)6) +#define FIT_CORE_EXERCISE_NAME_CABLE_SIDE_BEND ((FIT_CORE_EXERCISE_NAME)7) +#define FIT_CORE_EXERCISE_NAME_SIDE_BEND ((FIT_CORE_EXERCISE_NAME)8) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SIDE_BEND ((FIT_CORE_EXERCISE_NAME)9) +#define FIT_CORE_EXERCISE_NAME_CRESCENT_CIRCLE ((FIT_CORE_EXERCISE_NAME)10) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_CRESCENT_CIRCLE ((FIT_CORE_EXERCISE_NAME)11) +#define FIT_CORE_EXERCISE_NAME_CYCLING_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)12) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_CYCLING_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)13) +#define FIT_CORE_EXERCISE_NAME_ELEVATED_FEET_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)14) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_ELEVATED_FEET_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)15) +#define FIT_CORE_EXERCISE_NAME_HALF_TURKISH_GET_UP ((FIT_CORE_EXERCISE_NAME)16) +#define FIT_CORE_EXERCISE_NAME_KETTLEBELL_WINDMILL ((FIT_CORE_EXERCISE_NAME)17) +#define FIT_CORE_EXERCISE_NAME_KNEELING_AB_WHEEL ((FIT_CORE_EXERCISE_NAME)18) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_KNEELING_AB_WHEEL ((FIT_CORE_EXERCISE_NAME)19) +#define FIT_CORE_EXERCISE_NAME_MODIFIED_FRONT_LEVER ((FIT_CORE_EXERCISE_NAME)20) +#define FIT_CORE_EXERCISE_NAME_OPEN_KNEE_TUCKS ((FIT_CORE_EXERCISE_NAME)21) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_OPEN_KNEE_TUCKS ((FIT_CORE_EXERCISE_NAME)22) +#define FIT_CORE_EXERCISE_NAME_SIDE_ABS_LEG_LIFT ((FIT_CORE_EXERCISE_NAME)23) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SIDE_ABS_LEG_LIFT ((FIT_CORE_EXERCISE_NAME)24) +#define FIT_CORE_EXERCISE_NAME_SWISS_BALL_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)25) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SWISS_BALL_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)26) +#define FIT_CORE_EXERCISE_NAME_SWISS_BALL_PIKE ((FIT_CORE_EXERCISE_NAME)27) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PIKE ((FIT_CORE_EXERCISE_NAME)28) +#define FIT_CORE_EXERCISE_NAME_SWISS_BALL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)29) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SWISS_BALL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)30) +#define FIT_CORE_EXERCISE_NAME_TRIANGLE_HIP_PRESS ((FIT_CORE_EXERCISE_NAME)31) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_TRIANGLE_HIP_PRESS ((FIT_CORE_EXERCISE_NAME)32) +#define FIT_CORE_EXERCISE_NAME_TRX_SUSPENDED_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)33) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_TRX_SUSPENDED_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)34) +#define FIT_CORE_EXERCISE_NAME_U_BOAT ((FIT_CORE_EXERCISE_NAME)35) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_U_BOAT ((FIT_CORE_EXERCISE_NAME)36) +#define FIT_CORE_EXERCISE_NAME_WINDMILL_SWITCHES ((FIT_CORE_EXERCISE_NAME)37) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_WINDMILL_SWITCHES ((FIT_CORE_EXERCISE_NAME)38) +#define FIT_CORE_EXERCISE_NAME_ALTERNATING_SLIDE_OUT ((FIT_CORE_EXERCISE_NAME)39) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_ALTERNATING_SLIDE_OUT ((FIT_CORE_EXERCISE_NAME)40) +#define FIT_CORE_EXERCISE_NAME_GHD_BACK_EXTENSIONS ((FIT_CORE_EXERCISE_NAME)41) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_GHD_BACK_EXTENSIONS ((FIT_CORE_EXERCISE_NAME)42) +#define FIT_CORE_EXERCISE_NAME_OVERHEAD_WALK ((FIT_CORE_EXERCISE_NAME)43) +#define FIT_CORE_EXERCISE_NAME_INCHWORM ((FIT_CORE_EXERCISE_NAME)44) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_MODIFIED_FRONT_LEVER ((FIT_CORE_EXERCISE_NAME)45) +#define FIT_CORE_EXERCISE_NAME_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)46) +#define FIT_CORE_EXERCISE_NAME_ABDOMINAL_LEG_ROTATIONS ((FIT_CORE_EXERCISE_NAME)47) // Deprecated do not use +#define FIT_CORE_EXERCISE_NAME_ARM_AND_LEG_EXTENSION_ON_KNEES ((FIT_CORE_EXERCISE_NAME)48) +#define FIT_CORE_EXERCISE_NAME_BICYCLE ((FIT_CORE_EXERCISE_NAME)49) +#define FIT_CORE_EXERCISE_NAME_BICEP_CURL_WITH_LEG_EXTENSION ((FIT_CORE_EXERCISE_NAME)50) +#define FIT_CORE_EXERCISE_NAME_CAT_COW ((FIT_CORE_EXERCISE_NAME)51) +#define FIT_CORE_EXERCISE_NAME_CORKSCREW ((FIT_CORE_EXERCISE_NAME)52) +#define FIT_CORE_EXERCISE_NAME_CRISS_CROSS ((FIT_CORE_EXERCISE_NAME)53) +#define FIT_CORE_EXERCISE_NAME_CRISS_CROSS_WITH_BALL ((FIT_CORE_EXERCISE_NAME)54) // Deprecated do not use +#define FIT_CORE_EXERCISE_NAME_DOUBLE_LEG_STRETCH ((FIT_CORE_EXERCISE_NAME)55) +#define FIT_CORE_EXERCISE_NAME_KNEE_FOLDS ((FIT_CORE_EXERCISE_NAME)56) +#define FIT_CORE_EXERCISE_NAME_LOWER_LIFT ((FIT_CORE_EXERCISE_NAME)57) +#define FIT_CORE_EXERCISE_NAME_NECK_PULL ((FIT_CORE_EXERCISE_NAME)58) +#define FIT_CORE_EXERCISE_NAME_PELVIC_CLOCKS ((FIT_CORE_EXERCISE_NAME)59) +#define FIT_CORE_EXERCISE_NAME_ROLL_OVER ((FIT_CORE_EXERCISE_NAME)60) +#define FIT_CORE_EXERCISE_NAME_ROLL_UP ((FIT_CORE_EXERCISE_NAME)61) +#define FIT_CORE_EXERCISE_NAME_ROLLING ((FIT_CORE_EXERCISE_NAME)62) +#define FIT_CORE_EXERCISE_NAME_ROWING_1 ((FIT_CORE_EXERCISE_NAME)63) +#define FIT_CORE_EXERCISE_NAME_ROWING_2 ((FIT_CORE_EXERCISE_NAME)64) +#define FIT_CORE_EXERCISE_NAME_SCISSORS ((FIT_CORE_EXERCISE_NAME)65) +#define FIT_CORE_EXERCISE_NAME_SINGLE_LEG_CIRCLES ((FIT_CORE_EXERCISE_NAME)66) +#define FIT_CORE_EXERCISE_NAME_SINGLE_LEG_STRETCH ((FIT_CORE_EXERCISE_NAME)67) +#define FIT_CORE_EXERCISE_NAME_SNAKE_TWIST_1_AND_2 ((FIT_CORE_EXERCISE_NAME)68) // Deprecated do not use +#define FIT_CORE_EXERCISE_NAME_SWAN ((FIT_CORE_EXERCISE_NAME)69) +#define FIT_CORE_EXERCISE_NAME_SWIMMING ((FIT_CORE_EXERCISE_NAME)70) +#define FIT_CORE_EXERCISE_NAME_TEASER ((FIT_CORE_EXERCISE_NAME)71) +#define FIT_CORE_EXERCISE_NAME_THE_HUNDRED ((FIT_CORE_EXERCISE_NAME)72) +#define FIT_CORE_EXERCISE_NAME_COUNT 73 + +typedef FIT_UINT16 FIT_CRUNCH_EXERCISE_NAME; +#define FIT_CRUNCH_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CRUNCH_EXERCISE_NAME_BICYCLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)0) +#define FIT_CRUNCH_EXERCISE_NAME_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)1) +#define FIT_CRUNCH_EXERCISE_NAME_CIRCULAR_ARM_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)2) +#define FIT_CRUNCH_EXERCISE_NAME_CROSSED_ARMS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)3) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CROSSED_ARMS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)4) +#define FIT_CRUNCH_EXERCISE_NAME_CROSS_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)5) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CROSS_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)6) +#define FIT_CRUNCH_EXERCISE_NAME_CRUNCH_CHOP ((FIT_CRUNCH_EXERCISE_NAME)7) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CRUNCH_CHOP ((FIT_CRUNCH_EXERCISE_NAME)8) +#define FIT_CRUNCH_EXERCISE_NAME_DOUBLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)9) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_DOUBLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)10) +#define FIT_CRUNCH_EXERCISE_NAME_ELBOW_TO_KNEE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)11) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_ELBOW_TO_KNEE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)12) +#define FIT_CRUNCH_EXERCISE_NAME_FLUTTER_KICKS ((FIT_CRUNCH_EXERCISE_NAME)13) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_FLUTTER_KICKS ((FIT_CRUNCH_EXERCISE_NAME)14) +#define FIT_CRUNCH_EXERCISE_NAME_FOAM_ROLLER_REVERSE_CRUNCH_ON_BENCH ((FIT_CRUNCH_EXERCISE_NAME)15) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_FOAM_ROLLER_REVERSE_CRUNCH_ON_BENCH ((FIT_CRUNCH_EXERCISE_NAME)16) +#define FIT_CRUNCH_EXERCISE_NAME_FOAM_ROLLER_REVERSE_CRUNCH_WITH_DUMBBELL ((FIT_CRUNCH_EXERCISE_NAME)17) +#define FIT_CRUNCH_EXERCISE_NAME_FOAM_ROLLER_REVERSE_CRUNCH_WITH_MEDICINE_BALL ((FIT_CRUNCH_EXERCISE_NAME)18) +#define FIT_CRUNCH_EXERCISE_NAME_FROG_PRESS ((FIT_CRUNCH_EXERCISE_NAME)19) +#define FIT_CRUNCH_EXERCISE_NAME_HANGING_KNEE_RAISE_OBLIQUE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)20) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_HANGING_KNEE_RAISE_OBLIQUE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)21) +#define FIT_CRUNCH_EXERCISE_NAME_HIP_CROSSOVER ((FIT_CRUNCH_EXERCISE_NAME)22) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_HIP_CROSSOVER ((FIT_CRUNCH_EXERCISE_NAME)23) +#define FIT_CRUNCH_EXERCISE_NAME_HOLLOW_ROCK ((FIT_CRUNCH_EXERCISE_NAME)24) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_HOLLOW_ROCK ((FIT_CRUNCH_EXERCISE_NAME)25) +#define FIT_CRUNCH_EXERCISE_NAME_INCLINE_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)26) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_INCLINE_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)27) +#define FIT_CRUNCH_EXERCISE_NAME_KNEELING_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)28) +#define FIT_CRUNCH_EXERCISE_NAME_KNEELING_CROSS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)29) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_KNEELING_CROSS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)30) +#define FIT_CRUNCH_EXERCISE_NAME_KNEELING_OBLIQUE_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)31) +#define FIT_CRUNCH_EXERCISE_NAME_KNEES_TO_ELBOW ((FIT_CRUNCH_EXERCISE_NAME)32) +#define FIT_CRUNCH_EXERCISE_NAME_LEG_EXTENSIONS ((FIT_CRUNCH_EXERCISE_NAME)33) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_LEG_EXTENSIONS ((FIT_CRUNCH_EXERCISE_NAME)34) +#define FIT_CRUNCH_EXERCISE_NAME_LEG_LEVERS ((FIT_CRUNCH_EXERCISE_NAME)35) +#define FIT_CRUNCH_EXERCISE_NAME_MCGILL_CURL_UP ((FIT_CRUNCH_EXERCISE_NAME)36) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_MCGILL_CURL_UP ((FIT_CRUNCH_EXERCISE_NAME)37) +#define FIT_CRUNCH_EXERCISE_NAME_MODIFIED_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)38) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_MODIFIED_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)39) +#define FIT_CRUNCH_EXERCISE_NAME_PILATES_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)40) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_PILATES_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)41) +#define FIT_CRUNCH_EXERCISE_NAME_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)42) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)43) +#define FIT_CRUNCH_EXERCISE_NAME_RAISED_LEGS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)44) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_RAISED_LEGS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)45) +#define FIT_CRUNCH_EXERCISE_NAME_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)46) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)47) +#define FIT_CRUNCH_EXERCISE_NAME_REVERSE_CRUNCH_ON_A_BENCH ((FIT_CRUNCH_EXERCISE_NAME)48) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_REVERSE_CRUNCH_ON_A_BENCH ((FIT_CRUNCH_EXERCISE_NAME)49) +#define FIT_CRUNCH_EXERCISE_NAME_REVERSE_CURL_AND_LIFT ((FIT_CRUNCH_EXERCISE_NAME)50) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_REVERSE_CURL_AND_LIFT ((FIT_CRUNCH_EXERCISE_NAME)51) +#define FIT_CRUNCH_EXERCISE_NAME_ROTATIONAL_LIFT ((FIT_CRUNCH_EXERCISE_NAME)52) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_ROTATIONAL_LIFT ((FIT_CRUNCH_EXERCISE_NAME)53) +#define FIT_CRUNCH_EXERCISE_NAME_SEATED_ALTERNATING_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)54) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SEATED_ALTERNATING_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)55) +#define FIT_CRUNCH_EXERCISE_NAME_SEATED_LEG_U ((FIT_CRUNCH_EXERCISE_NAME)56) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SEATED_LEG_U ((FIT_CRUNCH_EXERCISE_NAME)57) +#define FIT_CRUNCH_EXERCISE_NAME_SIDE_TO_SIDE_CRUNCH_AND_WEAVE ((FIT_CRUNCH_EXERCISE_NAME)58) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SIDE_TO_SIDE_CRUNCH_AND_WEAVE ((FIT_CRUNCH_EXERCISE_NAME)59) +#define FIT_CRUNCH_EXERCISE_NAME_SINGLE_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)60) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)61) +#define FIT_CRUNCH_EXERCISE_NAME_SKATER_CRUNCH_CROSS ((FIT_CRUNCH_EXERCISE_NAME)62) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SKATER_CRUNCH_CROSS ((FIT_CRUNCH_EXERCISE_NAME)63) +#define FIT_CRUNCH_EXERCISE_NAME_STANDING_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)64) +#define FIT_CRUNCH_EXERCISE_NAME_STANDING_SIDE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)65) +#define FIT_CRUNCH_EXERCISE_NAME_STEP_CLIMB ((FIT_CRUNCH_EXERCISE_NAME)66) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_STEP_CLIMB ((FIT_CRUNCH_EXERCISE_NAME)67) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)68) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)69) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)70) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_RUSSIAN_TWIST ((FIT_CRUNCH_EXERCISE_NAME)71) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_RUSSIAN_TWIST ((FIT_CRUNCH_EXERCISE_NAME)72) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_SIDE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)73) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_SIDE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)74) +#define FIT_CRUNCH_EXERCISE_NAME_THORACIC_CRUNCHES_ON_FOAM_ROLLER ((FIT_CRUNCH_EXERCISE_NAME)75) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_THORACIC_CRUNCHES_ON_FOAM_ROLLER ((FIT_CRUNCH_EXERCISE_NAME)76) +#define FIT_CRUNCH_EXERCISE_NAME_TRICEPS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)77) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_BICYCLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)78) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)79) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)80) +#define FIT_CRUNCH_EXERCISE_NAME_TOES_TO_BAR ((FIT_CRUNCH_EXERCISE_NAME)81) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_TOES_TO_BAR ((FIT_CRUNCH_EXERCISE_NAME)82) +#define FIT_CRUNCH_EXERCISE_NAME_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)83) +#define FIT_CRUNCH_EXERCISE_NAME_STRAIGHT_LEG_CRUNCH_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)84) +#define FIT_CRUNCH_EXERCISE_NAME_COUNT 85 + +typedef FIT_UINT16 FIT_CURL_EXERCISE_NAME; +#define FIT_CURL_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CURL_EXERCISE_NAME_ALTERNATING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)0) +#define FIT_CURL_EXERCISE_NAME_ALTERNATING_DUMBBELL_BICEPS_CURL_ON_SWISS_BALL ((FIT_CURL_EXERCISE_NAME)1) +#define FIT_CURL_EXERCISE_NAME_ALTERNATING_INCLINE_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)2) +#define FIT_CURL_EXERCISE_NAME_BARBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)3) +#define FIT_CURL_EXERCISE_NAME_BARBELL_REVERSE_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)4) +#define FIT_CURL_EXERCISE_NAME_BARBELL_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)5) +#define FIT_CURL_EXERCISE_NAME_BEHIND_THE_BACK_BARBELL_REVERSE_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)6) +#define FIT_CURL_EXERCISE_NAME_BEHIND_THE_BACK_ONE_ARM_CABLE_CURL ((FIT_CURL_EXERCISE_NAME)7) +#define FIT_CURL_EXERCISE_NAME_CABLE_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)8) +#define FIT_CURL_EXERCISE_NAME_CABLE_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)9) +#define FIT_CURL_EXERCISE_NAME_CHEATING_BARBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)10) +#define FIT_CURL_EXERCISE_NAME_CLOSE_GRIP_EZ_BAR_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)11) +#define FIT_CURL_EXERCISE_NAME_CROSS_BODY_DUMBBELL_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)12) +#define FIT_CURL_EXERCISE_NAME_DEAD_HANG_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)13) +#define FIT_CURL_EXERCISE_NAME_DECLINE_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)14) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_BICEPS_CURL_WITH_STATIC_HOLD ((FIT_CURL_EXERCISE_NAME)15) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)16) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_REVERSE_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)17) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)18) +#define FIT_CURL_EXERCISE_NAME_EZ_BAR_PREACHER_CURL ((FIT_CURL_EXERCISE_NAME)19) +#define FIT_CURL_EXERCISE_NAME_FORWARD_BEND_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)20) +#define FIT_CURL_EXERCISE_NAME_HAMMER_CURL_TO_PRESS ((FIT_CURL_EXERCISE_NAME)21) +#define FIT_CURL_EXERCISE_NAME_INCLINE_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)22) +#define FIT_CURL_EXERCISE_NAME_INCLINE_OFFSET_THUMB_DUMBBELL_CURL ((FIT_CURL_EXERCISE_NAME)23) +#define FIT_CURL_EXERCISE_NAME_KETTLEBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)24) +#define FIT_CURL_EXERCISE_NAME_LYING_CONCENTRATION_CABLE_CURL ((FIT_CURL_EXERCISE_NAME)25) +#define FIT_CURL_EXERCISE_NAME_ONE_ARM_PREACHER_CURL ((FIT_CURL_EXERCISE_NAME)26) +#define FIT_CURL_EXERCISE_NAME_PLATE_PINCH_CURL ((FIT_CURL_EXERCISE_NAME)27) +#define FIT_CURL_EXERCISE_NAME_PREACHER_CURL_WITH_CABLE ((FIT_CURL_EXERCISE_NAME)28) +#define FIT_CURL_EXERCISE_NAME_REVERSE_EZ_BAR_CURL ((FIT_CURL_EXERCISE_NAME)29) +#define FIT_CURL_EXERCISE_NAME_REVERSE_GRIP_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)30) +#define FIT_CURL_EXERCISE_NAME_REVERSE_GRIP_BARBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)31) +#define FIT_CURL_EXERCISE_NAME_SEATED_ALTERNATING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)32) +#define FIT_CURL_EXERCISE_NAME_SEATED_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)33) +#define FIT_CURL_EXERCISE_NAME_SEATED_REVERSE_DUMBBELL_CURL ((FIT_CURL_EXERCISE_NAME)34) +#define FIT_CURL_EXERCISE_NAME_SPLIT_STANCE_OFFSET_PINKY_DUMBBELL_CURL ((FIT_CURL_EXERCISE_NAME)35) +#define FIT_CURL_EXERCISE_NAME_STANDING_ALTERNATING_DUMBBELL_CURLS ((FIT_CURL_EXERCISE_NAME)36) +#define FIT_CURL_EXERCISE_NAME_STANDING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)37) +#define FIT_CURL_EXERCISE_NAME_STANDING_EZ_BAR_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)38) +#define FIT_CURL_EXERCISE_NAME_STATIC_CURL ((FIT_CURL_EXERCISE_NAME)39) +#define FIT_CURL_EXERCISE_NAME_SWISS_BALL_DUMBBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_CURL_EXERCISE_NAME)40) +#define FIT_CURL_EXERCISE_NAME_SWISS_BALL_EZ_BAR_PREACHER_CURL ((FIT_CURL_EXERCISE_NAME)41) +#define FIT_CURL_EXERCISE_NAME_TWISTING_STANDING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)42) +#define FIT_CURL_EXERCISE_NAME_WIDE_GRIP_EZ_BAR_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)43) +#define FIT_CURL_EXERCISE_NAME_COUNT 44 + +typedef FIT_UINT16 FIT_DEADLIFT_EXERCISE_NAME; +#define FIT_DEADLIFT_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_DEADLIFT_EXERCISE_NAME_BARBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)0) +#define FIT_DEADLIFT_EXERCISE_NAME_BARBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)1) +#define FIT_DEADLIFT_EXERCISE_NAME_DUMBBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)2) +#define FIT_DEADLIFT_EXERCISE_NAME_DUMBBELL_SINGLE_LEG_DEADLIFT_TO_ROW ((FIT_DEADLIFT_EXERCISE_NAME)3) +#define FIT_DEADLIFT_EXERCISE_NAME_DUMBBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)4) +#define FIT_DEADLIFT_EXERCISE_NAME_KETTLEBELL_FLOOR_TO_SHELF ((FIT_DEADLIFT_EXERCISE_NAME)5) +#define FIT_DEADLIFT_EXERCISE_NAME_ONE_ARM_ONE_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)6) +#define FIT_DEADLIFT_EXERCISE_NAME_RACK_PULL ((FIT_DEADLIFT_EXERCISE_NAME)7) +#define FIT_DEADLIFT_EXERCISE_NAME_ROTATIONAL_DUMBBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)8) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_ARM_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)9) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_BARBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)10) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_BARBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)11) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_DEADLIFT_WITH_BARBELL ((FIT_DEADLIFT_EXERCISE_NAME)12) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_RDL_CIRCUIT ((FIT_DEADLIFT_EXERCISE_NAME)13) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_ROMANIAN_DEADLIFT_WITH_DUMBBELL ((FIT_DEADLIFT_EXERCISE_NAME)14) +#define FIT_DEADLIFT_EXERCISE_NAME_SUMO_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)15) +#define FIT_DEADLIFT_EXERCISE_NAME_SUMO_DEADLIFT_HIGH_PULL ((FIT_DEADLIFT_EXERCISE_NAME)16) +#define FIT_DEADLIFT_EXERCISE_NAME_TRAP_BAR_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)17) +#define FIT_DEADLIFT_EXERCISE_NAME_WIDE_GRIP_BARBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)18) +#define FIT_DEADLIFT_EXERCISE_NAME_COUNT 19 + +typedef FIT_UINT16 FIT_FLYE_EXERCISE_NAME; +#define FIT_FLYE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_FLYE_EXERCISE_NAME_CABLE_CROSSOVER ((FIT_FLYE_EXERCISE_NAME)0) +#define FIT_FLYE_EXERCISE_NAME_DECLINE_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)1) +#define FIT_FLYE_EXERCISE_NAME_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)2) +#define FIT_FLYE_EXERCISE_NAME_INCLINE_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)3) +#define FIT_FLYE_EXERCISE_NAME_KETTLEBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)4) +#define FIT_FLYE_EXERCISE_NAME_KNEELING_REAR_FLYE ((FIT_FLYE_EXERCISE_NAME)5) +#define FIT_FLYE_EXERCISE_NAME_SINGLE_ARM_STANDING_CABLE_REVERSE_FLYE ((FIT_FLYE_EXERCISE_NAME)6) +#define FIT_FLYE_EXERCISE_NAME_SWISS_BALL_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)7) +#define FIT_FLYE_EXERCISE_NAME_ARM_ROTATIONS ((FIT_FLYE_EXERCISE_NAME)8) +#define FIT_FLYE_EXERCISE_NAME_HUG_A_TREE ((FIT_FLYE_EXERCISE_NAME)9) +#define FIT_FLYE_EXERCISE_NAME_COUNT 10 + +typedef FIT_UINT16 FIT_HIP_RAISE_EXERCISE_NAME; +#define FIT_HIP_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HIP_RAISE_EXERCISE_NAME_BARBELL_HIP_THRUST_ON_FLOOR ((FIT_HIP_RAISE_EXERCISE_NAME)0) +#define FIT_HIP_RAISE_EXERCISE_NAME_BARBELL_HIP_THRUST_WITH_BENCH ((FIT_HIP_RAISE_EXERCISE_NAME)1) +#define FIT_HIP_RAISE_EXERCISE_NAME_BENT_KNEE_SWISS_BALL_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)2) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_BENT_KNEE_SWISS_BALL_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)3) +#define FIT_HIP_RAISE_EXERCISE_NAME_BRIDGE_WITH_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)4) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_BRIDGE_WITH_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)5) +#define FIT_HIP_RAISE_EXERCISE_NAME_CLAM_BRIDGE ((FIT_HIP_RAISE_EXERCISE_NAME)6) +#define FIT_HIP_RAISE_EXERCISE_NAME_FRONT_KICK_TABLETOP ((FIT_HIP_RAISE_EXERCISE_NAME)7) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_FRONT_KICK_TABLETOP ((FIT_HIP_RAISE_EXERCISE_NAME)8) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_EXTENSION_AND_CROSS ((FIT_HIP_RAISE_EXERCISE_NAME)9) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_EXTENSION_AND_CROSS ((FIT_HIP_RAISE_EXERCISE_NAME)10) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)11) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)12) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_FEET_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)13) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_FEET_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)14) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)15) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)16) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_HEAD_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)17) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_HEAD_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)18) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_KNEE_SQUEEZE ((FIT_HIP_RAISE_EXERCISE_NAME)19) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_KNEE_SQUEEZE ((FIT_HIP_RAISE_EXERCISE_NAME)20) +#define FIT_HIP_RAISE_EXERCISE_NAME_INCLINE_REAR_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)21) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_INCLINE_REAR_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)22) +#define FIT_HIP_RAISE_EXERCISE_NAME_KETTLEBELL_SWING ((FIT_HIP_RAISE_EXERCISE_NAME)23) +#define FIT_HIP_RAISE_EXERCISE_NAME_MARCHING_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)24) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_MARCHING_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)25) +#define FIT_HIP_RAISE_EXERCISE_NAME_MARCHING_HIP_RAISE_WITH_FEET_ON_A_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)26) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_MARCHING_HIP_RAISE_WITH_FEET_ON_A_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)27) +#define FIT_HIP_RAISE_EXERCISE_NAME_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)28) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)29) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)30) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)31) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BENCH ((FIT_HIP_RAISE_EXERCISE_NAME)32) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BENCH ((FIT_HIP_RAISE_EXERCISE_NAME)33) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)34) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)35) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_FOAM_ROLLER ((FIT_HIP_RAISE_EXERCISE_NAME)36) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_FOAM_ROLLER ((FIT_HIP_RAISE_EXERCISE_NAME)37) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_MEDICINE_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)38) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_MEDICINE_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)39) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)40) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)41) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_CLAM_BRIDGE ((FIT_HIP_RAISE_EXERCISE_NAME)42) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_SWISS_BALL_HIP_RAISE_AND_LEG_CURL ((FIT_HIP_RAISE_EXERCISE_NAME)43) +#define FIT_HIP_RAISE_EXERCISE_NAME_CLAMS ((FIT_HIP_RAISE_EXERCISE_NAME)44) +#define FIT_HIP_RAISE_EXERCISE_NAME_INNER_THIGH_CIRCLES ((FIT_HIP_RAISE_EXERCISE_NAME)45) // Deprecated do not use +#define FIT_HIP_RAISE_EXERCISE_NAME_INNER_THIGH_SIDE_LIFT ((FIT_HIP_RAISE_EXERCISE_NAME)46) // Deprecated do not use +#define FIT_HIP_RAISE_EXERCISE_NAME_LEG_CIRCLES ((FIT_HIP_RAISE_EXERCISE_NAME)47) +#define FIT_HIP_RAISE_EXERCISE_NAME_LEG_LIFT ((FIT_HIP_RAISE_EXERCISE_NAME)48) +#define FIT_HIP_RAISE_EXERCISE_NAME_LEG_LIFT_IN_EXTERNAL_ROTATION ((FIT_HIP_RAISE_EXERCISE_NAME)49) +#define FIT_HIP_RAISE_EXERCISE_NAME_COUNT 50 + +typedef FIT_UINT16 FIT_HIP_STABILITY_EXERCISE_NAME; +#define FIT_HIP_STABILITY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HIP_STABILITY_EXERCISE_NAME_BAND_SIDE_LYING_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)0) +#define FIT_HIP_STABILITY_EXERCISE_NAME_DEAD_BUG ((FIT_HIP_STABILITY_EXERCISE_NAME)1) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_DEAD_BUG ((FIT_HIP_STABILITY_EXERCISE_NAME)2) +#define FIT_HIP_STABILITY_EXERCISE_NAME_EXTERNAL_HIP_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)3) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_EXTERNAL_HIP_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)4) +#define FIT_HIP_STABILITY_EXERCISE_NAME_FIRE_HYDRANT_KICKS ((FIT_HIP_STABILITY_EXERCISE_NAME)5) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_FIRE_HYDRANT_KICKS ((FIT_HIP_STABILITY_EXERCISE_NAME)6) +#define FIT_HIP_STABILITY_EXERCISE_NAME_HIP_CIRCLES ((FIT_HIP_STABILITY_EXERCISE_NAME)7) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_HIP_CIRCLES ((FIT_HIP_STABILITY_EXERCISE_NAME)8) +#define FIT_HIP_STABILITY_EXERCISE_NAME_INNER_THIGH_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)9) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_INNER_THIGH_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)10) +#define FIT_HIP_STABILITY_EXERCISE_NAME_LATERAL_WALKS_WITH_BAND_AT_ANKLES ((FIT_HIP_STABILITY_EXERCISE_NAME)11) +#define FIT_HIP_STABILITY_EXERCISE_NAME_PRETZEL_SIDE_KICK ((FIT_HIP_STABILITY_EXERCISE_NAME)12) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_PRETZEL_SIDE_KICK ((FIT_HIP_STABILITY_EXERCISE_NAME)13) +#define FIT_HIP_STABILITY_EXERCISE_NAME_PRONE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)14) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_PRONE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)15) +#define FIT_HIP_STABILITY_EXERCISE_NAME_QUADRUPED ((FIT_HIP_STABILITY_EXERCISE_NAME)16) +#define FIT_HIP_STABILITY_EXERCISE_NAME_QUADRUPED_HIP_EXTENSION ((FIT_HIP_STABILITY_EXERCISE_NAME)17) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_QUADRUPED_HIP_EXTENSION ((FIT_HIP_STABILITY_EXERCISE_NAME)18) +#define FIT_HIP_STABILITY_EXERCISE_NAME_QUADRUPED_WITH_LEG_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)19) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_QUADRUPED_WITH_LEG_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)20) +#define FIT_HIP_STABILITY_EXERCISE_NAME_SIDE_LYING_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)21) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_SIDE_LYING_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)22) +#define FIT_HIP_STABILITY_EXERCISE_NAME_SLIDING_HIP_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)23) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_SLIDING_HIP_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)24) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)25) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_STANDING_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)26) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_CABLE_HIP_ABDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)27) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_HIP_ABDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)28) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_STANDING_HIP_ABDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)29) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_REAR_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)30) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_STANDING_REAR_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)31) +#define FIT_HIP_STABILITY_EXERCISE_NAME_SUPINE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)32) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_SUPINE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)33) +#define FIT_HIP_STABILITY_EXERCISE_NAME_COUNT 34 + +typedef FIT_UINT16 FIT_HIP_SWING_EXERCISE_NAME; +#define FIT_HIP_SWING_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HIP_SWING_EXERCISE_NAME_SINGLE_ARM_KETTLEBELL_SWING ((FIT_HIP_SWING_EXERCISE_NAME)0) +#define FIT_HIP_SWING_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_SWING ((FIT_HIP_SWING_EXERCISE_NAME)1) +#define FIT_HIP_SWING_EXERCISE_NAME_STEP_OUT_SWING ((FIT_HIP_SWING_EXERCISE_NAME)2) +#define FIT_HIP_SWING_EXERCISE_NAME_COUNT 3 + +typedef FIT_UINT16 FIT_HYPEREXTENSION_EXERCISE_NAME; +#define FIT_HYPEREXTENSION_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HYPEREXTENSION_EXERCISE_NAME_BACK_EXTENSION_WITH_OPPOSITE_ARM_AND_LEG_REACH ((FIT_HYPEREXTENSION_EXERCISE_NAME)0) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_BACK_EXTENSION_WITH_OPPOSITE_ARM_AND_LEG_REACH ((FIT_HYPEREXTENSION_EXERCISE_NAME)1) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_BASE_ROTATIONS ((FIT_HYPEREXTENSION_EXERCISE_NAME)2) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_BASE_ROTATIONS ((FIT_HYPEREXTENSION_EXERCISE_NAME)3) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_BENT_KNEE_REVERSE_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)4) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_BENT_KNEE_REVERSE_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)5) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_HOLLOW_HOLD_AND_ROLL ((FIT_HYPEREXTENSION_EXERCISE_NAME)6) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_HOLLOW_HOLD_AND_ROLL ((FIT_HYPEREXTENSION_EXERCISE_NAME)7) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_KICKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)8) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_KICKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)9) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_KNEE_RAISES ((FIT_HYPEREXTENSION_EXERCISE_NAME)10) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_KNEE_RAISES ((FIT_HYPEREXTENSION_EXERCISE_NAME)11) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_KNEELING_SUPERMAN ((FIT_HYPEREXTENSION_EXERCISE_NAME)12) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_KNEELING_SUPERMAN ((FIT_HYPEREXTENSION_EXERCISE_NAME)13) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_LAT_PULL_DOWN_WITH_ROW ((FIT_HYPEREXTENSION_EXERCISE_NAME)14) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_MEDICINE_BALL_DEADLIFT_TO_REACH ((FIT_HYPEREXTENSION_EXERCISE_NAME)15) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_ONE_ARM_ONE_LEG_ROW ((FIT_HYPEREXTENSION_EXERCISE_NAME)16) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_ONE_ARM_ROW_WITH_BAND ((FIT_HYPEREXTENSION_EXERCISE_NAME)17) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_OVERHEAD_LUNGE_WITH_MEDICINE_BALL ((FIT_HYPEREXTENSION_EXERCISE_NAME)18) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_PLANK_KNEE_TUCKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)19) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_PLANK_KNEE_TUCKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)20) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SIDE_STEP ((FIT_HYPEREXTENSION_EXERCISE_NAME)21) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SIDE_STEP ((FIT_HYPEREXTENSION_EXERCISE_NAME)22) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SINGLE_LEG_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)23) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)24) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SPINE_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)25) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SPINE_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)26) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_STATIC_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)27) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_STATIC_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)28) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SUPERMAN_FROM_FLOOR ((FIT_HYPEREXTENSION_EXERCISE_NAME)29) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SUPERMAN_FROM_FLOOR ((FIT_HYPEREXTENSION_EXERCISE_NAME)30) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SWISS_BALL_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)31) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SWISS_BALL_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)32) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SWISS_BALL_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)33) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SWISS_BALL_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)34) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SWISS_BALL_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_HYPEREXTENSION_EXERCISE_NAME)35) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SWISS_BALL_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_HYPEREXTENSION_EXERCISE_NAME)36) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SUPERMAN_ON_SWISS_BALL ((FIT_HYPEREXTENSION_EXERCISE_NAME)37) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_COBRA ((FIT_HYPEREXTENSION_EXERCISE_NAME)38) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SUPINE_FLOOR_BARRE ((FIT_HYPEREXTENSION_EXERCISE_NAME)39) // Deprecated do not use +#define FIT_HYPEREXTENSION_EXERCISE_NAME_COUNT 40 + +typedef FIT_UINT16 FIT_LATERAL_RAISE_EXERCISE_NAME; +#define FIT_LATERAL_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LATERAL_RAISE_EXERCISE_NAME_45_DEGREE_CABLE_EXTERNAL_ROTATION ((FIT_LATERAL_RAISE_EXERCISE_NAME)0) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ALTERNATING_LATERAL_RAISE_WITH_STATIC_HOLD ((FIT_LATERAL_RAISE_EXERCISE_NAME)1) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_BAR_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)2) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_BENT_OVER_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)3) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_CABLE_DIAGONAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)4) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_CABLE_FRONT_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)5) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_CALORIE_ROW ((FIT_LATERAL_RAISE_EXERCISE_NAME)6) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_COMBO_SHOULDER_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)7) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_DUMBBELL_DIAGONAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)8) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_DUMBBELL_V_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)9) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_FRONT_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)10) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_LEANING_DUMBBELL_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)11) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_LYING_DUMBBELL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)12) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)13) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ONE_ARM_CABLE_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)14) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_OVERHAND_GRIP_REAR_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)15) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_PLATE_RAISES ((FIT_LATERAL_RAISE_EXERCISE_NAME)16) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_RING_DIP ((FIT_LATERAL_RAISE_EXERCISE_NAME)17) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_RING_DIP ((FIT_LATERAL_RAISE_EXERCISE_NAME)18) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_RING_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)19) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_RING_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)20) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ROPE_CLIMB ((FIT_LATERAL_RAISE_EXERCISE_NAME)21) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_ROPE_CLIMB ((FIT_LATERAL_RAISE_EXERCISE_NAME)22) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SCAPTION ((FIT_LATERAL_RAISE_EXERCISE_NAME)23) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SEATED_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)24) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SEATED_REAR_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)25) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SIDE_LYING_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)26) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_STANDING_LIFT ((FIT_LATERAL_RAISE_EXERCISE_NAME)27) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SUSPENDED_ROW ((FIT_LATERAL_RAISE_EXERCISE_NAME)28) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_UNDERHAND_GRIP_REAR_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)29) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WALL_SLIDE ((FIT_LATERAL_RAISE_EXERCISE_NAME)30) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_WALL_SLIDE ((FIT_LATERAL_RAISE_EXERCISE_NAME)31) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ARM_CIRCLES ((FIT_LATERAL_RAISE_EXERCISE_NAME)32) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SHAVING_THE_HEAD ((FIT_LATERAL_RAISE_EXERCISE_NAME)33) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_COUNT 34 + +typedef FIT_UINT16 FIT_LEG_CURL_EXERCISE_NAME; +#define FIT_LEG_CURL_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LEG_CURL_EXERCISE_NAME_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)0) +#define FIT_LEG_CURL_EXERCISE_NAME_WEIGHTED_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)1) +#define FIT_LEG_CURL_EXERCISE_NAME_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)2) +#define FIT_LEG_CURL_EXERCISE_NAME_SEATED_BARBELL_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)3) +#define FIT_LEG_CURL_EXERCISE_NAME_SINGLE_LEG_BARBELL_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)4) +#define FIT_LEG_CURL_EXERCISE_NAME_SINGLE_LEG_SLIDING_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)5) +#define FIT_LEG_CURL_EXERCISE_NAME_SLIDING_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)6) +#define FIT_LEG_CURL_EXERCISE_NAME_SPLIT_BARBELL_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)7) +#define FIT_LEG_CURL_EXERCISE_NAME_SPLIT_STANCE_EXTENSION ((FIT_LEG_CURL_EXERCISE_NAME)8) +#define FIT_LEG_CURL_EXERCISE_NAME_STAGGERED_STANCE_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)9) +#define FIT_LEG_CURL_EXERCISE_NAME_SWISS_BALL_HIP_RAISE_AND_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)10) +#define FIT_LEG_CURL_EXERCISE_NAME_ZERCHER_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)11) +#define FIT_LEG_CURL_EXERCISE_NAME_COUNT 12 + +typedef FIT_UINT16 FIT_LEG_RAISE_EXERCISE_NAME; +#define FIT_LEG_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LEG_RAISE_EXERCISE_NAME_HANGING_KNEE_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)0) +#define FIT_LEG_RAISE_EXERCISE_NAME_HANGING_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)1) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_HANGING_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)2) +#define FIT_LEG_RAISE_EXERCISE_NAME_HANGING_SINGLE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)3) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_HANGING_SINGLE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)4) +#define FIT_LEG_RAISE_EXERCISE_NAME_KETTLEBELL_LEG_RAISES ((FIT_LEG_RAISE_EXERCISE_NAME)5) +#define FIT_LEG_RAISE_EXERCISE_NAME_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)6) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)7) +#define FIT_LEG_RAISE_EXERCISE_NAME_LYING_STRAIGHT_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)8) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_LYING_STRAIGHT_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)9) +#define FIT_LEG_RAISE_EXERCISE_NAME_MEDICINE_BALL_LEG_DROPS ((FIT_LEG_RAISE_EXERCISE_NAME)10) +#define FIT_LEG_RAISE_EXERCISE_NAME_QUADRUPED_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)11) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_QUADRUPED_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)12) +#define FIT_LEG_RAISE_EXERCISE_NAME_REVERSE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)13) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_REVERSE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)14) +#define FIT_LEG_RAISE_EXERCISE_NAME_REVERSE_LEG_RAISE_ON_SWISS_BALL ((FIT_LEG_RAISE_EXERCISE_NAME)15) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_REVERSE_LEG_RAISE_ON_SWISS_BALL ((FIT_LEG_RAISE_EXERCISE_NAME)16) +#define FIT_LEG_RAISE_EXERCISE_NAME_SINGLE_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)17) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)18) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_HANGING_KNEE_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)19) +#define FIT_LEG_RAISE_EXERCISE_NAME_LATERAL_STEPOVER ((FIT_LEG_RAISE_EXERCISE_NAME)20) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_LATERAL_STEPOVER ((FIT_LEG_RAISE_EXERCISE_NAME)21) +#define FIT_LEG_RAISE_EXERCISE_NAME_COUNT 22 + +typedef FIT_UINT16 FIT_LUNGE_EXERCISE_NAME; +#define FIT_LUNGE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_LUNGE ((FIT_LUNGE_EXERCISE_NAME)0) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_MATRIX ((FIT_LUNGE_EXERCISE_NAME)1) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_LUNGE_MATRIX ((FIT_LUNGE_EXERCISE_NAME)2) +#define FIT_LUNGE_EXERCISE_NAME_ALTERNATING_BARBELL_FORWARD_LUNGE ((FIT_LUNGE_EXERCISE_NAME)3) +#define FIT_LUNGE_EXERCISE_NAME_ALTERNATING_DUMBBELL_LUNGE_WITH_REACH ((FIT_LUNGE_EXERCISE_NAME)4) +#define FIT_LUNGE_EXERCISE_NAME_BACK_FOOT_ELEVATED_DUMBBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)5) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)6) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)7) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)8) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_FRONT_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)9) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)10) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_REVERSE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)11) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)12) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)13) +#define FIT_LUNGE_EXERCISE_NAME_CORE_CONTROL_REAR_LUNGE ((FIT_LUNGE_EXERCISE_NAME)14) +#define FIT_LUNGE_EXERCISE_NAME_DIAGONAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)15) +#define FIT_LUNGE_EXERCISE_NAME_DROP_LUNGE ((FIT_LUNGE_EXERCISE_NAME)16) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)17) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)18) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)19) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_DIAGONAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)20) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)21) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_LUNGE_AND_ROTATION ((FIT_LUNGE_EXERCISE_NAME)22) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_OVERHEAD_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)23) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_REVERSE_LUNGE_TO_HIGH_KNEE_AND_PRESS ((FIT_LUNGE_EXERCISE_NAME)24) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)25) +#define FIT_LUNGE_EXERCISE_NAME_ELEVATED_FRONT_FOOT_BARBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)26) +#define FIT_LUNGE_EXERCISE_NAME_FRONT_FOOT_ELEVATED_DUMBBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)27) +#define FIT_LUNGE_EXERCISE_NAME_GUNSLINGER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)28) +#define FIT_LUNGE_EXERCISE_NAME_LAWNMOWER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)29) +#define FIT_LUNGE_EXERCISE_NAME_LOW_LUNGE_WITH_ISOMETRIC_ADDUCTION ((FIT_LUNGE_EXERCISE_NAME)30) +#define FIT_LUNGE_EXERCISE_NAME_LOW_SIDE_TO_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)31) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE ((FIT_LUNGE_EXERCISE_NAME)32) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_LUNGE ((FIT_LUNGE_EXERCISE_NAME)33) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_WITH_ARM_REACH ((FIT_LUNGE_EXERCISE_NAME)34) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_WITH_DIAGONAL_REACH ((FIT_LUNGE_EXERCISE_NAME)35) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_WITH_SIDE_BEND ((FIT_LUNGE_EXERCISE_NAME)36) +#define FIT_LUNGE_EXERCISE_NAME_OFFSET_DUMBBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)37) +#define FIT_LUNGE_EXERCISE_NAME_OFFSET_DUMBBELL_REVERSE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)38) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)39) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_DUMBBELL_REVERSE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)40) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_DUMBBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)41) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_LUNGE_WITH_ROTATION ((FIT_LUNGE_EXERCISE_NAME)42) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_BARBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)43) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)44) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_DUMBBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)45) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_DUMBBELL_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)46) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_DUMBBELL_DIAGONAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)47) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_LUNGE_WITH_REACH_BACK ((FIT_LUNGE_EXERCISE_NAME)48) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_LUNGE_WITH_REACH_BACK ((FIT_LUNGE_EXERCISE_NAME)49) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_LUNGE_WITH_TWIST_AND_OVERHEAD_REACH ((FIT_LUNGE_EXERCISE_NAME)50) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_LUNGE_WITH_TWIST_AND_OVERHEAD_REACH ((FIT_LUNGE_EXERCISE_NAME)51) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_SLIDING_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)52) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_SLIDING_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)53) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_SLIDING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)54) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_SLIDING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)55) +#define FIT_LUNGE_EXERCISE_NAME_RUNNERS_LUNGE_TO_BALANCE ((FIT_LUNGE_EXERCISE_NAME)56) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_RUNNERS_LUNGE_TO_BALANCE ((FIT_LUNGE_EXERCISE_NAME)57) +#define FIT_LUNGE_EXERCISE_NAME_SHIFTING_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)58) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_AND_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)59) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_AND_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)60) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)61) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)62) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_AND_PRESS ((FIT_LUNGE_EXERCISE_NAME)63) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_JUMP_OFF ((FIT_LUNGE_EXERCISE_NAME)64) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_SWEEP ((FIT_LUNGE_EXERCISE_NAME)65) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_LUNGE_SWEEP ((FIT_LUNGE_EXERCISE_NAME)66) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_TO_CROSSOVER_TAP ((FIT_LUNGE_EXERCISE_NAME)67) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_LUNGE_TO_CROSSOVER_TAP ((FIT_LUNGE_EXERCISE_NAME)68) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_TO_SIDE_LUNGE_CHOPS ((FIT_LUNGE_EXERCISE_NAME)69) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_TO_SIDE_LUNGE_CHOPS ((FIT_LUNGE_EXERCISE_NAME)70) +#define FIT_LUNGE_EXERCISE_NAME_SIFF_JUMP_LUNGE ((FIT_LUNGE_EXERCISE_NAME)71) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIFF_JUMP_LUNGE ((FIT_LUNGE_EXERCISE_NAME)72) +#define FIT_LUNGE_EXERCISE_NAME_SINGLE_ARM_REVERSE_LUNGE_AND_PRESS ((FIT_LUNGE_EXERCISE_NAME)73) +#define FIT_LUNGE_EXERCISE_NAME_SLIDING_LATERAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)74) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SLIDING_LATERAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)75) +#define FIT_LUNGE_EXERCISE_NAME_WALKING_BARBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)76) +#define FIT_LUNGE_EXERCISE_NAME_WALKING_DUMBBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)77) +#define FIT_LUNGE_EXERCISE_NAME_WALKING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)78) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_WALKING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)79) +#define FIT_LUNGE_EXERCISE_NAME_WIDE_GRIP_OVERHEAD_BARBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)80) +#define FIT_LUNGE_EXERCISE_NAME_COUNT 81 + +typedef FIT_UINT16 FIT_OLYMPIC_LIFT_EXERCISE_NAME; +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_POWER_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)0) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_SQUAT_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)1) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_POWER_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)2) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_POWER_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)3) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_SQUAT_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)4) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_CLEAN_AND_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)5) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_POWER_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)6) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_PULL ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)7) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HIGH_PULL ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)8) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)9) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_SPLIT_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)10) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)11) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_DUMBBELL_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)12) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_DUMBBELL_HANG_PULL ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)13) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_ONE_HAND_DUMBBELL_SPLIT_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)14) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_PUSH_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)15) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)16) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SINGLE_ARM_HANG_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)17) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SINGLE_ARM_KETTLEBELL_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)18) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SPLIT_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)19) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SQUAT_CLEAN_AND_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)20) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_COUNT 21 + +typedef FIT_UINT16 FIT_PLANK_EXERCISE_NAME; +#define FIT_PLANK_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PLANK_EXERCISE_NAME_45_DEGREE_PLANK ((FIT_PLANK_EXERCISE_NAME)0) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_45_DEGREE_PLANK ((FIT_PLANK_EXERCISE_NAME)1) +#define FIT_PLANK_EXERCISE_NAME_90_DEGREE_STATIC_HOLD ((FIT_PLANK_EXERCISE_NAME)2) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_90_DEGREE_STATIC_HOLD ((FIT_PLANK_EXERCISE_NAME)3) +#define FIT_PLANK_EXERCISE_NAME_BEAR_CRAWL ((FIT_PLANK_EXERCISE_NAME)4) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_BEAR_CRAWL ((FIT_PLANK_EXERCISE_NAME)5) +#define FIT_PLANK_EXERCISE_NAME_CROSS_BODY_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)6) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_CROSS_BODY_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)7) +#define FIT_PLANK_EXERCISE_NAME_ELBOW_PLANK_PIKE_JACKS ((FIT_PLANK_EXERCISE_NAME)8) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ELBOW_PLANK_PIKE_JACKS ((FIT_PLANK_EXERCISE_NAME)9) +#define FIT_PLANK_EXERCISE_NAME_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)10) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)11) +#define FIT_PLANK_EXERCISE_NAME_ELEVATOR_ABS ((FIT_PLANK_EXERCISE_NAME)12) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ELEVATOR_ABS ((FIT_PLANK_EXERCISE_NAME)13) +#define FIT_PLANK_EXERCISE_NAME_EXTENDED_PLANK ((FIT_PLANK_EXERCISE_NAME)14) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_EXTENDED_PLANK ((FIT_PLANK_EXERCISE_NAME)15) +#define FIT_PLANK_EXERCISE_NAME_FULL_PLANK_PASSE_TWIST ((FIT_PLANK_EXERCISE_NAME)16) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_FULL_PLANK_PASSE_TWIST ((FIT_PLANK_EXERCISE_NAME)17) +#define FIT_PLANK_EXERCISE_NAME_INCHING_ELBOW_PLANK ((FIT_PLANK_EXERCISE_NAME)18) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_INCHING_ELBOW_PLANK ((FIT_PLANK_EXERCISE_NAME)19) +#define FIT_PLANK_EXERCISE_NAME_INCHWORM_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)20) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_INCHWORM_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)21) +#define FIT_PLANK_EXERCISE_NAME_KNEELING_PLANK ((FIT_PLANK_EXERCISE_NAME)22) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_KNEELING_PLANK ((FIT_PLANK_EXERCISE_NAME)23) +#define FIT_PLANK_EXERCISE_NAME_KNEELING_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)24) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_KNEELING_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)25) +#define FIT_PLANK_EXERCISE_NAME_LATERAL_ROLL ((FIT_PLANK_EXERCISE_NAME)26) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_LATERAL_ROLL ((FIT_PLANK_EXERCISE_NAME)27) +#define FIT_PLANK_EXERCISE_NAME_LYING_REVERSE_PLANK ((FIT_PLANK_EXERCISE_NAME)28) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_LYING_REVERSE_PLANK ((FIT_PLANK_EXERCISE_NAME)29) +#define FIT_PLANK_EXERCISE_NAME_MEDICINE_BALL_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)30) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MEDICINE_BALL_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)31) +#define FIT_PLANK_EXERCISE_NAME_MODIFIED_MOUNTAIN_CLIMBER_AND_EXTENSION ((FIT_PLANK_EXERCISE_NAME)32) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MODIFIED_MOUNTAIN_CLIMBER_AND_EXTENSION ((FIT_PLANK_EXERCISE_NAME)33) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)34) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)35) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)36) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)37) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_WITH_FEET_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)38) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_WITH_FEET_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)39) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_WITH_HANDS_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)40) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_WITH_HANDS_ON_SWISS_BALL ((FIT_PLANK_EXERCISE_NAME)41) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_WITH_HANDS_ON_SWISS_BALL ((FIT_PLANK_EXERCISE_NAME)42) +#define FIT_PLANK_EXERCISE_NAME_PLANK ((FIT_PLANK_EXERCISE_NAME)43) +#define FIT_PLANK_EXERCISE_NAME_PLANK_JACKS_WITH_FEET_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)44) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_JACKS_WITH_FEET_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)45) +#define FIT_PLANK_EXERCISE_NAME_PLANK_KNEE_TWIST ((FIT_PLANK_EXERCISE_NAME)46) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_KNEE_TWIST ((FIT_PLANK_EXERCISE_NAME)47) +#define FIT_PLANK_EXERCISE_NAME_PLANK_PIKE_JUMPS ((FIT_PLANK_EXERCISE_NAME)48) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_PIKE_JUMPS ((FIT_PLANK_EXERCISE_NAME)49) +#define FIT_PLANK_EXERCISE_NAME_PLANK_PIKES ((FIT_PLANK_EXERCISE_NAME)50) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_PIKES ((FIT_PLANK_EXERCISE_NAME)51) +#define FIT_PLANK_EXERCISE_NAME_PLANK_TO_STAND_UP ((FIT_PLANK_EXERCISE_NAME)52) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_TO_STAND_UP ((FIT_PLANK_EXERCISE_NAME)53) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_ARM_RAISE ((FIT_PLANK_EXERCISE_NAME)54) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_WITH_ARM_RAISE ((FIT_PLANK_EXERCISE_NAME)55) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_KNEE_TO_ELBOW ((FIT_PLANK_EXERCISE_NAME)56) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_WITH_KNEE_TO_ELBOW ((FIT_PLANK_EXERCISE_NAME)57) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_OBLIQUE_CRUNCH ((FIT_PLANK_EXERCISE_NAME)58) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_WITH_OBLIQUE_CRUNCH ((FIT_PLANK_EXERCISE_NAME)59) +#define FIT_PLANK_EXERCISE_NAME_PLYOMETRIC_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)60) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLYOMETRIC_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)61) +#define FIT_PLANK_EXERCISE_NAME_ROLLING_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)62) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ROLLING_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)63) +#define FIT_PLANK_EXERCISE_NAME_SIDE_KICK_PLANK ((FIT_PLANK_EXERCISE_NAME)64) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_KICK_PLANK ((FIT_PLANK_EXERCISE_NAME)65) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)66) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)67) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_AND_ROW ((FIT_PLANK_EXERCISE_NAME)68) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_AND_ROW ((FIT_PLANK_EXERCISE_NAME)69) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_LIFT ((FIT_PLANK_EXERCISE_NAME)70) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_LIFT ((FIT_PLANK_EXERCISE_NAME)71) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_ELBOW_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)72) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_ELBOW_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)73) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)74) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)75) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_KNEE_CIRCLE ((FIT_PLANK_EXERCISE_NAME)76) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_KNEE_CIRCLE ((FIT_PLANK_EXERCISE_NAME)77) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_KNEE_TUCK ((FIT_PLANK_EXERCISE_NAME)78) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_KNEE_TUCK ((FIT_PLANK_EXERCISE_NAME)79) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)80) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)81) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_REACH_UNDER ((FIT_PLANK_EXERCISE_NAME)82) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_REACH_UNDER ((FIT_PLANK_EXERCISE_NAME)83) +#define FIT_PLANK_EXERCISE_NAME_SINGLE_LEG_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)84) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)85) +#define FIT_PLANK_EXERCISE_NAME_SINGLE_LEG_FLEX_AND_EXTEND ((FIT_PLANK_EXERCISE_NAME)86) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_FLEX_AND_EXTEND ((FIT_PLANK_EXERCISE_NAME)87) +#define FIT_PLANK_EXERCISE_NAME_SINGLE_LEG_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)88) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)89) +#define FIT_PLANK_EXERCISE_NAME_SPIDERMAN_PLANK ((FIT_PLANK_EXERCISE_NAME)90) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SPIDERMAN_PLANK ((FIT_PLANK_EXERCISE_NAME)91) +#define FIT_PLANK_EXERCISE_NAME_STRAIGHT_ARM_PLANK ((FIT_PLANK_EXERCISE_NAME)92) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_STRAIGHT_ARM_PLANK ((FIT_PLANK_EXERCISE_NAME)93) +#define FIT_PLANK_EXERCISE_NAME_STRAIGHT_ARM_PLANK_WITH_SHOULDER_TOUCH ((FIT_PLANK_EXERCISE_NAME)94) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_STRAIGHT_ARM_PLANK_WITH_SHOULDER_TOUCH ((FIT_PLANK_EXERCISE_NAME)95) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK ((FIT_PLANK_EXERCISE_NAME)96) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK ((FIT_PLANK_EXERCISE_NAME)97) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)98) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)99) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK_LEG_LIFT_AND_HOLD ((FIT_PLANK_EXERCISE_NAME)100) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)101) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)102) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PRONE_JACKKNIFE ((FIT_PLANK_EXERCISE_NAME)103) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PRONE_JACKKNIFE ((FIT_PLANK_EXERCISE_NAME)104) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)105) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)106) +#define FIT_PLANK_EXERCISE_NAME_THREE_WAY_PLANK ((FIT_PLANK_EXERCISE_NAME)107) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_THREE_WAY_PLANK ((FIT_PLANK_EXERCISE_NAME)108) +#define FIT_PLANK_EXERCISE_NAME_TOWEL_PLANK_AND_KNEE_IN ((FIT_PLANK_EXERCISE_NAME)109) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_TOWEL_PLANK_AND_KNEE_IN ((FIT_PLANK_EXERCISE_NAME)110) +#define FIT_PLANK_EXERCISE_NAME_T_STABILIZATION ((FIT_PLANK_EXERCISE_NAME)111) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_T_STABILIZATION ((FIT_PLANK_EXERCISE_NAME)112) +#define FIT_PLANK_EXERCISE_NAME_TURKISH_GET_UP_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)113) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_TURKISH_GET_UP_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)114) +#define FIT_PLANK_EXERCISE_NAME_TWO_POINT_PLANK ((FIT_PLANK_EXERCISE_NAME)115) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_TWO_POINT_PLANK ((FIT_PLANK_EXERCISE_NAME)116) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK ((FIT_PLANK_EXERCISE_NAME)117) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_DIAGONAL_ARM_LIFT ((FIT_PLANK_EXERCISE_NAME)118) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_DIAGONAL_ARM_LIFT ((FIT_PLANK_EXERCISE_NAME)119) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_DIAGONAL_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)120) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_DIAGONAL_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)121) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)122) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)123) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)124) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_WITH_HANDS_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)125) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK_LEG_LIFT_AND_HOLD ((FIT_PLANK_EXERCISE_NAME)126) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)127) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_FEET_ON_SWISS_BALL ((FIT_PLANK_EXERCISE_NAME)128) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_TO_PLANK_WITH_REACH_UNDER ((FIT_PLANK_EXERCISE_NAME)129) +#define FIT_PLANK_EXERCISE_NAME_BRIDGE_WITH_GLUTE_LOWER_LIFT ((FIT_PLANK_EXERCISE_NAME)130) +#define FIT_PLANK_EXERCISE_NAME_BRIDGE_ONE_LEG_BRIDGE ((FIT_PLANK_EXERCISE_NAME)131) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_ARM_VARIATIONS ((FIT_PLANK_EXERCISE_NAME)132) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)133) +#define FIT_PLANK_EXERCISE_NAME_REVERSE_PLANK_WITH_LEG_PULL ((FIT_PLANK_EXERCISE_NAME)134) +#define FIT_PLANK_EXERCISE_NAME_COUNT 135 + +typedef FIT_UINT16 FIT_PLYO_EXERCISE_NAME; +#define FIT_PLYO_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PLYO_EXERCISE_NAME_ALTERNATING_JUMP_LUNGE ((FIT_PLYO_EXERCISE_NAME)0) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_ALTERNATING_JUMP_LUNGE ((FIT_PLYO_EXERCISE_NAME)1) +#define FIT_PLYO_EXERCISE_NAME_BARBELL_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)2) +#define FIT_PLYO_EXERCISE_NAME_BODY_WEIGHT_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)3) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)4) +#define FIT_PLYO_EXERCISE_NAME_CROSS_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)5) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_CROSS_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)6) +#define FIT_PLYO_EXERCISE_NAME_DEPTH_JUMP ((FIT_PLYO_EXERCISE_NAME)7) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_DEPTH_JUMP ((FIT_PLYO_EXERCISE_NAME)8) +#define FIT_PLYO_EXERCISE_NAME_DUMBBELL_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)9) +#define FIT_PLYO_EXERCISE_NAME_DUMBBELL_SPLIT_JUMP ((FIT_PLYO_EXERCISE_NAME)10) +#define FIT_PLYO_EXERCISE_NAME_FRONT_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)11) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_FRONT_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)12) +#define FIT_PLYO_EXERCISE_NAME_HIGH_BOX_JUMP ((FIT_PLYO_EXERCISE_NAME)13) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_HIGH_BOX_JUMP ((FIT_PLYO_EXERCISE_NAME)14) +#define FIT_PLYO_EXERCISE_NAME_ISOMETRIC_EXPLOSIVE_BODY_WEIGHT_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)15) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_ISOMETRIC_EXPLOSIVE_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)16) +#define FIT_PLYO_EXERCISE_NAME_LATERAL_LEAP_AND_HOP ((FIT_PLYO_EXERCISE_NAME)17) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_LATERAL_LEAP_AND_HOP ((FIT_PLYO_EXERCISE_NAME)18) +#define FIT_PLYO_EXERCISE_NAME_LATERAL_PLYO_SQUATS ((FIT_PLYO_EXERCISE_NAME)19) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_LATERAL_PLYO_SQUATS ((FIT_PLYO_EXERCISE_NAME)20) +#define FIT_PLYO_EXERCISE_NAME_LATERAL_SLIDE ((FIT_PLYO_EXERCISE_NAME)21) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_LATERAL_SLIDE ((FIT_PLYO_EXERCISE_NAME)22) +#define FIT_PLYO_EXERCISE_NAME_MEDICINE_BALL_OVERHEAD_THROWS ((FIT_PLYO_EXERCISE_NAME)23) +#define FIT_PLYO_EXERCISE_NAME_MEDICINE_BALL_SIDE_THROW ((FIT_PLYO_EXERCISE_NAME)24) +#define FIT_PLYO_EXERCISE_NAME_MEDICINE_BALL_SLAM ((FIT_PLYO_EXERCISE_NAME)25) +#define FIT_PLYO_EXERCISE_NAME_SIDE_TO_SIDE_MEDICINE_BALL_THROWS ((FIT_PLYO_EXERCISE_NAME)26) +#define FIT_PLYO_EXERCISE_NAME_SIDE_TO_SIDE_SHUFFLE_JUMP ((FIT_PLYO_EXERCISE_NAME)27) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_SIDE_TO_SIDE_SHUFFLE_JUMP ((FIT_PLYO_EXERCISE_NAME)28) +#define FIT_PLYO_EXERCISE_NAME_SQUAT_JUMP_ONTO_BOX ((FIT_PLYO_EXERCISE_NAME)29) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_SQUAT_JUMP_ONTO_BOX ((FIT_PLYO_EXERCISE_NAME)30) +#define FIT_PLYO_EXERCISE_NAME_SQUAT_JUMPS_IN_AND_OUT ((FIT_PLYO_EXERCISE_NAME)31) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_SQUAT_JUMPS_IN_AND_OUT ((FIT_PLYO_EXERCISE_NAME)32) +#define FIT_PLYO_EXERCISE_NAME_COUNT 33 + +typedef FIT_UINT16 FIT_PULL_UP_EXERCISE_NAME; +#define FIT_PULL_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PULL_UP_EXERCISE_NAME_BANDED_PULL_UPS ((FIT_PULL_UP_EXERCISE_NAME)0) +#define FIT_PULL_UP_EXERCISE_NAME_30_DEGREE_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)1) +#define FIT_PULL_UP_EXERCISE_NAME_BAND_ASSISTED_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)2) +#define FIT_PULL_UP_EXERCISE_NAME_CLOSE_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)3) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_CLOSE_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)4) +#define FIT_PULL_UP_EXERCISE_NAME_CLOSE_GRIP_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)5) +#define FIT_PULL_UP_EXERCISE_NAME_CROSSOVER_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)6) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_CROSSOVER_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)7) +#define FIT_PULL_UP_EXERCISE_NAME_EZ_BAR_PULLOVER ((FIT_PULL_UP_EXERCISE_NAME)8) +#define FIT_PULL_UP_EXERCISE_NAME_HANGING_HURDLE ((FIT_PULL_UP_EXERCISE_NAME)9) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_HANGING_HURDLE ((FIT_PULL_UP_EXERCISE_NAME)10) +#define FIT_PULL_UP_EXERCISE_NAME_KNEELING_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)11) +#define FIT_PULL_UP_EXERCISE_NAME_KNEELING_UNDERHAND_GRIP_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)12) +#define FIT_PULL_UP_EXERCISE_NAME_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)13) +#define FIT_PULL_UP_EXERCISE_NAME_MIXED_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)14) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_MIXED_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)15) +#define FIT_PULL_UP_EXERCISE_NAME_MIXED_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)16) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_MIXED_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)17) +#define FIT_PULL_UP_EXERCISE_NAME_REVERSE_GRIP_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)18) +#define FIT_PULL_UP_EXERCISE_NAME_STANDING_CABLE_PULLOVER ((FIT_PULL_UP_EXERCISE_NAME)19) +#define FIT_PULL_UP_EXERCISE_NAME_STRAIGHT_ARM_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)20) +#define FIT_PULL_UP_EXERCISE_NAME_SWISS_BALL_EZ_BAR_PULLOVER ((FIT_PULL_UP_EXERCISE_NAME)21) +#define FIT_PULL_UP_EXERCISE_NAME_TOWEL_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)22) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_TOWEL_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)23) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)24) +#define FIT_PULL_UP_EXERCISE_NAME_WIDE_GRIP_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)25) +#define FIT_PULL_UP_EXERCISE_NAME_WIDE_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)26) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_WIDE_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)27) +#define FIT_PULL_UP_EXERCISE_NAME_BURPEE_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)28) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_BURPEE_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)29) +#define FIT_PULL_UP_EXERCISE_NAME_JUMPING_PULL_UPS ((FIT_PULL_UP_EXERCISE_NAME)30) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_JUMPING_PULL_UPS ((FIT_PULL_UP_EXERCISE_NAME)31) +#define FIT_PULL_UP_EXERCISE_NAME_KIPPING_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)32) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_KIPPING_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)33) +#define FIT_PULL_UP_EXERCISE_NAME_L_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)34) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_L_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)35) +#define FIT_PULL_UP_EXERCISE_NAME_SUSPENDED_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)36) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_SUSPENDED_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)37) +#define FIT_PULL_UP_EXERCISE_NAME_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)38) +#define FIT_PULL_UP_EXERCISE_NAME_COUNT 39 + +typedef FIT_UINT16 FIT_PUSH_UP_EXERCISE_NAME; +#define FIT_PUSH_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PUSH_UP_EXERCISE_NAME_CHEST_PRESS_WITH_BAND ((FIT_PUSH_UP_EXERCISE_NAME)0) +#define FIT_PUSH_UP_EXERCISE_NAME_ALTERNATING_STAGGERED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)1) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ALTERNATING_STAGGERED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)2) +#define FIT_PUSH_UP_EXERCISE_NAME_ALTERNATING_HANDS_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)3) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ALTERNATING_HANDS_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)4) +#define FIT_PUSH_UP_EXERCISE_NAME_BOSU_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)5) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_BOSU_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)6) +#define FIT_PUSH_UP_EXERCISE_NAME_CLAPPING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)7) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_CLAPPING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)8) +#define FIT_PUSH_UP_EXERCISE_NAME_CLOSE_GRIP_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)9) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_CLOSE_GRIP_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)10) +#define FIT_PUSH_UP_EXERCISE_NAME_CLOSE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)11) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_CLOSE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)12) +#define FIT_PUSH_UP_EXERCISE_NAME_DECLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)13) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_DECLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)14) +#define FIT_PUSH_UP_EXERCISE_NAME_DIAMOND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)15) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_DIAMOND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)16) +#define FIT_PUSH_UP_EXERCISE_NAME_EXPLOSIVE_CROSSOVER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)17) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_EXPLOSIVE_CROSSOVER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)18) +#define FIT_PUSH_UP_EXERCISE_NAME_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)19) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)20) +#define FIT_PUSH_UP_EXERCISE_NAME_FEET_ELEVATED_SIDE_TO_SIDE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)21) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_FEET_ELEVATED_SIDE_TO_SIDE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)22) +#define FIT_PUSH_UP_EXERCISE_NAME_HAND_RELEASE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)23) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_HAND_RELEASE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)24) +#define FIT_PUSH_UP_EXERCISE_NAME_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)25) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)26) +#define FIT_PUSH_UP_EXERCISE_NAME_INCLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)27) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_INCLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)28) +#define FIT_PUSH_UP_EXERCISE_NAME_ISOMETRIC_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)29) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ISOMETRIC_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)30) +#define FIT_PUSH_UP_EXERCISE_NAME_JUDO_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)31) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_JUDO_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)32) +#define FIT_PUSH_UP_EXERCISE_NAME_KNEELING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)33) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_KNEELING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)34) +#define FIT_PUSH_UP_EXERCISE_NAME_MEDICINE_BALL_CHEST_PASS ((FIT_PUSH_UP_EXERCISE_NAME)35) +#define FIT_PUSH_UP_EXERCISE_NAME_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)36) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)37) +#define FIT_PUSH_UP_EXERCISE_NAME_ONE_ARM_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)38) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ONE_ARM_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)39) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)40) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_AND_ROW ((FIT_PUSH_UP_EXERCISE_NAME)41) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_AND_ROW ((FIT_PUSH_UP_EXERCISE_NAME)42) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)43) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)44) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_WITH_FEET_ON_SWISS_BALL ((FIT_PUSH_UP_EXERCISE_NAME)45) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_WITH_FEET_ON_SWISS_BALL ((FIT_PUSH_UP_EXERCISE_NAME)46) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_WITH_ONE_HAND_ON_MEDICINE_BALL ((FIT_PUSH_UP_EXERCISE_NAME)47) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_WITH_ONE_HAND_ON_MEDICINE_BALL ((FIT_PUSH_UP_EXERCISE_NAME)48) +#define FIT_PUSH_UP_EXERCISE_NAME_SHOULDER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)49) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SHOULDER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)50) +#define FIT_PUSH_UP_EXERCISE_NAME_SINGLE_ARM_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)51) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SINGLE_ARM_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)52) +#define FIT_PUSH_UP_EXERCISE_NAME_SPIDERMAN_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)53) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SPIDERMAN_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)54) +#define FIT_PUSH_UP_EXERCISE_NAME_STACKED_FEET_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)55) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_STACKED_FEET_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)56) +#define FIT_PUSH_UP_EXERCISE_NAME_STAGGERED_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)57) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_STAGGERED_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)58) +#define FIT_PUSH_UP_EXERCISE_NAME_SUSPENDED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)59) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SUSPENDED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)60) +#define FIT_PUSH_UP_EXERCISE_NAME_SWISS_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)61) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)62) +#define FIT_PUSH_UP_EXERCISE_NAME_SWISS_BALL_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)63) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)64) +#define FIT_PUSH_UP_EXERCISE_NAME_T_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)65) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_T_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)66) +#define FIT_PUSH_UP_EXERCISE_NAME_TRIPLE_STOP_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)67) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_TRIPLE_STOP_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)68) +#define FIT_PUSH_UP_EXERCISE_NAME_WIDE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)69) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_WIDE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)70) +#define FIT_PUSH_UP_EXERCISE_NAME_PARALLETTE_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)71) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PARALLETTE_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)72) +#define FIT_PUSH_UP_EXERCISE_NAME_RING_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)73) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_RING_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)74) +#define FIT_PUSH_UP_EXERCISE_NAME_RING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)75) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_RING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)76) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)77) +#define FIT_PUSH_UP_EXERCISE_NAME_PILATES_PUSHUP ((FIT_PUSH_UP_EXERCISE_NAME)78) +#define FIT_PUSH_UP_EXERCISE_NAME_COUNT 79 + +typedef FIT_UINT16 FIT_ROW_EXERCISE_NAME; +#define FIT_ROW_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_ROW_EXERCISE_NAME_BARBELL_STRAIGHT_LEG_DEADLIFT_TO_ROW ((FIT_ROW_EXERCISE_NAME)0) +#define FIT_ROW_EXERCISE_NAME_CABLE_ROW_STANDING ((FIT_ROW_EXERCISE_NAME)1) +#define FIT_ROW_EXERCISE_NAME_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)2) +#define FIT_ROW_EXERCISE_NAME_ELEVATED_FEET_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)3) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_ELEVATED_FEET_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)4) +#define FIT_ROW_EXERCISE_NAME_FACE_PULL ((FIT_ROW_EXERCISE_NAME)5) +#define FIT_ROW_EXERCISE_NAME_FACE_PULL_WITH_EXTERNAL_ROTATION ((FIT_ROW_EXERCISE_NAME)6) +#define FIT_ROW_EXERCISE_NAME_INVERTED_ROW_WITH_FEET_ON_SWISS_BALL ((FIT_ROW_EXERCISE_NAME)7) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_INVERTED_ROW_WITH_FEET_ON_SWISS_BALL ((FIT_ROW_EXERCISE_NAME)8) +#define FIT_ROW_EXERCISE_NAME_KETTLEBELL_ROW ((FIT_ROW_EXERCISE_NAME)9) +#define FIT_ROW_EXERCISE_NAME_MODIFIED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)10) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_MODIFIED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)11) +#define FIT_ROW_EXERCISE_NAME_NEUTRAL_GRIP_ALTERNATING_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)12) +#define FIT_ROW_EXERCISE_NAME_ONE_ARM_BENT_OVER_ROW ((FIT_ROW_EXERCISE_NAME)13) +#define FIT_ROW_EXERCISE_NAME_ONE_LEGGED_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)14) +#define FIT_ROW_EXERCISE_NAME_RENEGADE_ROW ((FIT_ROW_EXERCISE_NAME)15) +#define FIT_ROW_EXERCISE_NAME_REVERSE_GRIP_BARBELL_ROW ((FIT_ROW_EXERCISE_NAME)16) +#define FIT_ROW_EXERCISE_NAME_ROPE_HANDLE_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)17) +#define FIT_ROW_EXERCISE_NAME_SEATED_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)18) +#define FIT_ROW_EXERCISE_NAME_SEATED_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)19) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)20) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_CABLE_ROW_AND_ROTATION ((FIT_ROW_EXERCISE_NAME)21) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)22) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_SINGLE_ARM_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)23) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_NEUTRAL_GRIP_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)24) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_NEUTRAL_GRIP_DUMBBELL_ROW_AND_ROTATION ((FIT_ROW_EXERCISE_NAME)25) +#define FIT_ROW_EXERCISE_NAME_SUSPENDED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)26) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_SUSPENDED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)27) +#define FIT_ROW_EXERCISE_NAME_T_BAR_ROW ((FIT_ROW_EXERCISE_NAME)28) +#define FIT_ROW_EXERCISE_NAME_TOWEL_GRIP_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)29) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_TOWEL_GRIP_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)30) +#define FIT_ROW_EXERCISE_NAME_UNDERHAND_GRIP_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)31) +#define FIT_ROW_EXERCISE_NAME_V_GRIP_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)32) +#define FIT_ROW_EXERCISE_NAME_WIDE_GRIP_SEATED_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)33) +#define FIT_ROW_EXERCISE_NAME_COUNT 34 + +typedef FIT_UINT16 FIT_SHOULDER_PRESS_EXERCISE_NAME; +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_ALTERNATING_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)0) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_ARNOLD_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)1) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_BARBELL_FRONT_SQUAT_TO_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)2) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_BARBELL_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)3) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_BARBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)4) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DEAD_CURL_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)5) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DUMBBELL_ALTERNATING_SHOULDER_PRESS_AND_TWIST ((FIT_SHOULDER_PRESS_EXERCISE_NAME)6) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DUMBBELL_HAMMER_CURL_TO_LUNGE_TO_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)7) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DUMBBELL_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)8) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_FLOOR_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)9) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_WEIGHTED_FLOOR_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)10) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)11) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_WEIGHTED_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)12) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_ONE_ARM_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)13) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_OVERHEAD_BARBELL_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)14) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_OVERHEAD_DUMBBELL_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)15) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SEATED_BARBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)16) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SEATED_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)17) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)18) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SINGLE_ARM_STEP_UP_AND_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)19) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SMITH_MACHINE_OVERHEAD_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)20) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SPLIT_STANCE_HAMMER_CURL_TO_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)21) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SWISS_BALL_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)22) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_WEIGHT_PLATE_FRONT_RAISE ((FIT_SHOULDER_PRESS_EXERCISE_NAME)23) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_COUNT 24 + +typedef FIT_UINT16 FIT_SHOULDER_STABILITY_EXERCISE_NAME; +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_90_DEGREE_CABLE_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)0) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_BAND_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)1) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_BAND_INTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)2) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_BENT_ARM_LATERAL_RAISE_AND_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)3) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_CABLE_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)4) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_DUMBBELL_FACE_PULL_WITH_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)5) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_FLOOR_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)6) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_FLOOR_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)7) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_FLOOR_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)8) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_FLOOR_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)9) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_FLOOR_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)10) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_FLOOR_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)11) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)12) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)13) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_L_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)14) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_L_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)15) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)16) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)17) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)18) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)19) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)20) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)21) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_LYING_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)22) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SEATED_DUMBBELL_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)23) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_STANDING_L_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)24) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)25) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)26) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)27) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)28) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)29) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)30) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)31) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)32) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_COUNT 33 + +typedef FIT_UINT16 FIT_SHRUG_EXERCISE_NAME; +#define FIT_SHRUG_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SHRUG_EXERCISE_NAME_BARBELL_JUMP_SHRUG ((FIT_SHRUG_EXERCISE_NAME)0) +#define FIT_SHRUG_EXERCISE_NAME_BARBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)1) +#define FIT_SHRUG_EXERCISE_NAME_BARBELL_UPRIGHT_ROW ((FIT_SHRUG_EXERCISE_NAME)2) +#define FIT_SHRUG_EXERCISE_NAME_BEHIND_THE_BACK_SMITH_MACHINE_SHRUG ((FIT_SHRUG_EXERCISE_NAME)3) +#define FIT_SHRUG_EXERCISE_NAME_DUMBBELL_JUMP_SHRUG ((FIT_SHRUG_EXERCISE_NAME)4) +#define FIT_SHRUG_EXERCISE_NAME_DUMBBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)5) +#define FIT_SHRUG_EXERCISE_NAME_DUMBBELL_UPRIGHT_ROW ((FIT_SHRUG_EXERCISE_NAME)6) +#define FIT_SHRUG_EXERCISE_NAME_INCLINE_DUMBBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)7) +#define FIT_SHRUG_EXERCISE_NAME_OVERHEAD_BARBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)8) +#define FIT_SHRUG_EXERCISE_NAME_OVERHEAD_DUMBBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)9) +#define FIT_SHRUG_EXERCISE_NAME_SCAPTION_AND_SHRUG ((FIT_SHRUG_EXERCISE_NAME)10) +#define FIT_SHRUG_EXERCISE_NAME_SCAPULAR_RETRACTION ((FIT_SHRUG_EXERCISE_NAME)11) +#define FIT_SHRUG_EXERCISE_NAME_SERRATUS_CHAIR_SHRUG ((FIT_SHRUG_EXERCISE_NAME)12) +#define FIT_SHRUG_EXERCISE_NAME_WEIGHTED_SERRATUS_CHAIR_SHRUG ((FIT_SHRUG_EXERCISE_NAME)13) +#define FIT_SHRUG_EXERCISE_NAME_SERRATUS_SHRUG ((FIT_SHRUG_EXERCISE_NAME)14) +#define FIT_SHRUG_EXERCISE_NAME_WEIGHTED_SERRATUS_SHRUG ((FIT_SHRUG_EXERCISE_NAME)15) +#define FIT_SHRUG_EXERCISE_NAME_WIDE_GRIP_JUMP_SHRUG ((FIT_SHRUG_EXERCISE_NAME)16) +#define FIT_SHRUG_EXERCISE_NAME_COUNT 17 + +typedef FIT_UINT16 FIT_SIT_UP_EXERCISE_NAME; +#define FIT_SIT_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SIT_UP_EXERCISE_NAME_ALTERNATING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)0) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_ALTERNATING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)1) +#define FIT_SIT_UP_EXERCISE_NAME_BENT_KNEE_V_UP ((FIT_SIT_UP_EXERCISE_NAME)2) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_BENT_KNEE_V_UP ((FIT_SIT_UP_EXERCISE_NAME)3) +#define FIT_SIT_UP_EXERCISE_NAME_BUTTERFLY_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)4) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_BUTTERFLY_SITUP ((FIT_SIT_UP_EXERCISE_NAME)5) +#define FIT_SIT_UP_EXERCISE_NAME_CROSS_PUNCH_ROLL_UP ((FIT_SIT_UP_EXERCISE_NAME)6) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_CROSS_PUNCH_ROLL_UP ((FIT_SIT_UP_EXERCISE_NAME)7) +#define FIT_SIT_UP_EXERCISE_NAME_CROSSED_ARMS_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)8) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_CROSSED_ARMS_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)9) +#define FIT_SIT_UP_EXERCISE_NAME_GET_UP_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)10) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_GET_UP_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)11) +#define FIT_SIT_UP_EXERCISE_NAME_HOVERING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)12) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_HOVERING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)13) +#define FIT_SIT_UP_EXERCISE_NAME_KETTLEBELL_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)14) +#define FIT_SIT_UP_EXERCISE_NAME_MEDICINE_BALL_ALTERNATING_V_UP ((FIT_SIT_UP_EXERCISE_NAME)15) +#define FIT_SIT_UP_EXERCISE_NAME_MEDICINE_BALL_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)16) +#define FIT_SIT_UP_EXERCISE_NAME_MEDICINE_BALL_V_UP ((FIT_SIT_UP_EXERCISE_NAME)17) +#define FIT_SIT_UP_EXERCISE_NAME_MODIFIED_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)18) +#define FIT_SIT_UP_EXERCISE_NAME_NEGATIVE_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)19) +#define FIT_SIT_UP_EXERCISE_NAME_ONE_ARM_FULL_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)20) +#define FIT_SIT_UP_EXERCISE_NAME_RECLINING_CIRCLE ((FIT_SIT_UP_EXERCISE_NAME)21) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_RECLINING_CIRCLE ((FIT_SIT_UP_EXERCISE_NAME)22) +#define FIT_SIT_UP_EXERCISE_NAME_REVERSE_CURL_UP ((FIT_SIT_UP_EXERCISE_NAME)23) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_REVERSE_CURL_UP ((FIT_SIT_UP_EXERCISE_NAME)24) +#define FIT_SIT_UP_EXERCISE_NAME_SINGLE_LEG_SWISS_BALL_JACKKNIFE ((FIT_SIT_UP_EXERCISE_NAME)25) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_SWISS_BALL_JACKKNIFE ((FIT_SIT_UP_EXERCISE_NAME)26) +#define FIT_SIT_UP_EXERCISE_NAME_THE_TEASER ((FIT_SIT_UP_EXERCISE_NAME)27) +#define FIT_SIT_UP_EXERCISE_NAME_THE_TEASER_WEIGHTED ((FIT_SIT_UP_EXERCISE_NAME)28) +#define FIT_SIT_UP_EXERCISE_NAME_THREE_PART_ROLL_DOWN ((FIT_SIT_UP_EXERCISE_NAME)29) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_THREE_PART_ROLL_DOWN ((FIT_SIT_UP_EXERCISE_NAME)30) +#define FIT_SIT_UP_EXERCISE_NAME_V_UP ((FIT_SIT_UP_EXERCISE_NAME)31) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_V_UP ((FIT_SIT_UP_EXERCISE_NAME)32) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_RUSSIAN_TWIST_ON_SWISS_BALL ((FIT_SIT_UP_EXERCISE_NAME)33) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)34) +#define FIT_SIT_UP_EXERCISE_NAME_X_ABS ((FIT_SIT_UP_EXERCISE_NAME)35) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_X_ABS ((FIT_SIT_UP_EXERCISE_NAME)36) +#define FIT_SIT_UP_EXERCISE_NAME_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)37) +#define FIT_SIT_UP_EXERCISE_NAME_COUNT 38 + +typedef FIT_UINT16 FIT_SQUAT_EXERCISE_NAME; +#define FIT_SQUAT_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SQUAT_EXERCISE_NAME_LEG_PRESS ((FIT_SQUAT_EXERCISE_NAME)0) +#define FIT_SQUAT_EXERCISE_NAME_BACK_SQUAT_WITH_BODY_BAR ((FIT_SQUAT_EXERCISE_NAME)1) +#define FIT_SQUAT_EXERCISE_NAME_BACK_SQUATS ((FIT_SQUAT_EXERCISE_NAME)2) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BACK_SQUATS ((FIT_SQUAT_EXERCISE_NAME)3) +#define FIT_SQUAT_EXERCISE_NAME_BALANCING_SQUAT ((FIT_SQUAT_EXERCISE_NAME)4) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BALANCING_SQUAT ((FIT_SQUAT_EXERCISE_NAME)5) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_BACK_SQUAT ((FIT_SQUAT_EXERCISE_NAME)6) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_BOX_SQUAT ((FIT_SQUAT_EXERCISE_NAME)7) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_FRONT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)8) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_HACK_SQUAT ((FIT_SQUAT_EXERCISE_NAME)9) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_HANG_SQUAT_SNATCH ((FIT_SQUAT_EXERCISE_NAME)10) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_LATERAL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)11) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_QUARTER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)12) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_SIFF_SQUAT ((FIT_SQUAT_EXERCISE_NAME)13) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_SQUAT_SNATCH ((FIT_SQUAT_EXERCISE_NAME)14) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_SQUAT_WITH_HEELS_RAISED ((FIT_SQUAT_EXERCISE_NAME)15) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_STEPOVER ((FIT_SQUAT_EXERCISE_NAME)16) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)17) +#define FIT_SQUAT_EXERCISE_NAME_BENCH_SQUAT_WITH_ROTATIONAL_CHOP ((FIT_SQUAT_EXERCISE_NAME)18) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BENCH_SQUAT_WITH_ROTATIONAL_CHOP ((FIT_SQUAT_EXERCISE_NAME)19) +#define FIT_SQUAT_EXERCISE_NAME_BODY_WEIGHT_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)20) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)21) +#define FIT_SQUAT_EXERCISE_NAME_BOX_STEP_SQUAT ((FIT_SQUAT_EXERCISE_NAME)22) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BOX_STEP_SQUAT ((FIT_SQUAT_EXERCISE_NAME)23) +#define FIT_SQUAT_EXERCISE_NAME_BRACED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)24) +#define FIT_SQUAT_EXERCISE_NAME_CROSSED_ARM_BARBELL_FRONT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)25) +#define FIT_SQUAT_EXERCISE_NAME_CROSSOVER_DUMBBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)26) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_FRONT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)27) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_SPLIT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)28) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)29) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_SQUAT_CLEAN ((FIT_SQUAT_EXERCISE_NAME)30) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_STEPOVER ((FIT_SQUAT_EXERCISE_NAME)31) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)32) +#define FIT_SQUAT_EXERCISE_NAME_ELEVATED_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)33) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_ELEVATED_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)34) +#define FIT_SQUAT_EXERCISE_NAME_FIGURE_FOUR_SQUATS ((FIT_SQUAT_EXERCISE_NAME)35) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_FIGURE_FOUR_SQUATS ((FIT_SQUAT_EXERCISE_NAME)36) +#define FIT_SQUAT_EXERCISE_NAME_GOBLET_SQUAT ((FIT_SQUAT_EXERCISE_NAME)37) +#define FIT_SQUAT_EXERCISE_NAME_KETTLEBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)38) +#define FIT_SQUAT_EXERCISE_NAME_KETTLEBELL_SWING_OVERHEAD ((FIT_SQUAT_EXERCISE_NAME)39) +#define FIT_SQUAT_EXERCISE_NAME_KETTLEBELL_SWING_WITH_FLIP_TO_SQUAT ((FIT_SQUAT_EXERCISE_NAME)40) +#define FIT_SQUAT_EXERCISE_NAME_LATERAL_DUMBBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)41) +#define FIT_SQUAT_EXERCISE_NAME_ONE_LEGGED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)42) +#define FIT_SQUAT_EXERCISE_NAME_OVERHEAD_DUMBBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)43) +#define FIT_SQUAT_EXERCISE_NAME_OVERHEAD_SQUAT ((FIT_SQUAT_EXERCISE_NAME)44) +#define FIT_SQUAT_EXERCISE_NAME_PARTIAL_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)45) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PARTIAL_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)46) +#define FIT_SQUAT_EXERCISE_NAME_PISTOL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)47) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PISTOL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)48) +#define FIT_SQUAT_EXERCISE_NAME_PLIE_SLIDES ((FIT_SQUAT_EXERCISE_NAME)49) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PLIE_SLIDES ((FIT_SQUAT_EXERCISE_NAME)50) +#define FIT_SQUAT_EXERCISE_NAME_PLIE_SQUAT ((FIT_SQUAT_EXERCISE_NAME)51) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PLIE_SQUAT ((FIT_SQUAT_EXERCISE_NAME)52) +#define FIT_SQUAT_EXERCISE_NAME_PRISONER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)53) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PRISONER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)54) +#define FIT_SQUAT_EXERCISE_NAME_SINGLE_LEG_BENCH_GET_UP ((FIT_SQUAT_EXERCISE_NAME)55) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENCH_GET_UP ((FIT_SQUAT_EXERCISE_NAME)56) +#define FIT_SQUAT_EXERCISE_NAME_SINGLE_LEG_BENCH_SQUAT ((FIT_SQUAT_EXERCISE_NAME)57) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENCH_SQUAT ((FIT_SQUAT_EXERCISE_NAME)58) +#define FIT_SQUAT_EXERCISE_NAME_SINGLE_LEG_SQUAT_ON_SWISS_BALL ((FIT_SQUAT_EXERCISE_NAME)59) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_SQUAT_ON_SWISS_BALL ((FIT_SQUAT_EXERCISE_NAME)60) +#define FIT_SQUAT_EXERCISE_NAME_SQUAT ((FIT_SQUAT_EXERCISE_NAME)61) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)62) +#define FIT_SQUAT_EXERCISE_NAME_SQUATS_WITH_BAND ((FIT_SQUAT_EXERCISE_NAME)63) +#define FIT_SQUAT_EXERCISE_NAME_STAGGERED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)64) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_STAGGERED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)65) +#define FIT_SQUAT_EXERCISE_NAME_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)66) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)67) +#define FIT_SQUAT_EXERCISE_NAME_SUITCASE_SQUATS ((FIT_SQUAT_EXERCISE_NAME)68) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT ((FIT_SQUAT_EXERCISE_NAME)69) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_SLIDE_IN ((FIT_SQUAT_EXERCISE_NAME)70) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SUMO_SQUAT_SLIDE_IN ((FIT_SQUAT_EXERCISE_NAME)71) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_TO_HIGH_PULL ((FIT_SQUAT_EXERCISE_NAME)72) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_TO_STAND ((FIT_SQUAT_EXERCISE_NAME)73) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SUMO_SQUAT_TO_STAND ((FIT_SQUAT_EXERCISE_NAME)74) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_WITH_ROTATION ((FIT_SQUAT_EXERCISE_NAME)75) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SUMO_SQUAT_WITH_ROTATION ((FIT_SQUAT_EXERCISE_NAME)76) +#define FIT_SQUAT_EXERCISE_NAME_SWISS_BALL_BODY_WEIGHT_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)77) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SWISS_BALL_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)78) +#define FIT_SQUAT_EXERCISE_NAME_THRUSTERS ((FIT_SQUAT_EXERCISE_NAME)79) +#define FIT_SQUAT_EXERCISE_NAME_UNEVEN_SQUAT ((FIT_SQUAT_EXERCISE_NAME)80) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_UNEVEN_SQUAT ((FIT_SQUAT_EXERCISE_NAME)81) +#define FIT_SQUAT_EXERCISE_NAME_WAIST_SLIMMING_SQUAT ((FIT_SQUAT_EXERCISE_NAME)82) +#define FIT_SQUAT_EXERCISE_NAME_WALL_BALL ((FIT_SQUAT_EXERCISE_NAME)83) +#define FIT_SQUAT_EXERCISE_NAME_WIDE_STANCE_BARBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)84) +#define FIT_SQUAT_EXERCISE_NAME_WIDE_STANCE_GOBLET_SQUAT ((FIT_SQUAT_EXERCISE_NAME)85) +#define FIT_SQUAT_EXERCISE_NAME_ZERCHER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)86) +#define FIT_SQUAT_EXERCISE_NAME_KBS_OVERHEAD ((FIT_SQUAT_EXERCISE_NAME)87) // Deprecated do not use +#define FIT_SQUAT_EXERCISE_NAME_SQUAT_AND_SIDE_KICK ((FIT_SQUAT_EXERCISE_NAME)88) +#define FIT_SQUAT_EXERCISE_NAME_SQUAT_JUMPS_IN_N_OUT ((FIT_SQUAT_EXERCISE_NAME)89) +#define FIT_SQUAT_EXERCISE_NAME_PILATES_PLIE_SQUATS_PARALLEL_TURNED_OUT_FLAT_AND_HEELS ((FIT_SQUAT_EXERCISE_NAME)90) +#define FIT_SQUAT_EXERCISE_NAME_RELEVE_STRAIGHT_LEG_AND_KNEE_BENT_WITH_ONE_LEG_VARIATION ((FIT_SQUAT_EXERCISE_NAME)91) +#define FIT_SQUAT_EXERCISE_NAME_COUNT 92 + +typedef FIT_UINT16 FIT_TOTAL_BODY_EXERCISE_NAME; +#define FIT_TOTAL_BODY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_TOTAL_BODY_EXERCISE_NAME_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)0) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)1) +#define FIT_TOTAL_BODY_EXERCISE_NAME_BURPEE_BOX_JUMP ((FIT_TOTAL_BODY_EXERCISE_NAME)2) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_BURPEE_BOX_JUMP ((FIT_TOTAL_BODY_EXERCISE_NAME)3) +#define FIT_TOTAL_BODY_EXERCISE_NAME_HIGH_PULL_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)4) +#define FIT_TOTAL_BODY_EXERCISE_NAME_MAN_MAKERS ((FIT_TOTAL_BODY_EXERCISE_NAME)5) +#define FIT_TOTAL_BODY_EXERCISE_NAME_ONE_ARM_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)6) +#define FIT_TOTAL_BODY_EXERCISE_NAME_SQUAT_THRUSTS ((FIT_TOTAL_BODY_EXERCISE_NAME)7) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_SQUAT_THRUSTS ((FIT_TOTAL_BODY_EXERCISE_NAME)8) +#define FIT_TOTAL_BODY_EXERCISE_NAME_SQUAT_PLANK_PUSH_UP ((FIT_TOTAL_BODY_EXERCISE_NAME)9) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_SQUAT_PLANK_PUSH_UP ((FIT_TOTAL_BODY_EXERCISE_NAME)10) +#define FIT_TOTAL_BODY_EXERCISE_NAME_STANDING_T_ROTATION_BALANCE ((FIT_TOTAL_BODY_EXERCISE_NAME)11) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_STANDING_T_ROTATION_BALANCE ((FIT_TOTAL_BODY_EXERCISE_NAME)12) +#define FIT_TOTAL_BODY_EXERCISE_NAME_COUNT 13 + +typedef FIT_UINT16 FIT_TRICEPS_EXTENSION_EXERCISE_NAME; +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_BENCH_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)0) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_BENCH_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)1) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_BODY_WEIGHT_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)2) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_CABLE_KICKBACK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)3) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_CABLE_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)4) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_CABLE_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)5) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_DUMBBELL_KICKBACK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)6) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_DUMBBELL_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)7) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_EZ_BAR_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)8) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_INCLINE_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)9) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_INCLINE_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)10) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_INCLINE_EZ_BAR_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)11) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_LYING_DUMBBELL_PULLOVER_TO_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)12) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_LYING_EZ_BAR_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)13) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_LYING_TRICEPS_EXTENSION_TO_CLOSE_GRIP_BENCH_PRESS ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)14) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_OVERHEAD_DUMBBELL_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)15) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_RECLINING_TRICEPS_PRESS ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)16) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_REVERSE_GRIP_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)17) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_REVERSE_GRIP_TRICEPS_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)18) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_ROPE_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)19) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_BARBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)20) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_DUMBBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)21) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_EZ_BAR_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)22) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_SINGLE_ARM_OVERHEAD_DUMBBELL_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)23) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)24) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_DUMBBELL_SEATED_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)25) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_LEG_BENCH_DIP_AND_KICK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)26) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENCH_DIP_AND_KICK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)27) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_LEG_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)28) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)29) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_STATIC_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)30) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SUSPENDED_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)31) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_SUSPENDED_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)32) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SWISS_BALL_DUMBBELL_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)33) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SWISS_BALL_EZ_BAR_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)34) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SWISS_BALL_EZ_BAR_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)35) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_TABLETOP_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)36) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_TABLETOP_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)37) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_TRICEPS_EXTENSION_ON_FLOOR ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)38) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_TRICEPS_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)39) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)40) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_COUNT 41 + +typedef FIT_UINT16 FIT_WARM_UP_EXERCISE_NAME; +#define FIT_WARM_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_WARM_UP_EXERCISE_NAME_QUADRUPED_ROCKING ((FIT_WARM_UP_EXERCISE_NAME)0) +#define FIT_WARM_UP_EXERCISE_NAME_NECK_TILTS ((FIT_WARM_UP_EXERCISE_NAME)1) +#define FIT_WARM_UP_EXERCISE_NAME_ANKLE_CIRCLES ((FIT_WARM_UP_EXERCISE_NAME)2) +#define FIT_WARM_UP_EXERCISE_NAME_ANKLE_DORSIFLEXION_WITH_BAND ((FIT_WARM_UP_EXERCISE_NAME)3) +#define FIT_WARM_UP_EXERCISE_NAME_ANKLE_INTERNAL_ROTATION ((FIT_WARM_UP_EXERCISE_NAME)4) +#define FIT_WARM_UP_EXERCISE_NAME_ARM_CIRCLES ((FIT_WARM_UP_EXERCISE_NAME)5) +#define FIT_WARM_UP_EXERCISE_NAME_BENT_OVER_REACH_TO_SKY ((FIT_WARM_UP_EXERCISE_NAME)6) +#define FIT_WARM_UP_EXERCISE_NAME_CAT_CAMEL ((FIT_WARM_UP_EXERCISE_NAME)7) +#define FIT_WARM_UP_EXERCISE_NAME_ELBOW_TO_FOOT_LUNGE ((FIT_WARM_UP_EXERCISE_NAME)8) +#define FIT_WARM_UP_EXERCISE_NAME_FORWARD_AND_BACKWARD_LEG_SWINGS ((FIT_WARM_UP_EXERCISE_NAME)9) +#define FIT_WARM_UP_EXERCISE_NAME_GROINERS ((FIT_WARM_UP_EXERCISE_NAME)10) +#define FIT_WARM_UP_EXERCISE_NAME_INVERTED_HAMSTRING_STRETCH ((FIT_WARM_UP_EXERCISE_NAME)11) +#define FIT_WARM_UP_EXERCISE_NAME_LATERAL_DUCK_UNDER ((FIT_WARM_UP_EXERCISE_NAME)12) +#define FIT_WARM_UP_EXERCISE_NAME_NECK_ROTATIONS ((FIT_WARM_UP_EXERCISE_NAME)13) +#define FIT_WARM_UP_EXERCISE_NAME_OPPOSITE_ARM_AND_LEG_BALANCE ((FIT_WARM_UP_EXERCISE_NAME)14) +#define FIT_WARM_UP_EXERCISE_NAME_REACH_ROLL_AND_LIFT ((FIT_WARM_UP_EXERCISE_NAME)15) +#define FIT_WARM_UP_EXERCISE_NAME_SCORPION ((FIT_WARM_UP_EXERCISE_NAME)16) // Deprecated do not use +#define FIT_WARM_UP_EXERCISE_NAME_SHOULDER_CIRCLES ((FIT_WARM_UP_EXERCISE_NAME)17) +#define FIT_WARM_UP_EXERCISE_NAME_SIDE_TO_SIDE_LEG_SWINGS ((FIT_WARM_UP_EXERCISE_NAME)18) +#define FIT_WARM_UP_EXERCISE_NAME_SLEEPER_STRETCH ((FIT_WARM_UP_EXERCISE_NAME)19) +#define FIT_WARM_UP_EXERCISE_NAME_SLIDE_OUT ((FIT_WARM_UP_EXERCISE_NAME)20) +#define FIT_WARM_UP_EXERCISE_NAME_SWISS_BALL_HIP_CROSSOVER ((FIT_WARM_UP_EXERCISE_NAME)21) +#define FIT_WARM_UP_EXERCISE_NAME_SWISS_BALL_REACH_ROLL_AND_LIFT ((FIT_WARM_UP_EXERCISE_NAME)22) +#define FIT_WARM_UP_EXERCISE_NAME_SWISS_BALL_WINDSHIELD_WIPERS ((FIT_WARM_UP_EXERCISE_NAME)23) +#define FIT_WARM_UP_EXERCISE_NAME_THORACIC_ROTATION ((FIT_WARM_UP_EXERCISE_NAME)24) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_HIGH_KICKS ((FIT_WARM_UP_EXERCISE_NAME)25) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_HIGH_KNEES ((FIT_WARM_UP_EXERCISE_NAME)26) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_KNEE_HUGS ((FIT_WARM_UP_EXERCISE_NAME)27) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_LEG_CRADLES ((FIT_WARM_UP_EXERCISE_NAME)28) +#define FIT_WARM_UP_EXERCISE_NAME_WALKOUT ((FIT_WARM_UP_EXERCISE_NAME)29) +#define FIT_WARM_UP_EXERCISE_NAME_WALKOUT_FROM_PUSH_UP_POSITION ((FIT_WARM_UP_EXERCISE_NAME)30) +#define FIT_WARM_UP_EXERCISE_NAME_COUNT 31 + +typedef FIT_UINT16 FIT_RUN_EXERCISE_NAME; +#define FIT_RUN_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_RUN_EXERCISE_NAME_RUN ((FIT_RUN_EXERCISE_NAME)0) +#define FIT_RUN_EXERCISE_NAME_WALK ((FIT_RUN_EXERCISE_NAME)1) +#define FIT_RUN_EXERCISE_NAME_JOG ((FIT_RUN_EXERCISE_NAME)2) +#define FIT_RUN_EXERCISE_NAME_SPRINT ((FIT_RUN_EXERCISE_NAME)3) +#define FIT_RUN_EXERCISE_NAME_COUNT 4 + +typedef FIT_ENUM FIT_WATER_TYPE; +#define FIT_WATER_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_WATER_TYPE_FRESH ((FIT_WATER_TYPE)0) +#define FIT_WATER_TYPE_SALT ((FIT_WATER_TYPE)1) +#define FIT_WATER_TYPE_EN13319 ((FIT_WATER_TYPE)2) +#define FIT_WATER_TYPE_CUSTOM ((FIT_WATER_TYPE)3) +#define FIT_WATER_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_TISSUE_MODEL_TYPE; +#define FIT_TISSUE_MODEL_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_TISSUE_MODEL_TYPE_ZHL_16C ((FIT_TISSUE_MODEL_TYPE)0) // Buhlmann's decompression algorithm, version C +#define FIT_TISSUE_MODEL_TYPE_COUNT 1 + +typedef FIT_ENUM FIT_DIVE_GAS_STATUS; +#define FIT_DIVE_GAS_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_DIVE_GAS_STATUS_DISABLED ((FIT_DIVE_GAS_STATUS)0) +#define FIT_DIVE_GAS_STATUS_ENABLED ((FIT_DIVE_GAS_STATUS)1) +#define FIT_DIVE_GAS_STATUS_BACKUP_ONLY ((FIT_DIVE_GAS_STATUS)2) +#define FIT_DIVE_GAS_STATUS_COUNT 3 + +typedef FIT_ENUM FIT_DIVE_ALARM_TYPE; +#define FIT_DIVE_ALARM_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_DIVE_ALARM_TYPE_DEPTH ((FIT_DIVE_ALARM_TYPE)0) +#define FIT_DIVE_ALARM_TYPE_TIME ((FIT_DIVE_ALARM_TYPE)1) +#define FIT_DIVE_ALARM_TYPE_COUNT 2 + +typedef FIT_ENUM FIT_DIVE_BACKLIGHT_MODE; +#define FIT_DIVE_BACKLIGHT_MODE_INVALID FIT_ENUM_INVALID +#define FIT_DIVE_BACKLIGHT_MODE_AT_DEPTH ((FIT_DIVE_BACKLIGHT_MODE)0) +#define FIT_DIVE_BACKLIGHT_MODE_ALWAYS_ON ((FIT_DIVE_BACKLIGHT_MODE)1) +#define FIT_DIVE_BACKLIGHT_MODE_COUNT 2 + +typedef FIT_UINT16 FIT_FAVERO_PRODUCT; +#define FIT_FAVERO_PRODUCT_INVALID FIT_UINT16_INVALID +#define FIT_FAVERO_PRODUCT_ASSIOMA_UNO ((FIT_FAVERO_PRODUCT)10) +#define FIT_FAVERO_PRODUCT_ASSIOMA_DUO ((FIT_FAVERO_PRODUCT)12) +#define FIT_FAVERO_PRODUCT_COUNT 2 + +typedef FIT_ENUM FIT_CLIMB_PRO_EVENT; +#define FIT_CLIMB_PRO_EVENT_INVALID FIT_ENUM_INVALID +#define FIT_CLIMB_PRO_EVENT_APPROACH ((FIT_CLIMB_PRO_EVENT)0) +#define FIT_CLIMB_PRO_EVENT_START ((FIT_CLIMB_PRO_EVENT)1) +#define FIT_CLIMB_PRO_EVENT_COMPLETE ((FIT_CLIMB_PRO_EVENT)2) +#define FIT_CLIMB_PRO_EVENT_COUNT 3 + +typedef FIT_ENUM FIT_TAP_SENSITIVITY; +#define FIT_TAP_SENSITIVITY_INVALID FIT_ENUM_INVALID +#define FIT_TAP_SENSITIVITY_HIGH ((FIT_TAP_SENSITIVITY)0) +#define FIT_TAP_SENSITIVITY_MEDIUM ((FIT_TAP_SENSITIVITY)1) +#define FIT_TAP_SENSITIVITY_LOW ((FIT_TAP_SENSITIVITY)2) +#define FIT_TAP_SENSITIVITY_COUNT 3 + +typedef FIT_ENUM FIT_RADAR_THREAT_LEVEL_TYPE; +#define FIT_RADAR_THREAT_LEVEL_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_UNKNOWN ((FIT_RADAR_THREAT_LEVEL_TYPE)0) +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_NONE ((FIT_RADAR_THREAT_LEVEL_TYPE)1) +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_APPROACHING ((FIT_RADAR_THREAT_LEVEL_TYPE)2) +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_APPROACHING_FAST ((FIT_RADAR_THREAT_LEVEL_TYPE)3) +#define FIT_RADAR_THREAT_LEVEL_TYPE_COUNT 4 + + +/////////////////////////////////////////////////////////////////////// +// Message Conversion Structures +/////////////////////////////////////////////////////////////////////// + +typedef struct +{ + FIT_UINT8 base_type; + FIT_UINT16 offset_in; + FIT_UINT16 offset_local; + FIT_UINT8 size; + FIT_UINT8 num; +} FIT_FIELD_CONVERT; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_FIELD_CONVERT fields[91]; +} FIT_MESG_CONVERT; + + +/////////////////////////////////////////////////////////////////////// +// Messages +/////////////////////////////////////////////////////////////////////// + +#define FIT_MESG_SIZE 254 +#define FIT_MESG_DEF_SIZE 278 + +// pad message + +#define FIT_PAD_MESG_DEF_SIZE 5 + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; +} FIT_PAD_MESG_DEF; + + +// file_id message + +#define FIT_FILE_ID_MESG_SIZE 35 +#define FIT_FILE_ID_MESG_DEF_SIZE 26 +#define FIT_FILE_ID_MESG_PRODUCT_NAME_COUNT 20 + +typedef struct +{ + FIT_UINT32Z serial_number; // + FIT_DATE_TIME time_created; // Only set for files that are can be created/erased. + FIT_STRING product_name[FIT_FILE_ID_MESG_PRODUCT_NAME_COUNT]; // Optional free form string to indicate the devices name or model + FIT_MANUFACTURER manufacturer; // + FIT_UINT16 product; // + FIT_UINT16 number; // Only set for files that are not created/erased. + FIT_FILE type; // +} FIT_FILE_ID_MESG; + +typedef FIT_UINT8 FIT_FILE_ID_FIELD_NUM; + +#define FIT_FILE_ID_FIELD_NUM_SERIAL_NUMBER ((FIT_FILE_ID_FIELD_NUM)3) +#define FIT_FILE_ID_FIELD_NUM_TIME_CREATED ((FIT_FILE_ID_FIELD_NUM)4) +#define FIT_FILE_ID_FIELD_NUM_PRODUCT_NAME ((FIT_FILE_ID_FIELD_NUM)8) +#define FIT_FILE_ID_FIELD_NUM_MANUFACTURER ((FIT_FILE_ID_FIELD_NUM)1) +#define FIT_FILE_ID_FIELD_NUM_PRODUCT ((FIT_FILE_ID_FIELD_NUM)2) +#define FIT_FILE_ID_FIELD_NUM_NUMBER ((FIT_FILE_ID_FIELD_NUM)5) +#define FIT_FILE_ID_FIELD_NUM_TYPE ((FIT_FILE_ID_FIELD_NUM)0) + +typedef enum +{ + FIT_FILE_ID_MESG_SERIAL_NUMBER, + FIT_FILE_ID_MESG_TIME_CREATED, + FIT_FILE_ID_MESG_PRODUCT_NAME, + FIT_FILE_ID_MESG_MANUFACTURER, + FIT_FILE_ID_MESG_PRODUCT, + FIT_FILE_ID_MESG_NUMBER, + FIT_FILE_ID_MESG_TYPE, + FIT_FILE_ID_MESG_FIELDS +} FIT_FILE_ID_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_FILE_ID_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_FILE_ID_MESG_DEF; + +// file_creator message + +#define FIT_FILE_CREATOR_MESG_SIZE 3 +#define FIT_FILE_CREATOR_MESG_DEF_SIZE 11 + +typedef struct +{ + FIT_UINT16 software_version; // + FIT_UINT8 hardware_version; // +} FIT_FILE_CREATOR_MESG; + +typedef FIT_UINT8 FIT_FILE_CREATOR_FIELD_NUM; + +#define FIT_FILE_CREATOR_FIELD_NUM_SOFTWARE_VERSION ((FIT_FILE_CREATOR_FIELD_NUM)0) +#define FIT_FILE_CREATOR_FIELD_NUM_HARDWARE_VERSION ((FIT_FILE_CREATOR_FIELD_NUM)1) + +typedef enum +{ + FIT_FILE_CREATOR_MESG_SOFTWARE_VERSION, + FIT_FILE_CREATOR_MESG_HARDWARE_VERSION, + FIT_FILE_CREATOR_MESG_FIELDS +} FIT_FILE_CREATOR_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_FILE_CREATOR_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_FILE_CREATOR_MESG_DEF; + +// software message + +#define FIT_SOFTWARE_MESG_SIZE 20 +#define FIT_SOFTWARE_MESG_DEF_SIZE 14 +#define FIT_SOFTWARE_MESG_PART_NUMBER_COUNT 16 + +typedef struct +{ + FIT_STRING part_number[FIT_SOFTWARE_MESG_PART_NUMBER_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 version; // +} FIT_SOFTWARE_MESG; + +typedef FIT_UINT8 FIT_SOFTWARE_FIELD_NUM; + +#define FIT_SOFTWARE_FIELD_NUM_PART_NUMBER ((FIT_SOFTWARE_FIELD_NUM)5) +#define FIT_SOFTWARE_FIELD_NUM_MESSAGE_INDEX ((FIT_SOFTWARE_FIELD_NUM)254) +#define FIT_SOFTWARE_FIELD_NUM_VERSION ((FIT_SOFTWARE_FIELD_NUM)3) + +typedef enum +{ + FIT_SOFTWARE_MESG_PART_NUMBER, + FIT_SOFTWARE_MESG_MESSAGE_INDEX, + FIT_SOFTWARE_MESG_VERSION, + FIT_SOFTWARE_MESG_FIELDS +} FIT_SOFTWARE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SOFTWARE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SOFTWARE_MESG_DEF; + +// slave_device message + +#define FIT_SLAVE_DEVICE_MESG_SIZE 4 +#define FIT_SLAVE_DEVICE_MESG_DEF_SIZE 11 + +typedef struct +{ + FIT_MANUFACTURER manufacturer; // + FIT_UINT16 product; // +} FIT_SLAVE_DEVICE_MESG; + +typedef FIT_UINT8 FIT_SLAVE_DEVICE_FIELD_NUM; + +#define FIT_SLAVE_DEVICE_FIELD_NUM_MANUFACTURER ((FIT_SLAVE_DEVICE_FIELD_NUM)0) +#define FIT_SLAVE_DEVICE_FIELD_NUM_PRODUCT ((FIT_SLAVE_DEVICE_FIELD_NUM)1) + +typedef enum +{ + FIT_SLAVE_DEVICE_MESG_MANUFACTURER, + FIT_SLAVE_DEVICE_MESG_PRODUCT, + FIT_SLAVE_DEVICE_MESG_FIELDS +} FIT_SLAVE_DEVICE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SLAVE_DEVICE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SLAVE_DEVICE_MESG_DEF; + +// capabilities message + +#define FIT_CAPABILITIES_MESG_SIZE 13 +#define FIT_CAPABILITIES_MESG_DEF_SIZE 17 +#define FIT_CAPABILITIES_MESG_LANGUAGES_COUNT 4 +#define FIT_CAPABILITIES_MESG_SPORTS_COUNT 1 + +typedef struct +{ + FIT_UINT8Z languages[FIT_CAPABILITIES_MESG_LANGUAGES_COUNT]; // Use language_bits_x types where x is index of array. + FIT_WORKOUT_CAPABILITIES workouts_supported; // + FIT_CONNECTIVITY_CAPABILITIES connectivity_supported; // + FIT_SPORT_BITS_0 sports[FIT_CAPABILITIES_MESG_SPORTS_COUNT]; // Use sport_bits_x types where x is index of array. +} FIT_CAPABILITIES_MESG; + +typedef FIT_UINT8 FIT_CAPABILITIES_FIELD_NUM; + +#define FIT_CAPABILITIES_FIELD_NUM_LANGUAGES ((FIT_CAPABILITIES_FIELD_NUM)0) +#define FIT_CAPABILITIES_FIELD_NUM_WORKOUTS_SUPPORTED ((FIT_CAPABILITIES_FIELD_NUM)21) +#define FIT_CAPABILITIES_FIELD_NUM_CONNECTIVITY_SUPPORTED ((FIT_CAPABILITIES_FIELD_NUM)23) +#define FIT_CAPABILITIES_FIELD_NUM_SPORTS ((FIT_CAPABILITIES_FIELD_NUM)1) + +typedef enum +{ + FIT_CAPABILITIES_MESG_LANGUAGES, + FIT_CAPABILITIES_MESG_WORKOUTS_SUPPORTED, + FIT_CAPABILITIES_MESG_CONNECTIVITY_SUPPORTED, + FIT_CAPABILITIES_MESG_SPORTS, + FIT_CAPABILITIES_MESG_FIELDS +} FIT_CAPABILITIES_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_CAPABILITIES_MESG_DEF; + +// file_capabilities message + +#define FIT_FILE_CAPABILITIES_MESG_SIZE 26 +#define FIT_FILE_CAPABILITIES_MESG_DEF_SIZE 23 +#define FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT 16 + +typedef struct +{ + FIT_STRING directory[FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT]; // + FIT_UINT32 max_size; // 1 * bytes + 0, + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 max_count; // + FIT_FILE type; // + FIT_FILE_FLAGS flags; // +} FIT_FILE_CAPABILITIES_MESG; + +typedef FIT_UINT8 FIT_FILE_CAPABILITIES_FIELD_NUM; + +#define FIT_FILE_CAPABILITIES_FIELD_NUM_DIRECTORY ((FIT_FILE_CAPABILITIES_FIELD_NUM)2) +#define FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_SIZE ((FIT_FILE_CAPABILITIES_FIELD_NUM)4) +#define FIT_FILE_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX ((FIT_FILE_CAPABILITIES_FIELD_NUM)254) +#define FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_COUNT ((FIT_FILE_CAPABILITIES_FIELD_NUM)3) +#define FIT_FILE_CAPABILITIES_FIELD_NUM_TYPE ((FIT_FILE_CAPABILITIES_FIELD_NUM)0) +#define FIT_FILE_CAPABILITIES_FIELD_NUM_FLAGS ((FIT_FILE_CAPABILITIES_FIELD_NUM)1) + +typedef enum +{ + FIT_FILE_CAPABILITIES_MESG_DIRECTORY, + FIT_FILE_CAPABILITIES_MESG_MAX_SIZE, + FIT_FILE_CAPABILITIES_MESG_MESSAGE_INDEX, + FIT_FILE_CAPABILITIES_MESG_MAX_COUNT, + FIT_FILE_CAPABILITIES_MESG_TYPE, + FIT_FILE_CAPABILITIES_MESG_FLAGS, + FIT_FILE_CAPABILITIES_MESG_FIELDS +} FIT_FILE_CAPABILITIES_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_FILE_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_FILE_CAPABILITIES_MESG_DEF; + +// mesg_capabilities message + +#define FIT_MESG_CAPABILITIES_MESG_SIZE 8 +#define FIT_MESG_CAPABILITIES_MESG_DEF_SIZE 20 + +typedef struct +{ + FIT_MESSAGE_INDEX message_index; // + FIT_MESG_NUM mesg_num; // + FIT_UINT16 count; // + FIT_FILE file; // + FIT_MESG_COUNT count_type; // +} FIT_MESG_CAPABILITIES_MESG; + +typedef FIT_UINT8 FIT_MESG_CAPABILITIES_FIELD_NUM; + +#define FIT_MESG_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX ((FIT_MESG_CAPABILITIES_FIELD_NUM)254) +#define FIT_MESG_CAPABILITIES_FIELD_NUM_MESG_NUM ((FIT_MESG_CAPABILITIES_FIELD_NUM)1) +#define FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT ((FIT_MESG_CAPABILITIES_FIELD_NUM)3) +#define FIT_MESG_CAPABILITIES_FIELD_NUM_FILE ((FIT_MESG_CAPABILITIES_FIELD_NUM)0) +#define FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT_TYPE ((FIT_MESG_CAPABILITIES_FIELD_NUM)2) + +typedef enum +{ + FIT_MESG_CAPABILITIES_MESG_MESSAGE_INDEX, + FIT_MESG_CAPABILITIES_MESG_MESG_NUM, + FIT_MESG_CAPABILITIES_MESG_COUNT, + FIT_MESG_CAPABILITIES_MESG_FILE, + FIT_MESG_CAPABILITIES_MESG_COUNT_TYPE, + FIT_MESG_CAPABILITIES_MESG_FIELDS +} FIT_MESG_CAPABILITIES_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_MESG_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_MESG_CAPABILITIES_MESG_DEF; + +// field_capabilities message + +#define FIT_FIELD_CAPABILITIES_MESG_SIZE 8 +#define FIT_FIELD_CAPABILITIES_MESG_DEF_SIZE 20 + +typedef struct +{ + FIT_MESSAGE_INDEX message_index; // + FIT_MESG_NUM mesg_num; // + FIT_UINT16 count; // + FIT_FILE file; // + FIT_UINT8 field_num; // +} FIT_FIELD_CAPABILITIES_MESG; + +typedef FIT_UINT8 FIT_FIELD_CAPABILITIES_FIELD_NUM; + +#define FIT_FIELD_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX ((FIT_FIELD_CAPABILITIES_FIELD_NUM)254) +#define FIT_FIELD_CAPABILITIES_FIELD_NUM_MESG_NUM ((FIT_FIELD_CAPABILITIES_FIELD_NUM)1) +#define FIT_FIELD_CAPABILITIES_FIELD_NUM_COUNT ((FIT_FIELD_CAPABILITIES_FIELD_NUM)3) +#define FIT_FIELD_CAPABILITIES_FIELD_NUM_FILE ((FIT_FIELD_CAPABILITIES_FIELD_NUM)0) +#define FIT_FIELD_CAPABILITIES_FIELD_NUM_FIELD_NUM ((FIT_FIELD_CAPABILITIES_FIELD_NUM)2) + +typedef enum +{ + FIT_FIELD_CAPABILITIES_MESG_MESSAGE_INDEX, + FIT_FIELD_CAPABILITIES_MESG_MESG_NUM, + FIT_FIELD_CAPABILITIES_MESG_COUNT, + FIT_FIELD_CAPABILITIES_MESG_FILE, + FIT_FIELD_CAPABILITIES_MESG_FIELD_NUM, + FIT_FIELD_CAPABILITIES_MESG_FIELDS +} FIT_FIELD_CAPABILITIES_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_FIELD_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_FIELD_CAPABILITIES_MESG_DEF; + +// device_settings message + +#define FIT_DEVICE_SETTINGS_MESG_SIZE 36 +#define FIT_DEVICE_SETTINGS_MESG_DEF_SIZE 56 +#define FIT_DEVICE_SETTINGS_MESG_TIME_OFFSET_COUNT 2 +#define FIT_DEVICE_SETTINGS_MESG_PAGES_ENABLED_COUNT 1 +#define FIT_DEVICE_SETTINGS_MESG_DEFAULT_PAGE_COUNT 1 +#define FIT_DEVICE_SETTINGS_MESG_TIME_MODE_COUNT 2 +#define FIT_DEVICE_SETTINGS_MESG_TIME_ZONE_OFFSET_COUNT 2 + +typedef struct +{ + FIT_UINT32 utc_offset; // Offset from system time. Required to convert timestamp from system time to UTC. + FIT_UINT32 time_offset[FIT_DEVICE_SETTINGS_MESG_TIME_OFFSET_COUNT]; // 1 * s + 0, Offset from system time. + FIT_DATE_TIME clock_time; // UTC timestamp used to set the devices clock and date + FIT_UINT16 pages_enabled[FIT_DEVICE_SETTINGS_MESG_PAGES_ENABLED_COUNT]; // Bitfield to configure enabled screens for each supported loop + FIT_UINT16 default_page[FIT_DEVICE_SETTINGS_MESG_DEFAULT_PAGE_COUNT]; // Bitfield to indicate one page as default for each supported loop + FIT_UINT16 autosync_min_steps; // 1 * steps + 0, Minimum steps before an autosync can occur + FIT_UINT16 autosync_min_time; // 1 * minutes + 0, Minimum minutes before an autosync can occur + FIT_UINT8 active_time_zone; // Index into time zone arrays. + FIT_TIME_MODE time_mode[FIT_DEVICE_SETTINGS_MESG_TIME_MODE_COUNT]; // Display mode for the time + FIT_SINT8 time_zone_offset[FIT_DEVICE_SETTINGS_MESG_TIME_ZONE_OFFSET_COUNT]; // 4 * hr + 0, timezone offset in 1/4 hour increments + FIT_BACKLIGHT_MODE backlight_mode; // Mode for backlight + FIT_BOOL activity_tracker_enabled; // Enabled state of the activity tracker functionality + FIT_BOOL move_alert_enabled; // Enabled state of the move alert + FIT_DATE_MODE date_mode; // Display mode for the date + FIT_DISPLAY_ORIENTATION display_orientation; // + FIT_SIDE mounting_side; // + FIT_TAP_SENSITIVITY tap_sensitivity; // Used to hold the tap threshold setting +} FIT_DEVICE_SETTINGS_MESG; + +typedef FIT_UINT8 FIT_DEVICE_SETTINGS_FIELD_NUM; + +#define FIT_DEVICE_SETTINGS_FIELD_NUM_UTC_OFFSET ((FIT_DEVICE_SETTINGS_FIELD_NUM)1) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_TIME_OFFSET ((FIT_DEVICE_SETTINGS_FIELD_NUM)2) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_CLOCK_TIME ((FIT_DEVICE_SETTINGS_FIELD_NUM)39) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_PAGES_ENABLED ((FIT_DEVICE_SETTINGS_FIELD_NUM)40) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_DEFAULT_PAGE ((FIT_DEVICE_SETTINGS_FIELD_NUM)57) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_AUTOSYNC_MIN_STEPS ((FIT_DEVICE_SETTINGS_FIELD_NUM)58) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_AUTOSYNC_MIN_TIME ((FIT_DEVICE_SETTINGS_FIELD_NUM)59) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_ACTIVE_TIME_ZONE ((FIT_DEVICE_SETTINGS_FIELD_NUM)0) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_TIME_MODE ((FIT_DEVICE_SETTINGS_FIELD_NUM)4) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_TIME_ZONE_OFFSET ((FIT_DEVICE_SETTINGS_FIELD_NUM)5) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_BACKLIGHT_MODE ((FIT_DEVICE_SETTINGS_FIELD_NUM)12) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_ACTIVITY_TRACKER_ENABLED ((FIT_DEVICE_SETTINGS_FIELD_NUM)36) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_MOVE_ALERT_ENABLED ((FIT_DEVICE_SETTINGS_FIELD_NUM)46) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_DATE_MODE ((FIT_DEVICE_SETTINGS_FIELD_NUM)47) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_DISPLAY_ORIENTATION ((FIT_DEVICE_SETTINGS_FIELD_NUM)55) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_MOUNTING_SIDE ((FIT_DEVICE_SETTINGS_FIELD_NUM)56) +#define FIT_DEVICE_SETTINGS_FIELD_NUM_TAP_SENSITIVITY ((FIT_DEVICE_SETTINGS_FIELD_NUM)174) + +typedef enum +{ + FIT_DEVICE_SETTINGS_MESG_UTC_OFFSET, + FIT_DEVICE_SETTINGS_MESG_TIME_OFFSET, + FIT_DEVICE_SETTINGS_MESG_CLOCK_TIME, + FIT_DEVICE_SETTINGS_MESG_PAGES_ENABLED, + FIT_DEVICE_SETTINGS_MESG_DEFAULT_PAGE, + FIT_DEVICE_SETTINGS_MESG_AUTOSYNC_MIN_STEPS, + FIT_DEVICE_SETTINGS_MESG_AUTOSYNC_MIN_TIME, + FIT_DEVICE_SETTINGS_MESG_ACTIVE_TIME_ZONE, + FIT_DEVICE_SETTINGS_MESG_TIME_MODE, + FIT_DEVICE_SETTINGS_MESG_TIME_ZONE_OFFSET, + FIT_DEVICE_SETTINGS_MESG_BACKLIGHT_MODE, + FIT_DEVICE_SETTINGS_MESG_ACTIVITY_TRACKER_ENABLED, + FIT_DEVICE_SETTINGS_MESG_MOVE_ALERT_ENABLED, + FIT_DEVICE_SETTINGS_MESG_DATE_MODE, + FIT_DEVICE_SETTINGS_MESG_DISPLAY_ORIENTATION, + FIT_DEVICE_SETTINGS_MESG_MOUNTING_SIDE, + FIT_DEVICE_SETTINGS_MESG_TAP_SENSITIVITY, + FIT_DEVICE_SETTINGS_MESG_FIELDS +} FIT_DEVICE_SETTINGS_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_DEVICE_SETTINGS_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_DEVICE_SETTINGS_MESG_DEF; + +// user_profile message + +#define FIT_USER_PROFILE_MESG_SIZE 50 +#define FIT_USER_PROFILE_MESG_DEF_SIZE 80 +#define FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT 16 +#define FIT_USER_PROFILE_MESG_GLOBAL_ID_COUNT 6 + +typedef struct +{ + FIT_STRING friendly_name[FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 weight; // 10 * kg + 0, + FIT_USER_LOCAL_ID local_id; // + FIT_UINT16 user_running_step_length; // 1000 * m + 0, User defined running step length set to 0 for auto length + FIT_UINT16 user_walking_step_length; // 1000 * m + 0, User defined walking step length set to 0 for auto length + FIT_GENDER gender; // + FIT_UINT8 age; // 1 * years + 0, + FIT_UINT8 height; // 100 * m + 0, + FIT_LANGUAGE language; // + FIT_DISPLAY_MEASURE elev_setting; // + FIT_DISPLAY_MEASURE weight_setting; // + FIT_UINT8 resting_heart_rate; // 1 * bpm + 0, + FIT_UINT8 default_max_running_heart_rate; // 1 * bpm + 0, + FIT_UINT8 default_max_biking_heart_rate; // 1 * bpm + 0, + FIT_UINT8 default_max_heart_rate; // 1 * bpm + 0, + FIT_DISPLAY_HEART hr_setting; // + FIT_DISPLAY_MEASURE speed_setting; // + FIT_DISPLAY_MEASURE dist_setting; // + FIT_DISPLAY_POWER power_setting; // + FIT_ACTIVITY_CLASS activity_class; // + FIT_DISPLAY_POSITION position_setting; // + FIT_DISPLAY_MEASURE temperature_setting; // + FIT_BYTE global_id[FIT_USER_PROFILE_MESG_GLOBAL_ID_COUNT]; // + FIT_DISPLAY_MEASURE height_setting; // +} FIT_USER_PROFILE_MESG; + +typedef FIT_UINT8 FIT_USER_PROFILE_FIELD_NUM; + +#define FIT_USER_PROFILE_FIELD_NUM_FRIENDLY_NAME ((FIT_USER_PROFILE_FIELD_NUM)0) +#define FIT_USER_PROFILE_FIELD_NUM_MESSAGE_INDEX ((FIT_USER_PROFILE_FIELD_NUM)254) +#define FIT_USER_PROFILE_FIELD_NUM_WEIGHT ((FIT_USER_PROFILE_FIELD_NUM)4) +#define FIT_USER_PROFILE_FIELD_NUM_LOCAL_ID ((FIT_USER_PROFILE_FIELD_NUM)22) +#define FIT_USER_PROFILE_FIELD_NUM_USER_RUNNING_STEP_LENGTH ((FIT_USER_PROFILE_FIELD_NUM)31) +#define FIT_USER_PROFILE_FIELD_NUM_USER_WALKING_STEP_LENGTH ((FIT_USER_PROFILE_FIELD_NUM)32) +#define FIT_USER_PROFILE_FIELD_NUM_GENDER ((FIT_USER_PROFILE_FIELD_NUM)1) +#define FIT_USER_PROFILE_FIELD_NUM_AGE ((FIT_USER_PROFILE_FIELD_NUM)2) +#define FIT_USER_PROFILE_FIELD_NUM_HEIGHT ((FIT_USER_PROFILE_FIELD_NUM)3) +#define FIT_USER_PROFILE_FIELD_NUM_LANGUAGE ((FIT_USER_PROFILE_FIELD_NUM)5) +#define FIT_USER_PROFILE_FIELD_NUM_ELEV_SETTING ((FIT_USER_PROFILE_FIELD_NUM)6) +#define FIT_USER_PROFILE_FIELD_NUM_WEIGHT_SETTING ((FIT_USER_PROFILE_FIELD_NUM)7) +#define FIT_USER_PROFILE_FIELD_NUM_RESTING_HEART_RATE ((FIT_USER_PROFILE_FIELD_NUM)8) +#define FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_RUNNING_HEART_RATE ((FIT_USER_PROFILE_FIELD_NUM)9) +#define FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_BIKING_HEART_RATE ((FIT_USER_PROFILE_FIELD_NUM)10) +#define FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_HEART_RATE ((FIT_USER_PROFILE_FIELD_NUM)11) +#define FIT_USER_PROFILE_FIELD_NUM_HR_SETTING ((FIT_USER_PROFILE_FIELD_NUM)12) +#define FIT_USER_PROFILE_FIELD_NUM_SPEED_SETTING ((FIT_USER_PROFILE_FIELD_NUM)13) +#define FIT_USER_PROFILE_FIELD_NUM_DIST_SETTING ((FIT_USER_PROFILE_FIELD_NUM)14) +#define FIT_USER_PROFILE_FIELD_NUM_POWER_SETTING ((FIT_USER_PROFILE_FIELD_NUM)16) +#define FIT_USER_PROFILE_FIELD_NUM_ACTIVITY_CLASS ((FIT_USER_PROFILE_FIELD_NUM)17) +#define FIT_USER_PROFILE_FIELD_NUM_POSITION_SETTING ((FIT_USER_PROFILE_FIELD_NUM)18) +#define FIT_USER_PROFILE_FIELD_NUM_TEMPERATURE_SETTING ((FIT_USER_PROFILE_FIELD_NUM)21) +#define FIT_USER_PROFILE_FIELD_NUM_GLOBAL_ID ((FIT_USER_PROFILE_FIELD_NUM)23) +#define FIT_USER_PROFILE_FIELD_NUM_HEIGHT_SETTING ((FIT_USER_PROFILE_FIELD_NUM)30) + +typedef enum +{ + FIT_USER_PROFILE_MESG_FRIENDLY_NAME, + FIT_USER_PROFILE_MESG_MESSAGE_INDEX, + FIT_USER_PROFILE_MESG_WEIGHT, + FIT_USER_PROFILE_MESG_LOCAL_ID, + FIT_USER_PROFILE_MESG_USER_RUNNING_STEP_LENGTH, + FIT_USER_PROFILE_MESG_USER_WALKING_STEP_LENGTH, + FIT_USER_PROFILE_MESG_GENDER, + FIT_USER_PROFILE_MESG_AGE, + FIT_USER_PROFILE_MESG_HEIGHT, + FIT_USER_PROFILE_MESG_LANGUAGE, + FIT_USER_PROFILE_MESG_ELEV_SETTING, + FIT_USER_PROFILE_MESG_WEIGHT_SETTING, + FIT_USER_PROFILE_MESG_RESTING_HEART_RATE, + FIT_USER_PROFILE_MESG_DEFAULT_MAX_RUNNING_HEART_RATE, + FIT_USER_PROFILE_MESG_DEFAULT_MAX_BIKING_HEART_RATE, + FIT_USER_PROFILE_MESG_DEFAULT_MAX_HEART_RATE, + FIT_USER_PROFILE_MESG_HR_SETTING, + FIT_USER_PROFILE_MESG_SPEED_SETTING, + FIT_USER_PROFILE_MESG_DIST_SETTING, + FIT_USER_PROFILE_MESG_POWER_SETTING, + FIT_USER_PROFILE_MESG_ACTIVITY_CLASS, + FIT_USER_PROFILE_MESG_POSITION_SETTING, + FIT_USER_PROFILE_MESG_TEMPERATURE_SETTING, + FIT_USER_PROFILE_MESG_GLOBAL_ID, + FIT_USER_PROFILE_MESG_HEIGHT_SETTING, + FIT_USER_PROFILE_MESG_FIELDS +} FIT_USER_PROFILE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_USER_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_USER_PROFILE_MESG_DEF; + +// hrm_profile message + +#define FIT_HRM_PROFILE_MESG_SIZE 7 +#define FIT_HRM_PROFILE_MESG_DEF_SIZE 20 + +typedef struct +{ + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16Z hrm_ant_id; // + FIT_BOOL enabled; // + FIT_BOOL log_hrv; // + FIT_UINT8Z hrm_ant_id_trans_type; // +} FIT_HRM_PROFILE_MESG; + +typedef FIT_UINT8 FIT_HRM_PROFILE_FIELD_NUM; + +#define FIT_HRM_PROFILE_FIELD_NUM_MESSAGE_INDEX ((FIT_HRM_PROFILE_FIELD_NUM)254) +#define FIT_HRM_PROFILE_FIELD_NUM_HRM_ANT_ID ((FIT_HRM_PROFILE_FIELD_NUM)1) +#define FIT_HRM_PROFILE_FIELD_NUM_ENABLED ((FIT_HRM_PROFILE_FIELD_NUM)0) +#define FIT_HRM_PROFILE_FIELD_NUM_LOG_HRV ((FIT_HRM_PROFILE_FIELD_NUM)2) +#define FIT_HRM_PROFILE_FIELD_NUM_HRM_ANT_ID_TRANS_TYPE ((FIT_HRM_PROFILE_FIELD_NUM)3) + +typedef enum +{ + FIT_HRM_PROFILE_MESG_MESSAGE_INDEX, + FIT_HRM_PROFILE_MESG_HRM_ANT_ID, + FIT_HRM_PROFILE_MESG_ENABLED, + FIT_HRM_PROFILE_MESG_LOG_HRV, + FIT_HRM_PROFILE_MESG_HRM_ANT_ID_TRANS_TYPE, + FIT_HRM_PROFILE_MESG_FIELDS +} FIT_HRM_PROFILE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_HRM_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_HRM_PROFILE_MESG_DEF; + +// sdm_profile message + +#define FIT_SDM_PROFILE_MESG_SIZE 14 +#define FIT_SDM_PROFILE_MESG_DEF_SIZE 29 + +typedef struct +{ + FIT_UINT32 odometer; // 100 * m + 0, + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16Z sdm_ant_id; // + FIT_UINT16 sdm_cal_factor; // 10 * % + 0, + FIT_BOOL enabled; // + FIT_BOOL speed_source; // Use footpod for speed source instead of GPS + FIT_UINT8Z sdm_ant_id_trans_type; // + FIT_UINT8 odometer_rollover; // Rollover counter that can be used to extend the odometer +} FIT_SDM_PROFILE_MESG; + +typedef FIT_UINT8 FIT_SDM_PROFILE_FIELD_NUM; + +#define FIT_SDM_PROFILE_FIELD_NUM_ODOMETER ((FIT_SDM_PROFILE_FIELD_NUM)3) +#define FIT_SDM_PROFILE_FIELD_NUM_MESSAGE_INDEX ((FIT_SDM_PROFILE_FIELD_NUM)254) +#define FIT_SDM_PROFILE_FIELD_NUM_SDM_ANT_ID ((FIT_SDM_PROFILE_FIELD_NUM)1) +#define FIT_SDM_PROFILE_FIELD_NUM_SDM_CAL_FACTOR ((FIT_SDM_PROFILE_FIELD_NUM)2) +#define FIT_SDM_PROFILE_FIELD_NUM_ENABLED ((FIT_SDM_PROFILE_FIELD_NUM)0) +#define FIT_SDM_PROFILE_FIELD_NUM_SPEED_SOURCE ((FIT_SDM_PROFILE_FIELD_NUM)4) +#define FIT_SDM_PROFILE_FIELD_NUM_SDM_ANT_ID_TRANS_TYPE ((FIT_SDM_PROFILE_FIELD_NUM)5) +#define FIT_SDM_PROFILE_FIELD_NUM_ODOMETER_ROLLOVER ((FIT_SDM_PROFILE_FIELD_NUM)7) + +typedef enum +{ + FIT_SDM_PROFILE_MESG_ODOMETER, + FIT_SDM_PROFILE_MESG_MESSAGE_INDEX, + FIT_SDM_PROFILE_MESG_SDM_ANT_ID, + FIT_SDM_PROFILE_MESG_SDM_CAL_FACTOR, + FIT_SDM_PROFILE_MESG_ENABLED, + FIT_SDM_PROFILE_MESG_SPEED_SOURCE, + FIT_SDM_PROFILE_MESG_SDM_ANT_ID_TRANS_TYPE, + FIT_SDM_PROFILE_MESG_ODOMETER_ROLLOVER, + FIT_SDM_PROFILE_MESG_FIELDS +} FIT_SDM_PROFILE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SDM_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SDM_PROFILE_MESG_DEF; + +// bike_profile message + +#define FIT_BIKE_PROFILE_MESG_SIZE 59 +#define FIT_BIKE_PROFILE_MESG_DEF_SIZE 101 +#define FIT_BIKE_PROFILE_MESG_NAME_COUNT 16 +#define FIT_BIKE_PROFILE_MESG_FRONT_GEAR_COUNT 1 +#define FIT_BIKE_PROFILE_MESG_REAR_GEAR_COUNT 1 + +typedef struct +{ + FIT_STRING name[FIT_BIKE_PROFILE_MESG_NAME_COUNT]; // + FIT_UINT32 odometer; // 100 * m + 0, + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16Z bike_spd_ant_id; // + FIT_UINT16Z bike_cad_ant_id; // + FIT_UINT16Z bike_spdcad_ant_id; // + FIT_UINT16Z bike_power_ant_id; // + FIT_UINT16 custom_wheelsize; // 1000 * m + 0, + FIT_UINT16 auto_wheelsize; // 1000 * m + 0, + FIT_UINT16 bike_weight; // 10 * kg + 0, + FIT_UINT16 power_cal_factor; // 10 * % + 0, + FIT_SPORT sport; // + FIT_SUB_SPORT sub_sport; // + FIT_BOOL auto_wheel_cal; // + FIT_BOOL auto_power_zero; // + FIT_UINT8 id; // + FIT_BOOL spd_enabled; // + FIT_BOOL cad_enabled; // + FIT_BOOL spdcad_enabled; // + FIT_BOOL power_enabled; // + FIT_UINT8 crank_length; // 2 * mm + -110, + FIT_BOOL enabled; // + FIT_UINT8Z bike_spd_ant_id_trans_type; // + FIT_UINT8Z bike_cad_ant_id_trans_type; // + FIT_UINT8Z bike_spdcad_ant_id_trans_type; // + FIT_UINT8Z bike_power_ant_id_trans_type; // + FIT_UINT8 odometer_rollover; // Rollover counter that can be used to extend the odometer + FIT_UINT8Z front_gear_num; // Number of front gears + FIT_UINT8Z front_gear[FIT_BIKE_PROFILE_MESG_FRONT_GEAR_COUNT]; // Number of teeth on each gear 0 is innermost + FIT_UINT8Z rear_gear_num; // Number of rear gears + FIT_UINT8Z rear_gear[FIT_BIKE_PROFILE_MESG_REAR_GEAR_COUNT]; // Number of teeth on each gear 0 is innermost + FIT_BOOL shimano_di2_enabled; // +} FIT_BIKE_PROFILE_MESG; + +typedef FIT_UINT8 FIT_BIKE_PROFILE_FIELD_NUM; + +#define FIT_BIKE_PROFILE_FIELD_NUM_NAME ((FIT_BIKE_PROFILE_FIELD_NUM)0) +#define FIT_BIKE_PROFILE_FIELD_NUM_ODOMETER ((FIT_BIKE_PROFILE_FIELD_NUM)3) +#define FIT_BIKE_PROFILE_FIELD_NUM_MESSAGE_INDEX ((FIT_BIKE_PROFILE_FIELD_NUM)254) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPD_ANT_ID ((FIT_BIKE_PROFILE_FIELD_NUM)4) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_CAD_ANT_ID ((FIT_BIKE_PROFILE_FIELD_NUM)5) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPDCAD_ANT_ID ((FIT_BIKE_PROFILE_FIELD_NUM)6) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_POWER_ANT_ID ((FIT_BIKE_PROFILE_FIELD_NUM)7) +#define FIT_BIKE_PROFILE_FIELD_NUM_CUSTOM_WHEELSIZE ((FIT_BIKE_PROFILE_FIELD_NUM)8) +#define FIT_BIKE_PROFILE_FIELD_NUM_AUTO_WHEELSIZE ((FIT_BIKE_PROFILE_FIELD_NUM)9) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_WEIGHT ((FIT_BIKE_PROFILE_FIELD_NUM)10) +#define FIT_BIKE_PROFILE_FIELD_NUM_POWER_CAL_FACTOR ((FIT_BIKE_PROFILE_FIELD_NUM)11) +#define FIT_BIKE_PROFILE_FIELD_NUM_SPORT ((FIT_BIKE_PROFILE_FIELD_NUM)1) +#define FIT_BIKE_PROFILE_FIELD_NUM_SUB_SPORT ((FIT_BIKE_PROFILE_FIELD_NUM)2) +#define FIT_BIKE_PROFILE_FIELD_NUM_AUTO_WHEEL_CAL ((FIT_BIKE_PROFILE_FIELD_NUM)12) +#define FIT_BIKE_PROFILE_FIELD_NUM_AUTO_POWER_ZERO ((FIT_BIKE_PROFILE_FIELD_NUM)13) +#define FIT_BIKE_PROFILE_FIELD_NUM_ID ((FIT_BIKE_PROFILE_FIELD_NUM)14) +#define FIT_BIKE_PROFILE_FIELD_NUM_SPD_ENABLED ((FIT_BIKE_PROFILE_FIELD_NUM)15) +#define FIT_BIKE_PROFILE_FIELD_NUM_CAD_ENABLED ((FIT_BIKE_PROFILE_FIELD_NUM)16) +#define FIT_BIKE_PROFILE_FIELD_NUM_SPDCAD_ENABLED ((FIT_BIKE_PROFILE_FIELD_NUM)17) +#define FIT_BIKE_PROFILE_FIELD_NUM_POWER_ENABLED ((FIT_BIKE_PROFILE_FIELD_NUM)18) +#define FIT_BIKE_PROFILE_FIELD_NUM_CRANK_LENGTH ((FIT_BIKE_PROFILE_FIELD_NUM)19) +#define FIT_BIKE_PROFILE_FIELD_NUM_ENABLED ((FIT_BIKE_PROFILE_FIELD_NUM)20) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPD_ANT_ID_TRANS_TYPE ((FIT_BIKE_PROFILE_FIELD_NUM)21) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_CAD_ANT_ID_TRANS_TYPE ((FIT_BIKE_PROFILE_FIELD_NUM)22) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPDCAD_ANT_ID_TRANS_TYPE ((FIT_BIKE_PROFILE_FIELD_NUM)23) +#define FIT_BIKE_PROFILE_FIELD_NUM_BIKE_POWER_ANT_ID_TRANS_TYPE ((FIT_BIKE_PROFILE_FIELD_NUM)24) +#define FIT_BIKE_PROFILE_FIELD_NUM_ODOMETER_ROLLOVER ((FIT_BIKE_PROFILE_FIELD_NUM)37) +#define FIT_BIKE_PROFILE_FIELD_NUM_FRONT_GEAR_NUM ((FIT_BIKE_PROFILE_FIELD_NUM)38) +#define FIT_BIKE_PROFILE_FIELD_NUM_FRONT_GEAR ((FIT_BIKE_PROFILE_FIELD_NUM)39) +#define FIT_BIKE_PROFILE_FIELD_NUM_REAR_GEAR_NUM ((FIT_BIKE_PROFILE_FIELD_NUM)40) +#define FIT_BIKE_PROFILE_FIELD_NUM_REAR_GEAR ((FIT_BIKE_PROFILE_FIELD_NUM)41) +#define FIT_BIKE_PROFILE_FIELD_NUM_SHIMANO_DI2_ENABLED ((FIT_BIKE_PROFILE_FIELD_NUM)44) + +typedef enum +{ + FIT_BIKE_PROFILE_MESG_NAME, + FIT_BIKE_PROFILE_MESG_ODOMETER, + FIT_BIKE_PROFILE_MESG_MESSAGE_INDEX, + FIT_BIKE_PROFILE_MESG_BIKE_SPD_ANT_ID, + FIT_BIKE_PROFILE_MESG_BIKE_CAD_ANT_ID, + FIT_BIKE_PROFILE_MESG_BIKE_SPDCAD_ANT_ID, + FIT_BIKE_PROFILE_MESG_BIKE_POWER_ANT_ID, + FIT_BIKE_PROFILE_MESG_CUSTOM_WHEELSIZE, + FIT_BIKE_PROFILE_MESG_AUTO_WHEELSIZE, + FIT_BIKE_PROFILE_MESG_BIKE_WEIGHT, + FIT_BIKE_PROFILE_MESG_POWER_CAL_FACTOR, + FIT_BIKE_PROFILE_MESG_SPORT, + FIT_BIKE_PROFILE_MESG_SUB_SPORT, + FIT_BIKE_PROFILE_MESG_AUTO_WHEEL_CAL, + FIT_BIKE_PROFILE_MESG_AUTO_POWER_ZERO, + FIT_BIKE_PROFILE_MESG_ID, + FIT_BIKE_PROFILE_MESG_SPD_ENABLED, + FIT_BIKE_PROFILE_MESG_CAD_ENABLED, + FIT_BIKE_PROFILE_MESG_SPDCAD_ENABLED, + FIT_BIKE_PROFILE_MESG_POWER_ENABLED, + FIT_BIKE_PROFILE_MESG_CRANK_LENGTH, + FIT_BIKE_PROFILE_MESG_ENABLED, + FIT_BIKE_PROFILE_MESG_BIKE_SPD_ANT_ID_TRANS_TYPE, + FIT_BIKE_PROFILE_MESG_BIKE_CAD_ANT_ID_TRANS_TYPE, + FIT_BIKE_PROFILE_MESG_BIKE_SPDCAD_ANT_ID_TRANS_TYPE, + FIT_BIKE_PROFILE_MESG_BIKE_POWER_ANT_ID_TRANS_TYPE, + FIT_BIKE_PROFILE_MESG_ODOMETER_ROLLOVER, + FIT_BIKE_PROFILE_MESG_FRONT_GEAR_NUM, + FIT_BIKE_PROFILE_MESG_FRONT_GEAR, + FIT_BIKE_PROFILE_MESG_REAR_GEAR_NUM, + FIT_BIKE_PROFILE_MESG_REAR_GEAR, + FIT_BIKE_PROFILE_MESG_SHIMANO_DI2_ENABLED, + FIT_BIKE_PROFILE_MESG_FIELDS +} FIT_BIKE_PROFILE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_BIKE_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_BIKE_PROFILE_MESG_DEF; + +// connectivity message + +#define FIT_CONNECTIVITY_MESG_SIZE 36 +#define FIT_CONNECTIVITY_MESG_DEF_SIZE 44 +#define FIT_CONNECTIVITY_MESG_NAME_COUNT 24 + +typedef struct +{ + FIT_STRING name[FIT_CONNECTIVITY_MESG_NAME_COUNT]; // + FIT_BOOL bluetooth_enabled; // Use Bluetooth for connectivity features + FIT_BOOL bluetooth_le_enabled; // Use Bluetooth Low Energy for connectivity features + FIT_BOOL ant_enabled; // Use ANT for connectivity features + FIT_BOOL live_tracking_enabled; // + FIT_BOOL weather_conditions_enabled; // + FIT_BOOL weather_alerts_enabled; // + FIT_BOOL auto_activity_upload_enabled; // + FIT_BOOL course_download_enabled; // + FIT_BOOL workout_download_enabled; // + FIT_BOOL gps_ephemeris_download_enabled; // + FIT_BOOL incident_detection_enabled; // + FIT_BOOL grouptrack_enabled; // +} FIT_CONNECTIVITY_MESG; + +typedef FIT_UINT8 FIT_CONNECTIVITY_FIELD_NUM; + +#define FIT_CONNECTIVITY_FIELD_NUM_NAME ((FIT_CONNECTIVITY_FIELD_NUM)3) +#define FIT_CONNECTIVITY_FIELD_NUM_BLUETOOTH_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)0) +#define FIT_CONNECTIVITY_FIELD_NUM_BLUETOOTH_LE_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)1) +#define FIT_CONNECTIVITY_FIELD_NUM_ANT_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)2) +#define FIT_CONNECTIVITY_FIELD_NUM_LIVE_TRACKING_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)4) +#define FIT_CONNECTIVITY_FIELD_NUM_WEATHER_CONDITIONS_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)5) +#define FIT_CONNECTIVITY_FIELD_NUM_WEATHER_ALERTS_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)6) +#define FIT_CONNECTIVITY_FIELD_NUM_AUTO_ACTIVITY_UPLOAD_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)7) +#define FIT_CONNECTIVITY_FIELD_NUM_COURSE_DOWNLOAD_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)8) +#define FIT_CONNECTIVITY_FIELD_NUM_WORKOUT_DOWNLOAD_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)9) +#define FIT_CONNECTIVITY_FIELD_NUM_GPS_EPHEMERIS_DOWNLOAD_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)10) +#define FIT_CONNECTIVITY_FIELD_NUM_INCIDENT_DETECTION_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)11) +#define FIT_CONNECTIVITY_FIELD_NUM_GROUPTRACK_ENABLED ((FIT_CONNECTIVITY_FIELD_NUM)12) + +typedef enum +{ + FIT_CONNECTIVITY_MESG_NAME, + FIT_CONNECTIVITY_MESG_BLUETOOTH_ENABLED, + FIT_CONNECTIVITY_MESG_BLUETOOTH_LE_ENABLED, + FIT_CONNECTIVITY_MESG_ANT_ENABLED, + FIT_CONNECTIVITY_MESG_LIVE_TRACKING_ENABLED, + FIT_CONNECTIVITY_MESG_WEATHER_CONDITIONS_ENABLED, + FIT_CONNECTIVITY_MESG_WEATHER_ALERTS_ENABLED, + FIT_CONNECTIVITY_MESG_AUTO_ACTIVITY_UPLOAD_ENABLED, + FIT_CONNECTIVITY_MESG_COURSE_DOWNLOAD_ENABLED, + FIT_CONNECTIVITY_MESG_WORKOUT_DOWNLOAD_ENABLED, + FIT_CONNECTIVITY_MESG_GPS_EPHEMERIS_DOWNLOAD_ENABLED, + FIT_CONNECTIVITY_MESG_INCIDENT_DETECTION_ENABLED, + FIT_CONNECTIVITY_MESG_GROUPTRACK_ENABLED, + FIT_CONNECTIVITY_MESG_FIELDS +} FIT_CONNECTIVITY_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_CONNECTIVITY_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_CONNECTIVITY_MESG_DEF; + +// zones_target message + +#define FIT_ZONES_TARGET_MESG_SIZE 6 +#define FIT_ZONES_TARGET_MESG_DEF_SIZE 20 + +typedef struct +{ + FIT_UINT16 functional_threshold_power; // + FIT_UINT8 max_heart_rate; // + FIT_UINT8 threshold_heart_rate; // + FIT_HR_ZONE_CALC hr_calc_type; // + FIT_PWR_ZONE_CALC pwr_calc_type; // +} FIT_ZONES_TARGET_MESG; + +typedef FIT_UINT8 FIT_ZONES_TARGET_FIELD_NUM; + +#define FIT_ZONES_TARGET_FIELD_NUM_FUNCTIONAL_THRESHOLD_POWER ((FIT_ZONES_TARGET_FIELD_NUM)3) +#define FIT_ZONES_TARGET_FIELD_NUM_MAX_HEART_RATE ((FIT_ZONES_TARGET_FIELD_NUM)1) +#define FIT_ZONES_TARGET_FIELD_NUM_THRESHOLD_HEART_RATE ((FIT_ZONES_TARGET_FIELD_NUM)2) +#define FIT_ZONES_TARGET_FIELD_NUM_HR_CALC_TYPE ((FIT_ZONES_TARGET_FIELD_NUM)5) +#define FIT_ZONES_TARGET_FIELD_NUM_PWR_CALC_TYPE ((FIT_ZONES_TARGET_FIELD_NUM)7) + +typedef enum +{ + FIT_ZONES_TARGET_MESG_FUNCTIONAL_THRESHOLD_POWER, + FIT_ZONES_TARGET_MESG_MAX_HEART_RATE, + FIT_ZONES_TARGET_MESG_THRESHOLD_HEART_RATE, + FIT_ZONES_TARGET_MESG_HR_CALC_TYPE, + FIT_ZONES_TARGET_MESG_PWR_CALC_TYPE, + FIT_ZONES_TARGET_MESG_FIELDS +} FIT_ZONES_TARGET_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_ZONES_TARGET_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_ZONES_TARGET_MESG_DEF; + +// sport message + +#define FIT_SPORT_MESG_SIZE 18 +#define FIT_SPORT_MESG_DEF_SIZE 14 +#define FIT_SPORT_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_STRING name[FIT_SPORT_MESG_NAME_COUNT]; // + FIT_SPORT sport; // + FIT_SUB_SPORT sub_sport; // +} FIT_SPORT_MESG; + +typedef FIT_UINT8 FIT_SPORT_FIELD_NUM; + +#define FIT_SPORT_FIELD_NUM_NAME ((FIT_SPORT_FIELD_NUM)3) +#define FIT_SPORT_FIELD_NUM_SPORT ((FIT_SPORT_FIELD_NUM)0) +#define FIT_SPORT_FIELD_NUM_SUB_SPORT ((FIT_SPORT_FIELD_NUM)1) + +typedef enum +{ + FIT_SPORT_MESG_NAME, + FIT_SPORT_MESG_SPORT, + FIT_SPORT_MESG_SUB_SPORT, + FIT_SPORT_MESG_FIELDS +} FIT_SPORT_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SPORT_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SPORT_MESG_DEF; + +// hr_zone message + +#define FIT_HR_ZONE_MESG_SIZE 19 +#define FIT_HR_ZONE_MESG_DEF_SIZE 14 +#define FIT_HR_ZONE_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_STRING name[FIT_HR_ZONE_MESG_NAME_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_UINT8 high_bpm; // 1 * bpm + 0, +} FIT_HR_ZONE_MESG; + +typedef FIT_UINT8 FIT_HR_ZONE_FIELD_NUM; + +#define FIT_HR_ZONE_FIELD_NUM_NAME ((FIT_HR_ZONE_FIELD_NUM)2) +#define FIT_HR_ZONE_FIELD_NUM_MESSAGE_INDEX ((FIT_HR_ZONE_FIELD_NUM)254) +#define FIT_HR_ZONE_FIELD_NUM_HIGH_BPM ((FIT_HR_ZONE_FIELD_NUM)1) + +typedef enum +{ + FIT_HR_ZONE_MESG_NAME, + FIT_HR_ZONE_MESG_MESSAGE_INDEX, + FIT_HR_ZONE_MESG_HIGH_BPM, + FIT_HR_ZONE_MESG_FIELDS +} FIT_HR_ZONE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_HR_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_HR_ZONE_MESG_DEF; + +// speed_zone message + +#define FIT_SPEED_ZONE_MESG_SIZE 20 +#define FIT_SPEED_ZONE_MESG_DEF_SIZE 14 +#define FIT_SPEED_ZONE_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_STRING name[FIT_SPEED_ZONE_MESG_NAME_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 high_value; // 1000 * m/s + 0, +} FIT_SPEED_ZONE_MESG; + +typedef FIT_UINT8 FIT_SPEED_ZONE_FIELD_NUM; + +#define FIT_SPEED_ZONE_FIELD_NUM_NAME ((FIT_SPEED_ZONE_FIELD_NUM)1) +#define FIT_SPEED_ZONE_FIELD_NUM_MESSAGE_INDEX ((FIT_SPEED_ZONE_FIELD_NUM)254) +#define FIT_SPEED_ZONE_FIELD_NUM_HIGH_VALUE ((FIT_SPEED_ZONE_FIELD_NUM)0) + +typedef enum +{ + FIT_SPEED_ZONE_MESG_NAME, + FIT_SPEED_ZONE_MESG_MESSAGE_INDEX, + FIT_SPEED_ZONE_MESG_HIGH_VALUE, + FIT_SPEED_ZONE_MESG_FIELDS +} FIT_SPEED_ZONE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SPEED_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SPEED_ZONE_MESG_DEF; + +// cadence_zone message + +#define FIT_CADENCE_ZONE_MESG_SIZE 19 +#define FIT_CADENCE_ZONE_MESG_DEF_SIZE 14 +#define FIT_CADENCE_ZONE_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_STRING name[FIT_CADENCE_ZONE_MESG_NAME_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_UINT8 high_value; // 1 * rpm + 0, +} FIT_CADENCE_ZONE_MESG; + +typedef FIT_UINT8 FIT_CADENCE_ZONE_FIELD_NUM; + +#define FIT_CADENCE_ZONE_FIELD_NUM_NAME ((FIT_CADENCE_ZONE_FIELD_NUM)1) +#define FIT_CADENCE_ZONE_FIELD_NUM_MESSAGE_INDEX ((FIT_CADENCE_ZONE_FIELD_NUM)254) +#define FIT_CADENCE_ZONE_FIELD_NUM_HIGH_VALUE ((FIT_CADENCE_ZONE_FIELD_NUM)0) + +typedef enum +{ + FIT_CADENCE_ZONE_MESG_NAME, + FIT_CADENCE_ZONE_MESG_MESSAGE_INDEX, + FIT_CADENCE_ZONE_MESG_HIGH_VALUE, + FIT_CADENCE_ZONE_MESG_FIELDS +} FIT_CADENCE_ZONE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_CADENCE_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_CADENCE_ZONE_MESG_DEF; + +// power_zone message + +#define FIT_POWER_ZONE_MESG_SIZE 20 +#define FIT_POWER_ZONE_MESG_DEF_SIZE 14 +#define FIT_POWER_ZONE_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_STRING name[FIT_POWER_ZONE_MESG_NAME_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 high_value; // 1 * watts + 0, +} FIT_POWER_ZONE_MESG; + +typedef FIT_UINT8 FIT_POWER_ZONE_FIELD_NUM; + +#define FIT_POWER_ZONE_FIELD_NUM_NAME ((FIT_POWER_ZONE_FIELD_NUM)2) +#define FIT_POWER_ZONE_FIELD_NUM_MESSAGE_INDEX ((FIT_POWER_ZONE_FIELD_NUM)254) +#define FIT_POWER_ZONE_FIELD_NUM_HIGH_VALUE ((FIT_POWER_ZONE_FIELD_NUM)1) + +typedef enum +{ + FIT_POWER_ZONE_MESG_NAME, + FIT_POWER_ZONE_MESG_MESSAGE_INDEX, + FIT_POWER_ZONE_MESG_HIGH_VALUE, + FIT_POWER_ZONE_MESG_FIELDS +} FIT_POWER_ZONE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_POWER_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_POWER_ZONE_MESG_DEF; + +// met_zone message + +#define FIT_MET_ZONE_MESG_SIZE 6 +#define FIT_MET_ZONE_MESG_DEF_SIZE 17 + +typedef struct +{ + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 calories; // 10 * kcal / min + 0, + FIT_UINT8 high_bpm; // + FIT_UINT8 fat_calories; // 10 * kcal / min + 0, +} FIT_MET_ZONE_MESG; + +typedef FIT_UINT8 FIT_MET_ZONE_FIELD_NUM; + +#define FIT_MET_ZONE_FIELD_NUM_MESSAGE_INDEX ((FIT_MET_ZONE_FIELD_NUM)254) +#define FIT_MET_ZONE_FIELD_NUM_CALORIES ((FIT_MET_ZONE_FIELD_NUM)2) +#define FIT_MET_ZONE_FIELD_NUM_HIGH_BPM ((FIT_MET_ZONE_FIELD_NUM)1) +#define FIT_MET_ZONE_FIELD_NUM_FAT_CALORIES ((FIT_MET_ZONE_FIELD_NUM)3) + +typedef enum +{ + FIT_MET_ZONE_MESG_MESSAGE_INDEX, + FIT_MET_ZONE_MESG_CALORIES, + FIT_MET_ZONE_MESG_HIGH_BPM, + FIT_MET_ZONE_MESG_FAT_CALORIES, + FIT_MET_ZONE_MESG_FIELDS +} FIT_MET_ZONE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_MET_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_MET_ZONE_MESG_DEF; + +// dive_settings message + +#define FIT_DIVE_SETTINGS_MESG_SIZE 17 +#define FIT_DIVE_SETTINGS_MESG_DEF_SIZE 11 +#define FIT_DIVE_SETTINGS_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_STRING name[FIT_DIVE_SETTINGS_MESG_NAME_COUNT]; // + FIT_UINT8 heart_rate_source; // +} FIT_DIVE_SETTINGS_MESG; + +typedef FIT_UINT8 FIT_DIVE_SETTINGS_FIELD_NUM; + +#define FIT_DIVE_SETTINGS_FIELD_NUM_NAME ((FIT_DIVE_SETTINGS_FIELD_NUM)0) +#define FIT_DIVE_SETTINGS_FIELD_NUM_HEART_RATE_SOURCE ((FIT_DIVE_SETTINGS_FIELD_NUM)20) + +typedef enum +{ + FIT_DIVE_SETTINGS_MESG_NAME, + FIT_DIVE_SETTINGS_MESG_HEART_RATE_SOURCE, + FIT_DIVE_SETTINGS_MESG_FIELDS +} FIT_DIVE_SETTINGS_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_DIVE_SETTINGS_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_DIVE_SETTINGS_MESG_DEF; + +// goal message + +#define FIT_GOAL_MESG_SIZE 27 +#define FIT_GOAL_MESG_DEF_SIZE 44 + +typedef struct +{ + FIT_DATE_TIME start_date; // + FIT_DATE_TIME end_date; // + FIT_UINT32 value; // + FIT_UINT32 target_value; // + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 recurrence_value; // + FIT_SPORT sport; // + FIT_SUB_SPORT sub_sport; // + FIT_GOAL type; // + FIT_BOOL repeat; // + FIT_GOAL_RECURRENCE recurrence; // + FIT_BOOL enabled; // + FIT_GOAL_SOURCE source; // +} FIT_GOAL_MESG; + +typedef FIT_UINT8 FIT_GOAL_FIELD_NUM; + +#define FIT_GOAL_FIELD_NUM_START_DATE ((FIT_GOAL_FIELD_NUM)2) +#define FIT_GOAL_FIELD_NUM_END_DATE ((FIT_GOAL_FIELD_NUM)3) +#define FIT_GOAL_FIELD_NUM_VALUE ((FIT_GOAL_FIELD_NUM)5) +#define FIT_GOAL_FIELD_NUM_TARGET_VALUE ((FIT_GOAL_FIELD_NUM)7) +#define FIT_GOAL_FIELD_NUM_MESSAGE_INDEX ((FIT_GOAL_FIELD_NUM)254) +#define FIT_GOAL_FIELD_NUM_RECURRENCE_VALUE ((FIT_GOAL_FIELD_NUM)9) +#define FIT_GOAL_FIELD_NUM_SPORT ((FIT_GOAL_FIELD_NUM)0) +#define FIT_GOAL_FIELD_NUM_SUB_SPORT ((FIT_GOAL_FIELD_NUM)1) +#define FIT_GOAL_FIELD_NUM_TYPE ((FIT_GOAL_FIELD_NUM)4) +#define FIT_GOAL_FIELD_NUM_REPEAT ((FIT_GOAL_FIELD_NUM)6) +#define FIT_GOAL_FIELD_NUM_RECURRENCE ((FIT_GOAL_FIELD_NUM)8) +#define FIT_GOAL_FIELD_NUM_ENABLED ((FIT_GOAL_FIELD_NUM)10) +#define FIT_GOAL_FIELD_NUM_SOURCE ((FIT_GOAL_FIELD_NUM)11) + +typedef enum +{ + FIT_GOAL_MESG_START_DATE, + FIT_GOAL_MESG_END_DATE, + FIT_GOAL_MESG_VALUE, + FIT_GOAL_MESG_TARGET_VALUE, + FIT_GOAL_MESG_MESSAGE_INDEX, + FIT_GOAL_MESG_RECURRENCE_VALUE, + FIT_GOAL_MESG_SPORT, + FIT_GOAL_MESG_SUB_SPORT, + FIT_GOAL_MESG_TYPE, + FIT_GOAL_MESG_REPEAT, + FIT_GOAL_MESG_RECURRENCE, + FIT_GOAL_MESG_ENABLED, + FIT_GOAL_MESG_SOURCE, + FIT_GOAL_MESG_FIELDS +} FIT_GOAL_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_GOAL_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_GOAL_MESG_DEF; + +// activity message + +#define FIT_ACTIVITY_MESG_SIZE 18 +#define FIT_ACTIVITY_MESG_DEF_SIZE 29 + +typedef struct +{ + FIT_DATE_TIME timestamp; // + FIT_UINT32 total_timer_time; // 1000 * s + 0, Exclude pauses + FIT_LOCAL_DATE_TIME local_timestamp; // timestamp epoch expressed in local time, used to convert activity timestamps to local time + FIT_UINT16 num_sessions; // + FIT_ACTIVITY type; // + FIT_EVENT event; // + FIT_EVENT_TYPE event_type; // + FIT_UINT8 event_group; // +} FIT_ACTIVITY_MESG; + +typedef FIT_UINT8 FIT_ACTIVITY_FIELD_NUM; + +#define FIT_ACTIVITY_FIELD_NUM_TIMESTAMP ((FIT_ACTIVITY_FIELD_NUM)253) +#define FIT_ACTIVITY_FIELD_NUM_TOTAL_TIMER_TIME ((FIT_ACTIVITY_FIELD_NUM)0) +#define FIT_ACTIVITY_FIELD_NUM_LOCAL_TIMESTAMP ((FIT_ACTIVITY_FIELD_NUM)5) +#define FIT_ACTIVITY_FIELD_NUM_NUM_SESSIONS ((FIT_ACTIVITY_FIELD_NUM)1) +#define FIT_ACTIVITY_FIELD_NUM_TYPE ((FIT_ACTIVITY_FIELD_NUM)2) +#define FIT_ACTIVITY_FIELD_NUM_EVENT ((FIT_ACTIVITY_FIELD_NUM)3) +#define FIT_ACTIVITY_FIELD_NUM_EVENT_TYPE ((FIT_ACTIVITY_FIELD_NUM)4) +#define FIT_ACTIVITY_FIELD_NUM_EVENT_GROUP ((FIT_ACTIVITY_FIELD_NUM)6) + +typedef enum +{ + FIT_ACTIVITY_MESG_TIMESTAMP, + FIT_ACTIVITY_MESG_TOTAL_TIMER_TIME, + FIT_ACTIVITY_MESG_LOCAL_TIMESTAMP, + FIT_ACTIVITY_MESG_NUM_SESSIONS, + FIT_ACTIVITY_MESG_TYPE, + FIT_ACTIVITY_MESG_EVENT, + FIT_ACTIVITY_MESG_EVENT_TYPE, + FIT_ACTIVITY_MESG_EVENT_GROUP, + FIT_ACTIVITY_MESG_FIELDS +} FIT_ACTIVITY_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_ACTIVITY_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_ACTIVITY_MESG_DEF; + +// session message + +#define FIT_SESSION_MESG_SIZE 209 +#define FIT_SESSION_MESG_DEF_SIZE 278 +#define FIT_SESSION_MESG_TIME_IN_HR_ZONE_COUNT 1 +#define FIT_SESSION_MESG_TIME_IN_SPEED_ZONE_COUNT 1 +#define FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE_COUNT 1 +#define FIT_SESSION_MESG_TIME_IN_POWER_ZONE_COUNT 1 +#define FIT_SESSION_MESG_STROKE_COUNT_COUNT 1 +#define FIT_SESSION_MESG_ZONE_COUNT_COUNT 1 +#define FIT_SESSION_MESG_OPPONENT_NAME_COUNT 1 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, Sesson end time. + FIT_DATE_TIME start_time; // + FIT_SINT32 start_position_lat; // 1 * semicircles + 0, + FIT_SINT32 start_position_long; // 1 * semicircles + 0, + FIT_UINT32 total_elapsed_time; // 1000 * s + 0, Time (includes pauses) + FIT_UINT32 total_timer_time; // 1000 * s + 0, Timer Time (excludes pauses) + FIT_UINT32 total_distance; // 100 * m + 0, + FIT_UINT32 total_cycles; // 1 * cycles + 0, + FIT_SINT32 nec_lat; // 1 * semicircles + 0, North east corner latitude + FIT_SINT32 nec_long; // 1 * semicircles + 0, North east corner longitude + FIT_SINT32 swc_lat; // 1 * semicircles + 0, South west corner latitude + FIT_SINT32 swc_long; // 1 * semicircles + 0, South west corner longitude + FIT_UINT32 avg_stroke_count; // 10 * strokes/lap + 0, + FIT_UINT32 total_work; // 1 * J + 0, + FIT_UINT32 total_moving_time; // 1000 * s + 0, + FIT_UINT32 time_in_hr_zone[FIT_SESSION_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_speed_zone[FIT_SESSION_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_cadence_zone[FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_power_zone[FIT_SESSION_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 avg_lap_time; // 1000 * s + 0, + FIT_UINT32 enhanced_avg_speed; // 1000 * m/s + 0, total_distance / total_timer_time + FIT_UINT32 enhanced_max_speed; // 1000 * m/s + 0, + FIT_UINT32 enhanced_avg_altitude; // 5 * m + 500, + FIT_UINT32 enhanced_min_altitude; // 5 * m + 500, + FIT_UINT32 enhanced_max_altitude; // 5 * m + 500, + FIT_MESSAGE_INDEX message_index; // Selected bit is set for the current session. + FIT_UINT16 total_calories; // 1 * kcal + 0, + FIT_UINT16 total_fat_calories; // 1 * kcal + 0, + FIT_UINT16 avg_speed; // 1000 * m/s + 0, total_distance / total_timer_time + FIT_UINT16 max_speed; // 1000 * m/s + 0, + FIT_UINT16 avg_power; // 1 * watts + 0, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time + FIT_UINT16 max_power; // 1 * watts + 0, + FIT_UINT16 total_ascent; // 1 * m + 0, + FIT_UINT16 total_descent; // 1 * m + 0, + FIT_UINT16 first_lap_index; // + FIT_UINT16 num_laps; // + FIT_UINT16 num_lengths; // 1 * lengths + 0, # of lengths of swim pool + FIT_UINT16 normalized_power; // 1 * watts + 0, + FIT_UINT16 training_stress_score; // 10 * tss + 0, + FIT_UINT16 intensity_factor; // 1000 * if + 0, + FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; // + FIT_UINT16 avg_stroke_distance; // 100 * m + 0, + FIT_UINT16 pool_length; // 100 * m + 0, + FIT_UINT16 threshold_power; // 1 * watts + 0, + FIT_UINT16 num_active_lengths; // 1 * lengths + 0, # of active lengths of swim pool + FIT_UINT16 avg_altitude; // 5 * m + 500, + FIT_UINT16 max_altitude; // 5 * m + 500, + FIT_SINT16 avg_grade; // 100 * % + 0, + FIT_SINT16 avg_pos_grade; // 100 * % + 0, + FIT_SINT16 avg_neg_grade; // 100 * % + 0, + FIT_SINT16 max_pos_grade; // 100 * % + 0, + FIT_SINT16 max_neg_grade; // 100 * % + 0, + FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s + 0, + FIT_UINT16 best_lap_index; // + FIT_UINT16 min_altitude; // 5 * m + 500, + FIT_UINT16 player_score; // + FIT_UINT16 opponent_score; // + FIT_UINT16 stroke_count[FIT_SESSION_MESG_STROKE_COUNT_COUNT]; // 1 * counts + 0, stroke_type enum used as the index + FIT_UINT16 zone_count[FIT_SESSION_MESG_ZONE_COUNT_COUNT]; // 1 * counts + 0, zone number used as the index + FIT_UINT16 max_ball_speed; // 100 * m/s + 0, + FIT_UINT16 avg_ball_speed; // 100 * m/s + 0, + FIT_UINT16 avg_vertical_oscillation; // 10 * mm + 0, + FIT_UINT16 avg_stance_time_percent; // 100 * percent + 0, + FIT_UINT16 avg_stance_time; // 10 * ms + 0, + FIT_UINT16 avg_vam; // 1000 * m/s + 0, + FIT_EVENT event; // session + FIT_EVENT_TYPE event_type; // stop + FIT_SPORT sport; // + FIT_SUB_SPORT sub_sport; // + FIT_UINT8 avg_heart_rate; // 1 * bpm + 0, average heart rate (excludes pause time) + FIT_UINT8 max_heart_rate; // 1 * bpm + 0, + FIT_UINT8 avg_cadence; // 1 * rpm + 0, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time + FIT_UINT8 max_cadence; // 1 * rpm + 0, + FIT_UINT8 total_training_effect; // + FIT_UINT8 event_group; // + FIT_SESSION_TRIGGER trigger; // + FIT_SWIM_STROKE swim_stroke; // 1 * swim_stroke + 0, + FIT_DISPLAY_MEASURE pool_length_unit; // + FIT_UINT8 gps_accuracy; // 1 * m + 0, + FIT_SINT8 avg_temperature; // 1 * C + 0, + FIT_SINT8 max_temperature; // 1 * C + 0, + FIT_UINT8 min_heart_rate; // 1 * bpm + 0, + FIT_STRING opponent_name[FIT_SESSION_MESG_OPPONENT_NAME_COUNT]; // + FIT_UINT8 avg_fractional_cadence; // 128 * rpm + 0, fractional part of the avg_cadence + FIT_UINT8 max_fractional_cadence; // 128 * rpm + 0, fractional part of the max_cadence + FIT_UINT8 total_fractional_cycles; // 128 * cycles + 0, fractional part of the total_cycles + FIT_UINT8 sport_index; // + FIT_UINT8 total_anaerobic_training_effect; // +} FIT_SESSION_MESG; + +typedef FIT_UINT8 FIT_SESSION_FIELD_NUM; + +#define FIT_SESSION_FIELD_NUM_TIMESTAMP ((FIT_SESSION_FIELD_NUM)253) +#define FIT_SESSION_FIELD_NUM_START_TIME ((FIT_SESSION_FIELD_NUM)2) +#define FIT_SESSION_FIELD_NUM_START_POSITION_LAT ((FIT_SESSION_FIELD_NUM)3) +#define FIT_SESSION_FIELD_NUM_START_POSITION_LONG ((FIT_SESSION_FIELD_NUM)4) +#define FIT_SESSION_FIELD_NUM_TOTAL_ELAPSED_TIME ((FIT_SESSION_FIELD_NUM)7) +#define FIT_SESSION_FIELD_NUM_TOTAL_TIMER_TIME ((FIT_SESSION_FIELD_NUM)8) +#define FIT_SESSION_FIELD_NUM_TOTAL_DISTANCE ((FIT_SESSION_FIELD_NUM)9) +#define FIT_SESSION_FIELD_NUM_TOTAL_CYCLES ((FIT_SESSION_FIELD_NUM)10) +#define FIT_SESSION_FIELD_NUM_NEC_LAT ((FIT_SESSION_FIELD_NUM)29) +#define FIT_SESSION_FIELD_NUM_NEC_LONG ((FIT_SESSION_FIELD_NUM)30) +#define FIT_SESSION_FIELD_NUM_SWC_LAT ((FIT_SESSION_FIELD_NUM)31) +#define FIT_SESSION_FIELD_NUM_SWC_LONG ((FIT_SESSION_FIELD_NUM)32) +#define FIT_SESSION_FIELD_NUM_AVG_STROKE_COUNT ((FIT_SESSION_FIELD_NUM)41) +#define FIT_SESSION_FIELD_NUM_TOTAL_WORK ((FIT_SESSION_FIELD_NUM)48) +#define FIT_SESSION_FIELD_NUM_TOTAL_MOVING_TIME ((FIT_SESSION_FIELD_NUM)59) +#define FIT_SESSION_FIELD_NUM_TIME_IN_HR_ZONE ((FIT_SESSION_FIELD_NUM)65) +#define FIT_SESSION_FIELD_NUM_TIME_IN_SPEED_ZONE ((FIT_SESSION_FIELD_NUM)66) +#define FIT_SESSION_FIELD_NUM_TIME_IN_CADENCE_ZONE ((FIT_SESSION_FIELD_NUM)67) +#define FIT_SESSION_FIELD_NUM_TIME_IN_POWER_ZONE ((FIT_SESSION_FIELD_NUM)68) +#define FIT_SESSION_FIELD_NUM_AVG_LAP_TIME ((FIT_SESSION_FIELD_NUM)69) +#define FIT_SESSION_FIELD_NUM_ENHANCED_AVG_SPEED ((FIT_SESSION_FIELD_NUM)124) +#define FIT_SESSION_FIELD_NUM_ENHANCED_MAX_SPEED ((FIT_SESSION_FIELD_NUM)125) +#define FIT_SESSION_FIELD_NUM_ENHANCED_AVG_ALTITUDE ((FIT_SESSION_FIELD_NUM)126) +#define FIT_SESSION_FIELD_NUM_ENHANCED_MIN_ALTITUDE ((FIT_SESSION_FIELD_NUM)127) +#define FIT_SESSION_FIELD_NUM_ENHANCED_MAX_ALTITUDE ((FIT_SESSION_FIELD_NUM)128) +#define FIT_SESSION_FIELD_NUM_MESSAGE_INDEX ((FIT_SESSION_FIELD_NUM)254) +#define FIT_SESSION_FIELD_NUM_TOTAL_CALORIES ((FIT_SESSION_FIELD_NUM)11) +#define FIT_SESSION_FIELD_NUM_TOTAL_FAT_CALORIES ((FIT_SESSION_FIELD_NUM)13) +#define FIT_SESSION_FIELD_NUM_AVG_SPEED ((FIT_SESSION_FIELD_NUM)14) +#define FIT_SESSION_FIELD_NUM_MAX_SPEED ((FIT_SESSION_FIELD_NUM)15) +#define FIT_SESSION_FIELD_NUM_AVG_POWER ((FIT_SESSION_FIELD_NUM)20) +#define FIT_SESSION_FIELD_NUM_MAX_POWER ((FIT_SESSION_FIELD_NUM)21) +#define FIT_SESSION_FIELD_NUM_TOTAL_ASCENT ((FIT_SESSION_FIELD_NUM)22) +#define FIT_SESSION_FIELD_NUM_TOTAL_DESCENT ((FIT_SESSION_FIELD_NUM)23) +#define FIT_SESSION_FIELD_NUM_FIRST_LAP_INDEX ((FIT_SESSION_FIELD_NUM)25) +#define FIT_SESSION_FIELD_NUM_NUM_LAPS ((FIT_SESSION_FIELD_NUM)26) +#define FIT_SESSION_FIELD_NUM_NUM_LENGTHS ((FIT_SESSION_FIELD_NUM)33) +#define FIT_SESSION_FIELD_NUM_NORMALIZED_POWER ((FIT_SESSION_FIELD_NUM)34) +#define FIT_SESSION_FIELD_NUM_TRAINING_STRESS_SCORE ((FIT_SESSION_FIELD_NUM)35) +#define FIT_SESSION_FIELD_NUM_INTENSITY_FACTOR ((FIT_SESSION_FIELD_NUM)36) +#define FIT_SESSION_FIELD_NUM_LEFT_RIGHT_BALANCE ((FIT_SESSION_FIELD_NUM)37) +#define FIT_SESSION_FIELD_NUM_AVG_STROKE_DISTANCE ((FIT_SESSION_FIELD_NUM)42) +#define FIT_SESSION_FIELD_NUM_POOL_LENGTH ((FIT_SESSION_FIELD_NUM)44) +#define FIT_SESSION_FIELD_NUM_THRESHOLD_POWER ((FIT_SESSION_FIELD_NUM)45) +#define FIT_SESSION_FIELD_NUM_NUM_ACTIVE_LENGTHS ((FIT_SESSION_FIELD_NUM)47) +#define FIT_SESSION_FIELD_NUM_AVG_ALTITUDE ((FIT_SESSION_FIELD_NUM)49) +#define FIT_SESSION_FIELD_NUM_MAX_ALTITUDE ((FIT_SESSION_FIELD_NUM)50) +#define FIT_SESSION_FIELD_NUM_AVG_GRADE ((FIT_SESSION_FIELD_NUM)52) +#define FIT_SESSION_FIELD_NUM_AVG_POS_GRADE ((FIT_SESSION_FIELD_NUM)53) +#define FIT_SESSION_FIELD_NUM_AVG_NEG_GRADE ((FIT_SESSION_FIELD_NUM)54) +#define FIT_SESSION_FIELD_NUM_MAX_POS_GRADE ((FIT_SESSION_FIELD_NUM)55) +#define FIT_SESSION_FIELD_NUM_MAX_NEG_GRADE ((FIT_SESSION_FIELD_NUM)56) +#define FIT_SESSION_FIELD_NUM_AVG_POS_VERTICAL_SPEED ((FIT_SESSION_FIELD_NUM)60) +#define FIT_SESSION_FIELD_NUM_AVG_NEG_VERTICAL_SPEED ((FIT_SESSION_FIELD_NUM)61) +#define FIT_SESSION_FIELD_NUM_MAX_POS_VERTICAL_SPEED ((FIT_SESSION_FIELD_NUM)62) +#define FIT_SESSION_FIELD_NUM_MAX_NEG_VERTICAL_SPEED ((FIT_SESSION_FIELD_NUM)63) +#define FIT_SESSION_FIELD_NUM_BEST_LAP_INDEX ((FIT_SESSION_FIELD_NUM)70) +#define FIT_SESSION_FIELD_NUM_MIN_ALTITUDE ((FIT_SESSION_FIELD_NUM)71) +#define FIT_SESSION_FIELD_NUM_PLAYER_SCORE ((FIT_SESSION_FIELD_NUM)82) +#define FIT_SESSION_FIELD_NUM_OPPONENT_SCORE ((FIT_SESSION_FIELD_NUM)83) +#define FIT_SESSION_FIELD_NUM_STROKE_COUNT ((FIT_SESSION_FIELD_NUM)85) +#define FIT_SESSION_FIELD_NUM_ZONE_COUNT ((FIT_SESSION_FIELD_NUM)86) +#define FIT_SESSION_FIELD_NUM_MAX_BALL_SPEED ((FIT_SESSION_FIELD_NUM)87) +#define FIT_SESSION_FIELD_NUM_AVG_BALL_SPEED ((FIT_SESSION_FIELD_NUM)88) +#define FIT_SESSION_FIELD_NUM_AVG_VERTICAL_OSCILLATION ((FIT_SESSION_FIELD_NUM)89) +#define FIT_SESSION_FIELD_NUM_AVG_STANCE_TIME_PERCENT ((FIT_SESSION_FIELD_NUM)90) +#define FIT_SESSION_FIELD_NUM_AVG_STANCE_TIME ((FIT_SESSION_FIELD_NUM)91) +#define FIT_SESSION_FIELD_NUM_AVG_VAM ((FIT_SESSION_FIELD_NUM)139) +#define FIT_SESSION_FIELD_NUM_EVENT ((FIT_SESSION_FIELD_NUM)0) +#define FIT_SESSION_FIELD_NUM_EVENT_TYPE ((FIT_SESSION_FIELD_NUM)1) +#define FIT_SESSION_FIELD_NUM_SPORT ((FIT_SESSION_FIELD_NUM)5) +#define FIT_SESSION_FIELD_NUM_SUB_SPORT ((FIT_SESSION_FIELD_NUM)6) +#define FIT_SESSION_FIELD_NUM_AVG_HEART_RATE ((FIT_SESSION_FIELD_NUM)16) +#define FIT_SESSION_FIELD_NUM_MAX_HEART_RATE ((FIT_SESSION_FIELD_NUM)17) +#define FIT_SESSION_FIELD_NUM_AVG_CADENCE ((FIT_SESSION_FIELD_NUM)18) +#define FIT_SESSION_FIELD_NUM_MAX_CADENCE ((FIT_SESSION_FIELD_NUM)19) +#define FIT_SESSION_FIELD_NUM_TOTAL_TRAINING_EFFECT ((FIT_SESSION_FIELD_NUM)24) +#define FIT_SESSION_FIELD_NUM_EVENT_GROUP ((FIT_SESSION_FIELD_NUM)27) +#define FIT_SESSION_FIELD_NUM_TRIGGER ((FIT_SESSION_FIELD_NUM)28) +#define FIT_SESSION_FIELD_NUM_SWIM_STROKE ((FIT_SESSION_FIELD_NUM)43) +#define FIT_SESSION_FIELD_NUM_POOL_LENGTH_UNIT ((FIT_SESSION_FIELD_NUM)46) +#define FIT_SESSION_FIELD_NUM_GPS_ACCURACY ((FIT_SESSION_FIELD_NUM)51) +#define FIT_SESSION_FIELD_NUM_AVG_TEMPERATURE ((FIT_SESSION_FIELD_NUM)57) +#define FIT_SESSION_FIELD_NUM_MAX_TEMPERATURE ((FIT_SESSION_FIELD_NUM)58) +#define FIT_SESSION_FIELD_NUM_MIN_HEART_RATE ((FIT_SESSION_FIELD_NUM)64) +#define FIT_SESSION_FIELD_NUM_OPPONENT_NAME ((FIT_SESSION_FIELD_NUM)84) +#define FIT_SESSION_FIELD_NUM_AVG_FRACTIONAL_CADENCE ((FIT_SESSION_FIELD_NUM)92) +#define FIT_SESSION_FIELD_NUM_MAX_FRACTIONAL_CADENCE ((FIT_SESSION_FIELD_NUM)93) +#define FIT_SESSION_FIELD_NUM_TOTAL_FRACTIONAL_CYCLES ((FIT_SESSION_FIELD_NUM)94) +#define FIT_SESSION_FIELD_NUM_SPORT_INDEX ((FIT_SESSION_FIELD_NUM)111) +#define FIT_SESSION_FIELD_NUM_TOTAL_ANAEROBIC_TRAINING_EFFECT ((FIT_SESSION_FIELD_NUM)137) + +typedef enum +{ + FIT_SESSION_MESG_TIMESTAMP, + FIT_SESSION_MESG_START_TIME, + FIT_SESSION_MESG_START_POSITION_LAT, + FIT_SESSION_MESG_START_POSITION_LONG, + FIT_SESSION_MESG_TOTAL_ELAPSED_TIME, + FIT_SESSION_MESG_TOTAL_TIMER_TIME, + FIT_SESSION_MESG_TOTAL_DISTANCE, + FIT_SESSION_MESG_TOTAL_CYCLES, + FIT_SESSION_MESG_NEC_LAT, + FIT_SESSION_MESG_NEC_LONG, + FIT_SESSION_MESG_SWC_LAT, + FIT_SESSION_MESG_SWC_LONG, + FIT_SESSION_MESG_AVG_STROKE_COUNT, + FIT_SESSION_MESG_TOTAL_WORK, + FIT_SESSION_MESG_TOTAL_MOVING_TIME, + FIT_SESSION_MESG_TIME_IN_HR_ZONE, + FIT_SESSION_MESG_TIME_IN_SPEED_ZONE, + FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE, + FIT_SESSION_MESG_TIME_IN_POWER_ZONE, + FIT_SESSION_MESG_AVG_LAP_TIME, + FIT_SESSION_MESG_ENHANCED_AVG_SPEED, + FIT_SESSION_MESG_ENHANCED_MAX_SPEED, + FIT_SESSION_MESG_ENHANCED_AVG_ALTITUDE, + FIT_SESSION_MESG_ENHANCED_MIN_ALTITUDE, + FIT_SESSION_MESG_ENHANCED_MAX_ALTITUDE, + FIT_SESSION_MESG_MESSAGE_INDEX, + FIT_SESSION_MESG_TOTAL_CALORIES, + FIT_SESSION_MESG_TOTAL_FAT_CALORIES, + FIT_SESSION_MESG_AVG_SPEED, + FIT_SESSION_MESG_MAX_SPEED, + FIT_SESSION_MESG_AVG_POWER, + FIT_SESSION_MESG_MAX_POWER, + FIT_SESSION_MESG_TOTAL_ASCENT, + FIT_SESSION_MESG_TOTAL_DESCENT, + FIT_SESSION_MESG_FIRST_LAP_INDEX, + FIT_SESSION_MESG_NUM_LAPS, + FIT_SESSION_MESG_NUM_LENGTHS, + FIT_SESSION_MESG_NORMALIZED_POWER, + FIT_SESSION_MESG_TRAINING_STRESS_SCORE, + FIT_SESSION_MESG_INTENSITY_FACTOR, + FIT_SESSION_MESG_LEFT_RIGHT_BALANCE, + FIT_SESSION_MESG_AVG_STROKE_DISTANCE, + FIT_SESSION_MESG_POOL_LENGTH, + FIT_SESSION_MESG_THRESHOLD_POWER, + FIT_SESSION_MESG_NUM_ACTIVE_LENGTHS, + FIT_SESSION_MESG_AVG_ALTITUDE, + FIT_SESSION_MESG_MAX_ALTITUDE, + FIT_SESSION_MESG_AVG_GRADE, + FIT_SESSION_MESG_AVG_POS_GRADE, + FIT_SESSION_MESG_AVG_NEG_GRADE, + FIT_SESSION_MESG_MAX_POS_GRADE, + FIT_SESSION_MESG_MAX_NEG_GRADE, + FIT_SESSION_MESG_AVG_POS_VERTICAL_SPEED, + FIT_SESSION_MESG_AVG_NEG_VERTICAL_SPEED, + FIT_SESSION_MESG_MAX_POS_VERTICAL_SPEED, + FIT_SESSION_MESG_MAX_NEG_VERTICAL_SPEED, + FIT_SESSION_MESG_BEST_LAP_INDEX, + FIT_SESSION_MESG_MIN_ALTITUDE, + FIT_SESSION_MESG_PLAYER_SCORE, + FIT_SESSION_MESG_OPPONENT_SCORE, + FIT_SESSION_MESG_STROKE_COUNT, + FIT_SESSION_MESG_ZONE_COUNT, + FIT_SESSION_MESG_MAX_BALL_SPEED, + FIT_SESSION_MESG_AVG_BALL_SPEED, + FIT_SESSION_MESG_AVG_VERTICAL_OSCILLATION, + FIT_SESSION_MESG_AVG_STANCE_TIME_PERCENT, + FIT_SESSION_MESG_AVG_STANCE_TIME, + FIT_SESSION_MESG_AVG_VAM, + FIT_SESSION_MESG_EVENT, + FIT_SESSION_MESG_EVENT_TYPE, + FIT_SESSION_MESG_SPORT, + FIT_SESSION_MESG_SUB_SPORT, + FIT_SESSION_MESG_AVG_HEART_RATE, + FIT_SESSION_MESG_MAX_HEART_RATE, + FIT_SESSION_MESG_AVG_CADENCE, + FIT_SESSION_MESG_MAX_CADENCE, + FIT_SESSION_MESG_TOTAL_TRAINING_EFFECT, + FIT_SESSION_MESG_EVENT_GROUP, + FIT_SESSION_MESG_TRIGGER, + FIT_SESSION_MESG_SWIM_STROKE, + FIT_SESSION_MESG_POOL_LENGTH_UNIT, + FIT_SESSION_MESG_GPS_ACCURACY, + FIT_SESSION_MESG_AVG_TEMPERATURE, + FIT_SESSION_MESG_MAX_TEMPERATURE, + FIT_SESSION_MESG_MIN_HEART_RATE, + FIT_SESSION_MESG_OPPONENT_NAME, + FIT_SESSION_MESG_AVG_FRACTIONAL_CADENCE, + FIT_SESSION_MESG_MAX_FRACTIONAL_CADENCE, + FIT_SESSION_MESG_TOTAL_FRACTIONAL_CYCLES, + FIT_SESSION_MESG_SPORT_INDEX, + FIT_SESSION_MESG_TOTAL_ANAEROBIC_TRAINING_EFFECT, + FIT_SESSION_MESG_FIELDS +} FIT_SESSION_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SESSION_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SESSION_MESG_DEF; + +// lap message + +#define FIT_LAP_MESG_SIZE 189 +#define FIT_LAP_MESG_DEF_SIZE 254 +#define FIT_LAP_MESG_TIME_IN_HR_ZONE_COUNT 1 +#define FIT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT 1 +#define FIT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT 1 +#define FIT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT 1 +#define FIT_LAP_MESG_STROKE_COUNT_COUNT 1 +#define FIT_LAP_MESG_ZONE_COUNT_COUNT 1 +#define FIT_LAP_MESG_AVG_TOTAL_HEMOGLOBIN_CONC_COUNT 1 +#define FIT_LAP_MESG_MIN_TOTAL_HEMOGLOBIN_CONC_COUNT 1 +#define FIT_LAP_MESG_MAX_TOTAL_HEMOGLOBIN_CONC_COUNT 1 +#define FIT_LAP_MESG_AVG_SATURATED_HEMOGLOBIN_PERCENT_COUNT 1 +#define FIT_LAP_MESG_MIN_SATURATED_HEMOGLOBIN_PERCENT_COUNT 1 +#define FIT_LAP_MESG_MAX_SATURATED_HEMOGLOBIN_PERCENT_COUNT 1 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, Lap end time. + FIT_DATE_TIME start_time; // + FIT_SINT32 start_position_lat; // 1 * semicircles + 0, + FIT_SINT32 start_position_long; // 1 * semicircles + 0, + FIT_SINT32 end_position_lat; // 1 * semicircles + 0, + FIT_SINT32 end_position_long; // 1 * semicircles + 0, + FIT_UINT32 total_elapsed_time; // 1000 * s + 0, Time (includes pauses) + FIT_UINT32 total_timer_time; // 1000 * s + 0, Timer Time (excludes pauses) + FIT_UINT32 total_distance; // 100 * m + 0, + FIT_UINT32 total_cycles; // 1 * cycles + 0, + FIT_UINT32 total_work; // 1 * J + 0, + FIT_UINT32 total_moving_time; // 1000 * s + 0, + FIT_UINT32 time_in_hr_zone[FIT_LAP_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_speed_zone[FIT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_cadence_zone[FIT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_power_zone[FIT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 enhanced_avg_speed; // 1000 * m/s + 0, + FIT_UINT32 enhanced_max_speed; // 1000 * m/s + 0, + FIT_UINT32 enhanced_avg_altitude; // 5 * m + 500, + FIT_UINT32 enhanced_min_altitude; // 5 * m + 500, + FIT_UINT32 enhanced_max_altitude; // 5 * m + 500, + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 total_calories; // 1 * kcal + 0, + FIT_UINT16 total_fat_calories; // 1 * kcal + 0, If New Leaf + FIT_UINT16 avg_speed; // 1000 * m/s + 0, + FIT_UINT16 max_speed; // 1000 * m/s + 0, + FIT_UINT16 avg_power; // 1 * watts + 0, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time + FIT_UINT16 max_power; // 1 * watts + 0, + FIT_UINT16 total_ascent; // 1 * m + 0, + FIT_UINT16 total_descent; // 1 * m + 0, + FIT_UINT16 num_lengths; // 1 * lengths + 0, # of lengths of swim pool + FIT_UINT16 normalized_power; // 1 * watts + 0, + FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; // + FIT_UINT16 first_length_index; // + FIT_UINT16 avg_stroke_distance; // 100 * m + 0, + FIT_UINT16 num_active_lengths; // 1 * lengths + 0, # of active lengths of swim pool + FIT_UINT16 avg_altitude; // 5 * m + 500, + FIT_UINT16 max_altitude; // 5 * m + 500, + FIT_SINT16 avg_grade; // 100 * % + 0, + FIT_SINT16 avg_pos_grade; // 100 * % + 0, + FIT_SINT16 avg_neg_grade; // 100 * % + 0, + FIT_SINT16 max_pos_grade; // 100 * % + 0, + FIT_SINT16 max_neg_grade; // 100 * % + 0, + FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s + 0, + FIT_UINT16 repetition_num; // + FIT_UINT16 min_altitude; // 5 * m + 500, + FIT_MESSAGE_INDEX wkt_step_index; // + FIT_UINT16 opponent_score; // + FIT_UINT16 stroke_count[FIT_LAP_MESG_STROKE_COUNT_COUNT]; // 1 * counts + 0, stroke_type enum used as the index + FIT_UINT16 zone_count[FIT_LAP_MESG_ZONE_COUNT_COUNT]; // 1 * counts + 0, zone number used as the index + FIT_UINT16 avg_vertical_oscillation; // 10 * mm + 0, + FIT_UINT16 avg_stance_time_percent; // 100 * percent + 0, + FIT_UINT16 avg_stance_time; // 10 * ms + 0, + FIT_UINT16 player_score; // + FIT_UINT16 avg_total_hemoglobin_conc[FIT_LAP_MESG_AVG_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL + 0, Avg saturated and unsaturated hemoglobin + FIT_UINT16 min_total_hemoglobin_conc[FIT_LAP_MESG_MIN_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL + 0, Min saturated and unsaturated hemoglobin + FIT_UINT16 max_total_hemoglobin_conc[FIT_LAP_MESG_MAX_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL + 0, Max saturated and unsaturated hemoglobin + FIT_UINT16 avg_saturated_hemoglobin_percent[FIT_LAP_MESG_AVG_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * % + 0, Avg percentage of hemoglobin saturated with oxygen + FIT_UINT16 min_saturated_hemoglobin_percent[FIT_LAP_MESG_MIN_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * % + 0, Min percentage of hemoglobin saturated with oxygen + FIT_UINT16 max_saturated_hemoglobin_percent[FIT_LAP_MESG_MAX_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * % + 0, Max percentage of hemoglobin saturated with oxygen + FIT_UINT16 avg_vam; // 1000 * m/s + 0, + FIT_EVENT event; // + FIT_EVENT_TYPE event_type; // + FIT_UINT8 avg_heart_rate; // 1 * bpm + 0, + FIT_UINT8 max_heart_rate; // 1 * bpm + 0, + FIT_UINT8 avg_cadence; // 1 * rpm + 0, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time + FIT_UINT8 max_cadence; // 1 * rpm + 0, + FIT_INTENSITY intensity; // + FIT_LAP_TRIGGER lap_trigger; // + FIT_SPORT sport; // + FIT_UINT8 event_group; // + FIT_SWIM_STROKE swim_stroke; // + FIT_SUB_SPORT sub_sport; // + FIT_UINT8 gps_accuracy; // 1 * m + 0, + FIT_SINT8 avg_temperature; // 1 * C + 0, + FIT_SINT8 max_temperature; // 1 * C + 0, + FIT_UINT8 min_heart_rate; // 1 * bpm + 0, + FIT_UINT8 avg_fractional_cadence; // 128 * rpm + 0, fractional part of the avg_cadence + FIT_UINT8 max_fractional_cadence; // 128 * rpm + 0, fractional part of the max_cadence + FIT_UINT8 total_fractional_cycles; // 128 * cycles + 0, fractional part of the total_cycles +} FIT_LAP_MESG; + +typedef FIT_UINT8 FIT_LAP_FIELD_NUM; + +#define FIT_LAP_FIELD_NUM_TIMESTAMP ((FIT_LAP_FIELD_NUM)253) +#define FIT_LAP_FIELD_NUM_START_TIME ((FIT_LAP_FIELD_NUM)2) +#define FIT_LAP_FIELD_NUM_START_POSITION_LAT ((FIT_LAP_FIELD_NUM)3) +#define FIT_LAP_FIELD_NUM_START_POSITION_LONG ((FIT_LAP_FIELD_NUM)4) +#define FIT_LAP_FIELD_NUM_END_POSITION_LAT ((FIT_LAP_FIELD_NUM)5) +#define FIT_LAP_FIELD_NUM_END_POSITION_LONG ((FIT_LAP_FIELD_NUM)6) +#define FIT_LAP_FIELD_NUM_TOTAL_ELAPSED_TIME ((FIT_LAP_FIELD_NUM)7) +#define FIT_LAP_FIELD_NUM_TOTAL_TIMER_TIME ((FIT_LAP_FIELD_NUM)8) +#define FIT_LAP_FIELD_NUM_TOTAL_DISTANCE ((FIT_LAP_FIELD_NUM)9) +#define FIT_LAP_FIELD_NUM_TOTAL_CYCLES ((FIT_LAP_FIELD_NUM)10) +#define FIT_LAP_FIELD_NUM_TOTAL_WORK ((FIT_LAP_FIELD_NUM)41) +#define FIT_LAP_FIELD_NUM_TOTAL_MOVING_TIME ((FIT_LAP_FIELD_NUM)52) +#define FIT_LAP_FIELD_NUM_TIME_IN_HR_ZONE ((FIT_LAP_FIELD_NUM)57) +#define FIT_LAP_FIELD_NUM_TIME_IN_SPEED_ZONE ((FIT_LAP_FIELD_NUM)58) +#define FIT_LAP_FIELD_NUM_TIME_IN_CADENCE_ZONE ((FIT_LAP_FIELD_NUM)59) +#define FIT_LAP_FIELD_NUM_TIME_IN_POWER_ZONE ((FIT_LAP_FIELD_NUM)60) +#define FIT_LAP_FIELD_NUM_ENHANCED_AVG_SPEED ((FIT_LAP_FIELD_NUM)110) +#define FIT_LAP_FIELD_NUM_ENHANCED_MAX_SPEED ((FIT_LAP_FIELD_NUM)111) +#define FIT_LAP_FIELD_NUM_ENHANCED_AVG_ALTITUDE ((FIT_LAP_FIELD_NUM)112) +#define FIT_LAP_FIELD_NUM_ENHANCED_MIN_ALTITUDE ((FIT_LAP_FIELD_NUM)113) +#define FIT_LAP_FIELD_NUM_ENHANCED_MAX_ALTITUDE ((FIT_LAP_FIELD_NUM)114) +#define FIT_LAP_FIELD_NUM_MESSAGE_INDEX ((FIT_LAP_FIELD_NUM)254) +#define FIT_LAP_FIELD_NUM_TOTAL_CALORIES ((FIT_LAP_FIELD_NUM)11) +#define FIT_LAP_FIELD_NUM_TOTAL_FAT_CALORIES ((FIT_LAP_FIELD_NUM)12) +#define FIT_LAP_FIELD_NUM_AVG_SPEED ((FIT_LAP_FIELD_NUM)13) +#define FIT_LAP_FIELD_NUM_MAX_SPEED ((FIT_LAP_FIELD_NUM)14) +#define FIT_LAP_FIELD_NUM_AVG_POWER ((FIT_LAP_FIELD_NUM)19) +#define FIT_LAP_FIELD_NUM_MAX_POWER ((FIT_LAP_FIELD_NUM)20) +#define FIT_LAP_FIELD_NUM_TOTAL_ASCENT ((FIT_LAP_FIELD_NUM)21) +#define FIT_LAP_FIELD_NUM_TOTAL_DESCENT ((FIT_LAP_FIELD_NUM)22) +#define FIT_LAP_FIELD_NUM_NUM_LENGTHS ((FIT_LAP_FIELD_NUM)32) +#define FIT_LAP_FIELD_NUM_NORMALIZED_POWER ((FIT_LAP_FIELD_NUM)33) +#define FIT_LAP_FIELD_NUM_LEFT_RIGHT_BALANCE ((FIT_LAP_FIELD_NUM)34) +#define FIT_LAP_FIELD_NUM_FIRST_LENGTH_INDEX ((FIT_LAP_FIELD_NUM)35) +#define FIT_LAP_FIELD_NUM_AVG_STROKE_DISTANCE ((FIT_LAP_FIELD_NUM)37) +#define FIT_LAP_FIELD_NUM_NUM_ACTIVE_LENGTHS ((FIT_LAP_FIELD_NUM)40) +#define FIT_LAP_FIELD_NUM_AVG_ALTITUDE ((FIT_LAP_FIELD_NUM)42) +#define FIT_LAP_FIELD_NUM_MAX_ALTITUDE ((FIT_LAP_FIELD_NUM)43) +#define FIT_LAP_FIELD_NUM_AVG_GRADE ((FIT_LAP_FIELD_NUM)45) +#define FIT_LAP_FIELD_NUM_AVG_POS_GRADE ((FIT_LAP_FIELD_NUM)46) +#define FIT_LAP_FIELD_NUM_AVG_NEG_GRADE ((FIT_LAP_FIELD_NUM)47) +#define FIT_LAP_FIELD_NUM_MAX_POS_GRADE ((FIT_LAP_FIELD_NUM)48) +#define FIT_LAP_FIELD_NUM_MAX_NEG_GRADE ((FIT_LAP_FIELD_NUM)49) +#define FIT_LAP_FIELD_NUM_AVG_POS_VERTICAL_SPEED ((FIT_LAP_FIELD_NUM)53) +#define FIT_LAP_FIELD_NUM_AVG_NEG_VERTICAL_SPEED ((FIT_LAP_FIELD_NUM)54) +#define FIT_LAP_FIELD_NUM_MAX_POS_VERTICAL_SPEED ((FIT_LAP_FIELD_NUM)55) +#define FIT_LAP_FIELD_NUM_MAX_NEG_VERTICAL_SPEED ((FIT_LAP_FIELD_NUM)56) +#define FIT_LAP_FIELD_NUM_REPETITION_NUM ((FIT_LAP_FIELD_NUM)61) +#define FIT_LAP_FIELD_NUM_MIN_ALTITUDE ((FIT_LAP_FIELD_NUM)62) +#define FIT_LAP_FIELD_NUM_WKT_STEP_INDEX ((FIT_LAP_FIELD_NUM)71) +#define FIT_LAP_FIELD_NUM_OPPONENT_SCORE ((FIT_LAP_FIELD_NUM)74) +#define FIT_LAP_FIELD_NUM_STROKE_COUNT ((FIT_LAP_FIELD_NUM)75) +#define FIT_LAP_FIELD_NUM_ZONE_COUNT ((FIT_LAP_FIELD_NUM)76) +#define FIT_LAP_FIELD_NUM_AVG_VERTICAL_OSCILLATION ((FIT_LAP_FIELD_NUM)77) +#define FIT_LAP_FIELD_NUM_AVG_STANCE_TIME_PERCENT ((FIT_LAP_FIELD_NUM)78) +#define FIT_LAP_FIELD_NUM_AVG_STANCE_TIME ((FIT_LAP_FIELD_NUM)79) +#define FIT_LAP_FIELD_NUM_PLAYER_SCORE ((FIT_LAP_FIELD_NUM)83) +#define FIT_LAP_FIELD_NUM_AVG_TOTAL_HEMOGLOBIN_CONC ((FIT_LAP_FIELD_NUM)84) +#define FIT_LAP_FIELD_NUM_MIN_TOTAL_HEMOGLOBIN_CONC ((FIT_LAP_FIELD_NUM)85) +#define FIT_LAP_FIELD_NUM_MAX_TOTAL_HEMOGLOBIN_CONC ((FIT_LAP_FIELD_NUM)86) +#define FIT_LAP_FIELD_NUM_AVG_SATURATED_HEMOGLOBIN_PERCENT ((FIT_LAP_FIELD_NUM)87) +#define FIT_LAP_FIELD_NUM_MIN_SATURATED_HEMOGLOBIN_PERCENT ((FIT_LAP_FIELD_NUM)88) +#define FIT_LAP_FIELD_NUM_MAX_SATURATED_HEMOGLOBIN_PERCENT ((FIT_LAP_FIELD_NUM)89) +#define FIT_LAP_FIELD_NUM_AVG_VAM ((FIT_LAP_FIELD_NUM)121) +#define FIT_LAP_FIELD_NUM_EVENT ((FIT_LAP_FIELD_NUM)0) +#define FIT_LAP_FIELD_NUM_EVENT_TYPE ((FIT_LAP_FIELD_NUM)1) +#define FIT_LAP_FIELD_NUM_AVG_HEART_RATE ((FIT_LAP_FIELD_NUM)15) +#define FIT_LAP_FIELD_NUM_MAX_HEART_RATE ((FIT_LAP_FIELD_NUM)16) +#define FIT_LAP_FIELD_NUM_AVG_CADENCE ((FIT_LAP_FIELD_NUM)17) +#define FIT_LAP_FIELD_NUM_MAX_CADENCE ((FIT_LAP_FIELD_NUM)18) +#define FIT_LAP_FIELD_NUM_INTENSITY ((FIT_LAP_FIELD_NUM)23) +#define FIT_LAP_FIELD_NUM_LAP_TRIGGER ((FIT_LAP_FIELD_NUM)24) +#define FIT_LAP_FIELD_NUM_SPORT ((FIT_LAP_FIELD_NUM)25) +#define FIT_LAP_FIELD_NUM_EVENT_GROUP ((FIT_LAP_FIELD_NUM)26) +#define FIT_LAP_FIELD_NUM_SWIM_STROKE ((FIT_LAP_FIELD_NUM)38) +#define FIT_LAP_FIELD_NUM_SUB_SPORT ((FIT_LAP_FIELD_NUM)39) +#define FIT_LAP_FIELD_NUM_GPS_ACCURACY ((FIT_LAP_FIELD_NUM)44) +#define FIT_LAP_FIELD_NUM_AVG_TEMPERATURE ((FIT_LAP_FIELD_NUM)50) +#define FIT_LAP_FIELD_NUM_MAX_TEMPERATURE ((FIT_LAP_FIELD_NUM)51) +#define FIT_LAP_FIELD_NUM_MIN_HEART_RATE ((FIT_LAP_FIELD_NUM)63) +#define FIT_LAP_FIELD_NUM_AVG_FRACTIONAL_CADENCE ((FIT_LAP_FIELD_NUM)80) +#define FIT_LAP_FIELD_NUM_MAX_FRACTIONAL_CADENCE ((FIT_LAP_FIELD_NUM)81) +#define FIT_LAP_FIELD_NUM_TOTAL_FRACTIONAL_CYCLES ((FIT_LAP_FIELD_NUM)82) + +typedef enum +{ + FIT_LAP_MESG_TIMESTAMP, + FIT_LAP_MESG_START_TIME, + FIT_LAP_MESG_START_POSITION_LAT, + FIT_LAP_MESG_START_POSITION_LONG, + FIT_LAP_MESG_END_POSITION_LAT, + FIT_LAP_MESG_END_POSITION_LONG, + FIT_LAP_MESG_TOTAL_ELAPSED_TIME, + FIT_LAP_MESG_TOTAL_TIMER_TIME, + FIT_LAP_MESG_TOTAL_DISTANCE, + FIT_LAP_MESG_TOTAL_CYCLES, + FIT_LAP_MESG_TOTAL_WORK, + FIT_LAP_MESG_TOTAL_MOVING_TIME, + FIT_LAP_MESG_TIME_IN_HR_ZONE, + FIT_LAP_MESG_TIME_IN_SPEED_ZONE, + FIT_LAP_MESG_TIME_IN_CADENCE_ZONE, + FIT_LAP_MESG_TIME_IN_POWER_ZONE, + FIT_LAP_MESG_ENHANCED_AVG_SPEED, + FIT_LAP_MESG_ENHANCED_MAX_SPEED, + FIT_LAP_MESG_ENHANCED_AVG_ALTITUDE, + FIT_LAP_MESG_ENHANCED_MIN_ALTITUDE, + FIT_LAP_MESG_ENHANCED_MAX_ALTITUDE, + FIT_LAP_MESG_MESSAGE_INDEX, + FIT_LAP_MESG_TOTAL_CALORIES, + FIT_LAP_MESG_TOTAL_FAT_CALORIES, + FIT_LAP_MESG_AVG_SPEED, + FIT_LAP_MESG_MAX_SPEED, + FIT_LAP_MESG_AVG_POWER, + FIT_LAP_MESG_MAX_POWER, + FIT_LAP_MESG_TOTAL_ASCENT, + FIT_LAP_MESG_TOTAL_DESCENT, + FIT_LAP_MESG_NUM_LENGTHS, + FIT_LAP_MESG_NORMALIZED_POWER, + FIT_LAP_MESG_LEFT_RIGHT_BALANCE, + FIT_LAP_MESG_FIRST_LENGTH_INDEX, + FIT_LAP_MESG_AVG_STROKE_DISTANCE, + FIT_LAP_MESG_NUM_ACTIVE_LENGTHS, + FIT_LAP_MESG_AVG_ALTITUDE, + FIT_LAP_MESG_MAX_ALTITUDE, + FIT_LAP_MESG_AVG_GRADE, + FIT_LAP_MESG_AVG_POS_GRADE, + FIT_LAP_MESG_AVG_NEG_GRADE, + FIT_LAP_MESG_MAX_POS_GRADE, + FIT_LAP_MESG_MAX_NEG_GRADE, + FIT_LAP_MESG_AVG_POS_VERTICAL_SPEED, + FIT_LAP_MESG_AVG_NEG_VERTICAL_SPEED, + FIT_LAP_MESG_MAX_POS_VERTICAL_SPEED, + FIT_LAP_MESG_MAX_NEG_VERTICAL_SPEED, + FIT_LAP_MESG_REPETITION_NUM, + FIT_LAP_MESG_MIN_ALTITUDE, + FIT_LAP_MESG_WKT_STEP_INDEX, + FIT_LAP_MESG_OPPONENT_SCORE, + FIT_LAP_MESG_STROKE_COUNT, + FIT_LAP_MESG_ZONE_COUNT, + FIT_LAP_MESG_AVG_VERTICAL_OSCILLATION, + FIT_LAP_MESG_AVG_STANCE_TIME_PERCENT, + FIT_LAP_MESG_AVG_STANCE_TIME, + FIT_LAP_MESG_PLAYER_SCORE, + FIT_LAP_MESG_AVG_TOTAL_HEMOGLOBIN_CONC, + FIT_LAP_MESG_MIN_TOTAL_HEMOGLOBIN_CONC, + FIT_LAP_MESG_MAX_TOTAL_HEMOGLOBIN_CONC, + FIT_LAP_MESG_AVG_SATURATED_HEMOGLOBIN_PERCENT, + FIT_LAP_MESG_MIN_SATURATED_HEMOGLOBIN_PERCENT, + FIT_LAP_MESG_MAX_SATURATED_HEMOGLOBIN_PERCENT, + FIT_LAP_MESG_AVG_VAM, + FIT_LAP_MESG_EVENT, + FIT_LAP_MESG_EVENT_TYPE, + FIT_LAP_MESG_AVG_HEART_RATE, + FIT_LAP_MESG_MAX_HEART_RATE, + FIT_LAP_MESG_AVG_CADENCE, + FIT_LAP_MESG_MAX_CADENCE, + FIT_LAP_MESG_INTENSITY, + FIT_LAP_MESG_LAP_TRIGGER, + FIT_LAP_MESG_SPORT, + FIT_LAP_MESG_EVENT_GROUP, + FIT_LAP_MESG_SWIM_STROKE, + FIT_LAP_MESG_SUB_SPORT, + FIT_LAP_MESG_GPS_ACCURACY, + FIT_LAP_MESG_AVG_TEMPERATURE, + FIT_LAP_MESG_MAX_TEMPERATURE, + FIT_LAP_MESG_MIN_HEART_RATE, + FIT_LAP_MESG_AVG_FRACTIONAL_CADENCE, + FIT_LAP_MESG_MAX_FRACTIONAL_CADENCE, + FIT_LAP_MESG_TOTAL_FRACTIONAL_CYCLES, + FIT_LAP_MESG_FIELDS +} FIT_LAP_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_LAP_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_LAP_MESG_DEF; + +// length message + +#define FIT_LENGTH_MESG_SIZE 38 +#define FIT_LENGTH_MESG_DEF_SIZE 59 +#define FIT_LENGTH_MESG_STROKE_COUNT_COUNT 1 +#define FIT_LENGTH_MESG_ZONE_COUNT_COUNT 1 + +typedef struct +{ + FIT_DATE_TIME timestamp; // + FIT_DATE_TIME start_time; // + FIT_UINT32 total_elapsed_time; // 1000 * s + 0, + FIT_UINT32 total_timer_time; // 1000 * s + 0, + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 total_strokes; // 1 * strokes + 0, + FIT_UINT16 avg_speed; // 1000 * m/s + 0, + FIT_UINT16 total_calories; // 1 * kcal + 0, + FIT_UINT16 player_score; // + FIT_UINT16 opponent_score; // + FIT_UINT16 stroke_count[FIT_LENGTH_MESG_STROKE_COUNT_COUNT]; // 1 * counts + 0, stroke_type enum used as the index + FIT_UINT16 zone_count[FIT_LENGTH_MESG_ZONE_COUNT_COUNT]; // 1 * counts + 0, zone number used as the index + FIT_EVENT event; // + FIT_EVENT_TYPE event_type; // + FIT_SWIM_STROKE swim_stroke; // 1 * swim_stroke + 0, + FIT_UINT8 avg_swimming_cadence; // 1 * strokes/min + 0, + FIT_UINT8 event_group; // + FIT_LENGTH_TYPE length_type; // +} FIT_LENGTH_MESG; + +typedef FIT_UINT8 FIT_LENGTH_FIELD_NUM; + +#define FIT_LENGTH_FIELD_NUM_TIMESTAMP ((FIT_LENGTH_FIELD_NUM)253) +#define FIT_LENGTH_FIELD_NUM_START_TIME ((FIT_LENGTH_FIELD_NUM)2) +#define FIT_LENGTH_FIELD_NUM_TOTAL_ELAPSED_TIME ((FIT_LENGTH_FIELD_NUM)3) +#define FIT_LENGTH_FIELD_NUM_TOTAL_TIMER_TIME ((FIT_LENGTH_FIELD_NUM)4) +#define FIT_LENGTH_FIELD_NUM_MESSAGE_INDEX ((FIT_LENGTH_FIELD_NUM)254) +#define FIT_LENGTH_FIELD_NUM_TOTAL_STROKES ((FIT_LENGTH_FIELD_NUM)5) +#define FIT_LENGTH_FIELD_NUM_AVG_SPEED ((FIT_LENGTH_FIELD_NUM)6) +#define FIT_LENGTH_FIELD_NUM_TOTAL_CALORIES ((FIT_LENGTH_FIELD_NUM)11) +#define FIT_LENGTH_FIELD_NUM_PLAYER_SCORE ((FIT_LENGTH_FIELD_NUM)18) +#define FIT_LENGTH_FIELD_NUM_OPPONENT_SCORE ((FIT_LENGTH_FIELD_NUM)19) +#define FIT_LENGTH_FIELD_NUM_STROKE_COUNT ((FIT_LENGTH_FIELD_NUM)20) +#define FIT_LENGTH_FIELD_NUM_ZONE_COUNT ((FIT_LENGTH_FIELD_NUM)21) +#define FIT_LENGTH_FIELD_NUM_EVENT ((FIT_LENGTH_FIELD_NUM)0) +#define FIT_LENGTH_FIELD_NUM_EVENT_TYPE ((FIT_LENGTH_FIELD_NUM)1) +#define FIT_LENGTH_FIELD_NUM_SWIM_STROKE ((FIT_LENGTH_FIELD_NUM)7) +#define FIT_LENGTH_FIELD_NUM_AVG_SWIMMING_CADENCE ((FIT_LENGTH_FIELD_NUM)9) +#define FIT_LENGTH_FIELD_NUM_EVENT_GROUP ((FIT_LENGTH_FIELD_NUM)10) +#define FIT_LENGTH_FIELD_NUM_LENGTH_TYPE ((FIT_LENGTH_FIELD_NUM)12) + +typedef enum +{ + FIT_LENGTH_MESG_TIMESTAMP, + FIT_LENGTH_MESG_START_TIME, + FIT_LENGTH_MESG_TOTAL_ELAPSED_TIME, + FIT_LENGTH_MESG_TOTAL_TIMER_TIME, + FIT_LENGTH_MESG_MESSAGE_INDEX, + FIT_LENGTH_MESG_TOTAL_STROKES, + FIT_LENGTH_MESG_AVG_SPEED, + FIT_LENGTH_MESG_TOTAL_CALORIES, + FIT_LENGTH_MESG_PLAYER_SCORE, + FIT_LENGTH_MESG_OPPONENT_SCORE, + FIT_LENGTH_MESG_STROKE_COUNT, + FIT_LENGTH_MESG_ZONE_COUNT, + FIT_LENGTH_MESG_EVENT, + FIT_LENGTH_MESG_EVENT_TYPE, + FIT_LENGTH_MESG_SWIM_STROKE, + FIT_LENGTH_MESG_AVG_SWIMMING_CADENCE, + FIT_LENGTH_MESG_EVENT_GROUP, + FIT_LENGTH_MESG_LENGTH_TYPE, + FIT_LENGTH_MESG_FIELDS +} FIT_LENGTH_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_LENGTH_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_LENGTH_MESG_DEF; + +// record message + +#define FIT_RECORD_MESG_SIZE 99 +#define FIT_RECORD_MESG_DEF_SIZE 149 +#define FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT 3 +#define FIT_RECORD_MESG_SPEED_1S_COUNT 5 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_SINT32 position_lat; // 1 * semicircles + 0, + FIT_SINT32 position_long; // 1 * semicircles + 0, + FIT_UINT32 distance; // 100 * m + 0, + FIT_SINT32 time_from_course; // 1000 * s + 0, + FIT_UINT32 total_cycles; // 1 * cycles + 0, + FIT_UINT32 accumulated_power; // 1 * watts + 0, + FIT_UINT32 enhanced_speed; // 1000 * m/s + 0, + FIT_UINT32 enhanced_altitude; // 5 * m + 500, + FIT_UINT16 altitude; // 5 * m + 500, + FIT_UINT16 speed; // 1000 * m/s + 0, + FIT_UINT16 power; // 1 * watts + 0, + FIT_SINT16 grade; // 100 * % + 0, + FIT_UINT16 compressed_accumulated_power; // 1 * watts + 0, + FIT_SINT16 vertical_speed; // 1000 * m/s + 0, + FIT_UINT16 calories; // 1 * kcal + 0, + FIT_UINT16 vertical_oscillation; // 10 * mm + 0, + FIT_UINT16 stance_time_percent; // 100 * percent + 0, + FIT_UINT16 stance_time; // 10 * ms + 0, + FIT_UINT16 ball_speed; // 100 * m/s + 0, + FIT_UINT16 cadence256; // 256 * rpm + 0, Log cadence and fractional cadence for backwards compatability + FIT_UINT16 total_hemoglobin_conc; // 100 * g/dL + 0, Total saturated and unsaturated hemoglobin + FIT_UINT16 total_hemoglobin_conc_min; // 100 * g/dL + 0, Min saturated and unsaturated hemoglobin + FIT_UINT16 total_hemoglobin_conc_max; // 100 * g/dL + 0, Max saturated and unsaturated hemoglobin + FIT_UINT16 saturated_hemoglobin_percent; // 10 * % + 0, Percentage of hemoglobin saturated with oxygen + FIT_UINT16 saturated_hemoglobin_percent_min; // 10 * % + 0, Min percentage of hemoglobin saturated with oxygen + FIT_UINT16 saturated_hemoglobin_percent_max; // 10 * % + 0, Max percentage of hemoglobin saturated with oxygen + FIT_UINT8 heart_rate; // 1 * bpm + 0, + FIT_UINT8 cadence; // 1 * rpm + 0, + FIT_BYTE compressed_speed_distance[FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT]; // + FIT_UINT8 resistance; // Relative. 0 is none 254 is Max. + FIT_UINT8 cycle_length; // 100 * m + 0, + FIT_SINT8 temperature; // 1 * C + 0, + FIT_UINT8 speed_1s[FIT_RECORD_MESG_SPEED_1S_COUNT]; // 16 * m/s + 0, Speed at 1s intervals. Timestamp field indicates time of last array element. + FIT_UINT8 cycles; // 1 * cycles + 0, + FIT_LEFT_RIGHT_BALANCE left_right_balance; // + FIT_UINT8 gps_accuracy; // 1 * m + 0, + FIT_ACTIVITY_TYPE activity_type; // + FIT_UINT8 left_torque_effectiveness; // 2 * percent + 0, + FIT_UINT8 right_torque_effectiveness; // 2 * percent + 0, + FIT_UINT8 left_pedal_smoothness; // 2 * percent + 0, + FIT_UINT8 right_pedal_smoothness; // 2 * percent + 0, + FIT_UINT8 combined_pedal_smoothness; // 2 * percent + 0, + FIT_UINT8 time128; // 128 * s + 0, + FIT_STROKE_TYPE stroke_type; // + FIT_UINT8 zone; // + FIT_UINT8 fractional_cadence; // 128 * rpm + 0, + FIT_DEVICE_INDEX device_index; // +} FIT_RECORD_MESG; + +typedef FIT_UINT8 FIT_RECORD_FIELD_NUM; + +#define FIT_RECORD_FIELD_NUM_TIMESTAMP ((FIT_RECORD_FIELD_NUM)253) +#define FIT_RECORD_FIELD_NUM_POSITION_LAT ((FIT_RECORD_FIELD_NUM)0) +#define FIT_RECORD_FIELD_NUM_POSITION_LONG ((FIT_RECORD_FIELD_NUM)1) +#define FIT_RECORD_FIELD_NUM_DISTANCE ((FIT_RECORD_FIELD_NUM)5) +#define FIT_RECORD_FIELD_NUM_TIME_FROM_COURSE ((FIT_RECORD_FIELD_NUM)11) +#define FIT_RECORD_FIELD_NUM_TOTAL_CYCLES ((FIT_RECORD_FIELD_NUM)19) +#define FIT_RECORD_FIELD_NUM_ACCUMULATED_POWER ((FIT_RECORD_FIELD_NUM)29) +#define FIT_RECORD_FIELD_NUM_ENHANCED_SPEED ((FIT_RECORD_FIELD_NUM)73) +#define FIT_RECORD_FIELD_NUM_ENHANCED_ALTITUDE ((FIT_RECORD_FIELD_NUM)78) +#define FIT_RECORD_FIELD_NUM_ALTITUDE ((FIT_RECORD_FIELD_NUM)2) +#define FIT_RECORD_FIELD_NUM_SPEED ((FIT_RECORD_FIELD_NUM)6) +#define FIT_RECORD_FIELD_NUM_POWER ((FIT_RECORD_FIELD_NUM)7) +#define FIT_RECORD_FIELD_NUM_GRADE ((FIT_RECORD_FIELD_NUM)9) +#define FIT_RECORD_FIELD_NUM_COMPRESSED_ACCUMULATED_POWER ((FIT_RECORD_FIELD_NUM)28) +#define FIT_RECORD_FIELD_NUM_VERTICAL_SPEED ((FIT_RECORD_FIELD_NUM)32) +#define FIT_RECORD_FIELD_NUM_CALORIES ((FIT_RECORD_FIELD_NUM)33) +#define FIT_RECORD_FIELD_NUM_VERTICAL_OSCILLATION ((FIT_RECORD_FIELD_NUM)39) +#define FIT_RECORD_FIELD_NUM_STANCE_TIME_PERCENT ((FIT_RECORD_FIELD_NUM)40) +#define FIT_RECORD_FIELD_NUM_STANCE_TIME ((FIT_RECORD_FIELD_NUM)41) +#define FIT_RECORD_FIELD_NUM_BALL_SPEED ((FIT_RECORD_FIELD_NUM)51) +#define FIT_RECORD_FIELD_NUM_CADENCE256 ((FIT_RECORD_FIELD_NUM)52) +#define FIT_RECORD_FIELD_NUM_TOTAL_HEMOGLOBIN_CONC ((FIT_RECORD_FIELD_NUM)54) +#define FIT_RECORD_FIELD_NUM_TOTAL_HEMOGLOBIN_CONC_MIN ((FIT_RECORD_FIELD_NUM)55) +#define FIT_RECORD_FIELD_NUM_TOTAL_HEMOGLOBIN_CONC_MAX ((FIT_RECORD_FIELD_NUM)56) +#define FIT_RECORD_FIELD_NUM_SATURATED_HEMOGLOBIN_PERCENT ((FIT_RECORD_FIELD_NUM)57) +#define FIT_RECORD_FIELD_NUM_SATURATED_HEMOGLOBIN_PERCENT_MIN ((FIT_RECORD_FIELD_NUM)58) +#define FIT_RECORD_FIELD_NUM_SATURATED_HEMOGLOBIN_PERCENT_MAX ((FIT_RECORD_FIELD_NUM)59) +#define FIT_RECORD_FIELD_NUM_HEART_RATE ((FIT_RECORD_FIELD_NUM)3) +#define FIT_RECORD_FIELD_NUM_CADENCE ((FIT_RECORD_FIELD_NUM)4) +#define FIT_RECORD_FIELD_NUM_COMPRESSED_SPEED_DISTANCE ((FIT_RECORD_FIELD_NUM)8) +#define FIT_RECORD_FIELD_NUM_RESISTANCE ((FIT_RECORD_FIELD_NUM)10) +#define FIT_RECORD_FIELD_NUM_CYCLE_LENGTH ((FIT_RECORD_FIELD_NUM)12) +#define FIT_RECORD_FIELD_NUM_TEMPERATURE ((FIT_RECORD_FIELD_NUM)13) +#define FIT_RECORD_FIELD_NUM_SPEED_1S ((FIT_RECORD_FIELD_NUM)17) +#define FIT_RECORD_FIELD_NUM_CYCLES ((FIT_RECORD_FIELD_NUM)18) +#define FIT_RECORD_FIELD_NUM_LEFT_RIGHT_BALANCE ((FIT_RECORD_FIELD_NUM)30) +#define FIT_RECORD_FIELD_NUM_GPS_ACCURACY ((FIT_RECORD_FIELD_NUM)31) +#define FIT_RECORD_FIELD_NUM_ACTIVITY_TYPE ((FIT_RECORD_FIELD_NUM)42) +#define FIT_RECORD_FIELD_NUM_LEFT_TORQUE_EFFECTIVENESS ((FIT_RECORD_FIELD_NUM)43) +#define FIT_RECORD_FIELD_NUM_RIGHT_TORQUE_EFFECTIVENESS ((FIT_RECORD_FIELD_NUM)44) +#define FIT_RECORD_FIELD_NUM_LEFT_PEDAL_SMOOTHNESS ((FIT_RECORD_FIELD_NUM)45) +#define FIT_RECORD_FIELD_NUM_RIGHT_PEDAL_SMOOTHNESS ((FIT_RECORD_FIELD_NUM)46) +#define FIT_RECORD_FIELD_NUM_COMBINED_PEDAL_SMOOTHNESS ((FIT_RECORD_FIELD_NUM)47) +#define FIT_RECORD_FIELD_NUM_TIME128 ((FIT_RECORD_FIELD_NUM)48) +#define FIT_RECORD_FIELD_NUM_STROKE_TYPE ((FIT_RECORD_FIELD_NUM)49) +#define FIT_RECORD_FIELD_NUM_ZONE ((FIT_RECORD_FIELD_NUM)50) +#define FIT_RECORD_FIELD_NUM_FRACTIONAL_CADENCE ((FIT_RECORD_FIELD_NUM)53) +#define FIT_RECORD_FIELD_NUM_DEVICE_INDEX ((FIT_RECORD_FIELD_NUM)62) + +typedef enum +{ + FIT_RECORD_MESG_TIMESTAMP, + FIT_RECORD_MESG_POSITION_LAT, + FIT_RECORD_MESG_POSITION_LONG, + FIT_RECORD_MESG_DISTANCE, + FIT_RECORD_MESG_TIME_FROM_COURSE, + FIT_RECORD_MESG_TOTAL_CYCLES, + FIT_RECORD_MESG_ACCUMULATED_POWER, + FIT_RECORD_MESG_ENHANCED_SPEED, + FIT_RECORD_MESG_ENHANCED_ALTITUDE, + FIT_RECORD_MESG_ALTITUDE, + FIT_RECORD_MESG_SPEED, + FIT_RECORD_MESG_POWER, + FIT_RECORD_MESG_GRADE, + FIT_RECORD_MESG_COMPRESSED_ACCUMULATED_POWER, + FIT_RECORD_MESG_VERTICAL_SPEED, + FIT_RECORD_MESG_CALORIES, + FIT_RECORD_MESG_VERTICAL_OSCILLATION, + FIT_RECORD_MESG_STANCE_TIME_PERCENT, + FIT_RECORD_MESG_STANCE_TIME, + FIT_RECORD_MESG_BALL_SPEED, + FIT_RECORD_MESG_CADENCE256, + FIT_RECORD_MESG_TOTAL_HEMOGLOBIN_CONC, + FIT_RECORD_MESG_TOTAL_HEMOGLOBIN_CONC_MIN, + FIT_RECORD_MESG_TOTAL_HEMOGLOBIN_CONC_MAX, + FIT_RECORD_MESG_SATURATED_HEMOGLOBIN_PERCENT, + FIT_RECORD_MESG_SATURATED_HEMOGLOBIN_PERCENT_MIN, + FIT_RECORD_MESG_SATURATED_HEMOGLOBIN_PERCENT_MAX, + FIT_RECORD_MESG_HEART_RATE, + FIT_RECORD_MESG_CADENCE, + FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE, + FIT_RECORD_MESG_RESISTANCE, + FIT_RECORD_MESG_CYCLE_LENGTH, + FIT_RECORD_MESG_TEMPERATURE, + FIT_RECORD_MESG_SPEED_1S, + FIT_RECORD_MESG_CYCLES, + FIT_RECORD_MESG_LEFT_RIGHT_BALANCE, + FIT_RECORD_MESG_GPS_ACCURACY, + FIT_RECORD_MESG_ACTIVITY_TYPE, + FIT_RECORD_MESG_LEFT_TORQUE_EFFECTIVENESS, + FIT_RECORD_MESG_RIGHT_TORQUE_EFFECTIVENESS, + FIT_RECORD_MESG_LEFT_PEDAL_SMOOTHNESS, + FIT_RECORD_MESG_RIGHT_PEDAL_SMOOTHNESS, + FIT_RECORD_MESG_COMBINED_PEDAL_SMOOTHNESS, + FIT_RECORD_MESG_TIME128, + FIT_RECORD_MESG_STROKE_TYPE, + FIT_RECORD_MESG_ZONE, + FIT_RECORD_MESG_FRACTIONAL_CADENCE, + FIT_RECORD_MESG_DEVICE_INDEX, + FIT_RECORD_MESG_FIELDS +} FIT_RECORD_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_RECORD_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_RECORD_MESG_DEF; + +// event message + +#define FIT_EVENT_MESG_SIZE 23 +#define FIT_EVENT_MESG_DEF_SIZE 47 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_UINT32 data; // + FIT_UINT16 data16; // + FIT_UINT16 score; // Do not populate directly. Autogenerated by decoder for sport_point subfield components + FIT_UINT16 opponent_score; // Do not populate directly. Autogenerated by decoder for sport_point subfield components + FIT_EVENT event; // + FIT_EVENT_TYPE event_type; // + FIT_UINT8 event_group; // + FIT_UINT8Z front_gear_num; // Do not populate directly. Autogenerated by decoder for gear_change subfield components. Front gear number. 1 is innermost. + FIT_UINT8Z front_gear; // Do not populate directly. Autogenerated by decoder for gear_change subfield components. Number of front teeth. + FIT_UINT8Z rear_gear_num; // Do not populate directly. Autogenerated by decoder for gear_change subfield components. Rear gear number. 1 is innermost. + FIT_UINT8Z rear_gear; // Do not populate directly. Autogenerated by decoder for gear_change subfield components. Number of rear teeth. + FIT_RADAR_THREAT_LEVEL_TYPE radar_threat_level_max; // Do not populate directly. Autogenerated by decoder for threat_alert subfield components. + FIT_UINT8 radar_threat_count; // Do not populate directly. Autogenerated by decoder for threat_alert subfield components. +} FIT_EVENT_MESG; + +typedef FIT_UINT8 FIT_EVENT_FIELD_NUM; + +#define FIT_EVENT_FIELD_NUM_TIMESTAMP ((FIT_EVENT_FIELD_NUM)253) +#define FIT_EVENT_FIELD_NUM_DATA ((FIT_EVENT_FIELD_NUM)3) +#define FIT_EVENT_FIELD_NUM_DATA16 ((FIT_EVENT_FIELD_NUM)2) +#define FIT_EVENT_FIELD_NUM_SCORE ((FIT_EVENT_FIELD_NUM)7) +#define FIT_EVENT_FIELD_NUM_OPPONENT_SCORE ((FIT_EVENT_FIELD_NUM)8) +#define FIT_EVENT_FIELD_NUM_EVENT ((FIT_EVENT_FIELD_NUM)0) +#define FIT_EVENT_FIELD_NUM_EVENT_TYPE ((FIT_EVENT_FIELD_NUM)1) +#define FIT_EVENT_FIELD_NUM_EVENT_GROUP ((FIT_EVENT_FIELD_NUM)4) +#define FIT_EVENT_FIELD_NUM_FRONT_GEAR_NUM ((FIT_EVENT_FIELD_NUM)9) +#define FIT_EVENT_FIELD_NUM_FRONT_GEAR ((FIT_EVENT_FIELD_NUM)10) +#define FIT_EVENT_FIELD_NUM_REAR_GEAR_NUM ((FIT_EVENT_FIELD_NUM)11) +#define FIT_EVENT_FIELD_NUM_REAR_GEAR ((FIT_EVENT_FIELD_NUM)12) +#define FIT_EVENT_FIELD_NUM_RADAR_THREAT_LEVEL_MAX ((FIT_EVENT_FIELD_NUM)21) +#define FIT_EVENT_FIELD_NUM_RADAR_THREAT_COUNT ((FIT_EVENT_FIELD_NUM)22) + +typedef enum +{ + FIT_EVENT_MESG_TIMESTAMP, + FIT_EVENT_MESG_DATA, + FIT_EVENT_MESG_DATA16, + FIT_EVENT_MESG_SCORE, + FIT_EVENT_MESG_OPPONENT_SCORE, + FIT_EVENT_MESG_EVENT, + FIT_EVENT_MESG_EVENT_TYPE, + FIT_EVENT_MESG_EVENT_GROUP, + FIT_EVENT_MESG_FRONT_GEAR_NUM, + FIT_EVENT_MESG_FRONT_GEAR, + FIT_EVENT_MESG_REAR_GEAR_NUM, + FIT_EVENT_MESG_REAR_GEAR, + FIT_EVENT_MESG_RADAR_THREAT_LEVEL_MAX, + FIT_EVENT_MESG_RADAR_THREAT_COUNT, + FIT_EVENT_MESG_FIELDS +} FIT_EVENT_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_EVENT_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_EVENT_MESG_DEF; + +// device_info message + +#define FIT_DEVICE_INFO_MESG_SIZE 51 +#define FIT_DEVICE_INFO_MESG_DEF_SIZE 59 +#define FIT_DEVICE_INFO_MESG_PRODUCT_NAME_COUNT 20 +#define FIT_DEVICE_INFO_MESG_DESCRIPTOR_COUNT 1 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_UINT32Z serial_number; // + FIT_UINT32 cum_operating_time; // 1 * s + 0, Reset by new battery or charge. + FIT_STRING product_name[FIT_DEVICE_INFO_MESG_PRODUCT_NAME_COUNT]; // Optional free form string to indicate the devices name or model + FIT_MANUFACTURER manufacturer; // + FIT_UINT16 product; // + FIT_UINT16 software_version; // + FIT_UINT16 battery_voltage; // 256 * V + 0, + FIT_UINT16Z ant_device_number; // + FIT_DEVICE_INDEX device_index; // + FIT_UINT8 device_type; // + FIT_UINT8 hardware_version; // + FIT_BATTERY_STATUS battery_status; // + FIT_BODY_LOCATION sensor_position; // Indicates the location of the sensor + FIT_STRING descriptor[FIT_DEVICE_INFO_MESG_DESCRIPTOR_COUNT]; // Used to describe the sensor or location + FIT_UINT8Z ant_transmission_type; // + FIT_ANT_NETWORK ant_network; // + FIT_SOURCE_TYPE source_type; // +} FIT_DEVICE_INFO_MESG; + +typedef FIT_UINT8 FIT_DEVICE_INFO_FIELD_NUM; + +#define FIT_DEVICE_INFO_FIELD_NUM_TIMESTAMP ((FIT_DEVICE_INFO_FIELD_NUM)253) +#define FIT_DEVICE_INFO_FIELD_NUM_SERIAL_NUMBER ((FIT_DEVICE_INFO_FIELD_NUM)3) +#define FIT_DEVICE_INFO_FIELD_NUM_CUM_OPERATING_TIME ((FIT_DEVICE_INFO_FIELD_NUM)7) +#define FIT_DEVICE_INFO_FIELD_NUM_PRODUCT_NAME ((FIT_DEVICE_INFO_FIELD_NUM)27) +#define FIT_DEVICE_INFO_FIELD_NUM_MANUFACTURER ((FIT_DEVICE_INFO_FIELD_NUM)2) +#define FIT_DEVICE_INFO_FIELD_NUM_PRODUCT ((FIT_DEVICE_INFO_FIELD_NUM)4) +#define FIT_DEVICE_INFO_FIELD_NUM_SOFTWARE_VERSION ((FIT_DEVICE_INFO_FIELD_NUM)5) +#define FIT_DEVICE_INFO_FIELD_NUM_BATTERY_VOLTAGE ((FIT_DEVICE_INFO_FIELD_NUM)10) +#define FIT_DEVICE_INFO_FIELD_NUM_ANT_DEVICE_NUMBER ((FIT_DEVICE_INFO_FIELD_NUM)21) +#define FIT_DEVICE_INFO_FIELD_NUM_DEVICE_INDEX ((FIT_DEVICE_INFO_FIELD_NUM)0) +#define FIT_DEVICE_INFO_FIELD_NUM_DEVICE_TYPE ((FIT_DEVICE_INFO_FIELD_NUM)1) +#define FIT_DEVICE_INFO_FIELD_NUM_HARDWARE_VERSION ((FIT_DEVICE_INFO_FIELD_NUM)6) +#define FIT_DEVICE_INFO_FIELD_NUM_BATTERY_STATUS ((FIT_DEVICE_INFO_FIELD_NUM)11) +#define FIT_DEVICE_INFO_FIELD_NUM_SENSOR_POSITION ((FIT_DEVICE_INFO_FIELD_NUM)18) +#define FIT_DEVICE_INFO_FIELD_NUM_DESCRIPTOR ((FIT_DEVICE_INFO_FIELD_NUM)19) +#define FIT_DEVICE_INFO_FIELD_NUM_ANT_TRANSMISSION_TYPE ((FIT_DEVICE_INFO_FIELD_NUM)20) +#define FIT_DEVICE_INFO_FIELD_NUM_ANT_NETWORK ((FIT_DEVICE_INFO_FIELD_NUM)22) +#define FIT_DEVICE_INFO_FIELD_NUM_SOURCE_TYPE ((FIT_DEVICE_INFO_FIELD_NUM)25) + +typedef enum +{ + FIT_DEVICE_INFO_MESG_TIMESTAMP, + FIT_DEVICE_INFO_MESG_SERIAL_NUMBER, + FIT_DEVICE_INFO_MESG_CUM_OPERATING_TIME, + FIT_DEVICE_INFO_MESG_PRODUCT_NAME, + FIT_DEVICE_INFO_MESG_MANUFACTURER, + FIT_DEVICE_INFO_MESG_PRODUCT, + FIT_DEVICE_INFO_MESG_SOFTWARE_VERSION, + FIT_DEVICE_INFO_MESG_BATTERY_VOLTAGE, + FIT_DEVICE_INFO_MESG_ANT_DEVICE_NUMBER, + FIT_DEVICE_INFO_MESG_DEVICE_INDEX, + FIT_DEVICE_INFO_MESG_DEVICE_TYPE, + FIT_DEVICE_INFO_MESG_HARDWARE_VERSION, + FIT_DEVICE_INFO_MESG_BATTERY_STATUS, + FIT_DEVICE_INFO_MESG_SENSOR_POSITION, + FIT_DEVICE_INFO_MESG_DESCRIPTOR, + FIT_DEVICE_INFO_MESG_ANT_TRANSMISSION_TYPE, + FIT_DEVICE_INFO_MESG_ANT_NETWORK, + FIT_DEVICE_INFO_MESG_SOURCE_TYPE, + FIT_DEVICE_INFO_MESG_FIELDS +} FIT_DEVICE_INFO_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_DEVICE_INFO_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_DEVICE_INFO_MESG_DEF; + +// device_aux_battery_info message + +#define FIT_DEVICE_AUX_BATTERY_INFO_MESG_SIZE 9 +#define FIT_DEVICE_AUX_BATTERY_INFO_MESG_DEF_SIZE 20 + +typedef struct +{ + FIT_DATE_TIME timestamp; // + FIT_UINT16 battery_voltage; // 256 * V + 0, + FIT_DEVICE_INDEX device_index; // + FIT_BATTERY_STATUS battery_status; // + FIT_UINT8 battery_identifier; // +} FIT_DEVICE_AUX_BATTERY_INFO_MESG; + +typedef FIT_UINT8 FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM; + +#define FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM_TIMESTAMP ((FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM)253) +#define FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM_BATTERY_VOLTAGE ((FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM)1) +#define FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM_DEVICE_INDEX ((FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM)0) +#define FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM_BATTERY_STATUS ((FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM)2) +#define FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM_BATTERY_IDENTIFIER ((FIT_DEVICE_AUX_BATTERY_INFO_FIELD_NUM)3) + +typedef enum +{ + FIT_DEVICE_AUX_BATTERY_INFO_MESG_TIMESTAMP, + FIT_DEVICE_AUX_BATTERY_INFO_MESG_BATTERY_VOLTAGE, + FIT_DEVICE_AUX_BATTERY_INFO_MESG_DEVICE_INDEX, + FIT_DEVICE_AUX_BATTERY_INFO_MESG_BATTERY_STATUS, + FIT_DEVICE_AUX_BATTERY_INFO_MESG_BATTERY_IDENTIFIER, + FIT_DEVICE_AUX_BATTERY_INFO_MESG_FIELDS +} FIT_DEVICE_AUX_BATTERY_INFO_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_DEVICE_AUX_BATTERY_INFO_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_DEVICE_AUX_BATTERY_INFO_MESG_DEF; + +// training_file message + +#define FIT_TRAINING_FILE_MESG_SIZE 17 +#define FIT_TRAINING_FILE_MESG_DEF_SIZE 23 + +typedef struct +{ + FIT_DATE_TIME timestamp; // + FIT_UINT32Z serial_number; // + FIT_DATE_TIME time_created; // + FIT_MANUFACTURER manufacturer; // + FIT_UINT16 product; // + FIT_FILE type; // +} FIT_TRAINING_FILE_MESG; + +typedef FIT_UINT8 FIT_TRAINING_FILE_FIELD_NUM; + +#define FIT_TRAINING_FILE_FIELD_NUM_TIMESTAMP ((FIT_TRAINING_FILE_FIELD_NUM)253) +#define FIT_TRAINING_FILE_FIELD_NUM_SERIAL_NUMBER ((FIT_TRAINING_FILE_FIELD_NUM)3) +#define FIT_TRAINING_FILE_FIELD_NUM_TIME_CREATED ((FIT_TRAINING_FILE_FIELD_NUM)4) +#define FIT_TRAINING_FILE_FIELD_NUM_MANUFACTURER ((FIT_TRAINING_FILE_FIELD_NUM)1) +#define FIT_TRAINING_FILE_FIELD_NUM_PRODUCT ((FIT_TRAINING_FILE_FIELD_NUM)2) +#define FIT_TRAINING_FILE_FIELD_NUM_TYPE ((FIT_TRAINING_FILE_FIELD_NUM)0) + +typedef enum +{ + FIT_TRAINING_FILE_MESG_TIMESTAMP, + FIT_TRAINING_FILE_MESG_SERIAL_NUMBER, + FIT_TRAINING_FILE_MESG_TIME_CREATED, + FIT_TRAINING_FILE_MESG_MANUFACTURER, + FIT_TRAINING_FILE_MESG_PRODUCT, + FIT_TRAINING_FILE_MESG_TYPE, + FIT_TRAINING_FILE_MESG_FIELDS +} FIT_TRAINING_FILE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_TRAINING_FILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_TRAINING_FILE_MESG_DEF; + +// weather_conditions message + +#define FIT_WEATHER_CONDITIONS_MESG_SIZE 93 +#define FIT_WEATHER_CONDITIONS_MESG_DEF_SIZE 53 +#define FIT_WEATHER_CONDITIONS_MESG_LOCATION_COUNT 64 + +typedef struct +{ + FIT_DATE_TIME timestamp; // time of update for current conditions, else forecast time + FIT_STRING location[FIT_WEATHER_CONDITIONS_MESG_LOCATION_COUNT]; // string corresponding to GCS response location string + FIT_DATE_TIME observed_at_time; // + FIT_SINT32 observed_location_lat; // 1 * semicircles + 0, + FIT_SINT32 observed_location_long; // 1 * semicircles + 0, + FIT_UINT16 wind_direction; // 1 * degrees + 0, + FIT_UINT16 wind_speed; // 1000 * m/s + 0, + FIT_WEATHER_REPORT weather_report; // Current or forecast + FIT_SINT8 temperature; // 1 * C + 0, + FIT_WEATHER_STATUS condition; // Corresponds to GSC Response weatherIcon field + FIT_UINT8 precipitation_probability; // range 0-100 + FIT_SINT8 temperature_feels_like; // 1 * C + 0, Heat Index if GCS heatIdx above or equal to 90F or wind chill if GCS windChill below or equal to 32F + FIT_UINT8 relative_humidity; // + FIT_DAY_OF_WEEK day_of_week; // + FIT_SINT8 high_temperature; // 1 * C + 0, + FIT_SINT8 low_temperature; // 1 * C + 0, +} FIT_WEATHER_CONDITIONS_MESG; + +typedef FIT_UINT8 FIT_WEATHER_CONDITIONS_FIELD_NUM; + +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_TIMESTAMP ((FIT_WEATHER_CONDITIONS_FIELD_NUM)253) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_LOCATION ((FIT_WEATHER_CONDITIONS_FIELD_NUM)8) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_OBSERVED_AT_TIME ((FIT_WEATHER_CONDITIONS_FIELD_NUM)9) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_OBSERVED_LOCATION_LAT ((FIT_WEATHER_CONDITIONS_FIELD_NUM)10) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_OBSERVED_LOCATION_LONG ((FIT_WEATHER_CONDITIONS_FIELD_NUM)11) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_WIND_DIRECTION ((FIT_WEATHER_CONDITIONS_FIELD_NUM)3) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_WIND_SPEED ((FIT_WEATHER_CONDITIONS_FIELD_NUM)4) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_WEATHER_REPORT ((FIT_WEATHER_CONDITIONS_FIELD_NUM)0) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_TEMPERATURE ((FIT_WEATHER_CONDITIONS_FIELD_NUM)1) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_CONDITION ((FIT_WEATHER_CONDITIONS_FIELD_NUM)2) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_PRECIPITATION_PROBABILITY ((FIT_WEATHER_CONDITIONS_FIELD_NUM)5) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_TEMPERATURE_FEELS_LIKE ((FIT_WEATHER_CONDITIONS_FIELD_NUM)6) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_RELATIVE_HUMIDITY ((FIT_WEATHER_CONDITIONS_FIELD_NUM)7) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_DAY_OF_WEEK ((FIT_WEATHER_CONDITIONS_FIELD_NUM)12) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_HIGH_TEMPERATURE ((FIT_WEATHER_CONDITIONS_FIELD_NUM)13) +#define FIT_WEATHER_CONDITIONS_FIELD_NUM_LOW_TEMPERATURE ((FIT_WEATHER_CONDITIONS_FIELD_NUM)14) + +typedef enum +{ + FIT_WEATHER_CONDITIONS_MESG_TIMESTAMP, + FIT_WEATHER_CONDITIONS_MESG_LOCATION, + FIT_WEATHER_CONDITIONS_MESG_OBSERVED_AT_TIME, + FIT_WEATHER_CONDITIONS_MESG_OBSERVED_LOCATION_LAT, + FIT_WEATHER_CONDITIONS_MESG_OBSERVED_LOCATION_LONG, + FIT_WEATHER_CONDITIONS_MESG_WIND_DIRECTION, + FIT_WEATHER_CONDITIONS_MESG_WIND_SPEED, + FIT_WEATHER_CONDITIONS_MESG_WEATHER_REPORT, + FIT_WEATHER_CONDITIONS_MESG_TEMPERATURE, + FIT_WEATHER_CONDITIONS_MESG_CONDITION, + FIT_WEATHER_CONDITIONS_MESG_PRECIPITATION_PROBABILITY, + FIT_WEATHER_CONDITIONS_MESG_TEMPERATURE_FEELS_LIKE, + FIT_WEATHER_CONDITIONS_MESG_RELATIVE_HUMIDITY, + FIT_WEATHER_CONDITIONS_MESG_DAY_OF_WEEK, + FIT_WEATHER_CONDITIONS_MESG_HIGH_TEMPERATURE, + FIT_WEATHER_CONDITIONS_MESG_LOW_TEMPERATURE, + FIT_WEATHER_CONDITIONS_MESG_FIELDS +} FIT_WEATHER_CONDITIONS_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_WEATHER_CONDITIONS_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_WEATHER_CONDITIONS_MESG_DEF; + +// weather_alert message + +#define FIT_WEATHER_ALERT_MESG_SIZE 26 +#define FIT_WEATHER_ALERT_MESG_DEF_SIZE 23 +#define FIT_WEATHER_ALERT_MESG_REPORT_ID_COUNT 12 + +typedef struct +{ + FIT_DATE_TIME timestamp; // + FIT_STRING report_id[FIT_WEATHER_ALERT_MESG_REPORT_ID_COUNT]; // Unique identifier from GCS report ID string, length is 12 + FIT_DATE_TIME issue_time; // Time alert was issued + FIT_DATE_TIME expire_time; // Time alert expires + FIT_WEATHER_SEVERITY severity; // Warning, Watch, Advisory, Statement + FIT_WEATHER_SEVERE_TYPE type; // Tornado, Severe Thunderstorm, etc. +} FIT_WEATHER_ALERT_MESG; + +typedef FIT_UINT8 FIT_WEATHER_ALERT_FIELD_NUM; + +#define FIT_WEATHER_ALERT_FIELD_NUM_TIMESTAMP ((FIT_WEATHER_ALERT_FIELD_NUM)253) +#define FIT_WEATHER_ALERT_FIELD_NUM_REPORT_ID ((FIT_WEATHER_ALERT_FIELD_NUM)0) +#define FIT_WEATHER_ALERT_FIELD_NUM_ISSUE_TIME ((FIT_WEATHER_ALERT_FIELD_NUM)1) +#define FIT_WEATHER_ALERT_FIELD_NUM_EXPIRE_TIME ((FIT_WEATHER_ALERT_FIELD_NUM)2) +#define FIT_WEATHER_ALERT_FIELD_NUM_SEVERITY ((FIT_WEATHER_ALERT_FIELD_NUM)3) +#define FIT_WEATHER_ALERT_FIELD_NUM_TYPE ((FIT_WEATHER_ALERT_FIELD_NUM)4) + +typedef enum +{ + FIT_WEATHER_ALERT_MESG_TIMESTAMP, + FIT_WEATHER_ALERT_MESG_REPORT_ID, + FIT_WEATHER_ALERT_MESG_ISSUE_TIME, + FIT_WEATHER_ALERT_MESG_EXPIRE_TIME, + FIT_WEATHER_ALERT_MESG_SEVERITY, + FIT_WEATHER_ALERT_MESG_TYPE, + FIT_WEATHER_ALERT_MESG_FIELDS +} FIT_WEATHER_ALERT_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_WEATHER_ALERT_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_WEATHER_ALERT_MESG_DEF; + +// nmea_sentence message + +#define FIT_NMEA_SENTENCE_MESG_SIZE 89 +#define FIT_NMEA_SENTENCE_MESG_DEF_SIZE 14 +#define FIT_NMEA_SENTENCE_MESG_SENTENCE_COUNT 83 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, Timestamp message was output + FIT_UINT16 timestamp_ms; // 1 * ms + 0, Fractional part of timestamp, added to timestamp + FIT_STRING sentence[FIT_NMEA_SENTENCE_MESG_SENTENCE_COUNT]; // NMEA sentence +} FIT_NMEA_SENTENCE_MESG; + +typedef FIT_UINT8 FIT_NMEA_SENTENCE_FIELD_NUM; + +#define FIT_NMEA_SENTENCE_FIELD_NUM_TIMESTAMP ((FIT_NMEA_SENTENCE_FIELD_NUM)253) +#define FIT_NMEA_SENTENCE_FIELD_NUM_TIMESTAMP_MS ((FIT_NMEA_SENTENCE_FIELD_NUM)0) +#define FIT_NMEA_SENTENCE_FIELD_NUM_SENTENCE ((FIT_NMEA_SENTENCE_FIELD_NUM)1) + +typedef enum +{ + FIT_NMEA_SENTENCE_MESG_TIMESTAMP, + FIT_NMEA_SENTENCE_MESG_TIMESTAMP_MS, + FIT_NMEA_SENTENCE_MESG_SENTENCE, + FIT_NMEA_SENTENCE_MESG_FIELDS +} FIT_NMEA_SENTENCE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_NMEA_SENTENCE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_NMEA_SENTENCE_MESG_DEF; + +// aviation_attitude message + +#define FIT_AVIATION_ATTITUDE_MESG_SIZE 26 +#define FIT_AVIATION_ATTITUDE_MESG_DEF_SIZE 41 +#define FIT_AVIATION_ATTITUDE_MESG_SYSTEM_TIME_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_PITCH_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_ROLL_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_ACCEL_LATERAL_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_ACCEL_NORMAL_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_TURN_RATE_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_TRACK_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_VALIDITY_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_STAGE_COUNT 1 +#define FIT_AVIATION_ATTITUDE_MESG_ATTITUDE_STAGE_COMPLETE_COUNT 1 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, Timestamp message was output + FIT_UINT32 system_time[FIT_AVIATION_ATTITUDE_MESG_SYSTEM_TIME_COUNT]; // 1 * ms + 0, System time associated with sample expressed in ms. + FIT_UINT16 timestamp_ms; // 1 * ms + 0, Fractional part of timestamp, added to timestamp + FIT_SINT16 pitch[FIT_AVIATION_ATTITUDE_MESG_PITCH_COUNT]; // 10430.38 * radians + 0, Range -PI/2 to +PI/2 + FIT_SINT16 roll[FIT_AVIATION_ATTITUDE_MESG_ROLL_COUNT]; // 10430.38 * radians + 0, Range -PI to +PI + FIT_SINT16 accel_lateral[FIT_AVIATION_ATTITUDE_MESG_ACCEL_LATERAL_COUNT]; // 100 * m/s^2 + 0, Range -78.4 to +78.4 (-8 Gs to 8 Gs) + FIT_SINT16 accel_normal[FIT_AVIATION_ATTITUDE_MESG_ACCEL_NORMAL_COUNT]; // 100 * m/s^2 + 0, Range -78.4 to +78.4 (-8 Gs to 8 Gs) + FIT_SINT16 turn_rate[FIT_AVIATION_ATTITUDE_MESG_TURN_RATE_COUNT]; // 1024 * radians/second + 0, Range -8.727 to +8.727 (-500 degs/sec to +500 degs/sec) + FIT_UINT16 track[FIT_AVIATION_ATTITUDE_MESG_TRACK_COUNT]; // 10430.38 * radians + 0, Track Angle/Heading Range 0 - 2pi + FIT_ATTITUDE_VALIDITY validity[FIT_AVIATION_ATTITUDE_MESG_VALIDITY_COUNT]; // + FIT_ATTITUDE_STAGE stage[FIT_AVIATION_ATTITUDE_MESG_STAGE_COUNT]; // + FIT_UINT8 attitude_stage_complete[FIT_AVIATION_ATTITUDE_MESG_ATTITUDE_STAGE_COMPLETE_COUNT]; // 1 * % + 0, The percent complete of the current attitude stage. Set to 0 for attitude stages 0, 1 and 2 and to 100 for attitude stage 3 by AHRS modules that do not support it. Range - 100 +} FIT_AVIATION_ATTITUDE_MESG; + +typedef FIT_UINT8 FIT_AVIATION_ATTITUDE_FIELD_NUM; + +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_TIMESTAMP ((FIT_AVIATION_ATTITUDE_FIELD_NUM)253) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_SYSTEM_TIME ((FIT_AVIATION_ATTITUDE_FIELD_NUM)1) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_TIMESTAMP_MS ((FIT_AVIATION_ATTITUDE_FIELD_NUM)0) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_PITCH ((FIT_AVIATION_ATTITUDE_FIELD_NUM)2) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_ROLL ((FIT_AVIATION_ATTITUDE_FIELD_NUM)3) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_ACCEL_LATERAL ((FIT_AVIATION_ATTITUDE_FIELD_NUM)4) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_ACCEL_NORMAL ((FIT_AVIATION_ATTITUDE_FIELD_NUM)5) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_TURN_RATE ((FIT_AVIATION_ATTITUDE_FIELD_NUM)6) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_TRACK ((FIT_AVIATION_ATTITUDE_FIELD_NUM)9) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_VALIDITY ((FIT_AVIATION_ATTITUDE_FIELD_NUM)10) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_STAGE ((FIT_AVIATION_ATTITUDE_FIELD_NUM)7) +#define FIT_AVIATION_ATTITUDE_FIELD_NUM_ATTITUDE_STAGE_COMPLETE ((FIT_AVIATION_ATTITUDE_FIELD_NUM)8) + +typedef enum +{ + FIT_AVIATION_ATTITUDE_MESG_TIMESTAMP, + FIT_AVIATION_ATTITUDE_MESG_SYSTEM_TIME, + FIT_AVIATION_ATTITUDE_MESG_TIMESTAMP_MS, + FIT_AVIATION_ATTITUDE_MESG_PITCH, + FIT_AVIATION_ATTITUDE_MESG_ROLL, + FIT_AVIATION_ATTITUDE_MESG_ACCEL_LATERAL, + FIT_AVIATION_ATTITUDE_MESG_ACCEL_NORMAL, + FIT_AVIATION_ATTITUDE_MESG_TURN_RATE, + FIT_AVIATION_ATTITUDE_MESG_TRACK, + FIT_AVIATION_ATTITUDE_MESG_VALIDITY, + FIT_AVIATION_ATTITUDE_MESG_STAGE, + FIT_AVIATION_ATTITUDE_MESG_ATTITUDE_STAGE_COMPLETE, + FIT_AVIATION_ATTITUDE_MESG_FIELDS +} FIT_AVIATION_ATTITUDE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_AVIATION_ATTITUDE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_AVIATION_ATTITUDE_MESG_DEF; + +// video_title message + +#define FIT_VIDEO_TITLE_MESG_SIZE 84 +#define FIT_VIDEO_TITLE_MESG_DEF_SIZE 14 +#define FIT_VIDEO_TITLE_MESG_TEXT_COUNT 80 + +typedef struct +{ + FIT_STRING text[FIT_VIDEO_TITLE_MESG_TEXT_COUNT]; // + FIT_MESSAGE_INDEX message_index; // Long titles will be split into multiple parts + FIT_UINT16 message_count; // Total number of title parts +} FIT_VIDEO_TITLE_MESG; + +typedef FIT_UINT8 FIT_VIDEO_TITLE_FIELD_NUM; + +#define FIT_VIDEO_TITLE_FIELD_NUM_TEXT ((FIT_VIDEO_TITLE_FIELD_NUM)1) +#define FIT_VIDEO_TITLE_FIELD_NUM_MESSAGE_INDEX ((FIT_VIDEO_TITLE_FIELD_NUM)254) +#define FIT_VIDEO_TITLE_FIELD_NUM_MESSAGE_COUNT ((FIT_VIDEO_TITLE_FIELD_NUM)0) + +typedef enum +{ + FIT_VIDEO_TITLE_MESG_TEXT, + FIT_VIDEO_TITLE_MESG_MESSAGE_INDEX, + FIT_VIDEO_TITLE_MESG_MESSAGE_COUNT, + FIT_VIDEO_TITLE_MESG_FIELDS +} FIT_VIDEO_TITLE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_VIDEO_TITLE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_VIDEO_TITLE_MESG_DEF; + +// video_description message + +#define FIT_VIDEO_DESCRIPTION_MESG_SIZE 254 +#define FIT_VIDEO_DESCRIPTION_MESG_DEF_SIZE 14 +#define FIT_VIDEO_DESCRIPTION_MESG_TEXT_COUNT 250 + +typedef struct +{ + FIT_MESSAGE_INDEX message_index; // Long descriptions will be split into multiple parts + FIT_UINT16 message_count; // Total number of description parts + FIT_STRING text[FIT_VIDEO_DESCRIPTION_MESG_TEXT_COUNT]; // +} FIT_VIDEO_DESCRIPTION_MESG; + +typedef FIT_UINT8 FIT_VIDEO_DESCRIPTION_FIELD_NUM; + +#define FIT_VIDEO_DESCRIPTION_FIELD_NUM_MESSAGE_INDEX ((FIT_VIDEO_DESCRIPTION_FIELD_NUM)254) +#define FIT_VIDEO_DESCRIPTION_FIELD_NUM_MESSAGE_COUNT ((FIT_VIDEO_DESCRIPTION_FIELD_NUM)0) +#define FIT_VIDEO_DESCRIPTION_FIELD_NUM_TEXT ((FIT_VIDEO_DESCRIPTION_FIELD_NUM)1) + +typedef enum +{ + FIT_VIDEO_DESCRIPTION_MESG_MESSAGE_INDEX, + FIT_VIDEO_DESCRIPTION_MESG_MESSAGE_COUNT, + FIT_VIDEO_DESCRIPTION_MESG_TEXT, + FIT_VIDEO_DESCRIPTION_MESG_FIELDS +} FIT_VIDEO_DESCRIPTION_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_VIDEO_DESCRIPTION_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_VIDEO_DESCRIPTION_MESG_DEF; + +// set message + +#define FIT_SET_MESG_SIZE 2 +#define FIT_SET_MESG_DEF_SIZE 8 + +typedef struct +{ + FIT_FIT_BASE_UNIT weight_display_unit; // +} FIT_SET_MESG; + +typedef FIT_UINT8 FIT_SET_FIELD_NUM; + +#define FIT_SET_FIELD_NUM_WEIGHT_DISPLAY_UNIT ((FIT_SET_FIELD_NUM)9) + +typedef enum +{ + FIT_SET_MESG_WEIGHT_DISPLAY_UNIT, + FIT_SET_MESG_FIELDS +} FIT_SET_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SET_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SET_MESG_DEF; + +// field_description message + +#define FIT_FIELD_DESCRIPTION_MESG_SIZE 90 +#define FIT_FIELD_DESCRIPTION_MESG_DEF_SIZE 35 +#define FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME_COUNT 64 +#define FIT_FIELD_DESCRIPTION_MESG_UNITS_COUNT 16 + +typedef struct +{ + FIT_STRING field_name[FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME_COUNT]; // + FIT_STRING units[FIT_FIELD_DESCRIPTION_MESG_UNITS_COUNT]; // + FIT_FIT_BASE_UNIT fit_base_unit_id; // + FIT_MESG_NUM native_mesg_num; // + FIT_UINT8 developer_data_index; // + FIT_UINT8 field_definition_number; // + FIT_FIT_BASE_TYPE fit_base_type_id; // + FIT_UINT8 scale; // + FIT_SINT8 offset; // + FIT_UINT8 native_field_num; // +} FIT_FIELD_DESCRIPTION_MESG; + +typedef FIT_UINT8 FIT_FIELD_DESCRIPTION_FIELD_NUM; + +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_NAME ((FIT_FIELD_DESCRIPTION_FIELD_NUM)3) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_UNITS ((FIT_FIELD_DESCRIPTION_FIELD_NUM)8) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_FIT_BASE_UNIT_ID ((FIT_FIELD_DESCRIPTION_FIELD_NUM)13) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_NATIVE_MESG_NUM ((FIT_FIELD_DESCRIPTION_FIELD_NUM)14) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_DEVELOPER_DATA_INDEX ((FIT_FIELD_DESCRIPTION_FIELD_NUM)0) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_DEFINITION_NUMBER ((FIT_FIELD_DESCRIPTION_FIELD_NUM)1) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_FIT_BASE_TYPE_ID ((FIT_FIELD_DESCRIPTION_FIELD_NUM)2) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_SCALE ((FIT_FIELD_DESCRIPTION_FIELD_NUM)6) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_OFFSET ((FIT_FIELD_DESCRIPTION_FIELD_NUM)7) +#define FIT_FIELD_DESCRIPTION_FIELD_NUM_NATIVE_FIELD_NUM ((FIT_FIELD_DESCRIPTION_FIELD_NUM)15) + +typedef enum +{ + FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME, + FIT_FIELD_DESCRIPTION_MESG_UNITS, + FIT_FIELD_DESCRIPTION_MESG_FIT_BASE_UNIT_ID, + FIT_FIELD_DESCRIPTION_MESG_NATIVE_MESG_NUM, + FIT_FIELD_DESCRIPTION_MESG_DEVELOPER_DATA_INDEX, + FIT_FIELD_DESCRIPTION_MESG_FIELD_DEFINITION_NUMBER, + FIT_FIELD_DESCRIPTION_MESG_FIT_BASE_TYPE_ID, + FIT_FIELD_DESCRIPTION_MESG_SCALE, + FIT_FIELD_DESCRIPTION_MESG_OFFSET, + FIT_FIELD_DESCRIPTION_MESG_NATIVE_FIELD_NUM, + FIT_FIELD_DESCRIPTION_MESG_FIELDS +} FIT_FIELD_DESCRIPTION_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_FIELD_DESCRIPTION_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_FIELD_DESCRIPTION_MESG_DEF; + +// developer_data_id message + +#define FIT_DEVELOPER_DATA_ID_MESG_SIZE 39 +#define FIT_DEVELOPER_DATA_ID_MESG_DEF_SIZE 20 +#define FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_ID_COUNT 16 +#define FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_ID_COUNT 16 + +typedef struct +{ + FIT_BYTE developer_id[FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_ID_COUNT]; // + FIT_BYTE application_id[FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_ID_COUNT]; // + FIT_UINT32 application_version; // + FIT_MANUFACTURER manufacturer_id; // + FIT_UINT8 developer_data_index; // +} FIT_DEVELOPER_DATA_ID_MESG; + +typedef FIT_UINT8 FIT_DEVELOPER_DATA_ID_FIELD_NUM; + +#define FIT_DEVELOPER_DATA_ID_FIELD_NUM_DEVELOPER_ID ((FIT_DEVELOPER_DATA_ID_FIELD_NUM)0) +#define FIT_DEVELOPER_DATA_ID_FIELD_NUM_APPLICATION_ID ((FIT_DEVELOPER_DATA_ID_FIELD_NUM)1) +#define FIT_DEVELOPER_DATA_ID_FIELD_NUM_APPLICATION_VERSION ((FIT_DEVELOPER_DATA_ID_FIELD_NUM)4) +#define FIT_DEVELOPER_DATA_ID_FIELD_NUM_MANUFACTURER_ID ((FIT_DEVELOPER_DATA_ID_FIELD_NUM)2) +#define FIT_DEVELOPER_DATA_ID_FIELD_NUM_DEVELOPER_DATA_INDEX ((FIT_DEVELOPER_DATA_ID_FIELD_NUM)3) + +typedef enum +{ + FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_ID, + FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_ID, + FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_VERSION, + FIT_DEVELOPER_DATA_ID_MESG_MANUFACTURER_ID, + FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_DATA_INDEX, + FIT_DEVELOPER_DATA_ID_MESG_FIELDS +} FIT_DEVELOPER_DATA_ID_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_DEVELOPER_DATA_ID_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_DEVELOPER_DATA_ID_MESG_DEF; + +// course message + +#define FIT_COURSE_MESG_SIZE 22 +#define FIT_COURSE_MESG_DEF_SIZE 17 +#define FIT_COURSE_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_STRING name[FIT_COURSE_MESG_NAME_COUNT]; // + FIT_COURSE_CAPABILITIES capabilities; // + FIT_SPORT sport; // + FIT_SUB_SPORT sub_sport; // +} FIT_COURSE_MESG; + +typedef FIT_UINT8 FIT_COURSE_FIELD_NUM; + +#define FIT_COURSE_FIELD_NUM_NAME ((FIT_COURSE_FIELD_NUM)5) +#define FIT_COURSE_FIELD_NUM_CAPABILITIES ((FIT_COURSE_FIELD_NUM)6) +#define FIT_COURSE_FIELD_NUM_SPORT ((FIT_COURSE_FIELD_NUM)4) +#define FIT_COURSE_FIELD_NUM_SUB_SPORT ((FIT_COURSE_FIELD_NUM)7) + +typedef enum +{ + FIT_COURSE_MESG_NAME, + FIT_COURSE_MESG_CAPABILITIES, + FIT_COURSE_MESG_SPORT, + FIT_COURSE_MESG_SUB_SPORT, + FIT_COURSE_MESG_FIELDS +} FIT_COURSE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_COURSE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_COURSE_MESG_DEF; + +// course_point message + +#define FIT_COURSE_POINT_MESG_SIZE 36 +#define FIT_COURSE_POINT_MESG_DEF_SIZE 29 +#define FIT_COURSE_POINT_MESG_NAME_COUNT 16 + +typedef struct +{ + FIT_DATE_TIME timestamp; // + FIT_SINT32 position_lat; // 1 * semicircles + 0, + FIT_SINT32 position_long; // 1 * semicircles + 0, + FIT_UINT32 distance; // 100 * m + 0, + FIT_STRING name[FIT_COURSE_POINT_MESG_NAME_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_COURSE_POINT type; // + FIT_BOOL favorite; // +} FIT_COURSE_POINT_MESG; + +typedef FIT_UINT8 FIT_COURSE_POINT_FIELD_NUM; + +#define FIT_COURSE_POINT_FIELD_NUM_TIMESTAMP ((FIT_COURSE_POINT_FIELD_NUM)1) +#define FIT_COURSE_POINT_FIELD_NUM_POSITION_LAT ((FIT_COURSE_POINT_FIELD_NUM)2) +#define FIT_COURSE_POINT_FIELD_NUM_POSITION_LONG ((FIT_COURSE_POINT_FIELD_NUM)3) +#define FIT_COURSE_POINT_FIELD_NUM_DISTANCE ((FIT_COURSE_POINT_FIELD_NUM)4) +#define FIT_COURSE_POINT_FIELD_NUM_NAME ((FIT_COURSE_POINT_FIELD_NUM)6) +#define FIT_COURSE_POINT_FIELD_NUM_MESSAGE_INDEX ((FIT_COURSE_POINT_FIELD_NUM)254) +#define FIT_COURSE_POINT_FIELD_NUM_TYPE ((FIT_COURSE_POINT_FIELD_NUM)5) +#define FIT_COURSE_POINT_FIELD_NUM_FAVORITE ((FIT_COURSE_POINT_FIELD_NUM)8) + +typedef enum +{ + FIT_COURSE_POINT_MESG_TIMESTAMP, + FIT_COURSE_POINT_MESG_POSITION_LAT, + FIT_COURSE_POINT_MESG_POSITION_LONG, + FIT_COURSE_POINT_MESG_DISTANCE, + FIT_COURSE_POINT_MESG_NAME, + FIT_COURSE_POINT_MESG_MESSAGE_INDEX, + FIT_COURSE_POINT_MESG_TYPE, + FIT_COURSE_POINT_MESG_FAVORITE, + FIT_COURSE_POINT_MESG_FIELDS +} FIT_COURSE_POINT_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_COURSE_POINT_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_COURSE_POINT_MESG_DEF; + +// segment_id message + +#define FIT_SEGMENT_ID_MESG_SIZE 15 +#define FIT_SEGMENT_ID_MESG_DEF_SIZE 32 +#define FIT_SEGMENT_ID_MESG_NAME_COUNT 1 +#define FIT_SEGMENT_ID_MESG_UUID_COUNT 1 + +typedef struct +{ + FIT_UINT32 user_profile_primary_key; // Primary key of the user that created the segment + FIT_UINT32 device_id; // ID of the device that created the segment + FIT_STRING name[FIT_SEGMENT_ID_MESG_NAME_COUNT]; // Friendly name assigned to segment + FIT_STRING uuid[FIT_SEGMENT_ID_MESG_UUID_COUNT]; // UUID of the segment + FIT_SPORT sport; // Sport associated with the segment + FIT_BOOL enabled; // Segment enabled for evaluation + FIT_UINT8 default_race_leader; // Index for the Leader Board entry selected as the default race participant + FIT_SEGMENT_DELETE_STATUS delete_status; // Indicates if any segments should be deleted + FIT_SEGMENT_SELECTION_TYPE selection_type; // Indicates how the segment was selected to be sent to the device +} FIT_SEGMENT_ID_MESG; + +typedef FIT_UINT8 FIT_SEGMENT_ID_FIELD_NUM; + +#define FIT_SEGMENT_ID_FIELD_NUM_USER_PROFILE_PRIMARY_KEY ((FIT_SEGMENT_ID_FIELD_NUM)4) +#define FIT_SEGMENT_ID_FIELD_NUM_DEVICE_ID ((FIT_SEGMENT_ID_FIELD_NUM)5) +#define FIT_SEGMENT_ID_FIELD_NUM_NAME ((FIT_SEGMENT_ID_FIELD_NUM)0) +#define FIT_SEGMENT_ID_FIELD_NUM_UUID ((FIT_SEGMENT_ID_FIELD_NUM)1) +#define FIT_SEGMENT_ID_FIELD_NUM_SPORT ((FIT_SEGMENT_ID_FIELD_NUM)2) +#define FIT_SEGMENT_ID_FIELD_NUM_ENABLED ((FIT_SEGMENT_ID_FIELD_NUM)3) +#define FIT_SEGMENT_ID_FIELD_NUM_DEFAULT_RACE_LEADER ((FIT_SEGMENT_ID_FIELD_NUM)6) +#define FIT_SEGMENT_ID_FIELD_NUM_DELETE_STATUS ((FIT_SEGMENT_ID_FIELD_NUM)7) +#define FIT_SEGMENT_ID_FIELD_NUM_SELECTION_TYPE ((FIT_SEGMENT_ID_FIELD_NUM)8) + +typedef enum +{ + FIT_SEGMENT_ID_MESG_USER_PROFILE_PRIMARY_KEY, + FIT_SEGMENT_ID_MESG_DEVICE_ID, + FIT_SEGMENT_ID_MESG_NAME, + FIT_SEGMENT_ID_MESG_UUID, + FIT_SEGMENT_ID_MESG_SPORT, + FIT_SEGMENT_ID_MESG_ENABLED, + FIT_SEGMENT_ID_MESG_DEFAULT_RACE_LEADER, + FIT_SEGMENT_ID_MESG_DELETE_STATUS, + FIT_SEGMENT_ID_MESG_SELECTION_TYPE, + FIT_SEGMENT_ID_MESG_FIELDS +} FIT_SEGMENT_ID_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SEGMENT_ID_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SEGMENT_ID_MESG_DEF; + +// segment_leaderboard_entry message + +#define FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_SIZE 16 +#define FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_DEF_SIZE 23 +#define FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_NAME_COUNT 1 + +typedef struct +{ + FIT_UINT32 group_primary_key; // Primary user ID of this leader + FIT_UINT32 activity_id; // ID of the activity associated with this leader time + FIT_UINT32 segment_time; // 1000 * s + 0, Segment Time (includes pauses) + FIT_MESSAGE_INDEX message_index; // + FIT_STRING name[FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_NAME_COUNT]; // Friendly name assigned to leader + FIT_SEGMENT_LEADERBOARD_TYPE type; // Leader classification +} FIT_SEGMENT_LEADERBOARD_ENTRY_MESG; + +typedef FIT_UINT8 FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM; + +#define FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_GROUP_PRIMARY_KEY ((FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM)2) +#define FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_ACTIVITY_ID ((FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM)3) +#define FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_SEGMENT_TIME ((FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM)4) +#define FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_MESSAGE_INDEX ((FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM)254) +#define FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_NAME ((FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM)0) +#define FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_TYPE ((FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM)1) + +typedef enum +{ + FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_GROUP_PRIMARY_KEY, + FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_ACTIVITY_ID, + FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_SEGMENT_TIME, + FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_MESSAGE_INDEX, + FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_NAME, + FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_TYPE, + FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_FIELDS +} FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_DEF; + +// segment_point message + +#define FIT_SEGMENT_POINT_MESG_SIZE 20 +#define FIT_SEGMENT_POINT_MESG_DEF_SIZE 23 +#define FIT_SEGMENT_POINT_MESG_LEADER_TIME_COUNT 1 + +typedef struct +{ + FIT_SINT32 position_lat; // 1 * semicircles + 0, + FIT_SINT32 position_long; // 1 * semicircles + 0, + FIT_UINT32 distance; // 100 * m + 0, Accumulated distance along the segment at the described point + FIT_UINT32 leader_time[FIT_SEGMENT_POINT_MESG_LEADER_TIME_COUNT]; // 1000 * s + 0, Accumualted time each leader board member required to reach the described point. This value is zero for all leader board members at the starting point of the segment. + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 altitude; // 5 * m + 500, Accumulated altitude along the segment at the described point +} FIT_SEGMENT_POINT_MESG; + +typedef FIT_UINT8 FIT_SEGMENT_POINT_FIELD_NUM; + +#define FIT_SEGMENT_POINT_FIELD_NUM_POSITION_LAT ((FIT_SEGMENT_POINT_FIELD_NUM)1) +#define FIT_SEGMENT_POINT_FIELD_NUM_POSITION_LONG ((FIT_SEGMENT_POINT_FIELD_NUM)2) +#define FIT_SEGMENT_POINT_FIELD_NUM_DISTANCE ((FIT_SEGMENT_POINT_FIELD_NUM)3) +#define FIT_SEGMENT_POINT_FIELD_NUM_LEADER_TIME ((FIT_SEGMENT_POINT_FIELD_NUM)5) +#define FIT_SEGMENT_POINT_FIELD_NUM_MESSAGE_INDEX ((FIT_SEGMENT_POINT_FIELD_NUM)254) +#define FIT_SEGMENT_POINT_FIELD_NUM_ALTITUDE ((FIT_SEGMENT_POINT_FIELD_NUM)4) + +typedef enum +{ + FIT_SEGMENT_POINT_MESG_POSITION_LAT, + FIT_SEGMENT_POINT_MESG_POSITION_LONG, + FIT_SEGMENT_POINT_MESG_DISTANCE, + FIT_SEGMENT_POINT_MESG_LEADER_TIME, + FIT_SEGMENT_POINT_MESG_MESSAGE_INDEX, + FIT_SEGMENT_POINT_MESG_ALTITUDE, + FIT_SEGMENT_POINT_MESG_FIELDS +} FIT_SEGMENT_POINT_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SEGMENT_POINT_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SEGMENT_POINT_MESG_DEF; + +// segment_lap message + +#define FIT_SEGMENT_LAP_MESG_SIZE 210 +#define FIT_SEGMENT_LAP_MESG_DEF_SIZE 224 +#define FIT_SEGMENT_LAP_MESG_NAME_COUNT 16 +#define FIT_SEGMENT_LAP_MESG_TIME_IN_HR_ZONE_COUNT 1 +#define FIT_SEGMENT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT 1 +#define FIT_SEGMENT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT 1 +#define FIT_SEGMENT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT 1 +#define FIT_SEGMENT_LAP_MESG_UUID_COUNT 33 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, Lap end time. + FIT_DATE_TIME start_time; // + FIT_SINT32 start_position_lat; // 1 * semicircles + 0, + FIT_SINT32 start_position_long; // 1 * semicircles + 0, + FIT_SINT32 end_position_lat; // 1 * semicircles + 0, + FIT_SINT32 end_position_long; // 1 * semicircles + 0, + FIT_UINT32 total_elapsed_time; // 1000 * s + 0, Time (includes pauses) + FIT_UINT32 total_timer_time; // 1000 * s + 0, Timer Time (excludes pauses) + FIT_UINT32 total_distance; // 100 * m + 0, + FIT_UINT32 total_cycles; // 1 * cycles + 0, + FIT_SINT32 nec_lat; // 1 * semicircles + 0, North east corner latitude. + FIT_SINT32 nec_long; // 1 * semicircles + 0, North east corner longitude. + FIT_SINT32 swc_lat; // 1 * semicircles + 0, South west corner latitude. + FIT_SINT32 swc_long; // 1 * semicircles + 0, South west corner latitude. + FIT_STRING name[FIT_SEGMENT_LAP_MESG_NAME_COUNT]; // + FIT_UINT32 total_work; // 1 * J + 0, + FIT_UINT32 total_moving_time; // 1000 * s + 0, + FIT_UINT32 time_in_hr_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_speed_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_cadence_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 time_in_power_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s + 0, + FIT_UINT32 active_time; // 1000 * s + 0, + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 total_calories; // 1 * kcal + 0, + FIT_UINT16 total_fat_calories; // 1 * kcal + 0, If New Leaf + FIT_UINT16 avg_speed; // 1000 * m/s + 0, + FIT_UINT16 max_speed; // 1000 * m/s + 0, + FIT_UINT16 avg_power; // 1 * watts + 0, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time + FIT_UINT16 max_power; // 1 * watts + 0, + FIT_UINT16 total_ascent; // 1 * m + 0, + FIT_UINT16 total_descent; // 1 * m + 0, + FIT_UINT16 normalized_power; // 1 * watts + 0, + FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; // + FIT_UINT16 avg_altitude; // 5 * m + 500, + FIT_UINT16 max_altitude; // 5 * m + 500, + FIT_SINT16 avg_grade; // 100 * % + 0, + FIT_SINT16 avg_pos_grade; // 100 * % + 0, + FIT_SINT16 avg_neg_grade; // 100 * % + 0, + FIT_SINT16 max_pos_grade; // 100 * % + 0, + FIT_SINT16 max_neg_grade; // 100 * % + 0, + FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s + 0, + FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s + 0, + FIT_UINT16 repetition_num; // + FIT_UINT16 min_altitude; // 5 * m + 500, + FIT_MESSAGE_INDEX wkt_step_index; // + FIT_UINT16 front_gear_shift_count; // + FIT_UINT16 rear_gear_shift_count; // + FIT_EVENT event; // + FIT_EVENT_TYPE event_type; // + FIT_UINT8 avg_heart_rate; // 1 * bpm + 0, + FIT_UINT8 max_heart_rate; // 1 * bpm + 0, + FIT_UINT8 avg_cadence; // 1 * rpm + 0, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time + FIT_UINT8 max_cadence; // 1 * rpm + 0, + FIT_SPORT sport; // + FIT_UINT8 event_group; // + FIT_SUB_SPORT sub_sport; // + FIT_UINT8 gps_accuracy; // 1 * m + 0, + FIT_SINT8 avg_temperature; // 1 * C + 0, + FIT_SINT8 max_temperature; // 1 * C + 0, + FIT_UINT8 min_heart_rate; // 1 * bpm + 0, + FIT_SPORT_EVENT sport_event; // + FIT_UINT8 avg_left_torque_effectiveness; // 2 * percent + 0, + FIT_UINT8 avg_right_torque_effectiveness; // 2 * percent + 0, + FIT_UINT8 avg_left_pedal_smoothness; // 2 * percent + 0, + FIT_UINT8 avg_right_pedal_smoothness; // 2 * percent + 0, + FIT_UINT8 avg_combined_pedal_smoothness; // 2 * percent + 0, + FIT_SEGMENT_LAP_STATUS status; // + FIT_STRING uuid[FIT_SEGMENT_LAP_MESG_UUID_COUNT]; // + FIT_UINT8 avg_fractional_cadence; // 128 * rpm + 0, fractional part of the avg_cadence + FIT_UINT8 max_fractional_cadence; // 128 * rpm + 0, fractional part of the max_cadence + FIT_UINT8 total_fractional_cycles; // 128 * cycles + 0, fractional part of the total_cycles +} FIT_SEGMENT_LAP_MESG; + +typedef FIT_UINT8 FIT_SEGMENT_LAP_FIELD_NUM; + +#define FIT_SEGMENT_LAP_FIELD_NUM_TIMESTAMP ((FIT_SEGMENT_LAP_FIELD_NUM)253) +#define FIT_SEGMENT_LAP_FIELD_NUM_START_TIME ((FIT_SEGMENT_LAP_FIELD_NUM)2) +#define FIT_SEGMENT_LAP_FIELD_NUM_START_POSITION_LAT ((FIT_SEGMENT_LAP_FIELD_NUM)3) +#define FIT_SEGMENT_LAP_FIELD_NUM_START_POSITION_LONG ((FIT_SEGMENT_LAP_FIELD_NUM)4) +#define FIT_SEGMENT_LAP_FIELD_NUM_END_POSITION_LAT ((FIT_SEGMENT_LAP_FIELD_NUM)5) +#define FIT_SEGMENT_LAP_FIELD_NUM_END_POSITION_LONG ((FIT_SEGMENT_LAP_FIELD_NUM)6) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_ELAPSED_TIME ((FIT_SEGMENT_LAP_FIELD_NUM)7) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_TIMER_TIME ((FIT_SEGMENT_LAP_FIELD_NUM)8) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_DISTANCE ((FIT_SEGMENT_LAP_FIELD_NUM)9) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_CYCLES ((FIT_SEGMENT_LAP_FIELD_NUM)10) +#define FIT_SEGMENT_LAP_FIELD_NUM_NEC_LAT ((FIT_SEGMENT_LAP_FIELD_NUM)25) +#define FIT_SEGMENT_LAP_FIELD_NUM_NEC_LONG ((FIT_SEGMENT_LAP_FIELD_NUM)26) +#define FIT_SEGMENT_LAP_FIELD_NUM_SWC_LAT ((FIT_SEGMENT_LAP_FIELD_NUM)27) +#define FIT_SEGMENT_LAP_FIELD_NUM_SWC_LONG ((FIT_SEGMENT_LAP_FIELD_NUM)28) +#define FIT_SEGMENT_LAP_FIELD_NUM_NAME ((FIT_SEGMENT_LAP_FIELD_NUM)29) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_WORK ((FIT_SEGMENT_LAP_FIELD_NUM)33) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_MOVING_TIME ((FIT_SEGMENT_LAP_FIELD_NUM)44) +#define FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_HR_ZONE ((FIT_SEGMENT_LAP_FIELD_NUM)49) +#define FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_SPEED_ZONE ((FIT_SEGMENT_LAP_FIELD_NUM)50) +#define FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_CADENCE_ZONE ((FIT_SEGMENT_LAP_FIELD_NUM)51) +#define FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_POWER_ZONE ((FIT_SEGMENT_LAP_FIELD_NUM)52) +#define FIT_SEGMENT_LAP_FIELD_NUM_ACTIVE_TIME ((FIT_SEGMENT_LAP_FIELD_NUM)56) +#define FIT_SEGMENT_LAP_FIELD_NUM_MESSAGE_INDEX ((FIT_SEGMENT_LAP_FIELD_NUM)254) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_CALORIES ((FIT_SEGMENT_LAP_FIELD_NUM)11) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_FAT_CALORIES ((FIT_SEGMENT_LAP_FIELD_NUM)12) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_SPEED ((FIT_SEGMENT_LAP_FIELD_NUM)13) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_SPEED ((FIT_SEGMENT_LAP_FIELD_NUM)14) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_POWER ((FIT_SEGMENT_LAP_FIELD_NUM)19) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_POWER ((FIT_SEGMENT_LAP_FIELD_NUM)20) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_ASCENT ((FIT_SEGMENT_LAP_FIELD_NUM)21) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_DESCENT ((FIT_SEGMENT_LAP_FIELD_NUM)22) +#define FIT_SEGMENT_LAP_FIELD_NUM_NORMALIZED_POWER ((FIT_SEGMENT_LAP_FIELD_NUM)30) +#define FIT_SEGMENT_LAP_FIELD_NUM_LEFT_RIGHT_BALANCE ((FIT_SEGMENT_LAP_FIELD_NUM)31) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_ALTITUDE ((FIT_SEGMENT_LAP_FIELD_NUM)34) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_ALTITUDE ((FIT_SEGMENT_LAP_FIELD_NUM)35) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_GRADE ((FIT_SEGMENT_LAP_FIELD_NUM)37) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_POS_GRADE ((FIT_SEGMENT_LAP_FIELD_NUM)38) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_NEG_GRADE ((FIT_SEGMENT_LAP_FIELD_NUM)39) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_POS_GRADE ((FIT_SEGMENT_LAP_FIELD_NUM)40) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_NEG_GRADE ((FIT_SEGMENT_LAP_FIELD_NUM)41) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_POS_VERTICAL_SPEED ((FIT_SEGMENT_LAP_FIELD_NUM)45) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_NEG_VERTICAL_SPEED ((FIT_SEGMENT_LAP_FIELD_NUM)46) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_POS_VERTICAL_SPEED ((FIT_SEGMENT_LAP_FIELD_NUM)47) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_NEG_VERTICAL_SPEED ((FIT_SEGMENT_LAP_FIELD_NUM)48) +#define FIT_SEGMENT_LAP_FIELD_NUM_REPETITION_NUM ((FIT_SEGMENT_LAP_FIELD_NUM)53) +#define FIT_SEGMENT_LAP_FIELD_NUM_MIN_ALTITUDE ((FIT_SEGMENT_LAP_FIELD_NUM)54) +#define FIT_SEGMENT_LAP_FIELD_NUM_WKT_STEP_INDEX ((FIT_SEGMENT_LAP_FIELD_NUM)57) +#define FIT_SEGMENT_LAP_FIELD_NUM_FRONT_GEAR_SHIFT_COUNT ((FIT_SEGMENT_LAP_FIELD_NUM)69) +#define FIT_SEGMENT_LAP_FIELD_NUM_REAR_GEAR_SHIFT_COUNT ((FIT_SEGMENT_LAP_FIELD_NUM)70) +#define FIT_SEGMENT_LAP_FIELD_NUM_EVENT ((FIT_SEGMENT_LAP_FIELD_NUM)0) +#define FIT_SEGMENT_LAP_FIELD_NUM_EVENT_TYPE ((FIT_SEGMENT_LAP_FIELD_NUM)1) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_HEART_RATE ((FIT_SEGMENT_LAP_FIELD_NUM)15) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_HEART_RATE ((FIT_SEGMENT_LAP_FIELD_NUM)16) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_CADENCE ((FIT_SEGMENT_LAP_FIELD_NUM)17) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_CADENCE ((FIT_SEGMENT_LAP_FIELD_NUM)18) +#define FIT_SEGMENT_LAP_FIELD_NUM_SPORT ((FIT_SEGMENT_LAP_FIELD_NUM)23) +#define FIT_SEGMENT_LAP_FIELD_NUM_EVENT_GROUP ((FIT_SEGMENT_LAP_FIELD_NUM)24) +#define FIT_SEGMENT_LAP_FIELD_NUM_SUB_SPORT ((FIT_SEGMENT_LAP_FIELD_NUM)32) +#define FIT_SEGMENT_LAP_FIELD_NUM_GPS_ACCURACY ((FIT_SEGMENT_LAP_FIELD_NUM)36) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_TEMPERATURE ((FIT_SEGMENT_LAP_FIELD_NUM)42) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_TEMPERATURE ((FIT_SEGMENT_LAP_FIELD_NUM)43) +#define FIT_SEGMENT_LAP_FIELD_NUM_MIN_HEART_RATE ((FIT_SEGMENT_LAP_FIELD_NUM)55) +#define FIT_SEGMENT_LAP_FIELD_NUM_SPORT_EVENT ((FIT_SEGMENT_LAP_FIELD_NUM)58) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_LEFT_TORQUE_EFFECTIVENESS ((FIT_SEGMENT_LAP_FIELD_NUM)59) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_RIGHT_TORQUE_EFFECTIVENESS ((FIT_SEGMENT_LAP_FIELD_NUM)60) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_LEFT_PEDAL_SMOOTHNESS ((FIT_SEGMENT_LAP_FIELD_NUM)61) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_RIGHT_PEDAL_SMOOTHNESS ((FIT_SEGMENT_LAP_FIELD_NUM)62) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_COMBINED_PEDAL_SMOOTHNESS ((FIT_SEGMENT_LAP_FIELD_NUM)63) +#define FIT_SEGMENT_LAP_FIELD_NUM_STATUS ((FIT_SEGMENT_LAP_FIELD_NUM)64) +#define FIT_SEGMENT_LAP_FIELD_NUM_UUID ((FIT_SEGMENT_LAP_FIELD_NUM)65) +#define FIT_SEGMENT_LAP_FIELD_NUM_AVG_FRACTIONAL_CADENCE ((FIT_SEGMENT_LAP_FIELD_NUM)66) +#define FIT_SEGMENT_LAP_FIELD_NUM_MAX_FRACTIONAL_CADENCE ((FIT_SEGMENT_LAP_FIELD_NUM)67) +#define FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_FRACTIONAL_CYCLES ((FIT_SEGMENT_LAP_FIELD_NUM)68) + +typedef enum +{ + FIT_SEGMENT_LAP_MESG_TIMESTAMP, + FIT_SEGMENT_LAP_MESG_START_TIME, + FIT_SEGMENT_LAP_MESG_START_POSITION_LAT, + FIT_SEGMENT_LAP_MESG_START_POSITION_LONG, + FIT_SEGMENT_LAP_MESG_END_POSITION_LAT, + FIT_SEGMENT_LAP_MESG_END_POSITION_LONG, + FIT_SEGMENT_LAP_MESG_TOTAL_ELAPSED_TIME, + FIT_SEGMENT_LAP_MESG_TOTAL_TIMER_TIME, + FIT_SEGMENT_LAP_MESG_TOTAL_DISTANCE, + FIT_SEGMENT_LAP_MESG_TOTAL_CYCLES, + FIT_SEGMENT_LAP_MESG_NEC_LAT, + FIT_SEGMENT_LAP_MESG_NEC_LONG, + FIT_SEGMENT_LAP_MESG_SWC_LAT, + FIT_SEGMENT_LAP_MESG_SWC_LONG, + FIT_SEGMENT_LAP_MESG_NAME, + FIT_SEGMENT_LAP_MESG_TOTAL_WORK, + FIT_SEGMENT_LAP_MESG_TOTAL_MOVING_TIME, + FIT_SEGMENT_LAP_MESG_TIME_IN_HR_ZONE, + FIT_SEGMENT_LAP_MESG_TIME_IN_SPEED_ZONE, + FIT_SEGMENT_LAP_MESG_TIME_IN_CADENCE_ZONE, + FIT_SEGMENT_LAP_MESG_TIME_IN_POWER_ZONE, + FIT_SEGMENT_LAP_MESG_ACTIVE_TIME, + FIT_SEGMENT_LAP_MESG_MESSAGE_INDEX, + FIT_SEGMENT_LAP_MESG_TOTAL_CALORIES, + FIT_SEGMENT_LAP_MESG_TOTAL_FAT_CALORIES, + FIT_SEGMENT_LAP_MESG_AVG_SPEED, + FIT_SEGMENT_LAP_MESG_MAX_SPEED, + FIT_SEGMENT_LAP_MESG_AVG_POWER, + FIT_SEGMENT_LAP_MESG_MAX_POWER, + FIT_SEGMENT_LAP_MESG_TOTAL_ASCENT, + FIT_SEGMENT_LAP_MESG_TOTAL_DESCENT, + FIT_SEGMENT_LAP_MESG_NORMALIZED_POWER, + FIT_SEGMENT_LAP_MESG_LEFT_RIGHT_BALANCE, + FIT_SEGMENT_LAP_MESG_AVG_ALTITUDE, + FIT_SEGMENT_LAP_MESG_MAX_ALTITUDE, + FIT_SEGMENT_LAP_MESG_AVG_GRADE, + FIT_SEGMENT_LAP_MESG_AVG_POS_GRADE, + FIT_SEGMENT_LAP_MESG_AVG_NEG_GRADE, + FIT_SEGMENT_LAP_MESG_MAX_POS_GRADE, + FIT_SEGMENT_LAP_MESG_MAX_NEG_GRADE, + FIT_SEGMENT_LAP_MESG_AVG_POS_VERTICAL_SPEED, + FIT_SEGMENT_LAP_MESG_AVG_NEG_VERTICAL_SPEED, + FIT_SEGMENT_LAP_MESG_MAX_POS_VERTICAL_SPEED, + FIT_SEGMENT_LAP_MESG_MAX_NEG_VERTICAL_SPEED, + FIT_SEGMENT_LAP_MESG_REPETITION_NUM, + FIT_SEGMENT_LAP_MESG_MIN_ALTITUDE, + FIT_SEGMENT_LAP_MESG_WKT_STEP_INDEX, + FIT_SEGMENT_LAP_MESG_FRONT_GEAR_SHIFT_COUNT, + FIT_SEGMENT_LAP_MESG_REAR_GEAR_SHIFT_COUNT, + FIT_SEGMENT_LAP_MESG_EVENT, + FIT_SEGMENT_LAP_MESG_EVENT_TYPE, + FIT_SEGMENT_LAP_MESG_AVG_HEART_RATE, + FIT_SEGMENT_LAP_MESG_MAX_HEART_RATE, + FIT_SEGMENT_LAP_MESG_AVG_CADENCE, + FIT_SEGMENT_LAP_MESG_MAX_CADENCE, + FIT_SEGMENT_LAP_MESG_SPORT, + FIT_SEGMENT_LAP_MESG_EVENT_GROUP, + FIT_SEGMENT_LAP_MESG_SUB_SPORT, + FIT_SEGMENT_LAP_MESG_GPS_ACCURACY, + FIT_SEGMENT_LAP_MESG_AVG_TEMPERATURE, + FIT_SEGMENT_LAP_MESG_MAX_TEMPERATURE, + FIT_SEGMENT_LAP_MESG_MIN_HEART_RATE, + FIT_SEGMENT_LAP_MESG_SPORT_EVENT, + FIT_SEGMENT_LAP_MESG_AVG_LEFT_TORQUE_EFFECTIVENESS, + FIT_SEGMENT_LAP_MESG_AVG_RIGHT_TORQUE_EFFECTIVENESS, + FIT_SEGMENT_LAP_MESG_AVG_LEFT_PEDAL_SMOOTHNESS, + FIT_SEGMENT_LAP_MESG_AVG_RIGHT_PEDAL_SMOOTHNESS, + FIT_SEGMENT_LAP_MESG_AVG_COMBINED_PEDAL_SMOOTHNESS, + FIT_SEGMENT_LAP_MESG_STATUS, + FIT_SEGMENT_LAP_MESG_UUID, + FIT_SEGMENT_LAP_MESG_AVG_FRACTIONAL_CADENCE, + FIT_SEGMENT_LAP_MESG_MAX_FRACTIONAL_CADENCE, + FIT_SEGMENT_LAP_MESG_TOTAL_FRACTIONAL_CYCLES, + FIT_SEGMENT_LAP_MESG_FIELDS +} FIT_SEGMENT_LAP_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SEGMENT_LAP_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SEGMENT_LAP_MESG_DEF; + +// segment_file message + +#define FIT_SEGMENT_FILE_MESG_SIZE 17 +#define FIT_SEGMENT_FILE_MESG_DEF_SIZE 26 +#define FIT_SEGMENT_FILE_MESG_LEADER_GROUP_PRIMARY_KEY_COUNT 1 +#define FIT_SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID_COUNT 1 +#define FIT_SEGMENT_FILE_MESG_FILE_UUID_COUNT 1 +#define FIT_SEGMENT_FILE_MESG_LEADER_TYPE_COUNT 1 + +typedef struct +{ + FIT_UINT32 user_profile_primary_key; // Primary key of the user that created the segment file + FIT_UINT32 leader_group_primary_key[FIT_SEGMENT_FILE_MESG_LEADER_GROUP_PRIMARY_KEY_COUNT]; // Group primary key of each leader in the segment file + FIT_UINT32 leader_activity_id[FIT_SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID_COUNT]; // Activity ID of each leader in the segment file + FIT_MESSAGE_INDEX message_index; // + FIT_STRING file_uuid[FIT_SEGMENT_FILE_MESG_FILE_UUID_COUNT]; // UUID of the segment file + FIT_BOOL enabled; // Enabled state of the segment file + FIT_SEGMENT_LEADERBOARD_TYPE leader_type[FIT_SEGMENT_FILE_MESG_LEADER_TYPE_COUNT]; // Leader type of each leader in the segment file +} FIT_SEGMENT_FILE_MESG; + +typedef FIT_UINT8 FIT_SEGMENT_FILE_FIELD_NUM; + +#define FIT_SEGMENT_FILE_FIELD_NUM_USER_PROFILE_PRIMARY_KEY ((FIT_SEGMENT_FILE_FIELD_NUM)4) +#define FIT_SEGMENT_FILE_FIELD_NUM_LEADER_GROUP_PRIMARY_KEY ((FIT_SEGMENT_FILE_FIELD_NUM)8) +#define FIT_SEGMENT_FILE_FIELD_NUM_LEADER_ACTIVITY_ID ((FIT_SEGMENT_FILE_FIELD_NUM)9) +#define FIT_SEGMENT_FILE_FIELD_NUM_MESSAGE_INDEX ((FIT_SEGMENT_FILE_FIELD_NUM)254) +#define FIT_SEGMENT_FILE_FIELD_NUM_FILE_UUID ((FIT_SEGMENT_FILE_FIELD_NUM)1) +#define FIT_SEGMENT_FILE_FIELD_NUM_ENABLED ((FIT_SEGMENT_FILE_FIELD_NUM)3) +#define FIT_SEGMENT_FILE_FIELD_NUM_LEADER_TYPE ((FIT_SEGMENT_FILE_FIELD_NUM)7) + +typedef enum +{ + FIT_SEGMENT_FILE_MESG_USER_PROFILE_PRIMARY_KEY, + FIT_SEGMENT_FILE_MESG_LEADER_GROUP_PRIMARY_KEY, + FIT_SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID, + FIT_SEGMENT_FILE_MESG_MESSAGE_INDEX, + FIT_SEGMENT_FILE_MESG_FILE_UUID, + FIT_SEGMENT_FILE_MESG_ENABLED, + FIT_SEGMENT_FILE_MESG_LEADER_TYPE, + FIT_SEGMENT_FILE_MESG_FIELDS +} FIT_SEGMENT_FILE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SEGMENT_FILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SEGMENT_FILE_MESG_DEF; + +// workout message + +#define FIT_WORKOUT_MESG_SIZE 27 +#define FIT_WORKOUT_MESG_DEF_SIZE 26 +#define FIT_WORKOUT_MESG_WKT_NAME_COUNT 16 + +typedef struct +{ + FIT_WORKOUT_CAPABILITIES capabilities; // + FIT_STRING wkt_name[FIT_WORKOUT_MESG_WKT_NAME_COUNT]; // + FIT_UINT16 num_valid_steps; // number of valid steps + FIT_UINT16 pool_length; // 100 * m + 0, + FIT_SPORT sport; // + FIT_SUB_SPORT sub_sport; // + FIT_DISPLAY_MEASURE pool_length_unit; // +} FIT_WORKOUT_MESG; + +typedef FIT_UINT8 FIT_WORKOUT_FIELD_NUM; + +#define FIT_WORKOUT_FIELD_NUM_CAPABILITIES ((FIT_WORKOUT_FIELD_NUM)5) +#define FIT_WORKOUT_FIELD_NUM_WKT_NAME ((FIT_WORKOUT_FIELD_NUM)8) +#define FIT_WORKOUT_FIELD_NUM_NUM_VALID_STEPS ((FIT_WORKOUT_FIELD_NUM)6) +#define FIT_WORKOUT_FIELD_NUM_POOL_LENGTH ((FIT_WORKOUT_FIELD_NUM)14) +#define FIT_WORKOUT_FIELD_NUM_SPORT ((FIT_WORKOUT_FIELD_NUM)4) +#define FIT_WORKOUT_FIELD_NUM_SUB_SPORT ((FIT_WORKOUT_FIELD_NUM)11) +#define FIT_WORKOUT_FIELD_NUM_POOL_LENGTH_UNIT ((FIT_WORKOUT_FIELD_NUM)15) + +typedef enum +{ + FIT_WORKOUT_MESG_CAPABILITIES, + FIT_WORKOUT_MESG_WKT_NAME, + FIT_WORKOUT_MESG_NUM_VALID_STEPS, + FIT_WORKOUT_MESG_POOL_LENGTH, + FIT_WORKOUT_MESG_SPORT, + FIT_WORKOUT_MESG_SUB_SPORT, + FIT_WORKOUT_MESG_POOL_LENGTH_UNIT, + FIT_WORKOUT_MESG_FIELDS +} FIT_WORKOUT_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_WORKOUT_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_WORKOUT_MESG_DEF; + +// workout_session message + +#define FIT_WORKOUT_SESSION_MESG_SIZE 11 +#define FIT_WORKOUT_SESSION_MESG_DEF_SIZE 26 + +typedef struct +{ + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 num_valid_steps; // + FIT_UINT16 first_step_index; // + FIT_UINT16 pool_length; // 100 * m + 0, + FIT_SPORT sport; // + FIT_SUB_SPORT sub_sport; // + FIT_DISPLAY_MEASURE pool_length_unit; // +} FIT_WORKOUT_SESSION_MESG; + +typedef FIT_UINT8 FIT_WORKOUT_SESSION_FIELD_NUM; + +#define FIT_WORKOUT_SESSION_FIELD_NUM_MESSAGE_INDEX ((FIT_WORKOUT_SESSION_FIELD_NUM)254) +#define FIT_WORKOUT_SESSION_FIELD_NUM_NUM_VALID_STEPS ((FIT_WORKOUT_SESSION_FIELD_NUM)2) +#define FIT_WORKOUT_SESSION_FIELD_NUM_FIRST_STEP_INDEX ((FIT_WORKOUT_SESSION_FIELD_NUM)3) +#define FIT_WORKOUT_SESSION_FIELD_NUM_POOL_LENGTH ((FIT_WORKOUT_SESSION_FIELD_NUM)4) +#define FIT_WORKOUT_SESSION_FIELD_NUM_SPORT ((FIT_WORKOUT_SESSION_FIELD_NUM)0) +#define FIT_WORKOUT_SESSION_FIELD_NUM_SUB_SPORT ((FIT_WORKOUT_SESSION_FIELD_NUM)1) +#define FIT_WORKOUT_SESSION_FIELD_NUM_POOL_LENGTH_UNIT ((FIT_WORKOUT_SESSION_FIELD_NUM)5) + +typedef enum +{ + FIT_WORKOUT_SESSION_MESG_MESSAGE_INDEX, + FIT_WORKOUT_SESSION_MESG_NUM_VALID_STEPS, + FIT_WORKOUT_SESSION_MESG_FIRST_STEP_INDEX, + FIT_WORKOUT_SESSION_MESG_POOL_LENGTH, + FIT_WORKOUT_SESSION_MESG_SPORT, + FIT_WORKOUT_SESSION_MESG_SUB_SPORT, + FIT_WORKOUT_SESSION_MESG_POOL_LENGTH_UNIT, + FIT_WORKOUT_SESSION_MESG_FIELDS +} FIT_WORKOUT_SESSION_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_WORKOUT_SESSION_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_WORKOUT_SESSION_MESG_DEF; + +// workout_step message + +#define FIT_WORKOUT_STEP_MESG_SIZE 103 +#define FIT_WORKOUT_STEP_MESG_DEF_SIZE 53 +#define FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT 16 +#define FIT_WORKOUT_STEP_MESG_NOTES_COUNT 50 + +typedef struct +{ + FIT_STRING wkt_step_name[FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT]; // + FIT_UINT32 duration_value; // + FIT_UINT32 target_value; // + FIT_UINT32 custom_target_value_low; // + FIT_UINT32 custom_target_value_high; // + FIT_UINT32 secondary_target_value; // + FIT_UINT32 secondary_custom_target_value_low; // + FIT_UINT32 secondary_custom_target_value_high; // + FIT_MESSAGE_INDEX message_index; // + FIT_EXERCISE_CATEGORY exercise_category; // + FIT_WKT_STEP_DURATION duration_type; // + FIT_WKT_STEP_TARGET target_type; // + FIT_INTENSITY intensity; // + FIT_STRING notes[FIT_WORKOUT_STEP_MESG_NOTES_COUNT]; // + FIT_WORKOUT_EQUIPMENT equipment; // + FIT_WKT_STEP_TARGET secondary_target_type; // +} FIT_WORKOUT_STEP_MESG; + +typedef FIT_UINT8 FIT_WORKOUT_STEP_FIELD_NUM; + +#define FIT_WORKOUT_STEP_FIELD_NUM_WKT_STEP_NAME ((FIT_WORKOUT_STEP_FIELD_NUM)0) +#define FIT_WORKOUT_STEP_FIELD_NUM_DURATION_VALUE ((FIT_WORKOUT_STEP_FIELD_NUM)2) +#define FIT_WORKOUT_STEP_FIELD_NUM_TARGET_VALUE ((FIT_WORKOUT_STEP_FIELD_NUM)4) +#define FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_LOW ((FIT_WORKOUT_STEP_FIELD_NUM)5) +#define FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_HIGH ((FIT_WORKOUT_STEP_FIELD_NUM)6) +#define FIT_WORKOUT_STEP_FIELD_NUM_SECONDARY_TARGET_VALUE ((FIT_WORKOUT_STEP_FIELD_NUM)20) +#define FIT_WORKOUT_STEP_FIELD_NUM_SECONDARY_CUSTOM_TARGET_VALUE_LOW ((FIT_WORKOUT_STEP_FIELD_NUM)21) +#define FIT_WORKOUT_STEP_FIELD_NUM_SECONDARY_CUSTOM_TARGET_VALUE_HIGH ((FIT_WORKOUT_STEP_FIELD_NUM)22) +#define FIT_WORKOUT_STEP_FIELD_NUM_MESSAGE_INDEX ((FIT_WORKOUT_STEP_FIELD_NUM)254) +#define FIT_WORKOUT_STEP_FIELD_NUM_EXERCISE_CATEGORY ((FIT_WORKOUT_STEP_FIELD_NUM)10) +#define FIT_WORKOUT_STEP_FIELD_NUM_DURATION_TYPE ((FIT_WORKOUT_STEP_FIELD_NUM)1) +#define FIT_WORKOUT_STEP_FIELD_NUM_TARGET_TYPE ((FIT_WORKOUT_STEP_FIELD_NUM)3) +#define FIT_WORKOUT_STEP_FIELD_NUM_INTENSITY ((FIT_WORKOUT_STEP_FIELD_NUM)7) +#define FIT_WORKOUT_STEP_FIELD_NUM_NOTES ((FIT_WORKOUT_STEP_FIELD_NUM)8) +#define FIT_WORKOUT_STEP_FIELD_NUM_EQUIPMENT ((FIT_WORKOUT_STEP_FIELD_NUM)9) +#define FIT_WORKOUT_STEP_FIELD_NUM_SECONDARY_TARGET_TYPE ((FIT_WORKOUT_STEP_FIELD_NUM)19) + +typedef enum +{ + FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME, + FIT_WORKOUT_STEP_MESG_DURATION_VALUE, + FIT_WORKOUT_STEP_MESG_TARGET_VALUE, + FIT_WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW, + FIT_WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH, + FIT_WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE, + FIT_WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW, + FIT_WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH, + FIT_WORKOUT_STEP_MESG_MESSAGE_INDEX, + FIT_WORKOUT_STEP_MESG_EXERCISE_CATEGORY, + FIT_WORKOUT_STEP_MESG_DURATION_TYPE, + FIT_WORKOUT_STEP_MESG_TARGET_TYPE, + FIT_WORKOUT_STEP_MESG_INTENSITY, + FIT_WORKOUT_STEP_MESG_NOTES, + FIT_WORKOUT_STEP_MESG_EQUIPMENT, + FIT_WORKOUT_STEP_MESG_SECONDARY_TARGET_TYPE, + FIT_WORKOUT_STEP_MESG_FIELDS +} FIT_WORKOUT_STEP_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_WORKOUT_STEP_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_WORKOUT_STEP_MESG_DEF; + +// exercise_title message + +#define FIT_EXERCISE_TITLE_MESG_SIZE 206 +#define FIT_EXERCISE_TITLE_MESG_DEF_SIZE 17 +#define FIT_EXERCISE_TITLE_MESG_WKT_STEP_NAME_COUNT 200 + +typedef struct +{ + FIT_STRING wkt_step_name[FIT_EXERCISE_TITLE_MESG_WKT_STEP_NAME_COUNT]; // + FIT_MESSAGE_INDEX message_index; // + FIT_EXERCISE_CATEGORY exercise_category; // + FIT_UINT16 exercise_name; // +} FIT_EXERCISE_TITLE_MESG; + +typedef FIT_UINT8 FIT_EXERCISE_TITLE_FIELD_NUM; + +#define FIT_EXERCISE_TITLE_FIELD_NUM_WKT_STEP_NAME ((FIT_EXERCISE_TITLE_FIELD_NUM)2) +#define FIT_EXERCISE_TITLE_FIELD_NUM_MESSAGE_INDEX ((FIT_EXERCISE_TITLE_FIELD_NUM)254) +#define FIT_EXERCISE_TITLE_FIELD_NUM_EXERCISE_CATEGORY ((FIT_EXERCISE_TITLE_FIELD_NUM)0) +#define FIT_EXERCISE_TITLE_FIELD_NUM_EXERCISE_NAME ((FIT_EXERCISE_TITLE_FIELD_NUM)1) + +typedef enum +{ + FIT_EXERCISE_TITLE_MESG_WKT_STEP_NAME, + FIT_EXERCISE_TITLE_MESG_MESSAGE_INDEX, + FIT_EXERCISE_TITLE_MESG_EXERCISE_CATEGORY, + FIT_EXERCISE_TITLE_MESG_EXERCISE_NAME, + FIT_EXERCISE_TITLE_MESG_FIELDS +} FIT_EXERCISE_TITLE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_EXERCISE_TITLE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_EXERCISE_TITLE_MESG_DEF; + +// schedule message + +#define FIT_SCHEDULE_MESG_SIZE 18 +#define FIT_SCHEDULE_MESG_DEF_SIZE 26 + +typedef struct +{ + FIT_UINT32Z serial_number; // Corresponds to file_id of scheduled workout / course. + FIT_DATE_TIME time_created; // Corresponds to file_id of scheduled workout / course. + FIT_LOCAL_DATE_TIME scheduled_time; // + FIT_MANUFACTURER manufacturer; // Corresponds to file_id of scheduled workout / course. + FIT_UINT16 product; // Corresponds to file_id of scheduled workout / course. + FIT_BOOL completed; // TRUE if this activity has been started + FIT_SCHEDULE type; // +} FIT_SCHEDULE_MESG; + +typedef FIT_UINT8 FIT_SCHEDULE_FIELD_NUM; + +#define FIT_SCHEDULE_FIELD_NUM_SERIAL_NUMBER ((FIT_SCHEDULE_FIELD_NUM)2) +#define FIT_SCHEDULE_FIELD_NUM_TIME_CREATED ((FIT_SCHEDULE_FIELD_NUM)3) +#define FIT_SCHEDULE_FIELD_NUM_SCHEDULED_TIME ((FIT_SCHEDULE_FIELD_NUM)6) +#define FIT_SCHEDULE_FIELD_NUM_MANUFACTURER ((FIT_SCHEDULE_FIELD_NUM)0) +#define FIT_SCHEDULE_FIELD_NUM_PRODUCT ((FIT_SCHEDULE_FIELD_NUM)1) +#define FIT_SCHEDULE_FIELD_NUM_COMPLETED ((FIT_SCHEDULE_FIELD_NUM)4) +#define FIT_SCHEDULE_FIELD_NUM_TYPE ((FIT_SCHEDULE_FIELD_NUM)5) + +typedef enum +{ + FIT_SCHEDULE_MESG_SERIAL_NUMBER, + FIT_SCHEDULE_MESG_TIME_CREATED, + FIT_SCHEDULE_MESG_SCHEDULED_TIME, + FIT_SCHEDULE_MESG_MANUFACTURER, + FIT_SCHEDULE_MESG_PRODUCT, + FIT_SCHEDULE_MESG_COMPLETED, + FIT_SCHEDULE_MESG_TYPE, + FIT_SCHEDULE_MESG_FIELDS +} FIT_SCHEDULE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_SCHEDULE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_SCHEDULE_MESG_DEF; + +// totals message + +#define FIT_TOTALS_MESG_SIZE 29 +#define FIT_TOTALS_MESG_DEF_SIZE 32 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_UINT32 timer_time; // 1 * s + 0, Excludes pauses + FIT_UINT32 distance; // 1 * m + 0, + FIT_UINT32 calories; // 1 * kcal + 0, + FIT_UINT32 elapsed_time; // 1 * s + 0, Includes pauses + FIT_UINT32 active_time; // 1 * s + 0, + FIT_MESSAGE_INDEX message_index; // + FIT_UINT16 sessions; // + FIT_SPORT sport; // +} FIT_TOTALS_MESG; + +typedef FIT_UINT8 FIT_TOTALS_FIELD_NUM; + +#define FIT_TOTALS_FIELD_NUM_TIMESTAMP ((FIT_TOTALS_FIELD_NUM)253) +#define FIT_TOTALS_FIELD_NUM_TIMER_TIME ((FIT_TOTALS_FIELD_NUM)0) +#define FIT_TOTALS_FIELD_NUM_DISTANCE ((FIT_TOTALS_FIELD_NUM)1) +#define FIT_TOTALS_FIELD_NUM_CALORIES ((FIT_TOTALS_FIELD_NUM)2) +#define FIT_TOTALS_FIELD_NUM_ELAPSED_TIME ((FIT_TOTALS_FIELD_NUM)4) +#define FIT_TOTALS_FIELD_NUM_ACTIVE_TIME ((FIT_TOTALS_FIELD_NUM)6) +#define FIT_TOTALS_FIELD_NUM_MESSAGE_INDEX ((FIT_TOTALS_FIELD_NUM)254) +#define FIT_TOTALS_FIELD_NUM_SESSIONS ((FIT_TOTALS_FIELD_NUM)5) +#define FIT_TOTALS_FIELD_NUM_SPORT ((FIT_TOTALS_FIELD_NUM)3) + +typedef enum +{ + FIT_TOTALS_MESG_TIMESTAMP, + FIT_TOTALS_MESG_TIMER_TIME, + FIT_TOTALS_MESG_DISTANCE, + FIT_TOTALS_MESG_CALORIES, + FIT_TOTALS_MESG_ELAPSED_TIME, + FIT_TOTALS_MESG_ACTIVE_TIME, + FIT_TOTALS_MESG_MESSAGE_INDEX, + FIT_TOTALS_MESG_SESSIONS, + FIT_TOTALS_MESG_SPORT, + FIT_TOTALS_MESG_FIELDS +} FIT_TOTALS_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_TOTALS_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_TOTALS_MESG_DEF; + +// weight_scale message + +#define FIT_WEIGHT_SCALE_MESG_SIZE 25 +#define FIT_WEIGHT_SCALE_MESG_DEF_SIZE 44 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_WEIGHT weight; // 100 * kg + 0, + FIT_UINT16 percent_fat; // 100 * % + 0, + FIT_UINT16 percent_hydration; // 100 * % + 0, + FIT_UINT16 visceral_fat_mass; // 100 * kg + 0, + FIT_UINT16 bone_mass; // 100 * kg + 0, + FIT_UINT16 muscle_mass; // 100 * kg + 0, + FIT_UINT16 basal_met; // 4 * kcal/day + 0, + FIT_UINT16 active_met; // 4 * kcal/day + 0, ~4kJ per kcal, 0.25 allows max 16384 kcal + FIT_MESSAGE_INDEX user_profile_index; // Associates this weight scale message to a user. This corresponds to the index of the user profile message in the weight scale file. + FIT_UINT8 physique_rating; // + FIT_UINT8 metabolic_age; // 1 * years + 0, + FIT_UINT8 visceral_fat_rating; // +} FIT_WEIGHT_SCALE_MESG; + +typedef FIT_UINT8 FIT_WEIGHT_SCALE_FIELD_NUM; + +#define FIT_WEIGHT_SCALE_FIELD_NUM_TIMESTAMP ((FIT_WEIGHT_SCALE_FIELD_NUM)253) +#define FIT_WEIGHT_SCALE_FIELD_NUM_WEIGHT ((FIT_WEIGHT_SCALE_FIELD_NUM)0) +#define FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_FAT ((FIT_WEIGHT_SCALE_FIELD_NUM)1) +#define FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_HYDRATION ((FIT_WEIGHT_SCALE_FIELD_NUM)2) +#define FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_MASS ((FIT_WEIGHT_SCALE_FIELD_NUM)3) +#define FIT_WEIGHT_SCALE_FIELD_NUM_BONE_MASS ((FIT_WEIGHT_SCALE_FIELD_NUM)4) +#define FIT_WEIGHT_SCALE_FIELD_NUM_MUSCLE_MASS ((FIT_WEIGHT_SCALE_FIELD_NUM)5) +#define FIT_WEIGHT_SCALE_FIELD_NUM_BASAL_MET ((FIT_WEIGHT_SCALE_FIELD_NUM)7) +#define FIT_WEIGHT_SCALE_FIELD_NUM_ACTIVE_MET ((FIT_WEIGHT_SCALE_FIELD_NUM)9) +#define FIT_WEIGHT_SCALE_FIELD_NUM_USER_PROFILE_INDEX ((FIT_WEIGHT_SCALE_FIELD_NUM)12) +#define FIT_WEIGHT_SCALE_FIELD_NUM_PHYSIQUE_RATING ((FIT_WEIGHT_SCALE_FIELD_NUM)8) +#define FIT_WEIGHT_SCALE_FIELD_NUM_METABOLIC_AGE ((FIT_WEIGHT_SCALE_FIELD_NUM)10) +#define FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_RATING ((FIT_WEIGHT_SCALE_FIELD_NUM)11) + +typedef enum +{ + FIT_WEIGHT_SCALE_MESG_TIMESTAMP, + FIT_WEIGHT_SCALE_MESG_WEIGHT, + FIT_WEIGHT_SCALE_MESG_PERCENT_FAT, + FIT_WEIGHT_SCALE_MESG_PERCENT_HYDRATION, + FIT_WEIGHT_SCALE_MESG_VISCERAL_FAT_MASS, + FIT_WEIGHT_SCALE_MESG_BONE_MASS, + FIT_WEIGHT_SCALE_MESG_MUSCLE_MASS, + FIT_WEIGHT_SCALE_MESG_BASAL_MET, + FIT_WEIGHT_SCALE_MESG_ACTIVE_MET, + FIT_WEIGHT_SCALE_MESG_USER_PROFILE_INDEX, + FIT_WEIGHT_SCALE_MESG_PHYSIQUE_RATING, + FIT_WEIGHT_SCALE_MESG_METABOLIC_AGE, + FIT_WEIGHT_SCALE_MESG_VISCERAL_FAT_RATING, + FIT_WEIGHT_SCALE_MESG_FIELDS +} FIT_WEIGHT_SCALE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_WEIGHT_SCALE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_WEIGHT_SCALE_MESG_DEF; + +// blood_pressure message + +#define FIT_BLOOD_PRESSURE_MESG_SIZE 21 +#define FIT_BLOOD_PRESSURE_MESG_DEF_SIZE 38 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_UINT16 systolic_pressure; // 1 * mmHg + 0, + FIT_UINT16 diastolic_pressure; // 1 * mmHg + 0, + FIT_UINT16 mean_arterial_pressure; // 1 * mmHg + 0, + FIT_UINT16 map_3_sample_mean; // 1 * mmHg + 0, + FIT_UINT16 map_morning_values; // 1 * mmHg + 0, + FIT_UINT16 map_evening_values; // 1 * mmHg + 0, + FIT_MESSAGE_INDEX user_profile_index; // Associates this blood pressure message to a user. This corresponds to the index of the user profile message in the blood pressure file. + FIT_UINT8 heart_rate; // 1 * bpm + 0, + FIT_HR_TYPE heart_rate_type; // + FIT_BP_STATUS status; // +} FIT_BLOOD_PRESSURE_MESG; + +typedef FIT_UINT8 FIT_BLOOD_PRESSURE_FIELD_NUM; + +#define FIT_BLOOD_PRESSURE_FIELD_NUM_TIMESTAMP ((FIT_BLOOD_PRESSURE_FIELD_NUM)253) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_SYSTOLIC_PRESSURE ((FIT_BLOOD_PRESSURE_FIELD_NUM)0) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_DIASTOLIC_PRESSURE ((FIT_BLOOD_PRESSURE_FIELD_NUM)1) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_MEAN_ARTERIAL_PRESSURE ((FIT_BLOOD_PRESSURE_FIELD_NUM)2) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_3_SAMPLE_MEAN ((FIT_BLOOD_PRESSURE_FIELD_NUM)3) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_MORNING_VALUES ((FIT_BLOOD_PRESSURE_FIELD_NUM)4) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_EVENING_VALUES ((FIT_BLOOD_PRESSURE_FIELD_NUM)5) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_USER_PROFILE_INDEX ((FIT_BLOOD_PRESSURE_FIELD_NUM)9) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_HEART_RATE ((FIT_BLOOD_PRESSURE_FIELD_NUM)6) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_HEART_RATE_TYPE ((FIT_BLOOD_PRESSURE_FIELD_NUM)7) +#define FIT_BLOOD_PRESSURE_FIELD_NUM_STATUS ((FIT_BLOOD_PRESSURE_FIELD_NUM)8) + +typedef enum +{ + FIT_BLOOD_PRESSURE_MESG_TIMESTAMP, + FIT_BLOOD_PRESSURE_MESG_SYSTOLIC_PRESSURE, + FIT_BLOOD_PRESSURE_MESG_DIASTOLIC_PRESSURE, + FIT_BLOOD_PRESSURE_MESG_MEAN_ARTERIAL_PRESSURE, + FIT_BLOOD_PRESSURE_MESG_MAP_3_SAMPLE_MEAN, + FIT_BLOOD_PRESSURE_MESG_MAP_MORNING_VALUES, + FIT_BLOOD_PRESSURE_MESG_MAP_EVENING_VALUES, + FIT_BLOOD_PRESSURE_MESG_USER_PROFILE_INDEX, + FIT_BLOOD_PRESSURE_MESG_HEART_RATE, + FIT_BLOOD_PRESSURE_MESG_HEART_RATE_TYPE, + FIT_BLOOD_PRESSURE_MESG_STATUS, + FIT_BLOOD_PRESSURE_MESG_FIELDS +} FIT_BLOOD_PRESSURE_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_BLOOD_PRESSURE_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_BLOOD_PRESSURE_MESG_DEF; + +// monitoring_info message + +#define FIT_MONITORING_INFO_MESG_SIZE 8 +#define FIT_MONITORING_INFO_MESG_DEF_SIZE 11 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_LOCAL_DATE_TIME local_timestamp; // 1 * s + 0, Use to convert activity timestamps to local time if device does not support time zone and daylight savings time correction. +} FIT_MONITORING_INFO_MESG; + +typedef FIT_UINT8 FIT_MONITORING_INFO_FIELD_NUM; + +#define FIT_MONITORING_INFO_FIELD_NUM_TIMESTAMP ((FIT_MONITORING_INFO_FIELD_NUM)253) +#define FIT_MONITORING_INFO_FIELD_NUM_LOCAL_TIMESTAMP ((FIT_MONITORING_INFO_FIELD_NUM)0) + +typedef enum +{ + FIT_MONITORING_INFO_MESG_TIMESTAMP, + FIT_MONITORING_INFO_MESG_LOCAL_TIMESTAMP, + FIT_MONITORING_INFO_MESG_FIELDS +} FIT_MONITORING_INFO_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_MONITORING_INFO_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_MONITORING_INFO_MESG_DEF; + +// monitoring message + +#define FIT_MONITORING_MESG_SIZE 31 +#define FIT_MONITORING_MESG_DEF_SIZE 41 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, Must align to logging interval, for example, time must be 00:00:00 for daily log. + FIT_UINT32 distance; // 100 * m + 0, Accumulated distance. Maintained by MonitoringReader for each activity_type. See SDK documentation. + FIT_UINT32 cycles; // 2 * cycles + 0, Accumulated cycles. Maintained by MonitoringReader for each activity_type. See SDK documentation. + FIT_UINT32 active_time; // 1000 * s + 0, + FIT_LOCAL_DATE_TIME local_timestamp; // Must align to logging interval, for example, time must be 00:00:00 for daily log. + FIT_UINT16 calories; // 1 * kcal + 0, Accumulated total calories. Maintained by MonitoringReader for each activity_type. See SDK documentation + FIT_UINT16 distance_16; // 1 * 100 * m + 0, + FIT_UINT16 cycles_16; // 1 * 2 * cycles (steps) + 0, + FIT_UINT16 active_time_16; // 1 * s + 0, + FIT_DEVICE_INDEX device_index; // Associates this data to device_info message. Not required for file with single device (sensor). + FIT_ACTIVITY_TYPE activity_type; // + FIT_ACTIVITY_SUBTYPE activity_subtype; // +} FIT_MONITORING_MESG; + +typedef FIT_UINT8 FIT_MONITORING_FIELD_NUM; + +#define FIT_MONITORING_FIELD_NUM_TIMESTAMP ((FIT_MONITORING_FIELD_NUM)253) +#define FIT_MONITORING_FIELD_NUM_DISTANCE ((FIT_MONITORING_FIELD_NUM)2) +#define FIT_MONITORING_FIELD_NUM_CYCLES ((FIT_MONITORING_FIELD_NUM)3) +#define FIT_MONITORING_FIELD_NUM_ACTIVE_TIME ((FIT_MONITORING_FIELD_NUM)4) +#define FIT_MONITORING_FIELD_NUM_LOCAL_TIMESTAMP ((FIT_MONITORING_FIELD_NUM)11) +#define FIT_MONITORING_FIELD_NUM_CALORIES ((FIT_MONITORING_FIELD_NUM)1) +#define FIT_MONITORING_FIELD_NUM_DISTANCE_16 ((FIT_MONITORING_FIELD_NUM)8) +#define FIT_MONITORING_FIELD_NUM_CYCLES_16 ((FIT_MONITORING_FIELD_NUM)9) +#define FIT_MONITORING_FIELD_NUM_ACTIVE_TIME_16 ((FIT_MONITORING_FIELD_NUM)10) +#define FIT_MONITORING_FIELD_NUM_DEVICE_INDEX ((FIT_MONITORING_FIELD_NUM)0) +#define FIT_MONITORING_FIELD_NUM_ACTIVITY_TYPE ((FIT_MONITORING_FIELD_NUM)5) +#define FIT_MONITORING_FIELD_NUM_ACTIVITY_SUBTYPE ((FIT_MONITORING_FIELD_NUM)6) + +typedef enum +{ + FIT_MONITORING_MESG_TIMESTAMP, + FIT_MONITORING_MESG_DISTANCE, + FIT_MONITORING_MESG_CYCLES, + FIT_MONITORING_MESG_ACTIVE_TIME, + FIT_MONITORING_MESG_LOCAL_TIMESTAMP, + FIT_MONITORING_MESG_CALORIES, + FIT_MONITORING_MESG_DISTANCE_16, + FIT_MONITORING_MESG_CYCLES_16, + FIT_MONITORING_MESG_ACTIVE_TIME_16, + FIT_MONITORING_MESG_DEVICE_INDEX, + FIT_MONITORING_MESG_ACTIVITY_TYPE, + FIT_MONITORING_MESG_ACTIVITY_SUBTYPE, + FIT_MONITORING_MESG_FIELDS +} FIT_MONITORING_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_MONITORING_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_MONITORING_MESG_DEF; + +// hr message + +#define FIT_HR_MESG_SIZE 13 +#define FIT_HR_MESG_DEF_SIZE 23 +#define FIT_HR_MESG_EVENT_TIMESTAMP_COUNT 1 +#define FIT_HR_MESG_FILTERED_BPM_COUNT 1 +#define FIT_HR_MESG_EVENT_TIMESTAMP_12_COUNT 1 + +typedef struct +{ + FIT_DATE_TIME timestamp; // + FIT_UINT32 event_timestamp[FIT_HR_MESG_EVENT_TIMESTAMP_COUNT]; // 1024 * s + 0, + FIT_UINT16 fractional_timestamp; // 32768 * s + 0, + FIT_UINT8 time256; // 256 * s + 0, + FIT_UINT8 filtered_bpm[FIT_HR_MESG_FILTERED_BPM_COUNT]; // 1 * bpm + 0, + FIT_BYTE event_timestamp_12[FIT_HR_MESG_EVENT_TIMESTAMP_12_COUNT]; // +} FIT_HR_MESG; + +typedef FIT_UINT8 FIT_HR_FIELD_NUM; + +#define FIT_HR_FIELD_NUM_TIMESTAMP ((FIT_HR_FIELD_NUM)253) +#define FIT_HR_FIELD_NUM_EVENT_TIMESTAMP ((FIT_HR_FIELD_NUM)9) +#define FIT_HR_FIELD_NUM_FRACTIONAL_TIMESTAMP ((FIT_HR_FIELD_NUM)0) +#define FIT_HR_FIELD_NUM_TIME256 ((FIT_HR_FIELD_NUM)1) +#define FIT_HR_FIELD_NUM_FILTERED_BPM ((FIT_HR_FIELD_NUM)6) +#define FIT_HR_FIELD_NUM_EVENT_TIMESTAMP_12 ((FIT_HR_FIELD_NUM)10) + +typedef enum +{ + FIT_HR_MESG_TIMESTAMP, + FIT_HR_MESG_EVENT_TIMESTAMP, + FIT_HR_MESG_FRACTIONAL_TIMESTAMP, + FIT_HR_MESG_TIME256, + FIT_HR_MESG_FILTERED_BPM, + FIT_HR_MESG_EVENT_TIMESTAMP_12, + FIT_HR_MESG_FIELDS +} FIT_HR_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_HR_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_HR_MESG_DEF; + +// ant_rx message + +#define FIT_ANT_RX_MESG_SIZE 25 +#define FIT_ANT_RX_MESG_DEF_SIZE 23 +#define FIT_ANT_RX_MESG_DATA_COUNT 8 +#define FIT_ANT_RX_MESG_MESG_DATA_COUNT 9 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_BYTE data[FIT_ANT_RX_MESG_DATA_COUNT]; // + FIT_UINT16 fractional_timestamp; // 32768 * s + 0, + FIT_BYTE mesg_id; // + FIT_BYTE mesg_data[FIT_ANT_RX_MESG_MESG_DATA_COUNT]; // + FIT_UINT8 channel_number; // +} FIT_ANT_RX_MESG; + +typedef FIT_UINT8 FIT_ANT_RX_FIELD_NUM; + +#define FIT_ANT_RX_FIELD_NUM_TIMESTAMP ((FIT_ANT_RX_FIELD_NUM)253) +#define FIT_ANT_RX_FIELD_NUM_DATA ((FIT_ANT_RX_FIELD_NUM)4) +#define FIT_ANT_RX_FIELD_NUM_FRACTIONAL_TIMESTAMP ((FIT_ANT_RX_FIELD_NUM)0) +#define FIT_ANT_RX_FIELD_NUM_MESG_ID ((FIT_ANT_RX_FIELD_NUM)1) +#define FIT_ANT_RX_FIELD_NUM_MESG_DATA ((FIT_ANT_RX_FIELD_NUM)2) +#define FIT_ANT_RX_FIELD_NUM_CHANNEL_NUMBER ((FIT_ANT_RX_FIELD_NUM)3) + +typedef enum +{ + FIT_ANT_RX_MESG_TIMESTAMP, + FIT_ANT_RX_MESG_DATA, + FIT_ANT_RX_MESG_FRACTIONAL_TIMESTAMP, + FIT_ANT_RX_MESG_MESG_ID, + FIT_ANT_RX_MESG_MESG_DATA, + FIT_ANT_RX_MESG_CHANNEL_NUMBER, + FIT_ANT_RX_MESG_FIELDS +} FIT_ANT_RX_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_ANT_RX_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_ANT_RX_MESG_DEF; + +// ant_tx message + +#define FIT_ANT_TX_MESG_SIZE 25 +#define FIT_ANT_TX_MESG_DEF_SIZE 23 +#define FIT_ANT_TX_MESG_DATA_COUNT 8 +#define FIT_ANT_TX_MESG_MESG_DATA_COUNT 9 + +typedef struct +{ + FIT_DATE_TIME timestamp; // 1 * s + 0, + FIT_BYTE data[FIT_ANT_TX_MESG_DATA_COUNT]; // + FIT_UINT16 fractional_timestamp; // 32768 * s + 0, + FIT_BYTE mesg_id; // + FIT_BYTE mesg_data[FIT_ANT_TX_MESG_MESG_DATA_COUNT]; // + FIT_UINT8 channel_number; // +} FIT_ANT_TX_MESG; + +typedef FIT_UINT8 FIT_ANT_TX_FIELD_NUM; + +#define FIT_ANT_TX_FIELD_NUM_TIMESTAMP ((FIT_ANT_TX_FIELD_NUM)253) +#define FIT_ANT_TX_FIELD_NUM_DATA ((FIT_ANT_TX_FIELD_NUM)4) +#define FIT_ANT_TX_FIELD_NUM_FRACTIONAL_TIMESTAMP ((FIT_ANT_TX_FIELD_NUM)0) +#define FIT_ANT_TX_FIELD_NUM_MESG_ID ((FIT_ANT_TX_FIELD_NUM)1) +#define FIT_ANT_TX_FIELD_NUM_MESG_DATA ((FIT_ANT_TX_FIELD_NUM)2) +#define FIT_ANT_TX_FIELD_NUM_CHANNEL_NUMBER ((FIT_ANT_TX_FIELD_NUM)3) + +typedef enum +{ + FIT_ANT_TX_MESG_TIMESTAMP, + FIT_ANT_TX_MESG_DATA, + FIT_ANT_TX_MESG_FRACTIONAL_TIMESTAMP, + FIT_ANT_TX_MESG_MESG_ID, + FIT_ANT_TX_MESG_MESG_DATA, + FIT_ANT_TX_MESG_CHANNEL_NUMBER, + FIT_ANT_TX_MESG_FIELDS +} FIT_ANT_TX_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_ANT_TX_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_ANT_TX_MESG_DEF; + +// exd_screen_configuration message + +#define FIT_EXD_SCREEN_CONFIGURATION_MESG_SIZE 4 +#define FIT_EXD_SCREEN_CONFIGURATION_MESG_DEF_SIZE 17 + +typedef struct +{ + FIT_UINT8 screen_index; // + FIT_UINT8 field_count; // number of fields in screen + FIT_EXD_LAYOUT layout; // + FIT_BOOL screen_enabled; // +} FIT_EXD_SCREEN_CONFIGURATION_MESG; + +typedef FIT_UINT8 FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM; + +#define FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_SCREEN_INDEX ((FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM)0) +#define FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_FIELD_COUNT ((FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM)1) +#define FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_LAYOUT ((FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM)2) +#define FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_SCREEN_ENABLED ((FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM)3) + +typedef enum +{ + FIT_EXD_SCREEN_CONFIGURATION_MESG_SCREEN_INDEX, + FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELD_COUNT, + FIT_EXD_SCREEN_CONFIGURATION_MESG_LAYOUT, + FIT_EXD_SCREEN_CONFIGURATION_MESG_SCREEN_ENABLED, + FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELDS +} FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_EXD_SCREEN_CONFIGURATION_MESG_DEF; + +// exd_data_field_configuration message + +#define FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_SIZE 6 +#define FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_DEF_SIZE 23 +#define FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_TITLE_COUNT 1 + +typedef struct +{ + FIT_UINT8 screen_index; // + FIT_BYTE concept_field; // + FIT_UINT8 field_id; // + FIT_UINT8 concept_count; // + FIT_EXD_DISPLAY_TYPE display_type; // + FIT_STRING title[FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_TITLE_COUNT]; // +} FIT_EXD_DATA_FIELD_CONFIGURATION_MESG; + +typedef FIT_UINT8 FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM; + +#define FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_SCREEN_INDEX ((FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM)0) +#define FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_CONCEPT_FIELD ((FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM)1) +#define FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_FIELD_ID ((FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM)2) +#define FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_CONCEPT_COUNT ((FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM)3) +#define FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_DISPLAY_TYPE ((FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM)4) +#define FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_TITLE ((FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM)5) + +typedef enum +{ + FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_SCREEN_INDEX, + FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_CONCEPT_FIELD, + FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELD_ID, + FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_CONCEPT_COUNT, + FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_DISPLAY_TYPE, + FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_TITLE, + FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELDS +} FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_DEF; + +// exd_data_concept_configuration message + +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_SIZE 11 +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DEF_SIZE 38 + +typedef struct +{ + FIT_UINT8 screen_index; // + FIT_BYTE concept_field; // + FIT_UINT8 field_id; // + FIT_UINT8 concept_index; // + FIT_UINT8 data_page; // + FIT_UINT8 concept_key; // + FIT_UINT8 scaling; // + FIT_EXD_DATA_UNITS data_units; // + FIT_EXD_QUALIFIERS qualifier; // + FIT_EXD_DESCRIPTORS descriptor; // + FIT_BOOL is_signed; // +} FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG; + +typedef FIT_UINT8 FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM; + +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_SCREEN_INDEX ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)0) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_CONCEPT_FIELD ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)1) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_FIELD_ID ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)2) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_CONCEPT_INDEX ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)3) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_DATA_PAGE ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)4) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_CONCEPT_KEY ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)5) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_SCALING ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)6) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_DATA_UNITS ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)8) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_QUALIFIER ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)9) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_DESCRIPTOR ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)10) +#define FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_IS_SIGNED ((FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM)11) + +typedef enum +{ + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_SCREEN_INDEX, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_FIELD, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELD_ID, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_INDEX, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DATA_PAGE, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_KEY, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_SCALING, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DATA_UNITS, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_QUALIFIER, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DESCRIPTOR, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_IS_SIGNED, + FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELDS +} FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DEF; + +// hrv message + +#define FIT_HRV_MESG_SIZE 2 +#define FIT_HRV_MESG_DEF_SIZE 8 +#define FIT_HRV_MESG_TIME_COUNT 1 + +typedef struct +{ + FIT_UINT16 time[FIT_HRV_MESG_TIME_COUNT]; // 1000 * s + 0, Time between beats +} FIT_HRV_MESG; + +typedef FIT_UINT8 FIT_HRV_FIELD_NUM; + +#define FIT_HRV_FIELD_NUM_TIME ((FIT_HRV_FIELD_NUM)0) + +typedef enum +{ + FIT_HRV_MESG_TIME, + FIT_HRV_MESG_FIELDS +} FIT_HRV_MESG_FIELD; + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_MESG_NUM global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[FIT_HRV_MESG_FIELDS * FIT_FIELD_DEF_SIZE]; +} FIT_HRV_MESG_DEF; + +typedef enum { + FIT_MESG_PAD, + FIT_MESG_FILE_ID, + FIT_MESG_FILE_CREATOR, + FIT_MESG_SOFTWARE, + FIT_MESG_SLAVE_DEVICE, + FIT_MESG_CAPABILITIES, + FIT_MESG_FILE_CAPABILITIES, + FIT_MESG_MESG_CAPABILITIES, + FIT_MESG_FIELD_CAPABILITIES, + FIT_MESG_DEVICE_SETTINGS, + FIT_MESG_USER_PROFILE, + FIT_MESG_HRM_PROFILE, + FIT_MESG_SDM_PROFILE, + FIT_MESG_BIKE_PROFILE, + FIT_MESG_CONNECTIVITY, + FIT_MESG_ZONES_TARGET, + FIT_MESG_SPORT, + FIT_MESG_HR_ZONE, + FIT_MESG_SPEED_ZONE, + FIT_MESG_CADENCE_ZONE, + FIT_MESG_POWER_ZONE, + FIT_MESG_MET_ZONE, + FIT_MESG_DIVE_SETTINGS, + FIT_MESG_GOAL, + FIT_MESG_ACTIVITY, + FIT_MESG_SESSION, + FIT_MESG_LAP, + FIT_MESG_LENGTH, + FIT_MESG_RECORD, + FIT_MESG_EVENT, + FIT_MESG_DEVICE_INFO, + FIT_MESG_DEVICE_AUX_BATTERY_INFO, + FIT_MESG_TRAINING_FILE, + FIT_MESG_WEATHER_CONDITIONS, + FIT_MESG_WEATHER_ALERT, + FIT_MESG_NMEA_SENTENCE, + FIT_MESG_AVIATION_ATTITUDE, + FIT_MESG_VIDEO_TITLE, + FIT_MESG_VIDEO_DESCRIPTION, + FIT_MESG_SET, + FIT_MESG_FIELD_DESCRIPTION, + FIT_MESG_DEVELOPER_DATA_ID, + FIT_MESG_COURSE, + FIT_MESG_COURSE_POINT, + FIT_MESG_SEGMENT_ID, + FIT_MESG_SEGMENT_LEADERBOARD_ENTRY, + FIT_MESG_SEGMENT_POINT, + FIT_MESG_SEGMENT_LAP, + FIT_MESG_SEGMENT_FILE, + FIT_MESG_WORKOUT, + FIT_MESG_WORKOUT_SESSION, + FIT_MESG_WORKOUT_STEP, + FIT_MESG_EXERCISE_TITLE, + FIT_MESG_SCHEDULE, + FIT_MESG_TOTALS, + FIT_MESG_WEIGHT_SCALE, + FIT_MESG_BLOOD_PRESSURE, + FIT_MESG_MONITORING_INFO, + FIT_MESG_MONITORING, + FIT_MESG_HR, + FIT_MESG_ANT_RX, + FIT_MESG_ANT_TX, + FIT_MESG_EXD_SCREEN_CONFIGURATION, + FIT_MESG_EXD_DATA_FIELD_CONFIGURATION, + FIT_MESG_EXD_DATA_CONCEPT_CONFIGURATION, + FIT_MESG_HRV, + FIT_MESGS +} FIT_MESG; + +typedef const FIT_MESG_DEF * FIT_CONST_MESG_DEF_PTR; +extern const FIT_CONST_MESG_DEF_PTR fit_mesg_defs[FIT_MESGS]; + + + + +/////////////////////////////////////////////////////////////////////// +// Files +// Use FIT_MESG_OFFSET macro get byte offset of messages in a file. +/////////////////////////////////////////////////////////////////////// + +#define FIT_FILE_DATA_SIZE ((FIT_UINT32)63) +#define FIT_FILE_SIZE (FIT_FILE_HDR_SIZE + FIT_FILE_DATA_SIZE + sizeof(FIT_UINT16)) +#define FIT_FILE_MESG_COUNT 1 + +typedef enum { + FIT_FILE_DEF_DEVICE, + FIT_FILE_DEFS +} FIT_FILE_DEF_ENUM; + +typedef enum { + FIT_FILE_INDEX_DEVICE_0, + FIT_FILE_INDEX_COUNT +} FIT_FILE_INDEX; + +#define FIT_FILE_INDEX_DEVICE FIT_FILE_INDEX_DEVICE_0 + +#define FIT_DEVICE_FILE_FILE_ID_MESGS 1 +#define FIT_DEVICE_FILE_DATA_SIZE ((FIT_UINT32)63) +#define FIT_DEVICE_FILE_SIZE (FIT_FILE_HDR_SIZE + FIT_DEVICE_FILE_DATA_SIZE + sizeof(FIT_UINT16)) +#define FIT_DEVICE_FILE_MESG_COUNT 1 +#define FIT_DEVICE_FILE_COUNT 1 + + + +#define FIT_DEVICE_FILE_CRC_PAD_SIZE ((FIT_ALIGNMENT - FIT_FILE_CRC_SIZE) % FIT_ALIGNMENT) + +typedef struct +{ + FIT_UINT8 hdr[FIT_FILE_HDR_SIZE]; + FIT_UINT8 file_id_mesg_def[FIT_HDR_SIZE + FIT_FILE_ID_MESG_DEF_SIZE]; + FIT_UINT8 file_id_mesg[FIT_DEVICE_FILE_FILE_ID_MESGS][FIT_HDR_SIZE + FIT_FILE_ID_MESG_SIZE]; + FIT_UINT8 crc[2]; +} FIT_DEVICE_FILE; + +extern const FIT_DEVICE_FILE fit_device_file; + + +extern const FIT_FILE_DEF fit_file_defs[FIT_FILE_DEFS]; + + + + + +#if defined(__cplusplus) + } +#endif + +#endif // !defined(FIT_EXAMPLE_H) + diff --git a/util/fit/fitprod.py b/util/fit/fitprod.py new file mode 100755 index 000000000..d1ed91673 --- /dev/null +++ b/util/fit/fitprod.py @@ -0,0 +1,41 @@ +#!/bin/python3 + +import re +import time + +print('{\n "VERSION":' + str(int(time.time())) + ',') +print(' "PRODUCTS":[') + +# output the known products captured by GoldenCheetah users +nongarmin = open("nongarmin.json", "r") +lines = nongarmin.readlines() +for line in lines: + print(" " + line, end="") + +# output garmin products as described in the FIT SDK +sdkheader = open("fit_example.h","r") +lines = sdkheader.readlines() +pre=" " +for line in lines: + match = re.search("FIT_GARMIN_PROD", line) + if match: + name = re.search("(FIT_GARMIN_PRODUCT_)([^ \t]*)", line) + id = re.search("\(FIT_GARMIN_PRODUCT\)([ 0-9]*)", line) + if name and id: + # extract name + print(pre+ '{ "manu":1, "prod":' + id.group(1).strip() + ', "name":"' + name.group(2).strip().replace('_',' ').title() + '" }', end="") + pre=",\n " +print("\n ],\n") + +# manufacturers list from FIT SDK + +print(' "MANUFACTURERS":[') +pre=" " +for line in lines: + match = re.search("FIT_MANUFACTURER_([^ \t]*).*\(\(FIT_MANUFACTURER\)([ 0-9]*)", line) + if match: + print(pre+ '{ "manu":' + match.group(2).strip() + ', "name":"' + match.group(1).strip().replace('_',' ').title() + '" }', end="") + pre=",\n " + +print("\n ]\n}") + diff --git a/util/fit/nongarmin.json b/util/fit/nongarmin.json new file mode 100644 index 000000000..db2be35b1 --- /dev/null +++ b/util/fit/nongarmin.json @@ -0,0 +1,69 @@ +{ "manu":6, "prod":6, "name":"SRM PC6" }, +{ "manu":6, "prod":7, "name":"SRM PC7" }, +{ "manu":6, "prod":8, "name":"SRM PC8" }, +{ "manu":6, "prod":-1, "name":"SRM Powercontrol" }, +{ "manu":7, "prod":1, "name":"Quarq Cinqo" }, +{ "manu":7, "prod":9479, "name":"Quarq DZERO" }, +{ "manu":8, "prod":2054, "name":"iBike AeroPod" }, +{ "manu":9, "prod":-1, "name":"Powertap" }, +{ "manu":9, "prod":14, "name":"Joule 2.0" }, +{ "manu":9, "prod":18, "name":"Joule" }, +{ "manu":9, "prod":19, "name":"Joule GPS" }, +{ "manu":9, "prod":22, "name":"Joule GPS+" }, +{ "manu":9, "prod":272, "name":"Powertap C1" }, +{ "manu":9, "prod":288, "name":"Powertap P1" }, +{ "manu":9, "prod":4096, "name":"Powertap G3" }, +{ "manu":9, "prod":4353, "name":"Powercal" }, +{ "manu":29, "prod":1031, "name":"Power2max S" }, +{ "manu":32, "prod":0, "name":"Wahoo fitness" }, +{ "manu":32, "prod":28, "name":"Wahoo ELEMNT" }, +{ "manu":32, "prod":31, "name":"Wahoo ELEMNT BOLT" }, +{ "manu":38, "prod":1, "name":"o_synce navi2coach" }, +{ "manu":48, "prod":2, "name":"Pioneer SGX-CA500" }, +{ "manu":54, "prod":1, "name":"IpBike" }, +{ "manu":69, "prod":1, "name":"Stages Power Gen 1" }, +{ "manu":69, "prod":2, "name":"Stages Power Gen 2" }, +{ "manu":69, "prod":3, "name":"Stages Power Gen 3" }, +{ "manu":70, "prod":15, "name":"SIGMA ROX 10.0" }, +{ "manu":70, "prod":18, "name":"SIGMA ROX 7.0" }, +{ "manu":70, "prod":41, "name":"SIGMA ROX 11.0" }, +{ "manu":70, "prod":42, "name":"SIGMA iD.RUN" }, +{ "manu":70, "prod":43, "name":"SIGMA iD.RUN HR" }, +{ "manu":70, "prod":44, "name":"SIGMA ROX 12.0" }, +{ "manu":70, "prod":45, "name":"SIGMA iD.FREE" }, +{ "manu":70, "prod":46, "name":"SIGMA iD.TRI" }, +{ "manu":70, "prod":47, "name":"SIGMA PURE GPS" }, +{ "manu":70, "prod":49, "name":"SIGMA ROX 11.1" }, +{ "manu":70, "prod":51, "name":"SIGMA ROX 2.0" }, +{ "manu":70, "prod":52, "name":"SIGMA ROX 4.0" }, +{ "manu":76, "prod":-1, "name":"Moxy Monitor" }, +{ "manu":83, "prod":3, "name":"Scosche Rythm+" }, +{ "manu":89, "prod":2800, "name":"Tacx Neo" }, +{ "manu":89, "prod":2850, "name":"Tacx Neo 2 Smart" }, +{ "manu":95, "prod":-1, "name":"Stryd" }, +{ "manu":98, "prod":-1, "name":"BSX" }, +{ "manu":98, "prod":2, "name":"BSX Insight 2" }, +{ "manu":107, "prod":-1, "name":"Magene" }, +{ "manu":108, "prod":-1, "name":"Giant" }, +{ "manu":108, "prod":21845, "name":"Giant Power Pro" }, +{ "manu":115, "prod":-1, "name":"iGPSPORT" }, +{ "manu":116, "prod":-1, "name":"Thinkrider" }, +{ "manu":123, "prod":2, "name":"Polar H10" }, +{ "manu":123, "prod":3, "name":"Polar H9" }, +{ "manu":123, "prod":-1, "name":"Polar" }, +{ "manu":132, "prod":-1, "name":"Cycplus" }, +{ "manu":258, "prod":-1, "name":"Lezyne" }, +{ "manu":258, "prod":4, "name":"Lezyne Super GPS" }, +{ "manu":258, "prod":6, "name":"Lezyne Micro-GPS" }, +{ "manu":258, "prod":11, "name":"Lezyne MegaXL" }, +{ "manu":260, "prod":-1, "name":"Zwift" }, +{ "manu":263, "prod":-1, "name":"Favero" }, +{ "manu":263, "prod":12, "name":"Favero Assioma Duo" }, +{ "manu":267, "prod":-1, "name":"Bryton" }, +{ "manu":268, "prod":-1, "name":"SRAM" }, +{ "manu":268, "prod":1037, "name":"SRAM Rival eTap AXS" }, +{ "manu":268, "prod":1052, "name":"SRAM Rival AXS" }, +{ "manu":282, "prod":-1, "name":"The Sufferfest" }, +{ "manu":284, "prod":-1, "name":"Rouvy" }, +{ "manu":289, "prod":-1, "name":"Hammerhead" }, +{ "manu":255, "prod":-1, "name":"Development" },