diff options
author | jerome-labidurie <jerome@labidurie.fr> | 2015-06-07 13:08:31 +0200 |
---|---|---|
committer | jerome-labidurie <jerome@labidurie.fr> | 2015-06-07 13:08:31 +0200 |
commit | 108c0521929cab17f708693d1123c8d33c17c8d5 (patch) | |
tree | d766ccd77a819c7f873c1e2088aa229c387dddc2 | |
parent | d4ca820063e1c7bf28d371e0ad606533c192d167 (diff) |
Add "length message" management & dump
-rw-r--r-- | src/FIT.cpp | 99 | ||||
-rw-r--r-- | src/FIT.hpp | 5 |
2 files changed, 100 insertions, 4 deletions
diff --git a/src/FIT.cpp b/src/FIT.cpp index e366960..cbf66b9 100644 --- a/src/FIT.cpp +++ b/src/FIT.cpp @@ -201,7 +201,7 @@ FIT::FIT() messageFieldTypeMap[18][8] = MessageFieldTypeTime; messageFieldNameMap[18][9] = "Total Distance"; messageFieldTypeMap[18][9] = MessageFieldTypeOdometr; - messageFieldNameMap[19][10] = "Total Cycles"; + messageFieldNameMap[18][10] = "Total Cycles"; messageFieldNameMap[18][11] = "Total Calories"; messageFieldNameMap[18][13] = "Total Fat Calories"; messageFieldNameMap[18][14] = "Average Speed"; @@ -229,6 +229,11 @@ FIT::FIT() messageFieldTypeMap[18][31] = MessageFieldTypeCoord; messageFieldNameMap[18][32] = "SWC Longitude"; messageFieldTypeMap[18][32] = MessageFieldTypeCoord; + messageFieldNameMap[18][43] = "Swimming Stroke"; + messageFieldTypeMap[18][43] = MessageFieldTypeSwimStroke; + messageFieldNameMap[18][44] = "Pool Length"; + messageFieldNameMap[18][46] = "Pool Length Unit"; + messageFieldTypeMap[18][46] = MessageFieldTypePoolLengthUnit; messageTypeMap[19] = "Lap"; messageFieldNameMap[19][254] = "Index"; @@ -489,6 +494,29 @@ FIT::FIT() messageFieldTypeMap[79][3] = MessageFieldTypeWeight; messageTypeMap[101] = "Length"; + messageFieldNameMap[101][254] = "Index"; + messageFieldNameMap[101][253] = "Timestamp"; + messageFieldTypeMap[101][253] = MessageFieldTypeTimestamp; + messageFieldNameMap[101][0] = "Event"; + messageFieldTypeMap[101][0] = MessageFieldTypeEvent; + messageFieldNameMap[101][1] = "Event Type"; + messageFieldTypeMap[101][0] = MessageFieldTypeEventType; + messageFieldNameMap[101][2] = "Start Time"; + messageFieldTypeMap[101][2] = MessageFieldTypeTimestamp; + messageFieldNameMap[101][3] = "Total Elapsed Time"; + messageFieldTypeMap[101][3] = MessageFieldTypeTime; + messageFieldNameMap[101][4] = "Total Timer Time"; + messageFieldTypeMap[101][4] = MessageFieldTypeTime; + messageFieldNameMap[101][5] = "Total Strokes"; + messageFieldNameMap[101][6] = "Average Speed"; // unit: m/s * 1000 + messageFieldNameMap[101][7] = "Swimming Stroke"; + messageFieldTypeMap[101][7] = MessageFieldTypeSwimStroke; + messageFieldNameMap[101][9] = "Average Swimming Cadence"; + messageFieldNameMap[101][12] = "Length Type"; + messageFieldTypeMap[101][12] = MessageFieldTypeLengthType; + messageFieldNameMap[101][13] = ""; + + messageTypeMap[103] = "Monitoring Info"; messageTypeMap[105] = "PAD"; @@ -607,6 +635,19 @@ FIT::FIT() enumMap[MessageFieldTypeEventType][8] = "Stop Disable"; enumMap[MessageFieldTypeEventType][9] = "Stop Disable All"; + enumMap[MessageFieldTypeSwimStroke][0] = "Freestyle"; + enumMap[MessageFieldTypeSwimStroke][1] = "Backstroke"; + enumMap[MessageFieldTypeSwimStroke][2] = "Breaststroke"; + enumMap[MessageFieldTypeSwimStroke][3] = "Butterlfy"; + enumMap[MessageFieldTypeSwimStroke][4] = "Drill"; + enumMap[MessageFieldTypeSwimStroke][5] = "Mixed"; + + enumMap[MessageFieldTypeLengthType][0] = "Resting"; + enumMap[MessageFieldTypeLengthType][1] = "Active"; + + enumMap[MessageFieldTypePoolLengthUnit][0] = "meters"; + enumMap[MessageFieldTypePoolLengthUnit][1] = "yards"; + manufacturerMap[ManufacturerGarmin] = "Garmin"; manufacturerMap[ManufacturerGarminFR405ANTFS] = "Garmin (FR405 ANTFS)"; manufacturerMap[ManufacturerZephyr] = "Zephyr"; @@ -975,8 +1016,8 @@ bool FIT::parse(vector<uint8_t> &fitData, GPX &gpx) //BaseType bt; //bt.byte = rf.baseType; - //logger() << rd.rfx.globalNum << "." << (unsigned)rf.definitionNum << ": " << messageFieldNameMap[rd.rfx.globalNum][rf.definitionNum] << - // " (" << dataTypeMap[bt.bits.baseTypeNum] << ") " << getDataString(ptr, rf.size, bt.bits.baseTypeNum, rd.rfx.globalNum, rf.definitionNum) << "\n"; +// LOG(LOG_DBG2) << rd.rfx.globalNum << "." << (unsigned)rf.definitionNum << ": " << messageFieldNameMap[rd.rfx.globalNum][rf.definitionNum] << "\n"; +// " (" << dataTypeMap[bt.bits.baseTypeNum] << ") " << getDataString(ptr, rf.size, bt.bits.baseTypeNum, rd.rfx.globalNum, rf.definitionNum) << "\n"; switch(rd.rfx.globalNum) { @@ -1112,6 +1153,58 @@ bool FIT::parse(vector<uint8_t> &fitData, GPX &gpx) } break; } + case 101: // Length + { + LOG(LOG_DBG2) << rd.rfx.globalNum << "." << (unsigned)rf.definitionNum << ": " << messageFieldNameMap[rd.rfx.globalNum][rf.definitionNum]; + switch (rf.definitionNum) + { + case 2 : // Start Time + { + LOG(LOG_DBG2) << getDataString(ptr, 0, BT_UInt32, rd.rfx.globalNum, rf.definitionNum); + break; + } + case 3 : // Total Elapsed Time + { + LOG(LOG_DBG2) << getDataString(ptr, 0, BT_UInt32, rd.rfx.globalNum, rf.definitionNum); + break; + } + case 4 : // Total Timer Time + { + LOG(LOG_DBG2) << getDataString(ptr, 0, BT_UInt32, rd.rfx.globalNum, rf.definitionNum); + break; + } + case 5: // Total Strokes + { + LOG(LOG_DBG2) << *(uint16_t*)ptr; + break; + } + case 6: // Average Speed + { + // unit: m/s * 1000 + double speed = (double)(*(uint16_t*)ptr) / 1000; + LOG(LOG_DBG2) << speed; + + break; + } + case 7: // Swimming stroke + { + LOG(LOG_DBG2) << getDataString(ptr, 0, BT_Enum, rd.rfx.globalNum, rf.definitionNum); + break; + } + case 9: // Average Swimming Cadence + { + LOG(LOG_DBG2) << (int) *(uint8_t*)ptr; + break; + } + case 12: // Length Type + { + LOG(LOG_DBG2) << getDataString(ptr, 0, BT_Enum, rd.rfx.globalNum, rf.definitionNum); + break; + } + } + LOG(LOG_DBG2) << "\n"; + break; + } } ptr += rf.size; diff --git a/src/FIT.hpp b/src/FIT.hpp index d12261d..a6bb7af 100644 --- a/src/FIT.hpp +++ b/src/FIT.hpp @@ -185,7 +185,10 @@ enum MessageFieldTypes MessageFieldTypeLanguage, MessageFieldTypeSport, MessageFieldTypeEvent, - MessageFieldTypeEventType + MessageFieldTypeEventType, + MessageFieldTypeSwimStroke, + MessageFieldTypeLengthType, + MessageFieldTypePoolLengthUnit }; enum Manufacturers |