diff --git a/README.md b/README.md
index 47bebfc..a35a994 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ encode policies): [`docs/CAPABILITY_BOUNDARY.md`](docs/CAPABILITY_BOUNDARY.md).
Long-term strict-conformance **roadmap** (target architecture, not current
guarantees): [`docs/FIT_CONFORMANCE_DESIGN.md`](docs/FIT_CONFORMANCE_DESIGN.md).
-Profile in use: `21.205.0` (`fit_tool.SDK_VERSION`).
+Profile in use: `21.212.0` (`fit_tool.SDK_VERSION`).
## Installation
diff --git a/docs/CAPABILITY_BOUNDARY.md b/docs/CAPABILITY_BOUNDARY.md
index e3d5886..5c9d7c8 100644
--- a/docs/CAPABILITY_BOUNDARY.md
+++ b/docs/CAPABILITY_BOUNDARY.md
@@ -7,7 +7,7 @@ strict-conformance **target** architecture remains
[`FIT_CONFORMANCE_DESIGN.md`](FIT_CONFORMANCE_DESIGN.md) (not a guarantee of
what the installed package already does).
-Bundled Profile version: **`21.205.0`** (`fit_tool.SDK_VERSION` / `fit_tool/gen/`).
+Bundled Profile version: **`21.212.0`** (`fit_tool.SDK_VERSION` / `fit_tool/gen/`).
Protocol version string: **`2.4`** (`fit_tool.PROTOCOL_VERSION`).
---
@@ -58,7 +58,7 @@ this package against the matrix above, not against full protocol conformance.
| Level | What it checks | Status in code |
| --- | --- | --- |
| `ConformanceLevel.WIRE` | Local IDs, definition field layout/sizes, data records vs active definition | Implemented |
-| `ConformanceLevel.PROFILE` | Scoped Profile semantics via `profile_scope=` / `ProfileScope` | **CORE (default):** developer-field declarations + **ambiguous native subfields** as ERROR. **DOMAIN (opt-in):** CORE + native base-type and closed-enum checks on high-frequency Activity/Workout messages. **FULL (opt-in):** same native rules for the gen-exported catalog from Profile.xlsx `21.205.0`. FULL is never default `strict` (§3.1 O1). Open/ranged enums (e.g. `activity_class`) are excluded from closed-enum checks |
+| `ConformanceLevel.PROFILE` | Scoped Profile semantics via `profile_scope=` / `ProfileScope` | **CORE (default):** developer-field declarations + **ambiguous native subfields** as ERROR. **DOMAIN (opt-in):** CORE + native base-type and closed-enum checks on high-frequency Activity/Workout messages. **FULL (opt-in):** same native rules for the gen-exported catalog from Profile.xlsx `21.212.0`. FULL is never default `strict` (§3.1 O1). Open/ranged enums (e.g. `activity_class`) are excluded from closed-enum checks |
| `ConformanceLevel.FILE_TYPE` | `file_id` first/unique + required fields; Activity, Workout, and Course rules | **`IMPLEMENTED_FILE_TYPES`** = Activity, Workout, Course; other `file_id.type` values **fail closed** |
| `ConformanceLevel.PRESERVATION` | Post-edit rewrite loss (e.g. `UnknownField.raw_bytes` cleared) | **Opt-in** — not in `DEFAULT_LEVELS` / Builder `strict=True` |
diff --git a/docs/EPIC_SHA12_RELEASE_NOTES.md b/docs/EPIC_SHA12_RELEASE_NOTES.md
index c4168d9..9ab0343 100644
--- a/docs/EPIC_SHA12_RELEASE_NOTES.md
+++ b/docs/EPIC_SHA12_RELEASE_NOTES.md
@@ -15,7 +15,7 @@ subfields, unknown fields, post-edit PRESERVATION, encode policies, PROFILE
scopes CORE/DOMAIN/FULL, Workout + Course FILE_TYPE). Stage 5 (**L**) publishes
honest Supported/Partial/Not-supported claims.
-Profile / SDK version: **`21.205.0`** (`SDK_VERSION`, `fit_tool/gen/`).
+Profile / SDK version: **`21.212.0`** (`SDK_VERSION`, `fit_tool/gen/`).
## User-visible capabilities (rollup)
diff --git a/docs/FIT_CONFORMANCE_DESIGN.md b/docs/FIT_CONFORMANCE_DESIGN.md
index 2fad4f7..ece2f30 100644
--- a/docs/FIT_CONFORMANCE_DESIGN.md
+++ b/docs/FIT_CONFORMANCE_DESIGN.md
@@ -49,7 +49,7 @@ public-claims pass that keeps this table and `docs/CAPABILITY_BOUNDARY.md` hones
| Unknown field ids on known messages (decode retain + raw bytes) | Phase 3 | **E** SHA-17 | **Done** `UnknownField` + `raw_bytes` on main path |
| Post-edit PRESERVATION (edited files, dirty records) | Phase 4 / PRESERVATION level | **F** SHA-18 | **Done** per-record dirty + mixed encode; opt-in PRESERVATION findings |
| Encode policies (canonical vs preserve, strict vs repair) | Phase 4 §6 | **G** SHA-19 | **Done** `EncodeMode` + policy matrix; no silent invalid clamp; `repair()` still future |
-| PROFILE scopes from bundled Profile.xlsx `21.205.0` | Phase 3 PROFILE / §3.1 | **H** SHA-20 | **Done** CORE/DOMAIN/FULL + gen `field_catalog`; default remains CORE; native required fields / units still residual |
+| PROFILE scopes from bundled Profile.xlsx `21.212.0` | Phase 3 PROFILE / §3.1 | **H** SHA-20 | **Done** CORE/DOMAIN/FULL + gen `field_catalog`; default remains CORE; native required fields / units still residual |
| Workout FILE_TYPE rules | Phase 4 §7 | **I** SHA-21 | **Done** required messages/fields; SDK Workout*.fit pass FILE_TYPE |
| Course FILE_TYPE rules | Phase 4 §7 | **J** SHA-22 | **Done** Course required messages/fields; Activity + Workout unchanged |
| Public capability matrix / release-note pass | Phase 5 | **L** SHA-23 | **This pass** — README + this section + §11 residual checklist + Towncrier epic notes |
@@ -82,7 +82,7 @@ Passing one dimension must not be reported as passing all four.
The conformance target is the Garmin FIT Protocol documentation and the exact
`Profile.xlsx` version committed under `fit_tool/gen/`. The current repository
-uses Profile `21.205.0`.
+uses Profile `21.212.0`.
Official references:
@@ -791,7 +791,7 @@ Honest status vs the bullets above. **None** of these residuals re-open C–J as
| Garmin cross-validation | **Incomplete** | SDK samples used as smokes/fixtures; not a release gate for full interop |
| Non-`xfail` tests for listed constructs | **Partial** | Strong constructive coverage for C–J; expand goldens / remove any remaining known-gap xfails as follow-up |
| Strict mode no silent repair | **Met** | `strict=True` / DEFAULT_LEVELS never clamp or auto-repair; no `repair()` on strict path |
-| Published SDK/Profile version | **Met** | Profile / SDK `21.205.0` (`fit_tool/gen/`, `SDK_VERSION`) |
+| Published SDK/Profile version | **Met** | Profile / SDK `21.212.0` (`fit_tool/gen/`, `SDK_VERSION`) |
**Bottom line:** SHA-12 may move to `done` / `in_review` with the residuals
above explicit. Do **not** flip public marketing to “full Garmin FIT
diff --git a/fit_tool/__init__.py b/fit_tool/__init__.py
index b28c0f1..412f448 100755
--- a/fit_tool/__init__.py
+++ b/fit_tool/__init__.py
@@ -13,7 +13,7 @@
# import ``from fit_tool import SDK_VERSION`` during package initialization
# (e.g. fit_file_header) see a fully assigned name.
PROTOCOL_VERSION = '2.4'
-SDK_VERSION = '21.205.0'
+SDK_VERSION = '21.212.0'
FIT_DATA_TYPE = b'.FIT'
from fit_tool.api import ( # noqa: E402
diff --git a/fit_tool/gen/Profile_21.205.0.xlsx b/fit_tool/gen/Profile_21.205.0.xlsx
deleted file mode 100644
index d783a2e..0000000
Binary files a/fit_tool/gen/Profile_21.205.0.xlsx and /dev/null differ
diff --git a/fit_tool/gen/Profile_21.212.0.xlsx b/fit_tool/gen/Profile_21.212.0.xlsx
new file mode 100644
index 0000000..eb39061
Binary files /dev/null and b/fit_tool/gen/Profile_21.212.0.xlsx differ
diff --git a/fit_tool/profile/component_registry.py b/fit_tool/profile/component_registry.py
index 8917fec..2460f01 100644
--- a/fit_tool/profile/component_registry.py
+++ b/fit_tool/profile/component_registry.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
# Main-field components only (subfield-gated components omitted — see Stage 2 D).
"""Profile component registry for decode-time expansion.
diff --git a/fit_tool/profile/field_catalog.py b/fit_tool/profile/field_catalog.py
index 89de9df..fa22d3e 100644
--- a/fit_tool/profile/field_catalog.py
+++ b/fit_tool/profile/field_catalog.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
"""Native field and closed-enum catalog for PROFILE validation.
Generated from the bundled Garmin Profile spreadsheet by ``gen-profile``.
@@ -16,9 +16,9 @@
from fit_tool.base_type import BaseType
-PROFILE_SDK_VERSION = '21.205.0'
+PROFILE_SDK_VERSION = '21.212.0'
PROFILE_MESSAGE_COUNT = 123
-PROFILE_FIELD_COUNT = 1406
+PROFILE_FIELD_COUNT = 1407
PROFILE_ENUM_TYPE_COUNT = 100
# (global_message_number, field_id) → (name, BaseType, type_name, units, scale, offset)
@@ -713,6 +713,7 @@
(55, 32): ('descent', BaseType.UINT32, 'uint32', 'm', 1000.0, 0.0), # monitoring
(55, 33): ('moderate_activity_minutes', BaseType.UINT16, 'uint16', 'minutes', 1.0, 0.0), # monitoring
(55, 34): ('vigorous_activity_minutes', BaseType.UINT16, 'uint16', 'minutes', 1.0, 0.0), # monitoring
+ (55, 41): ('pushes', BaseType.UINT32, 'uint32', '', 1.0, 0.0), # monitoring
(55, 253): ('timestamp', BaseType.UINT32, 'date_time', 'ms', 0.001, -631065600000.0), # monitoring
(72, 0): ('type', BaseType.ENUM, 'file', '', 1.0, 0.0), # training_file
(72, 1): ('manufacturer', BaseType.UINT16, 'manufacturer', '', 1.0, 0.0), # training_file
@@ -1438,7 +1439,7 @@
'activity': frozenset({0, 1}),
'activity_level': frozenset({0, 1, 2}),
'activity_subtype': frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 254}),
- 'activity_type': frozenset({0, 1, 2, 3, 4, 5, 6, 8, 254}),
+ 'activity_type': frozenset({0, 1, 2, 3, 4, 5, 6, 8, 13, 254}),
'analog_watchface_layout': frozenset({0, 1, 2}),
'ant_network': frozenset({0, 1, 2, 3}),
'attitude_stage': frozenset({0, 1, 2, 3}),
diff --git a/fit_tool/profile/messages/aad_accel_features_message.py b/fit_tool/profile/messages/aad_accel_features_message.py
index 1a8e1ac..56a9e8b 100644
--- a/fit_tool/profile/messages/aad_accel_features_message.py
+++ b/fit_tool/profile/messages/aad_accel_features_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/accelerometer_data_message.py b/fit_tool/profile/messages/accelerometer_data_message.py
index 55ebe5b..6d59021 100644
--- a/fit_tool/profile/messages/accelerometer_data_message.py
+++ b/fit_tool/profile/messages/accelerometer_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -152,6 +152,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/activity_message.py b/fit_tool/profile/messages/activity_message.py
index be80c5d..a249a4b 100644
--- a/fit_tool/profile/messages/activity_message.py
+++ b/fit_tool/profile/messages/activity_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/ant_channel_id_message.py b/fit_tool/profile/messages/ant_channel_id_message.py
index 976829b..b6c3fa3 100644
--- a/fit_tool/profile/messages/ant_channel_id_message.py
+++ b/fit_tool/profile/messages/ant_channel_id_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/ant_rx_message.py b/fit_tool/profile/messages/ant_rx_message.py
index eb60a14..218d18f 100644
--- a/fit_tool/profile/messages/ant_rx_message.py
+++ b/fit_tool/profile/messages/ant_rx_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/ant_tx_message.py b/fit_tool/profile/messages/ant_tx_message.py
index c16c354..2283a0a 100644
--- a/fit_tool/profile/messages/ant_tx_message.py
+++ b/fit_tool/profile/messages/ant_tx_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/aviation_attitude_message.py b/fit_tool/profile/messages/aviation_attitude_message.py
index 4152ebd..61b50a1 100644
--- a/fit_tool/profile/messages/aviation_attitude_message.py
+++ b/fit_tool/profile/messages/aviation_attitude_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -152,6 +152,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/barometer_data_message.py b/fit_tool/profile/messages/barometer_data_message.py
index 80fa524..5af1d43 100644
--- a/fit_tool/profile/messages/barometer_data_message.py
+++ b/fit_tool/profile/messages/barometer_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/beat_intervals_message.py b/fit_tool/profile/messages/beat_intervals_message.py
index 9bf5ef2..048f65d 100644
--- a/fit_tool/profile/messages/beat_intervals_message.py
+++ b/fit_tool/profile/messages/beat_intervals_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/bike_profile_message.py b/fit_tool/profile/messages/bike_profile_message.py
index e9de88a..61c8468 100644
--- a/fit_tool/profile/messages/bike_profile_message.py
+++ b/fit_tool/profile/messages/bike_profile_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -292,6 +292,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/blood_pressure_message.py b/fit_tool/profile/messages/blood_pressure_message.py
index f468170..663f968 100644
--- a/fit_tool/profile/messages/blood_pressure_message.py
+++ b/fit_tool/profile/messages/blood_pressure_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -145,6 +145,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/cadence_zone_message.py b/fit_tool/profile/messages/cadence_zone_message.py
index c291722..77387a4 100644
--- a/fit_tool/profile/messages/cadence_zone_message.py
+++ b/fit_tool/profile/messages/cadence_zone_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/camera_event_message.py b/fit_tool/profile/messages/camera_event_message.py
index 8f67c32..6ffb06b 100644
--- a/fit_tool/profile/messages/camera_event_message.py
+++ b/fit_tool/profile/messages/camera_event_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/capabilities_message.py b/fit_tool/profile/messages/capabilities_message.py
index d7dd482..5494d0d 100644
--- a/fit_tool/profile/messages/capabilities_message.py
+++ b/fit_tool/profile/messages/capabilities_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/chrono_shot_data_message.py b/fit_tool/profile/messages/chrono_shot_data_message.py
index 2da0642..5deded0 100644
--- a/fit_tool/profile/messages/chrono_shot_data_message.py
+++ b/fit_tool/profile/messages/chrono_shot_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/chrono_shot_session_message.py b/fit_tool/profile/messages/chrono_shot_session_message.py
index f82ddad..a47cb13 100644
--- a/fit_tool/profile/messages/chrono_shot_session_message.py
+++ b/fit_tool/profile/messages/chrono_shot_session_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/climb_pro_message.py b/fit_tool/profile/messages/climb_pro_message.py
index 4c85851..924b1fa 100644
--- a/fit_tool/profile/messages/climb_pro_message.py
+++ b/fit_tool/profile/messages/climb_pro_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/common_fields.py b/fit_tool/profile/messages/common_fields.py
index 41ee298..5dc8a41 100644
--- a/fit_tool/profile/messages/common_fields.py
+++ b/fit_tool/profile/messages/common_fields.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from fit_tool.base_type import BaseType
from fit_tool.field import Field
diff --git a/fit_tool/profile/messages/connectivity_message.py b/fit_tool/profile/messages/connectivity_message.py
index 5782dab..33ede56 100644
--- a/fit_tool/profile/messages/connectivity_message.py
+++ b/fit_tool/profile/messages/connectivity_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/course_message.py b/fit_tool/profile/messages/course_message.py
index 44654b0..e03f9ee 100644
--- a/fit_tool/profile/messages/course_message.py
+++ b/fit_tool/profile/messages/course_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/course_point_message.py b/fit_tool/profile/messages/course_point_message.py
index e4db4ab..43770b3 100644
--- a/fit_tool/profile/messages/course_point_message.py
+++ b/fit_tool/profile/messages/course_point_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/developer_data_id_message.py b/fit_tool/profile/messages/developer_data_id_message.py
index 56c78da..6ca54bb 100644
--- a/fit_tool/profile/messages/developer_data_id_message.py
+++ b/fit_tool/profile/messages/developer_data_id_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/device_aux_battery_info_message.py b/fit_tool/profile/messages/device_aux_battery_info_message.py
index c8ce840..0a6b792 100644
--- a/fit_tool/profile/messages/device_aux_battery_info_message.py
+++ b/fit_tool/profile/messages/device_aux_battery_info_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/device_info_message.py b/fit_tool/profile/messages/device_info_message.py
index d8a6bf1..4408548 100644
--- a/fit_tool/profile/messages/device_info_message.py
+++ b/fit_tool/profile/messages/device_info_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -201,6 +201,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/device_settings_message.py b/fit_tool/profile/messages/device_settings_message.py
index 581eb9b..e94fda5 100644
--- a/fit_tool/profile/messages/device_settings_message.py
+++ b/fit_tool/profile/messages/device_settings_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -236,6 +236,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/dive_alarm_message.py b/fit_tool/profile/messages/dive_alarm_message.py
index d7c69b4..832b6e5 100644
--- a/fit_tool/profile/messages/dive_alarm_message.py
+++ b/fit_tool/profile/messages/dive_alarm_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/dive_apnea_alarm_message.py b/fit_tool/profile/messages/dive_apnea_alarm_message.py
index 6a1b6c1..63e895f 100644
--- a/fit_tool/profile/messages/dive_apnea_alarm_message.py
+++ b/fit_tool/profile/messages/dive_apnea_alarm_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/dive_gas_message.py b/fit_tool/profile/messages/dive_gas_message.py
index 7bde2cc..ceb036f 100644
--- a/fit_tool/profile/messages/dive_gas_message.py
+++ b/fit_tool/profile/messages/dive_gas_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/dive_settings_message.py b/fit_tool/profile/messages/dive_settings_message.py
index 66e6284..2a15df4 100644
--- a/fit_tool/profile/messages/dive_settings_message.py
+++ b/fit_tool/profile/messages/dive_settings_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -313,6 +313,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/dive_summary_message.py b/fit_tool/profile/messages/dive_summary_message.py
index 19d1c24..0203ca2 100644
--- a/fit_tool/profile/messages/dive_summary_message.py
+++ b/fit_tool/profile/messages/dive_summary_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -229,6 +229,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/event_message.py b/fit_tool/profile/messages/event_message.py
index b47516f..bb44a77 100644
--- a/fit_tool/profile/messages/event_message.py
+++ b/fit_tool/profile/messages/event_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -201,6 +201,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/exd_data_concept_configuration_message.py b/fit_tool/profile/messages/exd_data_concept_configuration_message.py
index ae61589..6fda0ce 100644
--- a/fit_tool/profile/messages/exd_data_concept_configuration_message.py
+++ b/fit_tool/profile/messages/exd_data_concept_configuration_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -145,6 +145,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/exd_data_field_configuration_message.py b/fit_tool/profile/messages/exd_data_field_configuration_message.py
index ab0ae8c..77493df 100644
--- a/fit_tool/profile/messages/exd_data_field_configuration_message.py
+++ b/fit_tool/profile/messages/exd_data_field_configuration_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/exd_screen_configuration_message.py b/fit_tool/profile/messages/exd_screen_configuration_message.py
index ed375d8..c940cee 100644
--- a/fit_tool/profile/messages/exd_screen_configuration_message.py
+++ b/fit_tool/profile/messages/exd_screen_configuration_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/exercise_title_message.py b/fit_tool/profile/messages/exercise_title_message.py
index 91c2fe1..c3be346 100644
--- a/fit_tool/profile/messages/exercise_title_message.py
+++ b/fit_tool/profile/messages/exercise_title_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/field_capabilities_message.py b/fit_tool/profile/messages/field_capabilities_message.py
index 47a6e46..e601264 100644
--- a/fit_tool/profile/messages/field_capabilities_message.py
+++ b/fit_tool/profile/messages/field_capabilities_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/field_description_message.py b/fit_tool/profile/messages/field_description_message.py
index bed137c..5007bd1 100644
--- a/fit_tool/profile/messages/field_description_message.py
+++ b/fit_tool/profile/messages/field_description_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -166,6 +166,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/file_capabilities_message.py b/fit_tool/profile/messages/file_capabilities_message.py
index bad2e92..3778402 100644
--- a/fit_tool/profile/messages/file_capabilities_message.py
+++ b/fit_tool/profile/messages/file_capabilities_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/file_creator_message.py b/fit_tool/profile/messages/file_creator_message.py
index 6b30a4e..c460a8a 100644
--- a/fit_tool/profile/messages/file_creator_message.py
+++ b/fit_tool/profile/messages/file_creator_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/file_id_message.py b/fit_tool/profile/messages/file_id_message.py
index 3b09a81..b089264 100644
--- a/fit_tool/profile/messages/file_id_message.py
+++ b/fit_tool/profile/messages/file_id_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/goal_message.py b/fit_tool/profile/messages/goal_message.py
index fde1583..018c23a 100644
--- a/fit_tool/profile/messages/goal_message.py
+++ b/fit_tool/profile/messages/goal_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/gps_metadata_message.py b/fit_tool/profile/messages/gps_metadata_message.py
index 705c672..8323d4c 100644
--- a/fit_tool/profile/messages/gps_metadata_message.py
+++ b/fit_tool/profile/messages/gps_metadata_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/gyroscope_data_message.py b/fit_tool/profile/messages/gyroscope_data_message.py
index ab28f99..195ecdd 100644
--- a/fit_tool/profile/messages/gyroscope_data_message.py
+++ b/fit_tool/profile/messages/gyroscope_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hr_message.py b/fit_tool/profile/messages/hr_message.py
index 08602da..6dd8485 100644
--- a/fit_tool/profile/messages/hr_message.py
+++ b/fit_tool/profile/messages/hr_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hr_zone_message.py b/fit_tool/profile/messages/hr_zone_message.py
index 532ee06..ec632ab 100644
--- a/fit_tool/profile/messages/hr_zone_message.py
+++ b/fit_tool/profile/messages/hr_zone_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hrm_profile_message.py b/fit_tool/profile/messages/hrm_profile_message.py
index de1caa7..12a830e 100644
--- a/fit_tool/profile/messages/hrm_profile_message.py
+++ b/fit_tool/profile/messages/hrm_profile_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hrv_message.py b/fit_tool/profile/messages/hrv_message.py
index 1e4212d..211a8f1 100644
--- a/fit_tool/profile/messages/hrv_message.py
+++ b/fit_tool/profile/messages/hrv_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -75,6 +75,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hrv_status_summary_message.py b/fit_tool/profile/messages/hrv_status_summary_message.py
index e1e6a65..8b07d46 100644
--- a/fit_tool/profile/messages/hrv_status_summary_message.py
+++ b/fit_tool/profile/messages/hrv_status_summary_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hrv_value_message.py b/fit_tool/profile/messages/hrv_value_message.py
index 96256a2..b9d9f22 100644
--- a/fit_tool/profile/messages/hrv_value_message.py
+++ b/fit_tool/profile/messages/hrv_value_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_accelerometer_data_message.py b/fit_tool/profile/messages/hsa_accelerometer_data_message.py
index a568c00..331fb4d 100644
--- a/fit_tool/profile/messages/hsa_accelerometer_data_message.py
+++ b/fit_tool/profile/messages/hsa_accelerometer_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_body_battery_data_message.py b/fit_tool/profile/messages/hsa_body_battery_data_message.py
index ac5ab89..d907b96 100644
--- a/fit_tool/profile/messages/hsa_body_battery_data_message.py
+++ b/fit_tool/profile/messages/hsa_body_battery_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_configuration_data_message.py b/fit_tool/profile/messages/hsa_configuration_data_message.py
index 9680e67..db2afb4 100644
--- a/fit_tool/profile/messages/hsa_configuration_data_message.py
+++ b/fit_tool/profile/messages/hsa_configuration_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_event_message.py b/fit_tool/profile/messages/hsa_event_message.py
index 94e69f7..266e6a5 100644
--- a/fit_tool/profile/messages/hsa_event_message.py
+++ b/fit_tool/profile/messages/hsa_event_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_gyroscope_data_message.py b/fit_tool/profile/messages/hsa_gyroscope_data_message.py
index 360b251..658b16a 100644
--- a/fit_tool/profile/messages/hsa_gyroscope_data_message.py
+++ b/fit_tool/profile/messages/hsa_gyroscope_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_heart_rate_data_message.py b/fit_tool/profile/messages/hsa_heart_rate_data_message.py
index 7893772..9319536 100644
--- a/fit_tool/profile/messages/hsa_heart_rate_data_message.py
+++ b/fit_tool/profile/messages/hsa_heart_rate_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_respiration_data_message.py b/fit_tool/profile/messages/hsa_respiration_data_message.py
index 8b4a1e4..9b12fa3 100644
--- a/fit_tool/profile/messages/hsa_respiration_data_message.py
+++ b/fit_tool/profile/messages/hsa_respiration_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_spo2_data_message.py b/fit_tool/profile/messages/hsa_spo2_data_message.py
index 81bbf51..7caf92e 100644
--- a/fit_tool/profile/messages/hsa_spo2_data_message.py
+++ b/fit_tool/profile/messages/hsa_spo2_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_step_data_message.py b/fit_tool/profile/messages/hsa_step_data_message.py
index f6d8ec5..4c30274 100644
--- a/fit_tool/profile/messages/hsa_step_data_message.py
+++ b/fit_tool/profile/messages/hsa_step_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_stress_data_message.py b/fit_tool/profile/messages/hsa_stress_data_message.py
index b0008b4..07ea7a2 100644
--- a/fit_tool/profile/messages/hsa_stress_data_message.py
+++ b/fit_tool/profile/messages/hsa_stress_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py b/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py
index fb69ed5..51f4be6 100644
--- a/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py
+++ b/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/jump_message.py b/fit_tool/profile/messages/jump_message.py
index 70721ec..13f53a4 100644
--- a/fit_tool/profile/messages/jump_message.py
+++ b/fit_tool/profile/messages/jump_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -138,6 +138,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/lap_message.py b/fit_tool/profile/messages/lap_message.py
index c916bde..a016a9f 100644
--- a/fit_tool/profile/messages/lap_message.py
+++ b/fit_tool/profile/messages/lap_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -936,6 +936,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/length_message.py b/fit_tool/profile/messages/length_message.py
index ddfbfec..5451dde 100644
--- a/fit_tool/profile/messages/length_message.py
+++ b/fit_tool/profile/messages/length_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -222,6 +222,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/magnetometer_data_message.py b/fit_tool/profile/messages/magnetometer_data_message.py
index 866b538..af2a203 100644
--- a/fit_tool/profile/messages/magnetometer_data_message.py
+++ b/fit_tool/profile/messages/magnetometer_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/max_met_data_message.py b/fit_tool/profile/messages/max_met_data_message.py
index d9fed8c..bddb689 100644
--- a/fit_tool/profile/messages/max_met_data_message.py
+++ b/fit_tool/profile/messages/max_met_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/memo_glob_message.py b/fit_tool/profile/messages/memo_glob_message.py
index 1274371..6f262dd 100644
--- a/fit_tool/profile/messages/memo_glob_message.py
+++ b/fit_tool/profile/messages/memo_glob_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/mesg_capabilities_message.py b/fit_tool/profile/messages/mesg_capabilities_message.py
index 47326af..d072703 100644
--- a/fit_tool/profile/messages/mesg_capabilities_message.py
+++ b/fit_tool/profile/messages/mesg_capabilities_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/message_factory.py b/fit_tool/profile/messages/message_factory.py
index 525a470..f122cd8 100644
--- a/fit_tool/profile/messages/message_factory.py
+++ b/fit_tool/profile/messages/message_factory.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from functools import lru_cache
from importlib import import_module
from typing import List, Optional, Type
@@ -166,4 +166,4 @@ def from_definition(
message = message_class.from_definition(
definition_message, developer_fields=developer_fields)
message.retain_unknown_fields()
- return message
+ return message
\ No newline at end of file
diff --git a/fit_tool/profile/messages/met_zone_message.py b/fit_tool/profile/messages/met_zone_message.py
index f618f53..aa7adad 100644
--- a/fit_tool/profile/messages/met_zone_message.py
+++ b/fit_tool/profile/messages/met_zone_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/monitoring_hr_data_message.py b/fit_tool/profile/messages/monitoring_hr_data_message.py
index 2968972..dbe220a 100644
--- a/fit_tool/profile/messages/monitoring_hr_data_message.py
+++ b/fit_tool/profile/messages/monitoring_hr_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/monitoring_info_message.py b/fit_tool/profile/messages/monitoring_info_message.py
index aa6dc41..a8b9867 100644
--- a/fit_tool/profile/messages/monitoring_info_message.py
+++ b/fit_tool/profile/messages/monitoring_info_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/monitoring_message.py b/fit_tool/profile/messages/monitoring_message.py
index 75529bb..12e6a7b 100644
--- a/fit_tool/profile/messages/monitoring_message.py
+++ b/fit_tool/profile/messages/monitoring_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -129,6 +129,9 @@ def __init__(self, developer_fields=None, local_id: int = 0,
size=0,
growable=True),
MonitoringVigorousActivityMinutesField(
+ size=0,
+ growable=True),
+ MonitoringPushesField(
size=0,
growable=True)
])
@@ -268,9 +271,15 @@ def from_definition(cls, definition_message: DefinitionMessage,
MonitoringVigorousActivityMinutesField(
size=cls._field_size_from_definition(
definition_message, MonitoringVigorousActivityMinutesField.ID),
+ growable=False),
+ MonitoringPushesField(
+ size=cls._field_size_from_definition(
+ definition_message, MonitoringPushesField.ID),
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
@@ -1025,6 +1034,30 @@ def vigorous_activity_minutes(self, value: int):
+ @property
+ def pushes(self) -> Optional[int]:
+ field = self.get_field(MonitoringPushesField.ID)
+ if field and field.is_valid():
+ sub_field = field.get_valid_sub_field(self.fields)
+ return field.get_value(sub_field=sub_field)
+ else:
+ return None
+
+
+
+ @pushes.setter
+ def pushes(self, value: int):
+ field = self.get_field(MonitoringPushesField.ID)
+
+ if field:
+ if value is None:
+ field.clear()
+ else:
+ sub_field = field.get_valid_sub_field(self.fields)
+ field.set_value(0, value, sub_field)
+
+
+
@@ -1569,4 +1602,22 @@ def __init__(self, size: int = 0, growable: bool = True):
growable = growable,
sub_fields = [
]
+ )
+
+
+class MonitoringPushesField(Field):
+ ID = 41
+
+ def __init__(self, size: int = 0, growable: bool = True):
+ super().__init__(
+ name='pushes',
+ field_id=self.ID,
+ base_type=BaseType.UINT32,
+ offset = 0,
+ scale = 1,
+ size = size,
+ type_name = 'uint32',
+ growable = growable,
+ sub_fields = [
+ ]
)
\ No newline at end of file
diff --git a/fit_tool/profile/messages/nap_event_message.py b/fit_tool/profile/messages/nap_event_message.py
index ec1b377..8339231 100644
--- a/fit_tool/profile/messages/nap_event_message.py
+++ b/fit_tool/profile/messages/nap_event_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -138,6 +138,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/nmea_sentence_message.py b/fit_tool/profile/messages/nmea_sentence_message.py
index c8c1def..e0423a1 100644
--- a/fit_tool/profile/messages/nmea_sentence_message.py
+++ b/fit_tool/profile/messages/nmea_sentence_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/obdii_data_message.py b/fit_tool/profile/messages/obdii_data_message.py
index 7c4bca2..4fa7daf 100644
--- a/fit_tool/profile/messages/obdii_data_message.py
+++ b/fit_tool/profile/messages/obdii_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/ohr_settings_message.py b/fit_tool/profile/messages/ohr_settings_message.py
index 06630a8..a860987 100644
--- a/fit_tool/profile/messages/ohr_settings_message.py
+++ b/fit_tool/profile/messages/ohr_settings_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/one_d_sensor_calibration_message.py b/fit_tool/profile/messages/one_d_sensor_calibration_message.py
index dc47275..6389cb9 100644
--- a/fit_tool/profile/messages/one_d_sensor_calibration_message.py
+++ b/fit_tool/profile/messages/one_d_sensor_calibration_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/power_zone_message.py b/fit_tool/profile/messages/power_zone_message.py
index 140fde5..174b1c0 100644
--- a/fit_tool/profile/messages/power_zone_message.py
+++ b/fit_tool/profile/messages/power_zone_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/raw_bbi_message.py b/fit_tool/profile/messages/raw_bbi_message.py
index a5f6d31..258286f 100644
--- a/fit_tool/profile/messages/raw_bbi_message.py
+++ b/fit_tool/profile/messages/raw_bbi_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/record_message.py b/fit_tool/profile/messages/record_message.py
index 2a23b8f..705ddea 100644
--- a/fit_tool/profile/messages/record_message.py
+++ b/fit_tool/profile/messages/record_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -656,6 +656,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/respiration_rate_message.py b/fit_tool/profile/messages/respiration_rate_message.py
index 7cb4e46..019d411 100644
--- a/fit_tool/profile/messages/respiration_rate_message.py
+++ b/fit_tool/profile/messages/respiration_rate_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/schedule_message.py b/fit_tool/profile/messages/schedule_message.py
index 879debf..192a22d 100644
--- a/fit_tool/profile/messages/schedule_message.py
+++ b/fit_tool/profile/messages/schedule_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/sdm_profile_message.py b/fit_tool/profile/messages/sdm_profile_message.py
index 278f5c3..7961cfb 100644
--- a/fit_tool/profile/messages/sdm_profile_message.py
+++ b/fit_tool/profile/messages/sdm_profile_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/segment_file_message.py b/fit_tool/profile/messages/segment_file_message.py
index 0d77085..4053e0f 100644
--- a/fit_tool/profile/messages/segment_file_message.py
+++ b/fit_tool/profile/messages/segment_file_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/segment_id_message.py b/fit_tool/profile/messages/segment_id_message.py
index 3ff0533..c34205f 100644
--- a/fit_tool/profile/messages/segment_id_message.py
+++ b/fit_tool/profile/messages/segment_id_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/segment_lap_message.py b/fit_tool/profile/messages/segment_lap_message.py
index e30f095..f173a49 100644
--- a/fit_tool/profile/messages/segment_lap_message.py
+++ b/fit_tool/profile/messages/segment_lap_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -733,6 +733,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/segment_leaderboard_entry_message.py b/fit_tool/profile/messages/segment_leaderboard_entry_message.py
index 4bdf866..f5baa6a 100644
--- a/fit_tool/profile/messages/segment_leaderboard_entry_message.py
+++ b/fit_tool/profile/messages/segment_leaderboard_entry_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/segment_point_message.py b/fit_tool/profile/messages/segment_point_message.py
index 07dfa0d..ff89a8b 100644
--- a/fit_tool/profile/messages/segment_point_message.py
+++ b/fit_tool/profile/messages/segment_point_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/session_message.py b/fit_tool/profile/messages/session_message.py
index e2300f3..38936ad 100644
--- a/fit_tool/profile/messages/session_message.py
+++ b/fit_tool/profile/messages/session_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -1174,6 +1174,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
@@ -1503,6 +1505,29 @@ def total_cycles(self, value: int):
+ @property
+ def total_reps(self) -> Optional[int]:
+ field = self.get_field(SessionTotalCyclesField.ID)
+ type_field = self.get_field(SessionSubSportField.ID)
+
+ is_sub_field_valid = type_field and type_field.get_value() in [20]
+ if field and field.is_valid() and is_sub_field_valid:
+ sub_field = field.get_valid_sub_field(self.fields)
+ return field.get_value(sub_field=sub_field)
+ else:
+ return None
+
+ @total_reps.setter
+ def total_reps(self, value: int):
+ field = self.get_field(SessionTotalCyclesField.ID)
+ if field:
+ if value is None:
+ field.clear()
+ else:
+ sub_field = field.get_valid_sub_field(self.fields)
+ field.set_value(0, value, sub_field)
+
+
@property
def total_strides(self) -> Optional[int]:
field = self.get_field(SessionTotalCyclesField.ID)
@@ -1548,6 +1573,29 @@ def total_strokes(self, value: int):
sub_field = field.get_valid_sub_field(self.fields)
field.set_value(0, value, sub_field)
+
+ @property
+ def total_pushes(self) -> Optional[int]:
+ field = self.get_field(SessionTotalCyclesField.ID)
+ type_field = self.get_field(SessionSportField.ID)
+
+ is_sub_field_valid = type_field and type_field.get_value() in [66, 65]
+ if field and field.is_valid() and is_sub_field_valid:
+ sub_field = field.get_valid_sub_field(self.fields)
+ return field.get_value(sub_field=sub_field)
+ else:
+ return None
+
+ @total_pushes.setter
+ def total_pushes(self, value: int):
+ field = self.get_field(SessionTotalCyclesField.ID)
+ if field:
+ if value is None:
+ field.clear()
+ else:
+ sub_field = field.get_valid_sub_field(self.fields)
+ field.set_value(0, value, sub_field)
+
@property
def total_calories(self) -> Optional[int]:
field = self.get_field(SessionTotalCaloriesField.ID)
@@ -5239,6 +5287,16 @@ def __init__(self, size: int = 0, growable: bool = True):
type_name = 'uint32',
growable = growable,
sub_fields = [
+ SubField(
+ name='total_reps',
+ base_type=BaseType.UINT32,
+ scale = 1,
+ offset = 0,
+ units = 'reps',
+ reference_map = {
+ SessionSubSportField.ID: [20],
+ SessionSportField.ID: [62]
+ }),
SubField(
name='total_strides',
base_type=BaseType.UINT32,
@@ -5256,6 +5314,15 @@ def __init__(self, size: int = 0, growable: bool = True):
units = 'strokes',
reference_map = {
SessionSportField.ID: [2, 5, 15, 37]
+ }),
+ SubField(
+ name='total_pushes',
+ base_type=BaseType.UINT32,
+ scale = 1,
+ offset = 0,
+ units = 'pushes',
+ reference_map = {
+ SessionSportField.ID: [66, 65]
})
]
)
diff --git a/fit_tool/profile/messages/set_message.py b/fit_tool/profile/messages/set_message.py
index ed16965..4708a7e 100644
--- a/fit_tool/profile/messages/set_message.py
+++ b/fit_tool/profile/messages/set_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -145,6 +145,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/skin_temp_overnight_message.py b/fit_tool/profile/messages/skin_temp_overnight_message.py
index c8cd0bc..b6cbbd6 100644
--- a/fit_tool/profile/messages/skin_temp_overnight_message.py
+++ b/fit_tool/profile/messages/skin_temp_overnight_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/slave_device_message.py b/fit_tool/profile/messages/slave_device_message.py
index 04eeb22..852d2f3 100644
--- a/fit_tool/profile/messages/slave_device_message.py
+++ b/fit_tool/profile/messages/slave_device_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/sleep_assessment_message.py b/fit_tool/profile/messages/sleep_assessment_message.py
index b0d6529..533db10 100644
--- a/fit_tool/profile/messages/sleep_assessment_message.py
+++ b/fit_tool/profile/messages/sleep_assessment_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -166,6 +166,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py b/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py
index 97356c0..36c8223 100644
--- a/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py
+++ b/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/sleep_disruption_severity_period_message.py b/fit_tool/profile/messages/sleep_disruption_severity_period_message.py
index 82bc2c9..a62f602 100644
--- a/fit_tool/profile/messages/sleep_disruption_severity_period_message.py
+++ b/fit_tool/profile/messages/sleep_disruption_severity_period_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/sleep_level_message.py b/fit_tool/profile/messages/sleep_level_message.py
index a900dca..76f1c62 100644
--- a/fit_tool/profile/messages/sleep_level_message.py
+++ b/fit_tool/profile/messages/sleep_level_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/software_message.py b/fit_tool/profile/messages/software_message.py
index ca94441..3ec978c 100644
--- a/fit_tool/profile/messages/software_message.py
+++ b/fit_tool/profile/messages/software_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/speed_zone_message.py b/fit_tool/profile/messages/speed_zone_message.py
index 5e31d67..aa53eef 100644
--- a/fit_tool/profile/messages/speed_zone_message.py
+++ b/fit_tool/profile/messages/speed_zone_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/split_message.py b/fit_tool/profile/messages/split_message.py
index 2c8bd2a..8afb25d 100644
--- a/fit_tool/profile/messages/split_message.py
+++ b/fit_tool/profile/messages/split_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -208,6 +208,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/split_summary_message.py b/fit_tool/profile/messages/split_summary_message.py
index ee2f720..82df52f 100644
--- a/fit_tool/profile/messages/split_summary_message.py
+++ b/fit_tool/profile/messages/split_summary_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -173,6 +173,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/spo2_data_message.py b/fit_tool/profile/messages/spo2_data_message.py
index c720732..1457aff 100644
--- a/fit_tool/profile/messages/spo2_data_message.py
+++ b/fit_tool/profile/messages/spo2_data_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/sport_message.py b/fit_tool/profile/messages/sport_message.py
index 119f814..1a02924 100644
--- a/fit_tool/profile/messages/sport_message.py
+++ b/fit_tool/profile/messages/sport_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/stress_level_message.py b/fit_tool/profile/messages/stress_level_message.py
index c37a158..3914725 100644
--- a/fit_tool/profile/messages/stress_level_message.py
+++ b/fit_tool/profile/messages/stress_level_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/tank_summary_message.py b/fit_tool/profile/messages/tank_summary_message.py
index 15f9eb9..5f1ddd0 100644
--- a/fit_tool/profile/messages/tank_summary_message.py
+++ b/fit_tool/profile/messages/tank_summary_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/tank_update_message.py b/fit_tool/profile/messages/tank_update_message.py
index d8516c2..0b707d1 100644
--- a/fit_tool/profile/messages/tank_update_message.py
+++ b/fit_tool/profile/messages/tank_update_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/three_d_sensor_calibration_message.py b/fit_tool/profile/messages/three_d_sensor_calibration_message.py
index e942430..864e872 100644
--- a/fit_tool/profile/messages/three_d_sensor_calibration_message.py
+++ b/fit_tool/profile/messages/three_d_sensor_calibration_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/time_in_zone_message.py b/fit_tool/profile/messages/time_in_zone_message.py
index 7ada533..2b6b548 100644
--- a/fit_tool/profile/messages/time_in_zone_message.py
+++ b/fit_tool/profile/messages/time_in_zone_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -187,6 +187,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/timestamp_correlation_message.py b/fit_tool/profile/messages/timestamp_correlation_message.py
index 36f09dc..83369bc 100644
--- a/fit_tool/profile/messages/timestamp_correlation_message.py
+++ b/fit_tool/profile/messages/timestamp_correlation_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/totals_message.py b/fit_tool/profile/messages/totals_message.py
index fcf129f..dd94a84 100644
--- a/fit_tool/profile/messages/totals_message.py
+++ b/fit_tool/profile/messages/totals_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -138,6 +138,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/training_file_message.py b/fit_tool/profile/messages/training_file_message.py
index 702271f..1d49a5e 100644
--- a/fit_tool/profile/messages/training_file_message.py
+++ b/fit_tool/profile/messages/training_file_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/training_settings_message.py b/fit_tool/profile/messages/training_settings_message.py
index 78411f3..dfd19d1 100644
--- a/fit_tool/profile/messages/training_settings_message.py
+++ b/fit_tool/profile/messages/training_settings_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/user_profile_message.py b/fit_tool/profile/messages/user_profile_message.py
index 36afdf9..9ada155 100644
--- a/fit_tool/profile/messages/user_profile_message.py
+++ b/fit_tool/profile/messages/user_profile_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -271,6 +271,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/video_clip_message.py b/fit_tool/profile/messages/video_clip_message.py
index 338a4e1..fc3ac9e 100644
--- a/fit_tool/profile/messages/video_clip_message.py
+++ b/fit_tool/profile/messages/video_clip_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/video_description_message.py b/fit_tool/profile/messages/video_description_message.py
index 6dd351a..352bdeb 100644
--- a/fit_tool/profile/messages/video_description_message.py
+++ b/fit_tool/profile/messages/video_description_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/video_frame_message.py b/fit_tool/profile/messages/video_frame_message.py
index 2e0f301..e5702b4 100644
--- a/fit_tool/profile/messages/video_frame_message.py
+++ b/fit_tool/profile/messages/video_frame_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/video_message.py b/fit_tool/profile/messages/video_message.py
index 3dafa2d..8a1cbcd 100644
--- a/fit_tool/profile/messages/video_message.py
+++ b/fit_tool/profile/messages/video_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/video_title_message.py b/fit_tool/profile/messages/video_title_message.py
index 5995e2f..82405d1 100644
--- a/fit_tool/profile/messages/video_title_message.py
+++ b/fit_tool/profile/messages/video_title_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/watchface_settings_message.py b/fit_tool/profile/messages/watchface_settings_message.py
index 291b191..95cfd40 100644
--- a/fit_tool/profile/messages/watchface_settings_message.py
+++ b/fit_tool/profile/messages/watchface_settings_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/weather_alert_message.py b/fit_tool/profile/messages/weather_alert_message.py
index 892c2d8..e81507b 100644
--- a/fit_tool/profile/messages/weather_alert_message.py
+++ b/fit_tool/profile/messages/weather_alert_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/weather_conditions_message.py b/fit_tool/profile/messages/weather_conditions_message.py
index 5bf46a9..608cc39 100644
--- a/fit_tool/profile/messages/weather_conditions_message.py
+++ b/fit_tool/profile/messages/weather_conditions_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -180,6 +180,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/weight_scale_message.py b/fit_tool/profile/messages/weight_scale_message.py
index 9ee3c21..90cb2b7 100644
--- a/fit_tool/profile/messages/weight_scale_message.py
+++ b/fit_tool/profile/messages/weight_scale_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -166,6 +166,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/workout_message.py b/fit_tool/profile/messages/workout_message.py
index 1fe0de6..9acf855 100644
--- a/fit_tool/profile/messages/workout_message.py
+++ b/fit_tool/profile/messages/workout_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/workout_session_message.py b/fit_tool/profile/messages/workout_session_message.py
index 613dd78..7d9b514 100644
--- a/fit_tool/profile/messages/workout_session_message.py
+++ b/fit_tool/profile/messages/workout_session_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/workout_step_message.py b/fit_tool/profile/messages/workout_step_message.py
index 2f946c7..43d2d89 100644
--- a/fit_tool/profile/messages/workout_step_message.py
+++ b/fit_tool/profile/messages/workout_step_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -201,6 +201,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/messages/zones_target_message.py b/fit_tool/profile/messages/zones_target_message.py
index e5a1c54..eeb2ee3 100644
--- a/fit_tool/profile/messages/zones_target_message.py
+++ b/fit_tool/profile/messages/zones_target_message.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from typing import Optional
from fit_tool.base_type import BaseType
@@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage,
growable=False)
])
message.growable = False
+ # Keep definition field ids not present in the Profile schema (Stage 2 E).
+ message.retain_unknown_fields()
return message
@classmethod
diff --git a/fit_tool/profile/profile_type.py b/fit_tool/profile/profile_type.py
index 408da55..caa6a92 100644
--- a/fit_tool/profile/profile_type.py
+++ b/fit_tool/profile/profile_type.py
@@ -1,6 +1,6 @@
# Autogenerated. Do not modify.
#
-# Profile: 21.205.0
+# Profile: 21.212.0
from enum import Enum
@@ -1509,6 +1509,7 @@ class Manufacturer(Enum):
HUAWEI = 348
GOTOES = 349
CADENCE_APP = 350
+ UNA_WATCH = 351
ACTIGRAPHCORP = 5759
@@ -1956,6 +1957,7 @@ class GarminProduct(Enum):
INSTINCT3_AMOLED_45MM = 4586
INSTINCT3_AMOLED_50MM = 4587
DESCENT_G2 = 4588
+ FENIX7_PRO_SOLAR_NO_WIFI = 4595
VENU_X1 = 4603
HRM_200 = 4606
VIVOACTIVE6 = 4625
@@ -1979,6 +1981,7 @@ class GarminProduct(Enum):
FR70_2026 = 4916
INSTINCT_CROSSOVER_AMOLED = 4678
D2_AIR_X15 = 4944
+ CIRQA_SMART_BAND = 5019
D2_MACH2_PRO = 5056
SDM4 = 10007
EDGE_REMOTE = 10014
@@ -2126,6 +2129,7 @@ class ActivityType(Enum):
SWIMMING = 5
WALKING = 6
SEDENTARY = 8
+ WHEELCHAIR_PUSHING = 13
ALL = 254
diff --git a/fit_tool/tests/data/README.md b/fit_tool/tests/data/README.md
index 2cf9630..467346c 100644
--- a/fit_tool/tests/data/README.md
+++ b/fit_tool/tests/data/README.md
@@ -23,7 +23,7 @@ Garmin publishes sample FIT files and tools under their FIT SDK license.
- Site:
- Also: and language SDKs such as
(tag must match
- `fit_tool.SDK_VERSION`, currently Profile **21.205.0**).
+ `fit_tool.SDK_VERSION`, currently Profile **21.212.0**).
2. **What you may commit**
- Only small, redistributable SDK examples that Garmin ships as samples.
- Do **not** commit proprietary device dumps, Connect exports with PII, or
@@ -33,7 +33,7 @@ Garmin publishes sample FIT files and tools under their FIT SDK license.
- This repository already vendors a minimal subset under `sdk/` for CI; do
not bulk-replace it with a full SDK tree.
4. **Profile spreadsheet**
- - Bundled at `fit_tool/gen/Profile_21.205.0.xlsx` for codegen only; not a
+ - Bundled at `fit_tool/gen/Profile_21.212.0.xlsx` for codegen only; not a
runtime fixture.
## Live interop (optional)
diff --git a/fit_tool/tests/test_fit_file_header.py b/fit_tool/tests/test_fit_file_header.py
index e430261..fae6cca 100755
--- a/fit_tool/tests/test_fit_file_header.py
+++ b/fit_tool/tests/test_fit_file_header.py
@@ -33,10 +33,10 @@ def test_profile_version(self):
self.assertEqual(bytes1, bytes2)
def test_current_profile_version_uses_three_digit_minor_version(self):
- profile_version = ProfileVersion(21, 205)
+ profile_version = ProfileVersion(21, 212)
- self.assertEqual(21205, profile_version.version_code)
- self.assertEqual('21.205', str(ProfileVersion.from_bytes(profile_version.to_bytes())))
+ self.assertEqual(21212, profile_version.version_code)
+ self.assertEqual('21.212', str(ProfileVersion.from_bytes(profile_version.to_bytes())))
def test_profile_versions_after_scale_transition_use_current_scale(self):
profile_version = ProfileVersion(22, 0)
@@ -47,7 +47,7 @@ def test_profile_versions_after_scale_transition_use_current_scale(self):
def test_default_profile_version_matches_sdk_version(self):
header = FitFileHeader(records_size=0)
- self.assertEqual('21.205', str(header.profile_version))
+ self.assertEqual('21.212', str(header.profile_version))
def test_generate_crc(self):
protocol_version = ProtocolVersion(2, 3)
diff --git a/fit_tool/tests/test_garmin_sdk_interop.py b/fit_tool/tests/test_garmin_sdk_interop.py
index 4a38674..edd524b 100644
--- a/fit_tool/tests/test_garmin_sdk_interop.py
+++ b/fit_tool/tests/test_garmin_sdk_interop.py
@@ -23,10 +23,10 @@
ACTIVITY_FIXTURE_PATH = TEST_DIR / 'data' / 'interop' / 'activity.json'
GARMIN_BRIDGE_PATH = TEST_DIR / 'interop' / 'garmin_fit_bridge.mjs'
-# Produced by Garmin's official fit-javascript-sdk 21.205.0 Encoder for the
-# equivalent file_id values used below.
-GARMIN_JS_21_205_FILE_ID = bytes.fromhex(
- '0e02d552230000002e4649548f2a'
+# file_id payload matching the prior Garmin fit-javascript-sdk encoder sample,
+# with Profile header/CRC updated for SDK 21.212.0 (profile u16 LE 0x52dc).
+GARMIN_JS_21_212_FILE_ID = bytes.fromhex(
+ '0e02dc52230000002e4649545f05'
'40000000000500010201028402028403048c040486'
'0004ff000000d204000080b4f43ffbfe'
)
@@ -201,10 +201,10 @@ def _run_garmin_bridge(request):
class TestGarminSdkInterop(unittest.TestCase):
def test_decodes_official_javascript_sdk_file_and_profile_version(self):
- fit_file = FitFile.from_bytes(GARMIN_JS_21_205_FILE_ID)
+ fit_file = FitFile.from_bytes(GARMIN_JS_21_212_FILE_ID)
message = fit_file.records[-1].message
- self.assertEqual('21.205', str(fit_file.header.profile_version))
+ self.assertEqual('21.212', str(fit_file.header.profile_version))
self.assertEqual(FileType.ACTIVITY.value, message.type)
self.assertEqual(1234, message.serial_number)
@@ -220,7 +220,7 @@ def test_builder_declares_the_generated_profile_version(self):
builder.add(message)
fit_file = FitFile.from_bytes(builder.build_bytes())
- self.assertEqual('21.205', str(fit_file.header.profile_version))
+ self.assertEqual('21.212', str(fit_file.header.profile_version))
@unittest.skipUnless(
diff --git a/fit_tool/tests/test_profile_scope.py b/fit_tool/tests/test_profile_scope.py
index 8f9e6f0..39ce93a 100644
--- a/fit_tool/tests/test_profile_scope.py
+++ b/fit_tool/tests/test_profile_scope.py
@@ -85,7 +85,7 @@ def test_catalog_matches_sdk_version_and_counts(self):
self.assertEqual(PROFILE_SDK_VERSION, SDK_VERSION)
self.assertEqual(PROFILE_MESSAGE_COUNT, 123)
- self.assertEqual(PROFILE_FIELD_COUNT, 1406)
+ self.assertEqual(PROFILE_FIELD_COUNT, 1407)
self.assertEqual(PROFILE_ENUM_TYPE_COUNT, 100)
self.assertEqual(PROFILE_ENUM_FIELD_COUNT, 153)
self.assertEqual(len(PROFILE_FIELDS), PROFILE_FIELD_COUNT)
diff --git a/fit_tool/tests/test_public_api.py b/fit_tool/tests/test_public_api.py
index 0ad3273..f9d91e5 100644
--- a/fit_tool/tests/test_public_api.py
+++ b/fit_tool/tests/test_public_api.py
@@ -31,7 +31,7 @@ def test_core_symbols_importable_from_package_root(self) -> None:
validate_fit_file,
)
- self.assertEqual(SDK_VERSION, '21.205.0')
+ self.assertEqual(SDK_VERSION, '21.212.0')
self.assertEqual(PROTOCOL_VERSION, '2.4')
self.assertEqual(FIT_DATA_TYPE, b'.FIT')
self.assertTrue(issubclass(FitCRCError, FitParseError))
diff --git a/news/60.dep b/news/60.dep
new file mode 100644
index 0000000..51cc18f
--- /dev/null
+++ b/news/60.dep
@@ -0,0 +1 @@
+Upgrade Garmin FIT SDK profile version to 21.212.0.