8,319 changes: 8,319 additions & 0 deletions util/fit/fit_example.h

Large diffs are not rendered by default.

41 changes: 41 additions & 0 deletions util/fit/fitprod.py
Original file line number Diff line number Diff line change
@@ -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}")

69 changes: 69 additions & 0 deletions util/fit/nongarmin.json
Original file line number Diff line number Diff line change
@@ -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" },