mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 16:18:42 +00:00
Read and write xdata developer fields to FIT files (#4612)
* Support generic reading and writing FIT developer fields * Move coretemp to generic DEVELOPER fields * Add additional type info for fit dev fields * Add example fit roundtrips * Clean up CIQ format * Switch to embedded json for ciq field * Format json string and reduce tab width on extra tab text box * Store type name as string rather than index * Add scale, offset and message metadata to ciq developer fields Fixes #2553
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
"heightFactor":"2",
|
||||
"style":"0",
|
||||
"resizable":"0",
|
||||
"settings":"{ \"title\": \" \",\n\"description\": \" \",\n\"type\": 1,\n\"animate\": false,\n\"intervalrefresh\": false,\n\"legendpos\": 2,\n\"stack\": false,\n\"orientation\": 1,\n\"bgcolor\": \"#010169\", \n\"scale\": 1,\n\"SERIES\": [\n{ \"name\": \"Core \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"C \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch satramples at end:sl:n xx <- xdata(:qu:TCORE:qu:, secs);:sl:n yy <- xdata(:qu:TCORE:qu:, :qu:Core:qu:);:sl:n annotate(label, :qu:MAX:qu:, round(max(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n} \", \"line\": 1, \"symbol\": 0, \"size\": 3, \"color\": \"#01010f\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": 0, \"fill\": false},\n{ \"name\": \"Skin \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"C \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch satramples at end:sl:n xx <- xdata(:qu:TCORE:qu:, secs);:sl:n yy <- xdata(:qu:TCORE:qu:, :qu:Skin:qu:);:sl:n annotate(label, :qu:MAX:qu:, round(max(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n} \", \"line\": 1, \"symbol\": 0, \"size\": 2, \"color\": \"#010152\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": 0, \"fill\": false},\n{ \"name\": \"HR \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"bpm \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n relevant {:sl:n Data contains :qu:P:qu:;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch samples at end:sl:n xx <- samples(SECS);:sl:n yy <- samples(HEARTRATE);:sl:n:sl:tannotate(label, :qu:AVG:qu:, round(mean(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n}:sl:n \", \"line\": 1, \"symbol\": 0, \"size\": 3, \"color\": \"#ff0000\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": -1, \"fill\": false},\n{ \"name\": \"Power \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"watts \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n relevant {:sl:n Data contains :qu:P:qu:;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch samples at end:sl:n xx <- samples(SECS);:sl:n yy <- samples(POWER);:sl:n:sl:tannotate(label, :qu:AVG:qu:, round(mean(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n}:sl:n \", \"line\": 1, \"symbol\": 0, \"size\": 2, \"color\": \"#53297c\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": -1, \"fill\": true} ]\n,\n\"AXES\": [\n{ \"name\": \"Elapsed Time \", \"type\": 2, \"orientation\": 1, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 0, \"maxy\": 0, \"smooth\": 5, \"groupby\": 0, \"visible\": true, \"fixed\": false, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#55aaff\", \"axiscolor\": \"#55aaff\"},\n{ \"name\": \"C \", \"type\": 0, \"orientation\": 2, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 0, \"maxy\": 0, \"smooth\": 0, \"groupby\": 0, \"visible\": true, \"fixed\": false, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#01010f\", \"axiscolor\": \"#01010f\"},\n{ \"name\": \"bpm \", \"type\": 0, \"orientation\": 2, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 80, \"maxy\": 185, \"smooth\": 0, \"groupby\": 0, \"visible\": true, \"fixed\": true, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#ff0000\", \"axiscolor\": \"#ff0000\"},\n{ \"name\": \"watts \", \"type\": 0, \"orientation\": 2, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 0, \"maxy\": 1000, \"smooth\": 0, \"groupby\": 0, \"visible\": true, \"fixed\": false, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#53297c\", \"axiscolor\": \"#53297c\"} ]\n} ",
|
||||
"settings":"{ \"title\": \" \",\n\"description\": \" \",\n\"type\": 1,\n\"animate\": false,\n\"intervalrefresh\": false,\n\"legendpos\": 2,\n\"stack\": false,\n\"orientation\": 1,\n\"bgcolor\": \"#010169\", \n\"scale\": 1,\n\"SERIES\": [\n{ \"name\": \"Core \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"C \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch satramples at end:sl:n xx <- xdata(:qu:DEVELOPER:qu:, secs);:sl:n yy <- xdata(:qu:DEVELOPER:qu:, :qu:core_temperature:qu:);:sl:n annotate(label, :qu:MAX:qu:, round(max(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n} \", \"line\": 1, \"symbol\": 0, \"size\": 3, \"color\": \"#01010f\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": 0, \"fill\": false},\n{ \"name\": \"Skin \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"C \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch satramples at end:sl:n xx <- xdata(:qu:DEVELOPER:qu:, secs);:sl:n yy <- xdata(:qu:DEVELOPER:qu:, :qu:skin_temperature:qu:);:sl:n annotate(label, :qu:MAX:qu:, round(max(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n} \", \"line\": 1, \"symbol\": 0, \"size\": 2, \"color\": \"#010152\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": 0, \"fill\": false},\n{ \"name\": \"HR \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"bpm \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch samples at end:sl:n xx <- samples(SECS);:sl:n yy <- samples(HEARTRATE);:sl:n:sl:tannotate(label, :qu:AVG:qu:, round(mean(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n}:sl:n \", \"line\": 1, \"symbol\": 0, \"size\": 3, \"color\": \"#ff0000\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": -1, \"fill\": false},\n{ \"name\": \"Power \", \"group\": \" \", \"xname\": \"Elapsed Time \", \"yname\": \"watts \", \"program\": \"{:sl:n init {:sl:n xx<-c();:sl:n yy<-c();:sl:n count<-0;:sl:n }:sl:n:sl:n relevant {:sl:n Data contains :qu:P:qu:;:sl:n }:sl:n:sl:n finalise {:sl:n # we just fetch samples at end:sl:n xx <- samples(SECS);:sl:n yy <- samples(POWER);:sl:n:sl:tannotate(label, :qu:AVG:qu:, round(mean(yy)));:sl:n }:sl:n:sl:n x { xx; }:sl:n y { yy; }:sl:n}:sl:n \", \"line\": 1, \"symbol\": 0, \"size\": 2, \"color\": \"#53297c\", \"opacity\": 100, \"legend\": true, \"opengl\": true, \"datalabels\": false, \"aggregate\": -1, \"fill\": true} ]\n,\n\"AXES\": [\n{ \"name\": \"Elapsed Time \", \"type\": 2, \"orientation\": 1, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 0, \"maxy\": 0, \"smooth\": 5, \"groupby\": 0, \"visible\": true, \"fixed\": false, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#55aaff\", \"axiscolor\": \"#55aaff\"},\n{ \"name\": \"C \", \"type\": 0, \"orientation\": 2, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 0, \"maxy\": 0, \"smooth\": 0, \"groupby\": 0, \"visible\": true, \"fixed\": false, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#01010f\", \"axiscolor\": \"#01010f\"},\n{ \"name\": \"bpm \", \"type\": 0, \"orientation\": 2, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 80, \"maxy\": 185, \"smooth\": 0, \"groupby\": 0, \"visible\": true, \"fixed\": true, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#ff0000\", \"axiscolor\": \"#ff0000\"},\n{ \"name\": \"watts \", \"type\": 0, \"orientation\": 2, \"align\": 1, \"minx\": 0, \"maxx\": 0, \"miny\": 0, \"maxy\": 1000, \"smooth\": 0, \"groupby\": 0, \"visible\": true, \"fixed\": false, \"log\": false, \"minorgrid\": false, \"majorgrid\": true, \"labelcolor\": \"#53297c\", \"axiscolor\": \"#53297c\"} ]\n} ",
|
||||
"__LAST__":"1"
|
||||
}
|
||||
}
|
||||
|
||||
BIN
test/coretemp/FR55-CoreTemp-Walk.fit
Normal file
BIN
test/coretemp/FR55-CoreTemp-Walk.fit
Normal file
Binary file not shown.
BIN
test/coretemp/FR55-loaded-and-saved-via-GC.fit
Normal file
BIN
test/coretemp/FR55-loaded-and-saved-via-GC.fit
Normal file
Binary file not shown.
BIN
test/roundtrip/3386684871-saved.fit
Normal file
BIN
test/roundtrip/3386684871-saved.fit
Normal file
Binary file not shown.
BIN
test/roundtrip/3386684871.fit
Normal file
BIN
test/roundtrip/3386684871.fit
Normal file
Binary file not shown.
BIN
test/roundtrip/Fr955v19.28andStryd-saved.fit
Normal file
BIN
test/roundtrip/Fr955v19.28andStryd-saved.fit
Normal file
Binary file not shown.
BIN
test/roundtrip/Fr955v19.28andStryd.fit
Normal file
BIN
test/roundtrip/Fr955v19.28andStryd.fit
Normal file
Binary file not shown.
Reference in New Issue
Block a user